From 7b691157feacb45c350d18cf33d792084080a601 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Wed, 1 Feb 2023 21:19:29 +0000 Subject: [PATCH 01/87] ext: fatfs-0.14b --- ext/fatfs/LICENSE.txt | 24 + ext/fatfs/documents/00index_e.html | 149 + ext/fatfs/documents/css_e.css | 70 + ext/fatfs/documents/doc/appnote.html | 334 + ext/fatfs/documents/doc/chdir.html | 88 + ext/fatfs/documents/doc/chdrive.html | 70 + ext/fatfs/documents/doc/chmod.html | 89 + ext/fatfs/documents/doc/close.html | 65 + ext/fatfs/documents/doc/closedir.html | 64 + ext/fatfs/documents/doc/config.html | 307 + ext/fatfs/documents/doc/dinit.html | 46 + ext/fatfs/documents/doc/dioctl.html | 101 + ext/fatfs/documents/doc/dread.html | 73 + ext/fatfs/documents/doc/dstat.html | 48 + ext/fatfs/documents/doc/dwrite.html | 76 + ext/fatfs/documents/doc/eof.html | 62 + ext/fatfs/documents/doc/error.html | 62 + ext/fatfs/documents/doc/expand.html | 117 + ext/fatfs/documents/doc/fattime.html | 80 + ext/fatfs/documents/doc/fdisk.html | 95 + ext/fatfs/documents/doc/filename.html | 92 + ext/fatfs/documents/doc/findfirst.html | 118 + ext/fatfs/documents/doc/findnext.html | 69 + ext/fatfs/documents/doc/forward.html | 139 + ext/fatfs/documents/doc/getcwd.html | 83 + ext/fatfs/documents/doc/getfree.html | 94 + ext/fatfs/documents/doc/getlabel.html | 90 + ext/fatfs/documents/doc/gets.html | 65 + ext/fatfs/documents/doc/lseek.html | 139 + ext/fatfs/documents/doc/mkdir.html | 80 + ext/fatfs/documents/doc/mkfs.html | 127 + ext/fatfs/documents/doc/mount.html | 122 + ext/fatfs/documents/doc/open.html | 185 + ext/fatfs/documents/doc/opendir.html | 75 + ext/fatfs/documents/doc/printf.html | 114 + ext/fatfs/documents/doc/putc.html | 60 + ext/fatfs/documents/doc/puts.html | 61 + ext/fatfs/documents/doc/rc.html | 134 + ext/fatfs/documents/doc/read.html | 80 + ext/fatfs/documents/doc/readdir.html | 139 + ext/fatfs/documents/doc/rename.html | 87 + ext/fatfs/documents/doc/sdir.html | 38 + ext/fatfs/documents/doc/setcp.html | 82 + ext/fatfs/documents/doc/setlabel.html | 92 + ext/fatfs/documents/doc/sfatfs.html | 62 + ext/fatfs/documents/doc/sfile.html | 43 + ext/fatfs/documents/doc/sfileinfo.html | 78 + ext/fatfs/documents/doc/size.html | 62 + ext/fatfs/documents/doc/stat.html | 110 + ext/fatfs/documents/doc/sync.html | 88 + ext/fatfs/documents/doc/tell.html | 62 + ext/fatfs/documents/doc/truncate.html | 66 + ext/fatfs/documents/doc/unlink.html | 74 + ext/fatfs/documents/doc/utime.html | 99 + ext/fatfs/documents/doc/write.html | 80 + ext/fatfs/documents/res/app1.c | 44 + ext/fatfs/documents/res/app2.c | 81 + ext/fatfs/documents/res/app3.c | 109 + ext/fatfs/documents/res/app4.c | 315 + ext/fatfs/documents/res/app5.c | 38 + ext/fatfs/documents/res/app6.c | 61 + ext/fatfs/documents/res/f1.png | Bin 0 -> 1414 bytes ext/fatfs/documents/res/f2.png | Bin 0 -> 1458 bytes ext/fatfs/documents/res/f3.png | Bin 0 -> 1039 bytes ext/fatfs/documents/res/f4.png | Bin 0 -> 1973 bytes ext/fatfs/documents/res/f5.png | Bin 0 -> 2224 bytes ext/fatfs/documents/res/f6.png | Bin 0 -> 1464 bytes ext/fatfs/documents/res/f7.png | Bin 0 -> 25760 bytes ext/fatfs/documents/res/funcs.png | Bin 0 -> 26839 bytes ext/fatfs/documents/res/layers.png | Bin 0 -> 5521 bytes ext/fatfs/documents/res/layers1.png | Bin 0 -> 3843 bytes ext/fatfs/documents/res/layers2.png | Bin 0 -> 4950 bytes ext/fatfs/documents/res/layers3.png | Bin 0 -> 2379 bytes ext/fatfs/documents/res/mkfatimg.zip | Bin 0 -> 778875 bytes ext/fatfs/documents/res/mkfs.xlsx | Bin 0 -> 1491997 bytes ext/fatfs/documents/res/modules.png | Bin 0 -> 15396 bytes ext/fatfs/documents/res/rwtest1.png | Bin 0 -> 69114 bytes ext/fatfs/documents/res/rwtest2.png | Bin 0 -> 8153 bytes ext/fatfs/documents/res/rwtest3.png | Bin 0 -> 3011 bytes ext/fatfs/documents/updates.txt | 286 + ext/fatfs/source/00history.txt | 359 + ext/fatfs/source/00readme.txt | 21 + ext/fatfs/source/_ffconf.h | 301 + ext/fatfs/source/diskio.c | 229 + ext/fatfs/source/diskio.h | 77 + ext/fatfs/source/ff.c | 6982 ++++++++++ ext/fatfs/source/ff.h | 422 + ext/fatfs/source/ffsystem.c | 170 + ext/fatfs/source/ffunicode.c | 15593 +++++++++++++++++++++++ 89 files changed, 30297 insertions(+) create mode 100644 ext/fatfs/LICENSE.txt create mode 100644 ext/fatfs/documents/00index_e.html create mode 100644 ext/fatfs/documents/css_e.css create mode 100644 ext/fatfs/documents/doc/appnote.html create mode 100644 ext/fatfs/documents/doc/chdir.html create mode 100644 ext/fatfs/documents/doc/chdrive.html create mode 100644 ext/fatfs/documents/doc/chmod.html create mode 100644 ext/fatfs/documents/doc/close.html create mode 100644 ext/fatfs/documents/doc/closedir.html create mode 100644 ext/fatfs/documents/doc/config.html create mode 100644 ext/fatfs/documents/doc/dinit.html create mode 100644 ext/fatfs/documents/doc/dioctl.html create mode 100644 ext/fatfs/documents/doc/dread.html create mode 100644 ext/fatfs/documents/doc/dstat.html create mode 100644 ext/fatfs/documents/doc/dwrite.html create mode 100644 ext/fatfs/documents/doc/eof.html create mode 100644 ext/fatfs/documents/doc/error.html create mode 100644 ext/fatfs/documents/doc/expand.html create mode 100644 ext/fatfs/documents/doc/fattime.html create mode 100644 ext/fatfs/documents/doc/fdisk.html create mode 100644 ext/fatfs/documents/doc/filename.html create mode 100644 ext/fatfs/documents/doc/findfirst.html create mode 100644 ext/fatfs/documents/doc/findnext.html create mode 100644 ext/fatfs/documents/doc/forward.html create mode 100644 ext/fatfs/documents/doc/getcwd.html create mode 100644 ext/fatfs/documents/doc/getfree.html create mode 100644 ext/fatfs/documents/doc/getlabel.html create mode 100644 ext/fatfs/documents/doc/gets.html create mode 100644 ext/fatfs/documents/doc/lseek.html create mode 100644 ext/fatfs/documents/doc/mkdir.html create mode 100644 ext/fatfs/documents/doc/mkfs.html create mode 100644 ext/fatfs/documents/doc/mount.html create mode 100644 ext/fatfs/documents/doc/open.html create mode 100644 ext/fatfs/documents/doc/opendir.html create mode 100644 ext/fatfs/documents/doc/printf.html create mode 100644 ext/fatfs/documents/doc/putc.html create mode 100644 ext/fatfs/documents/doc/puts.html create mode 100644 ext/fatfs/documents/doc/rc.html create mode 100644 ext/fatfs/documents/doc/read.html create mode 100644 ext/fatfs/documents/doc/readdir.html create mode 100644 ext/fatfs/documents/doc/rename.html create mode 100644 ext/fatfs/documents/doc/sdir.html create mode 100644 ext/fatfs/documents/doc/setcp.html create mode 100644 ext/fatfs/documents/doc/setlabel.html create mode 100644 ext/fatfs/documents/doc/sfatfs.html create mode 100644 ext/fatfs/documents/doc/sfile.html create mode 100644 ext/fatfs/documents/doc/sfileinfo.html create mode 100644 ext/fatfs/documents/doc/size.html create mode 100644 ext/fatfs/documents/doc/stat.html create mode 100644 ext/fatfs/documents/doc/sync.html create mode 100644 ext/fatfs/documents/doc/tell.html create mode 100644 ext/fatfs/documents/doc/truncate.html create mode 100644 ext/fatfs/documents/doc/unlink.html create mode 100644 ext/fatfs/documents/doc/utime.html create mode 100644 ext/fatfs/documents/doc/write.html create mode 100644 ext/fatfs/documents/res/app1.c create mode 100644 ext/fatfs/documents/res/app2.c create mode 100644 ext/fatfs/documents/res/app3.c create mode 100644 ext/fatfs/documents/res/app4.c create mode 100644 ext/fatfs/documents/res/app5.c create mode 100644 ext/fatfs/documents/res/app6.c create mode 100644 ext/fatfs/documents/res/f1.png create mode 100644 ext/fatfs/documents/res/f2.png create mode 100644 ext/fatfs/documents/res/f3.png create mode 100644 ext/fatfs/documents/res/f4.png create mode 100644 ext/fatfs/documents/res/f5.png create mode 100644 ext/fatfs/documents/res/f6.png create mode 100644 ext/fatfs/documents/res/f7.png create mode 100644 ext/fatfs/documents/res/funcs.png create mode 100644 ext/fatfs/documents/res/layers.png create mode 100644 ext/fatfs/documents/res/layers1.png create mode 100644 ext/fatfs/documents/res/layers2.png create mode 100644 ext/fatfs/documents/res/layers3.png create mode 100644 ext/fatfs/documents/res/mkfatimg.zip create mode 100644 ext/fatfs/documents/res/mkfs.xlsx create mode 100644 ext/fatfs/documents/res/modules.png create mode 100644 ext/fatfs/documents/res/rwtest1.png create mode 100644 ext/fatfs/documents/res/rwtest2.png create mode 100644 ext/fatfs/documents/res/rwtest3.png create mode 100644 ext/fatfs/documents/updates.txt create mode 100644 ext/fatfs/source/00history.txt create mode 100644 ext/fatfs/source/00readme.txt create mode 100644 ext/fatfs/source/_ffconf.h create mode 100644 ext/fatfs/source/diskio.c create mode 100644 ext/fatfs/source/diskio.h create mode 100644 ext/fatfs/source/ff.c create mode 100644 ext/fatfs/source/ff.h create mode 100644 ext/fatfs/source/ffsystem.c create mode 100644 ext/fatfs/source/ffunicode.c diff --git a/ext/fatfs/LICENSE.txt b/ext/fatfs/LICENSE.txt new file mode 100644 index 0000000000..25379e46fc --- /dev/null +++ b/ext/fatfs/LICENSE.txt @@ -0,0 +1,24 @@ +FatFs License + +FatFs has being developped as a personal project of the author, ChaN. It is free from the code anyone else wrote at current release. Following code block shows a copy of the FatFs license document that heading the source files. + +/*----------------------------------------------------------------------------/ +/ FatFs - Generic FAT Filesystem Module Rx.xx / +/-----------------------------------------------------------------------------/ +/ +/ Copyright (C) 20xx, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/----------------------------------------------------------------------------*/ + +Therefore FatFs license is one of the BSD-style licenses, but there is a significant feature. FatFs is mainly intended for embedded systems. In order to extend the usability for commercial products, the redistributions of FatFs in binary form, such as embedded code, binary library and any forms without source code, do not need to include about FatFs in the documentations. This is equivalent to the 1-clause BSD license. Of course FatFs is compatible with the most of open source software licenses include GNU GPL. When you redistribute the FatFs source code with changes or create a fork, the license can also be changed to GNU GPL, BSD-style license or any open source software license that not conflict with FatFs license. diff --git a/ext/fatfs/documents/00index_e.html b/ext/fatfs/documents/00index_e.html new file mode 100644 index 0000000000..81185ac1aa --- /dev/null +++ b/ext/fatfs/documents/00index_e.html @@ -0,0 +1,149 @@ + + + + + + + + + + +FatFs - Generic FAT Filesystem Module + + + +

FatFs - Generic FAT Filesystem Module

+
+ +
+layer +

FatFs is a generic FAT/exFAT filesystem module for small embedded systems. The FatFs module is written in compliance with ANSI C (C89) and completely separated from the disk I/O layer. Therefore it is independent of the platform. It can be incorporated into small microcontrollers with limited resource, such as 8051, PIC, AVR, ARM, Z80, RX and etc. Also Petit FatFs module for tiny microcontrollers is available here.

+ +

Features

+ +
+ + +
+

Application Interface

+layer +

FatFs provides various filesystem functions for the applications as shown below.

+ +
+ + +
+

Media Access Interface

+layer +

Since FatFs module is the Filesystem Layer independent of platforms and storage media, it is completely separated from the physical devices, such as memory card, harddisk and any type of storage device. The storage device control module is not any part of FatFs module and it needs to be provided by implementer. FatFs controls the storage devices via a simple media access interface shown below. Also sample implementations for some platforms are available in the downloads. A function checker for storage device control module is available here.

+ +
+ + +
+

Resources

+

The FatFs module is a free software opened for education, research and development. You can use, modify and/or redistribute it for any purpose without any restriction under your responsibility. For further information, refer to the application note.

+
+ +
+
FatFs Home Page
+ + + diff --git a/ext/fatfs/documents/css_e.css b/ext/fatfs/documents/css_e.css new file mode 100644 index 0000000000..be483eefe6 --- /dev/null +++ b/ext/fatfs/documents/css_e.css @@ -0,0 +1,70 @@ +* {margin: 0; padding: 0; border-width: 0;} +body {margin: 8px; background-color: #e0ffff; font-color: black; font-family: serif; line-height: 133%; max-width: 1024px;} +a:link {color: blue;} +a:visited {color: darkmagenta;} +a:hover {background-color: #a0ffff;} +a:active {color: darkmagenta; overflow: hidden; outline:none; position: relative; top: 1px; left: 1px;} +abbr {border-width: 1px;} + +p {margin: 0 0 0.3em 1em;} +i {margin: 0 0.3em 0 0;} +b {margin: 0 0.1em;} +em {font-style: normal; font-weight: bold; margin: 0 0.1em;} +strong {} +pre {border: 1px dashed gray; margin: 0.5em 1em; padding: 0.5em; line-height: 1.2em; font-size: 85%; font-family: "Consolas", "Courier New", monospace; background-color: white;} +pre span.c {color: green;} +pre span.k {color: blue;} +pre span.e {color: red;} +pre span.b {font-weight: bold;} +pre span.arg {font-style: italic;} +tt {margin: 0 0.2em; font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; } +tt.arg {font-style: italic;} +ol {margin: 0.5em 2.5em;} +ul {margin: 0.5em 2em;} +ul ul {margin: 0 2em 0.5em 1em;} +dl {margin: 0.5em 1em;} +dd {margin: 0 2em;} +dt {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace;} +dl.par dt {margin: 0.5em 0 0 0 ; font-style: italic; } +dl.ret dt {margin: 0.5em 0 0 0 ; font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; font-weight: bold; } +hr {border-width: 1px; margin: 1em;} +div.abst {font-family: sans-serif;} +div.para {clear: both; font-family: serif;} +div.ret a {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; } +.equ {text-indent: 0; margin: 1em 2em 1em;} +.indent {margin-left: 2em;} +.rset {float: right; margin: 0.3em 0 0.5em 0.5em;} +.lset {float: left; margin: 0.3em 0.5em 0.5em 0.5em;} +ul.flat li {list-style-type: none; margin: 0;} +a.imglnk img {border: 1px solid;} +.iequ {white-space: nowrap; font-weight: bold;} +.clr {clear: both;} +.it {font-style: italic;} +.mfd {font-size: 0.7em; padding: 0 1px; border: 1px solid; white-space : nowrap} +.ral {text-align: right; } +.lal {text-align: left; } +.cal {text-align: center; } + +h1 {line-height: 1em; font-size: 2em; font-family: sans-serif; padding: 0.3em 0 0.3em;} +h2 {font-size: 2em; font-family: sans-serif; background-color: #d8d8FF; padding: 0.5em 0.5em; margin: 0 0 0.5em;} +h3 {font-size: 1.5em; font-family: sans-serif; margin: 1.5em 0 0.5em;} +div.doc h3 {border-color: #b0d8d8; border-style: solid; border-width: 0px 0px 4px 12px; padding: 4px; margin-top: 3em;} +h4 {font-size: 1.2em; font-family: sans-serif; margin: 2em 0 0.2em;} +h5 {font-size: 1em; font-family: sans-serif; margin: 1em 0 0em;} +p.hdd {float: right; text-align: right; margin-top: 0.5em;} +hr.hds {clear: both; margin-bottom: 1em;} +kbd {letter-spacing: 0;} +small {font-size: 80%;} +.indent {margin-left: 2em;} + +/* Tables */ +table {margin: 0.5em 1em; border-collapse: collapse; border: 2px solid gray; } +th {background-color: white; border-style: solid; border-width: 1px 1px 2px; border-color: gray; padding: 0 3px; vertical-align: top; white-space: nowrap;} +td {background-color: white; border: 1px solid gray; padding: 0 3px; vertical-align: top; line-height: 1.3em;} +table.lst td:first-child {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; white-space: nowrap;} +table.lst2 td {font-size: 0.85em; font-family: "Consolas", "Courier New", monospace; white-space: nowrap;} +table.lst3 td {font-family: "Consolas", "Courier New", monospace; white-space: nowrap;} +table caption {font-family: sans-serif; font-weight: bold;} +tr.lst3 td { border-width: 2px 1px 1px; } + +p.foot {clear: both; text-indent: 0; margin: 1em 0.5em 1em;} diff --git a/ext/fatfs/documents/doc/appnote.html b/ext/fatfs/documents/doc/appnote.html new file mode 100644 index 0000000000..82ebdd4d40 --- /dev/null +++ b/ext/fatfs/documents/doc/appnote.html @@ -0,0 +1,334 @@ + + + + + + + + +FatFs Module Application Note + + + +

FatFs Module Application Note

+
    +
  1. How to Port
  2. +
  3. Limits
  4. +
  5. Memory Usage
  6. +
  7. Reducing Module Size
  8. +
  9. Long File Name
  10. +
  11. Unicode API
  12. +
  13. exFAT Filesystem
  14. +
  15. 64-bit LBA
  16. +
  17. Re-entrancy
  18. +
  19. Duplicated File Access
  20. +
  21. Performance Effective File Access
  22. +
  23. Considerations on Flash Memory Media
  24. +
  25. Critical Section
  26. +
  27. Various Usable Functions for FatFs Projects
  28. +
  29. About FatFs License
  30. +
+ +
+

How to Port

+ +

Basic Considerations

+

The FatFs module assumes following conditions on portability.

+ + +

Integer Types in FatFs API

+

Integer types used in FatFs are defined in ff.h as described below. It is based on Win32 API (windef.h). This will not be a problem on most platform. When a conflict with existing definitions occured, you must resolve it with care.

+
+
BYTE
8-bit unsigned integer in range of 0 to 28 - 1.
+
WORD
16-bit unsigned integer in range of 0 to 216 - 1.
+
DWORD
32-bit unsigned integer in range of 0 to 232 - 1.
+
QWORD
64-bit unsigned integer in range of 0 to 264 - 1.
+
UINT
Alias of unsigned int used to specify any number.
+
WCHAR
Alias of WORD used to specify a UTF-16 code unit.
+
TCHAR
Alias of char, WCHAR or DWORD used to specify a character encoding unit.
+
FSIZE_t
Alias of DWORD or QWORD used to address file offset and to specify file size.
+
LBA_t
Alias of DWORD or QWORD used to address sectors in LBA and to specify number of sectors.
+
+ +

System Organizations

+

The dependency diagram shown below is a typical, but not specific, configuration of the embedded system with FatFs module.

+

dependency diagram

+

(a) If a working disk module for FatFs is provided, nothing else will be needed. (b) To attach existing disk drivers with different interface, some glue functions are needed to translate the interfaces between FatFs and the driver.

+

functional diagram

+ +

Required Functions

+

You need to provide only MAI functions required by FatFs module and nothing else. If a working device control module for the target system is available, you need to write only glue functions to attach it to the FatFs module. If not, you need to port another device control module or write it from scratch. Most of MAI functions are not that always required. For instance, the write function is not required in read-only configuration. Following table shows which function is required depends on the configuration options.

+ + + + + + + + + + +
FunctionRequired when:Note
disk_status
disk_initialize
disk_read
AlwaysDisk I/O functions.
Samples available in ffsample.zip.
There are many implementations on the web.
disk_write
get_fattime
disk_ioctl (CTRL_SYNC)
FF_FS_READONLY == 0
disk_ioctl (GET_SECTOR_COUNT)
disk_ioctl (GET_BLOCK_SIZE)
FF_USE_MKFS == 1
disk_ioctl (GET_SECTOR_SIZE)FF_MAX_SS != FF_MIN_SS
disk_ioctl (CTRL_TRIM)FF_USE_TRIM == 1
ff_uni2oem
ff_oem2uni
ff_wtoupper
FF_USE_LFN != 0Unicode support functions.
Add optional module ffunicode.c to the project.
ff_cre_syncobj
ff_del_syncobj
ff_req_grant
ff_rel_grant
FF_FS_REENTRANT == 1O/S dependent functions.
Sample code is available in ffsystem.c.
ff_mem_alloc
ff_mem_free
FF_USE_LFN == 3
+

FatFs cares about neither what kind of storage device is used nor how it is implemented. Only a requirement is that it is a block device read/written in fixed-size blocks that accessible via the disk I/O functions defined above.

+
+ +
+

Limits

+ +
+ +
+

Memory Usage

+

The memory usage varies depends on the configuration options.

+ + + + + + + + + + + +
ARM7
32bit
ARM7
Thumb
CM3
Thumb-2
AVRH8/300HPIC24RL78V850ESSH-2ARX600IA-32
CompilerGCCGCCGCCGCCCH38C30CC78K0RCA850SHCRXCMSC
.text (Def, R/W)10.4k6.7k6.1k12.5k11.0k11.6k13.0k8.9k9.2k6.5k8.9k
.text (Min, R/W) 7.0k4.7k4.2k 8.5k 7.6k 8.1k 9.5k6.2k6.4k4.6k6.4k
.text (Def, R/O) 4.9k3.2k2.7k 6.1k 5.2k 5.5k 6.5k4.3k4.2k3.2k4.3k
.text (Min, R/O) 3.7k2.5k2.1k 4.4k 4.0k 4.3k 5.1k3.4k3.3k2.5k3.5k
.bssV*4 + 2V*4 + 2V*4 + 2V*2 + 2V*4 + 2V*2 + 2V*2 + 2V*4 + 2V*4 + 2V*4 + 2V*4 + 2
Work area
(FF_FS_TINY == 0)
V*564
+ F*552
V*564
+ F*552
V*564
+ F*552
V*560
+ F*546
V*560
+ F*546
V*560
+ F*546
V*560
+ F*546
V*564
+ F*552
V*564
+ F*552
V*564
+ F*552
V*564
+ F*552
Work area
(FF_FS_TINY == 1)
V*564
+ F*40
V*564
+ F*40
V*564
+ F*40
V*560
+ F*34
V*560
+ F*34
V*560
+ F*34
V*560
+ F*34
V*564
+ F*40
V*564
+ F*40
V*564
+ F*40
V*564
+ F*40
+

These are the memory usage of FatFs module without lower layer on some target systems in following condition. V denotes number of mounted volumes and F denotes number of open files. Every samples here are optimezed in code size.

+
+FatFs R0.14b options:
+FF_FS_READONLY   0 (R/W, read/write) or 1 (R/O, read only)
+FF_FS_MINIMIZE   0 (Def, with all basic functions) or 3 (Min, with fully minimized)
+FF_FS_TINY       0 (Default) or 1 (Tiny file object)
+And any other options are left unchanged from original setting.
+
+
+ +
+

Reducing Module Size

+

Follwing table shows which API function is removed by configuration options to reduce the module size. To use an API function, the row of the function must be clear.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionFF_FS_
MINIMIZE
FF_FS_
READONLY
FF_USE_
STRFUNC
FF_FS_
RPATH
FF_USE_
FIND
FF_USE_
CHMOD
FF_USE_
EXPAND
FF_USE_
LABEL
FF_USE_
MKFS
FF_USE_
FORWARD
FF_MULTI_
PARTITION
0123010101201010101010101
f_mount
f_open
f_close
f_read
f_write x
f_sync x
f_lseek x
f_opendir xx
f_closedir xx
f_readdir xx
f_findfirst xx x
f_findnext xx x
f_stat xxx
f_getfree xxx x
f_truncate xxx x
f_unlink xxx x
f_mkdir xxx x
f_rename xxx x
f_chdir x
f_chdrive x
f_getcwd xx
f_chmod x x
f_utime x x
f_getlabel x
f_setlabel x x
f_expand x x
f_forward x
f_mkfs x x
f_fdisk x x x
f_putc xx
f_puts xx
f_printf xx
f_gets x
+
+ +
+

Long File Name

+

FatFs module supports the long file name (LFN) extension of the FAT filesystem. The two different file names, short file name (SFN) and LFN, of a file is transparent on the API. The support for LFN feature is disabled by default. To enable the LFN, set FF_USE_LFN to 1, 2 or 3, and add ffunicode.c to the project. The LFN feature requiers a certain working buffer. The buffer size can be configured by FF_MAX_LFN according to the available memory. The length of LFN can be up to 255 characters, so that the FF_MAX_LFN should be set to 255 for any existing file names. If the size of working buffer is insufficient for the input file name, the file function fails with FR_INVALID_NAME. When use any re-entry to the API with LFN feature in RTOS environment, FF_USE_LFN must be set to 2 or 3. In this case, the file function allocates the working buffer on the stack or heap. The LFN working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled.

+

Impact upon Module Size

+ + + + + + + + + +
With LFN at CM3 + gcc
FF_CODE_PAGECode size
437-869 (SBCS)+3.3k
932 (Japanese)+62k
936 (Simplified Chinese)+177k
949 (Korean)+140k
950 (Traditional Chinese)+111k
0 (All code pages)+486k
+

When the LFN is enabled, the module size will be increased depends on the configured code page. Right table shows the increment of code size in some code pages. Especially, in the CJK region, tens of thousands of characters are being used. Unfortunately, it requires a huge OEM-Unicode bidirectional conversion table and the module size will be drastically increased as shown in the table.

+

As the result, the FatFs with LFN enabled with DBCS code pages will not able to be ported on the most 8-bit MCU systems. If the target system is in legacy-free, in only Unicode and any ANSI/OEM code is not used at all, the code page setting gets meaningless. You will able to reduce the code size by configureing FatFs for Unicode API with any SBCS code page.

+

There ware some restrictions on using LFN for open source project, because the LFN extension on the FAT filesystem was a patent of Microsoft Corporation. However the related patents all have expired and using the LFN feature is free for any projects.

+
+ +
+

Unicode API

+

By default, FatFs uses ANSI/OEM code set on the API even in LFN configuration. FatFs can also switch the character encoding on the API to Unicode by configuration option FF_LFN_UNICODE. This means that FatFs is compliant with the full featured LFN specification. The data type TCHAR specifies path name strings on the API is an alias of either char(ANSI/OEM or UTF-8), WCHAR(UTF-16) or DWORD(UTF-32) depends on that option. For more information, refer to the description in the file name.

+

Note that setting of code page, FF_CODE_PAGE, has actually no meaning when FatFs is configured for the Unicode API. It should be set 437 to reduce the module size. However it still affects code conversion of string I/O functions when FF_STRF_ENCODE == 0, and also backward compatibility with legacy systems. In this case, the code page may need to be configured properly if it is considered a problem.

+
+ +
+

exFAT Filesystem

+

The exFAT (Microsoft's Extended File Allocation Table) filesystem is a succession of the FAT/FAT32 filesystem which has been widely used in embedded systems, consumer devices and portable storage media. It is adopted by SDA (SD Association) as the filesystem for SDXC card, 64 GB and larger, and they are being shipped with this format. Therefore the exFAT is one of the standard filesystems for removable media as well as FAT. The exFAT filesystem allows the file size beyond the 4 GB limit what FAT filesystem allows up to and some filesystem overhead, especially cluster allocation delay, are reduced as well. These features allow to record the large data without dividing into some files and improve the write throughput to the file.

+

Note that the exFAT filesystem is a patent of Microsoft Corporation. The exFAT feature of FatFs is an implementation based on US. Pat. App. Pub. No. 2009/0164440 A1. FatFs module can switch the exFAT on or off by a configuration option, FF_FS_EXFAT. When enable the exFAT for the commercial products, a license by Microsoft will be needed depends on the final destination of the products.

+

Remarks: Enabling exFAT discards C89 compatibility and it wants C99 because of need for 64-bit integer type.

+
+ +
+

64-bit LBA

+

LBA (Logical Block Addressing) is an addressing method to specify the location of data block, called sector, on the storage media. It is a simple linear address beginning from 0 as the first sector, 1 as the second sector and so on. The host system does not need to consider how the data block is located and managed in the storage device. FatFs supports only LBA for the media access. 32-bit LBA is a common size in the most LBA scheme. It can address up to 232 sectors, 2 TB in 512 bytes/sector. When a storage device larger than 2 TB is used, larger sector size or 64-bit LBA will be needed to address the entire sectors of the storage device.

+

By default, FatFs works in 32-bit LBA for media access. FatFs can also switch it to 64-bit LBA by a configuration option FF_LBA64. It also enables GPT (GUID Partition Table) for partiotion management on the storage device. For further information about GPT, refer to f_mkfs and f_fdisk function.

+
+ +
+

Re-entrancy

+

The file operations of two tasks to the different volumes each other is always re-entrant regardless of the configurations except when LFN is enabled with static working buffer (FF_USE_LFN = 1). It can work concurrently without any mutual exclusion.

+

The file operations of two tasks to the same volume is not re-entrant in default. FatFs can also be configured to make it thread-safe by option FF_FS_REENTRANT. In this case, also the OS dependent synchronization control functions, ff_cre_syncobj/ff_del_syncobj/ff_req_grant/ff_rel_grant, need to be added to the project. There are some examples in the ffsystem.c. When a file function is called while the volume is being accessed by another task, the file function to the volume will be suspended until that task leaves the file function. If the wait time exceeded a period defined by FF_TIMEOUT, the file function will abort with FR_TIMEOUT. The timeout feature might not be supported on the some RTOSs.

+

There is an exception on the re-entrancy for f_mount/f_mkfs function. These volume management functions are not re-entrant to the same volume. When use these functions, other tasks need to avoid to access the volume.

+
+ + + + + + + + +
FunctionCase 1Case 2Case 3
disk_statusYesYesYes(*)
disk_initializeNoYesYes(*)
disk_readNoYesYes(*)
disk_writeNoYesYes(*)
disk_ioctlNoYesYes(*)
get_fattimeNoYesYes
+ +Case 1: Same volume.
+Case 2: Different volume on the same drive.
+Case 3: Different volume on the different drive.
+(*) In only different drive number. +
+
+

Remarks: This section describes on the re-entrancy of the FatFs module itself. The FF_FS_REENTRANT option enables only exclusive use of each filesystem objects and FatFs does not that prevent to re-enter the storage device control functions. Thus the device control layer needs to be always thread-safe when FatFs API is re-entered for different volumes. Right table shows which control function can be re-entered when FatFs API is re-entered on some conditions.

+
+ +
+

Duplicated File Open

+

FatFs module does not support the read/write collision control of duplicated open to a file. The duplicated open is permitted only when each of open method to a file is read mode. The duplicated open with one or more write mode to a file is always prohibited, and also open file must not be renamed or deleted. A violation of these rules can cause data collaption.

+

The file lock control can be enabled by FF_FS_LOCK option. The value of option defines the number of open objects to manage simultaneously. In this case, if any opening, renaming or removing against the file shareing rule that described above is attempted, the file function will be rejected with FR_LOCKED. If number of open objects, files and sub-directories, is equal to FF_FS_LOCK, an extra f_open/f_opendir function will fail with FR_TOO_MANY_OPEN_FILES.

+
+ +
+

Performance Effective File Access

+

For good read/write throughput on the small embedded systems with limited size of memory, application programmer should consider what process is done in the FatFs module. The file data on the volume is transferred in following sequence by f_read function.

+

Figure 1. Sector unaligned read (short)
+ +

+

Figure 2. Sector unaligned read (long)
+ +

+

Figure 3. Fully sector aligned read
+ +

+

The file I/O buffer is a sector buffer to read/write a part of data on the sector. The sector buffer is either file private sector buffer on each file object or shared sector buffer in the filesystem object. The buffer configuration option FF_FS_TINY determins which sector buffer is used for the file data transfer. When tiny buffer configuration (1) is selected, data memory consumption is reduced FF_MAX_SS bytes each file object. In this case, FatFs module uses only a sector buffer in the filesystem object for file data transfer and FAT/directory access. The disadvantage of the tiny buffer configuration is: the FAT data cached in the sector buffer will be lost by file data transfer and it must be reloaded at every cluster boundary. However it will be suitable for most application from view point of the decent performance and low memory comsumption.

+

Figure 1 shows that a partial sector, sector unaligned part of the file, is transferred via the file I/O buffer. At long data transfer shown in Figure 2, middle of transfer data that covers one or more sector is transferred to the application buffer directly. Figure 3 shows that the case of entier transfer data is aligned to the sector boundary. In this case, file I/O buffer is not used. On the direct transfer, the maximum extent of sectors are read with disk_read function at a time but the multiple sector transfer is divided at cluster boundary even if it is contiguous.

+

Therefore taking effort to sector aligned read/write accesss eliminates buffered data transfer and the read/write performance will be improved. Besides the effect, cached FAT data will not be flushed by file data transfer at the tiny configuration, so that it can achieve same performance as non-tiny configuration with small memory footprint.

+
+ +
+

Considerations on Flash Memory Media

+

To maximize the write performance of flash memory media, such as SDC, CFC and U Disk, it must be controlled in consideration of its characteristitcs.

+

Using Mutiple-Sector Write

+
+Figure 6. Comparison between Multiple/Single Sector Write
+fig.6 +
+

The write throughput of the flash memory media becomes the worst at single sector write transaction. The write throughput increases as the number of sectors per a write transaction as shown in Figure 6. This effect more appers at faster interface speed and the performance ratio often becomes grater than ten. This result is clearly explaining how fast is multiple block write (W:16K, 32 sectors) than single block write (W:100, 1 sector), and also larger card tends to be slow at single block write. Number of write transactions also affects life time of the flash memory media. When compared at same amount of write data, the single sector write in Figure 6 above wears flash memory media 16 times more than multiple sector write in Figure 6 below. Single sector write is pretty pain for the flash memory media.

+

Therefore the application program should write the data in large block as possible. The ideal write chunk size and alighment is size of sector, and size of cluster is the best. Of course all layers between the application and the storage device must have consideration on multiple sector write, however most of open-source memory card drivers lack it. Do not split a multiple sector write request into single sector write transactions or the write throughput gets poor. Note that FatFs module and its sample disk drivers supprt multiple sector read/write operation.

+

Forcing Memory Erase

+

When remove a file with f_unlink function, the data clusters occupied by the file are marked 'free' on the FAT. But the data sectors containing the file data are not that applied any process, so that the file data left occupies a part of the flash memory array as 'live block'. If the file data can be erased on removing the file, those data blocks will be turned into the free block pool. This may skip internal block erase operation to the data block on next write operation. As the result the write performance might be improved. FatFs can manage this function by setting FF_USE_TRIM to 1. Note that because this effect is from an expectation of internal process of the storage device, it is not that always effective. Most applications will not need this function. Also f_unlink function can take a time when remove a large file.

+
+ +
+

Critical Section

+

If a write operation to the FAT volume is interrupted due to an accidental failure, such as sudden blackout, wrong media removal and unrecoverable disk error, the FAT structure on the volume can be broken. Following images shows the critical section of the FatFs module.

+
+Figure 4. Long critical section
+fig.4 +
+
+Figure 5. Minimized critical section
+fig.5 +
+
+

An interruption in the red section can cause a cross link; as a result, the object being changed can be lost. If an interruption in the yellow section is occured, there is one or more possibility listed below.

+ +

Each case does not affect any file not opened in write mode. To minimize risk of data loss, the critical section can be minimized by minimizing the time that file is opened in write mode or using f_sync function as shown in Figure 5.

+
+ +
+

Various Usable Functions for FatFs Projects

+

These are examples of extended use of FatFs APIs. New item will be added when useful code example is found.

+
    +
  1. Open or Create File for Append (superseded by FA_OPEN_APPEND flag added at R0.12)
  2. +
  3. Delete Non-empty Sub-directory (for R0.12 and later)
  4. +
  5. Create Contiguous File (superseded by f_expand function added at R0.12)
  6. +
  7. Test if the File is Contiguous or Not
  8. +
  9. Compatibility Checker for Storage Device Control Module
  10. +
  11. Performance Checker for Storage Device Control Module
  12. +
  13. FAT Volume Image Creator (Pre-creating built-in FAT volume)
  14. +
  15. Virtual Drive Feature (refer to lpc176x/ in ffsample.zip)
  16. +
  17. Embedded Unicode String Utilities (OEMxxx→Unicode, Unicode→OEMxxx, Unicode→Unicode)
  18. +
+
+ +
+

About FatFs License

+

FatFs has being developped as a personal project of the author, ChaN. It is free from the code anyone else wrote at current release. Following code block shows a copy of the FatFs license document that included in the source files.

+
+/*----------------------------------------------------------------------------/
+/  FatFs - Generic FAT Filesystem Module  Rx.xx                               /
+/-----------------------------------------------------------------------------/
+/
+/ Copyright (C) 20xx, ChaN, all right reserved.
+/
+/ FatFs module is an open source software. Redistribution and use of FatFs in
+/ source and binary forms, with or without modification, are permitted provided
+/ that the following condition is met:
+/
+/ 1. Redistributions of source code must retain the above copyright notice,
+/    this condition and the following disclaimer.
+/
+/ This software is provided by the copyright holder and contributors "AS IS"
+/ and any warranties related to this software are DISCLAIMED.
+/ The copyright owner or contributors be NOT LIABLE for any damages caused
+/ by use of this software.
+/----------------------------------------------------------------------------*/
+
+

Therefore FatFs license is one of the BSD-style licenses but there is a significant feature. FatFs is mainly intended for embedded systems. In order to extend the usability for commercial products, the redistributions of FatFs in binary form, such as embedded code, binary library and any forms without source code, does not need to include about FatFs in the documentations. This is equivalent to the 1-clause BSD license. Of course FatFs is compatible with the most of open source software licenses includes GNU GPL. When you redistribute the FatFs source code with any changes or create a fork, the license can also be changed to GNU GPL, BSD-style license or any open source software license that compatible with FatFs license.

+
+ +

Return Home

+ + diff --git a/ext/fatfs/documents/doc/chdir.html b/ext/fatfs/documents/doc/chdir.html new file mode 100644 index 0000000000..93e116c394 --- /dev/null +++ b/ext/fatfs/documents/doc/chdir.html @@ -0,0 +1,88 @@ + + + + + + + + +FatFs - f_chdir + + + + +
+

f_chdir

+

The f_chdir function changes the current directory of the logical drive.

+
+FRESULT f_chdir (
+  const TCHAR* path /* [IN] Path name */
+);
+
+
+ +
+

Parameters

+
+
path
+
Pointer to the null-terminated string that specifies the directory to be set as current directory.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_PATH, +FR_INVALID_NAME, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

The f_chdir function changes the current directory of the logical drive. Also the current drive will be changed when in Unix style drive prefix, FF_STR_VOLUME_ID == 2. The current directory of each logical drive is initialized to the root directory on mount.

+

Note that the current directory is retained in the each file system object and the current drive is retained in a static variable, so that it also affects other tasks that use the file functions.

+
+ + +
+

QuickInfo

+

Available when FF_FS_RPATH >= 1.

+
+ + +
+

Example

+
+    /* Change current direcoty of the current drive ("dir1" under root directory) */
+    f_chdir("/dir1");
+
+    /* Change current direcoty of current drive (parent directory of drive 2) */
+    f_chdir("2:..");
+
+    /* Change current direcoty of the drive "sdcard" (at DOS/Windows style volume ID) */
+    f_chdir("sdcard:/dir1");
+
+    /* Change current direcoty of the drive "flash" and set it as current drive (at Unix style volume ID) */
+    f_chdir("/flash/dir1");
+
+
+ +
+

See Also

+

f_chdrive, f_getcwd

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/chdrive.html b/ext/fatfs/documents/doc/chdrive.html new file mode 100644 index 0000000000..4dfc7d86d7 --- /dev/null +++ b/ext/fatfs/documents/doc/chdrive.html @@ -0,0 +1,70 @@ + + + + + + + + +FatFs - f_chdrive + + + + +
+

f_chdrive

+

The f_chdrive function changes the current drive.

+
+FRESULT f_chdrive (
+  const TCHAR* path  /* [IN] Logical drive number */
+);
+
+
+ +
+

Parameters

+
+
path
+
Specifies the logical drive number to be set as the current drive.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_INVALID_DRIVE +

+
+ + +
+

Description

+

The f_chdrive function changes only the current drive. The initial value of the current drive number is 0. In Unix style drive prefix configuration, this function will not be needed because f_chdir function changes also the current drive. Note that the current drive is retained in a static variable, so that it also affects other tasks that using the file functions.

+
+ +
+

QuickInfo

+

Available when FF_FS_RPATH >= 1.

+
+ + +
+

Example

+
+    f_chdrive("2:");  /* Set drive 2 as current drive */
+
+    f_chdrive("");    /* No effect (set current drive as current drive) */
+
+
+ + +
+

See Also

+

f_chdir, f_getcwd

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/chmod.html b/ext/fatfs/documents/doc/chmod.html new file mode 100644 index 0000000000..91e520fd5e --- /dev/null +++ b/ext/fatfs/documents/doc/chmod.html @@ -0,0 +1,89 @@ + + + + + + + + +FatFs - f_chmod + + + + +
+

f_chmod

+

The f_chmod function changes the attribute of a file or sub-directory.

+
+FRESULT f_chmod (
+  const TCHAR* path, /* [IN] Object name */
+  BYTE attr,         /* [IN] Attribute flags */
+  BYTE mask          /* [IN] Attribute masks */
+);
+
+
+ +
+

Parameters

+
+
path
+
Pointer to the null-terminated string that specifies an object to be changed
+
attr
+
Attribute flags to be set in one or more combination of the following flags. The specified flags are set and others are cleard.
+ + + + + + +
AttributeDescription
AM_RDORead only
AM_ARCArchive
AM_SYSSystem
AM_HIDHidden
+
+
mask
+
Attribute mask that specifies which attribute is changed. The specified attributes are set or cleard and others are left unchanged.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_FILE, +FR_NO_PATH, +FR_INVALID_NAME, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

The f_chmod function changes the attribute of a file or sub-directory.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_USE_CHMOD == 1.

+
+ + +
+

Example

+
+    /* Set Read-only, clear Archive and others are left unchanged. */
+    f_chmod("file.txt", AM_RDO, AM_RDO | AM_ARC);
+
+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/close.html b/ext/fatfs/documents/doc/close.html new file mode 100644 index 0000000000..f4cd2df457 --- /dev/null +++ b/ext/fatfs/documents/doc/close.html @@ -0,0 +1,65 @@ + + + + + + + + +FatFs - f_close + + + + +
+

f_close

+

The f_close function closes an open file.

+
+FRESULT f_close (
+  FIL* fp     /* [IN] Pointer to the file object */
+);
+
+
+ +
+

Parameter

+
+
fp
+
Pointer to the open file object structure to be closed.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_INVALID_OBJECT, +FR_TIMEOUT +

+
+ + +
+

Description

+

The f_close function closes an open file object. If the file has been changed, the cached information of the file is written back to the volume. After the function succeeded, the file object is no longer valid and it can be discarded.

+

Note that if the file object is in read-only mode and FF_FS_LOCK is not enabled, the file object can also be discarded without this procedure. However this is not recommended for future compatibility.

+
+ + +
+

QuickInfo

+

Always available.

+
+ + +
+

See Also

+

f_open, f_read, f_write, f_sync, FIL, FATFS

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/closedir.html b/ext/fatfs/documents/doc/closedir.html new file mode 100644 index 0000000000..3f5df57701 --- /dev/null +++ b/ext/fatfs/documents/doc/closedir.html @@ -0,0 +1,64 @@ + + + + + + + + +FatFs - f_closedir + + + + +
+

f_closedir

+

The f_closedir function closes an open directory.

+
+FRESULT f_closedir (
+  DIR* dp     /* [IN] Pointer to the directory object */
+);
+
+
+ +
+

Parameter

+
+
dp
+
Pointer to the open directory object structure to be closed.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_INT_ERR, +FR_INVALID_OBJECT, +FR_TIMEOUT +

+
+ + +
+

Description

+

The f_closedir function closes an open directory object. After the function succeeded, the directory object is no longer valid and it can be discarded.

+

Note that the directory object can also be discarded without this procedure when option FF_FS_LOCK is not enabled. However this is not recommended for future compatibility.

+
+ + +
+

QuickInfo

+

Available when FF_FS_MINIMIZE <= 1.

+
+ + +
+

See Also

+

f_opendir, f_readdir, DIR

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/config.html b/ext/fatfs/documents/doc/config.html new file mode 100644 index 0000000000..a4c78147cd --- /dev/null +++ b/ext/fatfs/documents/doc/config.html @@ -0,0 +1,307 @@ + + + + + + + + +FatFs - Configuration Options + + + +

Configuration Options

+

There are many options to configure the functions of FatFs for requirement of each project. The configuration options are defined in the ffconf.h.

+ + +
+

Function Configurations

+ +

FF_FS_READONLY

+

Read/Write (0) or Read-only (1). Read-only configuration removes writing API functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename, f_truncate, f_getfree and optional writing functions as well.

+ +

FF_FS_MINIMIZE

+

This option defines minimization level to remove some basic API functions as follows:

+ + + + + + +
ValueDescription
0All basic API functions are available.
1f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_utime, f_truncate and f_rename function are removed.
2f_opendir, f_readdir and f_closedir function are removed in addition to 1.
3f_lseek function is removed in addition to 2.
+ +

FF_USE_FIND

+

Disable (0) or Enable (1) filtered directory read functions, f_findfirst and f_findnext. Also FF_FS_MINIMIZE needs to be 0 or 1.

+ +

FF_USE_MKFS

+

Disable (0) or Enable (1) f_mkfs function.

+ +

FF_USE_FASTSEEK

+

Disable (0) or Enable (1) fast seek function to enable accelerated mode for f_lseek, f_read and f_write function. For more information, read here.

+ +

FF_USE_EXPAND

+

Disable (0) or Enable (1) f_expand function.

+ +

FF_USE_CHMOD

+

Disable (0) or Enable (1) metadata control functions, f_chmod and f_utime. Also FF_FS_READONLY needs to be 0.

+ +

FF_USE_LABEL

+

Disable (0) or Enable (1) API functions for volume label, f_getlabel and f_setlabel.

+ +

FF_USE_FORWARD

+

Disable (0) or Enable (1) f_forward function.

+ +

FF_USE_STRFUNC

+

This option switches string functions, f_gets, f_putc, f_puts and f_printf. These functions are equivalents of regular string stream I/O functions in POSIX. If sprintf is available and code conversion is not needed, f_write with sprintf will be efficient in code size and performance rather than f_printf.

+ + + + + +
ValueDescription
0Disable string functions.
1Enable string functions without LF-CRLF conversion.
2Enable string functions with LF-CRLF conversion.
+ + +

This option switches support for long long integer argument in f_printf.

+

Disable (0) or Enable (1). C standard needs to be C99 or later to enable this feature.

+ + +

This option switches support for floating point argument in f_printf. C standard needs to be C99 or later to enable this feature.

+ + + + + +
ValueDescription
0Disable floating point argument.
1Enable floating point argument in type 'f', 'e' and 'E'.
2Enable with decimal separator ',' instead of '.'.
+ +

FF_STRF_ENCODE

+

When character encoding on the API is Unicode (FF_LFN_UNICODE >= 1), string I/O functions enabled by FF_USE_STRFUNC convert the character encoding in it. This option defines the assumption of character encoding on the file to be read/written via those functions. When LFN is not enabled or FF_LFN_UNICODE == 0, the string functions work without any code conversion and this option has no effect.

+ + + + + + +
ValueCharacter encoding on the file
0ANSI/OEM in current code page
1Unicode in UTF-16LE
2Unicode in UTF-16BE
3Unicode in UTF-8
+ +
+ + +
+

Namespace and Locale Configurations

+ +

FF_CODE_PAGE

+

This option specifies the OEM code page used on the target system. Incorrect setting of the code page can cause a file open failure. If any non-ASCII character is not used for the path name or FF_LFN_UNICODE != 0, there is no difference between any code page settings. Set it 437 anyway.

+ + + + + + + + + + + + + + + + + + + + + + + + +
ValueCode page
0Includes all code pages below and set by f_setcp()
437U.S.
720Arabic
737Greek
771KBL
775Baltic
850Latin 1
852Latin 2
855Cyrillic
857Turkish
860Portuguese
861Icelandic
862Hebrew
863Canadian French
864Arabic
865Nordic
866Russian
869Greek 2
932Japanese (DBCS)
936Simplified Chinese (DBCS)
949Korean (DBCS)
950Traditional Chinese (DBCS)
+ +

FF_USE_LFN

+

This option switches the support for long file name (LFN). When enable the LFN, Unicode support module ffunicode.c need to be added to the project. When use stack for the working buffer, take care on stack overflow. When use heap memory for the working buffer, memory management functions (ff_memalloc and ff_memfree) need to be added to the project.

+ + + + + + +
ValueDescription
0Disable LFN. Path name in only 8.3 format can be used.
1Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
2Enable LFN with dynamic working buffer on the STACK.
3Enable LFN with dynamic working buffer on the HEAP.
+ +

FF_MAX_LFN

+

LFN function requiers certain internal working buffer for the file name. This option defines size of the buffer and the value can be in range of 12 to 255 characters (actually in UTF-16 code units) of the LFN. The buffer occupies (FF_MAX_LFN + 1) * 2 bytes and additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled. It is recommended to be set 255 to fully support the LFN specification. This option has no effect when LFN is not enabled.

+ +

FF_LFN_UNICODE

+

This option switches character encoding for the file name on the API. FatFs supports the code point up to U+10FFFF. This option also affects behavior of string I/O functions (see FF_STRF_ENCODE).

+ + + + + + +
ValueCharacter EncodingTCHAR
0ANSI/OEM in current CPchar
1Unicode in UTF-16WCHAR
2Unicode in UTF-8char
3Unicode in UTF-32DWORD
+

When Unicode is selected, FF_CODE_PAGE has actually no meaning except for compatibility with legacy systems, such as MS-DOS and any system without support for LFN.

+

When LFN is not enabled, this option has no effect and FatFs works in ANSI/OEM code on the API. For more information, read here.

+ +

FF_LFN_BUF, FF_SFN_BUF

+

This set of options defines size of file name members, fname[] and altname[], in the FILINFO structure which is used to read out the directory items. These values should be suffcient for the file names to read. The maximum possible length of read file name depends on the character encoding scheme on the API as follows:

+ + + + + + +
EncodingLFN lengthSFN length
ANSI/OEM in SBCS255 items12 items
ANSI/OEM in DBCS510 items12 items
Unicode in UTF-16/32255 items12 items
Unicode in UTF-8765 items34 items
+

If the size of name member is insufficient for the LFN, the item is treated as without LFN. When LFN is not enabled, these options have no effect.

+ +

FF_FS_RPATH

+

This option configures relative path function. For more information, read here.

+ + + + + +
ValueDescription
0Disable relative path function and remove related functions.
1Enable relative path function. f_chdir and f_chdrive function is available.
2f_getcwd function is available in addition to 1
+ +
+ + +
+

Volume/Drive Configurations

+ +

FF_VOLUMES

+

This option configures number of volumes (logical drives up to 10) to be used.

+ +

FF_STR_VOLUME_ID

+

This option switches the support for string volume ID. When arbitrary string for the volume ID is enabled for the drive prefix, also pre-defined strings by FF_VOLUME_STRS or user defined strings can be used as drive prefix in the path name. Numeric drive number is always valid regardless of this option, and also either format of drive prefix can be enabled by this option.

+ + + + + +
ValueDescriptionExample
0Only DOS/Windows style drive prefix in numeric ID can be used.1:/filename
1Also DOS/Windows style drive prefix in string ID can be used.flash:/filename
2Also Unix style drive prefix in string ID can be used./flash/filename
+ +

FF_VOLUME_STRS

+

This option defines the volume ID strings for each logical drives. Number of items must not be less than FF_VOLUMES. Valid characters for the volume ID string are A-Z, a-z and 0-9, however, they are compared in case-insensitive. If FF_STR_VOLUME_ID == 0, this option has no effect. If FF_STR_VOLUME_ID >= 1 and this option is not defined, a user defined volume string table needs to be defined as shown below. The table should not be modified on the fly.

+
+/* User defined volume ID strings for 0: to 3: */
+const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb"};
+
+ +

FF_MULTI_PARTITION

+

Disable (0) or Enable (1). This option switches multi-partition function. By default (0), each logical drive number is bound to the same physical drive number and only a volume in the physical drive is mounted. When enabled, each logical drive is bound to the partition on the physical drive listed in the user defined partition resolution table VolToPart[]. Also f_fdisk funciton will be available. For more information, read here.

+ +

FF_MIN_SS, FF_MAX_SS

+

This set of options defines the extent of sector size used for the low level disk I/O interface, disk_read and disk_write function. Valid values are 512, 1024, 2048 and 4096. FF_MIN_SS defines minimum sector size and FF_MAX_SS defines the maximum sector size. Always set both 512 for memory card and harddisk. But a larger value may be required for on-board flash memory and some type of optical media. When FF_MAX_SS > FF_MIN_SS, support of variable sector size is enabled and GET_SECTOR_SIZE command needs to be implemented to the disk_ioctl function.

+ +

FF_LBA64

+

This option switches media access interface to 64-bit LBA and enables GUID Partition Table (GPT) for partition management, Enabled (1) or Disabled (0). exFAT filesystem needs to be enabled to enable this feature.

+ +

FF_MIN_GPT

+

This option specifies the threshold of determination of partitioning format when create patitions on the drive in f_mkfs and f_fdisk function. When number of sectors on the drive is equal or larger than this value, the drive will be partitioned in GPT. This option has no effect when FF_LBA64 == 0.

+ +

FF_USE_TRIM

+

Disable (0) or Enable (1). This option switches ATA-TRIM function. To enable Trim function, also CTRL_TRIM command should be implemented to the disk_ioctl function.

+ +
+ + +
+

System Configurations

+ +

FF_FS_TINY

+

Normal (0) or Tiny (1). The tiny configuration reduces size of the FIL structure, file object, FF_MAX_SS bytes each. Instead of private sector buffer eliminated from the file object, common sector buffer in the FATFS structure, filesystem object, is used for the file data transfer.

+ +

FF_FS_EXFAT

+

This option switches support for exFAT filesystem in addition to the FAT/FAT32 filesystem, Enabled (1) or Disabled (0). To enable exFAT, also LFN must be enabled and configureing FF_LFN_UNICODE >= 1 and FF_MAX_LFN == 255 is recommended for full-featured exFAT function. Note that enabling exFAT discards ANSI C (C89) compatibility and wants C99 because of need for 64-bit integer type.

+ +

FF_FS_NORTC

+

Use RTC (0) or Do not use RTC (1). This option controls timestamp function. If the system does not have any RTC function or valid timestamp is not needed, set FF_FS_NORTC to 1 to disable the timestamp function. Every objects modified by FatFs will have a fixed timestamp defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR. To use the timestamp function, set FF_FS_NORTC == 0 and add get_fattime function to the project to get current time form the RTC. This option has no effect in read-only configuration.

+ +

FF_NORTC_MON, FF_NORTC_MDAY, FF_NORTC_YEAR

+

This set of options defines the time to be used in no RTC systems. This option has no effect in read-only configuration or FF_FS_NORTC == 0.

+ +

FF_FS_NOFSINFO

+

0 to 3. If you need to know correct free space on the FAT32 volume, set bit 0 of this option, and f_getfree function at first time after volume mount will force a full FAT scan. Bit 1 controls the use of last allocated cluster number for new allocation.

+ + + + + + +
ValueDescription
bit0=0Use free cluster count in the FSINFO if available.
bit0=1Do not trust free cluster count in the FSINFO.
bit1=0Use last allocated cluster number in the FSINFO to find a free cluster if available.
bit1=1Do not trust last allocated cluster number in the FSINFO.
+ +

FF_FS_LOCK

+

This option switches file lock function to control duplicated file open and illegal operations to open objects. Note that the file lock function is independent of re-entrancy. This option must be 0 in read-only configuration.

+ + + + +
ValueDescription
0Disable file lock function. To avoid collapsing file by wrong file operation, application program needs to avoid illegal open, remove and rename to the open objects.
>0Enable file lock function. The value defines how many files/sub-directories can be opened simultaneously under the file lock control. Illigal operations to the open object will be rejected with FR_LOCKED.
+ +

FF_FS_REENTRANT

+

Disable (0) or Enable (1). This option switches the re-entrancy (thread safe) of the FatFs module itself. Note that file/directory access to the different volume is always re-entrant and it can work simultaneously regardless of this option, however, volume management functions, f_mount, f_mkfs and f_fdisk, are always not re-entrant. Only file/directory access to the same volume, in other words, exclusive use of each filesystem object, is under control of this function. To enable this feature, also user provided synchronization handlers, ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj, need to be added to the project. Sample code is available in ffsystem.c.

+ +

FF_FS_TIMEOUT

+

Number of time ticks to abort the file function with FR_TIMEOUT when wait time is too long. This option has no effect when FF_FS_REENTRANT == 0.

+ +

FF_SYNC_t

+

This option defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*, SemaphoreHandle_t and etc. A header file for O/S definitions needs to be included somewhere in the scope of ff.c. This option has no effect when FF_FS_REENTRANT == 0.

+ +
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/dinit.html b/ext/fatfs/documents/doc/dinit.html new file mode 100644 index 0000000000..c668c66b29 --- /dev/null +++ b/ext/fatfs/documents/doc/dinit.html @@ -0,0 +1,46 @@ + + + + + + + + +FatFs - disk_initialize + + + + +
+

disk_initialize

+

The disk_initialize function is called to initializes the storage device.

+
+DSTATUS disk_initialize (
+  BYTE pdrv           /* [IN] Physical drive number */
+);
+
+
+ +
+

Parameter

+
+
pdrv
+
Physical drive number to identify the target device. Always zero at single drive system.
+
+
+ + +
+

Return Values

+

This function returns the current drive status flags as the result. For details of the drive status, refer to the disk_status function.

+
+ +
+

Description

+

This function initializes the storage device and put it ready to generic read/write. When the function succeeded, STA_NOINIT flag in the return value is cleared.

+

Remarks: This function needs to be under control of FatFs module. Application program MUST NOT call this function while FatFs is in use, or FAT structure on the volume can be broken. To re-initialize the filesystem, use f_mount function instead.

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/dioctl.html b/ext/fatfs/documents/doc/dioctl.html new file mode 100644 index 0000000000..52087826a9 --- /dev/null +++ b/ext/fatfs/documents/doc/dioctl.html @@ -0,0 +1,101 @@ + + + + + + + + +FatFs - disk_ioctl + + + + +
+

disk_ioctl

+

The disk_ioctl function is called to control device specific features and miscellaneous functions other than generic read/write.

+
+DRESULT disk_ioctl (
+  BYTE pdrv,     /* [IN] Drive number */
+  BYTE cmd,      /* [IN] Control command code */
+  void* buff     /* [I/O] Parameter and data buffer */
+);
+
+
+ +
+

Parameters

+
+
pdrv
+
Physical drive number to identify the target device.
+
cmd
+
Command code.
+
buff
+
Pointer to the parameter depends on the command code. Do not care if the command has no parameter to be passed.
+
+
+ + +
+

Return Value

+
+
RES_OK (0)
+
The function succeeded.
+
RES_ERROR
+
An error occured.
+
RES_PARERR
+
The command code or parameter is invalid.
+
RES_NOTRDY
+
The device has not been initialized.
+
+
+ + +
+

Description

+

The FatFs module requires only five device independent commands described below.

+ + + + + + + + +
Standard ioctl command used by FatFs
CommandDescription
CTRL_SYNCMakes sure that the device has finished pending write process. If the disk I/O layer or storage device has a write-back cache, the dirty cache data must be committed to media immediately. Nothing to do for this command if each write operation to the media is completed within the disk_write function.
GET_SECTOR_COUNTRetrieves number of available sectors, the largest allowable LBA + 1, on the drive into the LBA_t variable pointed by buff. This command is used by f_mkfs and f_fdisk function to determine the size of volume/partition to be created. It is required when FF_USE_MKFS == 1.
GET_SECTOR_SIZERetrieves sector size, minimum data unit for generic read/write, into the WORD variable pointed by buff. Valid sector sizes are 512, 1024, 2048 and 4096. This command is required only if FF_MAX_SS > FF_MIN_SS. When FF_MAX_SS == FF_MIN_SS, this command will be never used and the read/write function must work in FF_MAX_SS bytes/sector.
GET_BLOCK_SIZERetrieves erase block size of the flash memory media in unit of sector into the DWORD variable pointed by buff. The allowable value is 1 to 32768 in power of 2. Return 1 if the value is unknown or non flash memory media. This command is used by only f_mkfs function and it attempts to align data area on the erase block boundary. It is required when FF_USE_MKFS == 1.
CTRL_TRIMInforms the device that the data on the block of sectors is no longer needed and it can be erased. The sector block is specified in an LBA_t array {<Start LBA>, <End LBA>} pointed by buff. This is an identical command to Trim of ATA device. Nothing to do for this command if this funcion is not supported or not a flash memory device. FatFs does not check the result code and the file function is not affected even if the sector block was not erased well. This command is called on remove a cluster chain and in the f_mkfs function. It is required when FF_USE_TRIM == 1.
+ +

FatFs will never use any device dependent command nor user defined command. Following table shows an example of non-standard commands which may be useful for some applications.

+ + + + + + + + + + + + + + + + + + + + + +
Example of optional ioctl command
CommandDescription
CTRL_FORMATCreates a physical format on the media. If buff is not null, it is pointer to the call-back function for progress notification.
CTRL_POWER_IDLEPuts the device idle state. STA_NOINIT in the current status flags may not be set if the device goes active state by generic read/write function.
CTRL_POWER_OFFPuts the device off state. Shut-down the power to the device and deinitialize the device interface if needed. STA_NOINIT in the current status flags must be set. The device goes active state by disk_initialize function.
CTRL_LOCKLocks media eject mechanism.
CTRL_UNLOCKUnlocks media eject mechanism.
CTRL_EJECTEjects media cartridge. STA_NOINIT and STA_NODISK in status flag are set after the function succeeded.
CTRL_GET_SMARTReads SMART information.
MMC_GET_TYPEGets card type. The type flags, bit0:MMCv3, bit1:SDv1, bit2:SDv2+ and bit3:LBA, is stored to a BYTE variable pointed by buff. (MMC/SDC specific command)
MMC_GET_CSDReads CSD register and sets it into a 16-byte buffer pointed by buff. (MMC/SDC specific command)
MMC_GET_CIDReads CID register and sets it into a 16-byte buffer pointed by buff. (MMC/SDC specific command)
MMC_GET_OCRReads OCR register and sets it into a 4-byte buffer pointed by buff. (MMC/SDC specific command)
MMC_GET_SDSTATReads SDSTATUS register and sets it into a 64-byte buffer pointed by buff. (SDC specific command)
ATA_GET_REVReads the revision string and sets it into a 16-byte buffer pointed by buff. (ATA/CFC specific command)
ATA_GET_MODELReads the model string and sets it into a 40-byte buffer pointed by buff. (ATA/CFC specific command)
ATA_GET_SNReads the serial number string and sets it into a 20-byte buffer pointed by buff. (ATA/CFC specific command)
ISDIO_READReads a block of iSDIO registers specified by command structure pointed by buff. (FlashAir specific command)
ISDIO_WRITEWrites a block of data to iSDIO registers specified by command structure pointed by buff. (FlashAir specific command)
ISDIO_MRITEChanges bits in an iSDIO register specified by command structure pointed by buff. (FlashAir specific command)
+
+ + +
+

QuickInfo

+

The disk_ioctl function is not needed when FF_FS_READONLY == 1 and FF_MAX_SS == FF_MIN_SS.

+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/dread.html b/ext/fatfs/documents/doc/dread.html new file mode 100644 index 0000000000..46d286076b --- /dev/null +++ b/ext/fatfs/documents/doc/dread.html @@ -0,0 +1,73 @@ + + + + + + + + +FatFs - disk_read + + + + +
+

disk_read

+

The disk_read function is called to read data from the sector(s) of storage device.

+
+DRESULT disk_read (
+  BYTE pdrv,     /* [IN] Physical drive number */
+  BYTE* buff,    /* [OUT] Pointer to the read data buffer */
+  LBA_t sector,  /* [IN] Start sector number */
+  UINT count     /* [IN] Number of sectros to read */
+);
+
+
+ +
+

Parameters

+
+
pdrv
+
Physical drive number to identify the target device.
+
buff
+
Pointer to the first item of the byte array to store read data. Size of read data will be the sector size * count bytes.
+
sector
+
Start sector number in LBA. The data type LBA_t is an alias of DWORD or QWORD depends on the configuration option.
+
count
+
Number of sectors to read.
+
+
+ + +
+

Return Value

+
+
RES_OK (0)
+
The function succeeded.
+
RES_ERROR
+
An unrecoverable hard error occured during the read operation.
+
RES_PARERR
+
Invalid parameter.
+
RES_NOTRDY
+
The device has not been initialized.
+
+
+ + +
+

Description

+

Read/write operation to the generic storage devices, such as memory card, hadddisk and optical disk, is done in unit of block of data bytes called sector. FatFs supports the sector size in range of 512 to 4096 bytes. When FatFs is configured for fixed sector size (FF_MIN_SS == FF_MAX_SS, this is the most case), the generic read/write function must work at the sector size only. When FatFs is configured for variable sector size (FF_MIN_SS < FF_MAX_SS), the sector size of medium is inquired with disk_ioctl function after disk_initialize function succeeded.

+

There are some considerations about the memory addres passed via buff. It is not that always aligned with the word boundary, because the argument is defined as BYTE*. The unaligned transfer request can occure at direct transfer. If the bus architecture, especially DMA controller, does not allow unaligned memory access, it should be solved in this function. If it is the case, there are some workarounds described below to avoid this issue.

+ +

Also the memory area may be out of reach in DMA. This is the case if it is located on the tightly coupled memory which is usually used for stack. Use double buffered transfer, or avoid to define file I/O buffer, FATFS and FIL structure as local variables where on the stack.

+

Generally, a multiple sector read request must not be split into single sector transactions to the storage device, or read throughput gets worse.

+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/dstat.html b/ext/fatfs/documents/doc/dstat.html new file mode 100644 index 0000000000..a891489d02 --- /dev/null +++ b/ext/fatfs/documents/doc/dstat.html @@ -0,0 +1,48 @@ + + + + + + + + +FatFs - disk_status + + + + +
+

disk_status

+

The disk_status function is called to inquire the current drive status.

+
+DSTATUS disk_status (
+  BYTE pdrv     /* [IN] Physical drive number */
+);
+
+
+ +
+

Parameter

+
+
pdrv
+
Physical drive number to identify the target device. Always zero in single drive system.
+
+
+ + +
+

Return Values

+

The current drive status is returned in combination of status flags described below. FatFs refers only STA_NOINIT and STA_PROTECT.

+
+
STA_NOINIT
+
Indicates that the device has not been initialized and not ready to work. This flag is set on system reset, media removal or failure of disk_initialize function. It is cleared on disk_initialize function succeeded. Any media change that occurs asynchronously must be captured and reflect it to the status flags, or auto-mount function will not work correctly. If the system does not support media change detection, application program needs to explicitly re-mount the volume with f_mount function after each media change.
+
STA_NODISK
+
Indicates that no medium in the drive. This is always cleared when the drive is non-removable class. Note that FatFs does not refer this flag.
+
STA_PROTECT
+
Indicates that the medium is write protected. This is always cleared when the drive has no write protect function. Not valid if STA_NODISK is set.
+
+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/dwrite.html b/ext/fatfs/documents/doc/dwrite.html new file mode 100644 index 0000000000..10072847c0 --- /dev/null +++ b/ext/fatfs/documents/doc/dwrite.html @@ -0,0 +1,76 @@ + + + + + + + + +FatFs - disk_write + + + + +
+

disk_write

+

The disk_write function is called to write data to the sector(s) of storage device.

+
+DRESULT disk_write (
+  BYTE pdrv,        /* [IN] Physical drive number */
+  const BYTE* buff, /* [IN] Pointer to the data to be written */
+  LBA_t sector,     /* [IN] Sector number to write from */
+  UINT count        /* [IN] Number of sectors to write */
+);
+
+
+ +
+

Parameters

+
+
pdrv
+
Physical drive number to identify the target device.
+
buff
+
Pointer to the first item of the byte array to be written. The size of data to be written is sector size * count bytes.
+
sector
+
Start sector number in LBA. The data type LBA_t is an alias of DWORD or QWORD depends on the configuration option.
+
count
+
Number of sectors to write.
+
+
+ + +
+

Return Values

+
+
RES_OK (0)
+
The function succeeded.
+
RES_ERROR
+
An unrecoverable hard error occured during the write operation.
+
RES_WRPRT
+
The medium is write protected.
+
RES_PARERR
+
Invalid parameter.
+
RES_NOTRDY
+
The device has not been initialized.
+
+
+ + +
+

Description

+

The specified memory address is not that always aligned to word boundary because the argument is defined as BYTE*. For more information, refer to the description of disk_read function.

+

Generally, a multiple sector write request (count > 1) must not be split into single sector transactions to the storage device, or the file write throughput will be drastically decreased.

+

FatFs expects delayed write function of the disk control layer. The write operation to the media does not need to be completed when return from this function by what write operation is in progress or data is only stored into the write-back cache. But write data on the buff is invalid after return from this function. The write completion request is done by CTRL_SYNC command of disk_ioctl function. Therefore, if a delayed write function is implemented, the write throughput of the filesystem will be improved.

+

Remarks: Application program MUST NOT call this function, or FAT structure on the volume can be collapsed.

+
+ + +
+

QuickInfo

+

This function is not needed when FF_FS_READONLY == 1.

+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/eof.html b/ext/fatfs/documents/doc/eof.html new file mode 100644 index 0000000000..efacfbfaab --- /dev/null +++ b/ext/fatfs/documents/doc/eof.html @@ -0,0 +1,62 @@ + + + + + + + + +FatFs - f_eof + + + + +
+

f_eof

+

The f_eof function tests for end-of-file on a file.

+
+int f_eof (
+  FIL* fp   /* [IN] File object */
+);
+
+
+ + +
+

Parameters

+
+
fp
+
Pointer to the open file object structure.
+
+
+ + +
+

Return Values

+

The f_eof function returns a non-zero value if the read/write pointer has reached end of the file; otherwise it returns a zero.

+
+ + +
+

Description

+

In this revision, this function is implemented as a macro. It does not have any validation and mutual exclusion.

+
+#define f_eof(fp) ((int)((fp)->fptr == (fp)->fsize))
+
+
+ + +
+

QuickInfo

+

Always available.

+
+ + +
+

See Also

+

f_open, f_lseek, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/error.html b/ext/fatfs/documents/doc/error.html new file mode 100644 index 0000000000..bee9685d0c --- /dev/null +++ b/ext/fatfs/documents/doc/error.html @@ -0,0 +1,62 @@ + + + + + + + + +FatFs - f_error + + + + +
+

f_error

+

The f_error tests for an error on a file.

+
+int f_error (
+  FIL* fp   /* [IN] File object */
+);
+
+
+ + +
+

Parameters

+
+
fp
+
Pointer to the open file object structure.
+
+
+ + +
+

Return Values

+

Returns a non-zero value if a hard error has occured; otherwise it returns a zero.

+
+ + +
+

Description

+

In this revision, this function is implemented as a macro. It does not have any validation and mutual exclusion.

+
+#define f_error(fp) ((fp)->err)
+
+
+ + +
+

QuickInfo

+

Always available.

+
+ + +
+

See Also

+

f_open, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/expand.html b/ext/fatfs/documents/doc/expand.html new file mode 100644 index 0000000000..7620ba9a54 --- /dev/null +++ b/ext/fatfs/documents/doc/expand.html @@ -0,0 +1,117 @@ + + + + + + + + +FatFs - f_expand + + + + +
+

f_expand

+

The f_expand function prepares or allocates a contiguous data area to the file.

+ +
+FRESULT f_expand (
+  FIL*    fp,  /* [IN] File object */
+  FSIZE_t fsz, /* [IN] File size expanded to */
+  BYTE    opt  /* [IN] Allocation mode */
+);
+
+
+ +
+

Parameters

+
+
fp
+
Pointer to the open file object.
+
fsz
+
Number of bytes in size to prepare or allocate for the file. The data type FSIZE_t is an alias of either DWORD(32-bit) or QWORD(64-bit) depends on the configuration option FF_FS_EXFAT.
+
opt
+
Allocation mode. Prepare to allocate (0) or Allocate now (1).
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_INVALID_OBJECT, +FR_DENIED, +FR_TIMEOUT +

+
+ + +
+

Description

+

The f_expand function prepares or allocates a contiguous data area to the file. When opt is 1, the data area is allocated to the file in this function. Unlike expansion of file size by f_lseek function, the file must be truncated prior to use this function and read/write pointer of the file stays at offset 0 after the function call. The file content allocated with this function is undefined, because no data is written to the file in this process. The function can fail with FR_DENIED due to some reasons below.

+ +

When opt is 0, the function finds a contiguous data area and set it as suggested point for next allocation. The subsequent cluster allocation begins at top of the contiguous area found by this function. Thus the file allocation is guaranteed be contiguous and without allocation delay until the file size reaches this size unless any other changes to the volume is performed.

+

The contiguous file has an advantage for time-critical read/write operations. It eliminates some overheads in the filesystem and the storage device caused by random access for fragmented file.

+

Also the contiguous file can be easily accessed directly via low-level disk functions. However, this is not recommended in consideration of portability and future compatibility. If the file has not been confirmed be contiguous, use this function to examine if the file is contiguous or not.

+
+ +
+

QuickInfo

+

Available when FF_USE_EXPAND == 1 and FF_FS_READONLY == 0.

+
+ + +
+

Example

+
+    /* Creating a contiguous file */
+
+    /* Create a new file */
+    res = f_open(fp = malloc(sizeof (FIL)), "file.dat", FA_WRITE|FA_CREATE_ALWAYS);
+    if (res) { /* Check if the file has been opened */
+        free(fp);
+        die("Failed to open the file.");
+    }
+
+    /* Alloacte a 100 MiB of contiguous area to the file */
+    res = f_expand(fp, 104857600, 1);
+    if (res) { /* Check if the file has been expanded */
+        f_close(fp);
+        free(fp);
+        die("Failed to allocate contiguous area.");
+    }
+
+    /* Now you have a contiguous file accessible with fp */
+
+
+
+    /* Accessing the contiguous file via low-level disk functions */
+
+    /* Get physical location of the file data */
+    drv = fp->obj.fs->pdrv;
+    lba = fp->obj.fs->database + fp->obj.fs->csize * (fp->obj.sclust - 2);
+
+    /* Write 2048 sectors from top of the file at a time */
+    res = disk_write(drv, buffer, lba, 2048);
+
+
+
+ + +
+

See Also

+

f_open, f_lseek, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/fattime.html b/ext/fatfs/documents/doc/fattime.html new file mode 100644 index 0000000000..002733a746 --- /dev/null +++ b/ext/fatfs/documents/doc/fattime.html @@ -0,0 +1,80 @@ + + + + + + + + +FatFs - get_fattime + + + + +
+

get_fattime

+

The get_fattime function is called to get the current time.

+
+DWORD get_fattime (void);
+
+
+ + +
+

Return Value

+

Currnet local time shall be returned as bit-fields packed into a DWORD value. The bit fields are as follows:

+
+
bit31:25
+
Year origin from the 1980 (0..127, e.g. 37 for 2017)
+
bit24:21
+
Month (1..12)
+
bit20:16
+
Day of the month (1..31)
+
bit15:11
+
Hour (0..23)
+
bit10:5
+
Minute (0..59)
+
bit4:0
+
Second / 2 (0..29, e.g. 25 for 50)
+
+
+ + +
+

Description

+

The get_fattime function shall return any valid time even if the system does not support a real time clock. If a zero is returned, the file will not have a valid timestamp.

+
+ + +
+

QuickInfo

+

This function is not needed when FF_FS_READONLY == 1 or FF_FS_NORTC == 1.

+
+ + +
+

Example

+
+DWORD get_fattime (void)
+{
+    time_t t;
+    struct tm *stm;
+
+
+    t = time(0);
+    stm = localtime(&t);
+
+    return (DWORD)(stm->tm_year - 80) << 25 |
+           (DWORD)(stm->tm_mon + 1) << 21 |
+           (DWORD)stm->tm_mday << 16 |
+           (DWORD)stm->tm_hour << 11 |
+           (DWORD)stm->tm_min << 5 |
+           (DWORD)stm->tm_sec >> 1;
+}
+
+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/fdisk.html b/ext/fatfs/documents/doc/fdisk.html new file mode 100644 index 0000000000..d8c40bdb6b --- /dev/null +++ b/ext/fatfs/documents/doc/fdisk.html @@ -0,0 +1,95 @@ + + + + + + + + +FatFs - f_fdisk + + + + +
+

f_fdisk

+

The f_fdisk fucntion divides a physical drive.

+
+FRESULT f_fdisk (
+  BYTE  pdrv,         /* [IN] Physical drive number */
+  const LBA_t ptbl[], /* [IN] Partition map table */
+  void* work          /* [IN] Work area */
+);
+
+
+ +
+

Parameters

+
+
pdrv
+
Specifies the physical drive to be divided. This is not the logical drive number but the drive identifier passed to the low level disk functions.
+
ptbl
+
List of partition size to create on the drive. The data type LBA_t is an alias of DWORD or QWORD depends on the configuration option FF_LBA64.
+
work
+
Pointer to the function work area. The size must be at least FF_MAX_SS bytes. When a null pointer is given with FF_USE_LFN = 3, a memory block is obtained in this function for the working buffer.
+
+
+ +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_NOT_READY, +FR_WRITE_PROTECTED, +FR_INVALID_PARAMETER, +FR_NOT_ENOUGH_CORE +

+
+ +
+

Description

+

The f_fdisk function creates partitions on the physical drive. The partitioning format can be in generic MBR or GPT. The partition map table specifies how to divide the physical drive. The first item specifies the size of the first partition and the partitions are located on the drive in order of from the first item. When the value of item is less than or equal to 100, it specifies the partition size in percentage of the entire drive space. When it is larger than 100, it specifies number of sectors. The partition map table is terminated by a zero, no space is remaining for next allocation or 4th partition is created in MBR format. If the specified size is larger than remaining space on the drive, the partition is truncated at end of the drive.

+

By default, partitions are created in MBR format. It can create upto four primary partitions on a drive. GPT format is used to create the partitions when 64-bit LBA is enabled (FF_LBA64 = 1) and the drive size is equal to or larger than FF_MIN_GPT sectors. It can create over ten partitions on a drive.

+
+ +
+

QuickInfo

+

Available when FF_FS_READOLNY == 0, FF_USE_MKFS == 1 and FF_MULTI_PARTITION == 1.

+
+ +
+

Example

+
+    /* Volume mapping table defined by user (required when FF_MULTI_PARTITION == 1) */
+
+    PARTITION VolToPart[FF_VOLUMES] = {
+        {0, 1},    /* "0:" ==> 1st partition in PD#0 */
+        {0, 2},    /* "1:" ==> 2nd partition in PD#0 */
+        {1, 0}     /* "2:" ==> PD#1 as removable drive */
+    };
+
+
+    /* Initialize a brand-new disk drive mapped to physical drive 0 */
+
+    BYTE work[FF_MAX_SS];         /* Working buffer */
+    LBA_t plist[] = {50, 50, 0};  /* Divide the drive into two partitions */
+                 /* {0x10000000, 100}; 256M sectors for 1st partition and left all for 2nd partition */
+                 /* {20, 20, 20, 0}; 20% for 3 partitions each and remaing space is left not allocated */
+
+    f_fdisk(0, plist, work);                    /* Divide physical drive 0 */
+
+    f_mkfs("0:", 0, work, sizeof work); /* Create FAT volume on the logical drive 0 */
+    f_mkfs("1:", 0, work, sizeof work); /* Create FAT volume on the logical drive 1 */
+
+
+
+ +
+

See Also

+

Volume management, f_mkfs

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/filename.html b/ext/fatfs/documents/doc/filename.html new file mode 100644 index 0000000000..5e4f48a16c --- /dev/null +++ b/ext/fatfs/documents/doc/filename.html @@ -0,0 +1,92 @@ + + + + + + + + +FatFs - Path Names + + + +

Path Names on the FatFs API

+ +
+

Format of the Path Names

+

The format of path name on the FatFs module is similer to the filename specs of DOS/Windos as follows:

+
[drive#:][/]directory/file
+

The FatFs module supports long file name (LFN) and 8.3 format file name (SFN). The LFN can be used when FF_USE_LFN >= 1. The sub-directories are separated with a \ or / as the same way as DOS/Windows API. Duplicated separator and terminating separator, such as "//animal///cat/", are ignored. Only a difference is that the heading drive prefix to specify the logical drive, an FAT volume, is in a digit (0-9) + a colon, while it is in an alphabet (A-Z) + a colon in DOS/Windows. The logical drive number is the identifier to specify the volume to be accessed. When drive prefix is omitted, the logical drive number is assumed as default drive.

+

Control characters (\0 to \x1F) are recognized as end of the path name. In LFN configuration, leading or embedded white spaces in the file name are valid as part of the file name, but the treminating white space and dot of the file name are ignored and truncated. In non-LFN configuration, white space is recognized as end of the path name.

+

In default configuration (FF_FS_RPATH == 0), it does not have a concept of current directory like OS oriented filesystem. Every object on the volume is always specified in full path name followed from the root directory. Dot directory names (".", "..") are not allowed. Heading separator is ignored and it can be exist or omitted. The default drive is fixed to drive 0.

+

When relative path feature is enabled (FF_FS_RPATH >= 1), specified path is followed from the root directory if a heading separator is exist. If not, it is followed from the current directory of the default drive. Dot directory name is also allowed for the path name. The current directory is set by f_chdir function and the default drive is the current drive set by f_chdrive function.

+ + + + + + + + + + + + + + +
Path nameFF_FS_RPATH == 0FF_FS_RPATH >= 1
file.txtA file in the root directory of the drive 0A file in the current directory of the current drive
/file.txtA file in the root directory of the drive 0A file in the root directory of the current drive
The root directory of the drive 0The current directory of the current drive
/The root directory of the drive 0The root directory of the current drive
2:The root directory of the drive 2The current directory of the drive 2
2:/The root directory of the drive 2The root directory of the drive 2
2:file.txtA file in the root directory of the drive 2A file in the current directory of the drive 2
../file.txtInvalid nameA file in the parent directory
.Invalid nameThis directory
..Invalid nameParent directory of the current directory (*)
dir1/..Invalid nameThe current directory
/..Invalid nameThe root directory (sticks the top level)
+

Also the drive prefix can be in pre-defined arbitrary string. When the option FF_STR_VOLUME_ID == 1, also arbitrary string volume ID can be used as drive prefix. e.g. "flash:file1.txt", "ram:temp.dat" or "sd:". If the srting does not match any volume ID, the function fails with FR_INVALID_DRIVE.

+

When FF_STR_VOLUME_ID == 2, Unix style drive prefix can be used. e.g. "/flash/file1.txt", "/ram/temp.dat" or "/sd". If a heading separator is exist, it is treated as start of drive prefix and in absolute path. Any form as "root directory in current drive" and "current directory in specified drive" cannot be used. Double dot name cannot traverse the drives such as "/flash/../ram/foo.dat".

+

Remark: In this revision, double dot name ".." cannot follow the parent directory on the exFAT volume. It will work as "." and stay there.

+
+ +
+

Legal Characters and Case Sensitivity

+

In the generic FAT filesystems, the legal characters for object name (file/directory name) are, 0-9 A-Z ! # $ % & ' ( ) - @ ^ _ ` { } ~ in ASCII and extended characters \x80 to \xFF. In the FAT filesystems with LFN extention, also + , ; = [ ], white space and extended characters U+000080 to U+10FFFF are legal for the object name. White spaces and dots can be placed anywhere in the path name except end of the name. Trailing white spaces and dots are ignored.

+

FAT filesystem is case-insensitive to the object names on the volume. Object name on the FAT volume is compared in case-insensitive. For instance, these three names, file.txt, File.Txt and FILE.TXT, are identical on the FAT filesystem. This is applied to extended charactres as well. When an object is created on the FAT volume, up converted name is recorded to the SFN entry, and the raw name is recorded to the LFN entry when LFN extension is exist.

+

As for the MS-DOS and PC DOS for CJK (DOS/DBCS), extended characters ware recorded to the SFN entry without up-case conversion and compared in case-sensitive. This causes a problem on compatibility with Windows system when the object with extended characters is created on the volume by DOS/DBCS system; therfore the object names with DBCS extended characters should not be used on the FAT volume shared by those systems. FatFs works with case-sensitive to the extended characters in only non-LFN with DBCS configuration (DOS/DBCS specs). But in LFN configuration, FatFs works with case-insensitive to the extended character (WindowsNT specs).

+
+ +
+

Unicode API

+

The path names are input/output in either ANSI/OEM code or Unicode depends on the configuration options. The type of arguments which specifies the path names is defined as TCHAR. It is an alias of char by default and the code set used for the path name string is ANSI/OEM specifid by FF_CODE_PAGE. When FF_LFN_UNICODE is set to 1 or larger, the type of the TCHAR is switched to proper type to support the Unicode string. When Unicode API is specified by this option, the full-featured LFN specification is supported and the Unicode specific characters, such as ✝☪✡☸☭ and any character not in BMP, can also be used for the path name. It also affects data types and encoding of the string I/O functions. To define literal strings, _T(s) and _TEXT(s) macro are available to specify the string in proper type. The code shown below is an example to define the literal strings.

+
+ f_open(fp, "filename.txt", FA_READ);      /* ANSI/OEM string (char) */
+ f_open(fp, L"filename.txt", FA_READ);     /* UTF-16 string (WCHAR) */
+ f_open(fp, u8"filename.txt", FA_READ);    /* UTF-8 string (char) */
+ f_open(fp, U"filename.txt", FA_READ);     /* UTF-32 string (DWORD) */
+ f_open(fp, _T("filename.txt"), FA_READ);  /* Changed by configuration (TCHAR) */
+
+
+ +
+

Volume Management

+

By default, each logical drive is associated with the physical drive in same drive number. An FAT volume on the physical drive is serched in the volume mount process. It reads boot sectors and checks it if it is an FAT boot sector in order of LBA 0 as SFD format, 1st partition, 2nd partition, 3rd partition, ..., as MBR or GPT format.

+

When multiple partition feature is enabled, FF_MULTI_PARTITION = 1, each individual logical drive is associated with arbitrary partition or physical drive specified by volume management table, VolToPart[]. The table needs to be defined by user to resolve mappings of the logical drive numbers and the associated partitions or drives. Following code is an example of the volume management table.

+
+Example: "0:", "1:" and "2:" are associated with three partitions on the physical drive 0 (a non-removable drive)
+         "3:" is associated with physical drive 1 (a removable drive)
+
+PARTITION VolToPart[FF_VOLUMES] = {
+    {0, 1},     /* "0:" ==> 1st partition on the pd#0 */
+    {0, 2},     /* "1:" ==> 2nd partition on the pd#0 */
+    {0, 3},     /* "2:" ==> 3rd partition on the pd#0 */
+    {1, 0}      /* "3:" ==> pd#1 as removable drive (auto-search) */
+};
+
+
relationship between logical drive and physical drive
+

There are some considerations when enable the multi-partition configuration.

+ +
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/findfirst.html b/ext/fatfs/documents/doc/findfirst.html new file mode 100644 index 0000000000..0cd1704729 --- /dev/null +++ b/ext/fatfs/documents/doc/findfirst.html @@ -0,0 +1,118 @@ + + + + + + + + +FatFs - f_findfirst + + + + +
+

f_findfirst

+

The f_findfirst function searches a directroy for an item.

+
+FRESULT f_findfirst (
+  DIR* dp,              /* [OUT] Poninter to the directory object */
+  FILINFO* fno,         /* [OUT] Pointer to the file information structure */
+  const TCHAR* path,    /* [IN] Pointer to the directory name to be opened */
+  const TCHAR* pattern  /* [IN] Pointer to the matching pattern string */
+);
+
+
+ +
+

Parameters

+
+
dp
+
Pointer to the blank directory object.
+
fno
+
Pointer to the file information structure to store the information about the found item.
+
path
+
Pointer to the null-terminated string that specifies the directory name to be opened.
+
pattern
+
Pointer to the nul-terminated string that specifies the name matching pattern to be searched for. It is referred by also subsequent f_findnext function, so that the string must be valid while the successive function calls.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_PATH, +FR_INVALID_NAME, +FR_INVALID_OBJECT, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE, +FR_TOO_MANY_OPEN_FILES +

+
+ + +
+

Description

+

After the directory specified by path could be opened, it starts to search the directory for items with the matching pattern specified by pattern. If the first item is found, the information about the item is stored into the file information structure fno. If not found, fno->fname[] has a null string.

+

The matching pattern string can contain wildcard terms. For example:

+ +

Since the matching algorithm uses recursion, number of wildcard terms in the matching pattern is limited to four to limit the stack usage. Any pattern with too many wildcard terms does not match any name. In LFN configuration, only fname[] is tested when FF_USE_FIND == 1 and also altname[] is tested when FF_USE_FIND == 2. There are some differences listed below between FatFs and standard systems in matching condition.

+ +
+ + +
+

QuickInfo

+

This is a wrapper function of f_opendir and f_readdir function. Available when FF_USE_FIND >= 1 and FF_FS_MINIMIZE <= 1.

+
+ + +
+

Examples

+
+/* Search a directory for objects and display it */
+
+void find_image_file (void)
+{
+    FRESULT fr;     /* Return value */
+    DIR dj;         /* Directory object */
+    FILINFO fno;    /* File information */
+
+    fr = f_findfirst(&dj, &fno, "", "????????.JPG"); /* Start to search for photo files */
+
+    while (fr == FR_OK && fno.fname[0]) {         /* Repeat while an item is found */
+        printf("%s\n", fno.fname);                /* Print the object name */
+        fr = f_findnext(&dj, &fno);               /* Search for next item */
+    }
+
+    f_closedir(&dj);
+}
+
+
+ + +
+

See Also

+

f_findnext, f_closedir, DIR, FILINFO

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/findnext.html b/ext/fatfs/documents/doc/findnext.html new file mode 100644 index 0000000000..f39f0fb74e --- /dev/null +++ b/ext/fatfs/documents/doc/findnext.html @@ -0,0 +1,69 @@ + + + + + + + + +FatFs - f_findnext + + + + +
+

f_findnext

+

The f_findnext function searches for a next matched object

+
+FRESULT f_findnext (
+  DIR* dp,              /* [IN] Poninter to the directory object */
+  FILINFO* fno          /* [OUT] Pointer to the file information structure */
+);
+
+
+ +
+

Parameters

+
+
dp
+
Pointer to the valid directory object created by f_findfirst function.
+
fno
+
Pointer to the file information structure to store the information about the found directory item.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_INVALID_OBJECT, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

It continues the search from a previous call to the f_findfirst or f_findnext function. If found, the information about the object is stored into the file information structure. If no item to be read, a null string will be returned into fno->fname[].

+
+ + +
+

QuickInfo

+

This is a wrapper function of f_readdir function. Available when FF_USE_FIND == 1 and FF_FS_MINIMIZE <= 1.

+
+ + +
+

See Also

+

f_findfirst, f_closedir, DIR, FILINFO

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/forward.html b/ext/fatfs/documents/doc/forward.html new file mode 100644 index 0000000000..97a793d73b --- /dev/null +++ b/ext/fatfs/documents/doc/forward.html @@ -0,0 +1,139 @@ + + + + + + + + +FatFs - f_forward + + + + +
+

f_forward

+

The f_forward function reads the file data and forward it to the data streaming device.

+
+FRESULT f_forward (
+  FIL* fp,                        /* [IN] File object */
+  UINT (*func)(const BYTE*,UINT), /* [IN] Data streaming function */
+  UINT btf,                       /* [IN] Number of bytes to forward */
+  UINT* bf                        /* [OUT] Number of bytes forwarded */
+);
+
+
+ +
+

Parameters

+
+
fp
+
Pointer to the open file object.
+
func
+
Pointer to the user-defined data streaming function. For details, refer to the sample code.
+
btf
+
Number of bytes to forward in range of UINT.
+
bf
+
Pointer to the UINT variable to return number of bytes forwarded.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_INVALID_OBJECT, +FR_DENIED, +FR_TIMEOUT +

+
+ + +
+

Description

+

The f_forward function reads the data from the file and forward it to the outgoing stream without data buffer. This is suitable for small memory system because it does not require any data buffer at application module. The file pointer of the file object increases in number of bytes forwarded. In case of *bf is less than btf without error, it means the requested bytes could not be transferred due to end of file or stream goes busy during data transfer.

+
+ + +
+

QuickInfo

+

Available when FF_USE_FORWARD == 1.

+
+ + +
+

Example

+
+/*------------------------------------------------------------------------*/
+/* Sample code of data transfer function to be called back from f_forward */
+/*------------------------------------------------------------------------*/
+
+UINT out_stream (   /* Returns number of bytes sent or stream status */
+    const BYTE *p,  /* Pointer to the data block to be sent */
+    UINT btf        /* >0: Transfer call (Number of bytes to be sent). 0: Sense call */
+)
+{
+    UINT cnt = 0;
+
+
+    if (btf == 0) {     /* Sense call */
+        /* Return stream status (0: Busy, 1: Ready) */
+        /* When once it returned ready to sense call, it must accept a byte at least */
+        /* at subsequent transfer call, or f_forward will fail with FR_INT_ERR. */
+        if (FIFO_READY) cnt = 1;
+    }
+    else {              /* Transfer call */
+        do {    /* Repeat while there is any data to be sent and the stream is ready */
+            FIFO_PORT = *p++;
+            cnt++;
+        } while (cnt < btf && FIFO_READY);
+    }
+
+    return cnt;
+}
+
+
+/*------------------------------------------------------------------------*/
+/* Sample code using f_forward function                                   */
+/*------------------------------------------------------------------------*/
+
+FRESULT play_file (
+    char *fn        /* Pointer to the audio file name to be played */
+)
+{
+    FRESULT rc;
+    FIL fil;
+    UINT dmy;
+
+    /* Open the audio file in read only mode */
+    rc = f_open(&fil, fn, FA_READ);
+    if (rc) return rc;
+
+    /* Repeat until the file pointer reaches end of the file */
+    while (rc == FR_OK && !f_eof(&fil)) {
+
+        /* some processes... */
+
+        /* Fill output stream periodicaly or on-demand */
+        rc = f_forward(&fil, out_stream, 1000, &dmy);
+    }
+
+    /* Close the file and return */
+    f_close(&fil);
+    return rc;
+}
+
+
+ + +
+

See Also

+

f_open, fgets, f_write, f_close, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/getcwd.html b/ext/fatfs/documents/doc/getcwd.html new file mode 100644 index 0000000000..6eb9a58d1c --- /dev/null +++ b/ext/fatfs/documents/doc/getcwd.html @@ -0,0 +1,83 @@ + + + + + + + + +FatFs - f_getcwd + + + + +
+

f_getcwd

+

The f_getcwd function retrieves the current directory of the current drive.

+
+FRESULT f_getcwd (
+  TCHAR* buff, /* [OUT] Buffer to return path name */
+  UINT len     /* [IN] The length of the buffer */
+);
+
+
+ +
+

Parameters

+
+
buff
+
Pointer to the buffer to receive the current directory string.
+
len
+
Size of the buffer in unit of TCHAR.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

The f_getcwd function retrieves full path name of the current directory of the current drive. When FF_VOLUMES >= 2, a heading drive prefix is added to the path name. The style of drive prefix depends on FF_STR_VOLUME_ID.

+

Note: In this revision, this function cannot retrieve the current directory path on the exFAT volume. It always returns the root directory path.

+
+ + +
+

QuickInfo

+

Available when FF_FS_RPATH == 2.

+
+ + +
+

Example

+
+    FRESULT fr;
+    TCHAR str[SZ_STR];
+
+    fr = f_getcwd(str, SZ_STR);  /* Get current directory path */
+
+
+
+ + +
+

See Also

+

f_chdrive, f_chdir

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/getfree.html b/ext/fatfs/documents/doc/getfree.html new file mode 100644 index 0000000000..5e4f4193a5 --- /dev/null +++ b/ext/fatfs/documents/doc/getfree.html @@ -0,0 +1,94 @@ + + + + + + + + +FatFs - f_getfree + + + + +
+

f_getfree

+

The f_getfree function gets number of the free clusters on the volume.

+
+FRESULT f_getfree (
+  const TCHAR* path,  /* [IN] Logical drive number */
+  DWORD* nclst,       /* [OUT] Number of free clusters */
+  FATFS** fatfs       /* [OUT] Corresponding filesystem object */
+);
+
+
+ +
+

Parameters

+
+
path
+
Pointer to the null-terminated string that specifies the logical drive. A null-string means the default drive.
+
nclst
+
Pointer to the DWORD variable to store number of free clusters.
+
fatfs
+
Pointer to pointer that to store a pointer to the corresponding filesystem object.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT +

+
+ + +
+

Descriptions

+

The f_getfree function gets number of free clusters on the volume. The member csize in the filesystem object indicates number of sectors per cluster, so that the free space in unit of sector can be calcurated with this information. In case of FSINFO structure on the FAT32 volume is not in sync, this function can return an incorrect free cluster count. To avoid this problem, FatFs can be forced full FAT scan by FF_FS_NOFSINFO option.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_FS_MINIMIZE == 0.

+
+ + +
+

Example

+
+    FATFS *fs;
+    DWORD fre_clust, fre_sect, tot_sect;
+
+
+    /* Get volume information and free clusters of drive 1 */
+    res = f_getfree("1:", &fre_clust, &fs);
+    if (res) die(res);
+
+    /* Get total sectors and free sectors */
+    tot_sect = (fs->n_fatent - 2) * fs->csize;
+    fre_sect = fre_clust * fs->csize;
+
+    /* Print the free space (assuming 512 bytes/sector) */
+    printf("%10lu KiB total drive space.\n%10lu KiB available.\n", tot_sect / 2, fre_sect / 2);
+
+
+ + +
+

See Also

+

FATFS

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/getlabel.html b/ext/fatfs/documents/doc/getlabel.html new file mode 100644 index 0000000000..0ec6d0d4e9 --- /dev/null +++ b/ext/fatfs/documents/doc/getlabel.html @@ -0,0 +1,90 @@ + + + + + + + + +FatFs - f_getlabel + + + + +
+

f_getlabel

+

The f_getlabel function returns volume label and volume serial number of a volume.

+
+FRESULT f_getlabel (
+  const TCHAR* path,  /* [IN] Drive number */
+  TCHAR* label,       /* [OUT] Volume label */
+  DWORD* vsn          /* [OUT] Volume serial number */
+);
+
+
+ +
+

Parameters

+
+
path
+
Pointer to the null-terminated string that specifies the logical drive. Null-string specifies the default drive.
+
label
+
Pointer to the buffer to store the volume label. If the volume has no label, a null-string will be returned. Set null pointer if this information is not needed. The buffer size should be shown below at least to avoid buffer overflow.
+ + + + + + +
ConfigurationFF_FS_EXFAT == 0FF_FS_EXFAT == 1
FF_USE_LFN == 012 items-
FF_LFN_UNICODE == 012 items23 items
FF_LFN_UNICODE == 1,312 items12 items
FF_LFN_UNICODE == 234 items34 items
+
+
vsn
+
Pointer to the DWORD variable to store the volume serial number. Set null pointer if this information is not needed.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT +

+
+ + +
+

QuickInfo

+

Available when FF_USE_LABEL == 1.

+
+ + +
+

Example

+
+    char str[12];
+
+    /* Get volume label of the default drive */
+    f_getlabel("", str, 0);
+
+    /* Get volume label of the drive 2 */
+    f_getlabel("2:", str, 0);
+
+
+ + +
+

See Also

+f_setlabel +
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/gets.html b/ext/fatfs/documents/doc/gets.html new file mode 100644 index 0000000000..89d95607cd --- /dev/null +++ b/ext/fatfs/documents/doc/gets.html @@ -0,0 +1,65 @@ + + + + + + + + +FatFs - f_gets + + + + +
+

f_gets

+

The f_gets reads a string from the file.

+
+TCHAR* f_gets (
+  TCHAR* buff, /* [OUT] Read buffer */
+  int len,     /* [IN] Size of the read buffer */
+  FIL* fp      /* [IN] File object */
+);
+
+
+ +
+

Parameters

+
+
buff
+
Pointer to read buffer to store the read string.
+
len
+
Size of the read buffer in unit of item.
+
fp
+
Pointer to the open file object structure.
+
+
+ + +
+

Return Values

+

When the function succeeded, buff will be returuned.

+
+ + +
+

Description

+

The read operation continues until a '\n' is stored, reached end of the file or the buffer is filled with len - 1 characters. The read string is terminated with a '\0'. When no character to read or any error occured during read operation, it returns a null pointer. The status of EOF and error can be examined with f_eof and f_error function.

+

When FatFs is configured to Unicode API (FF_LFN_UNICODE >= 1), data types on the srting fuctions, f_putc, f_puts, f_printf and f_gets, is also switched to Unicode. The character encoding on the file to be read via this function is assumed as FF_STRF_ENCODE. If the character encoding on the file differs from that on the API, it is converted in this function. In this case, input characters with wrong encoding will be lost.

+
+ + +
+

QuickInfo

+

This is a wrapper function of f_read function. Available when FF_USE_STRFUNC >= 1. When it is set to 2, '\r's contained in the file are stripped out.

+
+ + +
+

See Also

+

f_open, f_read, f_putc, f_puts, f_printf, f_close, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/lseek.html b/ext/fatfs/documents/doc/lseek.html new file mode 100644 index 0000000000..ffd1f6221d --- /dev/null +++ b/ext/fatfs/documents/doc/lseek.html @@ -0,0 +1,139 @@ + + + + + + + + +FatFs - f_lseek + + + + +
+

f_lseek

+

The f_lseek function moves the file read/write pointer of an open file object. It can also be used to expand the file size (cluster pre-allocation).

+ +
+FRESULT f_lseek (
+  FIL*    fp,  /* [IN] File object */
+  FSIZE_t ofs  /* [IN] Offset of file read/write pointer to be set */
+);
+
+
+FRESULT f_rewind (
+  FIL*    fp   /* [IN] File object */
+);
+
+
+ +
+

Parameters

+
+
fp
+
Pointer to the open file object.
+
ofs
+
Byte offset from top of the file to set read/write pointer. The data type FSIZE_t is an alias of either DWORD(32-bit) or QWORD(64-bit) depends on the configuration option FF_FS_EXFAT.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_INVALID_OBJECT, +FR_TIMEOUT +

+
+ + +
+

Description

+

File read/write ponter in the open file object points the data byte to be read/written at next read/write operation. It advances as the number of bytes read/written. The f_lseek function moves the file read/write pointer without any read/write operation to the file. The f_rewind function is impremented as a macro.

+
+#define f_rewind(fp) f_lseek((fp), 0)
+
+

If an offset beyond the file size is specified in write mode, the file size is expanded to the specified offset. The file data in the expanded part is undefined, because no data is written to the file in this process. This is suitable to pre-allocate a data area to the file quickly for fast write operation. When a contiguous data area needs to be allocated to the file, use f_expand function instead. After the f_lseek function succeeded, the current read/write pointer should be checked in order to make sure the read/write pointer has been moved correctry. In case of the read/write pointer is not pointing expected offset, either of followings has been occured.

+ +

The fast seek feature enables fast backward/long seek operations without FAT access by using an on-memory CLMT (cluster link map table). It is applied to f_read and f_write function as well, however, the file size cannot be expanded by f_write, f_lseek function while the file is at fast seek mode.

+

The fast seek mode is available when FF_USE_FASTSEEK = 1. The CLMT must be created into the DWORD array prior to use the fast seek mode. To create the CLMT, set address of the DWORD array to the member cltbl in the open file object, set the size of array in unit of items to the cltbl[0] and then call f_lseek function with ofs = CREATE_LINKMAP. After the function succeeded, no FAT access is occured in subsequent f_read, f_write, f_lseek function to the file. The number of items used or required is returned into the cltbl[0]. The number of items needed is (number of the file fragments + 1) * 2. For example, 12 items in the array will be used for the file fragmented in 5 portions. If the function failed with FR_NOT_ENOUGH_CORE, the size of given array is insufficient for the file.

+
+ + +
+

QuickInfo

+

Available when FF_FS_MINIMIZE <= 2. To use fast seek function, FF_USE_FASTSEEK needs to be set 1 to enable this feature.

+
+ + +
+

Example

+
+    /* Open file */
+    fp = malloc(sizeof (FIL));
+    res = f_open(fp, "file.dat", FA_READ|FA_WRITE);
+    if (res) ...
+
+    /* Set read/write pointer to 5000 */
+    res = f_lseek(fp, 5000);
+
+    /* Set read/write pointer to end of the file to append data */
+    res = f_lseek(fp, f_size(fp));
+
+    /* Advance read/write pointer 3000 bytes */
+    res = f_lseek(fp, f_tell(fp) + 3000);
+
+    /* Rewind read/write pointer 2000 bytes (take care on wraparound) */
+    res = f_lseek(fp, f_tell(fp) - 2000);
+
+
+/* Cluster pre-allocation (to prevent buffer overrun on streaming write) */
+
+    res = f_open(fp, recfile, FA_CREATE_NEW | FA_WRITE);   /* Create a file */
+
+    res = f_lseek(fp, PRE_SIZE);             /* Expand file size (cluster pre-allocation) */
+    if (res || f_tell(fp) != PRE_SIZE) ...   /* Check if the file has been expanded successfly */
+
+    res = f_lseek(fp, OFS_DATA);             /* Record data stream with free from cluster allocation delay */
+    ...                                      /* Write operation should be aligned to sector boundary to optimize the write throughput */
+
+    res = f_truncate(fp);                    /* Truncate unused area */
+    res = f_lseek(fp, OFS_HEADER);           /* Set file header */
+    ...
+
+    res = f_close(fp);
+
+
+/* Using fast seek mode */
+
+    DWORD clmt[SZ_TBL];                    /* Cluster link map table buffer */
+
+    res = f_open(fp, fname, FA_READ | FA_WRITE);   /* Open a file */
+
+    res = f_lseek(fp, ofs1);               /* This is normal seek (cltbl is nulled on file open) */
+
+    fp->cltbl = clmt;                      /* Enable fast seek mode (cltbl != NULL) */
+    clmt[0] = SZ_TBL;                      /* Set table size */
+    res = f_lseek(fp, CREATE_LINKMAP);     /* Create CLMT */
+    ...
+
+    res = f_lseek(fp, ofs2);               /* This is fast seek */
+
+
+ + +
+

See Also

+

f_open, f_truncate, f_expand, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/mkdir.html b/ext/fatfs/documents/doc/mkdir.html new file mode 100644 index 0000000000..de32f834a6 --- /dev/null +++ b/ext/fatfs/documents/doc/mkdir.html @@ -0,0 +1,80 @@ + + + + + + + + +FatFs - f_mkdir + + + + +
+

f_mkdir

+

The f_mkdir function creates a new directory.

+
+FRESULT f_mkdir (
+  const TCHAR* path /* [IN] Directory name */
+);
+
+
+ +
+

Parameter

+
+
path
+
Pointer to the null-terminated string that specifies the directory name to create.
+
+
+ + +
+

Return Value

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_PATH, +FR_INVALID_NAME, +FR_DENIED, +FR_EXIST, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

This function creates a new directory. To remove a directory, use f_unlink function.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_FS_MINIMIZE == 0.

+
+ + +
+

Example

+
+    res = f_mkdir("sub1");
+    if (res) die(res);
+    res = f_mkdir("sub1/sub2");
+    if (res) die(res);
+    res = f_mkdir("sub1/sub2/sub3");
+    if (res) die(res);
+
+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/mkfs.html b/ext/fatfs/documents/doc/mkfs.html new file mode 100644 index 0000000000..3f3bd70471 --- /dev/null +++ b/ext/fatfs/documents/doc/mkfs.html @@ -0,0 +1,127 @@ + + + + + + + + +FatFs - f_mkfs + + + + +
+

f_mkfs

+

The f_mkfs function creates an FAT/exFAT volume on the logical drive.

+
+FRESULT f_mkfs (
+  const TCHAR* path,   /* [IN] Logical drive number */
+  const MKFS_PARM* opt,/* [IN] Format options */
+  void* work,          /* [-]  Working buffer */
+  UINT len             /* [IN] Size of working buffer */
+);
+
+
+ +
+

Parameters

+
+
path
+
Pointer to the null-terminated string specifies the logical drive to be formatted. If it does not have a drive number in it, it means to specify the default drive. The logical drive may or may not have been mounted for the format process.
+
opt
+
Specifies the format option structure MKFS_PARM holding format options. If a null pointer is given, it gives the function all options in default value. The structure has five members described below:
+
+
BYTE fmt
+
Specifies combination of FAT type flags, FM_FAT, FM_FAT32, FM_EXFAT and bitwise-or of these three, FM_ANY. FM_EXFAT is ignored when exFAT is not enabled. These flags specify which FAT type to be created on the volume. If two or more types are specified, one out of them will be selected depends on the volume size and au_size. The flag FM_SFD specifies to create the volume on the drive in SFD format. The default value is FM_ANY.
+
DWORD au_size
+
Specifies size of the allocation unit (cluter) in unit of byte. The valid value is power of 2 between sector size and 128 * sector size inclusive for FAT/FAT32 volume, or up to 16 MB for exFAT volume. If a zero (default value) or any invalid value is given, the function uses default allocation unit size depends on the volume size.
+
UINT n_align
+
Specifies alignment of the volume data area (file allocation pool, usually erase block boundary of flash memory media) in unit of sector. The valid value for this member is between 1 and 32768 inclusive in power of 2. If a zero (the default value) or any invalid value is given, the function obtains the block size from lower layer with disk_ioctl function.
+
BYTE n_fat
+
Specifies number of FAT copies on the FAT/FAT32 volume. Valid value for this member is 1 or 2. The default value (0) and any invaid value gives 1. If the FAT type is exFAT, this member has no effect.
+
UINT n_root
+
Specifies number of root directory entries on the FAT volume. Valid value for this member is up to 32768 and aligned to sector size / 32. The default value (0) and any invaid value gives 512. If the FAT type is FAT32 or exFAT, this member has no effect.
+
+
work
+
Pointer to the working buffer used for the format process. If a null pointer is given with FF_USE_LFN == 3, the function obtains a memory block for the working buffer in this function.
+
len
+
Size of the working buffer in unit of byte. It needs to be FF_MAX_SS at least. Plenty of working buffer reduces number of write transactions to the drive and the format process will finish quickly.
+
+
+ +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_NOT_READY, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_MKFS_ABORTED, +FR_INVALID_PARAMETER, +FR_NOT_ENOUGH_CORE +

+
+ +
+

Description

+

The FAT sub-type, FAT12/FAT16/FAT32, of FAT volume except exFAT is determined by only number of clusters on the volume and nothing else, according to the FAT specification issued by Microsoft. Thus the FAT sub-type of created volume depends on the volume size and the cluster size. In case of the combination of FAT type and cluter size specified by argument is not valid for the volume size, the function will fail with FR_MKFS_ABORTED.

+

The allocation unit, also known as cluster, is a unit of disk space allocation for files. When the size of allocation unit is 32768 bytes, a file with 100 bytes in size occupies 32768 bytes of disk space. The space efficiency of disk usage gets worse as increasing size of allocation unit, but, on the other hand, the read/write performance increases. Therefore the size of allocation unit is a trade-off between space efficiency and performance. For the large volumes in GB order, 32768 bytes or larger, automatically selected by default, is recommended for most case unless extremely many small files are created in the volume.

+

When the logical drive to be formatted is associated with a physical drive (FF_MULTI_PARTITION == 0 or VolToPart[].pt == 0) and FM_SFD flag is not specified, a partition occupies entire drive space is created and then the FAT volume is created in the partition. When FM_SFD flag is specified, the FAT volume is created without any disk partitioning.

+

When the logical drive to be formatted is associated with a specific partition by multiple partition feature (FF_MULTI_PARTITION == 1 and VolToPart[].pt > 0), the FAT volume is created in the partition of the physical drive specified by volume mapping table and FM_SFD flag is ignored. The hosting physical drive needs to be partitioned with f_fdisk function or any partitioning tool prior to create the FAT volume with this function. If the partition is not exist, the function aborts with FR_MKFS_ABORTED.

+

There are three standard disk partitioning formats, MBR, GPT and SFD. The MBR format, also known as FDISK format, is usually used for harddisk, memory card and U disk. It can divide a physical drive into one or more partitions with a partition table. The GPT, GUID Partition Table, is a newly defined patitioning format for large storage devices. FatFs suppors the GPT only when 64-bit LBA is enabled. The SFD, Super-Floppy Disk, is non-partitioned disk format. The FAT volume is located at LBA 0 and occupies the entire physical drive without any disk partitioning. It is usually used for floppy disk, optical disk and most super-floppy media. Some combination of systems and media support only either partitioned format or non-partitioned format and the other is not supported.

+

Some systems manage the partitions in the on-board storage in non-standard format. The partitions are mapped as physical drives identified by pdrv in disk_* functions. For such systems, SFD format is suitable to create the FAT volume in the partition.

+
+ +
+

QuickInfo

+

Available when FF_FS_READOLNY == 0 and FF_USE_MKFS == 1.

+
+ +
+

Example

+
+/* Format default drive and create a file */
+int main (void)
+{
+    FATFS fs;           /* Filesystem object */
+    FIL fil;            /* File object */
+    FRESULT res;        /* API result code */
+    UINT bw;            /* Bytes written */
+    BYTE work[FF_MAX_SS]; /* Work area (larger is better for processing time) */
+
+
+    /* Format the default drive with default parameters */
+    res = f_mkfs("", 0, work, sizeof work);
+    if (res) ...
+
+    /* Give a work area to the default drive */
+    f_mount(&fs, "", 0);
+
+    /* Create a file as new */
+    res = f_open(&fil, "hello.txt", FA_CREATE_NEW | FA_WRITE);
+    if (res) ...
+
+    /* Write a message */
+    f_write(&fil, "Hello, World!\r\n", 15, &bw);
+    if (bw != 15) ...
+
+    /* Close the file */
+    f_close(&fil);
+
+    /* Unregister work area */
+    f_mount(0, "", 0);
+
+    ...
+
+
+ +
+

See Also

+

Example of volume size and format parameters, Volume management, f_fdisk

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/mount.html b/ext/fatfs/documents/doc/mount.html new file mode 100644 index 0000000000..57f40bedd0 --- /dev/null +++ b/ext/fatfs/documents/doc/mount.html @@ -0,0 +1,122 @@ + + + + + + + + +FatFs - f_mount + + + + +
+

f_mount

+

The f_mount fucntion gives work area to the FatFs module.

+
+FRESULT f_mount (
+  FATFS*       fs,    /* [IN] Filesystem object */
+  const TCHAR* path,  /* [IN] Logical drive number */
+  BYTE         opt    /* [IN] Initialization option */
+);
+
+
+FRESULT f_unmount (
+  const TCHAR* path   /* [IN] Logical drive number */
+);
+
+
+ +
+

Parameters

+
+
fs
+
Pointer to the filesystem object to be registered and cleared. Null pointer unregisters the registered filesystem object.
+
path
+
Pointer to the null-terminated string that specifies the logical drive. The string without drive number means the default drive.
+
opt
+
Mounting option. 0: Do not mount now (to be mounted on the first access to the volume), 1: Force mounted the volume to check if it is ready to work.
+
+
+ +
+

Return Values

+

+FR_OK, +FR_INVALID_DRIVE, +FR_DISK_ERR, +FR_NOT_READY, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM +

+
+ + +
+

Description

+

FatFs requires work area (filesystem object) for each logical drives (FAT volumes). Prior to perform any file/directory operations, a filesystem object needs to be registered with f_mount function for the logical drive. The file/directory API functions get ready to work after this procedure. Some volume management functions, f_mkfs, f_fdisk and f_setcp, do not want a filesystem object.

+

The f_mount function registers/unregisters a filesystem object to the FatFs module as follows:

+
    +
  1. Determines the logical drive which specified by path.
  2. +
  3. Clears and unregisters the regsitered work area of the volume if exist.
  4. +
  5. Clears and registers the new work area to the volume if fs is not NULL.
  6. +
  7. Performs volume mount process to the volume if forced mounting is specified.
  8. +
+

If there is any open object of file or directory on the logical drive, the object will be invalidated by this function.

+

If forced mounting is not specified (opt = 0), this function always succeeds regardless of the physical drive status. It only clears (de-initializes) the given work area and registers its address to the internal table and no activity of the physical drive in this function. The volume mount process will be attempted on subsequent file/directroy function if the filesystem object is not initialized. (delayed mounting) The volume mount processes, initialize the corresponding physical drive, find the FAT volume in it and then initialize the work area, is performed in the subsequent file/directory functions when either of following conditions is true.

+ +

If the function with forced mounting (opt = 1) failed with FR_NOT_READY, it means that the filesystem object has been registered successfully but the volume is currently not ready to work. The volume mount process will be attempted on subsequent file/directroy function.

+

If implementation of the disk I/O layer lacks asynchronous media change detection, application program needs to perform f_mount function after each media change to force cleared the filesystem object.

+

To unregister the work area, specify a NULL to the fs, and then the work area can be discarded. f_unmount function is implemented as a macro.

+
+#define f_unmount(path) f_mount(0, path, 0)
+
+
+ + +
+

QuickInfo

+

Always available.

+
+ + +
+

Example

+
+int main (void)
+{
+    FATFS *fs;     /* Ponter to the filesystem object */
+
+
+    fs = malloc(sizeof (FATFS));           /* Get work area for the volume */
+    f_mount(fs, "", 0);                    /* Mount the default drive */
+
+    f_open(...                             /* Here any file API can be used */
+
+    ...
+
+    f_mount(fs, "", 0);                    /* Re-mount the default drive to reinitialize the filesystem */
+
+    ...
+
+    f_mount(0, "", 0);                     /* Unmount the default drive */
+    free(fs);                              /* Here the work area can be discarded */
+
+    ...
+}
+
+
+ + +
+

See Also

+

f_open, FATFS

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/open.html b/ext/fatfs/documents/doc/open.html new file mode 100644 index 0000000000..dd2a6e6613 --- /dev/null +++ b/ext/fatfs/documents/doc/open.html @@ -0,0 +1,185 @@ + + + + + + + + +FatFs - f_open + + + + +
+

f_open

+

The f_open function opens a file.

+
+FRESULT f_open (
+  FIL* fp,           /* [OUT] Pointer to the file object structure */
+  const TCHAR* path, /* [IN] File name */
+  BYTE mode          /* [IN] Mode flags */
+);
+
+
+ +
+

Parameters

+
+
fp
+
Pointer to the blank file object structure.
+
path
+
Pointer to the null-terminated string that specifies the file name to open or create.
+
mode
+
Mode flags that specifies the type of access and open method for the file. It is specified by a combination of following flags.
+ + + + + + + + + +
FlagsMeaning
FA_READSpecifies read access to the file. Data can be read from the file.
FA_WRITESpecifies write access to the file. Data can be written to the file. Combine with FA_READ for read-write access.
FA_OPEN_EXISTINGOpens a file. The function fails if the file is not existing. (Default)
FA_CREATE_NEWCreates a new file. The function fails with FR_EXIST if the file is existing.
FA_CREATE_ALWAYSCreates a new file. If the file is existing, it will be truncated and overwritten.
FA_OPEN_ALWAYSOpens the file if it is existing. If not, a new file will be created.
FA_OPEN_APPENDSame as FA_OPEN_ALWAYS except the read/write pointer is set end of the file.
+Mode flags in POSIX fopen() function corresponds to FatFs mode flags as follows:
+ + + + + + + + + + +
POSIXFatFs
"r"FA_READ
"r+"FA_READ | FA_WRITE
"w"FA_CREATE_ALWAYS | FA_WRITE
"w+"FA_CREATE_ALWAYS | FA_WRITE | FA_READ
"a"FA_OPEN_APPEND | FA_WRITE
"a+"FA_OPEN_APPEND | FA_WRITE | FA_READ
"wx"FA_CREATE_NEW | FA_WRITE
"w+x"FA_CREATE_NEW | FA_WRITE | FA_READ
+
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_FILE, +FR_NO_PATH, +FR_INVALID_NAME, +FR_DENIED, +FR_EXIST, +FR_INVALID_OBJECT, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_LOCKED, +FR_NOT_ENOUGH_CORE, +FR_TOO_MANY_OPEN_FILES +

+
+ + +
+

Description

+

The f_open function opens a file and creates a file object. The file object is used for subsequent read/write operations to the file to identify the file. Open file should be closed with f_close function after the session of the file access. If any change to the file is made and not closed prior to power down, media removal or re-mount, or the file can be collapsed.

+

If duplicated file open is needed, read here carefully. However duplicated open of a file with any write mode flag is always prohibited.

+
+ + +
+

QuickInfo

+

Always available. Only FA_READ and FA_OPEN_EXISTING are available for the mode flags when FF_FS_READONLY == 1.

+
+ + +
+

Example

+
+/* Read a text file and display it */
+
+FATFS FatFs;   /* Work area (filesystem object) for logical drive */
+
+int main (void)
+{
+    FIL fil;        /* File object */
+    char line[100]; /* Line buffer */
+    FRESULT fr;     /* FatFs return code */
+
+
+    /* Give a work area to the default drive */
+    f_mount(&FatFs, "", 0);
+
+    /* Open a text file */
+    fr = f_open(&fil, "message.txt", FA_READ);
+    if (fr) return (int)fr;
+
+    /* Read every line and display it */
+    while (f_gets(line, sizeof line, &fil)) {
+        printf(line);
+    }
+
+    /* Close the file */
+    f_close(&fil);
+
+    return 0;
+}
+
+
+/* Copy a file "file.bin" on the drive 1 to drive 0 */
+
+int main (void)
+{
+    FATFS fs0, fs1;      /* Work area (filesystem object) for logical drives */
+    FIL fsrc, fdst;      /* File objects */
+    BYTE buffer[4096];   /* File copy buffer */
+    FRESULT fr;          /* FatFs function common result code */
+    UINT br, bw;         /* File read/write count */
+
+
+    /* Give work areas to each logical drive */
+    f_mount(&fs0, "0:", 0);
+    f_mount(&fs1, "1:", 0);
+
+    /* Open source file on the drive 1 */
+    fr = f_open(&fsrc, "1:file.bin", FA_READ);
+    if (fr) return (int)fr;
+
+    /* Create destination file on the drive 0 */
+    fr = f_open(&fdst, "0:file.bin", FA_WRITE | FA_CREATE_ALWAYS);
+    if (fr) return (int)fr;
+
+    /* Copy source to destination */
+    for (;;) {
+        fr = f_read(&fsrc, buffer, sizeof buffer, &br); /* Read a chunk of data from the source file */
+        if (br == 0) break; /* error or eof */
+        fr = f_write(&fdst, buffer, br, &bw);           /* Write it to the destination file */
+        if (bw < br) break; /* error or disk full */
+    }
+
+    /* Close open files */
+    f_close(&fsrc);
+    f_close(&fdst);
+
+    /* Unregister work area prior to discard it */
+    f_unmount("0:");
+    f_unmount("1:");
+
+    return (int)fr;
+}
+
+
+ + +
+

See Also

+

f_read, f_write, f_close, FIL, FATFS

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/opendir.html b/ext/fatfs/documents/doc/opendir.html new file mode 100644 index 0000000000..215c37a673 --- /dev/null +++ b/ext/fatfs/documents/doc/opendir.html @@ -0,0 +1,75 @@ + + + + + + + + +FatFs - f_opendir + + + + +
+

f_opendir

+

The f_opendir function opens a directory.

+
+FRESULT f_opendir (
+  DIR* dp,           /* [OUT] Pointer to the directory object structure */
+  const TCHAR* path  /* [IN] Directory name */
+);
+
+
+ +
+

Parameters

+
+
dp
+
Pointer to the blank directory object to create a new one.
+
path
+
Pointer to the null-terminated string that specifies the directory name to be opened.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_PATH, +FR_INVALID_NAME, +FR_INVALID_OBJECT, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE, +FR_TOO_MANY_OPEN_FILES +

+
+ + +
+

Description

+

The f_opendir function opens an exsisting directory and creates a directory object for subsequent f_readdir function.

+
+ + +
+

QuickInfo

+

Available when FF_FS_MINIMIZE <= 1.

+
+ + +
+

See Also

+

f_readdir, f_closedir, DIR

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/printf.html b/ext/fatfs/documents/doc/printf.html new file mode 100644 index 0000000000..557fb574de --- /dev/null +++ b/ext/fatfs/documents/doc/printf.html @@ -0,0 +1,114 @@ + + + + + + + + +FatFs - f_printf + + + + +
+

f_printf

+

The f_printf function writes formatted string to the file.

+
+int f_printf (
+  FIL* fp,          /* [IN] File object */
+  const TCHAR* fmt, /* [IN] Format stirng */
+  ...
+);
+
+
+ +
+

Parameters

+
+
fp
+
Pointer to the open file object structure.
+
fmt
+
Pointer to the null '\0' terminated format string. The terminator character will not be output.
+
...
+
Optional arguments...
+ +
+
+ + +
+

Return Values

+

When the string was written successfuly, it returns number of character encoding units written to the file. When the function failed due to disk full or an error, a negative value will be returned.

+
+ + +
+

Description

+

The format control directive is a sub-set of standard library shown as follows:

+
+    %[flag][width][precision][size]type
+
+
+
flag
Padding options. A - specifies left-aligned. A 0 specifies zero padded. The default setting is in right-aligned and space padded.
+
width
Minimum width of the field, 1-99 or *. If the width of generated string is less than the specified value, rest field is padded with spaces or zeros. An * specifies the value comes from an argument in int type.
+
precision
Specifies number of fractional digits or maximum width of string, .0-.99 or .*. If number is omitted, it will be same as .0. Default setting is 6 for number and no limit for string.
+
size
Specifies size of integer argument, l(long) and ll(long long). If sizeof (long) == sizeof (int) is true (this is typical of 32-bit systems), prefix l can be omitted for long integer argument. The default size is int for integer arrument and floating point argument is always assumed double.
+
type
Specifies type of the output format and the argument as shown below. The length of generated string is in assumtion of int is 32-bit. + + + + + + + + + + + +
TypeFormatArgumentLength
cCharacterint,
long,
long long
1 character.
dSigned decimal1 to 11 (20 for ll) characters.
uUnsigned decimal1 to 10 (20 for ll) characters.
oUnsigned octal1 to 11 (22 for ll) characters.
x XUnsigned hexdecimal1 to 8 (16 for ll) characters.
bUnsigned binary1 to 32 characters. Limited to lower 32 digits when ll is specified.
sStringTCHAR*As input string. Null pointer generates a null string.
fFloating point
(decimal)
double1 to 31 characters. If the number of characters exceeds 31, it writes "±OV". Not a number and infinite write "NaN" and "±INF".
e EFloating point
(e notation)
4 to 31 characters. If the number of characters exceeds 31 or exponent exceeds +99, it writes "±OV".
+
+
+

When FatFs is configured for Unicode API (FF_LFN_UNICODE >= 1), character encoding on the string fuctions, f_putc, f_puts, f_printf and f_gets function, is also switched to Unicode. The Unicode characters in multiple encoding unit, such as surrogate pair and multi-byte sequence, should not be divided into two function calls, or the character will be lost. The character encoding on the file to be written via this function is selected by FF_STRF_ENCODE. The characters with wrong encoding or invalid for the output encoding will be lost.

+
+ + +
+

QuickInfo

+

This is a wrapper function of f_write function. Available when FF_FS_READONLY == 0 and FF_USE_STRFUNC >= 1. When FF_USE_STRFUNC == 2, '\n's in the generated string are written as '\r'+'\n' each.

+
+ + +
+

Example

+
+    f_printf(fp, "%d", 1234);             /* "1234" */
+    f_printf(fp, "%6d,%3d%%", -200, 5);   /* "  -200,  5%" */
+    f_printf(fp, "%-6u", 100);            /* "100   " */
+    f_printf(fp, "%ld", 12345678);        /* "12345678" */
+    f_printf(fp, "%llu", 0x100000000);    /* "4294967296"   (FF_PRINT_LLI) */
+    f_printf(fp, "%lld", -1LL);           /* "-1"           (FF_PRINT_LLI) */
+    f_printf(fp, "%04x", 0xA3);           /* "00a3" */
+    f_printf(fp, "%08lX", 0x123ABC);      /* "00123ABC" */
+    f_printf(fp, "%016b", 0x550F);        /* "0101010100001111" */
+    f_printf(fp, "%*d", 6, 100);          /* "   100" */
+    f_printf(fp, "%s", "abcdefg");        /* "abcdefg" */
+    f_printf(fp, "%5s", "abc");           /* "  abc" */
+    f_printf(fp, "%-5s", "abc");          /* "abc  " */
+    f_printf(fp, "%.5s", "abcdefg");      /* "abcde" */
+    f_printf(fp, "%-5.2s", "abcdefg");    /* "ab   " */
+    f_printf(fp, "%c", 'a');              /* "a" */
+    f_printf(fp, "%12f", 10.0);           /* "   10.000000" (FF_PRINT_FLOAT) */
+    f_printf(fp, "%.4E", 123.45678);      /* "1.2346E+02"   (FF_PRINT_FLOAT) */
+
+
+ + +
+

See Also

+

f_open, f_putc, f_puts, f_gets, f_close, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/putc.html b/ext/fatfs/documents/doc/putc.html new file mode 100644 index 0000000000..747b5fdd8c --- /dev/null +++ b/ext/fatfs/documents/doc/putc.html @@ -0,0 +1,60 @@ + + + + + + + + +FatFs - f_putc + + + + +
+

f_putc

+

The f_putc funciton puts a character to the file.

+
+int f_putc (
+  TCHAR chr,  /* [IN] A character to write */
+  FIL* fp     /* [IN] File object */
+);
+
+
+ +
+

Parameters

+
+
chr
+
A character to write.
+
fp
+
Pointer to the open file object structuer.
+
+
+ + +
+

Return Values

+

When the character was written successfuly, it returns number of character encoding units written to the file. When the function failed due to disk full or any error, a negative value will be returned.

+
+ + +
+

Description

+

When FatFs is configured for Unicode API (FF_LFN_UNICODE >= 1), character encoding on the string fuctions, f_putc, f_puts, f_printf and f_gets function, is also switched to Unicode. The character encoding on the file to be read/written via those functions is selected by FF_STRF_ENCODE. The Unicode characters in multiple encoding unit, such as surrogate pair and multi-byte sequence, cannot be written with this function.

+
+ +
+

QuickInfo

+

This is a wrapper function of f_write function. Available when FF_FS_READONLY == 0 and FF_USE_STRFUNC >= 1. When FF_USE_STRFUNC == 2, a '\n' is output as '\r'+'\n'.

+
+ + +
+

See Also

+

f_open, f_puts, f_printf, f_gets, f_close, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/puts.html b/ext/fatfs/documents/doc/puts.html new file mode 100644 index 0000000000..3695942530 --- /dev/null +++ b/ext/fatfs/documents/doc/puts.html @@ -0,0 +1,61 @@ + + + + + + + + +FatFs - f_puts + + + + +
+

f_puts

+

The f_puts function writes a string to the file.

+
+int f_puts (
+  const TCHAR* str, /* [IN] String */
+  FIL* fp           /* [IN] File object */
+);
+
+
+ +
+

Parameters

+
+
str
+
Pointer to the null terminated string to be written. The terminator character will not be written.
+
fp
+
Pointer to the open file object structure.
+
+
+ + +
+

Return Value

+

When the string was written successfuly, it returns number of character encoding units written to the file. When the function failed due to disk full or any error, a negative value will be returned.

+
+ + +
+

Description

+

When FatFs is configured for Unicode API (FF_LFN_UNICODE >= 1), character encoding on the string fuctions, f_putc, f_puts, f_printf and f_gets function, is also switched to Unicode. The input Unicode characters in multiple encoding unit, such as surrogate pair and multi-byte sequence, should not be divided into two function calls, or the character will be lost. The character encoding on the file to be written via this functions is selected by FF_STRF_ENCODE. The characters with wrong encoding or invalid for the output encoding will be lost.

+
+ + +
+

QuickInfo

+

This is a wrapper function of f_write function. Available when FF_FS_READONLY == 0 and FF_USE_STRFUNC >= 1. When FF_USE_STRFUNC == 2, '\n's contained in the input string are output as '\r'+'\n' each.

+
+ + +
+

See Also

+

f_open, f_putc, f_printf, f_gets, f_close, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/rc.html b/ext/fatfs/documents/doc/rc.html new file mode 100644 index 0000000000..52b496c376 --- /dev/null +++ b/ext/fatfs/documents/doc/rc.html @@ -0,0 +1,134 @@ + + + + + + + + +FatFs - API Return Code + + + +

Return Code of API Functions

+

Most of API functions return common result code in enum type FRESULT. When an API function succeeded, it returns zero (FR_OK), otherwise it returns non-zero value indicates type of error.

+ +
+ +
FR_OK (0)
+
The function succeeded.
+ +
FR_DISK_ERR
+
The lower layer, disk_read, disk_write or disk_ioctl function, reported that an unrecoverable hard error occured.
Note that if once this error occured at any operation to an open file, the file object is aborted and any operations to the file except for close will be rejected.
+ +
FR_INT_ERR
+
Assertion failed and an insanity is detected in the internal process. One of the following possibilities is suspected. +
    +
  • Work area (file system object, file object or etc...) has been broken by stack overflow or something. This is the reason in most case.
  • +
  • There is an error of the FAT structure on the volume.
  • +
  • There is a bug in the FatFs module itself.
  • +
  • Wrong lower layer implementation.
  • +
+Note that if once this error occured in the operation to an open file, the file object is aborted and any operation to the file except for close will be rejected. +
+ +
FR_NOT_READY
+
The lower layer, disk_initialize function, reported that the storage device could not be got ready to work. One of the following possibilities is suspected. +
    +
  • No medium in the drive.
  • +
  • Wrong lower layer implementation.
  • +
  • Wrong hardware configuration.
  • +
  • The storage device has broken.
  • +
+
+ +
FR_NO_FILE
+
Could not find the file in the directory.
+ +
FR_NO_PATH
+
Could not find the path. A directory in the path name could not be found.
+ +
FR_INVALID_NAME
+
The given string is invalid as the path name. One of the following possibilities is suspected. +
    +
  • There is a character not allowed for the file name.
  • +
  • The file name is out of 8.3 format. (at non-LFN cfg.)
  • +
  • FF_MAX_LFN is insufficient for the file name. (at LFN cfg.)
  • +
  • There is a character encoding error in the string.
  • +
+
+ +
FR_DENIED
+
The required access was denied due to one of the following reasons: +
    +
  • Write mode open against the read-only file. (f_open)
  • +
  • Deleting the read-only file or directory. (f_unlink)
  • +
  • Deleting the non-empty directory or current directory. (f_unlink)
  • +
  • Reading the file opened without FA_READ flag. (f_read)
  • +
  • Any modification to the file opened without FA_WRITE flag. (f_write, f_truncate, f_expand)
  • +
  • Could not create the object due to root directory full or disk full. (f_open, f_mkfs)
  • +
  • Could not allocate a contiguous area to the file. (f_expand)
  • +
+
+ +
FR_EXIST
+
Name collision. An object with the same name is already existing in the directory.
+ +
FR_INVALID_OBJECT
+
The file/directory object is invalid or a null pointer is given. There are some reasons as follows: +
    +
  • It has been closed, or the structure has been collapsed.
  • +
  • It has been invalidated. Open objects on the volume are invalidated by voulme mount process.
  • +
  • Physical drive is not ready to work due to a media removal.
  • +
+
+ +
FR_WRITE_PROTECTED
+
A write mode operation against the write-protected media.
+ +
FR_INVALID_DRIVE
+
Invalid drive number is specified in the path name or a null pointer is given as the path name. (Related option: FF_VOLUMES)
+ +
FR_NOT_ENABLED
+
Work area for the logical drive has not been registered by f_mount function.
+ +
FR_NO_FILESYSTEM
+
No valid FAT volume could not be found in the drive. One of the following possibilities is suspected. +
    +
  • Wrong lower layer implementation.
  • +
  • Wrong VolToPart[] settings. (FF_MULTI_PARTITION = 1)
  • +
+ +
FR_MKFS_ABORTED
+
The f_mkfs function aborted before start in format due to a reason as follows: +
    +
  • It is impossible to create the volume with the given conditions.
  • +
  • The size of the volume is too small. 128 sectors minimum with FM_SFD option.
  • +
  • The partition associated with the logical drive is not exist. (Related option: FF_MULTI_PARTITION)
  • +
+
+ +
FR_TIMEOUT
+
The function was canceled due to a timeout of thread-safe control. (Related option: FF_TIMEOUT)
+ +
FR_LOCKED
+
The operation to the object was rejected by file sharing control. (Related option: FF_FS_LOCK)
+ +
FR_NOT_ENOUGH_CORE
+
Not enough memory for the operation. There is one of the following reasons: +
    +
  • Could not allocate a memory for LFN working buffer. (Related option: FF_USE_LFN)
  • +
  • Size of the given buffer is insufficient for the size required.
  • +
+
+ +
FR_TOO_MANY_OPEN_FILES
+
Number of open objects has been reached maximum value and no more object can be opened. (Related option: FF_FS_LOCK)
+ +
FR_INVALID_PARAMETER
+
The given parameter is invalid or there is an inconsistent for the volume.
+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/read.html b/ext/fatfs/documents/doc/read.html new file mode 100644 index 0000000000..4ab350d387 --- /dev/null +++ b/ext/fatfs/documents/doc/read.html @@ -0,0 +1,80 @@ + + + + + + + + +FatFs - f_read + + + + +
+

f_read

+

The f_read function reads data from a file.

+
+FRESULT f_read (
+  FIL* fp,     /* [IN] File object */
+  void* buff,  /* [OUT] Buffer to store read data */
+  UINT btr,    /* [IN] Number of bytes to read */
+  UINT* br     /* [OUT] Number of bytes read */
+);
+
+
+ +
+

Parameters

+
+
fp
+
Pointer to the open file object.
+
buff
+
Pointer to the buffer to store the read data.
+
btr
+
Number of bytes to read in range of UINT type.
+
br
+
Pointer to the UINT variable that receives number of bytes read. This value is always valid after the function call regardless of the function return code. If the return value is equal to btr, the function return code should be FR_OK.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_DENIED, +FR_INVALID_OBJECT, +FR_TIMEOUT +

+
+ + +
+

Description

+

The function starts to read data from the file at the file offset pointed by read/write pointer. The read/write pointer advances as number of bytes read. After the function succeeded, *br should be checked to detect end of the file. In case of *br < btr, it means the read/write pointer reached end of the file during read operation.

+
+ + +
+

QuickInfo

+

Always available.

+
+ + +
+

Example

+

Refer to the example in f_open.

+
+ + +
+

See Also

+

f_open, fgets, f_write, f_close, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/readdir.html b/ext/fatfs/documents/doc/readdir.html new file mode 100644 index 0000000000..52a96b9693 --- /dev/null +++ b/ext/fatfs/documents/doc/readdir.html @@ -0,0 +1,139 @@ + + + + + + + + +FatFs - f_readdir + + + + +
+

f_readdir

+

The f_readdir function reads an item of the directory.

+
+FRESULT f_readdir (
+  DIR* dp,      /* [IN] Directory object */
+  FILINFO* fno  /* [OUT] File information structure */
+);
+
+
+FRESULT f_rewinddir (
+  DIR* dp       /* [IN] Directory object */
+);
+
+
+ +
+

Parameters

+
+
dp
+
Pointer to the open directory object.
+
fno
+
Pointer to the file information structure to store the information about read item. A null pointer rewinds the read index of the directory.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_INVALID_OBJECT, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

The f_readdir function reads a directory item, informations about the object, from the open directory. Items in the directory can be read in sequence by f_readdir function calls. When all items in the directory have been read and no item to read, a null string is stored into the fno->fname[] without any error. When a null pointer is given to the fno, the read index of the directory object is rewinded. The f_rewinddir function is implemented as a macro.

+
+#define f_rewinddir(dp) f_readdir((dp), 0)
+
+

When LFN is enabled, a member altname[] is defined in the file information structure to store the short file name of the object. If the long file name is not accessible due to a reason listed below, short file name is stored to the fname[] and the altname[] has a null string.

+ +

There is an issue on read directories in exFAT volume. The exFAT does not support short file name. This means no name can be returned on the condition above. If it is the case, "?" is returned as the file name to indicate that the object is not accessible. To avoid this problem, configure FatFs FF_LFN_UNICODE != 0 and FF_MAX_LFN == 255 to support the full feature of LFN specification.

+

Dot entries ("." and "..") in the sub-directory of FAT volume are filtered out and they will never appear in the read items because exFAT lacks dot entries in the sub-directory.

+
+ + +
+

QuickInfo

+

Available when FF_FS_MINIMIZE <= 1.

+
+ + +
+

Sample Code

+
+FRESULT scan_files (
+    char* path        /* Start node to be scanned (***also used as work area***) */
+)
+{
+    FRESULT res;
+    DIR dir;
+    UINT i;
+    static FILINFO fno;
+
+
+    res = f_opendir(&dir, path);                       /* Open the directory */
+    if (res == FR_OK) {
+        for (;;) {
+            res = f_readdir(&dir, &fno);                   /* Read a directory item */
+            if (res != FR_OK || fno.fname[0] == 0) break;  /* Break on error or end of dir */
+            if (fno.fattrib & AM_DIR) {                    /* It is a directory */
+                i = strlen(path);
+                sprintf(&path[i], "/%s", fno.fname);
+                res = scan_files(path);                    /* Enter the directory */
+                if (res != FR_OK) break;
+                path[i] = 0;
+            } else {                                       /* It is a file. */
+                printf("%s/%s\n", path, fno.fname);
+            }
+        }
+        f_closedir(&dir);
+    }
+
+    return res;
+}
+
+
+int main (void)
+{
+    FATFS fs;
+    FRESULT res;
+    char buff[256];
+
+
+    res = f_mount(&fs, "", 1);
+    if (res == FR_OK) {
+        strcpy(buff, "/");
+        res = scan_files(buff);
+    }
+
+    return res;
+}
+
+
+ + +
+

See Also

+

f_opendir, f_closedir, f_stat, FILINFO, DIR

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/rename.html b/ext/fatfs/documents/doc/rename.html new file mode 100644 index 0000000000..326af0d48b --- /dev/null +++ b/ext/fatfs/documents/doc/rename.html @@ -0,0 +1,87 @@ + + + + + + + + +FatFs - f_rename + + + + +
+

f_rename

+

The f_rename function renames and/or moves a file or sub-directory.

+
+FRESULT f_rename (
+  const TCHAR* old_name, /* [IN] Old object name */
+  const TCHAR* new_name  /* [IN] New object name */
+);
+
+
+ +
+

Parameters

+
+
old_name
+
Pointer to a null-terminated string that specifies the existing file or sub-directory to be renamed.
+
new_name
+
Pointer to a null-terminated string that specifies the new object name. A drive number may be specified in this string but it is ignored and assumed as the same drive of the old_name. Any object with this path name except old_name must not be exist, or the function fails with FR_EXIST.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_FILE, +FR_NO_PATH, +FR_INVALID_NAME, +FR_EXIST, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_LOCKED, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

Renames a file or sub-directory and can also move it to other directory in the same volume. The object to be renamed must not be an open object, or the FAT volume can be collapsed. Such the wrong operation is rejected safely when file lock function is enabled.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_FS_MINIMIZE == 0.

+
+ + +
+

Example

+
+    /* Rename an object in the default drive */
+    f_rename("oldname.txt", "newname.txt");
+
+    /* Rename an object in the drive 2 */
+    f_rename("2:oldname.txt", "newname.txt");
+
+    /* Rename an object and move it to another directory in the drive */
+    f_rename("log.txt", "old/log0001.txt");
+
+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/sdir.html b/ext/fatfs/documents/doc/sdir.html new file mode 100644 index 0000000000..eb18cc323c --- /dev/null +++ b/ext/fatfs/documents/doc/sdir.html @@ -0,0 +1,38 @@ + + + + + + + + +FatFs - DIR + + + + +
+

DIR

+

The DIR structure is used for the work area to read a directory by f_oepndir, f_readdir, f_findfirst and f_findnext function. Application program must not modify any member in this structure, or f_readdir function will not work properly.

+
+typedef struct {
+    FFOBJID obj;        /* Object identifier */
+    DWORD   dptr;       /* Current read/write offset */
+    DWORD   clust;      /* Current cluster */
+    LBA_t   sect;       /* Current sector */
+    BYTE*   dir;        /* Pointer to the current SFN entry in the win[] */
+    BYTE*   fn;         /* Pointer to the SFN buffer (in/out) {file[8],ext[3],status[1]} */
+#if FF_USE_LFN
+    DWORD   blk_ofs;    /* Offset of the entry block (0xFFFFFFFF:Invalid) */
+    WCHAR*  lfn;        /* Pointer to the LFN working buffer (in/out) */
+#endif
+#if FF_USE_FIND
+    const TCHAR*  pat;  /* Ponter to the matching pattern */
+#endif
+} DIR;
+
+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/setcp.html b/ext/fatfs/documents/doc/setcp.html new file mode 100644 index 0000000000..a1d124bc8f --- /dev/null +++ b/ext/fatfs/documents/doc/setcp.html @@ -0,0 +1,82 @@ + + + + + + + + +FatFs - f_setcp + + + + +
+

f_setcp

+

The f_setcp function sets the active code page.

+
+FRESULT f_setcp (
+  WORD cp     /* [IN] Code page to be set */
+);
+
+
+ +
+

Parameters

+
+
cp
+
OEM code page to be used for the path name. Valid values are as follows.
+ + + + + + + + + + + + + + + + + + + + + + + + +
ValueMeaning
0Initial value (any extended character cannot be used)
437U.S.
720Arabic
737Greek
771KBL
775Baltic
850Latin 1
852Latin 2
855Cyrillic
857Turkish
860Portuguese
861Icelandic
862Hebrew
863Canadian French
864Arabic
865Nordic
866Russian
869Greek 2
932Japanese (DBCS)
936Simplified Chinese (DBCS)
949Korean (DBCS)
950Traditional Chinese (DBCS)
+
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_INVALID_PARAMETER +

+
+ + +
+

Description

+

The f_setcp function sets the active code page for the path name. Also code conversion of string functions will be affected by the setting of code page when FF_LFN_UNICODE >= 1 and FF_STRF_ENCODE == 0. Because the initial setting of the code page is 0 and API function with extended character will not work properly, a valid code page needs to be set on the system start-up and it should not be changed on the fly.

+
+ + +
+

QuickInfo

+

Available when FF_CODE_PAGE == 0.

+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/setlabel.html b/ext/fatfs/documents/doc/setlabel.html new file mode 100644 index 0000000000..9eb5e78afc --- /dev/null +++ b/ext/fatfs/documents/doc/setlabel.html @@ -0,0 +1,92 @@ + + + + + + + + +FatFs - f_setlabel + + + + +
+

f_setlabel

+

The f_setlabel function sets/removes the label of a volume.

+
+FRESULT f_setlabel (
+  const TCHAR* label  /* [IN] Volume label to be set */
+);
+
+
+ +
+

Parameters

+
+
label
+
Pointer to the null-terminated string that specifies the volume label to be set.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_INVALID_NAME, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT +

+
+ + +
+

Description

+

When the string has a drive prefix, the volume label will be set to the volume specified by the drive prefix. Unix style volume ID cannot be used to specify the volume. If drive number is not specified, the volume label will be set to the default drive. If length of the given volume label is zero, the volume label on the volume will be removed. The format of the volume label is as shown below:

+ +

Remark: The standard system (Windows) has a problem at the volume label with a heading \xE5 on the FAT volume. To avoid this problem, this function rejects such volume label as invalid name.

+
+ +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_USE_LABEL == 1.

+
+ + +
+

Example

+
+    /* Set volume label to the default drive */
+    f_setlabel("DATA DISK");
+
+    /* Set volume label to the drive 2 */
+    f_setlabel("2:DISK 3 OF 4");
+
+    /* Remove volume label of the drive 2 */
+    f_setlabel("2:");
+
+
+ + +
+

See Also

+f_getlabel +
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/sfatfs.html b/ext/fatfs/documents/doc/sfatfs.html new file mode 100644 index 0000000000..6ecd6e5e59 --- /dev/null +++ b/ext/fatfs/documents/doc/sfatfs.html @@ -0,0 +1,62 @@ + + + + + + + + +FatFs - FATFS + + + + +
+

FATFS

+

The FATFS structure (filesystem object) holds dynamic work area of individual logical drives. It is given by application program and registerd/unregisterd to the FatFs module with f_mount function. Initialization of the structure is done by volume mount process whenever necessary. Application program must not modify any member in this structure, or the FAT volume will be collapsed.

+
+typedef struct {
+    BYTE    fs_type;      /* FAT type (0, FS_FAT12, FS_FAT16, FS_FAT32 or FS_EXFAT) */
+    BYTE    pdrv;         /* Hosting physical drive of this volume */
+    BYTE    n_fats;       /* Number of FAT copies (1,2) */
+    BYTE    wflag;        /* win[] flag (b0:win[] is dirty) */
+    BYTE    fsi_flag;     /* FSINFO flags (b7:Disabled, b0:Dirty) */
+    WORD    id;           /* Volume mount ID */
+    WORD    n_rootdir;    /* Number of root directory entries (FAT12/16) */
+    WORD    csize;        /* Sectors per cluster */
+#if FF_MAX_SS != FF_MIN_SS
+    WORD    ssize;        /* Sector size (512,1024,2048 or 4096) */
+#endif
+#if FF_FS_EXFAT
+    BYTE*   dirbuf;       /* Directory entry block scratchpad buffer */
+#endif
+#if FF_FS_REENTRANT
+    FF_SYNC_t sobj;       /* Identifier of sync object */
+#endif
+#if !FF_FS_READONLY
+    DWORD   last_clust;   /* FSINFO: Last allocated cluster (0xFFFFFFFF if invalid) */
+    DWORD   free_clust;   /* FSINFO: Number of free clusters (0xFFFFFFFF if invalid) */
+#endif
+#if FF_FS_RPATH
+    DWORD   cdir;         /* Cluster number of current directory (0:root) */
+#if FF_FS_EXFAT
+    DWORD   cdc_scl;      /* Containing directory start cluster (invalid when cdir is 0) */
+    DWORD   cdc_size;     /* b31-b8:Size of containing directory, b7-b0: Chain status */
+    DWORD   cdc_ofs;      /* Offset in the containing directory (invalid when cdir is 0) */
+#endif
+#endif
+    DWORD   n_fatent;     /* Number of FAT entries (Number of clusters + 2) */
+    DWORD   fsize;        /* Sectors per FAT */
+    LBA_t   volbase;      /* Volume base LBA */
+    LBA_t   fatbase;      /* FAT base LBA */
+    LBA_t   dirbase;      /* Root directory base (LBA|Cluster) */
+    LBA_t   database;     /* Data base LBA */
+    LBA_t   winsect;      /* Sector LBA appearing in the win[] */
+    BYTE    win[FF_MAX_SS]; /* Disk access window for directory, FAT (and file data at tiny cfg) */
+} FATFS;
+
+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/sfile.html b/ext/fatfs/documents/doc/sfile.html new file mode 100644 index 0000000000..9234d32994 --- /dev/null +++ b/ext/fatfs/documents/doc/sfile.html @@ -0,0 +1,43 @@ + + + + + + + + +FatFs - FIL + + + + +
+

FIL

+

The FIL structure (file object) holds the state of an open file. It is created by f_open function and discarded by f_close function. Application program must not modify any member in this structure except for cltbl, or the FAT volume will be collapsed. Note that a sector buffer is defined in this structure at non-tiny configuration (FF_FS_TINY == 0), so that the FIL structures at that configuration should not be defined as auto variable.

+ +
+typedef struct {
+    FFOBJID obj;          /* Object identifier */
+    BYTE    flag;         /* File object status flags */
+    BYTE    err;          /* Abort flag (error code) */
+    FSIZE_t fptr;         /* File read/write pointer (Byte offset origin from top of the file) */
+    DWORD   clust;        /* Current cluster of fptr (One cluster behind if fptr is on the cluster boundary. Invalid if fptr == 0.) */
+    LBA_t   sect;         /* Current data sector (Can be invalid if fptr is on the cluster boundary.)*/
+#if !FF_FS_READONLY
+    LBA_t   dir_sect;     /* Sector number containing the directory entry */
+    BYTE*   dir_ptr;      /* Ponter to the directory entry in the window */
+#endif
+#if FF_USE_FASTSEEK
+    DWORD*  cltbl;        /* Pointer to the cluster link map table (Nulled on file open. Set by application.) */
+#endif
+#if !FF_FS_TINY
+    BYTE    buf[FF_MAX_SS]; /* File private data transfer buffer (Always valid if fptr is not on the sector boundary but can be invalid if fptr is on the sector boundary.) */
+#endif
+} FIL;
+
+ +
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/sfileinfo.html b/ext/fatfs/documents/doc/sfileinfo.html new file mode 100644 index 0000000000..db0f45e3b1 --- /dev/null +++ b/ext/fatfs/documents/doc/sfileinfo.html @@ -0,0 +1,78 @@ + + + + + + + + +FatFs - FILINFO + + + + +
+

FILINFO

+

The FILINFO structure holds information about the object retrieved by f_readdir, f_findfirst, f_findnext and f_stat function. Be careful in the size of structure when LFN is enabled.

+
+typedef struct {
+    FSIZE_t fsize;               /* File size */
+    WORD    fdate;               /* Last modified date */
+    WORD    ftime;               /* Last modified time */
+    BYTE    fattrib;             /* Attribute */
+#if FF_USE_LFN
+    TCHAR   altname[FF_SFN_BUF + 1]; /* Alternative object name */
+    TCHAR   fname[FF_LFN_BUF + 1];   /* Primary object name */
+#else
+    TCHAR   fname[12 + 1];       /* Object name */
+#endif
+} FILINFO;
+
+
+ +

Members

+
+
fsize
+
Size of the file in unit of byte. FSIZE_t is an alias of integer type either DWORD(32-bit) or QWORD(64-bit) depends on the configuration option FF_FS_EXFAT. Do not care if the item is a sub-directory.
+
fdate
+
The date when the file was modified or the directory was created.
+
+
bit15:9
+
Year origin from 1980 (0..127)
+
bit8:5
+
Month (1..12)
+
bit4:0
+
Day (1..31)
+
+
+
ftime
+
The time when the file was modified or the directory was created.
+
+
bit15:11
+
Hour (0..23)
+
bit10:5
+
Minute (0..59)
+
bit4:0
+
Second / 2 (0..29)
+
+
+
fattrib
+
The attribute flags in combination of:
+ + + + + + + +
FlagMeaning
AM_RDORead-only. Write mode open and deleting is rejected.
AM_HIDHidden. Should not be shown in normal directory listing.
AM_SYSSystem. Used by system and should not be accessed.
AM_ARCArchive. Set on new creation or any modification to the file.
AM_DIRDirectory. This is not a file but a sub-directory container.
+
+
fname[]
+
Null-terminated object name. A null string is stored when no item to read and it indicates this structure is invalid. The size of fname[] and altname[] each can be configured in LFN configuration.
+
altname[]
+
Alternative object name is stored if available. This member is not available in non-LFN configuration.
+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/size.html b/ext/fatfs/documents/doc/size.html new file mode 100644 index 0000000000..0be1a768f6 --- /dev/null +++ b/ext/fatfs/documents/doc/size.html @@ -0,0 +1,62 @@ + + + + + + + + +FatFs - f_size + + + + +
+

f_size

+

The f_size function gets the size of a file.

+
+FSIZE_t f_size (
+  FIL* fp   /* [IN] File object */
+);
+
+
+ + +
+

Parameters

+
+
fp
+
Pointer to the open file object structure.
+
+
+ + +
+

Return Values

+

Returns the size of the file in unit of byte.

+
+ + +
+

Description

+

In this revision, the f_size function is implemented as a macro. It does not have any validation and mutual exclusion.

+
+#define f_size(fp) ((fp)->obj.objsize)
+
+
+ + +
+

QuickInfo

+

Always available.

+
+ + +
+

See Also

+

f_open, f_lseek, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/stat.html b/ext/fatfs/documents/doc/stat.html new file mode 100644 index 0000000000..2c2680a2cb --- /dev/null +++ b/ext/fatfs/documents/doc/stat.html @@ -0,0 +1,110 @@ + + + + + + + + +FatFs - f_stat + + + + +
+

f_stat

+

The f_stat function checks the existence of a file or sub-directory.

+
+FRESULT f_stat (
+  const TCHAR* path,  /* [IN] Object name */
+  FILINFO* fno        /* [OUT] FILINFO structure */
+);
+
+
+ +
+

Parameters

+
+
path
+
Pointer to the null-terminated string that specifies the object to get its information. The object must not be the root direcotry.
+
fno
+
Pointer to the blank FILINFO structure to store the information of the object. Set null pointer if this information is not needed.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_FILE, +FR_NO_PATH, +FR_INVALID_NAME, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

The f_stat function checks the existence of a file or sub-directory in the directory. If not exist, the function returns with FR_NO_FILE. If exist, the function returns with FR_OK and the informations about the object, size, timestamp and attribute, is stored to the file information structure. For details of the file information, refer to the FILINFO structure and f_readdir function.

+
+ + +
+

QuickInfo

+

Available when FF_FS_MINIMIZE == 0.

+
+ + +
+

Example

+
+    FRESULT fr;
+    FILINFO fno;
+
+
+    printf("Test for 'file.txt'...\n");
+
+    fr = f_stat("file.txt", &fno);
+    switch (fr) {
+
+    case FR_OK:
+        printf("Size: %lu\n", fno.fsize);
+        printf("Timestamp: %u/%02u/%02u, %02u:%02u\n",
+               (fno.fdate >> 9) + 1980, fno.fdate >> 5 & 15, fno.fdate & 31,
+               fno.ftime >> 11, fno.ftime >> 5 & 63);
+        printf("Attributes: %c%c%c%c%c\n",
+               (fno.fattrib & AM_DIR) ? 'D' : '-',
+               (fno.fattrib & AM_RDO) ? 'R' : '-',
+               (fno.fattrib & AM_HID) ? 'H' : '-',
+               (fno.fattrib & AM_SYS) ? 'S' : '-',
+               (fno.fattrib & AM_ARC) ? 'A' : '-');
+        break;
+
+    case FR_NO_FILE:
+        printf("It is not exist.\n");
+        break;
+
+    default:
+        printf("An error occured. (%d)\n", fr);
+    }
+
+
+ + +
+

References

+

f_opendir, f_readdir, FILINFO

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/sync.html b/ext/fatfs/documents/doc/sync.html new file mode 100644 index 0000000000..9fb42a0907 --- /dev/null +++ b/ext/fatfs/documents/doc/sync.html @@ -0,0 +1,88 @@ + + + + + + + + +FatFs - f_sync + + + + +
+

f_sync

+

The f_sync function flushes the cached information of a writing file.

+
+FRESULT f_sync (
+  FIL* fp     /* [IN] File object */
+);
+
+
+ +
+

Parameter

+
+
fp
+
Pointer to the open file object to be flushed.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_INVALID_OBJECT, +FR_TIMEOUT +

+
+ + +
+

Description

+

The f_sync function performs the same process as f_close function but the file is left opened and can continue read/write/seek operations to the file. This is suitable for the applications that open files for a long time in write mode, such as data logger. Performing f_sync function in certain interval can minimize the risk of data loss due to a sudden blackout, wrong media removal or unrecoverable disk error. For more information, refer to application note.

+
+Case 1. Normal write sequence
+
+                                Time -->                                     ↓Normal shutdown
+OwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwC <Power off>
+
+
+Case 2. Without using f_sync()
+
+                                Time -->                             ↓System crush
+Owwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
+ |<--------------- All data written will be lost ------------------>|
+
+
+Case 3. Using f_sync()
+                                Time -->                             ↓System crush
+OwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwwwwwwSwwwww
+                            Data after last f_sync will be lost |<->| 
+O - f_open()
+C - f_close()
+w - f_write()
+S - f_sync()
+
+

However there is no sense in f_sync function immediataly before f_close function because it performs f_sync function in it. In other words, the differnce between those functions is that the file object is invalidated or not.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0.

+
+ + +
+

See Also

+

f_close, Critical section

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/tell.html b/ext/fatfs/documents/doc/tell.html new file mode 100644 index 0000000000..075f033fe3 --- /dev/null +++ b/ext/fatfs/documents/doc/tell.html @@ -0,0 +1,62 @@ + + + + + + + + +FatFs - f_tell + + + + +
+

f_tell

+

The f_tell function gets the current read/write pointer of a file.

+
+FSIZE_t f_tell (
+  FIL* fp   /* [IN] File object */
+);
+
+
+ + +
+

Parameters

+
+
fp
+
Pointer to the open file object structure.
+
+
+ + +
+

Return Values

+

Returns current read/write pointer of the file.

+
+ + +
+

Description

+

In this revision, the f_tell function is implemented as a macro. It does not have any validation and mutual exclusion.

+
+#define f_tell(fp) ((fp)->fptr)
+
+
+ + +
+

QuickInfo

+

Always available.

+
+ + +
+

See Also

+

f_open, f_lseek, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/truncate.html b/ext/fatfs/documents/doc/truncate.html new file mode 100644 index 0000000000..0ac012f039 --- /dev/null +++ b/ext/fatfs/documents/doc/truncate.html @@ -0,0 +1,66 @@ + + + + + + + + +FatFs - f_truncate + + + + +
+

f_truncate

+

The f_truncate function truncates the file size.

+
+FRESULT f_truncate (
+  FIL* fp     /* [IN] File object */
+);
+
+
+ +
+

Parameter

+
+
fp
+
Pointer to the open file object to be truncated.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_DENIED, +FR_INVALID_OBJECT, +FR_TIMEOUT +

+
+ + +
+

Description

+

The f_truncate function truncates the file size to the current file read/write pointer. This function has no effect if the file read/write pointer is already pointing end of the file.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_FS_MINIMIZE == 0.

+
+ + +
+

See Also

+

f_open, f_lseek, FIL

+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/unlink.html b/ext/fatfs/documents/doc/unlink.html new file mode 100644 index 0000000000..7809648ccd --- /dev/null +++ b/ext/fatfs/documents/doc/unlink.html @@ -0,0 +1,74 @@ + + + + + + + + +FatFs - f_unlink + + + + +
+

f_unlink

+

The f_unlink function removes a file or sub-directory from the volume.

+
+FRESULT f_unlink (
+  const TCHAR* path  /* [IN] Object name */
+);
+
+
+ +
+

Parameter

+
+
path
+
Pointer to a null-terminated string that specifies the file or sub-directory to be removed.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_FILE, +FR_NO_PATH, +FR_INVALID_NAME, +FR_DENIED, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_LOCKED, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

+If condition of the object to be removed is applicable to the following terms, the function will be rejected.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_FS_MINIMIZE == 0.

+
+ + +

Return

+ + diff --git a/ext/fatfs/documents/doc/utime.html b/ext/fatfs/documents/doc/utime.html new file mode 100644 index 0000000000..40e39eb8db --- /dev/null +++ b/ext/fatfs/documents/doc/utime.html @@ -0,0 +1,99 @@ + + + + + + + + +FatFs - f_utime + + + + +
+

f_utime

+

The f_utime function changes the timestamp of a file or sub-directory.

+
+FRESULT f_utime (
+  const TCHAR* path,  /* [IN] Object name */
+  const FILINFO* fno  /* [IN] Time and data to be set */
+);
+
+
+ +
+

Parameters

+
+
path
+
Pointer to the null-terminated string that specifies an object to be changed.
+
fno
+
Pointer to the file information structure that has a timestamp to be set in member fdate and ftime. Do not care any other members.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_NOT_READY, +FR_NO_FILE, +FR_NO_PATH, +FR_INVALID_NAME, +FR_WRITE_PROTECTED, +FR_INVALID_DRIVE, +FR_NOT_ENABLED, +FR_NO_FILESYSTEM, +FR_TIMEOUT, +FR_NOT_ENOUGH_CORE +

+
+ + +
+

Description

+

The f_utime function changes the timestamp of a file or sub-directory

+
+ + +
+

Example

+
+FRESULT set_timestamp (
+    char *obj,     /* Pointer to the file name */
+    int year,
+    int month,
+    int mday,
+    int hour,
+    int min,
+    int sec
+)
+{
+    FILINFO fno;
+
+    fno.fdate = (WORD)(((year - 1980) * 512U) | month * 32U | mday);
+    fno.ftime = (WORD)(hour * 2048U | min * 32U | sec / 2U);
+
+    return f_utime(obj, &fno);
+}
+
+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0 and FF_USE_CHMOD == 1.

+
+ + +
+

See Also

+

f_stat, FILINFO

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/doc/write.html b/ext/fatfs/documents/doc/write.html new file mode 100644 index 0000000000..25fe2904d4 --- /dev/null +++ b/ext/fatfs/documents/doc/write.html @@ -0,0 +1,80 @@ + + + + + + + + +FatFs - f_write + + + + +
+

f_write

+

The f_write writes data to a file.

+
+FRESULT f_write (
+  FIL* fp,          /* [IN] Pointer to the file object structure */
+  const void* buff, /* [IN] Pointer to the data to be written */
+  UINT btw,         /* [IN] Number of bytes to write */
+  UINT* bw          /* [OUT] Pointer to the variable to return number of bytes written */
+);
+
+
+ +
+

Parameters

+
+
fp
+
Pointer to the open file object structure.
+
buff
+
Pointer to the data to be written.
+
btw
+
Specifies number of bytes to write in range of UINT type.
+
bw
+
Pointer to the UINT variable that receives the number of bytes written. This value is always valid after the function call regardless of the function return code. If the return value is equal to btw, the function return code should be FR_OK.
+
+
+ + +
+

Return Values

+

+FR_OK, +FR_DISK_ERR, +FR_INT_ERR, +FR_DENIED, +FR_INVALID_OBJECT, +FR_TIMEOUT +

+
+ + +
+

Description

+

The function starts to write data to the file at the file offset pointed by read/write pointer. The read/write pointer advances as number of bytes written. After the function succeeded, *bw should be checked to detect the disk full. In case of *bw < btw, it means the volume got full during the write operation. The function can take a time when the volume is full or close to full.

+
+ + +
+

QuickInfo

+

Available when FF_FS_READONLY == 0.

+
+ + +
+

Example

+

Refer to the example in f_open.

+
+ + +
+

See Also

+

f_open, f_read, fputc, fputs, fprintf, f_close, FIL

+
+ +

Return

+ + diff --git a/ext/fatfs/documents/res/app1.c b/ext/fatfs/documents/res/app1.c new file mode 100644 index 0000000000..85275e18aa --- /dev/null +++ b/ext/fatfs/documents/res/app1.c @@ -0,0 +1,44 @@ +/*------------------------------------------------------------/ +/ Open or create a file in append mode +/ (This function was sperseded by FA_OPEN_APPEND flag at FatFs R0.12a) +/------------------------------------------------------------*/ + +FRESULT open_append ( + FIL* fp, /* [OUT] File object to create */ + const char* path /* [IN] File name to be opened */ +) +{ + FRESULT fr; + + /* Opens an existing file. If not exist, creates a new file. */ + fr = f_open(fp, path, FA_WRITE | FA_OPEN_ALWAYS); + if (fr == FR_OK) { + /* Seek to end of the file to append data */ + fr = f_lseek(fp, f_size(fp)); + if (fr != FR_OK) + f_close(fp); + } + return fr; +} + + +int main (void) +{ + FRESULT fr; + FATFS fs; + FIL fil; + + /* Open or create a log file and ready to append */ + f_mount(&fs, "", 0); + fr = open_append(&fil, "logfile.txt"); + if (fr != FR_OK) return 1; + + /* Append a line */ + f_printf(&fil, "%02u/%02u/%u, %2u:%02u\n", Mday, Mon, Year, Hour, Min); + + /* Close the file */ + f_close(&fil); + + return 0; +} + diff --git a/ext/fatfs/documents/res/app2.c b/ext/fatfs/documents/res/app2.c new file mode 100644 index 0000000000..415c4bcf0a --- /dev/null +++ b/ext/fatfs/documents/res/app2.c @@ -0,0 +1,81 @@ +/*------------------------------------------------------------/ +/ Delete a sub-directory even if it contains any file +/-------------------------------------------------------------/ +/ The delete_node() function is for R0.12+. +/ It works regardless of FF_FS_RPATH. +*/ + + +FRESULT delete_node ( + TCHAR* path, /* Path name buffer with the sub-directory to delete */ + UINT sz_buff, /* Size of path name buffer (items) */ + FILINFO* fno /* Name read buffer */ +) +{ + UINT i, j; + FRESULT fr; + DIR dir; + + + fr = f_opendir(&dir, path); /* Open the sub-directory to make it empty */ + if (fr != FR_OK) return fr; + + for (i = 0; path[i]; i++) ; /* Get current path length */ + path[i++] = _T('/'); + + for (;;) { + fr = f_readdir(&dir, fno); /* Get a directory item */ + if (fr != FR_OK || !fno->fname[0]) break; /* End of directory? */ + j = 0; + do { /* Make a path name */ + if (i + j >= sz_buff) { /* Buffer over flow? */ + fr = 100; break; /* Fails with 100 when buffer overflow */ + } + path[i + j] = fno->fname[j]; + } while (fno->fname[j++]); + if (fno->fattrib & AM_DIR) { /* Item is a sub-directory */ + fr = delete_node(path, sz_buff, fno); + } else { /* Item is a file */ + fr = f_unlink(path); + } + if (fr != FR_OK) break; + } + + path[--i] = 0; /* Restore the path name */ + f_closedir(&dir); + + if (fr == FR_OK) fr = f_unlink(path); /* Delete the empty sub-directory */ + return fr; +} + + + + +int main (void) /* How to use */ +{ + FRESULT fr; + FATFS fs; + TCHAR buff[256]; + FILINFO fno; + + + f_mount(&fs, _T("5:"), 0); + + /* Directory to be deleted */ + _tcscpy(buff, _T("5:dir")); + + /* Delete the directory */ + fr = delete_node(buff, sizeof buff / sizeof buff[0], &fno); + + /* Check the result */ + if (fr) { + _tprintf(_T("Failed to delete the directory. (%u)\n"), fr); + return fr; + } else { + _tprintf(_T("The directory and the contents have successfully been deleted.\n"), buff); + return 0; + } +} + + + diff --git a/ext/fatfs/documents/res/app3.c b/ext/fatfs/documents/res/app3.c new file mode 100644 index 0000000000..523058f1ad --- /dev/null +++ b/ext/fatfs/documents/res/app3.c @@ -0,0 +1,109 @@ +/*----------------------------------------------------------------------/ +/ Allocate a contiguous area to the file +/-----------------------------------------------------------------------/ +/ This function checks if the file is contiguous with desired size. +/ If not, a block of contiguous sectors is allocated to the file. +/ If the file has been opened without FA_WRITE flag, it only checks if +/ the file is contiguous and returns the resulut. +/-----------------------------------------------------------------------/ +/ This function can work with FatFs R0.09 - R0.11a. +/ It is incompatible with R0.12+. Use f_expand function instead. +/----------------------------------------------------------------------*/ + +/* Declarations of FatFs internal functions accessible from applications. +/ This is intended to be used for disk checking/fixing or dirty hacks :-) */ +DWORD clust2sect (FATFS* fs, DWORD clst); +DWORD get_fat (FATFS* fs, DWORD clst); +FRESULT put_fat (FATFS* fs, DWORD clst, DWORD val); + + +DWORD allocate_contiguous_clusters ( /* Returns the first sector in LBA (0:error or not contiguous) */ + FIL* fp, /* Pointer to the open file object */ + DWORD len /* Number of bytes to allocate */ +) +{ + DWORD csz, tcl, ncl, ccl, cl; + + + if (f_lseek(fp, 0) || !len) /* Check if the given parameters are valid */ + return 0; + csz = 512UL * fp->fs->csize; /* Cluster size in unit of byte (assuming 512 bytes/sector) */ + tcl = (len + csz - 1) / csz; /* Total number of clusters required */ + len = tcl * csz; /* Round-up file size to the cluster boundary */ + + /* Check if the existing cluster chain is contiguous */ + if (len == fp->fsize) { + ncl = 0; ccl = fp->sclust; + do { + cl = get_fat(fp->fs, ccl); /* Get the cluster status */ + if (cl + 1 < 3) return 0; /* Hard error? */ + if (cl != ccl + 1 && cl < fp->fs->n_fatent) break; /* Not contiguous? */ + ccl = cl; + } while (++ncl < tcl); + if (ncl == tcl) /* Is the file contiguous? */ + return clust2sect(fp->fs, fp->sclust); /* File is contiguous. Return the start sector */ + } + + /* File is not contiguous */ +#if _FS_READONLY + return 0; /* Exit if in read-only cfg. */ +#else + if (!(fp->flag & FA_WRITE)) return 0; /* Exit if the file object is for read-only */ + + if (f_truncate(fp)) return 0; /* Remove the non-contiguous chain */ + + /* Find a free contiguous area */ + ccl = cl = 2; ncl = 0; + do { + if (cl >= fp->fs->n_fatent) return 0; /* No contiguous area is found. */ + if (get_fat(fp->fs, cl)) { /* Encounterd a cluster in use */ + do { /* Skip the block of used clusters */ + cl++; + if (cl >= fp->fs->n_fatent) return 0; /* No contiguous area is found. */ + } while (get_fat(fp->fs, cl)); + ccl = cl; ncl = 0; + } + cl++; ncl++; + } while (ncl < tcl); + + /* Create a contiguous cluster chain */ + fp->fs->last_clust = ccl - 1; + if (f_lseek(fp, len)) return 0; + + return clust2sect(fp->fs, fp->sclust); /* Return file start sector */ +#endif +} + + +int main (void) +{ + FRESULT fr; + DRESULT dr; + FATFS fs; + FIL fil; + DWORD org; + + + /* Open or create a file to write */ + f_mount(&fs, "", 0); + fr = f_open(&fil, "fastrec.log", FA_READ | FA_WRITE | FA_OPEN_ALWAYS); + if (fr) return 1; + + /* Check if the file is 256MB in size and occupies a contiguous area. + / If not, a contiguous area will be re-allocated to the file. */ + org = allocate_contiguous_clusters(&fil, 0x10000000); + if (!org) { + printf("Function failed due to any error or insufficient contiguous area.\n"); + f_close(&fil); + return 1; + } + + /* Now you can read/write the file without filesystem layer. */ + ... + dr = disk_write(fil.fs->drv, Buff, org, 1024); /* Write 512KiB from top of the file */ + ... + + f_close(&fil); + return 0; +} + diff --git a/ext/fatfs/documents/res/app4.c b/ext/fatfs/documents/res/app4.c new file mode 100644 index 0000000000..c46d1a05db --- /dev/null +++ b/ext/fatfs/documents/res/app4.c @@ -0,0 +1,315 @@ +/*----------------------------------------------------------------------/ +/ Low level disk I/O module function checker / +/-----------------------------------------------------------------------/ +/ WARNING: The data on the target drive will be lost! +*/ + +#include +#include +#include "ff.h" /* Declarations of sector size */ +#include "diskio.h" /* Declarations of disk functions */ + + + +static DWORD pn ( /* Pseudo random number generator */ + DWORD pns /* 0:Initialize, !0:Read */ +) +{ + static DWORD lfsr; + UINT n; + + + if (pns) { + lfsr = pns; + for (n = 0; n < 32; n++) pn(0); + } + if (lfsr & 1) { + lfsr >>= 1; + lfsr ^= 0x80200003; + } else { + lfsr >>= 1; + } + return lfsr; +} + + +int test_diskio ( + BYTE pdrv, /* Physical drive number to be checked (all data on the drive will be lost) */ + UINT ncyc, /* Number of test cycles */ + DWORD* buff, /* Pointer to the working buffer */ + UINT sz_buff /* Size of the working buffer in unit of byte */ +) +{ + UINT n, cc, ns; + DWORD sz_drv, lba, lba2, sz_eblk, pns = 1; + WORD sz_sect; + BYTE *pbuff = (BYTE*)buff; + DSTATUS ds; + DRESULT dr; + + + printf("test_diskio(%u, %u, 0x%08X, 0x%08X)\n", pdrv, ncyc, (UINT)buff, sz_buff); + + if (sz_buff < FF_MAX_SS + 8) { + printf("Insufficient work area to run the program.\n"); + return 1; + } + + for (cc = 1; cc <= ncyc; cc++) { + printf("**** Test cycle %u of %u start ****\n", cc, ncyc); + + printf(" disk_initalize(%u)", pdrv); + ds = disk_initialize(pdrv); + if (ds & STA_NOINIT) { + printf(" - failed.\n"); + return 2; + } else { + printf(" - ok.\n"); + } + + printf("**** Get drive size ****\n"); + printf(" disk_ioctl(%u, GET_SECTOR_COUNT, 0x%08X)", pdrv, (UINT)&sz_drv); + sz_drv = 0; + dr = disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_drv); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 3; + } + if (sz_drv < 128) { + printf("Failed: Insufficient drive size to test.\n"); + return 4; + } + printf(" Number of sectors on the drive %u is %lu.\n", pdrv, sz_drv); + +#if FF_MAX_SS != FF_MIN_SS + printf("**** Get sector size ****\n"); + printf(" disk_ioctl(%u, GET_SECTOR_SIZE, 0x%X)", pdrv, (UINT)&sz_sect); + sz_sect = 0; + dr = disk_ioctl(pdrv, GET_SECTOR_SIZE, &sz_sect); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 5; + } + printf(" Size of sector is %u bytes.\n", sz_sect); +#else + sz_sect = FF_MAX_SS; +#endif + + printf("**** Get block size ****\n"); + printf(" disk_ioctl(%u, GET_BLOCK_SIZE, 0x%X)", pdrv, (UINT)&sz_eblk); + sz_eblk = 0; + dr = disk_ioctl(pdrv, GET_BLOCK_SIZE, &sz_eblk); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + } + if (dr == RES_OK || sz_eblk >= 2) { + printf(" Size of the erase block is %lu sectors.\n", sz_eblk); + } else { + printf(" Size of the erase block is unknown.\n"); + } + + /* Single sector write test */ + printf("**** Single sector write test ****\n"); + lba = 0; + for (n = 0, pn(pns); n < sz_sect; n++) pbuff[n] = (BYTE)pn(0); + printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba); + dr = disk_write(pdrv, pbuff, lba, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 6; + } + printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv); + dr = disk_ioctl(pdrv, CTRL_SYNC, 0); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 7; + } + memset(pbuff, 0, sz_sect); + printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba); + dr = disk_read(pdrv, pbuff, lba, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 8; + } + for (n = 0, pn(pns); n < sz_sect && pbuff[n] == (BYTE)pn(0); n++) ; + if (n == sz_sect) { + printf(" Read data matched.\n"); + } else { + printf(" Read data differs from the data written.\n"); + return 10; + } + pns++; + + printf("**** Multiple sector write test ****\n"); + lba = 5; ns = sz_buff / sz_sect; + if (ns > 4) ns = 4; + if (ns > 1) { + for (n = 0, pn(pns); n < (UINT)(sz_sect * ns); n++) pbuff[n] = (BYTE)pn(0); + printf(" disk_write(%u, 0x%X, %lu, %u)", pdrv, (UINT)pbuff, lba, ns); + dr = disk_write(pdrv, pbuff, lba, ns); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 11; + } + printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv); + dr = disk_ioctl(pdrv, CTRL_SYNC, 0); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 12; + } + memset(pbuff, 0, sz_sect * ns); + printf(" disk_read(%u, 0x%X, %lu, %u)", pdrv, (UINT)pbuff, lba, ns); + dr = disk_read(pdrv, pbuff, lba, ns); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 13; + } + for (n = 0, pn(pns); n < (UINT)(sz_sect * ns) && pbuff[n] == (BYTE)pn(0); n++) ; + if (n == (UINT)(sz_sect * ns)) { + printf(" Read data matched.\n"); + } else { + printf(" Read data differs from the data written.\n"); + return 14; + } + } else { + printf(" Test skipped.\n"); + } + pns++; + + printf("**** Single sector write test (unaligned buffer address) ****\n"); + lba = 5; + for (n = 0, pn(pns); n < sz_sect; n++) pbuff[n+3] = (BYTE)pn(0); + printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+3), lba); + dr = disk_write(pdrv, pbuff+3, lba, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 15; + } + printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv); + dr = disk_ioctl(pdrv, CTRL_SYNC, 0); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 16; + } + memset(pbuff+5, 0, sz_sect); + printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+5), lba); + dr = disk_read(pdrv, pbuff+5, lba, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 17; + } + for (n = 0, pn(pns); n < sz_sect && pbuff[n+5] == (BYTE)pn(0); n++) ; + if (n == sz_sect) { + printf(" Read data matched.\n"); + } else { + printf(" Read data differs from the data written.\n"); + return 18; + } + pns++; + + printf("**** 4GB barrier test ****\n"); + if (sz_drv >= 128 + 0x80000000 / (sz_sect / 2)) { + lba = 6; lba2 = lba + 0x80000000 / (sz_sect / 2); + for (n = 0, pn(pns); n < (UINT)(sz_sect * 2); n++) pbuff[n] = (BYTE)pn(0); + printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba); + dr = disk_write(pdrv, pbuff, lba, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 19; + } + printf(" disk_write(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+sz_sect), lba2); + dr = disk_write(pdrv, pbuff+sz_sect, lba2, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 20; + } + printf(" disk_ioctl(%u, CTRL_SYNC, NULL)", pdrv); + dr = disk_ioctl(pdrv, CTRL_SYNC, 0); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 21; + } + memset(pbuff, 0, sz_sect * 2); + printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)pbuff, lba); + dr = disk_read(pdrv, pbuff, lba, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 22; + } + printf(" disk_read(%u, 0x%X, %lu, 1)", pdrv, (UINT)(pbuff+sz_sect), lba2); + dr = disk_read(pdrv, pbuff+sz_sect, lba2, 1); + if (dr == RES_OK) { + printf(" - ok.\n"); + } else { + printf(" - failed.\n"); + return 23; + } + for (n = 0, pn(pns); pbuff[n] == (BYTE)pn(0) && n < (UINT)(sz_sect * 2); n++) ; + if (n == (UINT)(sz_sect * 2)) { + printf(" Read data matched.\n"); + } else { + printf(" Read data differs from the data written.\n"); + return 24; + } + } else { + printf(" Test skipped.\n"); + } + pns++; + + printf("**** Test cycle %u of %u completed ****\n\n", cc, ncyc); + } + + return 0; +} + + + +int main (int argc, char* argv[]) +{ + int rc; + DWORD buff[FF_MAX_SS]; /* Working buffer (4 sector in size) */ + + /* Check function/compatibility of the physical drive #0 */ + rc = test_diskio(0, 3, buff, sizeof buff); + + if (rc) { + printf("Sorry the function/compatibility test failed. (rc=%d)\nFatFs will not work with this disk driver.\n", rc); + } else { + printf("Congratulations! The disk driver works well.\n"); + } + + return rc; +} + diff --git a/ext/fatfs/documents/res/app5.c b/ext/fatfs/documents/res/app5.c new file mode 100644 index 0000000000..9190dad7e7 --- /dev/null +++ b/ext/fatfs/documents/res/app5.c @@ -0,0 +1,38 @@ +/*----------------------------------------------------------------------/ +/ Test if the file is contiguous / +/----------------------------------------------------------------------*/ + +FRESULT test_contiguous_file ( + FIL* fp, /* [IN] Open file object to be checked */ + int* cont /* [OUT] 1:Contiguous, 0:Fragmented or zero-length */ +) +{ + DWORD clst, clsz, step; + FSIZE_t fsz; + FRESULT fr; + + + *cont = 0; + fr = f_lseek(fp, 0); /* Validates and prepares the file */ + if (fr != FR_OK) return fr; + +#if FF_MAX_SS == FF_MIN_SS + clsz = (DWORD)fp->obj.fs->csize * FF_MAX_SS; /* Cluster size */ +#else + clsz = (DWORD)fp->obj.fs->csize * fp->obj.fs->ssize; +#endif + fsz = f_size(fp); + if (fsz > 0) { + clst = fp->obj.sclust - 1; /* A cluster leading the first cluster for first test */ + while (fsz) { + step = (fsz >= clsz) ? clsz : (DWORD)fsz; + fr = f_lseek(fp, f_tell(fp) + step); /* Advances file pointer a cluster */ + if (fr != FR_OK) return fr; + if (clst + 1 != fp->clust) break; /* Is not the cluster next to previous one? */ + clst = fp->clust; fsz -= step; /* Get current cluster for next test */ + } + if (fsz == 0) *cont = 1; /* All done without fail? */ + } + + return FR_OK; +} diff --git a/ext/fatfs/documents/res/app6.c b/ext/fatfs/documents/res/app6.c new file mode 100644 index 0000000000..4a3565e8be --- /dev/null +++ b/ext/fatfs/documents/res/app6.c @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------*/ +/* Raw Read/Write Throughput Checker */ +/*---------------------------------------------------------------------*/ + +#include +#include +#include "diskio.h" +#include "ff.h" + + +int test_raw_speed ( + BYTE pdrv, /* Physical drive number */ + DWORD lba, /* Start LBA for read/write test */ + DWORD len, /* Number of bytes to read/write (must be multiple of sz_buff) */ + void* buff, /* Read/write buffer */ + UINT sz_buff /* Size of read/write buffer (must be multiple of FF_MAX_SS) */ +) +{ + WORD ss; + DWORD ofs, tmr; + + +#if FF_MIN_SS != FF_MAX_SS + if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &ss) != RES_OK) { + printf("\ndisk_ioctl() failed.\n"); + return 0; + } +#else + ss = FF_MAX_SS; +#endif + + printf("Starting raw write test at sector %lu in %u bytes of data chunks...", lba, sz_buff); + tmr = systimer(); + for (ofs = 0; ofs < len / ss; ofs += sz_buff / ss) { + if (disk_write(pdrv, buff, lba + ofs, sz_buff / ss) != RES_OK) { + printf("\ndisk_write() failed.\n"); + return 0; + } + } + if (disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) { + printf("\ndisk_ioctl() failed.\n"); + return 0; + } + tmr = systimer() - tmr; + printf("\n%lu bytes written and it took %lu timer ticks.\n", len, tmr); + + printf("Starting raw read test at sector %lu in %u bytes of data chunks...", lba, sz_buff); + tmr = systimer(); + for (ofs = 0; ofs < len / ss; ofs += sz_buff / ss) { + if (disk_read(pdrv, buff, lba + ofs, sz_buff / ss) != RES_OK) { + printf("\ndisk_read() failed.\n"); + return 0; + } + } + tmr = systimer() - tmr; + printf("\n%lu bytes read and it took %lu timer ticks.\n", len, tmr); + + printf("Test completed.\n"); + return 1; +} + diff --git a/ext/fatfs/documents/res/f1.png b/ext/fatfs/documents/res/f1.png new file mode 100644 index 0000000000000000000000000000000000000000..5191700fd7819510137459f42378cee2d003de58 GIT binary patch literal 1414 zcmV;11$p|3P)FMzB@c;k+T%4eh00009 za7bBm000ie000ie0hKEb8vpDkdrF^Cuiw{757l&IrTq7K&yfPh(7AkN$Gx9%OPhB`ioN$cBIXBkdr z7A}ZGZC@YL4ZpxoM4e=*&vssa_um(4chJT|LpEdt{S-2k5od4LGt{SR)0%CX{@~fk zocd(H+n?T7yPWB6`R!6GH?|?`#lx4)^;_6cdqeS9h??3R>>x2<4QxFSywP!r&+w<9 zp^PM2O~CuF8;3BF_#-*qmDh1=Q~G*=zMja&qOOFd?*9Hz?fr>I)Iq2pBQV z;|V^0*Yc+x*82iJ#pi#+s`A>xrjhc6jYVAvool4Wy^Z+@x6E<_aIJ3m{^TiB6|(y1 zw?}UvKlc>ITW{nfwv z%GKK*t?!z;K5!o4gWkYY2yWWvv~iL*(&9pn0zu&UPZTY=t|8W+X|U)qII-!ouQ04)a5GWe5-y4;!8BQvaP(1 zVRKR!FFunm3pP4=3nv)WY=z8oEw-NioO{AD-GvgI-nSKkn;w&*2mRa=mS`@R;H+sY zM2&4VCgr$2&OJdtaL4{!&s&Dx)N`BeF!evHxlMPMn%7?DwpnU$)Q7qb6xUOMb6wIg zl&Bq)s9oBr&%2>2K}~*p33LyorslD(o1!nk;EC_d_}41Z+Q=Hh*KsdKMB>@HL1<(eRF)uvB>rMuqF!i^aWSHuF>v>dYKY61SXnefc1}zTGu0ohtE3 zF1Zr5gA%n%JN0=tRHAlJ#i{*P^ZD)r#U-M4JUwtuLMc%@sM^$#DN)CxL>-S3bv#Pc z@hDNpqeLB#5_LRE)bWUfnqT!F;h12hz0*QNJ^PgrG6(oWR-7Uz1vSWA1JiaG&8OB3zjG#SDt2FL z`PyM{`@l;_Ett+VLr*5%-qaWrfa};CpR*ECXGS;^W_VMKaEn_;>Wj0PnaU_;GmXpb z1D3TY4|R^buUv?$Urw%PvvN{j`Ye)mm10&xWw~-KNhZssS*0u^Capp^r2p#=)C!W9 zkk}-lNvN0l6$^@&G#E8O;M^~*cw<*F*Zwh5T~jH}IXuqmb@`R3<58lHM{!dB533dO UN1Nc)JOBUy07*qoM6N<$f=_76AOHXW literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/f2.png b/ext/fatfs/documents/res/f2.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef0ec241e602e362cb0f21f7ccc66c9ceb057b5 GIT binary patch literal 1458 zcmV;j1x@;iP)0`%k{50G#j!0UFsW=ZN}Wy_3L z}AR_AKh^U(*qV^^Zz_={&CnjEtm+*a5@lc=J z>+E&P@Fdn{Y7Xs#=wwv$qxQ~GiuVHbujhB)Jb0@PCvAPMFH4EaQL~d?hI-UHYbRBc zRojb1ycz11(Smp}(1#GaQR-03Q%`PWY7$Q`9~V;^>$SP))4gLR_>#WboFbMz9oPwM z3i#Ic8ikan7Ht8O``sfLOZ?;Zkr2wA)BXy8cseI|_o1vTc9Dd7baQu09gPR_j6MnQ zjgGS_>%Y$nI4F+5LH#MDE2yOh$Lw$!4hKSvK@uu=Hg>w4{d;qJi{Da}Mg5Ah*^os6 z9_=U8?7vP*-B)&3STo9zxRQTMNKXC~|2 z)$c$LL)iQ5+2?XFs{F9{_SKTHNuK)bhCF$;eh+q+G5^mqu9;I+HoC_#JXzKZg!J#jpALEsPVibYNB?u8$Cvk{bfy| zzGzW%*O%Hj`>;Awn_`V%w`$Z49oHy!i8?&*d{euv=FQ&uvitZWtCIQl;d<}Tzy4lB z9LCJmOzM(3hvJNL|qOLb}sp%}7?_5Mp)I?3x^`I_s>Wbf{AZnr} zYN94;tfz%m)J0!M@<8oo#cIL^t9u0){t|V`)OO>d^3)EEs!MH`_(P($A(;J6Wvug% ze#y0>o_)*U^mnhyQx{Q+9Tau6N71VoqQ7X=%r|wk_o!*q(MmKh>VgBcpwe+26t(AU z*2o-Qr}^6D282Of-lO4=R-{Bt)I=R1we5;2ZeG!6q;6J-ny87IsEN9|)Xm(XLDWP| z)I?ni>SpegCTgNaQ#Nk|L+v}6UEHk{%9~BTsac5B-aGh3>OkID^i9o$FKV}^g^6-| zE>P_9{9cX#-b6M91J?PN8HUWat}}F)2)EGcBj;C>wtv%nyVPEZuEg6*!3oF z)bXx3C%fK6v9^$*-E>^z+QpI=>P!wtwTmVn)Y(?%d$Nl}ZQ0y&Onix`EmUplhKZ<~Bcg7Oh`KrYAL!2H*;mX%cmMzZ M07*qoM6N<$f)3X8RsaA1 literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/f3.png b/ext/fatfs/documents/res/f3.png new file mode 100644 index 0000000000000000000000000000000000000000..9111bfc97609c492db457a23a6f93e62151c5241 GIT binary patch literal 1039 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 U;I4eK|N7ZF9>Lf){1|lMKO!t(MF0Q* literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/f5.png b/ext/fatfs/documents/res/f5.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0171a6724d999e1e85a7ed75ba4e2589111872 GIT binary patch literal 2224 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 literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/f7.png b/ext/fatfs/documents/res/f7.png new file mode 100644 index 0000000000000000000000000000000000000000..7055ed1a574670e9e5069157cf8eb18f51e397f5 GIT binary patch literal 25760 zcmd?QWm{Wa*Dj2^YjBDbFTq<}LveSCyB3$?#R*WH;t*Vm75C!qQmnYU>zm&9b3Oao z$Fcvx`w7;{T61W|ILA3>B9s-SG0{lTU|?V{Wj;!(!oa`>!@$5&qrgG$mfZht&gMo1a!oVCD z!NBmR!oU!J&S+K|2yJ-8?0RVnq+8qC7@GXFqDdlZgN0 z?=`>89yD!O79+&+0Ky+|nw@AFc>zWt;p~bUnf2 z%-Vmg*WLyfI_bEE!1_NL|3{%QwN9XS*3H=Bzw}u%2sAaidaaLneHwoqxroWvslZxH z%zVAiejQ|b-4uC|V0eA(cuh|*Q%{{TbRm6C;`)32dqjOV9m|C?@@HZ>R6>r{QyCM|qBp5tkH z!^o$z6W?m#3$xCy+vs_71}?MsXtoJjPp9bpPkiq}(a2FD-9bJC=W_2M*%tM1)bSYf zG;D#xe}K$N-5OFIW`@PMmd=y!b@G{p+I1^~lFZMtq3#;2Yb3fW9FUzhv+CkEK)s;W zYD)2{+pkr0V4hcb5Ow3HIb(WdGQGn9@8}i=DF&)&JnXE%lQ5FnQbH`cJF~(EU1GGOI1X0hW*dGBMPn;mkJ1I95q`iwhyV`NN`rhf z5O_9(&j-IOr<^JWtk%C5Usx6A0(cHmin*)v~w$Mdg5cYCM@(xNCQJ&!-)J6pNl7QaqZp-H0 zis2Bg->vxCff|S=f;Y^jW<=)XKun+FaQouK&oJ z4Xn%Irk^Wk#9w@H9Qnq}wbX3E{l%G}&P{fHOYw6p3JFr)9}Nz6{T{1n&Mb0`O3Nc| zIoxPwYMynaXT^+VSja*5g;l11)z7vJ(V<;Jf*O3Mke$97g}%%MG&>EWd=Cnl+BEiO zCBMCkWpyEKPY0X&H$vY7?2-1CGsJzS+S&cv;H0~)svSyFtMXZniuO}PXmZNa5o%MJ zXJbkm)f~-(~fF7k>kv z{?s>lomRW6>$X%Ea@f&0?lM{D25$#haW4lOY3$aePIo#W_yp%TC zqSo*5=6X5tfsb@`cBc>nayn1HiVcFFbp7(nF;2`?V$^=8Az;#zUadB>%N|!K`cATM zG$^dm%zDFqI;@e?x@jyQ`UVYx; znMNTq&0exwD9Gm)*TmGbcP&s*LAeS5MeS%ix(}iTObS9qzsE6!LITRw_%as{8YBIF zcu6)Ltn2UkN=PRi$_Oy4P_(nHW~v_=sr6`OE>nJD~QRdXJzk&0$v4aDufjq$4nx2Pzvn-hMs;6fNi;j*a=|wzjAo3arYSOk0^0bfgy`I z3(b;bmn|o&RW7Y65sHD6a43R&^kRa1vmLfEY3ZEc)nX4)*K17UM9McmfA`q%^mX}P zSEDZNc^{Y_@;_(**yfnc87_&zX~1T)R`|H|q3hO6&#xS^HtH;^mAXAvo}NVDQZ!FE z)NG|Ivoi;e8V`+ip1%e@JdR|g^S7;CIy~I&&BX*x4%_5D{<6J$rzfCrvUU|&z(Sy4 zf8;J~D8~2rIR~yP5SqJQ4$P#-O)hG`*x#onO}W6mUWfY|^Cv zm37s>0(RnmJP47Ek26g!WHq?7G?f%I39O(LN!uvx!>&?Kmvt7CD!(>bpIKLEW0kgb zDQwX|`{jgYr;FOH4N2B+la_B=LW5S|aQyQK{VQdd>Wm= zheEU$W0x+#5P{sKww26oRCB{P;3Rc2&YhwRpp{E*DaYx%YYO|H_fe%7OmRf>=&ZRsPS1R4->?BCq%3 z0_FSN{;#+Gr-qGYuit$<8V}_D6KKc3F2rP>l==bZnAf@HOBqJ6qvZcE?dW$&X1tAM z+kAH0@#_03Zd@7v{BT$$RbzRv@~4!&`fmcX2L26Ru_SR9T5AN{>)Ni9y75hjR8kA$ zCDqFxs++Fj%B9Rx6~qRLzoF=C`-b8RZt;43!NF9SijzoM<{|j~C2TWlhBUQ8d&RqE1zmu28YC(top6d6>XeAUqLTydw=&))GA&m`@# z-K@O(db*oS)v25Xn)ea1Hls@}V2-BAS(q_29rHy6^&pc>=1u)jnoCeu_ zJ&HYAxBQeWlf<@`s5RXiqt5uH6Khz9dvRDduhm=(q8#0Sjz{GH+E;OH%#Df}pa9kOTI(4pJ=uu+5vI4h3Yg)C|2X4sj`M(F6`ESI`J-oW zmL7Jz0i)G^DGnY_0c)6qd*(ZMvR6aOTO;hfGZV_=L}C$ZJlvk- zo^fQS+EEH%^TFliXeUv5r#ZB;82q$3N+rB=M`P_`499o2njv1p8Jfa*hXWSrN<;)l zhDB1-@6!VMi0&{_c&LL&7sE1yc?GvotYUr+!Mdyc@mYw&mc0=~z5Xpr1&VTOM(|BB zuvMPNjYTF1Ok<8zLx?b(DA($$EFP86C#_zL09QWvgeUNtAXb(@6EW@Dq^i8rL){1! zB;`nw>O4~$Zi0m2HWgeW+q2w;C0>fVUv8}KPjUXHr??z;=)FXHFE?M)>F;ZiRY~5i z;*pwz9P5rs2!^)80*&{lafPz=p^xpokRVk~y$b)!R<8`{GLtx@_=ETXnxSDXP==*j z@KDIn%op5A@R^r^Q2<3#AmW^@=wB^VUCaGoSyl0z00byel zH0xVt5})hfPOCccz-arCR(VL);vV3=H=}r9-bq;tw;8f{>Hu*Em5(=XBrFxP#}D~% z^>gLVh`4FxRfwEMvU*q1An8+Fwb{mH>x$eZ5*7SR&q>7oc_*D}Hsq8cmmg6}LB~IU zUuT=ksdDDJU*Tdl1rKB0a!cR#6i*F*JeIgCltZH$Q0c`^zd*~@`I;-i>&4oImHR-S zorDotF?{{KD_N^!72;Xbz#|8#BC=T|Hw;gw0I7Z5#n=?Na{X2cm;w2OPLKb*=Dt z#m4Wd{Q8&FG7}xDf4r$JM?f$z=VcELpKYcEq6N&sU|xjEof{5GxgAP*1iK1EoE&;2uS9#9yE6}=c~}xeK{Z)7 zn?73t8N3xT+5Zz$uNF>A*@yx(ySq~~Ynd^((*DRp)eQ8IP~b~G5=l7a+PhX=AFd>L~9syvHH@a;yW!R9d^l1DxEIJD07H_tFJAg+0 zkkX)HNlK2UKWU&!!G7zSQT|zG_9^SVl={7`j{SzT$ zJ1u*-D@IA>p#pHId9c8|99C(Rh!7k8zN$H&#QI%cck2fCyBSZ|lBiuXUTxmOf%NIC zU#xkp@|noz#M9f)*51j18~0O7)1<%B9SIpPqB~{%Tv4-8Z+4LZ&y^}KNgmv>UQPrr z1h?zL{bnxvh*-W~FYL`;*W#a7?&l0jHh#?c#M&u#q#2cka%y*E$=ib%u*b`8*tmTP zlPY_xIt~|^7f-He6LjQQ65K5h(4kGdu@SD?Hs7Gb(`nprpE4)GLxJ#+N*jih)ZL;7 zWR#f6$A9(pYE-3kZ}xKM%^WI>eJ6>eoY;n!sT(~0e0L(h6BX8~TIRO$y2;1;HQz>zJ@o}7I=a)3{<@_8dC9<#3f@taATAsR84X9s&T zrt+TxYc%KvB!N7$*2v{=9xHmwrw_9tC%(LVhW~Pr`11X1?d`4j?+toDI#>`La?YrH z%YzrxuaipAfTqZxAa>F$se0h!$9>va{H`A*K~|k>+=f2__hL3XQcss;+XIvG?ps|6 zX~qH+@A;zbRmKwUfmwGJQ-)WnBC&Ss9H$~HjQ$7Ra+6rSv|3|q9$^@ zt+f@Tjd6lQ!b}(=KGH3tV)Z@dx^kvPj}WPhe>Ch^DzO%M!cLdp=qh|q-m*qh<@r@3 zJi&KvyWDoYTQB2R~PlAv2&zTuh@&HtER z#-uDUJ}X!!qPaeVHq)6x3_t+m;pI{DY?;H+$|gZ6l(k>K9=e6Wp>Z&8Gb6UC{xDd$ z5E57(AbjA!Cc6i}{Kl|Aw>Ig@#mj+lRp)~lvrMYlJwN#kq(S$@Q@a@zC!C=2Bk~Fn zk=xU^EtBJC@p)kL5dn*P0^8AO2cj&O1H=m^9jUQ9;EB94=v`$^#c}VFx=oR_?S#J= ze=D{Wyv8FL#ZH9n%8yN(2>D^X&^4%^%;JG_GYX9zE+SUMGT3a3TXUU_P&-5gmPl-E zVO6Vq)q>kHF;>Q(KIT0^9QBM^P5AciM?G9FnsYp`4P)#F{6AuyR(57)*C=WuQi&=S z+oJ1Y2=lHrA6^v~(E;{jy~wMgOu1y-grDO(E~xni2;x;Zlgo2bW6r43ozB)i)0!OX zxZCX@0#!smz|)GUHNBTxQuTP$JU$Im*+|P3Rsrq&T0AH94_ZS9B#~!g%CMH^d_dBl zi&IJaX!eUsEFb&v15LW2IWf9GHG>D#pXUH1S5k zluixQ426VoNXeg^WoP{I#36VhRT0#rqd~d*=pmh^j9vQ2XAGS`@?f}(y?Em@I}AH_ zNj+Qs@0s}99!8cS+FJdiyu;nx+3tA47_B{#Jk74*AwLuRipyl(p1MD1^5D$!nH>@4y{8H? zt%ZRk@nv4qtwpxxaxI2LuU~mM3If>qFhn>GCU_kQxdKIs$5>rU>PLiJ5K-h+oFmqD zsYDKKd?pR&Y({9MuN9smuCQ8Ks|CLR&L_k2WUQdbNkJHOKcd7W+LD~shidX4;MU@* zw{Jv?Rd8_!4z0-CR={Ytzn}a7Y{`2&16H`#cHPA`btELS_r+OQ>#C&|u0Lb)cYaIo zZc}ocHKs74w-kC3O;*<_Zaie7VDqbxJHVKIKmd6?EftMVNqp3FLj`3I^8K#L#`ReK zFz<-uaix6wwjw1C)PcIy--(||aY+Y`s{1^3SvPo^ire$n!b?4BG|qL8ZmvVNGoU|H zT-nS}tpoCMvxvq`H~<`4Xsc^$1lTXi$HPb0Q2mJ)M5Iz)SfrquK5_cW-esjMO~7!( z-o+T>^w?j{?S24JE;C77Q4$*MX7)j0|@UnK% zM_l4*jDb6gpW=F$#bHFtk&QIydrO#Vn*vK5E(NirGkIZg_tZJJrDSN~mJp=9J8%J` zJ^Ea}_Q+y+>-RjkUTuaeBJ+3^KeyZf(c0oh&L{nwX1FbtYjk+!6wfU~Bq{x#IDu$+ z1RSLM(g}bdR+0}UPXqf=zrS{VF=k6v-<+yI&LzFeV?hNJv~qjo^){77FDhC0)~h2N zx1$^#CPSLdx$p&}v|I;tmy_!q>r_4g-Vu(waAL9dRSZOvMyFrOGwv-};mLgsdt#d7 z?su6yz}!SoBis`$dQtb-klQCYc6R(mCO?V0i$zQtqj=x0l+RTvLrQd;C^>csb}KAL z2ZtHsef0MR5SgB}D3t}E^IX#r)O1$56K<$S6PF!`7|dSY*JM#_9)fk>_wG0Vl4fwU zDK{=hi_;U|65KlDl0}k^<4%v&2|NIcr9h=!;j%>LgT5#dO6@oTUO#n5b5=dX9P#Z_ zX#(Q!mC0C)xGA%eLh!tp;M7veWGRpgZ>TbQq#A1WYh5w!%H zqiz%+jZjh3RO+v3l3GEYv7%$CAq~tnCl4B}%lmuc1x%%y`=*&h*mG752;rQJ{XnuC z7jN&8j4GeXN8uq=oY}_2c^Mses%JlLok6LV*u)v<1#g_-Np^3nL`H*sT2y9Jl|c6~jX z=r6pe?mfi>IV>@H5v%Dj{K<0@Zpg(PW|D9yfz_ets4n092Ko5iM>qw~MfLK>@B0Qc zlx4^G`Wo|`ncmLvbEF75bGX7CCNfec07N1A7&(Yw&=!`wq}kNEsG<_ayWi!3JSc%f zLvpE&ykXrc-TdInv|@aOp)&^W3<`IjL19Fz&*vy&dPOAL>rSrt4_&_y zZd=oGrlf0Q{0#jo(j6=HDFv-UNDDSdAmQ4(VQgrCX`H8&Z_Mzaev*6in<0YWN8Y}V zN5NJks zj3M=asys_}N_tD4&ZJn+<;n*7+cy5@o_Hx@*Gw+|93FpTKS zZg|5SP^SD4)V*w#6$MsK-ctSa1JHm18W_U^%bq=b%Sn`TH{-%Sa~hu35reshP5Q{( z7VL+Qm*Dh5mO^kfO;Y5JU7gZ4Z?KapX+TPAu+!tl38#Ht1c<2I+~UfT%>FSuKmbU> zFQ-k^J8(!-`-I#MbhiDzChXf4)6_}<*e;Qa_|7=4bv{FAA%LIbloU$eS7A~hcX{(0 z7E%st(jFU!#2xoct>QO>UBZflqBSc?(bO@ZAjXAmc_olXFtV(&@6?{qZdHIlXGJN+ zn1~cma+hFSw@Bwq{oM+4Ih!`6mpRP|aJ(>hGh6nH&Cu1siEXm}`>s143&P;G^}`W--0Rq}mOSRVS*GwNq7HFc9CXsAjI`NDd-yf>HYC$C9iH?;@i>OVGhc&E=NhRq3SVg-tn4Lo{@8r`Gy~SeTfxypW>bdSb8r7LH7}c#F z%dX*}1B)}^KrTrnpbjs1_w%a%(m5B2TA8~Q;SQh_3MZ^Ff_a-6SWLG)WLj9M38n1i^NRM@s_UEO z8&sgfJZzjc4}g|$7m@=@l3`iW;`hTOmYT>N&Km*q+$6`unCcELjbQp0E8yTrvnBdw z-X-x{k)=kZ7T3)Hn!Xe)rLa`=B#?C}>MI6?F zjSNwtP_PdHkl%{oG;y2=KmZ_iHskJb`t&VTaPXV}D!$LOUPC4Q{Shz;=~Gj-)FpN*;y@Uo{_mZ2bMX@cnGt~trOg5>Pme>;LeKdt`?Ys`THe#L^V z;!DKC6MKCVmF3?AmTF>iQ7eICPkxw81Ee?Se6QO)rvVnNNa6O35PYC4UXpHmE;_=sw*{=d-46n4Q?;2?5G{%3sBj4#)MQgkz_>uCGXeCm^=Hw zFQjHiVdqEUwO=asW5^t7T{@M+aewHss@m0wbgfBCU|HO0<>5>-Z0UhhD<5?BLz=~K zHsCs#-@WNabt@U+yH70*&|>qKFmQ@n(}NAl>8)51ykF&?DPZ9ZJAbjJ3S;bSH}2Vc z8DLD5m&pNeUF;pp~n7i9vXg%-5%}ig>3Q@CjoN?&EiV#HCfr_AP_c|s4 zqtVRT*Y`gaF(Fef6d=>Vw+DwExZS~GIv+@P1@@zErO~)k42}t^0!O~-w$ffM%$@Ph zg_|83N5xLxz1M_AJ#@e0<%>dx2C_38>RH?*_aY83R@a_`ukRlwG=gDf#q&RHTyDWH zZHMy(wQ!m_&}|U@dKmx+6QV}8@S%?j%-mTH%!-8&7;$_zzRE~G*8jWLBohcFk&`~P zK7_9H^(JG}53oC1Y8bQ!d+hw`X5e4Q%OM@!P(xI}+$cz>CEN&E?%y#1@PH|Q=e;v# z>tS?s6GH24ucesd_(HovpVpX}3JJ)n$6EYmO#4XCc#$=L1rCabO+f_r&F4d0p@n!a ziugSexF)wqJ9+5Vi62wMy<(*4gP-=cUi^JQa+sOr-^HiCRhs7qOxk|%uynlo>9vef66Jhd>pF_;=;6r|mnZ zE5QAfb0H&j{~@L%aIA2jmjPl9SF@m>w1I4S!u8j{u^)>|K>m`XN=Ku##OhH+Rj9jU zw0rjGjO}k|(27G&zer2I{+1$UTIpReLOZNcJo%~;NRjPGm!q9n2@mlp=LlEcKsddC zh07}ymk_*Q_6$a*jPe}u)4i%zxXB7oTu;X)O8Nw`|oiLG$_7UB^gv<>LzH5c3 zp1q*2Ub=QvMk67mqS4c;qt+sU-?foYToDlAThh-Ak@=l{U%Q*b*uG%s*~=H0hnll6 zJ>qVZsMXNdRaW1v@;vuluuCO>w_ET_o?q^Zq`{@xR$hz*k#l8rKMBADsJ$N@N@VGJX zXIB3(bW-Lvz}PkZN747=POJ9myUb0J=AQ3aDD#I`84(DhgT(FTKh*u2V+H)Q$AQg7 z3jRUMN`U9QG3>dA^Nx?zJx`Q?=SB;1f2S+0=SN+@rwRKo&}K?221ttG0JgH#&{Dq+ zqMC&TIcRXRA_&Kx-$q;FP{5Yl`D%TlT#gN?R!mGv^HPsI-_{10BdB{y-CR3TJF4`C zPC}M^jQjuV!W-i{EVDk^w=Pu8WQRY@cW+n*@X)>LF;6qFKX8JHus6=v?o{-(t#thx z9ZUB@CxtGM9)y57IPB*}G}F;KBcUo@H-kA;ln!4fqY+Eu8{EFk*}Oi`17;OQR|^YP zO<6upqL%yhTJo$hY=48-%Z|LhV*`B;oYdp-sX3BMDa(VWT1-T`KMqjgebc*JqS0xB zuSx|POl-Oqq%-H;rf0yw$0gZrQz7^keNT`}f;qZ-$x^UDJ*z$l&F^Cp5CiI$H0Z|I zyIxjP#r%c7j~x6B*?mP%3u#o0v$(&$2wi=p6znN(jxgyCsSbp(7cAm@J6ZG#h-14T zpt4|k2;EIh&BC_pr}MOE8)rHQTc@A6=c#_h$N2Et)4j>#bTRBMeC_fp+KzO;V@LoE zB8AmeCHKM-HdS(-b8I|&KCO%oGQEzOV4KJv@MihA{|+luo4NO6yApE_Yw}t1&k;Xj z{ye=N#`B| zrc4qxBdwO%myT1WUi)I^C9UIieTZ^yTs&uuXw#8o+?C)d#J9`k*MX%1td)s4Q3 zv%H4m&f;cf_qT9q4-^)&3VY&jeXqV6KmsOBy6Jn0LGPOhyBwZ&tdmfw4Q6wx%HAZ8 z()@e}1XI#%hQ*$P^l6{A+#iL2jHL1WvV<$edu#id_FDOBbc?%7exftxTO!56R#{ks(qg zZ9cYQD?Nz>FL76v+GX;gLoKoLp4*E;e-0KX0Eo*b&SwuN==-xuD{{DgKi3nZEfe14KUC0=?dT#2eZItiMkv5kp>Y5%L5Z_TGxl~FXuk#=R;=E zC}x9cgydA%5RqhhL41;sVYSh(2!vjc0%l z@{dh>^}Yc6${%KQMh{uIWvL~nJ&aTc1xm9pAks{O{DbTd`j}v%iTjX*ufS#^5;h$dC|vt1?g;;)|iA_kb#jxQ*}Jp_7&~dTnz+8^9-fx?8y)@Ssa_p&p6q<7#XO zh6<-DE1tt?hAG3RE!$OH8-UQ6#a{c8wKe>7>{FE0 z264BP+1253AyrC#t1w&Q>#Gy9_UAvRgv`RM+7)#=S%FIa_ZN4f_O@yWq^6yELuDTn zl<0V}ZWAq#!4?ns_$YuR$9wAc{g~}(r{PvS;LukEK*clD=g;nDuKCJUN~VC!(k7_4 z`RfBSOHYOPPNJ*qL(T*VvTf z9MUg(_K78+ckzHVu~&pw6j`cOSQN)Ba-AGUzs*z79}TUzkT=a;Tmt)qh7 zcZVaLp!zwWuAy8`ofT>?w{M}wqPq8yq*>w#T<51WB6gp57xeD$r>M~Zy;Se)y7%^> zurS2im$YY3eH0TCI$45wM7~J@5bDqM7@P%q8z@vNZDsHN79XSik}$Mg7M*&;GOW>4 z>})yw!GX06)dv;i;ysDsvVmK8TvfThJ6tm#$8>}N33)vt?;j{-nrp$YF%NsG)=1zH zoV$24hXDy2Xf*o;4PoX|=NN|rATz(^Z=Z#?IE91wKVA2yDD-Rg5}hr27R?0k_S0K; zGYZOTYe`Pg4PdCA+x&^eIopk5c2XAESRrn$b>XR7986(KiM#$F_p+|B+R}v9Z&-ai zZb;h{s}*DHs$X_1XAMPe?S^H3o?^cK4$qkABDEhwC%+%u*smdirt7|J7Cc9D3fmbi zwTA4kqv-@q&e}x|SUsNW?qmU*LLc-xif6z{y{t ziU~;wu3wB|{EPzTZTL;4Eoxlcs8ESTvt#EU!@SgHbj8CC{2=@L@HYpT6jZe)%lE|! zu)?~yfEYT-k(qH&iAD|w2`Y^nRc+yc?zu~772Wl`*!jB?=Qo}i0GqFBp1T@W`E@h{ zJSHb7FP4@eX>*^BFh*UM3xGFj&@E;L9{7KdA#@>Prs3n|MqKcLm(deNgW`wc0BG)c zw;0&=LWhHVQXa4(-kb${UVv_6P})~hOS)-r1utr~mi1x1Vl14Mc1Pzm4d!OL^pSxM zdJMQ-)qa;p3wo-9&i5Z9J1v(zBf; ziEPDyB&hTLuc*8BXr{bkmaj8XTgNSLU{CQ#lFIxd-|NFFO_PBfC)MmfPXU|7%GqQv zA$l{;OOH(JJP?Mt#ppTkiQd>BdJ;Lbt=q&8oZcHkd*#@g(4PMzM`ZLbcCf7_R)Joc zNG+p-`qwNz=jHPaEw$`x=)^$J_4Q&k*#Icwt-sLp?75G=+%$|gH2eGb2>bcy{MkI& zPT9ZRQZ=Z(i+{SRzVEqU6M-J7gAwxOCE=$&A2v#y=c0I#8il8OKOX$|9Qye9A~aux zItVFG0*$Xe%WyzLNNeY_QFC`i|N5-)8YBLPXh-kSWV$D8^Ok_ckZVs{U@=~JoWFke z0XoE_wEg5``?IO}ZE8rp{cQDCb?tYe+>%F-_f?_tgHbAHVf@U9|(5`7I~@D34lbX!y3~y*U8AYNYu@_?5Xy zefc(X-Cz*chOh9NYWDqd0xyfj!$8^p&XNKH5({iT1832Y#+h7a86N1QFzo!qkSkkM zlKtV<`ktQ11dyrz7&^HbV!w8s9cw#FTRv8>c{sj*d4g+(2~i^V%Q0Fy zFR0!Hk?F-2ifm8{;_3~shJSGQei|23L?z>82tcGyF;Wls2#F0P1`c_>8#xZd6p~uk z=b81Vo}}l>(#|`X5l=(}R8T=7U_DkL2N+sJMIdFiZ2U`c4p--;acK7jKz*k!|K6%70XA*h^m3dKCfah3dCezJTX}+2TrrzM@62-Yb(8*BSDoy{ zr>w2R!W9SPrBj0Cw`VAbcNszWIpDo5181qo{!%BgN(r^mbfWjb#1#V(OmV}n?2Hwg z0sx4MX$QCHn<7tfN9jfyR2zYQFDF%PwJ*x>1K1dXa$5{#0h1e(;)9;xh|A#LZlOhx zAaAetCE1HsA16~|qhm=yR8WL6{Y;MKnh%s9>AACpz(QE2&mq-lCX~3op46Kl@Rp14 zw@VRP`ij&cQX}?0-bm$BC83z;kRQKf8{VxQ?A<1XPR>@F8N&7K39oo-*?S>;%1*gE zaEr8lC>3D7^p*dSHf?%_cr{6K=HQY|bFD^TV8s8P`x#tlD}+HbEk zVIq^DANj;MzdFZBM^{*QZ2f7vOR28yzD#H5**NROG&4C+kZ3?`4yZ#A`ocerC9qME*tU;JSYhgGa$9=MKdMy?oH?51HK<}Y^eEj3BV>v_@cYbH}|1X z8CqTeh%q!;v1;IqIz9J6eAinDfOu~EKEQ*%c zqSzfOhs&QLRNjKqWaJkyAk0dRZ|GPD{YwxdZv3o1Kbo|I7Lx&ni4b^a8IgJ>P5Z_=m5`r+-8X2Kw^0t6NYZ>ukshITC6wrOZ!KK zcn`MYcXydrB6w|xV|caP3MKXP>19wD zR5JkB50NIx@AH)>DTvsVa2U7*mSOGMgT~OZOea)sBq^~S74%4fsS>?cbS2s`V+#Ob zAJNu856z!<|7=Ofo+gp<+y2!Pd$PwMwNpmv9RYf~T~f6e4I=TsBD_CQtOOFzq?VS* zPM*DbN~N&w0A^LwNPx`g2-PO-22EdkB|#~Ly-C7VxFh&AFhd9Fxr`RLB)wEGGr^N% z+|S{mEw*)3B=i`QAM&y3kIBm-t1l@8dSfbu!MsKLfdf7SxZA?uKK{v8Z7zu-KPq&{ zQKA<7H`9j(KRY!pO+s?TJObu4+o#o)WC!m*OLC`C2F_A~rih9X zPvBnog{fsaV3KM$+3$V4cZ(VQy(b#+00fOP9qyDI{x}CY)LYsY8x~>DcBfz0;RWE*@e4@H<_kx7nrK^U0=$b zsa=r4@tHZAb7vI`!82hhlyoR9JG0-vE1;@Rf1}|X3iZe@Sg8?g{$D;oL!E=3|L1D8 z1>hOSSYz>*w%e1D^#U}${*@{f%VdF*TeBP7&(H`L(T*MTHc7xj0_1Cad)RCz8Ua?gc0+viqo)fVncR z7tQ}1@fSiyI07>1%0~?(10{^=E-9xaBAIY-8+b?xto?tAgb~Ps6vI?dSyD~kl7fe& zkwLMl>jJ;exu5$@dpsOq9d+EH(9-4~XxaG&sC(-B;iv1bW6h#F+Udm?a*gJw&b^qG zD`}>)%;Ue{*>T|o3MiRp|I(W2ZQ*cXoqJM4&H{XjVUz79F1yzA)cTrEpsFzmU~&t^H%qH!|qh;${rR`HJ>Ny8u40;?&ANi??!HZXt?F zkv?Ql5I@8#i^3UrL6VGJ4-{}oUnzjQTJ z9apG?{{rcGaF#Z%0hf2)U6G|dbiu4ulvocaC~YmwCi+M3Gg-h2aZp>hGS@N?Jf?j8 zj`#1F)lxT$=|>9U3$LdyF?Nm8Rs14?Xn+LqQT4gLmapbH=u}$S(w)@H>+8s)b6hOy zCC^l1c6FjI zs_fcb$Qjq1TBOtEJkw(-Ge>sQJpCy9m7oq2l=$OpsYoHV1>M@aUi#G+!ucpflIlE5 z9?V6ysCai=y?~NPAPm)eKiO^Us*ovA^9xqwegBUC^YRe$4C|qjycA0|KOMt?`zu#U1)%3?8uXVwnDkGc+%mIlw2l zyfDrYbP?aNCX4Z~3LY<9-hmw^O+~}lb_(-9WftxVWVo%8Uqy{{R}30Q~2#%}Ew93N=a7V-UJm4vu-{Ou@~Q9!Y5jTPpI;qs%b3xZoBs4ML6H}Rlv8^i@=uTV>857 z2tcFny*iU-d{szj*+BN6F%Z3HkKFjM(+Uw{?Ylo7Fh}eCPD-@w^8S~osK-4qj8nG8Z>atSXJ$vGa*QadodPFWSz)_Q-WeXQoG9oNn;7?*}wrG#&Ne7DwM=Q>EWXr~B01duzx9KQTbOjyIsZhHjt3EWGk;im#WCUI~XS!!^_1yEWdHfR#O*)k74=x&WP zGW9S4ItXg<`cc|92PA`=gTc8(JuXpJWUW(qAaJzY76pg-&uey>N9e zWy@3&59b++go{65cPE$yba@Y3@&mg(VlH|Lko2 zw^UHF95IkM=xTVOfE|X;aY2V4599$tn)c<@JO(O#JHq+&0Q$E}=a#6T@AL0+lmmKO z>>kKMFJjzwLbwvDw~T_Pob!qNFWQT>zc zj9zmb`rpD5=k8n!CCX$7EdWBw3-2Nv7CNtb3MQ=|`fA3j#D!RKwy)s9yqrzg;7HRM zuJAMdD2j9-S_EFUUZgY;uoS@jgE1&#uh8$TM)jVWQQubsp9QT^l3TN}Ld5!s((As} z$Lc`>vDQjVXG;TN)IA1EB{;5}Z-qV6`k@uflgxagC)P4pkg@Rp)<|*TB_`hqP_es$ z>hmtM>LqbAA07C>6Y*4UU7B*LRmxI9V&2_g_*DTw=*LquSz7`JlJXoqy4%1F9PGMf zWb)Nlea~KnL<^C7F#;x^U-!oKwA#5%TvqT6ucu9V_FMWXX$EIESny}H!$Wd>$b%lA zR#^sz6J)juUYQlzgNXw}ezba)okh2(-mh|uH^hIzAd#)Tj?YGDbc5(izU9}I`LxIrUvt}?dehie#zh=w+a)b2>{V# z-*qu^96fE}{Ab7n4uxiIEJoY{uDnjp*l`Jz^cl&wg_Mn*u-@?)JPp=B= zWUM{Al%<1Pk5c}sGjd}&5j|@*-f0EcHP@EkuBF+)sjXQHn=B}3u+vxj()nFHcuatY zN&H<3BT$Q9j@UUzT@V?J*BN7*1m+=h%F=?}!(hi{Db|W`tHJ6jC8*{OqVU{|{#<|a zH&13k&K(F)JKZe)u~Wjx)hGMWR@RrtKUvn7fG5}8EvjUcI1 zK(0g2xiIioY*(Rkkr`BM{r|dG!sv>|yeX3`tj9_-AmYo!w?QY0Yf4t-@+Lmp&uLjJ zMjx0-UPtlI>Gu5X8LNb5>v5A1RL$ zrdcKc*MI8scORg&e)(;Iv8$@aKlD_JbQ(fm*u=(tFlxg#=_8H+B(~!5}_^hm{&f+{S8Te<}zzEG$bMagakSw=rZ)b&{4=; z#_Nei`ZCZyiX;|#W^M)Qo=X+OV-gkeF0PgS5o}0L763k&D6Mh|{Qa_GlDUUYKB)P5 z34QZ-)Cl;DH7$yD-1=wqvMp*RSS2JJfu^<6naQM%Fn=L^s^hC?lMw6=c*DI^+tf_{ z%LAW;=L*s>m*3C@?NQg__YbB*<{xir$hCsD*e`oXC<;W+lj|WPONvnRvN8b>?%;Yo zZ@RfV_d4(CU+HN7|Ju9Gs3x~&O%cUV6p#|CqI87NdlL;ErFRHT5KwxRuJq6aq$)+4 zKmeskRX~a~=|zf44=4nP2pYIMoa6VMyS}^D{eRc}o3*pwch8=gy=Ufm=3Q-jx08L% z;^W$r(Ms*HS0jx-D$nZ{^l{#-rFN%<*Ywq|fQ$PN2O54|bPLj>E+xy+Dk8_Cinfg;av5c2R$r`+xX-J5d78cX zenivAmctA#^ThC1KkO)Gz-%!7!%i}#xTysjC|flp-3wqDylj7#XBE2iY0;FY%T?e4 zEWWoiFixxtv-{h;kqaEeZ1zfTAXkiVIstMC-FzY@ouSD#he~7e+ttW@^z)BBu%;Kc z+RaSydpJM)`a_|m$Jwx%yM_qw6buE^WD&dA=rmLXd~_|u&v zPG=38cq;H#9XJ9G4;z4!Qjf{2A^a5$jEcEwm}L>_j(^VI*h6MrPXtcr1UjHosTy z{A#f&c%QvL)1P>3JQfCwu0$Nh)Iem2&>1ly#Plsck z!Q$(?`nN8ssLO?S2}#tRho3K7o$Wv*Akppg%i!Q!m#gQ?1zXni^2<+lz-*<|Lqy}` zX(sp-+ikMhzRP}HFl5jg`Ka=WjKd;aW9Y=R@^R2v_?3L+wt_xUA61(y!4Z$lZL^Y5mOAh-|D!I4APM=g(Ee#m*tojke3UiZnJa9QB!DmtB^!v7G4Vpz>}O{>&-!WZ#}+k%K7O8C@){`F3KA+rY(K}X#EeS-@noZJYnqVL5= zdw09>2bhHOs6Ya3V?L2`STDCxY?0650|jJ)wXLA=hoiBYw6mx(Sh|$cz@{dlgtdNB z*P4?Tf9pY8G?Mo!Lgx%kb1{J+l62K(X-F5N)|s7RQk5%#pqjIoPa!!YfxBWg^9AKk zt2D-On2MV+;17$C#B!BN3<=H{1-!V)HgW6my-f{`~@ zsgzp&{Jr3h(Gn=b2wnAazlW7fa1Zi&5Mym#q&%vVb6O!Rtb;H{gFVgCg(*4^notzJ zv`C`CbMz~SF6?b;ecU$ZwMKZTL7v)^f&wc%61Kkw^_f z@X{klQ#TY!etV3~`}R!2DQwRYyt)E<^CAPw;@WW*r-xVwyrADZYiy~o!g(LVNMh;f zY<`_y~tgSzmWyp~dW+)oE)5zZ#;|5qh%kTb6i&JqdfeG+AgO{qr4ah~>b$ zxZ(@`shOH(%5zkDfz)u{wNDkqMW3C6<-wY(iF|e5$_8X))joR!M0+lxNl!RbP+l}@ z^GKTo6(fHJ?%R*KhWtL%(0GSoFylN$p^BQ544#dzONe3%dNDiXTn|ubGmvM9_Va;( zi&CB3+fxyD4m&)K;a10bEp`G0`I;FjM}B6gid&8P3aZ6dEv=`+bmS|jQHHCYAw_G% zGe;R44|CV-qF*|DN3sx@$`ZJ3ro50NtW|zTQOG5F#{s}Y-%>#&|;wl4v!zgVu>7{Ou z*1P&p9wBJWRoZi^!#)-`N(PeK$_=E{mwdAP?dvECd+Ox?6W8!_8l(lOGO;)szlq4Z z9!@n#5|$v_?@p zD22$2B9!Hv(w!_-ONH{2@X(|D%LTzp!h2Ik`AJ;)>O*`K?IOq&o#fDJ?$)$mTiEB? zwhL*O4>%>E8%r|dgoWYS^E+G5b%iaHqu2bEN70(;*84?pv4dmpCY26mcXQwj^iJcYjiQ`0l1l(jHPV%_ z=s`W+JyFoJHTUCc!z3Si!2eYLfACfxjkiwiOnLhkeXa;Vu#>6)d?}an;%uXce={%N zpeOJCZSg3s;*ea>qc4sI4Y8wh z_l|RWk|iZatM_J&FoXWHoxN8iRDq+v`~yd>VDbAAsZBlOR2GiQJ#Bg1N#E#Uu`MKK zdR3LK!J)o$dz9ptJ-WOWXX_D5mBEa;Dwn{(gb>s;eqIXPq zLOPr>R(j^eM#z-iveY(_ffN0y-SI&*S4IpN42(4I!0xtg-qKUj_wUy1gpiE&{mgZk zupyzRad+=}JWY)hwshOct|kfQCFA$Zv#2()sT$36;nJQ=BMb&vnZY*me(t_f2xG0W zKw!dUvU@v8$}!3XAC^Osc*sggH&6n;FRs&v45hgK() z`SRu6sBA_V()<!8A=eSXR(iLS5A8%%?siFs+X1|{{$6=*? z`Z`#jMe@-tX0#NPD0WAM5(>LgC7LO?@eJ!aqHr#AV^MgH@m&rPpt z;=&`E)LurDT^AWvYO-Fcwx@6h1x5GXguo=0^e};U97gX8YGJjILUpK8I>C%ACRZu2 z%zGBu9|DjN_3oa(L2s$qE={&`rN4T3Bjr&e|BTFFwNk>NW;q8g=L066_UN6^@wY{dYKeS=ghpsoB4riOdd&X zG9Z=kmb)msu-}b#z5CsE5R4aUYhjXardc}$r44Pq1U0CwxSdz$KtaG~NDMuP9nks4 z4CO%Wh&$iVe_5zo3AjZpzw#~YZSoUM_lnQH=Hs)n`>XYjC#__UV6(70Y zq_EaXXnD_dH|mRc@o`3=9=v9pw!SksS$>UdclEyRMW^YJI$R|wb~kkHgB`DU`xGoI zjgaq6ef12+swY#( zK}^n{Mv-r?(@OHnmtVBN>~0K*e&Dcy9_h5?=ys(p`WKMJ#6WyK&fGMze{Q{EEMG`= z%gCMjs`Ly->j%~d`54C@l~*(of(2U1BPMcivepys46T5Nz}451v`qAK*rgTv}F>RO(pLB98~!dG@utc z`)6U};_K;ciy0DRo3FK%iFD^W--M4Pkl=tGLN9RKQ)!Qv-RyWsnh9<-)@_*; z2a-W^r`ehcAZU~kB1ffN*}aO@4++<_n(A8EFbF%A&Dx%ddAfVV!-M~KOrzFkKj%xv>?-m_!^aY~6;TN(7g z+H0fp0<0haI^u+*if|E;x&2z~)3~S4G2_!|eK`y5B!Jw8xJ+EY(J$ppQCV$&_El;X zZvOS~f=u~ai*Cx1z!)(7l+p8H5G$66ttY=f1%KWRWJB)WdMGuYV+V+@FHUgVA;S^O zO|nmQi%L(Z4Gb9XP%})pvZKPX3CpOGX~%iP*6H33!k(la zMIxLyx*2K9!ocB_lxRb374pFW4LAuce)QIrY7X^UG2VSa^cVc>gpig+G?LTt0B;}~ zl;DUKr~5?J?jmpn4P$dw6mcANUPr3xmzJ{?=*~pR5W_P+3L^Bmqy!~78BKq4w&oyL z&Io4j`)0ViY1BypC95h@^g2e@Y&2m2$>j0*-TW$<4>!-T%B`LAovxUIPe+@4)d znAk}|HMg8umraRbYBREIceWA8u!Qd-MhA-)f_NdG#GgS|P1JZU*C^8qOVL%RspI+& z8)1()*Ir%1Y1IJS_j4JGZY@guq8~WH8r0^ZMpmhbe0N#@aKVUQb?kduHE1geoCJfVI+O{mBp0RguKwG z5tDe3f1yyUq2|1rFaK~|cyF{#q-PKV3C){NON8{Vl3DbA2pd;GDbQ)e!qj8?K@4ei zPsw#leq^iH>aJl3|<_-4kZHI3;7OF>wa^PcI?fa_({ z>&J=lcQn6$=1LsLy5eHg(p!v!>py-MzRTzG>#uFXR@EFtE8g1=#)<}6ie&ZBTNDUn zVQ$@vZEIqKrm^_&3kf{t^!Ms7>?B2YdxVo$V6uh9%L07j@hUR(z;<{{4w)s-~C z*xgB=}Pvua$$qpC;7H4SC?wnQW}Wd zbFq!JfC!;$_BGBwE;mLjpzt6V+eiG&=G%=~MoM@Y?U_zxri04ixNn9Kz(;`Q%b8cm90{Yx5$8?O-awZceTj*K8o_H)=iz46Vg$X|#9N z^6xL!gt*xIg9QUtT$K$-|CVvi{o_?x7$&>|TQ7udr(NQp&R>1=2uIsy|OJk%jWILHC7%2VYeiL|CD)e{PB--pa>S= z3k6_m6TGvj0OTvDZ}`mukd6{409>RjSabsl+$1>G`9Q8E*Hi{CEx;hW2hwt>MgNo* z1H5E1L51!VLz0EZkZk;Ohrna&mj0K=`ad2~2oBud%uqP~=89R;IBx%a)XWw#r_aHb zf%`ty?$UIZ+x^qC+dT@2SWN}~z)ST(E8*Y6#=M)t_PBQd}cTMWqEMr-Yn!zy%4sm9@K5FRsG9? zjR167y3R+oR<^^@YD*j$tgT~IGmP5U?P)LGQ;LAWQhip3xl)Q8F0eJzg~UR zKY@L@i0mkowmSyR9`%ynfXYwLm;aPtDq=rwhL!u()0EpZ^Y^v4=N-c-Us@ON7_G2as6hK$PfNXCPHH`KjeZ^fj`_}f|+W*Mh%UI zXs-$0*>mWWB85*ee#vWpm=&Dpq+-4#utZ9GAM{!e%jUuBtTn4iUerhcv0k{U&o9w* z6GJ1hNyMsN<$c}3JFBBFa~Wl_SP`$OR9bnF0iYhBo$oql(H-+u#u?be5S|EX;Gf8U z6+oL@_B}e z!cF~>m0B{kc;g4@dT9d??EJlKDEtJKs7(7@*K;b+RP1y}#aj)$>89biDyJp`k{6;} z3(|l;ZDxcba{zt}-%h!VqT|nis&rhxV0%tFPNLU%7k+@Dh}~odhPhKo%Z=C{4msXy zNMBm-z=uXE4Q0;Ldi_5@F{4W7(~k~(9|V|D7!e%*F$vbDqYX2rUm&D$1=zcx*0AB) zDjBn&C=ed2F24dLRWK)l#Ij5=QfE6lC_uuclc4S}mp&A?nnp4ES6l1TMCAbhmI5k~ zGg@ZTg(1jZ!xJBZp5}ia6cZ%vqrm4F+K-+Vhb~VXMY%RJ0if3_?RS5r$?y^Q3!=X( zGbXR5`ubr3xlPqvey0x9)$>XFY!ZPiE!x9X^Ya9EZ?jB(OMfyGif~5dyVa L+Bd6iAj1C(*`FA8 literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/funcs.png b/ext/fatfs/documents/res/funcs.png new file mode 100644 index 0000000000000000000000000000000000000000..f381ec5f064611f99b233605e0489b24605d727d GIT binary patch literal 26839 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 literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/layers.png b/ext/fatfs/documents/res/layers.png new file mode 100644 index 0000000000000000000000000000000000000000..f9880927e29a859fc3f83bc2d98495210d0ebf60 GIT binary patch literal 5521 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 literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/mkfatimg.zip b/ext/fatfs/documents/res/mkfatimg.zip new file mode 100644 index 0000000000000000000000000000000000000000..63e6ad73248e13002fe288498ece81b9774c75a8 GIT binary patch literal 778875 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

mWL8u2I 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%0D^j1Es`sm-TVm&qHQW!0?5FfrQjqd7^ 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%0DZ#LcmbpO^*PGO#Z*^0v?-FeRu8T!e3;i$=g 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 z zP_i&g4Aa;k9xhL~{_Q_hgG2jZA}+zy`=zK3D?|vLrT`Po z^Y>&_gnlV+CuFTPfuw6Vm$5AhX-N|fukVF9OUSzMbuWol7*(&v0M0WF6n8j%w?qUc zJ<$V&b!Ab2{l&jKb0$)rttj)u_MZkJ~x*rNh!!q7TQ$sX!*d0Q$xfla-`BYL_S9$jWr#)!As9DDn3(Y9y_@`%HG4Z78~QV4V_AT zzP%NG$1MH2Wx76=(T)O%sq_r+yaTnKbdaY`%b&#WF}QtpnEZ8#4If1K)a|QM@7HO>*@)o&&_}fLl;+xWF4KH}A zCG9lEJ_!?*MsvPSH4|gIAcz@zVcjn-&c@oFUF-J|XY>|t^ZMB$DDxmFz7e&2pd)F9 z_F}a(sZ{)|3pa#1uOz5saMqZ+m$9S_f?$x2E!Pa|d~9OJs1Er-ZdFZAssGt|FCJvh zbLZJFjZ@wJznGzb(h zw%`Zvd({~M%Cmx4n?oi3?M)YF=|+}y14Y}uZ+CE+a?(BmqiBN?eD7_8Fg{1%WU8v8 z&yj0O{!YQ7BMZMO5KCwYoWANu3EX1LvF6f7A@_f@VTkZ6HPMc|bV(#XV0;6yQ@UqA zpT%2H(7tZF*H8Wum+`}vsuT3H0-?pQ2kBMvfCgghCB?CyFKibq(di)qn3Q*x@@UhV zSQ7Ez85n##h$DXk$Jx|0SMfWBFxV#nlNH$4^n89gv2s2Tb?qNuuqWkzf4qN<| zZ9#>?xGWo|$H)rNMmlX|(|y>zdV$+QdWb9`zG~)A4Es4W%X#uoU{T>XBCojyI*q^4 z8K4##IKCsj!Z>>6#GjayU&7lDG1gv|l~WQbD`P43x5OdlVW2fzS#2blu^;FTf^ zl-l(%a{f>Xkt?TO+smuH*#p_{W!$$3sxqgqkp111C(L+PugCN(5^b?r{MDf z*Eq zN$#xbl|*;e9&TXrC|Uf-N1UPzf)|K_+>GCTeQii#h)eOA1TNZ9<7yk?+Y{NCR20W3 zS6VzV5DLgXgc5bWLKf-ArlPd!oKxXo{C@6& zl~})9DlRM40dzmk+JG^|Ee+p>NH&VQI`>Bxbcy|%hmil5 zGJqKjL*oV{AvP73itA z5sdcEu8;1lx>V@;$E0qE=C9#5v>`06n?W%pdGvjt^D6``-rlY}8j=Wwsi?)bup?^C zhR0%m*cQKD1lA$BNPfMi_BFpV`f2gp)j410&06e9$1IA(56uRbGO(v`E<>bljx5R1 zp0Aon`}`1P+N!`cF=nfwYK$FRZg-q`2(fzm`T7P2&(6ZfZ@sXm%!VVE)W@DZM4H|K za*!l(sSI&H8^qk%xoUEy&9R!C-CW1T&dDQo7yu%psSsxB39w zz1x_#F@>_i`hW`PY1k&r;G@H;o1Pi6K@&^Oisy^y{1Q*LbM}PGV*sB~uGfKxSG?94 z<<1EG?#P2t$`Lm0#D>u3%Bu%Koi`foJvnPcN{I|Gl{B zfd5`bwXp6%f*3a$xRQFIHpH*{2G=kvp6~cmaEE=Cs%m08dln+bfQ%}w#zRtS&C^jn z2cxjbA|VQK+Gv4!DU9El`R%k^)a2LoGjjKeZV0wj{7N#oCXl?%{K{oR8K0Dc^VhGt zUAEH*oZi(|ab{yu${{UgU1DT`>GkWE4P&XAM^Xb-XJDZ2zI^3k^sU4*b2Nur)tfCt zmHx!M{;dRJR3XkthdxAE>TbgwR?Lm(y8-L4w#;y?0Ga?sG*7+=5kebcH(_>VFHD2% z#usT!Wy%!{b>dS7>?#m%H$S2@*`^MVZ5lUQa_Tkdas}y^wgEf7Z5y_LC$6;_oDd>7 zGAiHS;-c5~;|ls!rf3gHB2%<5IYC?jds-0hXqPR`6qVcsP~^iTu|ipyp)NU6Gw9+? z#az=?f9yV>Z1Ox00)?!2GIuZ7Mik^$l_6YvHxWWFL_I`J^h>eG*Setma3K-lTC9LA zs8!`Pe(11Rz8SAcVn&G2gNQvYE%?`Ur!BN zjV&!ln17Zeu<-tpc(JIFt!M({YDqa_IxvIdo6@)&mnCuEAJtn4lvI|!8y9-n*&jK$ zY?MG=*aJorQ>&0+_Xw<5WD}o_gC&ettBNtnMCeNihbCq10g4`r zLO3hexzV|g+_RU|M>dKcRYxdcrqvPLm#cn&g%BA1Bk@o&@W9RYPt<1IjWVoD?0tU= zRQ?ykq6}K|VLT;?*7&2Y6`8}V8H zlyH2zLXNmnQpQuJ4Qkcqn@v9pw(ZkZwZ1~RVpbsd1>1HbnXODU7Gi!Asdcr><2NS6 z_4tnUFKHfo{%7a>mM|D2aSG?o4~AD zcphZQJK_qKFARB_2^g&|ME`Ps-;luI?kO94wNhE*!i-ksbV=$xYqHI~Z~Pq}_1Np6 z(+AhiHmi7sW~ZJ^Jx=m9^^H=?wo9L?mbxUUysc|#!b#N0TWm0YXmlSY3!tyJ9k%FP z8I?@P4SH2BMetpZ?2$WcP}om?8J1?7V7xH1PL0d0X0I9L_&1+et2u8vWvCQrd#&r1 z(zBy8-VOUzrbV9H51+3!Fg5rzd^D%72GVo0Y!hbts2Zp@_iE-3s)fcLd%NhXR;#;u z;d`#v0NJQ+t_pF44Ym`@&lIrLZcPf<&TknL!KiDka#7NQ68406^$dpRZMR@w>CX}# z1AKFipr*|<GV%UrA9 z%<o$=ch&xyRq3=zybzuIHUj%gM}XHfQS8u=r%)nL%HsPKr%nG6R4XAsOYhbNCe zj2Z`h;q#(!5j3G`7n;zb#A}@KE>Tiq;vy~S!l0liX^0x-`fNL4v0rc>X~?tGhQlcV ze0hH|_u#S)!58UVxUL%NF`&HSmbIPvYRk!=+NW8)_?ix z<)fPJV^Xt1>lqY!Tn$%+q3)(PE4X|$&}Zz}YXLF)692V~teH;~9j%WAUlIL&`4j3s zQ`d^NttRAAxX;X^PA!7FGu)4{;BG>Bz>Q@oE{T32q#l6ErB@vmYaTpRXZ zox3+c{-#C`MjhJaIzaxur9}Z3p7q6EZ+v)SD>i&uDxPe$k7ttFzVbMu%+zA63i0YF zzwBjhAt-(>-K}`;qkR>Bobk5VCyikSjDyQP`zi8wsfJ@}$H%j+Se}QRdR&I=+HQ{2 zL|%k*ACDEEL49aS_$4SBp40V4`WkZui8cLsM2(}8&)dRlXT&!K23Y&ubT;9^vs}yF zM9XrkFthvw5-V$LnnnJa0T(NG?V2lH^P0wMeU>`Cd80AsJcv8yP|-uYkvNilZ3b(UwH zxOY?thj%oY0<1~iePsx1N}9L+89Udx>w;f;V7e}El6bU>7b}aDO#J3%5hFWs=R zX4THH_`bwVH@HF+LRh4amV`kOMrm~vs4Expp*QDj-x`8V3^_LrjC%AjD?+a z>)az$UAH#K#g_$ep&kp5Pz_W~caYUJ$8mg(q9yQRZ`L0nH5->C2x8y*w_sieMIdE< z#&Ue?3M2?RGV0jhxUPF?Tbi&f)%p>yR{GC+n&e3I*Cnjx33`_!l(}kseA%C&xD0qN z%82_T^JIY83#Ih1pV@6^6Lbdc6}Y#fFw4t1)y4KMW-S}h`fVL&9TFVixTHWeik#zv z$MnA?;~7SNrsveWHr=FtvhY_Wi3z{ZCJ}L60@%=*xkt#@zKEToq-hZ;7w@n2^X~#N zw#qYvL`2}HlVDFfE%otW!|3{ziz_O(8#eD0rJwqF<#MzD6W3PZBQpSDX`9FTTKl-< zy7z*UtM0LT*JqyJ=r6UX3rr16{@bVTPK$=z)H{)~q)1Zp_n9k~31+JCktF5m)r_(O z{YxnaW9PHgA+<6p^-yeuVf3u?poXG_!IwB!7w>BV+7SY}0@~Bf(YkG{o+qt4wZ%_Q z1F+E&63r&7Nu#Z8vBiXzi-?{J&=7%nZ)No7Gx3z8H!aulFT9eT719Pf;IY-Sa#OpQ z$&sX&NlVp&HCAKKZ4;Di_A}I#R90Uc!)LB*>UiF%OAWku-3WqqFe3I@8eQc|t1u_A z)x{YN!^#(85lv)c`vU$anAhoI6)4kx6g;M!jy%Kcf?3r>-Z^H^{UBJn#xS}oMJ?5y0qdsTBu9hMDP(kymW<6JM@w`4&9uak4Z<16BRPA|u| zWL|+_;;@Rwbl&v&idd-@!5!~cz_ZT#oJQ#Jtc}gcB|s6!97wDhIgbCb2`FAw^k_ov z++O-0Pd!c}T!$(EK|ntsxCjV}M5zCQ)AlYuMlJd);7zpQ_Ld(Hcni}26O1(AN)}Ep zpo;(-W1cR50SW}MSk7Z))}jb@&lFq@Xd*g-#ypWO<{2|U9+d-%S0U){ zVz~%5>-p?sq^4)ze*oSrh$sN0t{K!TnhxN-fT}_S)SDx-t8nk%dv~C#SYGKe5!~W3 z_80WF5Ymh_S&=`*ixbF`%*}?f#`92z06^6+6bKwuO&0Z;1YlMD03BQ`e}?o9^VIZ3 zX+=zHJ+;oWDMutPetiZ4mx&l-kUK7UPtmNBxn~f`Kd3_JXz@{QKlz#lmBjjd5n@-R zLRzwFGJCUq*6)I{`&}2O{(FTBzBl?3A*Z}I`f{BDRVgam!NW;Ddtb1Eg+O<`hm*{S zJZ~qN><0sq%E!+LG?9NnBPZ6rzp)_|9lOANin(;~WM+@Iz4&5L%#ymZNrN$at-r2o z=?uar$)`VR(RXew3heTjbUD&^4K>H#+vv>l0w!Ic0&OLhti8f7rE!X%YHkr6pQ@CQSaq)+p|n~pr}aW08@ndE0m~MaMOR$9MTieLo0~+Y_@ZWaeU$#KZ^mb}%q5bY z*!{&MVz5uHRp{^r%*Ylxn6|}40K5bdlH`Q2I%U8z|Cj-D@f@(Xw_Z+r)f*y9-HwSK z<-O-Bj{)-4*2Oaj3%F2BXD#O+uPIuD+g{AB*7;GX*X{=_n!dy>#H8yvB;*VZdugpC ze!P{W^f$ZBX12psQoO+HVn7wX0r-<|Kq4uLo&sLSHLw>6IWMq_ac^e#z%KX26x;&z6;4xY z{tU0>hd&g`<|Tboa>_CdNh7gl4_qgN3a7*987zi_CN{nYFrM{9-R<3&=-5?&Kk*vi z#dYDkBwQmn)mvm_=O2bH+-;_zTRrYX3re19a+c%!;z(Z&O)>9thPN zz~C(BxeaXHV0B7=0ESb;L0Fs)Q~&F4Q_gm<@Dj_ob{gSc-b$zGC$xe9;VP^SJ!yS> zHsAoU!=kxN+IcbryB3`Sn6kr_Jc_mDp5D=&fvB1@-{li>Sap zt=DQkn$*cVoVfD8+`OA|fYF^6EFZoZoaJ zF{4bP{d$YdY&;*1URnx+Wu;>DK+aXcbK`iO_Ut4B70fP+*9smM9(fRx2vOjg8f)rw z#=hcN9S`a{boEzEr7GANeEX=_W?-tdBXd;mDY(qE+8<+OXfL%cV^;U-2?uUG+ z?;S~%xMwiq;*HTsVo;A*M?@Srrh9Mc3a(p*e3gJReEcv7CVVD-z8^eZl#UBX~OBRlo(r8Q~ zR`dgKX(@+x*$+$_QlJ61ru>l=l2jmb>Qnxxie5nU1P~oJhUx-9gPRThc)x+_qyf=y z`rP0J>ft(o`RWN8-b6s_324KOsdQh}aB2MU{%uhApVJ_T1B&ke?rREQ?pAO7j%-O2 z!UEz1@;#|WDDDTvWvfAik($z>P&XAaD}>ue*A+ z^XP(?O}E)4JsljIapgWjdac>#fe(sh9{((Z!tnB+o`XM4v743xcbAmWuj_9`&3M(y z&o@)meBNFY@+k_opKp%l{;$R_rjpr zj@}sbH4R0pB1WuV0MaE@jgZ9%Sf z@-k+C=~vH8AGtoZCIFRpOgypd4V1;fgM9Q-0@)6HJhOU0JU~a32eRrvU;#-2AUU1E zLnq2ZhvGL#U_WR}flckZ>7lP+G#v_!Gx!BQgL^<~ zon>bC43(E|2b5HRT7hcK_6*!!u>eMhzvQ^3HYaBzt>=5keW)jv)a87pOeu$^$da;e zasz#o6jr(Ual>4Uir%ctP3>@PXI9O3B9n_N6ie55YA;4(0P23b_H;a}R}+y7+3 z$a)2a-0vGx;{?E58#_ge=mp0rokQSUS~D2gJ<r9U!j&tK;sO@EfkNaDqpOLmQ!N zI{4I>?E~A(eO|C~@|+~kGC_3)PBZkT1*aU(rlx!bULSmPYIqJc%FEt>@GP_O`^*`D zqYQ;1e;Zuz3Q@r2!7`p_tr(x=kZUwE1WJ$l_^9zn51)6Cd8}h3QbAiD8!ETFnm~Se zuUPQ;^H65BKYa7S?+1Xa5$y{l~H`GAEDO^RveNG{NTg#*bFpEZvUJ?IdiOC z7Cf~+*w25@xVy1u;n&qB_OlrN2h3!YMlNNNJN{*E(v_Lt&hv54t240#TMA9Y1Dy7L zTuOx86fq_kEDrXL<(<`CeBB`!=>S+aN*OHHSJ2fj}f;4@K2CCTv-D*Ia9SVgxt&)?2fM> zz{=|rneq+i!l1D3^#K*M_W-%5a2tuZv4nxI?hZm~6qlaF>%fuAB%%g=wtvMGfxFQXtW-rN3f&Z)I>#LU+3>YB z(`~CoCL(0dzf=>VRC8C)Fw~U^3LfJwC+$iYQE?PahPwMdK0Z1At=~OU&xec)JKP-x z!A@PW@(LX_!v%NvHjo`%^FEaqx;+@2!RvR^ zwGzk^SEK3$LJZutVw|71f-{fDJMd~hSV|ThDItU0*yX=OhplMRKgo2WJHqQK+{eKK z>Jf*iuW@)eqQf4X+ZTv1U8TW-PfBkO_T0K348P)IJlJUS7S{b>ps*)V;LMqO(jQeU za@CUM;-5hF5C%nUz5}oBnagm|!aeHW1iDQTSOGhX?ZOpU?ZE#20kI@U{eOPEv;btn z?;p>4kGGlqKYmz9!;-*W>NmxeZ3g#K-mX_OvK%1|>LzJ$66F0R!6ASHE&#lrNkjDi zWd7d({|guWDCChcZ}Ng?~%t5Z{BvV=;7+XWSJA^`8xQdjhoJhAZgERv&?TR5dt_dNgjeng8}7!S*jNXCTXamA?yiEllmL z7HV$G0~wOE>=WArNo{brOVf*x=bBtKf-y&99=Lg~wAb92?ZmTnr`Un!MwuedH5*pA zK7V(kXt$Ht&5@@Tua3RTw9Z{`VXgcu5k58TpYAWw<3ET2E8$^<3ERnsz3L4F+j+(~ z$)m)-p>EWD+v@%S;j(doh0Cr9vNJ^!>K5j^di)!{ImPFPwtS|ZcYxHuUUiFJtrGtW z(_!Eak+nVg7S{A}lhHYR76ZSyyjJ!uUngQlNXw^e_sFr=`XVn?w?C`^5stuNqWw8mCi!i5E zu908q-|K6p!%QI;P3P=yLGLJZV{BsVwz|NH^?NB z#~i?^RqDhGVT|FO{qALQ72ph7a0m!vE#)}CaZe^e>;$N~!B2o(+np$Ce^2cq?9eo2 zKrIgEITUD|GbcD2VCpPcJO7GkqRD}$tM9pMJcvYb2R~&fWdk&?ptuCu2(Wm^z)*mV z1P@l$PVtB-+RxS4DPMtGRA>OtL)9$bp$hR<$ypQewudT=HsqQ5@iKg!oMHOg!~@ti z9@x4gfbDJwLQ3VX1R*obpcfhb;6FeqD#F2{7qEzr2+d|s;b zsxz1ZDSl68@b<2J$+6&ip9ut3OVujRMn0ec&Ki)Ycc~nMQi^l$7#WO^p&(Er`9R~@ zmJKA@M~OJChRTl;uwUNSAdFsVAe;aHmj4$qcvL{Ojzi~x3*fz! ztJ=^3kJM!gq2yRkz$cHb7QC*8Qu; z6RDbNF{hf?VKKXFez>uId`cW@KqO1G)laPXJbwzdvR)#mrY1jTxSL2XE#${h(!9=i zPTbXV)yi*@y!(zEUYp*LqQ+pRcZ_&1?5=@7dyIJ%!u>kDSr?)?K8xwYJ0oHoUr!>& zv0)ugJc8>K1@C?SAKLI3Z3y%J?2v!yG-aQz$3jwg) zoe@T}CrLsa-;8#6p4J6hR2{5N$*@{(k z{27D{;U9;2;{E}eR4qpra{%d%hL;5){;F}V)sB`3mMwjb{FrVNM`ykJhvb`S2zxR&o|ox9;3YY>7eP>L{H`nv-ue^A z|D0JnQ8!@kwf7>4_~`ByO#JFWf(g@d3p)J$TRPF23)bB`Ug(!2dXhon!~0?sEFZcE z1^V$=*g|T<7IOBibsRn3BOZo!u?grw^Z;E+>_-NE2O7$G_JQ+k;Tt+lgjw(iH9hZ- zV$XvMDrFU#(gQ-~Ov%k~dCdtldqNuQr75LgBQ(Lw=YrE}=FNXGWiW1a@5E*0=RHEQ zdjL#17R&@6ph1*v1yDZ5<%l*TaKeJqnKFd4ZSoeVkC5OYvjw9s3SAr{AN=hiOU@h~ zItE21p<<^q;OpnH1?|bu=Di?;Hyqlq6x7V~@4Yv?3G-uKUy$Iq9&xpaw)$2wo&6w) zH4`X-hV*NKC7RDAKIU>D1m4Dd+W{(y=|U(?ZYUhNTUA z-n{xUa?H8g%PvISzX4`rUzI+#4 zj!}FKJJB01FQf;Zqd=sZhMyuc-3VY|ofkUe4z?BjMmzQuY_}eB>;uJx`Tn#Q| z+j^!x<@isKEEwtwCz*$htH1vVY_RzrhI*s%+6J_m%>jnG>&jEx1c}MVwh0zBlbPPJ zb7e)KOwG5bL@0z9P7!;nc4K~|{y)0jJRa&VdKkyV#9%5hmMoEkGD3*4FBMrrmdaK{ z$(C*GTZmGGB!;nuY$5wH)=(Hr*6iEZ_jN44JN5lMujlzazuzBoU-y0Px#ymH-}Aor zo^#JR7pf29pG<^7S4_-*FJX)aM;JzX#z5SosMgvmOL5-c48%=Aw5TRXsm-HxoXkwv zo}%=WAZyvJZCn`C?gdc24v+4EoadAvN7;RN4w}n;6Ff>!0G#$AkU-1xz^(8tBzd4>!`e4ZO>L#R+n> zTqsNNAGX7VQLTI{0tALTc0e0Ma!^uL^WUTNFsK~+h@9>t_`RfPES)5u+XSEWPMiU1 z+_?%!CfmS@>=#gEJ207m)o5n7$IPN5AB}tF2445CK}NXbFmPQPKta)5J{C=o4zLu` z?Zq(C{TW8nule;X1I4ZThksak?u&xIN!gVi-L!vcV}6eHxLb)aIF?yI34)w%m3?+|JNn|-XzfdA}#6Y1_n)(AV2W(HF%zi(l&&L zNMH+-2kGDB0b;}e0n_QDMvOHbIK^z@KCmY%ped<;Dj0-#~{M zll|Ru7z}_H;K}^*%dlh#;?p@0vjr@GpEhgW(7&el{Yt zp0QbN{t>Vr&YsY!jh`|I`cqr`tsMale%4A;$Zymntw{Wk5V^E{L(+NrWUJw(^U|?C z3j5Wuh|~2(K%T;a$(Dko^K;^s!WAhm@2|iSf?k6ZJ%ez4bP1%TNAn2|3o=JH8xFl- zbig|7x}9qhe9QP`>z?G;9!nRPHH=vl)~SCxBR&^$cNtr^(I}PR(@M1Fg1Dd542~dM zwvS7|nO-9ktE32@-30mdm}@AmrxiiaX&&1N|00`$AgHoq2{>Hcz9#1IR2gMn5%XPZ zPw{5-L$LZ@t+|FW3m&S6Sb=yV1^I&D5#P@^#>9GtdJJfX-F#u-_+YFa!Ux1NLo`s? z(gR9ENuY)7q97{Nt%ufFQVfV7pr5U@2Lwr;;x(Yf#)Z-~KR0t2h&6FdOq=9@<21>{ zA^hHcg4{j(;Xg;W3xLO7zZc2mH-PHVO!)-V*!2ebD z8no1N4TUoRW4jN1h{oluf-3n{AY#*hNaJjP_cA;ahc<6v5Yz-PsT>MuW0tOoaXl{v zSIGbwQ$D5za3BGOTK^ds0FvCR`I`xte{wy%-L73^<*L6J?{)EpM7zn+oBGiKvB+y% zU#;fH`|a^hBbt=y*n=*X}3H@S6OBnFQF!zk2$RdBU@^_u1ka{P;X#aIwW{AvUZz~|D_vP@=0*KYx+1(O@iY^?Tz&u^b>K9zPw$8~c z{{`^bHrYHPCPEz3HA=K&c57OhvUmE#0j5RA*9n>Ju#;XwV%Ebk3s}0HvBs*A&_Udu=K-qNQ2JAsw9_ZI-x6@vFnE6x{4EW+ZU{n*BvtR-HozsSwZ}$qI zS{QGp0}k(zYkmx>@gq0Tg-p#5t<|r?OMx2OYx4Ro$^O?BP5LCG8r&y*Vi?xzep zYru~WkbEVB!iody^%gDQu=Y2mljd*(WVQf!aAsGA{5z9~+gbBtc>x?z+lNUwWN?%S zvny(?#cW_5_oUSR2c(k|h?7rtK@P4}lInj;w&5LBVl9w@(aITasI^ZqmgIls$+PoA z>++8sr2)LcRc!6G^Ro3g;*BT;YAy5J;5v?Hp{b>U#)@y>S0jh#0*&D-5z)c&6_*cwS$y*AJ^0;uShO!+T41EP_>1ylYZyCj&-ZY44tH1#iUONj@57+Hy2xEl zx(jipcwFS>&=6m~)&`rvus4vt5+T6U%It0QTxu;Mjjrucivt8 zyTj{#^i^Ozgc2=4*!=;qddR`5IPs~cPR~OEo121LvKH?jU`QByQ^W0|@BFX}Vrcor zst0Ue25gJd9+>q%w7yl6P5bW2lHh6uY}tqt1ck`>0`}A2*#W{~_UQwl1y$GUe|USx z8Yrv^Ujrjs!wz5YSI(J|aHeaFm2;t<`PNVl3>LSFI^=F1^L`cUe~|b`1vs((P3~=0 zzk#Qnv+Fl*;a_YQ=Tv4G3G(@pvAY@%k66s>&lK&6x0Nl>{IkvK-Rv`&H=HTjAr}L0 zVwoGu>$m3STG8Lfm>-YrZnL@sy8|zgk5>IQVrQd_^Si8ize(n%NETIrQ_jj#5KijX z29UVKBivIYzmZ_^B$zUQjkB%>*rj%GfoWys5rl3D+@%8+e${T9Uh3(j=h2g=Hng_y zI8y9?`J9GIUGa9?@ndKPO1(0?2iPxn{5ESzN3}dy(%J0zz69_Vv^~q| zP_yfnvkrj|-#~hwf^wj%)H@`BYS6Vk1qWr_Qwb%W27zeC6~AQM@HDS{dbSG!zN0As zY8jMV!|^PneoP(Y8)nS61pZ+>?V#{+j;06LM6ThAy1^$`D2py8#U(>M7K5^)Rcng@ z#=tHP0v|(<``|N#$#V!?Y^~+oO+2oM6gG{=&I=&@XaXgL%Am;? zr2lkg{sHhb;u7OhpFU0Z_Nb8uW%gtJG;o=_31nUaa8C^g@+AMUp} zrUd8@JSZIU0yyU2{vVvT+o$0JzLJU%SK)VfT;`D+Fz1th4~{;8KW{-GaK@zvi=0I$ zsB*RkIOEDqg63p?0|#EMY2Z|QPNp6rkoRs)UM`*>4Z;%2gTvI~)zfsZci5BtK{Vmh z@B|iro01H`mFqKrX7rY;<~`UWL>2;CS~I8VqJ4Q@uR4VT@iZ0C)O3CY)$0ar*^nHD zAHM{0aTZ6iKOf5nK(_`5dLv5e-v#jW3b-a$?aR`QdL>cWgLuQ>%=0wdFr6K2Pb4){ zknfp8qX<7Y(FkQI$D$%%5AYKLX1(@4a&)RmSFL(VwNU(|8N&gLY-2;~7Ko6-#aae4 z5Nml2%zwO80`1>&v1)@IlP?%lLnsG`IA-bsYuW@FrR6ZZU+pG4(2?9Q?x;Wl!Pdp} zFul`gx5@q(xN?rL)U{`b097CC{T6GusXU~=`u$li+4VG_Jq&9!+MQ{O3WMf-$=AcU z0C{fyhR4huRfs_!8`$#12?KftiIymb{QdBq=0X!3#BH?{{BfU^%#p$W7{Rgr59#*( zsaAYPS>S1ih@utsy1UuxYIP?9NcB*+W(e;n8~jl|F|VHx;|8NU^w0!Ks zxxmQhc|cgymH6tShP%MyxX%L2A2;m58M^0s)*%0V#7_uZ(sJF2Lf%pHVNo?KjuVet zjV=MYacxn)%cfUIhho1FXskX^4me~#045GvGx8A4dqjFM?H@H8{?MA6zIDfbm@Ej~ z%SpBO#@HtsQ4b48W_8UvEgU~i3rClB zfLKCUQ8DfO>l8k?B7m^emjwO<+g6}So^fcEx)rcjJpvA#2EM^mHPbIZ;qO-fW_R>I z1W8BtdJKs`g|cmB4J_(`k)F#03&&c`|B(5M2`t@#MV|A^h3D?ezmu%TzsJt@{(ee| z_VTsX-^qY$dQm6gDTVM=)I`=*Q;w|?{`{t8;&+{u{7~oYq3tD1pLto{(aMBfh^VEH^q$O*) zF9|*V{h{xqzXAL;Kzi!Je%xl0f2<72ulA7n@mU5`N6KNLW`EhL+~(szyS#|91SkCC z{{1FLp;RWG+l3MFB((g5B|u;WFY>Dz8sno<^vt_OR|GVkcSQFu*we zT&-DuMk6wFnSUK74J_}MhNAZiwT zF2n0H!OYr-9QY0h{KXtfJXZ_C>iui#FJ|vf^j^>t>ofnF;_3%&BEEnsO`r-l7l|p& zP*cfgXKEejNgNOX2Siz3A9Cr~y`U(-02@Oj6u83F?*Ek!)k{VPXVbEz<@$8;PP$QqM%P5eKTV%*H2=Y=^4t3Nrdxp?Ic3k zKW~rn=BUA8z!f}Wt?)~+{5?v?WPrOe0&q2*n~<5@<$!GWqjlJh9>BeqD(Ex80eEfM zs38p>fKRG|>hEkpVjM5%qtG$OSZh|h9%fob8uv*x5p#jFrD$qOWM1#Y6Y0~?ja|9Th zWuPz=6n0o0$Qjx9NE!c1+s%~`9-HuAqHXpzxr9;r{|gkv{(n^Z|Df|1wDkW^rwgWe zh)qQ#?2!*_E4+a^|M?-<8t8B0FbRcJV=G)zDi!$PR33GqoM-6h5B&4+Naw&6PfB<` z?eSz#BA$H+3oR}Rpsq&CxlcC2ab%|t{DS$UeaHmlt0>@jK-&yUqRmXM&;Z#AV2~pd z<+4Wm{UbjP@SgvNN7n0S;4%-X9tTut(MP>u6LndPbr9|;0E!hc#sb?jFNlYN<6~_| zz*7|hhV3uRv1-#SQqTwwj3T-uY%$TK%V6a6R#?ruZOwdZye9$- z@o%P)6on!|P{#w*A=J~1llL7&m=HX;(SF}$(-0-!Wz!J_eP6aH`VOK^a1WBYVTOyk z9^^LOYDlwOt$E6vZT{+lT#x{CfY|{s?;GoS_}>Hxxs8_^GC~2<4O7xOrR5ql4JcG3 z0t)>A;le_+$tNT7>!4CPsgfDMf9Rox{AC3OPMc92z%c+`vKehcX6mkn{G@*xUf}g* zE8rOj>m9wG&S*Gb7D;%B5z&--u*7 zqNN->RVZg{QMgVRTs#T1{5a!z9S3kPPJ8E-;tVkg|L*FqAFqS zN?l!0FqGNljnE%bM&{V2Yk+crR3U!r+&HTYXrNR&mQx=m+GDPuVUJJX0fn=l2|?fI z9JFWH@*O_lVQ+HUm62Bq#q^G-!cp?bt2trWE?e~} zFMU!FOzh|NbST4nRgpQmTBqPG<=Xcz6pJy$y+-r$(!{;SBCXK@>~}c03B7lxFOI5& zoN|AS<+MgCoBY#aoJ(Cyl3X(^eO>L`H<5Ys=#I-O(>?n$}*ueVvTx%Vn&O z3a3=O%xz-cP6$%bYy`|m>2I7-m=lT!Iqk6_i^92z17_aEpp@}8;GLRjM1`LIY^8|2 z`r;WtD}sT+wABC{P|?A|63=ifN!=GYyH3;j+QiTTMQRld=t!lD0Djz6!H{@JkP<%l z*)7>n&>%(t^a5NKZ63MK1wSiB8kGgTR;5#PVCH!977A)fka8rVr0JucdrE2kG z?jfcx1_VO^jpjhWTRbU;$-aY(SQnnBM4gK=!D{|aL#*At>*4=48ioF4cs1kxAprH(k0$4MSMZL{{r&XfzKRzX3i;{ z{b=>}llJ*;T9@|ub02%%7C!2)t+h=eH;lv>)sGgBdXcn*H;i|!j{+1VtV4XT2FHvH>w)Qx-HfK9&_T=$#(sBQ>+=1!w%IfjP=&I@Q zurKkX`fy+30dIY$J?tX+xaJJrM{c+lS8eOjeOsIx!IH6 zlhWG5v6HR-&7_m{lehMJ@RN0Jl#bzggyz{Ih38-oFCs-Y9O18 zc|;Bo4LoKKIu`Pt4Di7knM)NZ^r!WNQh#Q2OXTW7Vy>$w)Ow92F%np|5Tf%qs|H6LbmPT#J5n9s%Xee>5|zTfMwRxa5G zhs-_Xh; zB@xL=(HDmexU>$kT=-PjK`RY2M=wj}wmDkc%B(MBLILCdfHN4n?X*hK5Fo`q=(U&2C`T5RX;<>PqU+A z;gB;2h(Ek?a^P^0tyn?2SP5x8LP^EtJZ}6SW%OUlYgpepu&Xg&ffS zqi_;XX-x@$kW1&s1vs1G&ba%sZ#fA~M&##ctYhF)P$~RhF!sJIEdcM*L>T#f^dA$2tQO(TE|S1@5G;hJ zeBd$Bp{F6u?VqFulhh#q(VdB z3vW7B4s81>0|#y5{wt_EcVIB|xp%n1cpbQtkNk56m}?*$32SD!K!AaEs1GEEYoh&j zYPHY>E>qs%=CeVNSWJ3@tJLY>Z=L*}er~=gFWOab9!zSoe-Pj%5_%!DAF2$AHUn4m zsmAN$*Kp%?lyF*(NB>(!94>?&Un5(-6WC8$d`xZtJBlBWr!t#lBr&Ja+gd*!WZO#AcM8qt$C?d||p(-gwF#F?(S90ec=F28Go6##hvT^vkSBp8+5HrN~nz_4D%MX_lD20Ozu5} z&0o(<6AHUI=7Z2PvoRsH%y?i8qh%df@<<^#T8d|~Gc{#?U>77h&581YJ1M=oRRJsN z)xH$n!~Tr4tRs9J<^~_Ho|m>Xpb%shtFT{FW^9)jzw;zWjjUNP=UYQlGpn@V^BnEU z`f`4Zv2{*CQD-=#tA4Mcxs^&d;Sw}piptII* zF(%`x<@^)GVB0QC#2S%rO!wM8$~j}}efm(^#4+)rJuG7Xn`$D9t;f~sP6=myzdY%} zyNedno~U~(0#jX6#648$=9$KY*1gR=SYOMs^kt%c(|xqI`(-Q2mKKP6J$4yuYMr+C zSmixhAk=vw?O8aQ>(+xyb1sCqmqBlx=ii?^zQV_2EEWD0qyaw3k^X<^R4Yz}&v}US z@|wgQssxD>sFv~Yt;dx6r{H|ykwOZb_z&MaC|U<>^5u1QW|5aHH!u9@e$)b0EjV>F zO%oxXpU6VJwGbC6PiBOnHKX=;PRa84odJ55_Bym()arFP#M?zAfY*5}gi%tgv&u!V z^YBbki`c5Wz46y!w7u<5(J5GM6ywByi7^i0Q{GN{a{4pl1a+;{EzB5DVC^*{&xKBK zDim>RUM`5@Ymf_=y)?;I+kB@{!Y4B8?J)tTllb=dv`11SeSdh=Yn63Y6qoF2{7mcG zd+dZl2y_4r2!bHqZ)ykNr71x*?pSnkLtt_g6dtU}fzoysx_DMISnX6hO&43|^dIKZ zdzG&^-0u#>eLJ^KV!7;IWEvSbmp?Q>fUi5eSe+hB0A-iXp&ag{wL@Z+1E4~or{IsyQU3#iSfh-^qGWDh zd>Ia2eT>n^_v2bAWs;GE>9aUX1!=I}2b56xtXvJzcTg&#*wR#J^G)tItV?FRdOR6C z8@HzIrw^-8W-6I_QU==Ztsy2Az%&OD;+U-aNfH{+b)#ft zNb7Yo`8UuHZ9%UgTwXvTM2ex99rn+|H!d+4x-p$WZ zu&R8)?+uKV!{U%6-np0vt@}BtRFO-TV<-IYAfwe$c+=NV2SzsPG5}E!KYuFM30sSR zqn}RF;kqcVaiBaYC;fdCfUTF%I$55{q=FUYB)P9v6**aDl;b6KkeXkr?x=<-Umz=% zX1Uc({=cO*@1$k_Um#MkYIm)l>jQr@&bEQ)rVFtG#q2|F>uF6%=wqlXyrLVtOCRAQ z$E$_Uor|_>tPC?4xK+G(bHXE*of^?)drQ?(^RON3{?xL@S?D!SQU#l`KRh;<_Lo;x zz4528+XYWks=lm9+#7~0)1LMM7fAFn6r@B$)@A3o?QQWHjMFmV258k8?Mn^#8opzt z_76pSL{#W@Dr0rk>fup<3BJ5OtWmlYmDy4jMWl~*-Gg~StakAddh1u7T#>&DwXMo` zTKAuQfmW7W2*MAgf=Z z>|%U^S{C@dP=3+CX02cTrxn}?ZNw$d#CYsYccrl($DKSljp8YQo|O%IRIu5N%_(pz04 zqyF8b3o`N0mdw!!@^jg4iJ_mYSJ(XhCaJJ@?#q>FP_%*W^9OJfbj^Wl1 z5&f^fyI=w-;Lh|kDE!SUYw~kg9E1coPWTIbJ?nyjq_`W;`B|Iv-{kt-4@F%8%Pz#u zK55NwczAA>d{kW90Ib;5@Ul*@=B_v;t&y2lYN2tar_4o z2R`VP7R>(_9H2^%8}~z3tHCPaxmx26YO!;ifi8giO=8?apm3A}xFjP}8XS=HvU8w- zM@k(~mIFgk@ac1a=my{<=^xVCe;N6=B}g<#^4lRVQfhz`$Ph@xyCR-mq_{3J$GSzC zTU(nv!6M$>;v1NUzb}YWW&Myca9c^|JlnJB+SrBns!!bmIPhz4_ZlK-d5?uR#?-g( zC^pyAH3e@JHFxE-vC7M>vgxZtMu z2`Fp;mL9iqiqMl$AuHuXG6mlMm~GS#rmei~MQ{)}Rx7tbZ{Ap^c%z z7FPhAMJ@Vu^7Yv4jvA#W#T00+|L`7L-vt{ja7;x)0ab&~@jkZxm0nRY5l^a{Myd;N zL0uqUhJg2SNr@e>CI#Ny_!>?Eeu3k5n2wFaB^3n9aLuePkP^;>il8@D zzWn;cB>Owhv1eA_JAyr4V$1%;eLQ8wnom$3o~}Yc4&P}~_frt*+m$T6<;Q_%@F=7R z6d!f74l%*EKKV`IlUkcYM#Su`razaTtObmut@v*rhab<*O_1yC;ykRjobYR8ah_(? zzPIFTfD$X~tA~=RoN2a%1*rsl964^_5!xr6nuJuXbp`piVavOJP&gl}tRRCy< z5k1(~$vBigxG4vRM^yYp1|!|_2eNpS7!Ms-ed|Nd%3)S6faoO5sh97q66Ow3DEWoI z&p<{OF(}_32LF$-&~DSV4u+B>kAEhsyNT}vB;{Fay2VoAdLmHQpcRn4RV6=o9ctOwq>x}e49HUvS z=)p~}4$XL&RsYQufYt3E4h*pI4@Bw=%h3ff@Mg&tFbS-$j@GaPp;%;?7hhQMsvNCuml4LAF z2SO9Ed==>m?qDXUOlCcv#Kc1_j7=;??>r(jb)!OI)h$&~Wq4^22{{%K=k~$L{hO%P zOCjXB)k||59qo`pA*2W?`}kR+G)1eZ05NHNELMP(Lu@c>sn+%Wpzm^a;R&m_SJvc& zLM*23*v2&GsJ{lFH3SFxBulTlSts8959vZabH0NsshqoqV_8sSIc|+CbO+n2d1)xs zSS3Yf=>DZ4Q3-g&GkC?4a)!*1fyGd&w@QW#0|!?ZXfRaSv-s=n;#-wrucS(Iy)LGb zNx={NR`7gVel=KKjz_nz_;mz!Fj6paZozUp=V)rVCLYv{GkQ0?a$g$c8;-;KVJGU!zEeEr zqE#*HO~RSIQa_^po5jC2%akL>pMYn-W77pqvM?EIbb)uq8|Ks6OW=#^ry2KOWSJm0 z8CE%UN_cOPb&?##CN;=ujd{@&*?YF`lfOFq*|#iZ|7F8JWlM20i#lX+23&;19$aJ= z0ofGWRb%$Ew3H+)Z9h=qZ?r=Hx-6+^b@p>)1EvcRX0Mvl z>8ZI6kS@22b6P8UFFHPt&FJv2(VFvfQaqJrTkW8MvD9QeOUtzz*hk||#eJsT(ElKA ztq<8#elFLksZ|Uk$o*MD{)uMH9v%Kuezbq7Src=+D}>>xR&%$VS^WjBDz;C;50!k! zlGzV--4<=$TT|BFV8O1In$-~6%PA+Du2qq*i~P)4U4F*7_igMX*P5ck5i(@yZ2c#3 zP^I=%41?;vJ>}vVc(-TLN7u*rTKfm0_9N}qR+WXC+f0p2H!u>pg&nQc&th&Iu-QL& z@+8O;VQneX-Cgy}_y*@8ckb6G1>6dPU%VY4-)P+1kj+Zx7ts zoV{&xK=tZpYh1|GIx(ZwIvnd1v==_{`Y^F;mzXsYzD`y8#TEW><5l?BrZ>F~@xj^H zo>2+a%8|sOzBfBJT(b73FQf^%RD{}%e@PgsVJqY3Bf5DmsErwClv0_UiK!;XZe%z` zR$O19B7Umqlr_5UP5jDO7ufsA$7W1dbTG9OLjOI!z~3&h75T%BtfB;+K6}UONx$c3sHN-$ z8ShEpZ##C6KWmdGF0KA_y3wm~K7X23qcfo-9HQq5ak20dAL;n?VIha>8XGiBl<+4# z%PIOEIiIR;<@}{eeX=Wjk(q3nJe8NGbVQ6sR_Dq;v9wo`Uw&D&J|;)U#H2P zAW@*`bmg6M!?mRSRyIQ}9#;=o+T6%$k$T*I4U5`yRtU*rG~kYTX$1D{35j(_t)Uku?ek!j0i;=|%#N|0M<~rRu3V!282D2s`Rbe}- z1{Wu-SPbQu5Q94uopTa_B}6d znphAh#yg6CvPxB0PAXnz$|YNy4I$RP)g#4~FWvtHNs~ZRBXV4d>Sn=roYNQM7arU@#T5eo)9x`icYaO zC$b$jDY{K6=AWW_zi|nA&3LFdAg3DhbDt8c(PB-BDOo)OFYN1Ej|=D+?r((9J=O|m zbRK2QZi5|#n?xTWd(GS(`#$No=|tVn%=)a`8F7?>~JO- zY|sL?X?I7^LgF3S0`2{ji&H^uv3sW~KZtbAPh8;)U+NWos%K4+Wtho&Jy?zLx#Wv2 z@SSo8<^Ga=45e6Qa6W+gxgi8D=y%=3(RelmMk~MLe2}T-(0@mn+c+#2u>hyNqn8Q) zM9U^*u^KMmrzqqzA_e7lOsIIJczLAnRY>!)OV?VXW-i&+p9%Kz^}^`#h%8ru3>tR} z-vpuvr*hxC0z0Cl`$mI!<6?-;byY;Qr#V-|P9mr`t%t5rGs>|ba zMv=^&dp^k*SZ7eh0ae#JyZLlt&x&5NP(IT9G^lvo)soH#BKz%Mv4CL6Uj!{BVX~5@f?)Qx+R>6#t>#Vv}~uU$I1JI%tMQr1a@l_4$MN{_qUxZ?~C~j0jIl_>;2m z`7fpsG)HYEl6RbWw6wzScf7Hh6-vN`>BKUNeZ1;6e^*ZADpyU?J-b*B$;p_iRoX&o zsbyTA>8Y|6rr1b-mqM7)jmJV9wsCw?os88N6r6U?H}P9_4F=n=V2b#KGB_nI=P)ec zMR|-CHC?v~_f%+<&qP&Mn0%$I*;SVKoh z)3Em1 zwiwrm=vqf}gxct%4-VM|?+kp1v!dl}#X0s}1Uk(jUM>r-Iau646OWPm5-}$7`jb6v zJio8(uxBlqc;4-37|We>PcY?1NCwOz)`x_al!cQ6I-*eP-}7?@9o&@-^bH$@mKe?W zbfVbAtW5d%p4im*UR*}4hQ=edR<{SYVTRt=?o$~3(U&!xEJT%WW|aJvQ^%WhEb30r z3|?;f*dW#fYs>e?=2#5sPM0cP{xh#CU{Q}4^jGBY%v+ZDp!86Wcz!y-U`g?1VU)+T zVzAg2)f{QTU&TgDJhG_znNE=PnTpYmuN}6pD(IfRZ>+qlHKM7qS!ul`=izS{+WMJ~ zV@3~k3d5Ig9lPN+8$1+l@RE~72_g1~JHT<~Sfi&VW4na@Quoa5oTFV)gR)vUb@5oI z@v3z2OLHR~zH`nC%?#4(YPm1ovAd^7Z%eE*1p1)m%6+0zZ*a5jhD3!)`10_WhOdMf z=s4jOSj3nptxh_!g;Sq`9m#j3$1@*U7v7t3*i9k-v-jnXA8L#trFD;Blxfutivqrp zwYV#L6z>vsOHJ(PbUF?KDHbpq#n&@kFIQ89jd-jJ)iqSo@t}%SMeV{w=v^R&!PA5{wzSh}*21aeulZ zV}149irnjKQM6X%rcLDxGkx007j4*IF+xO3{IHW2M_^$)Eu@O~Qkq<#!VG!LZz3xg zH7F}uQ|2nM$zJf7tG%iD492Q?&J{bxsT`4;yLcl_U;hWTNm94kw4NI9u5y#q_lEuN zUM1+bUkQrxd}D7vXcvcCzAV{=lh z9&^6GV4#OP6b8GCGbkoPdV0lG<3ui(6)|)9M!_r%g-GfL6@t6D=8h;sV~uYvSAXwB z_V>G+4jn@J`R0s zj+{-AtUPtnK9-*8xuQP!ZXU-2PS{7yL+-Ku??2roTGS7!?Vk+aW2_;!^*)2h&>v3J z_`IPOFp~7<-YQ1Z;6#=`GDdoww=K-KUzylEmfDP zr8%VR^f#neCLa&0uKV&W5uKyE>uRHyrE&r_+Z9S3@a`w`x`ObjT!NJV++AP>!I4tt z{1S>m(tmt|(-;-ipk*zxMk0OS|Lgi0F0uj}K30-7Z*&mBxJzYOl6#PBiZOm1jD6Lk@4QOaNbF7vEt?~Tjxv~3aM z=CPT--!!M#kO5!hMd5LiS9MV+bGuu3_d*B@2k-=9NGFz_!XeCrFc zi^^hdi|Q+*%Mre+^W{SZ9`?AApXRjh&t?Oh}4%caWk?z}^aXdtd06d~^Sqrc zn}FL4ug|{S*uDl^E8!u%RQc&{Mf|f(za@lo-uSQQSgh`2jNzR90hE5|zB>a?hl%E_ zXQ5z;0j^A{>Kk@5F4GGxm2}5w*uaH%ZM^+zL{F{ZXf&tKwJ!e14E_0^TS;y4AK6=OH)Kbm{Xhcb)8H z-Pfp}W3@{HI>hwC*^!F%bj1g|F@s{_&WOxvg;m7TX=0oI*qrX;Yf_s(rPHL1$eCKZ z^JeXaD|yd-Xqj>8vLraSoX=MH^9>S;(PRT>3?=rWXS;+F@8zSKcyf+@?AqS_`8c3V zNB*U8*zJH+sa=VTzMar?nt)ZQNO@$SVf*&}bn92f42zBMR3nq$f=_~~VJx?QrS;sW zIKGG9|E0C_?R;=>90SX0h@E{Rr?4QSjf%nvybU^-ih%=Db22w{Tr4wUyH9zLfVTYmn@$I3c<_ zOnUoQghxL^+V9o=4hdJ0kJ(fd$e&qCSH_>X-^#ex!$wThiSw+H=M&g^S?0`Bc4zUo zkVV>`4r6N3mX568=h{)vlwEECD@%cQk&d(TddhS!?I$O=bTcZVBW2^R74K@_nCuJZ znQ=`(`S>#nzSdAU>64vNe;++`oIC%kQ^LAB={WegBb7TpPokt=LvE-r_}FDFiML$4 zKfRcXjLf|`7;`aS=xb1*X5x0ZS!Zj5AEQA=qZ%k17n8x}1x?864!6i(3R^bxgw9G|G* z%nt_&U@W*AiznCpyuHOSpW9BBD7q@1_$tY6Dn<$Wjm(P+(VFcdRe!B+qO+Ac-+sw{ z9*{iz#rQH!@wfUmuKtW{;kDdHOl>U;;*1zbbsM-Ew)ve`gXN?uBmA_pfI*2FZQ9{Z zoP6qrdZqBR9B#XJQxl^=F8$ni52hzozPcL)HLm@%(THo{H&fX!Zif`}O1e|#WUie| zu-<yY~+gT3hfUpP^E^^tB8Gj)`HZCYUK7k zU1(1ZjKK(k&v za_v4WQyFG4Aj0Hf`GX-#*F=S=*;qd@lveqAP*Gv5DrwG4$0~y+^iB+m_g#fK2LGqb z&d+N)OSCV)JmFptY31vtJMSzz)im;HeseFH zBj>02iz$xe9k(bo#TOD`w=~ zMBfSGx6yZbx3TJ#Rhlo%+YTQIs`_E$TW>j4AZWPgmJ%7ArOD=Hm0`=`Yd}af;qqpB zY4`07Q7CQND5QhjCDTleX{tt0*6dH8;){`9nb#{t5SF$)7WQE?4JbzB4Mw zEu07&lK-X)l=EI==Oprl&yC`KUwiv1sqhiYn%yrefwxS%>I3yb6B8Z9f%Oh+F3(in zi!qMLj}0~5u^2D(x6`}J*h_fu0%;JGK102|>a3!VYklSs?EO;8SuI+n#;+=QEI~O{ zYo`mTqmgOIx^HE*qns>jJEFLAZTc+J_u-&2e_dX~yTAPoR7J*S6Cj8Ffs%zYp$S_J zRG4$Ht$M|v>g79Jl!9Jau*MJZs=K%Fj|u{Zz-+xJ!?v?lJjGqLu=)xpRhP@n7v?Y&H6@l>$_y4 z!0!o#pR#4in{l$Ce+&}ZnC>%3VM_H>8Sya1#I>VA1Dn-6`mNr(>Z4MrIE+w3y|w+9 zk15v0yGk>t)GFJhPQLe-hX!;znTtNa1}MJTwNJCyO5_w_H?NvL0LO(JoT$b4F9I0~ zoQCi9%Xo~|fZ$#}U;J9U&82E%BRq%8#_FSU@)S?&`>nS@?g;p23+`3j_t>!8Uyl8x z&pD6oeE%ws@=lRVaiA_H?{7`BdNR+_lN#qd3dL*$)a*|hd%R+FnJ4cc-#-0g#Rek7 z^@6qUN--G*g`#h2e#N-9OnKz(b341}@ufds`Q#A-5H+oWT;s~s>?Q@G&cxGSR{V><;Q51->KHeRu}Qda|05 zrAIzpc$7dh@7cp2BY2kfMgI7=t$-*S0|S2V(>8?^=H!_TFU@oN6YlHdC=B5&=RAnU zaY(6sb}tNellr4W$y7{qwiyi+L+se<#oqimjnP+K?8AmUIh)(iMKYFtT zUE^%SbN!(!a4&O@lUUvlR>}QiahD$Hs}-lSuEli8S(!NF-RVbj<6cp5C0X-VzUM5@ z)V=q9PVG%|LiT!0*U9#4Xn538O4OI}7nIldh2C4H-*q0`eRDwecu9pouG;H%PbPDq z0)I+xs@(Mvb>dkADVM@5+-F73D~d3#Mbc*MQIi~&Smnnk%(qj=oguL56{%GgdMkk4 ztdTdM!)cBvF7z@pZ0Ks5fbKn-8+#@Z2xW1_T}SYr%$9XDhb9hDJ}*1}oACgL_#MDF z?x<~b!8s9j=22jWx4!1bg>Tvme<-u-<+HA0`4L`Gtb?5@RpYA>ovRe#8<71F8l&mSr_1QPAU^A$C$&76WV)A&4rtMd zvztUei5a|1?`nA8ROX6R%pGo<;|YZWu_!|iOOY0j?QlaQo7$w(QVZh;N2fRWU2H6~ zn?FBL7&6ox@jS|`sS}5H*P8zNl>MvSaJ5%r78xL`9ryXVr)#8Mh6QucTLE2>%lf{S z0>MwV?`J%|s*8D^E-^M=mUq|sbx{YBo3rJWfyZvY1az0^#VvI$!vWe}KA*sr(il?o zGk+=2KoC2Z61u1->5_YehXtlyq+`!ivlb`VVp{mo#K_XMZfH(mJ2XyHiV+d}+)<#1 zX3}+@O-Iya+2*C&&B44dg_g>U;9_- z^AspuTGpEdN4RV(#PS2~toFv~tqmEt==&jV?>^vdvsd2_QfqYg_tjZPU_K9pF|Kef zpA*-!q%?!zl^=JzU{)l?CljETOoWq1nX5nytJje_#X40xC+d6yp$ zQ3DrySAgCl9IZ%cYqr9eb{J>sET}I}IdwO_EP%gujVNFZiMry=Sb>XSJj3{E_fBt3 zz}kwjmfx!sgUohZB4|mcR@mQg48rBMb zpGOMPrl$Kint}=fcQ!T_xds=so`GGe5peeBBaR9hPG4l$K3;W-`t=O(LARcEt_y$u zt$-LgMhs6u>lIBSUM4#DC4f%Ys&7)y93uQPEugX*x12w2NBp|m1C-N+?(%e04CaCa zvWp5P1XLW?w%)AY!#lsq+AcVx$|j44#@a0f zZ+dw@lU*P$wRZ_Wl+Kz88iA9m2|90YliyguCopE%)+7BrJ9NM4`T%RTf*xSEc7e#% z)Dw`i>DpDQ#xC(BrGI$7Ln~O4IQb1i6Of(&Ex>eFzzPWM`->x0umX%~kqR=nlhLRk zgFBr%6)XY&=HPM#V1fH5pQVB>;7ow1Ac4=R6{*uUQSU1_-HV=}pnp$fXsmkDS=*73 zU<-tUtX%+Iz`(t&pbI!YbNBvN)LmKLw% zFM#Y_K^Ji5^#qNtj7&VKO9QQ}f;QmPrPqxvz}-64N2?Vf6RYCN_1slnJTo~KCcjj0 zx6Sm8O)JQgcoONlweRWWIhe!s6gr7^@sYfcb_NX~#Jc_h`QWUGEDqfx6)XT-8B-0q z@b~O9+5T7ODkYNR301HI)?@n|&{g(g51fNtG0~}wT_;ObVHw4#Cp{U=XQ*HXEKu$$ z(=@~L<@>OiUiI=+s(|g(8ii+~ea8#y$cs~bu~@21%d|tkK%@&a%SylOB)?s$B3^gj zyO8(XI&%EnIGOs!JeiN=1?U2+BM-<+VVzZ>3os3#p7aVa@2Q^3TPxF5iFx~$IApS! z;~8{nXS#*z3BrnH{Xqp?VB$Xpol=_2NhLevmrn8$&!iVFFret930j_Pg-*H7bd!2f zhjt;AFS}I{d8o?tDI&W{?Hqu439c2HYQyVj{t*X-=G=ZSgCVH}7IcT0q ze@}fAGqHotyF%4iy}(DBzE?np6S$~BWA~+%UN2(l->3$tpx`_CqzY=ijl_(rV9-0gdzHTUxj6eE%1@%f z_1ZBS*+^i*uZxogy6qzOR_P-0C9ZZ(T6Paq5c?LhaV!1qUbHJ|tu3akRj|nCp5It6 z)!w1Iz!JBQP9pdH)jk@2Vdo^0&7;1gf^z8eFI4*C*VH-MK9;mIed%-RER%bqez_87 z^sa9pQe85(Ua8Ht#lF)M?g!^cJ>b+o*E^%ger)Z0t1g|BbQ4FukSI5G=){@ooptEz zOx(PnB{M7Ur&I>%zuwenkQuFXXs>H)=NnvX-Gw_V9AaPjMXi>kSSLeM>>3`#6a=7!Y8_1f93<%<90PQ-;b8REPDQ`lK>J z%s_yv*i!cT-h~d=kg81h3Lda#A`-HlvEHm_o~bfD%OtVL3ObSUN{6+9i&L3pwQgnm zD$}c0(=Vo_5+{?BMZY5`GZpDPXVzp@Pzj9ref37ukaD6TEDU~An(Ix6-#TsUE90Js?9TTRq-HL~iobvu_?O*+g&|UH0Hd7OZz> zlUDVFGmE5_%(*yKUqR<>q;t0xutcfM4?20^JC;_^ZRFO2o;!@5>B(C!SoHI6tY3s7#b!Gm&|MPTdN&Y|zd# z@{8zBdGm!Hj-?Dor4QZd=?gkf=A&mWNDyr2lJSGtu~6tzH}DUFPN~iv2s&*dI&Fi_ zT`EGUss-(9;(BJT9mL+CQ!~l#D`aU5iBy_&E9ZuI0lB+cK-C8wHR!YxpY1!BjHxb= zG^#q~Ut(h=wX?atf%t(rCz1F8)x<&P=Wo~Fr;M!PvGAF9B#X{@+s{a!8rV^_kYiy2 zT+n&nKa-P44+xU1(rIs|U8D+(3`wPreqFZjLY_c#ojhuBFEmY24o2UIzc8{!vlje? zqFtj_hZ!ZcsPBz96P@~2wv|S$lz()eQ=Z2;;9R6MT};!gMc843lSt+3NB5m7vR8jk z=l(~#D$M#FS0-a^*ftfPcb%KYAJExG=AF(8u=Zafmh`tT`dw)E=RPw@Ht5vmpx{@~4V;wlIe9+8;OueF5JE#*OUpPmyJ5`TV zg+fua??iRx{)XR*CLLGt19{Runf2ZR(^Y@9frX z#4Bu)FL;H!O0-sWM2qY6Y$>}}Rpp7*RmsJ#tl17arSzk7L=`9DnbMT~oDi z1s%j6owS9;vgtf|%oeC%$<1j$Ae!?P_} z1rl_ABdC=@8_)Pa=eanDt%GI~wCuzN-WfeuLFX?h4h-Ij(c=|#O5vVW<3Y0mxZJSz zl?ewQB|IF5P9B$i8ym56X^y6eFL+^19h5|Q8#P%vi7g{xi_W?bP^qoEu>vCDi(DIc zDb}_`YV>G#&H)H2P9pKU4jMm>wUcz`WVg>2Bt!zB!e`heL)KU2`j1L{?S&Tm|t ztOuFch~_=Q$>laapiZco02G>dBGGvp_q4S7fZ*8K$0s8W_CdQoS@AFx;doL4xs!K( zZr#>=<_F94WmlfGOeg&@K_^eIwRu3r1DNwcr_?0VQ6KtHm}Oo;t+7QM=|Mu#MN~nt zu|wa7ydgUjCRfVXCOp-6g_D6^c(Ojgs7I_qkpbr9Mx#_{G{k?a4~Ij{ndz3G^#U`-p7 zzp7Aalo_W^aeZ_bh*;8HT*>B`i3e1rD+2Q1-T#STJj_!uog8{^=u@u`xi{)dD}71! zoxAk=Jg8Q;{+=py$69}xuJWMi-t6@Eu`Sh?e1Ia;FBMT#%7%HL=YVKV6{^fjB>+&jE3T`et>Je`6`EfZOzm64`){hE!9Qm*{0_^=;Q%-7*&WZge=v(D=rPl_c%Q`rzLU3VzO9jEjRm1sGF?kAa zJzS(byQ(*Mu_)xFf$0*v!ZT3g-KdOv={f-iCFoqyIYp<3ovugsm{cols^2EM6< zz3CJAul=F(7g{25R3^z!`I)b9_lX~XuM!Rr=L*z{rjDx0#LuPZ-Me$=d;@pG@od@e z`OReiK9BCBR4eUGSB+N(;q6t;cD#}@kWQJ}vtuI8@&%m|M|z{v@2pH$CzrE+$6T!IUg|b%M@kVg^Of#y4KP z|J#+&Owb_l&}kPm5^qbSq3&S)f@V^2`@oC|i2@Js`zpIIz~NLxb5J>d>WQeFXGUTL z(PdqIuYk^YIwFHkuD#-FR?0hiy^hQZ`GKW6$ofbRfao&moCrE47PD-F&b#vN`h!7L z2A%go=NhRq3Oc#S)T=5?m($Z@86bBl8wetcQl3aw;}eGbS}gRB*Fo&)uC2){%f5zKitRYc(%nY1(YsB7q4 z;WsYs#vh~(#ZZK-p&Cn&HB7OviDptnbCO5aNt_^iDl0UZX-Ai86^;hTJykduV^_{k zbr)kRPrNSXZ3TVu3^%mCA+5Ao6ro5SP4&HCy-#wuFS>Fvg}43TLBX;_7fz!6W9b`z zJenZ#RB$lXcjnyh^HhN=Dm-<2IhhlyjTu;V(#O(vj%DWkwhuCGQj^K7N~(0LageV)n} zI&~|(UG6*2L~r-P;;i_4rb_ooG{1`{XzRF!xdO7jicqjyVY#xRjU~uQMk0OjyjcMf ziHR^3gx&=@NuA^eJ~~-M|8H_E^nMs~e=8ZY#cbosjH9J46e{X%?C3rbZKLnG;^*7` zMC!D)&o-4Z&DjM<#v!$dvD+!0kwrcvACOpmXFMmKDV_CI_$DB<*QseK+9l;1a!yy6 zLcecx(C&lIlL-!c1)apE-pAHHggIYL_^8|#BU)duG>z!|&3!gd*?1*y+=dpOuJ0>(k zp;%UCc$5KYd*YE`N0)Ej^S%K=-xxYpw z41KFX%ai37nj})nL<2iW9*Gedf3&N+chI5J`=2KJz=UhZSv72+kGMviD(D13CzmIY zZ6m{3@koq1clCf6u{Kr48IkmRM>Ls969+B|U?{G+93cD@0N1<%9>btuA=nL7Ka)%`}MBHiPzv4X|95aN3kiplGl=$D|=e(+rt21?9S{=o6~7rwHmmo-7F3p#mr zQ#I~bZJ<{Kow~N;F9>5sd1%kOsjw#}5R}Ht3WX>QD3?&F|2;?;|HnS0`GJ6<a1A2aPK1KV;z8%#pxQg=ln)no!PBmErnOh$-Y|cmx-cK~c_J8p>eiij z-$eU5^~jrR_=z2l0~{PXsE~AO_b0d2Rdb<}hmCb;mx=DRT`}!Uu~FREGum%pKvX6U zJ6gOt^~XllIJ+~!!>VA+IN0*lk$B7pu0%#cw@N00GUKw+m`xQH20S5VqM8gx=3Ufa zfb<@ACcmf(3OrS2**LPcGBsu0JJ$vx_W}d7f}6OeR)n9&vsI9q?50wd$<#}cEG7WB z;*pMgQ5M-jsj}U1?L-{G*RNo}crnpwQOK5F%#f($otNgbpYuMRp-9ut3p9;`TJ;zE8XUnxWvWq}tq(S?j%$b+?I;-Wg3`AT(x zs6e*2E^=#KD*)+t(rqln7M+{LZDyKk&?$xKgQ`Msv7KXC#Q!&!R27CzB#f7dOk7ln zDXt76i(Q_1fBOEl;falu1NKX@e1B}u080yE!chSBZ-rms(rx8d(v+V zy0D_c`*|B{-kqR-JX|3C2A$vERGZhpc=56SBJV<3`o-TfI+MbKmZo6^#G$DgX`fwD z^+K~E*ZYeV46Q&@DkfZ1xA1@m#GQS>MP^Ej)C)l;*AM*yy}a1Q4aAn%city^_~MY{i4iDwwti1~v=UGK3MQ8!W zH)hnvO*{d$&a=0#eW(^-K6C>w#gRab*%gb-M*9fARl2c#)X&s;W+Vpq+f4{6SldCT z9yl`B*1$_~)7dBL!@Y0R=!F9dPja`HDZdb}JUKu!25+k! zM1h+!p7Bb`DBUKoL1G03I?w)_R#?#aj4OLM8rUE9h)27o8y*tjz(;Sw2KnrBa8Sif zS6I;bi*(jCutA)OQ4OpQ|71;8JHU**3?6CTlXyxFhFR!A=Seqp+O~t+I5=rwd4%oE zGjHq;y`LxV%os{L(n`0P`lNxx;neUnrfoSj!HrtbWvYN^)Z8q5(s`iy`!KM|0 zR#wwzY9MbI5s(J*hTY;}%0fe1H!7v935}#NEz^(58nMRlmD_=~uHv#uu3N4keeA`p zZijmR2Iq=On-iINFz>ni*@ZlT{t=gm2hg|P!0vEt-3AI#=zDlTU(1t!*Ff@E_}W3| zik{T+4crZ@@*Cq7*#~*jK+0I3E|(&z0t z!Aqkrt%00jx1JGsacc$G|8!&roh!y44LU6xqJizC9^qA%Ctksl)IQOhPsK{mdA6DG z&`z>KE9(y$$Q)tR7vBG^U@}pn35jEI*G{bc=6eO)XL@$q3Fa#it9A-$2klHQ#m0gM zQ@g+~rW~2zum+v-#l@q%oqnqxsexOu$dxuwCnl(d4U`FYv@Lje(-RLR=zO1Cd!r}N zzy@hl+%FJu9%=8Fjs?P6LYv&!2A3Jr7LgU-A2WCcXf+}3>7p!56C((NLa z_OMHrqW}9OUf|TYz5(C(MZaI@O0qsdH|X32VMdT03OeNj)g$c!pIImU%D!21)nGKC zMv!+7`s5QAG`pf_s=6C#A6#IMQqS0~Chf};o=&7jLRe=(Gu1+F2*@rpuHGl0l~wr7tz;lps_{wwvnVcd`p9GeZjV3)Cx~`n=}9 zVZq$k6T1o|UP-PpJ1XeBJqzu86JG?arh!&sEh{90PAN`>Y|!Wdq5*eBGvTq^;I*FH zPP~<+#dp5R(mq-d{Y`YIw_7Op8PRO_t~22mnE%+2$~RJ)j*Os_M^$}o@k(-q3aEA? zW$9lDIwjWBE`Wd1@fYrt!V`4#M*aFa_4ldajCt`5e3ZE{rrS*fQZbYptRM1^?H0C= z_L2UinK9J{K8m0E1+c}cct|_}{H%t)vE512m^I_n6F0JQ3w*4$@lmjO=xer$jYNG( zoGi`>NM5p3!9Q8(kH$ohX=|@Q5lQrb@KER)ZQ!6Sx`G;bDE=h2aL^9T6M$;3ctjCq zJ+?MzCUb84pb#IV4=rfUE;16llSw^m(7$hTGM+)F%%npi=;RT(w|%9-j~-_ z$bsUa2Avkmi!LmZiQEP7QsVuz*2^U+ohP@D;ZPi^qz^U6em|xDB@BoLqKe@!HX*7I zGY>kSndomT=>yqkzysoqreB~B{t*v|H&Q7VH1@`}PzwD=pcw}(O~t;^InV6Dp!0T8 zF&%WCZ7?7jcqxmT|De&8COS|0o?RHPAlH!~g^cIH*)Le0Qzwh5+uxe&-{+~MyNrDX zv5Ck<(0P}}rWfx^B9*i>C-tZeJe06uMCWa~wW5?@>mBd_JCn#p&P(^iBzuN4uqDMF=boRGy#`k-^4nPL<)9*WKh zmg#g>KqY+BNlS@l@}&#?lb3dheyC^L%2ao(DtVAv*-R1$1XgNrTBSp(;IUNtp`<%2 zRb~hBM93cWvo(-C)>pse3aTpSv1uwDlHh6wowv2Y<%$G5v*){kykU*_0!SOC7;Q~? z;WxUof}hm)IjH!FvbHNR*0ERtmGMm7ZNkMM-`Ip}0cK>-`HRHVTje%Coa{pe1qm2A3X5`v7EjQ#OE{n$fA% zs&1c7Hh1sb*7`<`5SN7wgaiT;BK*oc>rGx8{z9YAMHUSh5R2~f1_p#t58c3km|ZAU z4UC3GeL!ofh`hxNKkz#7UQK1Z}|SXK$bhETVYv1xNk@ z5~pFUKjd7&IWcnYt&v|~@_5jBd*wHR1u(n1NE-d@c54OHWK)~l8eJevhHUh+%x_)m z@AGutq61q~M+J9@xeP`ZO2doyOTB%qsp45DiF^SV!)^ESBbC8&u&c8RvXxzbpDT3j zBK3*Pd1z18_L%RCC!P1EEY72PWcK|bI|qVi(D}@jNY(@P2Ne_Tq4tJ8mZ0a`5VVtD5C@z!|>7~XKEYbF=N{rj59&ixd zf=<0Kc824{2O9e?xC?k)bd9^LICYJCcGd-*=V0mcL}{c~=mB3~#?%wz8YJ`7sA zz1*G;GVxWNI%oOak#Kkb1`JqY?ZrcR^?kX!Vc8mV^2l~H4|(q&V&AWN{Y0m1G-4@@ z__Kr1)WFa67tKb8oqe<-{EbN@jGS9&HbpR~q4mAbATELh8g%M5dUhH(Np=o)f!l_k z(LgPnE}mgiF=3`rmt?jz)4O~1ct%xy=^OJ*uf0n|w$H@LYA<=^8(j!;;{p}EQ3c?t zW9ejtP5q7W%I}w)uCJhpnV3EydtpIKYUc_%RiKlTM_2j+k)x?Aoh)F`c{i$Nk;E%# z7SmrO4_@}IKQt1gU-9ugdrIwPVS>5$nI0e%IZXIu{?s#v;W|= z?LKzyd&ft@XAU~g5p}CU|5hCK#y$tkGTpyO%tM}Qr|yJFVL|6E-B@WI`ElzPRW*vu z)ajFXxf`9TlXKT#bbO*qYoyaf5~*(lchL(vZRNgmXRHwUf(~ue?9GMu->D*hcU+mu z1^ehOs486FFlE!QLQTC&6wB7}sTT5r{&`c47qcr(GLk#CuI(@MJRwF`V8bt%bjUTV zc&9(5fseNiA{baAcI%v^{%~ejG-7lUH1x)#DBE4K3npmT+t zyD&D|X`aNvJePwg(4dM;8P!3Jrtir1z-Llqdh9B4(RtgLJREfDQcx^|P99cxIOuz$ zJE^Jn|3&+cTk!_j2P3mMCd~vEfGZ9>xX(~EHqxXbN|EWgby>jbCFXvNJcnp+l_*$+JyPVj=!V zE!9$W50y}JXjhcI!%n29+f^w;-NI58Iw#ar!$}RVnYs(x+;$<)3LAOa@*mTDe(9>zC?OjCzIcX(t+}*i7RL`u7Wy^AmKQMEapaLFGC7q7blx^h~E~ z7qC?2;~3eyjvYylcW|9u0KE(plSYrXD;IBDlfjcjLtSm>7mSKWM~YhG_MxdvsMXY& z(c?X*&H?C$%s_7Hz-AUv&?zsNG~DRGo>S9M;uS0ot+7i6a`wA!6VIrKB~cuttq+|8 zun6f!Y;+acqmv0@^u4Rb)zeL-Qlm=Pntl;W7LSAFY6@uyg-Cx)A#Txw7uHB@#W~U3Y;P ztD<}KfUid~j;hcn5f~ahf%fRGq%G`pp*80HS(SvMBD)G>y7>nQgLZbRL~nTDyB^_$ zM&@BFJ5`}fMGHFRh3~xMFf}je+~;bF#|r)^8s zv!ZD!FYI7GFo!SbiJD3iQDiAuVojDyrKYSlNO_ZAOt>GaZ*JVrPwQK2<>vY1d zmy@{A6JUL`g-27U4qWnB@Yd;rH84qoPI>ckG8a5Ogbft0BvEBPkpS7dff2Th+qNXNofYH>o*;NNG*sAF z>;l;UNwftr$F=PPb(u2tqAe!EOtN=NoiNm?EqOH9iNup*f$&Hb6nHRnrMfye)s^$PiLFfH1ne7WYr7oGwpclW$69`i}PioNlL{(Ly@d{^m@rns(fI{xI;&`8BuJq_pM3wR6);=m-G7ny`P8mxX0^CT%|*@ngP`-IQ6cessKJ<8 zF~~gV&Y+VAuKvb&MSh|Fg4;MaNub)d$*zzcJkooAKEe{~oCC1JUh$NOM%VWf(JN~h&)c@<01RI?9VQcZzM1HFdfh7 z26&juv<{s#Cd`h>T>!;`s*wl3!G>;Q>c}~CE>i2S$M;F3>I2{S!TWOR)SeHu`yZW5 z`dEE(7qG%^aT(kT?8!%ct!Kt9pW`E*BNOA5lwp1UMeb`&ZU^0Xzd`5Scrw=(bn@`# z{vX_KbmK!G>?ArIbn;|(+CE2GX%51B(25TX=sa0eG6enO?t0Q|dye$_)|D1((0NzL zGd%}Y=TuBR>U;hEJu684ZuFrBjg)5J4{$HQ%M7~kj90FJs&J-UJoL4OgUjd1KM;?6 zG{OE=O;)^;`wB)}(8)!Rm4Z(F&eWTrQ7`sLv+Zg}=Fvp^ZhIGm zVn2CC^t)+av8o>NDDQXZMtHzvAdp!ec(G1BL6^S)O}=vX`aTCC$b)3p|n6bM6X>+yy#qSJevf4!Th5;uU0G zO5>nYBGJG6sFRjRM9{hKvJW(&o++9SeXxs8s^=7n&0>YrY`^;?GI4&A@d`T6c1aEL zFoAydP3PHOnQMEPNbj<6PGQt*-GlKCT3uo6aZVLpSkwFEa=b=~F=h(Y|Oe^|^ z%v4NJCm!%M-9>{9*s`DLA!0S@Yk!z9zh3rT^W>3@LFc)8mHCcW*cZ;~MW+j>b3vE< z1hzC2=WLScs8qu${sdHXPt-lp(WpG(ME`UKT{^zsFrJRM4-C3^hr$&0W$LyS_^9IB_7rDOgn|!9C=D@e5-=jusw^pnA zRT-v;OK97;cP`Ei{ov^d#4m}wE^>PxUVo9<`~Hb?Us=am_v8d2m$%Jl8Y@j(^9*h{ zp9cmsrm%J09y{B^KUhcqKiK1L|7+R%H{(JJTFx-~iSFH&ktY+EB40@+?lSV7i%i=_ zQ?A?pzW;9ah0Q&bS|;5d7?fy@7d7g;&$Rl)=tt2TWfQZ#PunjTi5pH;jz^J&`nlom z_UOgk$lk`t|ITnIC0U{r6N)U*M_uo-$)G5o7A9sp7>wQab64N(v1;G;l}+@3Sl}XK z^V<_4S+-P!Nt@O6{5i2~6y2=%-5$NPS`#;WrHHp8BlB%}=Ha=#^!JN=$o@nb2lVip z^IxGx(c5^ijYOw$r>%AmZoS}2Kk7x@w(4da@O-J675S6je{+F)OkdNWsD?~@Uy)9q zSysg0zu$d7xC2XG1i|E zv)yf{bG;-V^2Ixr5QK>b6BjWRt5^lHd4yMlb9%Vr1r( zSs&i1ZeKIk9`+cCSL*VV-Ti`S-)`G0zu4I~8vEZbcaX>VK)&KvgQ1fu7PzR!{w@5{ zolbw7yYnvJnKEBVwxRgKlKSjFYu-MXs+R&oNp18i-*+2u+sWkiJ@I6Bb7@A27S+$c zKgP0%`L?Csd7jzt-Nn9bLkHi-_4zd}|R|@u~-2#4&ucj%V2uTVprg=c&!evlFSZUG^FIHdbW{ zf8UoU;8&_~Skw`3bk>SG;m?;S(Q>HRq~=^vIsBC=RZ=!`z1p6#K`)9o=^;~&hL)>gQKUb`xt z<;Y#zH(Ri0mGzAD%-*z_`jF}<

Ki)C;>k{=;oWk_Y#x5K!E;KG~V@&FxR31IsbS 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Б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⩔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%0DW;vFVoUm zV;~xBO@s(*`%lxBu)G{h+Z4}3?3At5Vh2*~; z?i#g@Qgw@b#t#b6*1d)1vdCM$4U0PLdnr5=9H|-$6X1OZLsjSg)Ym`Tr#8k%A_Wzf z6(EqjZ<;K1-?*@w#TmlH!t?rrvSGIMv@+73h2QTtZIQCbVoR`Y2kkobDm5)?BV2f> zP9Q!(b|;Tpp70(kU5SE|AU<7U57&JJJTyo5-?ajKf`Tcvi?KH2s`x^&C@A*mYF7d} zcPT8dz&#o<)^?lE4~Q3UD>w*W3IV%5AJ*DMn(p9OnAoIzhfs6 z`MXlP__0deSG8Rb@&Lvq%QV$?B$&?n5sxHA=K`Zvl-3mOo{3v~bm~D_Z|JKo)FNW>Ea{FdH-tpmPwke(|*dj6`H2W;|z ziBy4uv@F=(oP z)Kc9d>9*HigsjF(6NTpR!(bZkz5bNCXetVkyi(9sQ}Omr=LAi4&nTS}5%$8qt6j{0 zm9)3D;x7W6v0nx)N*k+6^%#kRiv`8$9FNz(%uV6pOV0q#3Cz+-n+Gm3gvkfNbgPfZ zVeh`jW_Qrk%<+A#6>mMzR6DJjMc?8E+9UjH0=QgF@^QEbUGHrsrT}RSnI3mIFYe|0 zKQ{Hb4o+o)9*Ill4DtNF#AU9?q)-m0|6WXgUtpWl4G`VF5MeSSyU1nyr#l)m+`JIE zN5-XhuX6PPl)n99-QnBf&sWX7B)2>M2kQ~UHk!0?FG5P))73f4G<1Bz#2h0>7ppW( z(=W9==29VP{a>R4U9DPr(L11PR~b;iqP+R5Q?t%XFVfa($yI`!6)%8#=Ppns_U)ft`jBX3#;-A7}+iMYOP z2s}@~13yt}k;93Q01fy-%2Bdpbp_&9>EWE8kmtFOt&}9A9+d`ZUe`JI`=TF$qM-Ar zTd-2LwXfhreu2oi72JR@>5tdRzf}q=!wu~(o2sfhizo|wGJp!TJ}cOZ7CK#}57@x1 z?szQW{lj~su>!NZn~x)xW(4?Tk^HFrTV*#Sez}fu4l3Z~i@}}U6zgu%L@wH&AQMem z&uR$YNe!KR3tlpDw1jyvpchMMR`wv*EZWorzt8Xi zcM^FntB^UBnZ*YUs2yrzF6OO=C5Gi|(YwMZ>7rq_5C)~o#;0h?3bVAHO@gc`Jo}3M;z)$+hRa5qwi{s~$wE9qU?_{$#y|1Yk{U9o zE@R%XZJ&3a-|soZ?VXg%n&qne8mpNpoQxH6ek0}>bSzwD_#W| zb2=h%O(DlGcfUSr(KFt}-I zpc_n^rDR;Sk_1bM+}Fz=q|Ql6WdElRh~IERdm;J9fXY;%nN!d0U>br_pntsg+VUeP zcz&d-IBA*Y3<<|sPuGORf)AkJegx$F81RC)yGw*|gQ6OEu)t x2g;ROkw>OhRnwbUDH*J@<^3CNKy$ix^ zp)Z>CQg53{F~ZE-Tj+O&660DU?!5du=N|bKri!>UC=wD0U>wYQqA|^S=k~PPs23xn zukq=(-%T!3y~H=G+Rn{})2~Q(O6giH;@v;D#z^?J{}QKj|HCuoHmn0gG{(EpQxEDp z;llzr{S2P0TJ6Oi!%`Kx3Vo&0q8I1Y_)A?lrwX&PtAwNF2z%CT8 za(PHof<`USwWTjQNy$8473siU=5j<^OS)SA52gFQzxIqQF8?4$8-GX zx>$UII#k8_=VXyPgwF*|xXG1^!SKr4UD?u>|BGKO1D?Wv&TSt7Xvv1hNX(awUj?A? z2Dk3v)`+OMhJ~$e|No!$e2i#?WM8U?{1PgI1vK2G-m2b)xS^>CLzNK#9$v9?mu6R< zr8PXJrM37wMOj=!T{D>3kC4Zmv5}TBET|q`1L`6A=lYi<5wHfPZg3Ev4`RF-LJbT%v5js?pEeV^E<-; zoW8eoA(@d$W7B~&w4f0n7uyqX;wm3?I0HI}ck~Z|=Ly}(>-69vY1=y~r@fCOpo=s; zB;=f4Zk9DWIcEzE4X_LC5SkiU0uqZB9k{HC9?a;w*Fhd~h>02Y9thJ-_xixIO9+~? z{5P=#VP|`P`h(;5;bsOzQ^f4<_j9qvmlWw7R;7CS+}qimI*hiKUR4vt0tz&c-Dv{f z@svErr5Lvr>Fej~m#;E;KHdp3g}_o;=PqK>2at9Q^tw*eq<<>xQc~!q^Z-8kFiEGQ zPT%7`Wj{F@if)fNusKm5f4b=lU4OdOd^>Brm(u3Qn2!$NT`6}c0(?zo?^3IV{F4Bu z{BSoT+V0(#&$N0(T?pLq`+%8J7cCHkRJ@!6qT*x8XWWVR;5q*)=gsL~cA-qvprHk? znk%PG31d8T?5c|L5vY5BVKwLmoKk=yU+|_kQ=i5yc#jUHIWdT{|{glO1@*o&m zp9?AksgmYRj*5bsOhLre%|Ob4uotia%M8l0`2jTs1d}+esQp$` z&69OHE87zSY+lc_59TQ}B+3wE`QuAQ7P1S;Exe9HH(ngH{^NbSt0ZRTz;<-|UPR}= z)`c|g9N9$9)&be7cK-N;cCp6xdW9X{eRN0>a)HK(sacDb6vTc8OL_$?Q&jPJY1sn! z&9*}FdaNnhy0uOPEps!7UYw`?lzYN;O4YwhT9yGn4Oh2la1RmhENXJjhi}A(3x7o#dk!!=CwFvw=znix9*4E&4$wVS0t@rVGU)z{>kb) zYV&6{KW*)gkB+w27iPVE53o$t)=74eNKfmi0ym;kHzYI2g)2&*rxO(@=9PRx_w3Dj zRF0d>jgwIGnCm&r}2G_}{86QwVHHH)4fc=S-`Pq>gb)rNwO1A84yp!{p-tbKw6^TM271Q1UC?;!vZr)Td>QBFOi?X52n=)oN&fn;crvQvXlYP8M+wG7=0742UBsVq@bCeSK* zm*=P%#5|Me+WCN zFW%0=%O3kMS2L_hG=Vnbr?kz*F(^n^-}y?5&gys^$vARZ54{A^m8JU)%Lv)9{dt&u zh?*5a(GT&Iu3eC&kcDNDKCw^>_{@`#EZo^bbNyi zzm;%l=%T5d5d%={UAG5|Db^K+Xs<}c5@d=r_LEj`3rNiJ0BYCrO%n$Y2 zR&iNA%3vw%B~~ZvAKu)C<&(HkQBwIvZ|JNY%9?t+v=GxAPTwu!Nr}YE?CN_wSH5pv>L!FWsW6F0sWY48EkbxeivlZ0uA79Rn~S z9$IzPwjD%UV;o|R;yeG+{pojR@ggWyoP-EY%j4q_S=*BMCJg40*ASP))7L#%K3Jq)2uv63p))%Gmx z%67B0s{f3FAuP`X{*8~tG3fA}|Hln4zd0R3?s_?J5D0SMOO7&p1L@%5WEn-jfKtrc zy+1y|z!*Fz{y(>ktU&!9`;3R~RV2f>?CQM!-v$Qk#di=|{#`~VvS<;{!l#X~p849l z9Gtk-<%T))e`_H)w(P&*?<+W67%#cDo6BcTz6QzHRlWCHl< zWNW}*KNb8n%3^ae9EhMwaeAU#7 z)-`|1y;A!o@LNgI*F~p}9vi})u4h_llhYFbr!oBa&VrRpB>Mvyd-XKOC3a>>3^pK1 z1-uI5N(kNRmDesnSW=ur=z~5(>d<@eN1TvX1a6jYwX#IkkY9|#*Tsk8;_Bdf#L~T@ z=F|2>7EK8VX7sW{mF|vmh^*$~P`0y&M)6+{4_Sn~F_0z<&Y6m1H?*P@sWsaE9+0M1 zZKouYa?e1{Q~FYJP55e;+=u7gu4yzxa`YZQ)X5*MA7RjXvLa8WUeu}Nr5js+Xc@&n z5L|aR&2rvtq zoTgpKo~6n&>f1ckdt04n8r5YBYHRUmYJu=$OAM@K05ignKi&&lgjb~^Z({faw=Xys zl8rHtMRQ>KZ3rieMhl@m$97pDOpbx*;I&&oOdtBa^Kj`C47?!n^*)tC-y(M{ z9c=^3<1;5C^SGx(R8uYedm&Br3WUK09Oh`LT-hYTWY~) z0p9F68a6)!b8tSrI5lZ80yA;LI*7V)NA~@VHq@Zkp(|LvU674K=MXWYvM=82u2kIui6F*d8+p(Zh9-+D2ciEBbe!A1y#%y! zd52o{s~_s0vLhl4$8Qoa*1hiHS%Gq)4x{+cO%d4eIG@fnR68<4liKz~7iZf6HfFc)>Ba<3rB`{s zzZes+C_}IBdc$s=bhHd&N3C^BV(2Fjcs4g|C!P$x>as|;!2s^$6CWuFLhI8FQv<=h z{|cER?jf*QdH_7_Q~5n3%&sq0_O5APY|ewC(_=+HxZ1F|YM)2^v(hG!3*G( z3J{dgwCCMQO;b%Xu5eiB^i7F=R~E1Ns6A{{5wT$bjk4)OZdmtH;P>35^7gPW<9{hLx%J7GHRxECX0IQ)uMBp$UUuI2!2?*wm($O(Cg zy}8JrHsw0~#IV(V2ukW|53#@lO7uRf>(he(7gk%xbIx|=YH@(h4wnkG!&2XTJ_wXKI+pwtm$447T&{THeI`VT`BohvktQ}8Ybc> z?+)a^yex283GYwCu;fH*D=w5E1heso3<0@mr23W ztCOvnEyNVB3vtX~UmJf57~+!US>O%JIf{bpf<_cJnH!MD1hx=gtu=u8?C;YFa;dha zD2`_sgCJu?4F1BbmjU(0DXGUhIt?2d=h&Gzrt)$xSl^c_36nWvfp+-fw^ZkBx1q^> zXW<_--xh+a&ircBVPF3^JX?{?t2Doo!Vgm>Gbyqp+8_>!f%t;71j)M#Vl$im)r>B8 z%D`%qE$GbnN;EF}B-iqT_7y_9$MM~EhHAJ{_DzI9gYe&(>Po2yST=f8|e;5B7 z7LVJh!2Eaf1(|?hzhu^>Vt*+$#4lqbpZ1nb-fGhBWE;9CF|t6*N)=AIksD&L=r91C#V7ii5gWq!3a?phvOw^8@$u)}Dt{@=$u8HHM;qCKGlNqG1VmGot~*DGoWd=iyI_1c4VlF&>ShoS$=&NwOlS zHK#orR)#PmSfLWnju>786F!!ek$U&fRkM(s8z68vQsnvfLEdZ@=A=k<%Y_df-=|d z7~UT}{^Np@ac>LiGhE%j*a82b;L?zp8>+EdDJG9Q?=*!Y(%?n+8zmz(g!|D8bkzx6>g|! zcTZ&nO83dkRIS+I$S=BMJhoW!hXwKwtvAisnN^n!LZ)PpkPw^EF9WVel+4E^`?-?Y z^UKrxkN^2^AO^db7NWRikHeGjWR`>b3!5g_${n|Mh6J$-vegOpskJ|AT)t)1WL0f< z<#oal{wm?Yvk%~(@;jf(vV*R#APTMZJ$H!dG4hRd^;ZPNnY0=r zNc0ehO{6OXH9wopFY;CY;$((_Dnw0*cGvlY0UH`Xa)}+|%u8v*S4JBn^ zW5RzgR}l&Z^bGp28p3(+_SN_wDn2pYMTT+G()T4jkQS~E<#JYCHIb)gG$~pj%0L~> zx@2?=ZX}{b6t)G5m6B`S56ge{opwV#Ok}{l4Jt=Pmc1y7feZc!{|pB__z@>aT#kkC zd#7e0s5&??TW7M=--8@z5!XEVI{s~~%JJm|GG&%4N}Wi|KxIr3Bta zkGoV>hSOzuIqFuZ-I?zgyVVdnm}nT~l<<6$=&MqQXWcfpXibxXTF|4McXf2#Oyge6 zR5}1YH!Hk^QFp0j-?!~_|HE5VTr$po7!`#dvz2Lr9P=wyGt{tBueQDOD}(DF|I9wl zlpqrs)r{Q`Uq@s&hy_*J-poU{Ss2fTPVKaS%wd@f)`r7W&GJ0pJcGyuR+-{$)AlV6 z25~ccSnbo%f~D4>Wp8Hob>MovmQLitr7ezuex^YAI3Jvh_!d-c=%FY;)y%mK`Bqb4 z(frD?E`>eOivuUNumHYzb94&{TIL@EbwhoB1O%v6`KE_)n5-ksbpyH^6}+!fno%yv zHIbp3h)sZdRY&wAD~)(mo=*;|;;~0qh^WXx^=1504NiaaH+lK@*QwS4Nt+3**SGrX zW)!LKM35%r9D0>Z`nF!!JlT)u{ymDn-@P2R5z$Q2BBbohM!Ci-Cnma{CvTG=@ zwL$;4H}l1bik>XHsdd(>+E+_=#O{L|9dg(BwZ-+D7dO;U@{k5WPO}j7!D>U`Rwoa^ zL4DXu-7ti8!CsV1a-VkTL!c;7^9XaWq4|QjC-Q-+{LHs}o6Y%LO`uhM9BzY{RN@S4 zPmryIK{)ECnC}Pc(BUv$#`Oc{lE{ltog@6#B@Z$;wF!pnspkck*>KUnP} z2yikwzUIgwH{X3?zW>~OpMe%NCkC!*zh9`>DxAuQDk(UaTLFBQ47;`8Ej0z77gmxS zV95~VMIAnqx!0Jx$#2y0g>%^9NN7mBfhf&W)eN*>8$BGEI1OC&6x89Fa|`z_4@RK{ z!pp@TtmA#u2TC;qyUq|%hdre>VG(`m56Y>bE5|QHx-Joi@KgP_&G!K(#*ktiJB*85 z_Hy3i*HLDD>&^U1vnKXIUf=t+ugE?wEqUkLm6-?0L@z!AY%eUOix>QO8i)CgG$T!~ zA6^@J^rSlap%N)d1_*z>3(fxyavVnU-IpAmeO?lsvJhXw7#cX~mqs=3aq(Xs%=uHN z>5?13C3NUERda*qHY~l@XHHTyrq5Q)Ug`YD(*dgkmQhLUiDjo@{Sj6I^Go}X$oTt~ zfh@w)k`4p=-|^Lk)8!k)TQ;M!b^;~z*?~4~GI6CFc}O1hY)4le#Y{1^*wXZryuGD4 z()q=y^!`;rl%UDoUz7ogacoI6q9eW}T2;k%ZF>CM1yI^^A=?^53 zoZI!uJvgz)i?!vQRaTndhz9tR7FK5qsg&r6s%f1F?Nuw@T?+G|S$elld|^D2>`LSQ zUMXagr+!N23{XTjLdHcs(_V4aJ*Sm_-JS64CRcmZeE2B}jc>em;lzs4XdxxIUpqBSZ4}BHo5~3b;z03& zyJIFvCeDblr(|~bF4wOV72r1la97Xchm@WrO;kB6EQQWhuqj4NRH=`|AynjXpKO_L zjT=_>>ty#=Sw!zq-1^j6p3eL-4`{}za@>Nl^cO>1fi3f|rwr_5*)pfP{L`7ziaWG) z!^pIB=DQtyY5h__=LOuvlm05}piAubuhd18{l<1}X)an(Kxb>k7sTDMts#YzfX@(haL!L* zxk8i--D{_qDwKFlTkEsYZLO~|xth{23KGhi{%if`Sln5V*$1|mdTN6B*S?P5JWXQx{_-xVX1?S zP7bPO#NNH|>cp|^#G_oi#ewZFg7$`8*hBm`A`JdoOre;>Rq8L}9dL<#+8SsGuPb2f zqFwvocWKCC(EnIV+Y=!p+TOo$F^>m=;_^|LPq>8D9o4kz#s$Mq7fotP=U0ljL`)9I zO`~&uY@9A!4|G}$A`ZV^A=}|!WClio5OU=}DsBp=3LnU_In62UH(i_`q zH7Yh$ri|Pl7+BuC{AmuB`$$+layP}&np_^3*YL>3@7XGP`zQOT!!7#Y)U#)n}+P8u6?`vFH*`ky`a;s*xrCGdEFfew8;`Qx1+Y;3#spX1*Bqb7Tq5N%YUGgwx&5J4N}c zumr@AMGTy1es(xy%EA>^-U=}l!ih!pKRKOq+gXxYbs7P*X&L5~8$cM6N?6S*iLr!b zXLCmvx6%V>PcUw6#zzwptSKaOtSsjK2Tvu7d;J%q&{h<`>K~~BVNGPWcchHkgJjp3RvDT7k2|CF0$6pj zyqU2%HzK+GFyEOG)zMY|kE1JrXZrvDzYh6I@r@*De7{l3ndBO#z7d_0JICDm=Ds$= zNWLXvLZV!yBKMGn&0Mh@QAwsU)nVrR2HG=GXre!Rn|$08hAmCW~t}*{j%`w%k6-lno(wK;t*)91=~EZoVgqdb}@` zeob4)ZK1h>N;1)VJFtk4n|en#q5?H%m+Vv&(ZDK zuWUBKGXfs!w*pKq-p?>s_||)RO=566segFA>X+P@+K?5v)F(vRwPeQJCM|9c)7Q%) zlu;+Zj$mIB4v5XIkH9;-ihN*9H1}c?n*=;5pr1kCgXRum1mz)>OmH_0K|&TL!Pf!k zYf_Eqg{u2>6_`(Iq6#}VED^+l107sgW%8ux-%Yjf-V#+}=u}JRvP_lU+l#hebAN}F zfCJ?GZx6|@s2}0!*tgf8ie@IwH+O2*1(hm3&BJ(sb+aVT0A3)tIe=q4ex^4ZgzS^r zh5*g)hiPf=Ajzhmz^RY~r1a*$I`^y`%y3rK`2`Id2up&t$>s< zno@H%r26+Bo|wJ1eI7IhuT!MgHT^Q7@2`j-nF|=NmDdV!Gm7|3b`_?6n`=b{QJl?2 zGDhd^4O#jxm^6r?ufMH=&rqk5+{Oo1x zRaYzGheK5V9EkfJF!iPh2-e}boe!)?9}r;Z@FcT~_ZN^?frT-aGnEQdfovI{<@)2xbUJ4{Bh zdmqyBPT1_g>kRDdoF8Zi!){ESYOmjDh(K+c_W~RS0^V}mcJ?m&IY!=S@q;)%ll~N- zuA&}90#w$_Gp4wvM#hoS4DElDr4lo0e+QIXJqs??E*2>RX?}Kd4}C)F>2BShh&mMz zj-hx*a#0%PeXCFUv&z>PW(!3}^I&B$6jROzqcb_o-9McWMku@fS8|cXs~=C8yMKq5 zwg0Bz>w&9_bpSpV<^WpqQC(@#?TA7vGl^L=Ls{!smU#tKC+DJd0Xf`fl$5Jc%53LR#PLVQ2JF1f!>N(^F6{A3^Ofm8&K$ zP|d4}t0o}o^A+>HwesY`H?rymBaKup1GQeIyMZ*5E5KuXc(#Vo6RhEH!O=&*cW~Bj zC@m5h_ji-g=0sU(1cUPxA_;KYVtN;=iHtW3-Ac{+cJ&)<=6C{DNWNqw75Bfm5NwL} z=GPdkkZ2-u&!h={hQ?zzKIp)l(K;si;#E3DoUUYA-r92*8NI3m#&VEsDvf}rF75!F z*Msu;&iPjby)nMLo)zWQvXgLh=%qh>j^48M75r-nqB4grWzht`4*CivO%i>1ZG$Q< z=MkwM6C_eYb90fK_o7Y3=mAQef-mR4g_BKrlo!cE={Ja{5miOgt2@U$$ z$+@V5w7e**akT02MdCX1)JL{P_McVK#GhHCDKnc{qfQtpUx6RZD{_xd2U|t?6VTSD zY3^cJ(~hXrqh0x3^&3&`yJ3N)i?Fu#24O4vAq^LG6d&sGyIBD)=rGO9YFK=DW;K!7 z83Tr?7A%s>alQht`(_QoJqtfxBX$gwHJh3qKqsz6h(ST;|gT zccFwKTmQ_yxV=Aj6vA^tLQK6-ogvYB40qX=qJhuMua?LER^G$IfG>zi zR&-QZP&q7HBwmmr*y>@wieSFL`@d><#XQ_-NymeDrCo^+;~G-C zc0^I}AQ9K!WUT0TQ)7IxVWn)3nx9v?=Ka@PWx9cx6|_trs80nLwZ&6FV_w8e%&wac zMN%iMW26g*&N<{|J81Q_VukiM-^ON#a4ob5=t?&yv&%SM0aNnoF~Fl02)DMb<2oCT z&BZqOY3pzW^^y*^DA8Z4V)sRD{@p1Sce#|1)0|Vh%Y^cl>9t?84(?*bMKk~X+T_Ww zPzAc9`@bo%2EF$_&58U~va0Tv$($y>>eLr5c27cjkPN8X^KES3qW*9Ot^9}|2pHZz zZ^zttxofl>s>IlV+7IF*e4MSh5&`XUs=d+xwFtMrL+OsnafphCCHyVtb_DWTLr2t| zeX_1@3lwP8gn|0wk6vr1E-zPTmlB|fqsMLOHf(3F&{rop{5~G@3exvP+Oks6zr0mU z_EpMu3AbiMuBP%c^2s3D)WRwz|qW`&qbn=CszVo7#(rW{t5uA-!6od2JeFZqWJ3I)gobHxznk?gA&6YYEq44f`=F@}ggawI%eCZ+x zti`fd#5I`(W4c-x&gQL)0WUD5R`|+sMMp+u>oq|BLQ~Br?uE3k?E-<*9YL7CAxz|b z0BW?2KykckbehqVK|VPlV9Ftn3#3DTKxE-^u5~0HL~|=Zx}e*c3rSaYOS0o-D5$5 z8}U1#i^Nx`INuze9P2-MU}`rtr7U2DQsb{6nYshmszCK-w-%tR${QoRARBfJ+ zs|{m+o=DzpXllH@c3(Hs(UH;r1D-R&C1wORKx0%a&oS$5&M z{^Rc`;p+RUi0%G5c@I_Wo`!|*`hgSsU3Uel9)>nA{+RkDXJ!q3zvub0szMAj>)drx z-MoT?Z}i(+-?^WYj=&*080BA|JI&@bkfu?8B@&r0lT+NA`{y3#y7}oog-eC08f~R~ z2cfE*KDpU?4LkHqXV^qL)Vs*jG0OS7=k?(x5~G13p;9T^u~lG%M01{>Je=K=iD}bP zKKtERI@Q3>PiA(wOyjaU(6iYA`4k;+3?JG%?IO$a6V;_IPcL14g2Z2Xtp9k(84Vpq zm^vEq@C*GEK^5oPPDIJ#<4W<)0|{TB_oERr8hFmwNQ|5LcO$c`s*{s18-07ArnTvh zff<`)>M78_Y7m`{QDlVq3H+QM1jLxC47^LzI8^Mbzq!N0ios94rv z73r{4TMM+_!u^9)OHOcI8GBLc;Qk?b`tO#;F36f59qUNAO>5Y9I3?P9Fq`6w(g_l%KwdX^TkR0TJcTv@dbm#5=<#16kGlQ#73Xb zTtExYjKm06iB*9cQ4{Q10=ivWBJ0IQCJ%&HF8L4eGT#m^f*^xR(Wf`Q_HO6xY5)V8 z2;2OL-T0nd9`De}ays>7cLUV-I>Hoe3RfJ;XEA00Ao$svsDn9d%9cs!nzC_g;h*S8E~Q3h$SD+1)0Ult7;QuNb!18=wL;hYvpXWO68Z zoA>lTs{=jilH+&=4L4?ex>#60Bj2zG2JRetBFrpLXk+vS_eBoN6`N#s9||pjkly<< z41-u&bQt{1VEOXLBjbRnjQTJi=aKjmCO@p$7`p82IsaB}D^cT0SzU!l^&_=z$Wyv- zy(a}jJ+I9fw&Ek(+&o|n^EF!WcfdQp4eokIh)xVB?MJKYJ4BC26}dy{v@cg3S~%Oq zs)tuRWscMNvmJljYzgH*abV*a%`0UQB|lz5L|Zi8(F#9;=+WMNkVJ70(p62SDA0Ss zvZVOi&d0gf2P;~8vD6Z>IJjlYd{hAsr%w8K3NMBy6X)5gYr;1(@pU4_mFLJ;>4HQD zn{wu~pxEhNT>9ik9oSGge|U~a2ml}+65%K#3?w$Q?OC%RR84~r$rsnTJeAm z_*Pezm3l<$i9^=ovmJvPijct;x@nAxyPux)t)bJ>@z)0Yl`Oir+d8d3?Ta%k_3>a% zmJLeciR+4{QNNh~v%IGZI6*0sOw3#dv5stWP)IyhRZZr(pV3TnFTpfGGLbJU_uuec z76tt)^N}_7rJM=DfX_oMIjX!e@stB}CZtEMzRTv%Qa4sr%d2Kb^xBH6OYLk}LhX%J z`$Lvr%GJ1g%m#4E7k+YL(XkEY9o0W{?^MM?P4)!mR`n_i8 zozs}a_IIY_F2BW%r!xf$B%#u_%pq<>K+h38k#(t!cT1atCq!>%ZAo|bgxZ3R5hlCuJW!S41M!t8t_gHDfOd;|DYv@^`t&WgKdZ9QLKofkkXSt*3YePglIfUVKzDxG9OP2VRSCaR{=&LQ`fBd-psw9t7_cozrfTay+# zTx%JgD|c~;v2Cag_2338s5bjHyOMfJ^qM)q&Ds5(prvv+u$bmfT3@#8;Y!Mk3b4{Z4!IpL|r2}JQ zgd`M(Iw&D}%F4Y)|Go35$i<%hjfq`W3gvAX6i2L&*3FRx^hh(-@<8C*%IEBM!h`Uw zHK{?XA!SC=n&;5!99O%-wzWjKaoMvDfALD7rzIkP9dAi1*1CKxUi+a3dG=e0}ud6(jSy-NgHj`{Ifm+WE1)lwn8M zIC=z^{TJgOy{u8gYb_DekzWuob=HgPHdX*=d-qtv8zmS7VrRBw*2v{VVw1;&|N+^-n>o;P~4LhTQ z%Je`2pmA6zwBx7IINB?z$PhxV2U)Pl*5Gax8SKWgy*JO#pEPemmpg@k6Km^*G11@t zM=f(c4fIRf3(ea}8P7)5%5jxbKR7e7j*L}~yQiSXFrh){@hF*Q$ijE9g{)1?LWkD zzZBL(Rq|^z<|8Y}#SZH?>$c7abZ7BeM^mpGjb$DXtyFkicz>;ACN=|3Uk$D`61X<0 zWmh#hm>x8kuB;Z~1HM6Y#6k}R{%P=vb|R#xYyNm% z`|=g$W@xO7lgn;b!asRex8YH`GM|&sOmHbSPFt?<+tccp2SO|D;Wzhk_HCshu>(8U zG50d8#meCibR@ooWp`7!dq<9iwwtmrNYdOnvGVcO#7X`T@r`^4$L-jpm`>g9QII@r zv#+%-GJ*TxlO~n!FerzNln!0$TA~p|PR(sWudj%e4{u(6@nB@8t$VM~lD_@HGrS5~ zY#r7yowWD*NZht@n13ZW;0`5!3+s=x*%pg zV5cRprd@3#UQsP9Lk|L4T7#2@8-}f<;WCxy01m;g*PSciT7ZJJ1#)c&IPdQ0p>!rbRelX@J%wICRfT{EnAtAITGOGZXBfii+Zy}GjX{*90 zljRnP_F)7vx}rR`UU)N{<;|-ABl6P-Qom7#D_iVg7r0c)1G&Jios8CNe|%kfp^yhO zI;O~V&4p~#hxse-etGk>NPyLy_3RT4vt2((Y9kn3{80t(Ex+rV?!)XHhtJ%7Ba_$- z$Cjgzx?fevUV@q{L{nT_2r(GfrXA?2lg7(K>DHQisWi{s6>wVT{t8{VCaxnt1CIEe z*TmzMpq4d?oNc+MDT`f_13troL}&EEP$m9B^!H4~PHY<#19#bTt-b4TuTFH(zHYXw zpjsT1$l_|?1GQzO1u_BntlS2>d_hI`ysKcWsw&nm@86G_=F$7(tXNG6mdT|2fq*q> zi^T6!Q4Y2qSs0Ad+JB^n0|l4tSahAv8;M|MF15KX2T>Dz@Qx32}^<`UD zd-YElhm^0pnaIrDnHs%zH*9_O?*j7XK`Al#!Y!;t)!yr+X1O}ia(%OaQBTA4#MF&l z?!IuVyRD*>kf&dpw){1Oq(;aAa(Y_Ls0C`ckTLOFXfKGX+nuS`>()EHNH%>u0C%`u z8L_T$(LQ$ow5Q|lLcSCU`dJt9ajGu#nu}wsNV+C?Tr?vU^`iA0YiVKnh{WtUQ(L7A z<_rSB9JaTJ_JbvpDN3&kWO3ril8f8C$u~XevoU0GeX2*Xc0I*`Q3fbOvC5b<#Iz2s zVD5`ve!ny>imQ#|i=s|DGM4o8W!$hpU`e1KXiA!~4wK&OOS88`nS1|R>}1|8)aVzc z9s;L9sx|>vqIdq_kpJi%S(15f<&zL?+9q?b-CDd{*IV@_|^V{+^`c<`7hJk+gnmG|*|+TSwlHQQP?#q#5Lm zhmcomT|xGU?43)aPDb3vUF+drYHFzTz+bk3Ffajwnarq458>+cwv!xXEZwDt|IMyO z{e9iKm>dQ7Ww;5@LCtQAA!+U`?}zSRm9a~dnUdYy@G1H00f+Svp%Fs$5Kfu2RnHRb z!*`7konjx7w1nw#-VdDNvb#eNW2(hbjv^pPs=wzfZdG~DY(5GLs4JNSI2KEF1L_1mm~v^$!=YFF9z=1CBqz6>BlGfeU7RGPeVISr z`5nmPjbS9-1@T;)_sjgAIyaQi&56|=(k{%t+diBNgqGJs2-Z?n{W%bncg4%iJnC11 zBuaR5N9~FJII)$DcgPbb`X4zt%Ca&Xa!-Z^6c&k`xbsHREnE*!OfznhK>6{CzX$BbMep!1PhbRw=l`cb>|!mA!e zO5m7BD4dOj!m4?_l=3|{NG4a+xO|k;Edn~Ux~7Lg$_@e=$6!|iIshnO^8Ip~rj~J= zU7wSJz7kJ@RB}c~GC<-3f%VR9qQi-+IRovt917gFo2Gz?rl2kooTv7keYUCi)Fo%6 ziOV;n(wAJ|5)Y*KYVBd2SueVZs|su3TAATn`{V9Jv?5GsC(0$uaZKH=>Lz*O0^_ zn^Hgr>#nDa;!Nkx(nXEUDv*7@Y2k4N1fx{oOTxofwLv;jROu^juE*C$Z^1G|E%THe z8OsEZLW4ydtB>0LY8QudP25TKMRJ_;LI%!e|1zc>yMhvyQ8RI&vBI#k+eG7G06a2l z!{CzE=>T-5`Kpr3|8%_F*>gcWl#zX4nXeV9ZNucaHk5G%74N=s%}!&cKT&XR8*4cI zx|Fy9p0mT>6&r-=`PbhHaG|J@d)KwApeG!3o;hS>s^|GQFkj7Qf99iuYd0CRK}Df00s~v-<*9Lef;*2QBinzG03-&WFEG{mx~K% zdhN8X0XBk(&F=-k0iqlzaQ0|PtO>7IOY1)vTMZ?kgufn}z>b<_xd$V2`cbiUdx+|8}{!S`?Tqrea&7O+Fe*HG!8jh%HP1Ep*a@Y#d3N?FD&|YUT zu!)W#fr=i+BY^C`;`w_5#hj>&jngnc529F@Dm&b7Zz3v;Ez39&voWCo9c1))E)94o z-!D_dW$KhM#mX*FVZ>(`!?E^-9SCLkB~tIKNw|+-wAy-Z_#-Z%+}!88Bo#(4#AIMu zu`2Nxr+eJOoDo#HxysX-3>tD}o=!#^*0D1v$VN$rI}7AL!i4NNhW3IPrMgrM#j zvIEEgo-}56)ZNhd6~Ww5iY^3uHWXyn7|w2A0QzCg3d2ywlV<}IL4pZNI6a0-SP{Ho zR1Vc`rEhvCtw>%FZ$H9fZVd3EK2i)5kDX7R1IRm&bN-CUU2juHdFkj3M#wkHed{6@Kusqi33g;XYGK6l^L`nhOiW324f| zo@}l6J@oc<;d{a`0X=sZy~1Cryg>ysbzV{WEw24X0SSn^mg3Nru^?ce=Fn;Xg|%)94&HL1mul@f$d`=W z7sT~^TQ|bpW1gS`56G3>NTlw-hvLR^NuLv6c0}DsfxFn(!8!8bLWGB6Rd_p0@G7~S z2;_}WN-_=CC=JZ3G{IIUn=)*DP8?ZVz6&l0$dJ08FXeIlyGkBXu=Vs({hPg?UPa6# z%)|gzM|J#f*H~v$btH&jl-XaDxAvb~)>5pBJ2*b93z0VhxVsLk3TK#WE~gqX=-4L8 zj9psFy*>NlQ`SVdX#&fthkqiGYg^wo9&E1uzI^7%BDbaw8*d+Wr}Ur9z1O|<zF{?wU(^r$HR^y#G7 zrIPA%^Gzx4Yj4MDBcn<1wb7)sr46K0@k6ut51^$nC?z=x)5hKjJr+)2nqNYgeV%{i z5w|I^`KPc>#YNSKlsL5kx{-pc^`EGV*>fc8sxQOOOfBnUc9CDR!Y{y zY6;bA_Aj1Pad^3V^k#o|(=cjpH=8nJ`o^nhNj<^o*+Kj*zC&5hc9o{hPW{5^!GrpR zH#G`V0!te2R86c_k<4q$lb^$Z<5ytA{7_q!mJ8|wpI76tmY(b5B)~2wEzK)A!kXNR z-eDBuvpr|eU3*-~5D+WMf0r}vAgTt*tJkcXy&&q7(_5@aS7=g`!DKdw@*|iV`^%EK z8H+|U(hvgUdbEkaFq385vhq0j4RbBw;dgU&q|(~1Gv0i7z}@hzrDmiRYbg2Jo5UDW z@x9g}(#)1YB^BlS$*yH(ZI3hrWU}P$&7=um-OEu|<=J+gy4qqTRvr~NiVhU99$4Lb zxodsi;o>K4^S1d*guHl@6dEqi`6L*L;RB~Y+B+yGViT(5^K|UnVhvw|c4H&aA822E z24k!~ZHJQV=0UXm_>)U2c{nMhJ0zb$UhdnD7SZAGfvbz6mQA(x8Pur{7Y?3(>6cM^IHA_|MS4-E+k6f~KR>Eu z?wMHwR(Ex@Aq^+ZAeNa3yk;oAjmoXH`ZPkOvF=lT*62$g=N#S0hfPRAb_e0{h;GK( zKSJQ4CRfAkUN62A@ms{t#)2K7Q&yrh+4@h2?^PV!G-WsNkiL`;e5HUF39yC~V&+hc zUi+YSGb>|ArJa7u;gk(Wi1Kf}SgDdDV9rSYsFe~nfb?>atP^wm_O`4-C^=G|<&gBM zei{=Ql^>#POV{JzPuArp$i6a(=N<{i9jW4ehx<~tofuzpcoF$Cpa?&!m*@onPA6kp591nA!ayF zs<;20DXO6NR?8;wN8;GP+}dEm`RgQn+Q3|g-BL{W)**@Bm0R&+CUomR3EeHbAn8Sc zjYp7$D|4Qh4^gL4dn2H*72!eO=y=#W&2lC_7W_c$iOe10Y7r&Dp^JbOHQPmpfx~C1 zpb!zSHbA2+LzRJ1sW}RKQp;n;kaney%#EEh8?pxe#*o;*kZv?lk$3~NEZ$`*YVb>H zA*Q9Hl(2Q^!cJR{rg;-3sPoD}OVk+1K{1r*q-yJtOEaMto_|zISjdyIKnXwm-TAq5 zqiX+LaOfG8pqzSEw)18L49**ONw)A>B@~U_)XdTZWgkjHae2`#? z8V;?k3sXG;HDdP7i(0m35WUR3w`5snE)8&7dgQ9oY)nMq?oz_c*p>y#CUDv*U2yrj zlW6#J5_JfJ%>QnQV%-62;)a#{r{C-2V^n;nq-oUMDhl`W`D?tc?GlPY)_VA!nn%mu z2YL2EqI8FKjs8cLKe)hBET)4+9qWxNH@6cFPn)a$$&wpiT)UeA5-I3G9xlU(L7uNL1>gWOLdh+}_$)dT`{uA$guuOKYV#A98j9R3O6{9B z8hkPpbx=>&7}B!=a;bQqI8o00_(yvEXO{@56!htc?i)L2VgLN&oN@5DXK*4bY7p-8 zWJEVJE%+L)Aeg@;>Yw{u@t(Qg0L+UOLYvIdp%=ga2_@>&G&bb?pB7?J_38t2`He~+ z=N`-c@U22fL~b!R^CS}PWup#s?9*H<764R@>C|;a)l2gb#myX;v zl(j@fcQ55jO#=cS$UY2-Q4EZFyaKeOv#Q1rRKGW&{qiyx4~GmQQzvM!lu$WlXu#z+ z`u>)iEB`_gpx3=^=~^mRuag8@XO34f6@g&4>hmx7V#(-VaxAk$Hs_xRwhjTT$CuWV zb!o%b zp9k(zx**M_Db*qxV-Lc`s^-@BHd6*2VXU|g1iO63+ zH@WUu*>T^SATj;t@gtCUPpEafpzIdw#PEx8#b6^L=pN8Ub(n%GDW2j6apg7FjLo58 zZt1u;1$P=vD84(+^3DnsRApGfDKjVgg$w0peluxE0PS-513Y}4nYTRL)0DEM<>$Hh!^hq$c9|;ai`RaLqtR z)c!4O1DSnx-zIuPV9-DRP&z7mxiy}||Qt2=G! z#(Fm3-1JY@sD4XdAUS~e?h-h^dXQE0drzDh)YGNIl_$XDHXX@1$;p1E)?X#^$gw2o z*r>*MLSt9D*e(*$hB8>U^ThE?TGu-oDf&C+D?cbb}b#9EZ?2+xpm%Tib!UgG> z9OoxanXgX3+Uh1%nm|1!x34{MDyiwkH*(;&4zXy!Ek-FHY*FnH{!kchrUbR+R{Czk)8n{ymf?T_;~F=+og@kOB$DNJgHL>N0N8* zkf;>pSCtar2~#dl@-hibQaI<{NzRiMSyt17$^mM<@DX?0^a$7wGo*bFu`-lzA7T}u z<^65xjC92@<=SDLgQPi4Fezo+*&_7ux9rCn&*5hy0hRN)eWoH4_3L|q>0GzTNWE^_ zlfDn^u{d>aLZo{5JC`Sh#pNzf#$3nib^VndE)Ts*@gw!#=9oTO9`X+UEk#2AWEL@W zMl|~shkq9wie`TxZ8l%(`=nhFnC8{ur35b9>k-7U)Zh_!$PN*_=5J+c+vrBOI2X`D z06_ran|w^n#99cHXF#*?o{(_{g{!^|3gk>$=66w!u4(NH*%pGU#5NR0ylRAmD86!| z*Tk^TpbX*a`v}_Mh~UGaTYDqTS_tJh;N1}b)Ir`3*R|`4G#rQ#Pj`e(I1hah%+ha&kdyUoMuI!{^E4l z1U5gj^5(4od(#Z_)V{zPh8nW}2Ew;4--^ot)pn$U|TTR>>ShmVnNN6oFnx-Oo+c=KmwKJXqlM993XHUac=;i>XitN@iwwV&ajGU@as@&$eQr-uXGVM^^mQ{K3thHC#`$z zkS!emrH=I%I6v3k3+&LOsuk&&Wag;51xnV{)dCgHhiYRKf%qG+Iyt*`gba&3!0M@9 z%$JJUm8TB{_@yZ9dXEAj45#Dt3*uX>CNkmHP%JX=mb#o84&z4EsB?V>1cA$%r7% zi3QM9pI)y9bYF456LoF?%s0$*_IA+v@&v!gWpp&~yIh6VyuPSaJ?npX8|jyznV)wc z7{)VFl8cnL-i=b{gFBZ@R<@bo?%Z(U&{E0np2YMWc+OznAD{pp5apz3yP`Xz*Q&UC z>H>)N;KS;K35QtjSy|cjg0X+O;ob z{RRCf7u6BbbK7;eItv-)d5!QYIb9d}5zra8^;=B-*8F-7Xr0^&MvWZ#fo%uJX_3+U zZE|hU!7)LSA@EJ>!;w{kga^8~_j98=5b#Y?Nkqx!hxeX>v4Fn@tX~HpzU+fIAkZ0-2&Q(b*EP zdw_@Dm_PT#kg($LM4p28f&SU)s}^L=Ujq0QUc)~SQN7>)z5ol|ci=*1DF;4v43CZ3GIn4lPR_G3{g*%skrtWrswVa81F);2)1d-ryfA z(H_I;UqB4}0#vc%B8)h4Vj#?Q{j2@|*p#k9^WJ7Zr3wC=B!hc+vQ8GQ`gYrg?IZ9j zZ}Aq)sWP}RL&7oqT?%rsmb7HDd@x*yF}0);Rm@IqBtDRmVhH5$94zzC3M%HeivV-= zAebc!?B-^=9hih`&KB2AK(&CHFs+HND+KSk@J_j;Ci9t8 zxG*8%xXicN4$3{6JY(z@uqyzBa=5c}nDD2BYq;>|_$^R#^^az>)wqYm?8HZfsIb@& zu#G$aNTVTt`POKybWlUTBng{l@BY_}CMgEG)`R<9e$Q>Jur~e~R;cYplf!X-_IZR0 zYmH_0L)_|iUl1STCdh;91T-1F!H(5YK-PJST#RNW~=Nm>GABa$H`8$k#Bri~D|U6`*PW`%nBpE(9gVLi`h{|%Gz(OF2{jyf{5x2jT{MZ0QPi-<@zifaNVR?`&kkW0GW-Rv--C37|^L zaOs&ob?a)+w5{Z8=1)v-e(WbJpuwCt&uQ)wsovghg!%xqL!?cQzf$UcJZDBlgjd3a z_T`5QpMqHjgRPx#jV`f!RxV1BI&*Q6cwA2wAKDk$%Pt6Su=kiHWhme>GiY3~f`Ddp zyN(C2NB-Ksu!h(J_Oy5h$^)7}Shnq+Ntr1ib9avH2w@M5g~vW z_M-bC*U5Grz;tbW!%L-WiL#_&NF{D%w1tw=_ReN-1UT z$8jd~z#*pRAt=W1?Op;1L7<3Wbk5X!3GO3_;QWee^X9P{CO>y@7nRs$(=^G?{r?-~ zbRPq!dEaSIft({1koNbT=HxKpWyfGDF}o#`;?z+3`_A%K5N5cVNk#|wOCcDiPT;)+ zMLl^EU_Ou2!-T8C#b)DTz`G@EDIM!%?z{DYjX$jf=15?K_#)ByU;keTlgmNPXnFY7 z0}7Hm4-Ur){sr%FZ;k@3)Musb9FYKjp}o;ZAr?EKYZrGyCtiUL&AW;`K|oyZ8ASw~ zwQC#;vgOf0P&2w1mG~4XfvdATMkN}|Bq$ygB_&YtLsDQ_oIRQb`qO6x%+U#Ls=Yk< z#TF*NX&ku|X9IX`beeUk94E`-*nw+XiJ2V37)A0Ce5P=f3CP2*l1=Y$%VZmp@>&ET z`vtW4z*$oJuca8(n4_6*S~ExAl}yTyhOOU{UJW-tVK7vCZ{R~obJav?qR+_4TK?4b zqI&aH$Jg#+d2kWQ`gGJ^8ZYLu<3EJHF6Sl%j&j9-);W32ZPglv?Sv91-9*i>h0fXs z14jV_>sd|z#yX_&=qK>-I35e$`8|eICHw*nDUr&7a8zSv068R}Ob`q}kVx!;B{$?E z3~lrSLotk_L|rn)_JECEg)}$Olq&#^8GY$Ac@DMsh_>di*&@uPEUptnaFmtnQA|P!aGt7GT}To5EFDp6G?>$)5`{aPF69v`{N42h3_|pEEZvib0od1 zYGkx#&U+t0uqh=@y_p=xshBtxh_(@vCvKR@xqUrVEt-iEA6CF;HjUQnHk{+@`Md)J zq~0EyaMZ9aOh~>6X2E8)kqm&?*}Oh+J0%J@MNZHwPW=Fpod>w)Kj&`tyn`#pcSNOA zkgwSZcF`|NCR@M?0XAXxNn>vTq{p;l=~3O)+$2mB-}Y(Wi9f4KtXq7F#QCyp~F6h67Ps380tG?Jq0y)&K;fPb4|uC$P=IW54*)g zK8HlCuX`NpWTlgUab*2{A3=NZzY~Up|HO{DwjCuj^FP0Fmdy+kRzI_9MjsdUsw~0` z1`i-g)_xv9FtSX7c9j4hh)I6^ZBS)(J-Ek;jciSfJKo%zIQ3HrY;M$-owD(Gro}yR z1Ai(k*ByYUZ@hT{zQTIOwlW#b6+l2dKpiDA+Gq>Ruj+XCPDe~AG9&y&$a zS#U!7|HhM(z|}a_(qx&`*@-4;3|4psd~!rpb<9XC+2qm78rtKdG824A!&NCNu^VS! zSP$o%`pJicCNPs|NU{cK=XYZ785gF8k48;J;$PQWlp3y+FGJ#xVZv;a81UrW;W3d< zy6HYprCskYqmXpK!njkCD0%9#;vtMqqEXk9kNMGNG|NvCysUhyGl?cYJPKa^^r$k_ zNRYF;hc|s7gz=2G8)qX;z*Mc^obFAhe~dTjw(DS<^w6aii6ga39ZM!lhM-xNtT6w;FovpH8-2Ks$5xFJ!t@wLBSpE%*g9 zRVrNpXJgZV3HS|5NXWf+=`Ky+>rP_FEgN_XDl8cwK>mBcECJgNIbi~5t7{sVfu8ZK z3+aNDizq4JP-tMXJ<`eVi2=@t^|_Buas+yGu`OfadI7VMsX=Il#Y86%B`u#A9{2=A z==^_eyDhJEVlrA1E`@FMjB^KcrV`{r!jb{J90!jnl)$ToC{=K2w~qt8AM4@fCPSc zP}55=-uDzMoQlc~6W&pMy{nil69WIVHTS{;2=X^pB%?f)UAowf^4cH(D%ao;l{jT` zkP0*H!N~vSdxSl{U;tAdjdR)iWV{5&lS{!qeqFN}9XJg*rheGTX7pO{?;YN|A!~xK z4E%lvw5vS@sn3w6Ca{=)#c-i^edQDU)Q13*B}S*|Fz(-@srl2nhkewMhd|nf)ZISm zR^V0eKFT8s($`~>FISJdM?n(SC66z{;uxSGdog18I?r=?SRpp)ax#Sxa`S$Cz*2*QPX5$8IWG;|_~|ItV(x3I!A zcQ*;Vj>b)po>~epRz#IazF)31&Ze*uY?Oorumh}1{YT5wulHB_td4;90j{cU;^h-S z$efQ;iG-y|{+4T27n`X8azj)g9l_CkP;F|H9F@4-w;uI5B4IiSxdT@hKjyS^<(y_U z&?SCSL9RC-L$D=v|SYgB1ti51q zarS`X*&~XR<@YPiXdT%yPr)4X$6iDUthUBeKr2Oq5gL`03}I;Pd9~b+uo4FdoWcX9 zwTUIbaZu^?HSsS?haQbF8W~Bu$!J`2BfFrW`0X{(5cpS?d|P=(DuC_erQB1jpEIL` zN1Y2?gcbP!;dO8qf&o!X9Ys>s4>^`-*DSf6`RQD#hPNpnJE7t~Qr^@jGv9tVXz5i(%_ufP9vyv|(7t@xbI`k54bLf#wDNh%P}R6C+1Aq3h@iT5V;(U3vDjOW_1U^VaY%vWW zqY2uea8^E3!?#z-D*u+rP`$lt=F}t~T@UlkSxRjiKvLR6M}@L@&Oonmy-+65yk1Bo zm^KV-tot~?!i6$;b09~#2L&{vzkrDwMbJBd50wctsTZC|m;z!0^vr|3@ZX5Vb_KBX zHdBEx7&-0Gj1~cQ#n9>zSe*aFJ)q@1JA_cy9#RNVHvgJR$=gs@3t<$NgO3Td=8F!V ziBqf>9^&XRtVzbODC{rgU%9Ky-gF9%+*8zymPGuSXlHJ|o%~x!IgAxP1tB6r4~RkQ zg-^eXyl2vMrZ&36ZRBvFw)LzJORgS!KBUrczO{gIp@2*}HG5X6Y74jo)G7}v6o52j z=))_JM2I2axRn))!1o2GI#~Dzc6TTzCNh4_-iAv2gj@YTlCC@u%I^EWlDt_%vNaSb zQ6?#5Z6T@9Vo8{>6untS3}!G25wfHbDwG!cUdA%UzGMwq%D#+!W*C{F3BTj}`=i@4 z=FWZYbDwk1J?C?_dg>r90xq{5XU3YIMeI!2y2B^hfmG8F9w`9UE$H}pd#DqLhxVF{ zRJO{!OOJ++xDP;RthhDEM239?&@A`b*;LhGLFu2;3K?uN90jCm`6AwAk^I{cmOAFR z@M%l^;KAkd!Q3Sd<4nZ*z6oZ8Dox{1Lo#}T<@N#Bp#E@zX}dKIz*c-x z2qe|G26uO9N2oQm>kpAziU||U-sf!5CWsBIS~;*tW{H8Q7s2AI5LBo0RhYJ|@)1qj zn0&-e+D1LqB?*YY%_v~Jo_6KRtA;zY&d5Cn%Jrwxm$CaIttHRaAElJ>{`NEZkbX}%J-DTWI zLI=~QaZRfGF(aYF2?J}}4Lfu=ebWct#f#DvQTJ3tOX#3_d)(~f=zqbZGFu95&%&qX z7qIW=0qt&k$}+skwbU0q-l2oebiz3ExNC;e5Se(SUDPL4bcP3#oNV$`#8xfW(yV_x zDy^kvpFxdX@+hwo0!^?J4uk{0^0U_C-bO1e>Z0k8=X0=PkGssnNthjS85;H&Jj3b{ zc!p&S8+(?$hAmu0!z7kz=u$#!)6H6{wJvbp+cZ6F0f~TzC84}Pw`ng8-6-pH|9hFD zEBZRmj8@lMb)zhHYaBkGk+xK1RocAet-!2Li=Aw=>rATj_~e;-{}B9rc?TLY@XS}- zC_^q7E3$@rlxmEFZN|^Ee%bz$66n64P5MFypLC8u=)+NWbdi}d(E8}rdfHQj?>rq~fqmTroS3xVDuNWTz39iQ7<>${!FkuQ4{$J!L+_ z>$1ExDdvMdx_zh(=!v`C6H7R z=orH^o}LG=7NSEi9De3~({0W#@;c zS=Pq|W^3x~pKJ2V9I{j`Hlt-HtU}dKKgwU;&&A6oSl7pjtPRcGut6VsKH>I(1j@Jj z2=VOKYdcJ*v1l4{ccVJ}k`wjx;^PkyUv2A5W;KLGXWm3O zp4PoRQc}2&IawAsJ4W`}dLP2Z_j6hyh~AYgbEQ8y%}tuzqO&0tX|`v4&jWCEKZ9V2 zkTl74Qu~oHzv4C`|JII2@hZnW90&A2xOKTPY1VokK^le7j7xB*SSe&Qchp5Y!k-VBIs^LZuX~xE_*(N zx3M-czO_a+9}6m361pfp#&<37KC7{-)W>4))e z6sJYg4a>GFqajX*7KI-Gvs&KvrIPO&d+T*xIa$LcOUismH~BxU5$=8d`K1KCY2!l* zo0D#}v>uMq$<_zA8)@t**a>qQLyGRH?iC2Vm2rhI z2>Ns6U^=%Ia4XGLEUE6|BS>R#de832twint!d!|)A^V5QT&X6_wwik76~2LLJu0Mg z0>qF$^?3kjyRUo%3H?X+@*)mWGUU%U17Loj(ooSIEiMXJEdg+eKH?3_2HH*D&yJd< zUQcGLZ{7n(w?~8N^Ou^s&IQH^42Z!2O7JRI^chw5Ll?4_euB$Wc;^?unzI37?WVU| z6F>J`HBhgN_&30Lmn(N}`6(Rn37c-B6@m{d=bFl-T`7@+VpT=%Z43LhlxG8kRR;n4!+$UN|q>A7`i+Xi*;?Yq$R4vo-RBt;q_oBk&wBa z?cpN7rPl`av24wpURj;EmngS`zY8Urz{i>;aqi=xmvjLv3<41u^*G~C=87B0(U8)Tv=UrmHI{qgs${U*Y=~) zyE~Rs&zwY`fSpS)IJ-VZ%$MxpCnDoKuLm7R*;g+8c_2K&+|aZH(+@^C&UKNDNdX+| z(EY&z_ThEjtU*knh_xc?=hv@hG)FmTD)KEsW28v!R!$TEJP`TPyY%><%7qf5{NX_l z_A8PWpejYa+7%BiC}G3I<|xbnfj7?$$QgG+(q~lm=|?#3H1_ioF%cae>>HGe{Dpx5 z{_-a-cCGt3Ma5N%Kga`gGmXcfj%s~U(1X2CD=};^q1hKcZni_}u?FdMd)9IAgx=$t z+1AsY!1@f(?3x_K(>-E1`}^1941{^bJj=fyy6Tqz0$TLc?BJl;8yEfxBtgUM{zBp_ z5Hp{=aw~VU`UD6X@u6cK?F#W!%9G=SGf*n5{LWIeYn7q_q{<1=p$ogq2za=_ag$Ku z!A8*nc`IUds-=qKbBX}cD38wnG;04N{5~jGvxtYb7<~XyRN(+=@;w3y3JF6}mvZ-+ z-1_O^X$|M*`w$Oy(cuYZ{2Ae{b7ZaK+k(LCBmSP-*k^Fe>|gJ;W5sI&Mw`~6U-5xc z7y#s)KY%HG?UwYBdG+un-M!9{2FBe(g9yZ$<|NbpqPpm&+S`qoxwHGTLEX{V1pD4L zLVKeOFyc>~Z!>2u)Y57!h!}Ta@he*Nc5eo*pXsf?o`6@SAq%?8kD1W}PvUAg+S3M6}Z&booDL-z1*=KjL z^pG|7>_xCUst00{xR1QW7rb~Ruy)DaVw5l)_z-f`R8&1+lNT75zyCerNa7xWGx#t- zVEvJgV}IqR1A*c6ANa87(xmG3lfwf9C3&0Gvm>QF@%@s1=}MSsqjCn>+>QR5VxB)` zf=2CYNG6kt;^1?#((Xp_8Su}-6S!$uO0wKI^>3$A&7@w(B{T|c{dJNh4=986iL|yc zLPQ_fS=vB2-5^NjkC90_|G6*f+Qw<>+JQmAn(-14eVs5s^xvX$3RdN8@zfo3EMDph>5HaD_Kph+lKHHdlHANQ^_ z*aR{d4VxKoX#pllmP3Q?6++(xwW-%2d}k~g3V)C<=wEpIK+jB-RLB;BY^JKP zATwW2#j+i1+{ahD?m{p(gaYnL0f+v?1PF7R^zkOuwJOz&>$L*}n|K3}8Y8ymsV!{Q zWZCp)GHxxbYKe2EVku)Fs;h6gUxHh^rtzJ_O6<5ASlIR;z*Q>xY^Brkb~NfQDHs1c z-e2UZuGyKMGcjE8?$z!{X}5kaP@TWOek-u~A?8R^ z$PXZ_$fZ z_V)xOQ$q&RKiu=Dk$7poGq$*@=mCOO=PE??fXeWm^K`ft3PDtyWM-Zj0$|{NA3`Rk z=b-y2QtPPjTktSmByWf$DJ_D70CnvWJahRskP)|!2Cc>)A%Nti<#dQR5@y{Qc96x&dNEO|!CQyQPNEm&LjUYKU) znl2tJu9)0C{gbRWKqzX`LcJ}lacpDkqeC*sGZVbTmd=f}$u;rfp{|&w#LhEKrZe>X zoe5ed9T^^tKWqwXiIb|3MFI(_y&~|f7tc%?Z##g`NP-vZn1m0hy3AqrpSs*hepJ{_ zPt6k}U~kAU^azsc+MU1c7$B|;uQWV=zQ44cpYOzo->jL&Fw<*B!4td0sI&S1c5Jo$jyza1u z1&FE&0kU1YW#ECg^c#8JBn=RzJ(^h6a^2n!J=mlMgz1T7 z5Zf;9&77=SX|a~c+;T>2txrYqt2r%_>HXWb@a)~E^N^73%oek=l;GEmwc#G2fiXdE zy+Nh%zhz+R#$ABEoXYuP-C3JP_Jg_H9O-}(ysHD4sEWY91S!yi9tK5$%F+|36ejTb zXp^9D${_`hz~$e(SWrdMIK7*C*E^NYd4(lmyK0=KZLoU~y&%D7V4sFZEHlX`~;#6eV3S$_KG}?>3l*26Ca%;_JGeA=mP?&cdxnC#xbw)GAej&uK zy-L#va;;b)KE|jIXv4+uwi9qim%++r#=xs-~rSwA(9b4aNQP*_AV%UA- zKQ9~fe%8w$({d+R zSt9qExO4$X3iSFL4A2yPK<->ff@ScaXo`qWs$@0s(oBmr1Uh1OhlSQ|eaUKl`1EDo z{XL`Fb{iT9NTxQKa|tc_rdOPdf7ch19Db0<*c=UTSjg|2+RmHUK!yc2Q-RD5XBz{X z_)+NH?v{!FDXL`)dpwQLQ#^wG>m87DDZqUpsVomw9JLuE2FXk+r&j_;xkTTXJCv?- zS(^V#%a3eVL}G0K?y8-R^J||!0NX2Cpx1>wqSIs9Fs($difs4%4Z&Y8i$Se+l!_;7 zp~h_V8k-?3WV#gp9<|a*zq&*8jrDY1WP4%^oVWfwifUUY>5Z$RYEG-Km-lIr?KREw z*GFS0*$%3-J5A`sJ~P+G%2`~P(SdZ%!4Du@Xt`v(6}Vm(a) zsRDj7EPF1r{nQ!6M9em`X~6yknUHYTdkGKATz&KB@@TR;-VM=NAiA5_$x55_wtGdl zeA%z{V_9J9#h6E^iXDsa!F*8{W82hU{f557eNLzxS5vQTh&_QKzP~>83``pUb=b^S}@1j=4pdDSx-M^rQtt4bG_; z{L=J}}~IM{rpAb#nZJA2dE0L&ooUISR7xQHcH*PT!DV4DqX1$?DB5qdp`k{;%QvkdN zE1(kNI&M44@8?a3NF$+V=Gw%+DWr2ce|B_y`?oepCB__TjxD!2LG>%=5?!dt?qq6Y z(zNl%?1&X&84ty@QcMrs3+(dJR&9*m87uVcnhAG@aZ^{2P|F-{gfNLU;J)*!XL(6* zyJvnG1i-E1#PYPAg8?(|?s|y%TQibd-`L>wqa*7T;`KLdTjX0<(1P=f zT6h>7SHeLQC4$|8bvM^^fH0bK0^nS31co!#?>_{cvuZ}BU=;SA{bmVx%*)<}dx z@=A{72$mY?&XSI$g!KmS>T;e9}*Q zAL1|rOB6q8D^kctWkZ(FDS-5pHXNLgLO$@C=C=brz_gBYJQ&ONm$W``u-Z zcY>9S|5>DdW34~2qiomZ5#V5lFL>PipWzV{+^KV6G z!hZt9PG3hrOs4%bt4}7?QI+xqz^Jd4T1RUg3P2WWt!4Ui0`bGDO8EgX(Oc+a;kN z|LNShGYZRrStO7@aC))e6u7!bCP3x}yBR>9s9vDp1cbl@*o`m&O6pGRo~N?l1~7MK zk^J)}I9nD2%tb}Ru|O@n=fU>Teg)ki06c8icSg+Dc`A}q4cyyAFlL6U-|tc_8h&dy zjE^xhReBzTjG9YSm^u@sFze4I3EBQ0vp&9#-=&)}VLBj0d?x zJokz2F@%iAA;l$*Se30s(t{20;@cD!!;|ev@CpdVG^JVwgXfd^+2`&UDi zkB5oT`77X;Al?Rz=sh^4{X(Jxzx12f6tLX`-*HvY_c>3ab$`9kN{La2Od^I8^J}}+ zabXzTLwVfaCqT6BffTUmtGde8#H zC|N{8P?ZzpNF6;YY;z*{lc!8->vQ-tv=s&ny$KNo1v2x^U&_3jJ?)89WDyM2d;N{L z#2zRV#>=YtuSo6f8uN#mjjEgV^6~7BZC5EI4*D5`Ya6`F*3~b0o}*@-RUr8U4MGh( z(~|4spDM%_$q}K2cC6*HVP2onFaAIx6AePtxh9=ZRk@D&Ft$^5ly+@9(zp5r4HBQ;M1qGF_VFOGO2~BIy@-U+ zc59zLHaLwV+k=ORPd8g#X8WbU-tV5?f;y&!84n&L(&-TM09kZBYUA*;V{3kwLDQZ% z1|0b0C`2NBdmTAwxi$fAFbs@wJ#$2#LdKY;sP40Yx{87-MRQqrv;rTMwQ88@-eN zGiN-zb{`6QFrF!oGj-_T>cyURfxO4$13q$1N zKlQg6sg$)3>?04w-^b=P0BD1Nj=@_qCx7?1`xQ(u-RkmY*A}39vSjW{&Is3jk z3yf8-jhoO-D{6VmEc+FEuN*}s5WCbtF3Ns-V*9P+24?#fwjijG$=6!jcHYr-RK2z^ zlF?XX_7l%`qCI6yD(ht93!^BF z6uiCoE`zRp_7TDgimiv%X`OSrRoOIymzNYhT|2`|zOz>8)E{&6H`6;Mxv?K1^J0!S zFKUFN(zB*jYc_Li65-dz3{FT$)U4xmUK(0v2n2W^$Kg8@b@WnI<}-68Kjbz2`z_;^ zMRdW+KgfJ+nn65!>Fe>VAw%6-;1Lb|q40PR2$b7G%FL7nS<~B z+_Q$BY}vuR9J_4H%1nig;@R~V%xRMqUSQEO&n!awbbJ@;;B-nH=h?@_zqqjDbcEbW zQ^AT|*VRKMv4#CGy5HVr80qzYFp_&kh9|npVaE}L=KX@9^-Ke!yAJHWcMF)YfukPM z*P7Clq0?P|82a1QGQYAecK>a~|7|HHvbvbAyMNm-o(`;4m$`FMR@OR+evF z1Y=Ff*o4!pzxHK%$|U*z*i)n>D;Q4wpqF4j!=V$d*qcB3nHWDnE>0KP3zfcN(=JD+ zmU7#w1Sc86yd?MDVXnN5pnk}^Y#UB>k%Yoh&UbfRAJe`U@ZSw{h3D7Nnf`mFZk!Pw z?l0=p|7}zkx*><-W+!IO+T+5`SMtWqlEd~IOh%amr!l$b{ca_g>f3}wwI4}|Z!bFip&3P&Z1X{pRk-gWi6rNOsc-VX-SX}%0WXFSs`0oEAnxPX z`PKz<1wJjor5Y*JPeH*Y#>A>R$txf=0*60RNx>cyQSF3PN_@aIG%Cjnh7~bAXN!NKu%x1Vu1Ur&<#{>7Cn@}J zoUGFB*Ow#LT4dwdvMR6cDIP7-G*o06EOx}T5QHkQ;JR1OyEk)4%#fmLuu8eR5nGAO z&%0H<6h2FC7Q1q&1i3F6(!^Q8kRunpDea$bLJ{mdp9Um7XK( znelnKhG}dbbPBvy*}OE?^~~0Sm9fPXpJY?lQAG)O!zNV|*ruA_Z&_Oe}s->d;e92Sy#^q z1iW#0wBWqo$F7 zUDQ9GbeWp?!;f@w)%}J@0u;-Wj2_>yk4s78LQO-+)eXKnE%B5Iio9H>hqui~nL{KJ z=Vr*`1mCmhOE~W(!q4{r`)?SZ) z@@>xTbzhWuSKUM!%l;sTM}>Q(PvTI)3is^Vw+A~oqc~2n4VO&U{cKN7ttKm9qn<>r ziDg#($F}sC`m^+}488k9<8tGj9Adm*l26!DOQ7w8NdXC-F^*RYj}ye$#rC)p^M4xy z=UR3n>F4>(Yg-{b2(VtMit&gIY5CVn3J=Oh$j&lnF5 z{k7C0eo|bzK(lAGl?j#9&+XxgUqIMR*Bsb*6k{imO|qZncyQ>4L4npiJ?-kI=NV(c zGqp>#tBK!?wCz%^)!c>jbVnn&%Y&zb^8OJ#Y~LQj4>ObGL+NOteX-K-8v21G&Rlr^ zXjV5Re|&e_RoQY=^FzX2gxyb_WJ^rVj|dkM80v=|*f?iCv8BGFx7H0#xnHZkd7wPj zw|0qRAD3vG_JNYv^=l%9gtjAf6Xz1R^;z;p`_tGs7hoXnVC9Hof%{8u}ta&$I3@vO0U=z+4B4`!Atrq zQ6q7nZlBNkSoHQOlFwJ}xI-2AtJ3RCpndoDE70W|CvA3Hb$ZiD*stm z22-CPaQ$I1|heDuX9t#F`BZLdV1t=v7kJVV#f%lrIfOEAOi`Kwr&$_74DyJ=n6 zAb6tt^zc^WE-?on=-nquZvESjQqLTK31aO9!`JL}Y5Xe<<==|e%?%zUv32MJ%bXml z>W4;Pxf``hOH#VnzcMCOZ|z-6jL%K%`s2PL1z(0NKm6+alYSnp?D*z z+OpKsM_PpI%~o*xp^6d9upCu^0@}42&b_Bj_+oQAPng#952OuMFD@8L`2WE9RK9yQ z>5SX8z{7jXGTeqkdX2}d*+1tu{@9%%Si)ykcX5=zeMiCLG3h)uHH-Id8oT+Os!a{| z-cz*ZtH9a66y@ZR>L>1aQ*t+Kfvc1Afc-P5Z+jEOq%K)tWlpCRIY5=QI}OZ(lwt?S zQq>$uT{vxDlm-UdbJ})oku=A<-y&&RHrAby)Vj~FMF*RRz80=BBf&WXWMd_fbyu#f zB6}G*@~yhvZ52=gb?)iv3L$C@r6hsps&J4m`C#`Xr{3XZ4^x&WAS%oEEH=SDWe4o1 z4Ly-z-}&hN^?Ig!r4lr0{Hle7qL*=Ux4Nk?5W0Ivz8oo7etrjt0<_jkl&h}j=?Ybm z!34wM2b^_s4s1`f*vT$}m1i;(*VS@LV@Kj(3DO#2ldgm}<%F-KL<> zuSz1r={)&Rp*5|{1dFaoNrcm4RzGP#x7YODZTIWZyBA|9IhPOe2z2a;7R^zq<8*bi z0?J!}nqP-tcfD9u78y+UyOK0O{%ZXIZk;vv60GLS-EePM0>>Y@SzITiwDYQjoP z8b;3}IqS4=vwQcy=rN~5X%kI6K{=Q}nx z#U4l;>W!ejIeeXT=G99JSMWsH`4 zceV?%JBH4Z`E}wp1H#JS=zF7ZxCA37_HNH0k^i<7j3Tx2NH->oQzOLS+<4>?RJe`C z-`G2-KL0m)L)*N8xyln03Z-ygTa?=>|2~up*X182rK^|D77}K;VS+h*(CC|qH868G zj{cq{w+TfkEt$bQb4l=N7nf2~=c2Fl_nF-83eWeQZ^k+IYjMS+6OTsHE|?yJ##s@X zD@ss=^24+7-F&7XsJ@7@pExq!3A4p|yNfC^6N(=9=o1 z2OCD{cqDZYb2P&yDCy&@Zlz8nt?vBwy~Bn!x362Guybj7q@1q?w)o7~wm;&1>8c>G ztZrr@^G7hNl=fd$5B~1t((--O8cB7`g@LrNo2QFPfAd|*GHnPYiOky?{FnFRb+o>w zh2rrB1xS=6L;i7@`ZIjy%MGN`MEa?>)z;|;R-P&-*a%7Q8GhnRd@jGol%Ahj>O!o5 z#7hDLIa%?*;EjC`m1E?JLNyHP+JKj-ojextI7$j#u5TgPx84zgKs;5rP`BX*odnaW z@dr}>J6Im8dptg)2IsSfvEs{Ii0KIV+?xz1Oo_O=9ih^(J=)kb2#BZ4%t6VqXV3_X zmfIDQQ8VzHEHc=CsCSvMYZ>URub4YrFWNXeJ&k?nljv}IuXPte|0)oaQ3|~48@7dn zORMIE1RdQ6=2)2R_c;Tc>pJyuWsqUo0z1Qo81vKEK%f$G&(T zW#>rn%qQ@d76Vss- zWU(^O-fMNCEl1&q%?c?K9!}2^Ztghs!l+nyFkNzwQXxV0`llRZn8CT}zwd93Y2RwD zxedIl;B1~gtKs@y>KG@_TW%p4>Sfo|qPS;$Mn5mZPYSP4;%9a5n&s-V4Ek#0XUXB6 z@g~SQo7|0n84e-k_>t2`Bbwu2heOxe{b_I7}7U3wK0;GuPTM|flH#UZgeixji z4xJoMSvaswvN=HCOUUj>tg!*nJc<=4UmiQ6A11;c2Yz@*WdZwFSBs9eBe*6o=m$9Q4e{ct07!-^Rrwt19aXGMk=0D}sGpWhJJHoi(|KZQ& z!ox(zGE@ZZh4X#+^8A=z=$|lhN&ZASDuS9_KRxDR%oxtCXPU2`%*8oVd9*<@nVPE= zdoz`54L?ffMdu82L_*i+9`(%L1CbUTbX8cJ%Nv|oy+`m1eHXO%a4kK$f5^ft-7_qfvW-FWM?m#qsCJ-eF=X|J|FeGMe3=2Xx8ZY7NY|{-UEL`46=)k+ex` z-e>$T;oCd!4 z>^heZrR%l6FnBVN6Ui%8NZ76Q`>KL% zh4Mh=h*Y>$vy=#c#l^=8kGSu>{*CYGPAXB5&auOt zWaD=7GI;=5UJG;r;`phq=vnglO7A~srNW-nGevVW;O<<;zH%k`QU2+6&U~7+_;&#f zFykr0a5zni!uHk$RpUxr)vGwy_?Bl9-z>iQwz~9RYj$oOe5WexyQkwVN2oq4xx2rU zrIIH0BYHr0Rr%nEPVspO-D<*N-~erYvSX?Yvb#R(pccQDppRd-D-dkJ`|b915;PMW zg#`c3f*}y>ho8dqD(844+Pvh;>CZrip+DOxS3H4lCVF|vqmc((& zr@W$Zi8gJQiF4>AN$mq2cU&eoRJ&GnD|XnpFa2YScUiLQMvMndn}=|JxcHA?m^Du# zcfiV`YG*PsW_Xo+{;qSKAI+pjcV%e#E4{ceXGKDFvt>Bd!m2#o#kVs5*#nG**JIkP zYA#Z+rNTgUd7Xg!7$@nG(%S6aH80DrL9qWlivjw1zAXaZzeEFm8}LO7#Oe2o^-QCg zUlCNTRUrjXQgJuxB;M9^gtU1LgHUZ&HWEQ?Z6+lTkWb#<*}<8+3BUQ&8Un-pC$7~+ znEzWSGW;ZZXz5>Oe8i@$!K$#21KVutQB1wT@^|b3<@AJqc*1FQk?719x6Ha894R;L z<@Nz#c>WHxo|)?h(>Pk}ex$^7xf8~9>D(BNpiR1D(ezoF0v#sUR7L8dKFjUJU^k4a zwipY2q=XWnwcbAJZ>opvfX&^==X~N6$nE8WFdu6nE~#5=-vR~A(v*w0ej>MOO|UY5 z-rF~ZZ&raeVW&3`LDMSOerCkLB^XqoF9{xv^SH;661w=6^miVQVH>B}P4YEf!j7u! zRM4o_J`KIv37|g$7KEmr{_LB^&PoCKNHnz-bc6=_7Z}&abY(^CgmADVvX zdT+M>`h)KjDM;eQpJH<-*mh;3%jGw1PUSB#T3qUhw`|J2Q}e%G;!3_8Un_pPc!`nc zrw+}J@CpC#OfN&l(lLolxLLf$D})UFm#SNY%@?#dz@a2n@21v@`(GPdD{ce@UAjCd z*a<(YSCYZuElFp&bw|GT^JpzGvP>I;09=T*kH-I_Iz5G%RB>sG+lZ2Q(+b&sPCwmo z@h!`Q!_mo23+k_KwsD`fS)-{hI*xRi37UHx6rR4uCH94ULDc41#1qBR-%(i?PTM5n zpWH7UTh=hE`Es)D81$=tlZ*zmK1c^lPD{!VfiI8dm&p|A>K zC+!9B_~rNe8H^5hYrQ4LjZYcf5o*_an+sOXuJiqlHZGjel3_3y#$H$?(&j~irA>T- z*u%+#NaQG_|0m71{4l?2qzy2#)7W_!lu!sGIh1KmQRKshzmC~HV`&Oq5R@th|A>WrookDK|Ef} z)}F)55Rd<+=G1G_QlP!WP^^1ya$+|+8(<}qy?=sYeFbwt5`7lvF-9?WD}b9UavQQ3 zwVWi9mfCap`0XrQp~+7INV)mEIJ~)ARG{X6=_4G&54ug{W1vHh1~&?I3=xky^rPP&klIs}hBSP0>lNGK3%Voj?OFw_ zxP*JS@qfpg5%12TQ1kQBunJx}Q?eirx%nqR)g6G1N9-@4{~^~XyT zlSnxtFr3lJ!j{%6Hh8$l{2}=EFFebL6~Ok9DHSBrL=uVQcNyM7i#Ghopm^o%Pd!m2 zJl1Ng2&c(<2F75^TJiY`Xa~;zhz7NSOgp~zQlPi5pbOeHW6W|6Uy%Lj$LW8CAE=#=k0mZ}Z$EcrWP&9m)<9w|aAr<1b~&6- zEF*C&*vbQ_Uzd4@ktN_P|H60n`eeKfs&`lZ6hq+oU?4si8O!8W|@%^ueI@)pAT$HCRTF6+{GXZ>%@L)Y0dt66@|*}fagxI zpipd|U1BiiZQ~Lw>A@tDQNM`b$M!MA~p5>1kg)MWyND=q%{tiO^x2K_lvjN!^L^@Q-yN0`&@9@pvy-K6~N0@Tt`}-ipT{epo zq2%12ngM&E@6B}+g&)Bx`)gD+g8EI)O()a}aph>`jqP4^R9+haLGOI!%diBZ-5Zeq zct>scWiWGSH#5%?v`rq!f|2jj7+yyM#BLaty;Zp#xXC8~FjGc_XI*QyX1P08IG>huj7>A#6hzM^C<_?r|DCAcMKA%DqMAB>Khn5)9uQS(hrcyev4;os~Z(swl;h4Ce^Q~1& zMTA00_U3N9v{!uHjkziqOPQn!J?BSaKBe*eyc3o*h{HpgO+r+Bq8nqJ$Irlx!I&ui z4|pub753mJ@6-oT^LThG=5kr%6t^`SSn-Q7&ULMWrvw8Cw|41>_WyZxj`0zUC+TBp z-Vx6aK-cjkZ2*TvNTkA?Yu9SZFL2gfAd&9mOOX|~TBl4B*kzhL;#A zqqhSCcdD8;QxMJT_wFzR>T%C6h(AH8$F^N!8(0qPclmTM!8apq)=qEbkC`oM8ob43at_w zeb#pPV#D;FQ;oYW?zoC7BilI!{cbAfAL0>x!#T1A^gCCk zl#np{{$l0yBir)p`FN78ROWy-mPhSGXK%i%^NF5-uwQ|=v22etWB{*nvPiNlKRa=5 z@E-1t-a_!k$p`h-LaK&lOFQ}yvTF>axXD|+qR}RjMnAvU(oUw3p}Fc;bU@o34e^mP zX^#X88n4xe>^Y(IXlMkhOi+%8Y|H5KBvOO_ElGDfh3eKTG5H`r=z=z9C!@uM z!?QT@CMm;)3bm~jg5?f(^ngf*bw0OxIO*Ad1R2`~a!bYHrReeqW^1ibM+iX}HlyqN zFeQz%=QzC#Nu*mR`2`oB>ANq{z5uPcG~=Uz*)(N0ky#sQ;yYU;h@nF_b9fG74@I%+`sjMGqnW zQQ6(WUt=-ObrQ#Tcr1Txinje*!0ZZYTk2R(<{n_riaV8hhBba4s5;a5i-==!f)Xt4 zK>aY8I3BT3Q)jFlp7xKw45AYByNQ1dZn5_nS>+H~8?^`OIZLCy#-dKcw9G0_lR_{@ zHP#H^q{~=xDJ_)AiEQ`w<|$xa$Mi2XuP;Gytoyx^DQC!?oJE=$4z3!(c(C@on=c%1 z6Me=#g}v4=0Jd6$prD1VjP!nj^t0Y`!;WB$-;Z;LFVV!%3);;l9HMVB{agp|*M9qC zp;q_=Gy4N9c82UwRJ&>3=CO0d{aRt!y}M}+Udy*9!+4uicg&y0$SwT4`Z_}S6e%R# zBxuF%jlLJxLJWVK*Jp}ZL?w@|MLj3eF2zXa6!uegv9Xig@cD25>LhK@d z2;pa7`o+QrfFyKw_|~^xSv?1TAfL>1@X|k=_3p0K08Q5!z^VCN}E>Kh)LhF|LVSD8TGKaLI!plh_)2IDoWnt}x^O&$nmd=_Axuo`uz^~F;$jmDgv94L|cUu-xK!*n3mj0Qxedj3?XBu{dStpW12=JFe zRX@MP$<$TMkub5dRSA(0=_5}i2l3_GrD*k$52e^s<@!38IA|C-Ci!DhaAmCIiReIW z`H1XW?B|wW-F}xV-L}R*;nCSG87~%Tff>p4w0Qkw2hiP%kzI>~A4V9`-B8WB=*xVR z9M8oWw)pZ}^*@|q0aUl@UzUet3YfW(Q7%}%FX%C0rmp4_wfpKXPoE$bGP{hvTwi#f z6L9moRxPNHIRuwSPo}VM3FiUU7Aw8j;FPu@=`G4Dswo*~dY5P+Y26GQO6X?GtG!%<_o1fNE5C74 za7q>a4BQk5bB2Cgm^&sfv%Gi6VA_*+kVxhy`9S=$Jp8KS`_pYM$*&FixUn!V5+gOf z8#NL(ec3&Hy!&YL-&*k{hFZHmiL~}zvTyKiB5qs7Z%%LzaUrzc8Y_1p@Ftan<;N-C z-10=&(5=%xeqJE(Cd)_(Ej?X48?rzEnOQ7jV88s$%>JuKjOzOFysJe1BOYk@<5k=2 zFi}jLs58XDs{J2VUmX_J6aB3qqNE5&2`DNZ(gG_bDJ9ambVzqD3n*RE(%sz+N_TfH z-L=Fnu)x0e`+J}F`9073&+OjWxwCWcnK^UfbLNC(2UyvCu}`Kvkquo#Fq2;5WpQy*PfKG9cjjYI!fH=cr9pzMY|SO zO%5dA8g#hA!|B4-BvJ2cVYG z2F?`Sl`b#1ApS!XJ>{TY^q+jiT*9*<_il!P5??c zjGP#A9)bQ$Ab<&aQGO^u`06v(wsZG5;KF&KV(E_6g}LoqiHI27KhvcF7?Qt&%lm>H zyl?V~(i18`VjD)Ta!!Qm41V%DfS<51#GHo8+;{JO+>`1wZ@0cD-v9!KxMv?y-I+Kn3JDL|NPMkzpD_BMWC z|L@Y&UV7}$-taoYk=%(C`ix{e5`)vt&vuua1O3mtaLIA15NtCpxkOg9Z6{Q1*485b zy|7N?lQuhR^f-V|kmNZ{eLM#=g5bq(x-nXO^L^5_*kHg^kQkB10rE#J2DjP$!w@h! z)u|;gIG%Fb4z9DaEXCDCB@C(vbz|;KyrnsdBY+zm0s9-5_Iz+#)PtT)_hRBt#?qsx zZ{vT@o>_rse?-)A$n6*%4`o&0&ZD@%tnUE!@ry!#o{+2x@d2dg{G$5)TX-FZF-6YM z_xvxu0IOZ75hby{>s$hO82ht8!t%c=e;3_cdCx8Y3pwlgOvn5TIE0Sj-76{iwO z+GaD4Dx3xcGg0|?;P$|b=lDFt9VVZCu0Nj@J~-t4F|<|Vn#u?~u-p8<)-+Aj<&2bR zLaWD2GoRscj&|C*-=_3gzt8&fQjWRjUbJ<3cz_hK#%0Yn|m5h!wwGTbwuO0q*T3y?N_Csgj z`S&B7`Y_p9;rFBOtze@nzX1}v#MCJXytavHBV+;%tOlX&W9lm4uT77?Fe_CfveJNp zTF}R(6~`_W5W<8sUSMHs{P`Ep4G5&Jr|7tD%sK2}mHI;mpO=K6L_)A93G?66oTXMF z72J1&%RWBt8SVy1uasJeVDr8r^3dChUZvMURc^>vBV24Cz@JiE#yemQmXQ2(n2+&sMzL9`V!IEBQIE19f1|>9}<(g1CN`y3PJ5& z4NR+`_vApo%;fs>Fb#TO2j;ct?-bvD(slL-x~|%T$wLA(Q8xy%WtG*bf!6et-RhTS zl1d4f-;uu}{LKiU(3pNtIk+oP0{lvQO;CWk?o4%H|BcchfT|p>^#ykJ#bm{HbtCgAx_ZRIX>0!lZ_8?f$!u@Z zgY~p2pLc}ETVvQ6hT_^GGOswf=sxB;&!JoLP&~D29fRiY+@DR$o6Cy|&OXy|YS&6Y zG03j;FHjV_0Ba_h9YLZ``zfrzTP3!=i)3wlzt<0uGHte9+<%Cit$=eY3?LlC)yOQ& zk!mEI4P<F`RiBGhp&LkF6{g5UC@84mZg%hH8!=#3cQTK@TEBi~Kh& zABPr$^aX&z&L*MG&gfS)Vq`MfYynld2=r=*om_<=viot}>_~}imR$<@DYXXrn{G1i z;k#qp=#TtQ?4^I|q+USKPH1+uuUQB4c=34?z&yS&s`^ufh;FlXe|$kQQ}Cs2@F=mH z1F#7BKEME(9_!w)chODV9&y3{@f2gW-9LdJ7=aJx(Bd3~6&PU5f4ajDU>b7+1ZIKB zbI%GFQ&A!~zeA_&F}_5XLRMmUhgSIyaajHU_Y}AR!rx8A_Aaf#F_Lq3xHY;iD&DSl zajstRF+$j=o=Po%t12FVE1P&*2b%wnw}aCH>Kx8XXl2*yvl5&;TGdxH8hUa_QtI=h zy&gbOVOgyJXgmp}+=evj3QqM%Y5JE-WN;kf7MsQ~V1*DZeX5!Z^f&=nc&~iVVj`Sl zSQEvip9xT@msr^NcqnF36Lnsu+Pj+gp|1)#@x0nlW$e;}=Lp1@!e~!JG9pn5IsXIP zQ+T(!_vX*oBI27bune5KRsp*Suw1hFK|fcjKLfPwt~ihChg)5~AJ#^jmqKiau>KP=Dy63Xo;@n#*c!#W6wYqKi!w-m=SdrlYa?|k z^p5)O4l5iac1V@0lzBDcsWE=Lv*eMfyPE$_cQ@%~C(9^9&(963&5lMhEquSL{X<8!isE_o?;)WJ;i;&u z(QzNz3(F$J1!Ndkcuw*vnNWGnSh3rl-Q+yK$_2-JSe2Hu)sMe2O5knuo|e&n2u3Fo zAm9K5K(s0`Y1k!m(p>v)16XpQ;p(eWh*#8rb|q5zbolIvnY<>-b(T-Ci`+FtVkAS{rKTQ8`Vl-J znbazYx;a1g*_CW+mGEO9+-3`xZEBS?7X14dhnbv)Inm8@cyMcb$W@u%ZvPy3yuHr< z9?xArZYYewTbZ3>_Fj@SC4^oVxUO$6)OYghE1qjbxQUUbRH4}b%22y21ImOKFdTD* ze}~?{Y$LG-dgyVPv3eDyTG1qK)L^J!9nss^e7mP5B_LGp>0zQakjGrc| zf4(8&BGcs*4G0#m@1=U>-Uf9jHI(PS!NCWtq&NbuD|N^Z&C9`0fih8 zwo#Q78~}{1s*@cU#)wOn(Z!A$D-{I~E+mEWiu)DwC58S!km&*M-0ZfWqsIp%V2gUH zx8Cfud`8QDFtqeLWb544T>?JRt9I@yzlyKtndJyent6tGY5uNa;tV6OMD^sIUDY~N z@gED29cCZ|)E^im6pg)b23|^Jdzb47`*fKkv)xXFA0SisORZy_L$Nx#@*tnwgQ{pb z@oa!q^@Jtn04TII3YRr(HO!fj6Lo+8Z@)PQRe(g4RCKy){*k14HnFh6)*b6YbztlG zYIaGSoulbKqR~%6fe_e3=pm0e?Ed@)A`?Qwt-IgO^OFKfdW5zR9Nt@{;+x1H)6ocA zONhd+Oi@~=@N=p5q+ssK&GpCntBe3Xfd6G!&Dv&!aU!6!<;>c(wmOWHGNT~*fXy%I zPib%>Klc>iiyUr|VAB>7_BF3m&;PFuFs$)MHDkaatyDxDcK>`td3Auu5tc@O{>t** zckG{kfB*+ZOZ+;{r~&k(S~KP%Wz6>J+znteE&${``^+prx4NVO0uny4bcy@5wsubf zu^6N}9!L86$75^wI5>X_d}pP7!q@Rxaa_+Pna*5%EgZVq35GRy={#ZKWo+5V5ffF( z%l0G>l8IZh?63Rp&HoT(U5&(=(Y0+Kk?Fm4luQ=_T9O4b2i8M_FaTtDC%`wtpM+XK z`YF1E8pk9|T@30X_8^vk@Qx?B2QfeHIP|`3{}n}_ePz0lLZ=O;KW7KN&WKckU-=l~ z?Lk6WLiQj570BS#2E|t3&XUH+*@ho9nO9}W*cK3T4jX0rv#{Q8O?1Xmr#ieGj3s;I|Q(W{YeU(EzlI9 ztH8gAo47?hT+vLRTt`eV+o`E6Bum=p%s+% zhVGRu34yK}g|>k5{X&-54K5162o(gsFZW=kJtnNg1*Sph?{L8MEJg$PIUG~gsqp~! z@%N^Y|I}xlf=4SFPJm0LONSPI&L>OW+8P189>80q8quzpCkxzS!o7)C-%o z*Wy7Ityfz>3jBw-s@Z|40}7W1UPPgVuMB|a`@ts|Lv;em3>=C)#-r8Aevk~?gNShv zwQ(3sgcq;T-T2M&XRoh$aSpcx%(_Vtg<;G=7+PDSDcLo_fGvs9Q9qC3&?na)cUGs1 zjPT`Q#ClKFD*oK<_k9YriK}*1J~IMd-90?JMqdwRRr`e=OyWH<${}j{4Z}&P)|FdR;5`L{p)3SGA4gUcUb=8cEjoH9v|N19Fi0}tdxj{PD zRk9r$c}VC8X;OUQyl&f0?K%;jq^fm!kGWB{5jW{0d=3M>vAM@wP53!iSFQE$+w3Mt zbCGb>T;$t}m!7av0PW9@6nbso4y;90KSLgv*7=((BvF#V{G8t}#kg^lsv4c_>E@CE zP=tMODI*MRne9{A(}vA5iJqn;F-@XgtvFyE;!yRSeyjW`34d%hJbBx#VhL#g{ay`H z%?qnGOvmx0Z9CFA@XQ$Me&0sO#_m$4q^V5{k~$R1iIDV*a+p*3y;{I2b2_CGy}H|m ztsS%4hm?w$W$>UYBUJb#dzf-74=jxvI@vvlP`%5KK&n9LJqT(mnK}A*AcbG8aBH`$ zHZ1F6;@0z*NzAG=i6-z@<-V&01#j9;4QOOeg?OZD0o6!W8yp}#dF!dK1N?#ZpIl^g zO>2CWBfg4-j$(wZ)Y8zx5|gz8Los;OsKFN{cX?zcVH4(IWkE-pGDtIo6o4a-wrHD z2tPM7vg>yPlT0c2cps529VNzt*B-~Cq*|}0`#9OccY#gBbPK?#+eJ_3JJL3*$XP(9 zjqSYGdllM3D0%(pu4bvKIVO3VKK!@2T1`Lt>Zkn%(4~UYWk|DmEc3n`rc^UBt`(`Q z2@-<0BbX&*>-=AO(%uW}h@T1x`QP4@UtHF`u%Z?4jfnh`FY=L23*`y=9@D1uQWDWF z3uvR^fPxf~#Arq9V%J|dKw%}Kr{y#|+`E|AQW23#E#waTS;*SfH(IVA7tNPy1 z1mxB*BxQA~NKAmAzx-nU=Za=Yvv)}DNt)p-Do@<613d`MO^^_CtYhWin1%e1ja$ta z@R`u=Cx@R;-v6zf?R+|`z2|DWF@t;WgKz#3)H5X4VbG=h9Ei)D74Hpii%RcdGd^DG zc~=VAMfzrpY4^L)(VU4B8h4dqT9mtY4^3G0t`l=Ow^+{q#i91bt07R;^K#euab7q18{u>96i`z#w;kqj^)D zv1U89+zi+xG)4hlp3evJ&msq=-dv!0CF|0{RXdhWup#)cvYp%&w=X|w+Y?r8yfRjf zT=<%|3CUCGHgPTEIG?ed*Jv)2#sqNRg;JLD+n^Z+e13$JBoJ8fBmTcQk%)O*Zb0Ds zPLclFSYs5BduduS2DaHGL`@t$;tvz~AuAWE|0NRC@83F~%?3KQqPP*ard`+%)En$O zv3uXuGmE7RxD1Ujxu0gExLm4(!JOiMPypUnvae;j;(8Sb9jUwY0Af!*=)XCQL5-IR zQ>T>w{x^(ywLjicBX@E^GJYHUm@j-fDoGOd=7Shnef})LMU+?c?Vxe|o6(TE( z?-un+je9sKSNPrE#fH^UOj8#Ny*CBMbBj`nK|FEt|F^*YJWj z1xyt`lXa!XtLuL<|My!i4*O%AU;sbtZuVbrlQ;mcR4xFbMHb6Ew6v(ZqfNJ+*TSUD z>$(3}0wBZj+nh7>lj}Kf zpr)#doz`sod>zjMsy5l^v}E--le82P&q#1!n8#hcorW8=*69O97hM|zZX5$BN(ol3 zB3d^X?$$uMfHGSF_NEx;APoI11FX{{*k7u7Qv<_v(i`^~wlY!=4-~oX(@C9T((Uu_ zU&;aP!9_30Ry&~7R|;!Pd{(r}Q>CBi;}JLXghI_7j-&M`!urDBv}PU1Bl@cBe_}jZ z(fzG-Wfdy5KP98b?iRUEhq94i>9dE;CU)gh5o6KQlAl(LCeu_q0y$R`u%VBqB49LD zS%r&-D66Y-Pp|)~v>i^@9>}wN52A4KsI9^>{o1qg{nnSa1wRMJ%YIK)x#0(VdaQ%` zBYSBcn-Nlul|*BVe`qUElAyPngN$yOz|n@45@lXRw-{<(h`tP|sHvuF!1aW!R`d&I zdibw4Y;H5{L5g_?g$$G=cWVgn1T#FwZsonICRdz_$)tCZ5t7|+zR&#p`&L=2nXl`GhYT|`OX^(+uxnp)6+P^sLhtw zhrh4_pDYBZrZ8C$0Bpbb=9?!whlc8Q`yQe@TUURCXZyT5IcJ4*<_{2U0>rmqc>$4c zPo4C*0O}MTNc3E_yZdO|-U!e2DWmjuh~Sf4z|n%ZD=k`M>co+O{>-)7f)@Ey?q zN?A?G2)#|22e(a+Sv64ynVWT!&*cu>LL}7tq)e>DPE(4$tGJH1==n88p0tH^V53Ub1Uudz#fiSM3$Pst=@O%3$Y^T z8itI|=#A|W^eVdV7Re75uG)m&l%x>aK3t`B+)a#(JaBhK`M|-@2QbwA;=CpW41yxI zYNFCt=b6ygmpx=-!d^ZX=kTBmP}|J}SfBM7i8CQd1_8+lK^z`o+*86hazc`)gd~p$ zNe~1imjomjgmJqBamNHC*938?gyvZu%9%n^h)SE+3%{}o9SV9qB7~@4yV)1SZ$g;x zYd?`&n!b2S>P`?RM;Q0|zy3&$2;yE6#w8H)@INEDCXCyrEqF{*_N~&PO@UV(dnp{#Gdgy+aEG7C%K}7-rzhv`B+6Q;AlYQuEn4y zR?(nur60eYZV>Y1Z z+_Z_x24eed(D|L;8lD%tVEjwOSoxB%lE{J__(H^3V67{Z0?-85 zy(iB((QgMgXC#Ry9{lXmMXjN4@;Zb3&yTXL+>~Cr(kVKCdqec z&tf}>8*n8J-!ih|N#cqd4RwCgBwwZ^-+OPkly>|t0V}8SO&O5iC4NtCviL)=kQI~o zLRQRN+J}$}eyK`_w1`6s%cWXXhcq^1&vy+YJSt<+g{)Dv%x1OB;+bQk<}d%sB}u>5 z{yEXs&3YtxRVsPaW^%h3EkBKcJMD=(?T)MJiaY)Ee@dX{5$-e&uIeLPl^qXrGwYq( zq(hU@F*Ons*+>m$1wUpN!^uTNMlny``tf@e$`iSK9?&hizQcpNNuuqSD3-6NjsM3M zJ+5J4Fs93^&LbC)b;`V1eZcYH|9h?To|vR>tZ}g{gt?Q)!gsiH;KLT6i)UDSLM8%O zj8eJ5Y`vRn!{9z~3UL>UUSwKKnJX9{X(GHbtK7IiXV>+#PHy@f` z_?;a~09fZeCJQq$E9ht5*h|3!-s!`Fg6=~^nHs(JH&-EIg)iyr%m_wQ-|K-M zLxTZI&1#Eua~(Zt|EH@>!Bk^X@4i+3=*2slkT){3Np`3vV2GT0&?uJodsXOXRsvHr z9UNL(NIJUq${sk&>8QfYfZ^HEr#x`f`*le1L3a7h<_7c8mH43XExz$(zVRm-lkmFg z{aFs*ujgf^#5Ss!HZC1?*3EivEsQ8Feo$FtP+6ocvbAg90rT0{wZ-SuaP%cJcGUa`WMIxm|?4s$^m$v=sxsxG!oEKO) z#1Kio=yu|#!om6l{1eVRWKRkUlac>aKGGW8v_$vLPutbdl26a^}_r!pJD{Nv$J z)Ja{aNzwlXM|B%-dX0~jg-5LsQ;iSvzmoUAvQ8c-yM|emW{ySE#zaSsMYkuHDm)jG zOt8N7wdi=oTH93%4LoIN@n_Ym78!WOAQWfqSS{E8oxX*XwjHMb$we**XyUvd;2mLq z@T$sh;HE4Cb-%DOK93xG6k@GeAMKF4;2q z!xgB)Si>)7!E=!575$s2jU4v&ynjr>A3yb+?U`q^x!-Ktb$H+QOr3rOalQ#*XnRB0 z6H6c49ZMfY+>pfv8Vre@>0q3x>{hp|2TH%aDyEZbJ;lL#N{IdzpUe9 zP}qbex>I(z&7|o>q*b*im7L%ot;72C+ND5kde8i*(V`&yD4*M{eTJyxS9aHiNYDMt zZyw^_9f}??dNoS|b=?rJ?GP3j;HnBb)DeAtX_MXAGMFv2ABxPKLMpG%A-wi4p=HjV za$)Y?21HStIcWH07nu@ze?)?~ZXJ_%9kXr?lXnd>9)?K@!;D|WBwfXfU%@0@!Hi$V zBwfaIS;D+p#B^Ewa>__kI80O6PgB@UQ~2X`VGB*+&)0=DG=&v3g(WnF1vIao51kUL zx05OCBD^Lp^+NLZfz9_)lt&>7(Kkj5y*z?nq#!o-FBo9)$Fk}KMM}4~khI&&17Cj~ zvi;SLYgAvFFzyG6Tnh)_@PA=E#y9DAv)|u@oQX;eVEA6PzRNL*c$0m{!c`0%kgJzD z5R29kvEFEvk{a+oYYV^CmkJQ#`f*Jht$d*~Sa{nijtmPyCVjwEnkq&$_!VAXysMy6^;IRPIZPa3 z#dJ7P4RTA0VIqLO`nb+C-kHq zP4+7Qj(|jsPEF>c%?}-QCTv}%h{BE5A1^cg1LOU#nb9gt{Ax@H9VP=cHEl6&k=AGn z&mnjJ>o@6d*rOg0HDn#qIa8eo9ZQ7@9>M)k`K*S^`8HGX9onhHv{p6fqq64;8(wAm zQDRoNDmT?(c1+0|m=h$l_xFilZ$nyFV3TMcD@E<18MqJKGddE1h|IKywIr7Y_%CZO z(Ay;%j{bUSWY*(WDLy8ZC_=x6c!g~?Qx%UlDWP+8?wc>*G`Mgx9aBxHX@@fwSg7|e zke>$dX>^tHYK1zFji~4I3M_)#xJwl01f93Nti*n^Ssai&r?qyW9tlo2)z_q@HA{jH zh2l@9(5Ty9&(7x0&3L;5%vFJBFy==S@6~5Jp*g4%FfcJSguM%MW*2M6h?uQ62omIp82?bML*v+vrLLo!4jj$QuRrQail$PhKM91jk48Fr{KJD-cA zj0_*=-CqspT@A05XRDVmk2(z*WXDHNpNpTg%V>DVO5BCjV$TiG^pGP%gi6Hgc7G&C zB^`Y~l?ZPCSf2`V(udq#_iQq7WVE{@chDdRd?5n9xgSQ>TPv4Li$bjE!-NG=IL*B^4%F0xzZ?E+0-a0H+$HH@PXMk8N)EA=RTU_GljfJ?hY7 zRPvHo2jV}H>UP2|FLJx=vx1%zv4&pk4KbXqQk@gRkV#jO@ZD%4E7oV|)Gk8Ea~)_q z`mzAMV(GctdYNrL4=KN6^Q0I#%K-h9Mrw@sAQxpcB`z^Ystz8W6mK|03JPa{( zR8xyQzzOYEJ0d%tK^-rQr4X1)^{&UaNT+9WqWZdo$eoaT@B8rr-_H;5*0VOIaae*K z0F~lht-{si&QwYf$!G9UJhAiHaP2Okak<}3q)+)X;6{VAN*RGLJb`#6E@#qK@pRLf_(yBqTrDvXXXesWdmu*-7o=aV*%}PyI|K2-%IIeO*%GxeOIcK zE_?PSI)jR41I0gfj6Q8MzXZ3e3J}&9L%lEhPcG8$J@n1JGtwBi(^HMncZp-RKF-_^ z2SNO_?e4eNZb&40Yt)wg5NV#8wta-UUTwF!IMo{jb9RG0 zbFz%r4*#N9^0z4ovdNH2yR*A;-YNI+h?YHC{Nsj%ncc~AJ*-9 z*R&p*s(EwY2GUl%!w8Gvy_%-H75VzAa;1(S@;6Q1L@iYCsum$Ob)x8kfAS+wqv7| z%)}q~BOeBgTV#@YQ#zUjDE{FZinKzV+=`m-+c@Nr2?XrKwEFZuBc>btdS>i|?A(bO z;9i2ez#-Q4f2Ij%2Sf9I6|KV^9qX!%+{7pB)8GbGs0+d6RENi7XxqU}#Nh5v$vc*z z>z@IwQ5|;RmQ`vWpH_HJ(aKc#INv3gv}${PexWaT zn|0QFe@|6DX_^@6!`NaAg>I|aUY(8>qpJ5)+UfM)1?Z!w;Ssbi34e`$p>PI2dFyfV zY{M==1jgv@Ge%1qqYd_XSiQnKeHPttgG5~yHmc63EI&*QjkVw1IZb^%9axIpVCR6S zp^g?V65Xbkor+pbI*+kcLW zT8Pi%w8m}Rpva|=FOBSix!$MQdJ-KCtNQ1x^^}a+4o>%+`q!*%TaCKz;}0HfXA}s> zbyerPlGD1CCXMzJ(w)ua@C)ZOAi^26x-^XBo8aGH?X^oyOK)9Sdfi^s-qgrNLTgEJ zVv`!Y!T-Z2r?b~i^*n9l(@kC&tnjEEP86~H@3bM%D+Ru4*4_X|l>xW+HQZjScfguq zOV`)4u5L9qfB8Bl_*Rx!k$gTmY(VWjUk9xIzt7~12Gn2I4%i8D>0YXZ&>DR5c612& z8)gUl#iQkF?wsM?7r@(4vjbb_N%J!!vyG+Qapni9sAL2#pZRNS0Y8h42P5O zFNdhPPra5c4FcX^XJ-d!>QB3;Hg}FSBJ1Pei;M^BE4S`4fqQBSvI1De6qul+Z{w(y z|Dvy_ZzI-QH#H3~Rhl9rl*aOI1LxM8C-yKb!i9aHgrjRcR-0XBzoO^-@I}f;e@#Tg zIBxH=MJS=ty<6`;tO|*|7a$tQi0b%cd@fh8MFl<89StAAPP-$@T{%73qNfFKxSW-I z!j|3&?NH4biswXKudzG!fQubmV@}!>Hiw@pwuU7VjdnS14JKUXR=mk`v+=mO)8)VY zneP2ee!7SnAc3W@9X)iyMo?EoD9hY;qK>IuOTg8biGrty0m|^Dk>%h z{hnRS0~tXaCpo@eW3y*BI^8&M5GSM@p?t%(xIx7L>yd`pcNXJYtAw=aM5g)0?{dC- zX{gVh`u^?C-sy0^5U7Snp4F5)hFNvJrDVJHkShpmmM%GX+nKP=-BcA@eXZm4G)kXx zx$aX&WUHIv(n^WTFL-(6M;U1gr1P%~$lbz4!ERB-3;eF=6Pdqo>)D4vQl#1aUXFRe z4HC}Ku&bVMv(ZY7yeDVL1|?_9-iY(%F1HE@Cqfjp2qUr?t__sFfOs1r&{8todp2uftx0(s5xkCg-n z1!cx%jokz4>c$8RFZk6Q*(lrugMu?UY18MfCw2j00(E*um@*WU;f>gGJEe*55MV0XwsI5%(#u_roTTQ(S`CuZOs+h$8-aQ_?3z{&Moc1zBb zH4vA7Ny5wj%sn^!ET?hlGiixq&Bat{enr6mQhuE63r4zh(h+jarp=!Ii$eZW&X*SC z+MblyGQph?6;(F3AdH&UC#~fP>`$H{@6|;=6!tf#9pz4tDSXJ4!FQQ53?W+4+iv6j zOnPIb+m9_mUeR^y(|ge(M7_$V@&1KS`VW<%n@%Q|c+Am-yIJZn=}~a!2Q7(IoA{HV z&h&U9^W%Xl*{_>>NUquDpPV9$viRc}E+!mo%3!P7^mwP^8nY8KXlYJOxw7`7H5Fvjg1VtX6Bu!xcJZ`HY#<9$Y-lzJ6 zBZp?taC7MHh_Gk_FNU2Vl=LHh0Nc+OPp`Dwp5M?OW;=7%phzudsYK{jK$!GCZdxHiL$H2K zAyVtpg{@0$7#xb<6L%Tbiv2k3Q_M#q;LMEx%=#xw9YI1~G`Nc=Lg_=9k@la#kFv6} zD5V3sZedaFB#0sV{hL)feP3D*db(eKvEo=_=)(U>(zjB{=tU@xlVgu`PN0w@bN;V+ z#Fpg493O7Hm!rrUNl0<9;)3mOpMP$0qGbI{qjZ5gFv?a|SdVzql?Hy6qdNn221jMSlgD#WKm> zB@U2$sWn;8yus`0V#5n5w70K~$fECJgg9{)+3Wz%;v9=1%dEd zbZNZpV}BYmbF80+&Y5HX^6{o7`;{ESu=N}3a9(hl0Mjcav7OO*EvzieSrQM~PiV+A zQ`h%E%5@ddXZD(D%W{vMlm?p$zc@oG1`CE%8FPiI*q!{*xRv9d$s}DycZ_g9e zJMN1xyX=#p(3L}4p1u|Rj?cCYQfzyI`-{$IK@#wVgqjp&#EwmXeQbgAI~FKS%gKo0 zeL>D}XQDpzi48|Mv#7PK%+=w|%U1~gw_o1=rAv%+UA^<#RS+8z=<4=O!L8*;#_hl$ zfCjqRKXuVorcXU%H{;f_yu=_{tCtD9?wQ1iv&f0nnHW6#T8kH*Xmv~pdH#fy{UkB0 z)$hIdBzwYdcINIK-g(mbV?n{!6$$-x3RYW{7_V^UCNjh-&{l^k6`$2ZBjM|E1y6E4 z#lpTFEe0QdTYK_EYJwQc;S(v7?J*%ZXr4Kg_QLu!S}LxYT%a;tt1OCpNcwAe;8d6q9`a8J4fx zA{MN`p7f)$mEq%yfcs;K*w1Fy9lVCNZ>{RWu8p;Fmp>Ax%uj|aEKOP93}4?A9qY!i zzU4h{5BpY%V`2;*GTtZgttz$tO}G`6=3_qILQW`H=8AQ2cY5GdAaZgyOBLyP51dba zQ2jX});KeVk72!@aqMWtV6sp3v70d!zm(45l*=LV?Ol+*9-(K> zD7P(Cwt3$y=2%?NZ-p@1`N&Tp3t?UOX$I7|5=g3<&dh5dyY`$@Xx`ow$Dud;Zfp_$?mI zw>$44g8>KcA3Cqjv78*&KNhTW4hY&Y5hJVeYbF?5idj=DH@{Exi*fNnUvOIW#WBZj zpmp=*nHBgbk`uFjbMg_dQwxK3N+{KB!rB+s=PU!lERxz`E6WFzecL}MKfj19cPpWA z+DNWX&YYt?@fYYgz<;BHYZDb$?2A|RMb$7D>pL}B;*sMEISnxF>EvKsDn>sCVx4)yG zVTO*Wv-#N78gPKj@&p5Z)}50}e-feT+Mq&otZuL@t8TL?Ivix)_`MVU%cN~UA;2Fc5{Vydi6Lbxw!>gBHrgLI82I~IaDibiL_nto~JT>e{>=E zW$1HdKvx9y*fu8u`T;X9vR(KEzEd3I_XMP+;l$gT2Dc%UOK>)93d=KNKg3euX?lFt zFD@Q|`5bIrg-!(IxsOjXlKk5su@i>#&fLXsz7pQ>#GyBF(dW$NM;9czU!$I05!#xN z7NMJRLn4a@^ODPE<_yVLK76fxYn(VMj+9lCH7ybwx`{1+e!?~Np;veIi|m|v>B{u% zEVCJo;-Z>;Sj5o`d5m(pn#7g=eBvxSA(4A}SpHv-r9RKtPm^eF?jO&j+I%uYlN<6Z z^YAhk0CzsavkvPWTcJIY}Ql;pL|sLglTcWqyt7 zZG>J^E?sokiWNwx<-F4Tpqq{@BTyT6Tbgl}sKU!Nd&l|sn@851mshjwEu+a!WPk8$ z#sbQOCPlpzwA88A>tP~{WLZLva>4ek!&`LS##_^g&de(?S;yV zYXADfDOrSZ)3d!;oR{4)7_BzQ_CwgSi$X4vN@f4t$YwdaLUlG$-cv0I!+&13qOZ+i2+vCItSuN%I=E9Qx_y5=nv zZmfD*ewXD6`d2Pnv;DkXP5$mDTbtzNVVffF;+*(FriyPy3c_&DO0M4ezGq!P#xc`M z{W-MEG0l`^Zp`Y2$g4_M$~4txVG_cw(>!J(=cZCG@0i!)nkBzC`CR2(enG`FCwzdi zF=CUB^O(E2c$|}LFr{qd{+IYrgm8*e6{115n~4cx?WoOVQ_Qz zetvtY+3%L8Q!28a_`QkJJ2b3rO}VH4o&}UD%0S_c8c~n5nr2a`u2|~N3RNmY<~K(& z#Z3P+YPM1>rqm1)*VI|VeG8$`2{!^|wEV=sXYr2gFe+7~7ZiE}BU1THM zU+k&Y??FXujR<)bO4*t{T+RYMO_bQhZ{ld5G z6Nmqr^8^{SgpB+_No2w?6$WG!AKywf9p2obM+NS^(H|p(gjs%(6k$Z^CO8n#snP5D z%53Fr7(EtGuVH^C$rqVo8bk2Hp{kzCw~wzMXkH z3Uf82wO=ex(B@1w>$@{|zWAEXz$e(EVJwMXpD`pnlW-Mpc^xY#dEP8`lR$ z+sU3!QDk{hVKHF2(o9`r{4X(Z;;rPI@$g?2{iiF?{r|*pu{+jUu_I9<5n19`@+ZMj zFJr`|%bs*;xi`>xvhTVi!}$27G?zopO(%hUC4Z$@CZv}k;|>##Bbhwh!XF+W!y`-? zp9v=vg-moyxWknXPTh7!U0s((hi%DX=~D-inw)k{KGPyoVQt)~sWSWypKHlOyYCXH zTgNtF!%{Lb8hS1WEz~AD)+o7y>KYx}5C0MRQT@YTt6SsEAM0u? z$K+2!Vb?bA7n(S1y=TPa3OTIR{r$aA^2Y@)Y;6L$*j&dZlJW52TLeN#A>rs5kJ)zW zYhMIs?b9uVInK}`EXJ+NzLE}w!;!1T_a;*GCNh(aJ6lgindVJ~%$J`&wn;4hOJDV) zx5CHBtj)47>o|OP@DstoXRI~>iujtwi%A6>akP{!e=zjE`&c1=gtES=*J13oAR={2 z>K)jse91l{nDonm%~LxbV_~{f;%MoAQ3AbQ7{_dD1VOC92z4iP?Z*VVF<$^Figo%# z1lxz^4#ShmHTI3++vg71zRx(UlB$U=0{qs;Q zW95F=iYfX8;ic9lgk@sd4I}hJ!{63QU)|uj%U7Xtv*%bn z&F$Urs*Q?#oo@$=#CKb zA)W9K(T^T&aGGQJfJu2r(2Mo(S=^ko@%fQ#|D(3}e*H3ma(~@-9A8Ol=7V@a?Tl!G z^D<+dKiri-3yK%v($Kx^95RT)#p}7Ut{06-+;_^C>!aHF%HPg(6QX{ z2j6=`skn}fLqFDd(3X9QTDR4Ob3{X{d5)Pep%$mPOs!r0?N0rI8*=d18F7V&pK@*J zA1((f9{NnPPEhNg-EO%N>WXo13qU64Ah zoQPG*!}SadXVtRu15Rs%QARCQ{9Hhq6V;1s+S$u2(jME-fz+;4?}^)w^zPkNf`DFDGhcZgon2t2>Y7hoW;=ve>KI z0}MC*nH|mZd4|r1|4+Ma7lxGY&^&uL#B-Z~<}Z_1nQOLdW=J-hU*i#&IZeK@KV)7U zFW068MZ3Qzd3t;o3H~{CLgxD`?h#N5=I)UHEdT+{5Y$z=uf?u*uDLC9^HRv*0C@_@>hBDfh~L3FXes7IlP%~ z%MY8TX1TAKuZ5B>$-R7`^Lp;3fY+;fGlLFhIK|sI{n#sdd&My$E^ght=32oUQjV)- z-D7M!RxR(zy&==A^^)oP0{_Gu|Lglg-^$)TD$f}emYcKlfA~!csokv+%kd+aB?5?$7=UQp%6RH%)k1e(l7zrpwD}-NkAi)n2YW*Z1VR z`L}N8=g0Z1*Ejt1eLi`QuG0LbpX(~Fp7;^^cvEKmy9u?db-Xo)KSuv6-OT@|ck%t{ z%l@u){?;7vf70EMoAm+Sj7%cjkU>fB?rd*hA1PUnm4RWM1Oo#C)7hOak}b(ZD_c(a1qSHPw&55rt028I*&L7@Qv4RxY( literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/mkfs.xlsx b/ext/fatfs/documents/res/mkfs.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6024888400053c38c2f83b8833681cc2977e939b GIT binary patch literal 1491997 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 Q?Upihagy&5jk3bygF5&ok6_gM(U~5=%7C@C(Bo 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

RrF#B>I}LGPv-=}SZu*EN$R2u;lu4)k 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

B0eK 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�o*$udK48p+S8d>~dL2 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

lH3*U3rNywws!(q_4J5`W+ik zZzkhwtmApLN*9d2{1h)ynD~T)(^If@Sq*57{RsiqDF>bS%>ka{pIR@+gw>R5MjHpw&5<*UV0L`@u# zXs6|!C~9`G&9c;=@Zez+dG4_^NCfJp?Pmgi@>^@RaEEKI(xH7xb#c#*GrVS z{y#5U2lXpTcRhq*M339t-aNo2J@%p3i=V@yMhNnWJBda>fX4wbCGa>Ys^A06Kl#Zp z<-{x)oZ#rwTeAtKMpVm)xHT*|n6D4`bOawq8(ma;PSQNiz+K7FN4V=^zqT{8!)^sS z4;YQ*UWuY`pb(*suFSHsrqXc$eerf4`MhNJ`vOkSHX+dxF-b#jR%^IUIL)sd>!|XBaYLy})_(Ae`ST;`Lh6t+NYhGTZ%=q(I3F=;5P~FS z8q*c4X8Q;-Q_bDPU+EsyFYcG;XxK^juU4OY(c7xacmOyoqhT^?cKSvh>0r?W?MWGc zI6Uad8fl0I1H6#$s2-fjI=GaXJZtmVwQ5k^5K zegtsHF72IQ?dIj~krd{+G{!voB6;U$qZJal-5z^27az zfmHEK{kd!N9(Y3B?5r()E%4hB{PYf#zxH-N>DUaP%NsJ&H8bV}#ZM^eC_FIhP1yJ0 zdNf_qorQB0KRU-4jme^;T@|z6=@h4N1lQDK>&_{~9F8Lh^rWLa3*JA-{LS(RD1*p- z>_DyV!qn^{Yr1W8u6=OfRXEJ?E$=JWZ(Dd})%av~52^jyil10+$E z5T?D(F;RDQL=wiu$WKTQmsSD4!&%v{J4NNb2KhT%p1^5_Ls0eDO@NjysOoYf%&SoPd}_LEx!SJKE;; z{46wnwuj7Cyghc%*Pzkjm(wtE8H%UC#{DtYX+O)f)N*(vh&O_Nm<(--XoC;c>{Jk( zL~YA`<=vjRAW2~N zA^xH)B?IKP1cI5omn@#Br!DM>p7&a&7`T(evkU}oHmZ~8ef)19EEA_6&;~vLQR;=$ zO^EX)^M~yc`1QMn)n~U)eps+tq^#`z#()Ha|5LO zGR!fvDodvrT|=Da@z;!rU}Q`#Rtg5kMA_7h=%JXqK*ssmPmIdVzz(Z=sLmNC5g zO{tMjN1Fqa*umu>FOoSv{PVonw(dE%{jC11pU{#{P40PHn7N9o_Fk|XI24CI2OArCMBIiVm7e9b7@|mLc5t9N9Q!3m7#QRGa9tg5F+i-sbQJKt%Gi$$ zbRw$w?vo3~e!|M>Y7KibULzT3eYG2$e2vY6POP!^V8erir6`qeRlxU;QYQFnUK(TG z8T3E8fLP>rHhIy-%T1frj^&oYou6vC7^ih@|569gHetP+k4urzY-9L^i`_m7G&$7e zDq31q7OAamMU;iB+_(~^Pt=At)4;Z(jj`6|Wf^fd=H)@|Njyarbp~A#UBUD@K|qdC z2He(0GelUyoINzw;5KCJB3u<+8}FRUq;Rm?1jzO*vAz?bXQAhgA$vG{T$DwrMM;e0 z_3)@PaEv^hJ^)0wS26sGDWMMC)n^JaBEmP0siI?0{A#KTG4~HoX9j4ml?(SFq^^$y$)Vvag==Eglh18@(5orc>Ka!;a?Y)c(pdR&GVx$@GHlL zV}jPxhg!%p8cFW4HbHaaXjGU4)?xy^ZYR_EIjgAFWA=xP?HsokZBxPKqUa#c`nnJp zwYOY^8dwfgRhVQ*EL?@>7tA_0McLp=c1%}29RA7wSLez4i`rpL5F9Tj<|T|ugU&O< zvK&;W);^Q#DfF{3;l!DOHs@xk^~+4FgE8_Ec8970jgW{Yk{@(pmTIFsip#*<&s&E7 ziz3Hwc=N~{GMq6bD;Q<~x>jsNK`Y1Y;&`4I^T1*%W(;#3Cs_GO?mtg*Z`8ucE5cpH zb(6BODDTx8%!Eb{Wyr7yhqZxPIcnGsCUm&9$!(IRFE{=`B+s_^4IBmmt)@c#hA$>P z6@M}pLkFfJ0=h9Yw@Mn>k1{ISGDq`!FePY2K|vWO%TC^VJopzQrJsJ5b~*j3+S#;M zDdAGNL9r~-?{G-KTQIvjIIs(J$VK$UwbQI!kmQyR+*fK)@BVu-GbFxHz;v7mu{DuB z&KEzXYPYjZy&XOyCCPk+4tUCHXDtY8PNtB=S@qpEMOZgP7aQ$bQ zy)aDH1-uO4aH4KNNl4Gn7&^ni@K3-=#C%choqFI-xvi+6bO?Gt{b;8msap_iBNE{5 zL;ljH&Mc(I1d`pZ5+!@=o5(8Smw^)FF}u7#!U$arKc$Cdj=C&f%E{%|qgy5DI`OQ> zVo-u`a8}=MPpZPS($mG4*0WnNdkyOSo*ulYl}Y=EDsu0jdnk#XHTCaXM~`6OYv z1blRme|@Xq6}tH?h=mFYzc%L$0I-*=3pG@*gq3*jB3YdzCM~U%xtvZZKBD1NjXBKK z!l>@%<>DYJnyRIFi7kHW^a)) z!MbpLRyiZ)49v+Vn}i`6NOFXQad2-@rBf96F_$V;5K&D|6UL2MeP2af4G1NXtU1MR zb1QD(IPfkzo@z;pD&BV?ius@qd00u~m%?ok9Vf!0cpX=*1l^aj7 zX1cawHa%4^^@C|3r7{bK*Qbqmu#_5w{Ydf+7I0_*im&g`2@e_a87rpD=B@xEJ3l*i zHvl61$>KXUAV|09fG{79EQDoSPa6>ARhhkhIH*|#yaGgHaS`+HZyPZNZUdudMcf2q zrwgf_7bqR8I+2q(%4Y?HI0?d#1nuy$xg*P|6;AzcD-}JFWl^~wRgee5sm74tJdMG> zct*m5hrG8HT;K(gAxVB8-dA~FfSFpT9088#2NLPv`{CL7mRm>aA#HM}xhlx(>~dSq zonH>;A#z1Byz3rdw?gU4d95wE5zf`Og7}leZ)oUQpqarP$5}C-w(nFgQ{G<$EwA1o zkj{~XNzm)j>kAgiAmdgshf;v6p1T^L*oXMUl(X%)JPdXNz#yjgJ6tyOSyB1#;Z85e zK4z5cy{c!~Sit&YQuc0^3JTAzJLwC-WyOQMZZTdOH$;q?qk~P>?S43vx(Z-%F&7X% zi#VHwfmWR$Iw>oe+9{{jie>HGDKY!BOXCsd*awuxzY46KUD~oO2f&lP4=si8DmY7E zP~=q~pTlC>%6uKxbVyzZiPKQXQK#O>MY6lr=~t5LS&?zpTic%~n&Vd&fd>EEW5#D8 z{sZ?B0_e$RcUHb7utSdaj%aI_=XZmtTx`kAar_#DIGYcz?B&V)E)hBKq&N}=PnKu? zr^Gp8Ey{553>Y<7nB1ZL)PaD;F5Wi_zRZGwkmEEVU_`n%6bzPf2X;tv`{OC6*UNCU z#_@mSca zf1r;1sZGYq;q>5`iI`6ki9m*Rr}o-#{FsxLGiA<`El8D825!*8rvT){>F~)Z5A7_) zrn&|~<`3QJ^=!xJbY4pb;)5q+T)4P2x~Q?is$MCcQGH#h55!$kzq65_$hMWv9>Q;y zW;FO=WVZ>gwFt3+3+FnDez%M$d{4TKn!|@9f#kz(u$ly35JoEh%flbQcD0;~3mqDS zdRea7Vr5s(pPy>K$wx2(M$mf9$3hcB2|cKRgD()wLSg63M%~q};&jgU=dgn@8w(V& zuj@N~s=-p$ZBDJbEaK3=7#;O zci*L%bFMecoyzdC5IV_(e)w6QjwtWcY@@=^%QZhVfz1zgB(1K>p9y=@;HLlchtXX~ z{Y`?>gf7G7zW_mYmFci3#GizPwq>(o3(h;Fc8Uu4dV?1CWG+ECGqj-F?fLyqZXMal zq-&h=F(}?!OwSv}nMAZi#T?6aKXKJC zm+$badQKJ^2imiTg=oh@T+)76P6SG9Badc@Qom>TaI#tk32gUy(an;*nJb#Ki@qrY zy^-l^h;8{n@?N6brZ3Y*$p^#kN*oU3=MKNz7%4dmsaCKu56BSq&3Vt*zV9VlXM{j% z#>}qWvtGNF+c4`|xdb+%H%q#QL2MRD$7F}ZnC4s?7EQr;Ik#hRWD6Lx1O+ld>{E|+ z1=TVKJz_fjcUmHtQ;|{A<^2&Qi(jVvXA-mIfnCNuGk%_BIq}$w28^8N&MM!>CK^al$X6E>{0SC|>Uv5Ip8b89#9-wJGKvgc|laHzx$>Zq4@ zgj+#FA_nGkV(2E{Of>lVKV0|{Wl;c=fCHWU-9WZ(_XQr|3L1Vrk&mphs(BCKm)xHA zcNGP7-pN4Se9aYw+#3 zrw<8u{D`QCVAmsZDjau|@%3tT`;hTP$NmbD1@Abl=2`8#wr<+|(m#oemXTDx5EJm0 z-+h3S{JwvadskzVgV0mNAN(+*?Fc3g3SN+Z13&2}F`G=+=dbY?3#Ms`)z-^Px`t7c zJiMo^a)Q`=;iGNImR)F!q^Mm0S)qQ@o7MUi7=RdyHX*unl>;G5UBR-brmJ$WgmU(X zHVi0L);ABQdhQ0_*z}$MX3qjSH0LMETyP=qq@ag+0zX8@7C}H}lwG?>4;8SAGvPv0 zzxVR&Qw0P0NxeKJ;@S0JfuPD(Fx~o%3k68B_xUC42M}+GlAiy4?ldYH6d>k@{&d?7 z8#NqrM18NfcF-0I;B+buNg<2qxMb_JnJ^LbPt5TM=gqg*gHS~TF#iLo^Q3nmuwqnz z&l!Uy)Tw3WX%cuxl=)E$(hrJ?f%@1ttIz%NtXo|=adP%s|0u-Z=7D$eh~oe?NU(Yw z4i43T^N?3B&_Ua(RR+;9&@yn0x^3Mbk>NsW)>Axt8(CR#b=ANE)NUSHEls`E`t7|M z^L6sGlIh?e8u6}=>_(_`PZz8vy3l=3FYQF|G2o;kxyHA<4vJKELyu&DpR-L%m_k#t z?)pOeanj#6M{d#SSreRc?bz`9=Iiz+H+e*In7&d zyP5is$>~YdiRM&noCnYeej(IqqNi#1=E*A8mjF}9*X(SCgVRe5S%cpr_~Lt0%1LOC zPb-KU`P2~zH;7Q2I;VUNW#_;>a_hJ|7m5~hl5bYLIkm5EHmqImdn3$3r)u}R@{CS* zW6NSzW58rc>3^oY1Xsdu^(xnN*A{Q5G>n`HA<35(lwiwy6;)l zXPrC8Z*MZP3>oVxqU#<&;1NGP0#8CGv&S|~D`mM$Ha7^P=N6t|9C*A!XjAH>o(*7F zq;5z`!2PxGL#Z*|)D$!G1-9nNqDnTl^Ng3dr-wb`v=cyZH|b>+E{x#LQ`quhF+?oS z$5);&B+<1sx0v$D*m^9Hb?&Q}_F7IPt$lE{SNL3Z&_#d-FDV=ZW$#!huAIulKUV$hkk%0(%(gU-Qa>hmRR+qSzX74=!1Ye zPmt(AHPw_@{;&65;XAwD!t`TW*{M)CNTUL+=J#4H9BjTNnY68Z)G@>b5zf88sAH}p zhwwQSZfc(pmg1s^!TsQDuV$Q>5ce>#o++hxZ^kWZlt2KTQ$lO|+?)y!k1`9^NCsVm z^w3{(0cI>j%7$4mJl(IW)dv1HFGC>2ZeI>&n%Iqkb$EfWoE&YT!pnL&(vFMEarl^Q z)AH}wCL6K!E9gcblLc3`Yr1Du+AIR#N1zE{Xu6R76bZv z=E>S$NyaR4er|*r-uz4KVA&b|_S9@}6bgBf5v`edpM%E+s)WMMVk-n)L;M+FzPl8t z4uZjzmBs*lMf6g=@urEr7PVW;Bm^*Z1!m*tUI^Qk+9?s); zbH}P2UW9uL(!qnymCF-F(d47inbqH%D5RDqX2vgrwQaP#v@?DP^I4!J78FvK0s|nMttj5!9(FR!U z(RG8Qg5Y|$9={+iC_b=!aRXl_P~_?V=0k^^4O$=CBw?m6y=3p>fq?0uE9~x@edCw2 z!OM(RiX@x%_f$?>`d@E8qv;3(rBa;RrY|ZefxO&2up_Id+tF;x)#flJ)0oxCe|$)C zt4rdAF`g$3jkiUgNV@SixCKaw0bq8rH|-ulWRWQJ1d-GDP|3A^6XTnH-v|rn zB0+bTUkAI*ulFe3!^6IpxO{28(n#q<2CN)UWDw4JHBF?p!; zuWXd4FoV382`WWTy~=vZUn3_2T}qJ$<;?Dd;s(UBYmuBB{X!=cT~y+-1Ll#mFn`{%L(9Jnb#Yt`}tx~qg*roLh1)p)_AFOPm{Kmddf1<%1X}DN1%hfz1KKC8pppT}C*AIv z6VUk!DjprR(p{UFx~{q%}F=U)O;lAZ4KirG2DGs^oh8omjk;nw22kblh{w(;SMaB3Kz*8&0o5};q@R= zpl6bG9k8Nf#|$nR79{;uU&*p8rOO+?ewkESP;Rplr<9sgXj@@IUZ68kZOL*6%$}T% z6N#`WM4!$|wwj@x0ybZvOYIk)qPtYc+4<<3yH3i#C;_6KTD-VM`}3<1iARx3N=)d4!YEY9JP~jZC=ESf6-C-o^$-Z^Ym$`d2mWTrk5nKhDo?3i?1~F@ zg-fu_o6(jdM_7&-ai4$?iIbB3VuBQ+g$xxpDX-!{o4iwT`f2Vy)HHQ<-o>Br@QJ>Y z#iku??0T*G4*sWAto+XMPCtXCNIrkYt7~D1_E*Y-6`ZcY85Oct8BTV=SMAEN^I0bY zt{Y2qxCix?Vut}Fb^y?hrFH(BeIQJ6XGXgujM?RGvp~+qRY;bU!OTzXlt10>TP~>+ zX#{*$Sl}K2y^;KFke#h~jX6!3`FaQfK~J?&-pky@y_)rmatgZu^lS49JL|-ScJ#)x zZKZmL(=a)OIQ(6qoE(x=lX}S=Y!H?EgxT79V*u+w(miMwUUpMRHwAf{uNtvV0b1DE z3gfJpSSnppo|Ya+!}ZO>?+w~}XX0@YD-3r+L?TNumP72kR2#nEWwCnaCb6VGx#PK7EVDw=yeu)}v@qJc+D50i zRy^~>HJaQP19{2BkK}u^s}*ZC$mu_kq9Kdp#{0wR0>Pn1un8J#^=g<9n75J zNS2LeLDi-BN$+CA>i`mbTGzSCEISSUF*Q}qdz`T(;z`D?cJd3|0h>LkSzkN;Q*eP% zT}LpJpThJ%|3#+|y{`n~I)t-inbJ26>VO~!jkuoe`~I8!L9$?Faaq@DJi0h=uvFXr zfTXAJ!A~&A^(J~~YC3VApzQL~xm`$m3E=rN0}6AF54<$5uuGas6D=+wcc=U*mgnY; zJirdv?wvh!o!!N)`%sI0FOWD-5JAeLs#i&>>!vA}KO17Mk!LlWb_w_gGOe^6Sn(MzyhxBF(NC8%~N6DR0*()GEO*!4+OxDDAd=fNk`LTn5d zst$lG8LpuK+tTnPAOx+nUa%xg zm67N?aN6?YA|YtGT6x*!TyN|9g&kg(0ng|58$C@hGH7*=kX#N}HQ?oX=tS z-D*9~_zoK)2z-s;Xj<8&dZONLj}I@36$?R=GCQVczqpx+ckBeG?oQ}9G<6%w_VB0N z#w=nQ3Z*@Z{cP!w=4Hpj{u5HaSxL>&gi5lfo>0>eSckOmy&*tl2$@TXe(#+SWyQse zi|V?SFM3abiGs;e+rJ>WD zM>s%BJ}$Nf*3ZMQCwOprraea;vlW*y;=7lYXKVMgFPr`+mps$K5_%Kq5#QZY)k)=SnfDwp@lO$N|UL`JeZ$%1oC?5|+PcqTQ5 zjlqQxCdS+F=*pJI!wFu#Uq$|p>Hk74?zshPY%hC)fP}-T3u?x}5Ip#5sHa~Zlwiq}&#Xl2XO}-iO9edbdOU={<|hn6+_%7O&^(fkD?CNcO$Zc)6h102IV<=VRokvH zs1Oi1E?~%=HcUsBw@7F3eC&hf>{*KA{ZK3BUPO}?fr&8(f_ha`@wi|#wRr6^gf?)q5V1q z>5n8zq75IQ2FWcAJz|s-850d-zmO$qYidA(sCtomG8JU)(bdTJ;f)a9&$s|P^QNQ0 zeAzC53C(PG+;CnDnW(z%h+*^ikv#gb21%sT&#M;h&O?D0?g)XhL44omV)B$<58GMu|ZUJuk-UN4A|<0>2txv}KCQFeSX5JQOUujBFEXn-j6=9z$so0=}^nL7)=TI#^2tjF6 z>{Ei~MOv1M)LJZ;-2$5=Crkf2FpGxP?7LQ!Ssf>)E5Qb(J9{O|B@vNA+L)-zaM+2Y z{e2$fL6R_ymv;A#Hcas5%yEDRKQMU~`zKap=G4@h;pGarvNl8-d1w3ErIi&naTP8?=tPMeB4VJ}K245kj>Mp&spsoY}r%_HCetj0V1 z0ohdpI=4I!ptivniLXM}Fxzax8d7Q=JSH=4~Cf%P4q*hkn!Pq*jd*fy8>ZmpFzNVE?<%_|r|C`Zg6 zvozb7FX`mF&(tbud-DPCAm!#W8J@3@1xL(Uj;_)!AJ~R@#E#2KzODCqnm0C|oF)#A zm--KbA0-V)0ppg0FwKs2$c*$SX^B_Ehjcf2q9km218jR~(?bmUs9gjKc+WbBtVk?0XmPadRxA{t#VaYJ;TPG0q z!#n$rNLjC173eo|mp}^Jo7J4pv!f3DLlS1j=Mrz8WGtYPn&o!S&VHF5m!tfGGC44f zIKn_EaR}B6&6vm?C}2K-Eda}|G{b%<{%y^ywqh{1WOi$JUk*Zy-Qg)&Mx2^s^wPh; zGV=`&c=m|Vi?84YgAB}JA0Cfb#5pgxUB~|L%TPKFNk|qkn{km(ILtnjhs z!1=-p?s~2B>}5-udGoG z;mqM}S-5c)MgY3uL;$r;Sg6D=(`-uDsM3elesXjH-&EX5NNM{M{Q+F+l3Cn84K7il zV_Y3)2dfho@|aQkIu+x|;853wr9=Cvo4wo4D38zypirKC`_HO@7?sy_JJ?BiyLcVP zHN!e1^yJx&cPaw(MD0?I6$_UyjIr-P6PYboSBWJF;-5rOb(Q4#iMLB}VZc8~7>b#* zB*i)@H{Y1E7(__m{8?e({-$AASMe~&4w-Qi!h67=%Ori8X-zBVK%BncBQ1>9USjJP@)FQ>y z5AMs&ebF757(vdh-f}-(fn#D!;=U5z_Z)i>dt7!kbMK6Eo@Qlpc6jSI81bX_$=un* zj4hL9t#W+!w8STH(c9EF6YZr@7SQ3IuC2Iwi~nFYn#IpJnlw?E68n?@UP&n7UkR>m zec@hB)h&pX1b;Pa#I*To)J)I-6n_cpQYl5~HbttX*R#ZEKb9kEAl!2{G_OKfS|7Wq z9~;=`y#i=mWCe(3nZYYmue{MtKL*wPGc7^SomC5CVq$@-cITmcCw7Q1Plu|^hXo`; z8_rFPzB)UzKT8svAWF<7BWL-U{KD#6LmY+0niyXgy-zcQwKuGL4(8QGvc=&eDP33D zsR`|;iSLISiljN_oipqO3~5~G6IDFi)DEDhajUi_m0mHGE&)Rly1cOY#q2(L-R5|; zJ{+!;!re(V*owH0DS;JeH`aVVq-xVD)_@KtDUtCq{5oT?#cLL2D3X0gJ~Ach93e&I z=G5o1I07IdARj|hxl#_BsljO?80E(3j;M$ckoPh`_`dTQe;4vAd5a)JMLZ_*o*d-S z8b%TdYu7qEp(HRooy5R#nDoL{w}YzYMU-K}}OcZ^8Y*G(qV zvGWrayMqv?*#_3Qaj_wXZB*_Kq5l%n{xPZZs+}My=|!?TSAFH=En6COq{(|Vw0um+ zJJB;mTW%^qBRYfgfg01TZQF?r(>$GjVAItX>TSiinCfa^fk66-fFqVCn~)LzbN5`VbaYpHp8shj57RE`-zFOt;Psqr)r{h*eC4ezW9 zQjaW&W;Kv~V|nE&b;ncKy%o<2JAS;s_t5R(}?H{ui>8lHQ1A` zWHXj1knK2^>GxQELnECDhvszHCbD&(gaD@q5raR%RsoIF4JU&`q$O>S(b+GpId?osv%u)c*D!-w3}q<<|>u z0}4M9{okUuBDQ!a9bo9B4*hcWN(RVb9tX@sY;r0z{udq_3SpDT@J3#_o915XeJ8%= z;#3%YYX0m_+9ajUYy(F&VeTUIF*q+Jb5#JYMq)fC?)Lre9Z)!2`V}St;^fRw&#?+9 zGk#=pcU_+5jjc59?;r_G1+|9*V6*K(vM`dwe&(nS9`*ifAHEUp?JJJHjPd`=fk~Yl z)Lr$HpcH$SXzMLe_=^A^>44b-YdZ_M1s|oWRSvY1k6C} zOR2&bLAb8NI&u~I2T2EXon3Ndjqb4|V4nEX*4jKu4zB@y=BwRyNC4kvH1ITR1nGTdl)jiNYyX5(z7RsR_V4 zpd6Q2@n=W-D?ikb7%|t6(NOV(a={S-jGdvf?T(#0_0xecO4=aZR?s*& zr?(&ew}mpuf#rL_EU1nQOZ1=i!YP06Szkd7Ki0CseMD%+YsJEA)b#KZn;WnbZY)1| zNrMiGR(itT^d~DE*dEi(Z1<*ETx!(g@vY=Ii=5SZz9j;jRYwj$PK)s1A>%6Vdl?+8 z!do9fW)1$sYhD#T&2L6Ai&E&V+67Nscgs0e+sVW+ES8mU5NE5kS-C}+eWT<}(5It> zKc=MiGigM3R_IcLWU_^WjOQ)na#K35cC7T91W7A(+uS3Xq!v?bR>Qr#D>a0z` zoKu!-F*cd>nckl)g^VT;rPcxY1p5%+&wRxEC3gaR0@(RHznl42^-;2Pbhb$-c{&6L zCyO;%%lAkBUXcWr z2hwTbYyZL&5){BRT914pn(~|fgO$H*FtK6Sv&aQmniV_GptFe!ygJl&T%m@JGuEU~ zjhEm)F_}ZSI&3$`bG&D z!PyTLyrelE+5$gU3gA@4F*_Hz@AN+aoGVlZPc8SRO4R4d4Bxkqqi6Em+pRRsnw^dJ zvnwUEV_^8Usz652N~s#_{t$_xvPi^3AC6YBh0|AlC@WsXON3Z(7;nS(-~kJBtNLuE z>jI%lH%QHWfkWm*NkB?8+R^6}@OA7t1?%PedkM~1k7?>G{TQ${flyXm{t$iD!YSp| zs@Y1{s@B2|d-Bq8`%DuQY6j$fDv(vIEATRHgLpaG_7r=0(skV8%Ze*(ifiLSUWIm3 zs26rQ-&a9Q8-GZ_6c`qXa&ZRZW|5k{oM*)Q#si$Haob(&!GtIL{zct;u8QUzMa?*h ziz!zJXkBhlW)Y`I<&QE^sC*iV>Yhl^F~M|E)q~f9!lqZar)z8Y8c}DtG%8?qPL=2$ zd{LN5=cfGg2kB0@iHl@{Jq~1U`;hf?%cDa;lof#eq_eWHud1qe z@5Ce|$~x6sLEVWyqv;o*r_7NrvG0m0s!Z(dG}=K@=BcP9|4#B>prbTj<9X!GoaD6& zJtjS`zx|W0D?YJNF$rf=LjO{G9{S}~ney%*pT4$T*LYsy;KhoI2P{whc#7SK^eB@w zPu580w%?tU;3ZsB7QHQ~b0CN`Hh5p@Y2OJc^lrn?yy+?B7PF$vt%Jz~b@Op~MYUoj ziDt6+Aip|9*_w;(`}i9%i3J0B7!ch%?1C)pVrTc6?GQNzW@;O^6n=L`f=Yfl1$E;H zgh2>=D1g!yzx^L&-yRoZ{=WZR=hJFqowq^~iX2v!nY7lS#WG7uNrj}P)H+PFQ)*U= z)-kfxk|x%!bW)_E(>SdnHM^fmGSw`Vp~J+CX{u?a-~E10^E@g1{`-8qmY$yH{k{*^ zb=}vUP+a7U!X?>IueSNzj|UhA(7L0M84a>$QrFaleFn03z=E-bMipQ@lv%!0Ju`mp zA^Y~b!+lE6T>G9703HCLJDmZ|pwi;^UfI;MWGs+!-%O~SuPs>i)e-4dLmoyURaC282dPDuYE#wy8Ypq1ubx;TfJA_^FV zw^6n_(H!XT7^uqfq3lmwzyr{PUJ?qky;cht4OC*X54LM`K;haVVxX?Uaeb9~JuKP- zz1yJ$V1wQ0q_KcZyt&J?I%BDyKSgZ0mc?ggJ$3jT;(i6DO}Gjl#mgAV-9N=#6ez_ZLk16E5Sa+;o4h(smZTl!bQE89waa2?+iYD zHDS+w1k`}P->quE)%~hE5e!NlhSfhE*t``5-l>DR{>T~>K?~ii)5DnPgyL=R73QY& z1}$h@ic+ghk_Ehs8?6^8upEJXDC4)o&Sd?I$ZZQ!|2CF!B;{^jf~^(>&IXo^vPd3< z@YLMzy`X(E`heeJ#T87Ii`A_DF|jGqRbHxQv|A+M*U(WcfH_W-Irmyv-wGrGE}nt+ zeSXJuTkG{}9=pnVA>km1!uRJk*!_VmZ`A7~bdUPti5L#V2dehO1=0L73q+y3;T>Af zw1$q3YU}2cCcw)Nhe6B>3ye||>@%0Z&Ru={9qgR~i@l|)Ckr%tufYC{*&g7)H80bPrl%mA} zYh^D)l}oV5;kedrQ*(gzS!4vGpOx<)(>XNWKc+x`Yhi)rNk*b1$v3c;ElHx^n5=}m z%P+~%T8}hD$)khPdbtM1*0Hl#F`=AO74Uo50&ZFqv=%c`u|>uHh*xS3_~jgQQTi*h zHsAd%x)qQqFIkpWT($i7JtC6ygf!<+a!NXMfk<`Yvy}$)OKb19=3m^XXj3^1r_P2s z?ab;KjkZAB(n6?XZ$}wTi0RO5`exiQR7Jz>#;)yq*@Vk!uGBNE=NhZ3jiU5iD({<&~eN-A<{Jh04?Rwz}77L*~8>?INH4@y! zFP@G^FCYAvu_z7?(DU+fx-0yJ;wG7FJN6V_;HriP@a8OXULOpDA{L0EIgz`%uv{X4 zq~1YBi}el0uwen=j?=g~*n`7)SYQc`IQiGmbS0LGnXn`f!W+sek|;rc;sSNFbTW*J zlUoWl9uYkL*&(Jm8iRQ8`W3Sch|fGM=h4o?6?fmUU{p%#=^I*fEf&Z?2^NGxN`)ur zk)cNtGc2pa8uII|RY5AwRnjZ_@5Ho&+~5>{vK}R6X$k z?NPu}ctRDZfCvRXW7Tw1xG={nh6b8DR!PxL#EGwJ)MyUCBeF z2mo8*#FRO>&+T6)Y|o+<(=Z8yji-C`G(U$ZH+p+8lq+-(D^l`+*>b_Eu$!NEmY$1* z5R#3V$)OGb6oJi1+)|C!{wi^VTgae}kto(*ifoU6M8+FV*ODiUb}M=($bTpCH%5S{@3_0sB4bTE^^dl7WX`q?5M)Ag3}bzLHa!V0~MM#yqAy_c~lLp)>KsWvmo+ z9cJ5xA0r8Ck?X7IKxTy1bYaia_zxD0=p6Mdu(%}|7*5_T^YvS zzOlapqyEQgz%)ba_ujILIo?!*k4zo`{rhywv_JA1U_BDQ(+PY@W)&PmmE*xWPb=={ zEiZNpg>N5Y480psU?!Fh#Qt&yxsp@pIX?;QezS}Y2K-?6(3M7>2f=g%s?rMmR(QNo z*vkRirsn$%S+M)>+m`I&U(Xut222-FQ(Ny_39GBj<5wo386=F>F{(Mgdfu_XEnLIAx2* zMuD2V82&0Mx^``d(X7{gyH7-sYj{7>1O|rsnCaR)V7Yvf(~owW+<29SqnBS_^u&Ky z;p5Tr@0@SIuYMc-zd?sscN8A?jW+)^X(A`2;@(NSO~NHDF^8rrUar{7e;K=tpQXxr zxJMdf@ij!N)6gl_L8qwj+2^i?JGNnbSZWA6Bw>_O=Vbnj)RVB>oL6h;RHkJ;IK3%D zUhz|(7hF5z{SH+n_hF#m{z*vSLL-X;h|@D`4I|AB`3EAxe`OEcHhi)1e*Umiahns_ z(Gf2d|12s}>{W6j;)FYWEexS-_)a*K6^V3uZL3+FEzZ;72l*FlJU?>X1Lb$-J4ZPc zm|CW=6a$j#b*F2Wr;ZQ1l_M`OP1TfVntTTTeZ|EE@7{*L8~muiH0ie` zwaaHlk5&wLboy8Jr{fep>;EXUPt<*FtW&&_ca*N*A@VuKHsVg^gc=n>-B4Sx(ZQW3 zq<-hDpdf)c<9D71zw;vaJ*rOGZ8GCL<)c@v_|CZ?&EueV>0!^li;XwK?`Y>V^>D%I zP1dt&4S$ChFgD|1n)Bfq2Ck(!%Duh)8`<2vtNfwO(vW3B2#SqYLJa*aIlMiiHfSH+ zUaAf2Z<*Lv@pi)Wr14?rR|o^MzKsC~1bCI@M*KdGT+v_sI3a!c_)9;v#D(3+23Wjc zj^_mNi4nEXX-rfMD1_hk&WhzrgniNuPYAokK3q_eIzjAjc9tD>S2IYbyH>?-5v5x3 zmz5r7n>Kzg9O}dq2DmlLLvDl2*YRk$*8!sk7cYm$2@hOI%Gxxu-C9b|*}ktOYT-oA*{G}Vjh73d7j{r*r7vHVY*FU%`SLArv~?E_ zvwLNi-~Dapo6_Rp&La=8?MEsaofZj=!AWBIl5Rhcb#29!B~hVnJ0jyGsflc^>i*;t zY$LNaP|D+{vb7+st?XWFF@lYahA9SE6qsHPm$i9hicL8Nvppt+!OLl6_e#vNJg@ zv|+BsS@F(7-+NaSIl;k=`F9GSCpBSht$mg1!G|hJ=+de!Mqg=gt)b&dyYDlz)@r?z z-D_Vh+NM7vDW|2{V*No?w?E7E42^*>wn=|ZSd+THor{G{C@921P#D3gZPVtpi4UFv z<-@6p38vIFY0Z_>WIg_z2AN z9zuK}UV)id!kb?U-4}dXbT6guQts5fBIP6}I1MOPJ<0XmmfE}?T@>#j{7aU#6)@y= zF2gKx#1Q_0I&>uHfw6Y`lapTA@EzLGcli5?qBOgJ$setrHN+?5b^FJ+c#*sT@9ReL(D;5Nb;AmfJfrBlFd9){=! zM__=3nIV7JqsfQhFF>rm>&UmZ__yvt?Af|kj*TZ}E!rl|^(Dd+XUjrj@F?xbH-6TJ zp~NU&I7P=<(*z%6BLUCx3F6-l zvRRQq6P7{X3xSgi;i8Agxtx76ROHjn&I|}kHX5whTZ-=H=6r?aCno&r7Bih~Fw!jc z;vX1MYgn2btp2=urws%Tcrqeo%wvzVyu-crWWh;-$4I(@PG(qI&ZhS#j>9+E zZ|#-Ea5lIy{=$w~Kg0D{dai2o%sVIQUggQZ$rjjXFF2xqV=&y9gYX>d9;9j3%x8)F z>feU6W4h&A{xD0pc34IUf9d|>2^Gp~EUiW>CcXD;tP;we8TAtgDjM19lqya5N}(Zl zqIdx7x47PqV`Q(yFQ)Plj=$kIh_2rnFO6XPNr$WuqOuZ#=D|9y75{TbF30Md(H95! zScwM|F1Lg~Q24Aa&&L8x@>Phyo{kUFJovZauff~dWQPA&zeR*QDUPk_vu(HqA7+jq zzHWkSioFyFq>YXcNbCRdo5wl`nFZ>~n2h78`wBXfK1pO-3AUKSZv`I*I`bx;5C-0T z_svO7Oez2<9Fhfm!%rc48AslG%D+D){2t`jj>W?v;l%pu{=VujEVwoo3#4Ba4n71Q z>`{*~tRT%5Qk}Ncl9Rb*J%2~%wdM)T5EjPP1#g2y1xbzwqpz&QONE26@D&qdx5+^r z7kxw@MeoOlz&%A(3?9g>2fX`rW|3LWL0CkKUi{J#KWYxZyC91iM}GCZm9ydRAB1xb zMNL+jT@kv88#iGQ9O{V#jYZCna7LF8fuaFjo@_y`b}Ua&fSh|=fG8#`dtmQ&pGZR-?t(ZU^QXuXUq3AkR! z1Sq+#K+(et=aIGBoeE9q;mbK?*42fh@rQ`?ej{E`Y$wc&nK+TC_7(~2nj4DkQvy=q zMbqoOCcpm6;2}J|Aq%fC!89oI$dd0pufhMFgc88!o`f2kN~g`y$pOS+EIjn=`l|0U zQ_348#ebdzMg)=rUfBwS83iZJZplD(2JwL(ie0)bv?GP{t+GGh5A76F>K$zj-jvUUBJ$*z zMEIk@g$-_sDM|Htf%9D+%vomm#0~1o(@yY5wS0-49rkzeDEe67()+|WhNr z>MajSJ}FuOA@}~2UTKFT*pPUWYR6#paTX*Oh@B?gW;4CHp&V4(c zaenwlxNst1n-e&p(=A;Va-Tj1KhOth*`I}AXEte)c-ZTBjeOfG{Ow>t)IY`iL`9qt z#GT|>wP&vBBx8TvI1@fN++VC#UwLa%cl`n$L_^ulSuxfAy=%dj{U84VBH?;ZuaD~0 zt{nuQ=?>)AMaGLF*jAl~KP5vMDn<>8;&@spF!kqFwRQX|D7R2@!^)tfVQ`3{LhiO2 zWk&M)c^)XIUY^4T6kKTbpJ|w_d2jrX+!>@8kT5x2Gb5CKZQaDKWqprBO{V6&nP=yh(!y>Tzd~ZfIO=KpiPkv*)3;+3+L63puK7xB-Gc`j>!09>y1Y3`aM(`RM}KFnP0rS|oFfxzqf_K|sNT2k zazb5e*JpUQB9=CBLq$*v+bs_UCtuY-R%DzeYjBfJ+nUjwMHN1tW_2O^p?hqk4Fqnz;BXNIAQYmy zj5$MTg}H;;eclLK-Bnw$?}sb;eD?mR;Zj%e-J`mA2f=s)LEBq?{l1!*8KbFumikcH zk-;}5Gl}t{s=S5^*E0(BDHW>V@}{q|iYDk2YLzH9Z(OPp>}tjmUBPFxOGz})Sk^(X z1^L^*h=I)RA&Za7{c~j*nAKGn^-IB!i`D{Vs{K?ljz><5+X;bFsFO@!yn?Ll+pP4D z06E>Dh${mK$pdfAP>)zQg>?>C#KJV$*+E0a0>eMhb5@UvyGTW zRi04h)vZ~lz0n~N)UJp4w=D^(%ITIVfe$W1l~W@b>D+{R@}@eFc^-zwUM@}XD_jkK z2B76w6e+hwumdAwG!S&*PbQ#1X@0eKjpK?fDB}LU3WDZl{uVRw&!6%$uq;28C*);r zDUXS(e(qy(w$t%4l%NXHLS#tq+A$jjS@7Y;c*w^5@(4=6*|R!-UM4g`33t026JbK#4QEJ~z!A!} z6-l4n|Az+^7^JgEDCt(-nkJSs??vqn!nTtB#CrK$e(ypl)I;<-G+<-iS*S#}Z6-T~ zYEh$P-Um-Ciw3!%l!8}a{K}3@2SywDrt1G_0d)0Kf8N#cR0#;@RU~Ni>IFCw1vrJ- zT75!=t`GDnknOkV>+ou;&L0=)D~>~K)$;&)Av}$r;g#M{jP(Lops1f*y5qE*r;l6N z>xVV5$5B5WuthTnoR-~p&|L~YHBardfu1|WB@55f!=|c_Z^|g5N6Uv_*P%+JO&H9m zeRVl~;A(yRHHiu(Yw)mW(eq&pfU%|gF)dU?u(=BpqCX)sCu#x$wZE;~OndX{fc-aJ zE6~j(djM;zcS8jOYtw)D2XQ-T5aSzn3-V_>uAMP@K)qwsqK-d4r~h`+&6I9n}av@)t@jR)3c0^+lI1JuyoYcm_@n1|JN@v9zWz!)1&D zGcXOhKJpzLoAh)%N^a|+d_p~kJpj8@`P3EaL`~p2etrLr{t8P$g`5o;cwTE}`PjKp zUZ1kUz4|1v#3>@98e8Mkq>-H(^Tw}@7gy!Ei*%DpJC$?L7U0fub5I~vbvDmEFLU4u z8r@&APP}vhu)9;a;4yFYbKtst!hf*qaDP17vtq0!B{ua@yPx;1L+ROf$BPSxz7ixY zR^_k{ckcQ0_epO$U4OYWT%+bV37>Rs=pB5BEkWovXBCTMQ@V~Lk&C3!p|3k!|F=|l zB0S4wx=u9^mm|d=?A$O0j}K6V`?JKYVCyN26Mg+DRbBu}&lSj}L*|8Cm&2`T3!RJ_ zwDQS~gGNKcnihgVJH?6+t$OYhskU|L!=TN(R!yz5pnT&ZIvx)G+P%bZ)bhoaV< zfDSB&l4Wn#?}i|1{k7qXME;|OBuKIwIWzz?j2%3$H@(Q%BY=~kk6Q_HKT-Zb{lQ79 zt+0I=bno0l3?TOeh|ze-$WYY&>tQYz0KDh`EDrn)wF~68dgcDx-%Cek*9}{)58K@J<01g8&@ONUsy z$K2m8`8B))=HPKw2^GYPZ~${80GKXLf&9-M6s5Tu?*O<2U05ZK`#)yl(MvZ4;ywDs z)bRXq*P#D~zWwHv7#t7vsu&Od4UiwHP|DT;r}U8Q<2|O)@K7wi9%qTMYEuuDB}Q=8iA%o`8ZSll7ZF+w z{!IJ(7dSHn-}c^O9cLQ}CS!tFW1-^bu~yWBW**AWAUmvuR{w@)L9BVK?{6*A#7;`W z<~N}w&q`AwwzFjquseF}-ciwd5B(*A%JG!Fg<~5DM9O=pRt`|D7XA@&kAJTVje*H) zIRzsu7D@y7al#b{!b1!Kh9iihijKzU@vk!OKUK|zh^W$)$xyQZ6;hy$amBVUtPT(k zEwrrN6*-E)XuCiOsgpQ&Hy9)KlWOG8#$en5Ad!*Yw~G<&`eqrM2+2-lZs13QQOV)&=~^QPYkUdQQyveG@l80!l#j!(0)40;ue{v{h}K+Dql z9z}G@H6=-~;qg6#ote@;{YcPN3@e|_(z8n)?P@b)#$|35n=k-D?~C^K6|^Md`-`-5 zNZ`H8m-T>P5iorP&r{z^s8BSQ^z}b?18%O;s=2FHD?HE%K_KnxQ~A;}=(wR%>b$&y z--nwRHHqEWdo1H7tG87w(#JImzR)@lB^m%|0pscM!;lGY&MbYUEYAA(d)qH77`5`7 z&_}5DoB$cqrwwDI+t2)5Jed9jLF!%rUs9}&#?K~htvSMF$k6&>n2D3z-kT5ld9i)7 zyfU|?xBd|zh+In>M+;`*vY0%j9{?u7~%zZliSY;CTDSs1t(u)^HXd;Jwm%HZ$7E@ zo3Tlze;I+ftiMNoNkMKO_#6mwo6Jdm+#7Nnko5Ia=lBQMv&2-3uM!Jdr8-gP_gra5 zpY0oGjs_xe#~MT`rAOHTiBMt>^iY>he@}^ZYcw!LG?WyoY4h)CASqByUe0D%q_#wD zJ;DR7tsS;f2;8L)wDtiDN6_@Jusq&LI{tkthC z7{&MJ{E!fX1W}}vK@3XJs^I$EzHmd3Srg!8lMozbB^pdXLi3D)ZSp%X(Du+#{ddd$ z0xx9grZtK?t_p(z8&@W853j;4i#;F)o-Ava}Y|tZ$)(cVBMvo1)cr zr)YsSZ0U~9$5wmjji$6}&U5%n6fNt}3jz^Bc*%g)6IVV#?B@zrl4l^k>)DM^5wj|} zd9eS_xVIa@l>;X{f1VNc%DH>2~sQQE9M?Qf&cG7*5erlOpCGB!Oqxk zBT4Z%{;ysMUSd!LOi#%glS*A<*qsHLuEG5a$TE$;*SDM_k)Ia7yT-FNp0vqf9|7pc z-2SHGGHCuto)5i(aR zPDLTTg~-$n4zfEr<0UCF3e3IpFI3l{u^<%;+T5KzXBr^x$u18|yao2+-zzFF140V& z7E;Lpjm*+f`Xp1|qP$|!FOWQ%sQ$>UF26L>A7R(xVuGoz}4C~Q(45Fc1dVr8GP;Y?+WN>+mOr=Q$j2exFCiNxqEhK+`MCj^4;{mpJjj0j{ zgRD8C?O`!-c7{$*C_Ra0-reJ)N0dDtO>{C%yFpY@kn>(0MQxi6K{>?gT%5 ztMDJw@YDLK>up=MuV+yO>c=wpB(QuxMwW>o%lSE>FyNPM(>}!S3DTzA)xHg2`qG-K41`p;Xo6j6%11^H9-gj9SAg)o{OG8iP zVgJb5nozR`)Kd(mQEYM9MvLu$%XI!XjDC5w`J#Jt6fN=QChVc_;7TxW0aC~@8!R~C zgbu1J^8{M3hRsJb5ZbqeJ|biUiELYdwUIc46<|^_XzrHsyJm$x74mfSAhg_{Wsveb+@HqSL!~m;i_f>g9R187d#YH zjecg-#+je3d$33Ca_c18(Ydh59hU}Tm~w!l3i?|T9W&$n-m(64f z!A=b9DvN6dHHQ&P+@LPBEdU|Ikycdgz*j;2Lh3_%t9ZvX(3liL$vL3#5Z2B4iN4xT z$9LVLBzw0s(kMVHhqvCZkvNV>ZkB~az1ppc06|l$gc4H!l#*YRvM-WtTE9eS=s$(i zAL4oFae5R@`qM1z4_{Gb?@J9gYk|XY!jJ$rH7G|N)R~=MWY&&hs-WcCJ0y8fdLnHa zBAwD!0NvAt!M~XF+r4nFV-shh!uE~=WTl_r{NROHV4+;FWaFA?(lBu`rh{sNe+JXn zPZP^O2Z0@>Y``LEqcuf9^>Hk>5Z!^?PM4BO<<(`&05;UCJ&Io;@}lRW5Cb6a)UVX# zwi(GG=TZ7actZ@{CvSA=;DEP!+8V1$dAXxd=J!aL{0ih@ON{qNu!GI|z>@=Q4VKIA zQOe=WIlTzVXXThZgCP+3i&y%x&@oZArn?TsUjtqh$B!~-s?#ed9n>-L^rAFiKqkrC zxqqckdBTXEv zMDGS6=)o}U;Da>&le%^YHAH3HWAr9fq?2C&$d2P4GIf*s%ZVJjmvsYl~Zv~6Yx?RmoT7ngqhchYeTCoCL#rUXn>*(!mi858(HX@Lpu8?8bg z(*+EPobe*^DB{X@_$u!$yz1i1cHykOoIAVqdX_22?!m;g#oJ`0rkQuchUgUs6y|&l zQkMDI=Koz|N?2|0HqD1}ivrXetQTm)p%g{xNP;>)`U|dP=&4u3uO(iK#y#{M4s`{{ z?}z?k2=aS1H-EcC68HCZ7ld^H79`9VSl^=2sbZr{>71;e_nXYWuHo8Z;dm(1AJoVy zs1E{>YTADIAV3)RAm^PmS*(3M^cRuH$6pxRTxA2wPO7^HQ9=JclK##N=@S5xzSb{9 zs*PP5`{w49Du{b@CBAya^I)LKL0gQXA|b`^0Wj4IpCavW!L^*N_Wk=rOq`o-t9O0~ zro>;ca~#Rux0?Ql6Sm+A=q*5^r_v_J!is*2FqGdh99g87uDcgYqXJe28MAfU&^FB_cp? zfGMx3)&(J_1xk&*x}*W;N4ZCda+si;&T>v*3FkGyG z;SSHd17rtT5d$Yx>8yw%C`{}Qy^l=q!ol3M?FbwI4`Ml+>Lne7vC-*^5uHMdXzPir zhH2s*)BziHZhDk3(d%HF&1w{eu@};PAJ+q)%`d;PfyZF;C7@12Lr?fff*EJ-46Yl4 zlT-f~dVBQJ@X^#@gpYB@HB9(T0Ue~q_k&g7P=0+~jPCET`~^E4K}AUp4dqJuqp}6{ zk)Cd^V_-7ECFuHS22QDc7Pl5;|711%B-iazFBxdKNucs0z&SmPZJeFIYPdq+iRT{*lW*y*UPfLKUKDJO$wsl_iY>4lfM<502~1+}M(8AiXyR`F zl)|0&5s^vU%RxQ$BVaZuMn{Q3aWrOX!-M9t;<5o(Y;$n)-eiV44t4FS!%5PR>&gV;q$=66n`K z2<;7%U3jS_XNRHaDSPAKZg3r|_ZI8Q%`HuKH?eJsr-|>H>~UamwjvzLVEg8ZOKV3B z0V<4r=dXHfpc0{>;$i$r3)SpTQCRD773hffsTac7~+#2FPVPz8WVe8$qqWfawaPm^?^M4P8UfZVy-vDGVg0msGBt)^g4dpkt2DrV#op zWsdf+HU1nJr=qG+nAm2MQU)~7<)Bta8O>s#7=%a?sTlA^pyF-!a1xA@LD(uyu*CF1g^U$@f;JrwMgn>HJV6aW`BuIFH4d$)z zplKRHyB21gRi!BnKqFuY_K>1-xGQ3uL>$@4+AAA&&_;N82OvGh{{bhBjDKIOyWq^z>uXRUXp{yT|;A&Ehz@^P!) z9yL|`c^LHzz}cCCoB*RFK`M?>#Th~G0U^5#A*u^S4e%tWXCcNxVMzIn3&chm@ReOo za^^Luh_??OoDyzw@!Mg)5W4ev`4`P!!mub-bP^(q59ND8k(I#?YgYw@1NxW#H93x2 zBkqTIEh>CgR|nvwI5{S4n;d_SHUnxVz9dp-{sp&{f}FBHKMF~phoKc>WSJ!Gh3@W- zJle>LBR^Q{yn}Xax!#f{Ugx$OL^>l!wV$x}3be%~7YC5FZ=)Nh@3lqrn}h2rKZakL zz|n?0ao=?qCUd!&wDwVwIsFG_>1C_%Ahb|;0EwD615mL?kAtclY+xc8f{Hr7Nc1O) zUAKW5n*E-U70UxC`t*8%o(711jiDyyNjRfT(HzUjrB#9>sFK8G0ym#dhWmPxKf632y@?uP zD$7lGzaXAN8_KORQJYBePQ~?yk_SztAX()Klv8_X&2V*I#66s+SGLAyzq-rAW>HHr z2>pAF`*Z3w04$%JncY8HPx7IfB6p@gZ7>&J!YFh7S@=jyhp0fs2`%co*Oaih(~CFy z7y+ut!}3!OAHm**5Iiw40Q6PNpP2a&kf_8MYJSRr*IlxjDdNFMOcRbWCT(g#kLK03T$=TUn_aZ1N$$t_cpz5bX8hsDF%Ommj46?bB z0mHc&QMjgQkOjZvM0q#@M6dyRypJD-_30|FUH75oZ79PdJ6La7?pH-6(Icdo7175`(m$*_6!g8j}YNCyoN+03+y?M-!}I{ zh_F7J@HGyO@L4RzkR!1{nSo;&fTX+aw!YB49dtOo7jNF`w-3}^oKm|y3C7|*32`k% za}U}h;GP>h@3pc*mkAFssa+Zb{MEQsCRlVMYa$4It>3)UDtxM zX_RCGqPZpocvb2>gY&>4P=WwOZ0I!lIFXtAs}?B;2W#oZupx%L!Tc9qw-`4 zdWwAnCQ$Q)?-ZaZ(dYKAoQ?)LC55=t$iWDGCgX>T^+ z8zcUg9AE-3(E{a=sDylcnjd2^!p%1(oFKGKFu`*PvOgF!Qxy1vG?)wMNnqq43^-n- z+abxmILVgMk0!F`A$pOlJxppa4cdzH7)<<3t0VV<2+TdW#x}uPvCGp zuFPM58bx8mso8FO#}$MbyTqD0+u@t^LKf)fB`;9@L;xCpuN>B~`2+(@Xny?`j5sF! z3l$)EMPL;m_|~km0lWv`jICSp?&De(+@<6lE|?fA)3a(5IIfpl=3NE^3}Mrtn6xa{ zB4u%$+u4gWi6C08wL-}I=|VHj7z9*qquUhQ#;^#z2JT~|l=E_cS0F}n2`I9MhLS@Q2jDrH0(N+V|2_P{gt0_HRzVzvs{)|w*e%D)jm?opb=nT_C*$JkU&B6z!QW;<5 zWSntQ+qI+fAgM7&H42B2N7Ss2h1`sqR!&-WdM~zKN^efmZolm$t+{pruJ2Z-^d2@I zK$t#g7J{sXiFiR%(bXtr>SJQWe!bm2$BFbT@5oQs6L0bl5!u1g76PlAOcOn0v|dS? zpeYhucS0LBKB?xy*_%)3+WEnA9 z@4)N4ZHB)Ru;IY)hEkX8b?X??m0bBVM=*AvIt8;??Ejl|jpmT@K4CGU!N04EPnm^g zpV}JP;*_WVB*{BlHek0FyyJ}?%(?H(6IOX#(bae%t&>j8d9t5LI=exUyb((}8j5h2n9DC8y;)y_ez!RUbZ;_V6 zVx`--TRi99BbJwi_e_-V7o+_C_jH4RUshn z*$jj2_@rq1YxMzAFqjeFVbXx)PHb)bb^J!74nH=lJn?!9{*JKv6lO%%J8M8Gd*%w+ z%NX?SGFBbbs|hnAySWU+Y&0V>tgXu6NQCaqQklHvTx`k-G{iu-9VIDpnj^PDDnpwo5bqxSlF3fkn8k)rhOj9hS& zGMbC!88m)%Ql?VrMNfED(0cGQT9vAr-DoA+cMK_>I>oW6=RgqoM5|JH#`@!3=7*bH zk_W_%mjXtwY%Rv{S`ZDy?L?efoa+?Y$Wel9etDSB+wTT3cza38&v1h(kRJ=4aPqB8 z^_atZMi;>tE0sQlHWVDepMssoSG>3U-~q?Huux%$J?L6(Td zma*{hEM!p^#2Vf4ZpN(mc_#jrs6*J$(J&k%r$;^2s%kQk5+9SYjzrd9;29$@`o*|_o%Cwkzf4oj1!tobR#X|vh=m7U+z{(UMNu(`ToV}*N-pNzl~8ljxJ8}Dm0-He_eW>8^RltoTCsPD zx7OPUIRRv|3f=Tq6Y>?d%IU)!^ z%$W_elj|)=2dLqFqD|(s~KndmzhP!Hl?jYqVSQFAUo3X1T|1~2~ zBw3m@>JmmqjzmozWm;nP)y|b4X+gz3eFYyb)=OwX0ruAAFFFO)J|kN?l|ffSg5A4_ zu3&Aj`5pW;FvJw@v9T8)O-A^%cdv9|$|vkOLWRr@&MB?U&Rk3sV|XZ=Qz=2qVyG!v z@PSC-*%8xsxZP%$;Ea9(9~&k<+#Ll^(>zi2JQo%IIe-iFy!&JPhVL`Iv^O5^K1N26sUht|oLb_6 zw8R~!@UV_qU?C@-?qt09U{g@3Nr4iLiz@fA?{bDw0rj##cek^pQyUu4=ZfgN^H?Or z#+ppgz$iP|=OlFWuo#4m7K2o+G(HGpJHc%?7{t@EVLRXG+k6Z(ZCvYvNvZ0xdYow@ zsX3Sy#dQs%_Rd?MlW)`yb^f3j!ktJsu&=^74|S%f1$j2X*+GJjG>?ks2yS~9uX~sD;0IMTv7U*_u3|z? za&VLH91eE~nSgk@0qd3Ew*F0BrV%5KbhalBr44?sFc!=}>hBLz4vknIP6At2+{k0G zaN0rJd0*%!0|Ah^S&>7#!z+Xuq*JBoC*5rGN_K+Mm5iiGzQu0}pTkLy^hS&aA$uyE z+x@sT(~ls&d>I;^)wB5SofSl$MShns4bj5d#*m&jthWxN{p?!43ksRw8j9lQ|A%yQ znmAB%HdYm~h#o()XV8-wKha!XAHXos;Mg7-N8=yms)qj2HZ&hYB7*iDImif_{3H_E z4^55j*qZCfz(KZ_o0BM^=7p4te*lmL7DgIKQHpO2-tr6MBOLEDH=-niN~?*Jl9e>yeM(-B}3CqjVf={2vW9lN#y8ij6}M!}o2v zfP<_d!HC7DJqK9fg7*ehWx%0OF!HMA%BToU{O7dpKG*7hg3I?nb_!nIA2G0t1yXS{ zsew|Be4Fh$1x78G#1zcAGqmm%3=3g=6ge1rvBY|5RlQ?Tk#m!jck`Vv+90>CLSlQm zpK};bz?9$H6wX+UhgOWyM?QNNW>-=4eKZ->t89=%-6BOVpud-bYc7l98lS<6f%XYj zEU^HHMJtw|?szR6hQA)lhIEB6D)t24PFp;{2LWpgLcYe!FxxMItNrVQ;HiFUMQ`!l z&G=9kSSlbbTC+00EJI3j02S&^jzK*UVL#gL_Ig}(_)Mzy@RGskU66XoIQr1Ne~Nl) zMSL$>+!_S``y<^u^0Y_iA`_9SCIl4X=6RTMv>GaMYJ3Mqh@^=RU}zl8bP@D8kk85u}Bg2mdb%m-RZQ9KBw$ zhH9rUWp5B~+TS!aftpt}_)koPLu(b@Pnps^rISs}egGvL6-&d|e(*W)TjO~b8#0gU z(%5Uq1T)xc@YF3FN{eQV$VRW{Ct&7OS=;N--bhkI7mrEvCXF_l#9te4USiU&o|LMvaLlUI)+Ek z2JV3j>)4J=ZpgVRZe-IRxUPd%miCb3u)guM%%AYn6X!k+w0;v#kEPKm+mZ9!fWo2i zP(uzbT(JQ&BR$q4oeCX1(~MNt5Ea%XlyYu>dp=E4>g9Y13#}h8bjIEel%&bnIH-w* zW|TKjgft`4Bt^%8!TqpNRZLLoy!;eSHH3D~9?Sn9l6QioGpLaA0zd0RgGmERXL!X8 zN>?t?*I#g83}$}}AO^Ukx8FS5Z;hmUU%E9ulwqHa04;;1SD*TObI+GWKTR}^6O$~l*+dXNgbE+{ z#+e{7ry!PO>ve*f1vDlw;N;Wt7qSTgY|fty9meiFXbEs)MGq|WG+hT}25l&n9~9KK zSWUxd9RLxY#PDvp8Q95ysB?{F37K=~(;*{-uZR3X+OdA5N!i@1NCtIDtZYxt&)iW3 zPk=~K!0d6~7MZ8`0V!laa{OGm`>P!ingxAlyEV+Wk$(IznmiSpz7aV5@oxaDL%}aw z6nNEO6@-V0#qyb>!Hj>eJMV%`Ju7FrF<#{WQ;iV@73prw8M_yvHe{>aR$k+edwVB^ zzs%fDV5A>3^+5>F4~j~I=9#UU!fi6Xpm`zEk|G~`d>jDmOO~(CDx}Mx&;}3K*3evm z+Uy@^Ei3&DUPPyU4OraOax6I|b*iLqOgIq@KZ=13XT>=aO|tqiupMNnwe z>q$*RdfOEZZx^!UppZC!Xz6-z!Gyt`$@j_mJ80t6zk4DQUmq|Uij^(A7i7xE#A>RN zA6&(BfHXm#9e56)Iw%5>nBd;m#`|sZs&yC!^dbz$X+PSKe!5uGpe|nn*OnCG+ZhW? z$J6g@@VE70Uoe!50*%WlqJ!T8ju_CvyHA3@L3Qv(NY(%$v|Hc@Uuil-?ut1BhKylxEkeX*_k!H>wwP4=*xmKbvWXGk(JAU{Z$edIS+OJ=9&^{H>I& zASAK0Jsply;l4Oe|7vFgu~en`^@hJ`wYYCec~Ns2c*)S0s&odsETVfp3H{%Cg7MP5 zYm2|Z&DS-35Ixp|$q)mgPGqawdnLsF18?G50bPkk)jJp{%85BupTmgXJl+Bt00&x^ z8ROxSN894`4(K@u3B`w2iA>|lhC+2fh!zIM=59=jQgvZIt&}he6QvKP?&SM?aq)csj6tTT!5tcN1ye<8EEVxw z*c2d&Z8KT@R0xAglrzeGxBo7oWm>bY5^P`Mr1svg@RvXV3SHPf{gxZ7o~h-3LAvMJ z2EH-(rcKc&fjQ{Q9lWR35bQwGL~IeU5_w#DXM{dr`nA=-9nog!TUztlRs~{u(Tw|q z1YhVGF$I(0zvG;z9|R@gF0_&fMb6*`vw>*60JW2;e7j4S@>G6GV;SsKLOu+OH#lLD zlh?F6(xY~{ayC?ZsE2=>12&w3P0%k>0#Ycou=%zk6WnSW`Ly>qFhMy@;R|?j>X%x# z!&WCsDu_&M3z6iH0?u=MVJ!$DLp6uwM>25-ze;W7GQHXmSBwA zx>)GqdO7tlgTAmf=xA$z@dUir!Y1wpmuvMy{MZPO1TF_H#~-lcEY(L%RCjmblHOef zMa50IPBIO02gB?^`TFQu{ER|-bbW?{8tEi*I%tf%bFZ;z&rIf68V+b&_Tp;Q&rs`Cc`m=IB5xL{m5_8d`HI}Nq!5g=q^f8r|GvbIcZOn+M;kl zDq5gZeV3Fbm&K9hIQT&D9*G;Tl@$RxVsfJk%(D4Z6K?@$k}N8Pb0{pPfk zaRsL9ag()}N)lK0d^DMaR#KHWzgTwA0k_9VQL#_$(V!&H;>qEw1}9efkGHC8*9lY=L`bU?&iq`lWgN&~b}RvGL#8R;{S^_tLoB z7GWBg`dE&#Tn{SgD!)wX1c@xwF^2{Cew* zuK1q+FG#RY3@&}75eZptPz#x+PSow2gZ1wqDXLqn^ZFF5;dl#Rs|ZAQ-1iCzDFPB+ zhzmm)=6KTJ2cUC6@E^EGU>+a|sAk1MmJdh-BfRL&jwu1=|H+5`;$`_uos4f3!e_L$*ZQdLZG0d0sUN%&aCgC2@#ScFEnosp8^5=Zj$nAD1X zjajwv>vy%zc}o%WXn|NFyRW@I>%%6EW?7i@)7b zpzL{qnp*0%E`I@ZYozuZG!r99021FB<{io~G4k_^7`t9VHw1y*WtX4g_w$!gUStpAsI$^+EFc#_-Kq)UarI=Lch`_ zA@e`c24aRABpY85BNaXPe9^x`_QO4zmT^-Uy>kHfw(k0LtewFbt+xh0Fagj}mS8PP z;?a$3qFQi)B-IVQXD2|Ht$I0mf+mDUlOYW51n13Gn8_u9c}cdA?fDDiD~PoHVdjhq zTxMaN4-Kfg57^A@1EDVgJ#V+)A4kJ+<-K=o+`@bHs?q)%j_MCV5|B5Tke_@4SnzoL z3!3|f=8E|QO+yup%`{fMUWv{mY(KWcn}82`C!xK9d>Qy>UQ_lwAJy`Wh}u)BRW(U%VZ9!d9W39Qak8LR zC*>;`g{0Ma!-O#MbW7F*ye*|%oW>ykDLnx{3YmYeeBRj#t63Obn^7dpt0E;DodK_3 z?{}!pdJqgE>g&UXB1~{4op1d$6T?n)Lt=+9jheaRytJN=&{zi~X7mPz`gnZEv)@U8u-s8^*h5L8^gf)48}CEt;S@%L732%mCR6C z{vWA*!*_Fb^xpxs7=(0GA*;SWUuCtGp)wNXy1~zn^j!|!k?sO$*SVEDAAsri03!gUPKZ=b05 zEV5#F<3mfO&7WKhl@QF(qHs@8)2^0K3i*GFZ&q6&%;J7iPHpN$>+P~^rTwtgZtkOo z;ASa}Zvr)dL11(WS}>RItg{~sQL!6JC!AadPDJ_%2J>D$y-J9kDa9!4$fa5sZfAf_ z_v9N=WQ9otQ=(>HMoxMD-$9Lz?UDtD-bgfmjQb3{M`LpepX;XkN3(q&FJUYz^=B-# zn8tUj{^M&}3#C3E+y;d?Eph~Gk79Ikk~$QLKhCJI<7w5OjB1G8G3p+z7*(f~r>Lhh z;zomYDSgkhSy(Ju=1G*p$Xyiw6y26%C%srS=XsSfkTp^tGhn+Q2O)ZtofW_B?}3a0 z$X)PNZ(^WqAnXM#JKE8)%MLv)xgqF%qwEgCRmb!u(dC8X7)YqN1Obv{nGupD$Q5Wm zIZA<`s1uoIfVc8K_9Y_kHaP$Fg>7mJIBAp+0Lx&Qps8(9_xq(OGpD#ipK`=}9=Vzo z3=+qI^9|Jmn28JRf2Fqo!6Hf2Pk8m$aUSF`W?|CXC|xkxLT0e0k0Rr3A<@0B&mAJE zM^}%o2Mz4V+cyuVuVBd~+G_|KPrWWPrFFX3Xt^WFU@aTg6g-Xo`(xvL)Lxk`YpoG? zbXn06Y*e*5wZk(_nIjVA?tJaXjXBbp_s0uG60H0@_A@Ma&c59F=4a3JR;lgg{)*8c zhp@6~H`2j~5|nSLoejg$O8QRq*ngBDX3yLCTj%wD+lTQK$9i`bFYf?f2J7Y5`)a%H zX!49r>I^!*CURA$U?0dLJ7r^ME`Q#c-EZon$t}&Xpk?Yz@7FPeSZR0GUns?g>4Q3h zCEH)sOB~Y*r6!R~@_gHynDvycg)$6ocO$NwfP}7E7onRZNgk-+)H6m{` z)l%V{EthB?EZ{TeFMxf<Agdo`ail^z;?Ccxu?2pxwaNt zzB0L+jD(2zs;qjQtH>Vh@?g+v(yH+VG-X+sBt_KuIlZYjN1kI?Bt?kiU)aUC*QNGc zFcik=V;34&y>1y70vBWJsS5r4UZZ?VTUac$><4j-)BCl9Y@XrKm=YZX*4UJ;%Enjq z!|)g)fq~X;S0o3?3b3%c3!Frz0%*O-dRF&iOU75OJ-vr2&#!LY-SjEGp*6W)KCcfh z&cZhbcjmXNTi&`^`KY{llhcH-oDyyR_UkA4%1pKFGqVr?3^)YX0B(7?_VWVpu`7_=i?w1xs$2A zEkbYx_i~zxkO3g&{VlCP5Ci=1ADY@UE8zY&-VOPuhw30xN5q2UHN*6)0~`FrF3QTuC8v z;BWMPQO^}hVV}rOX__gB3L`R$zGKR~`Z7chyg)@H%F9tPg!a1D4DgVk%7K;}x#vJH zsuy>CbSy)o4Ws^wEsMp#DZ}a4U%=!Wct$Wvcn`2*j=R`IoFf~AM>6I5H4qc;zw0WJy9zFt~BhsLfow=asu*l+R-B)Q2N3??#0 zUSWu~$JGzh!vJ5RcGJgOWa%z|2$?1i=`=z{6+|W})yf(qCKimLQ(eN zq0%V;PP7}?Q!*tMgt+?cevBLfnPR3JHQ<+q?I|bM(bpT^cu2d0j@%TxTniYGBVWR? zNr#&0QQ$*s&L?y9qe&e>?ap66p!U&!tyP-nGCP}X**lg?LS`@mXO$pN(DBJp;ElH4 zhXr&`!0$JTJqSR^U?oVFXt1d1;mJF?ZdOL|5|ZP`O?(Dp+f-$H)aQp_OcE5okp^wC zbI+g1se7Y&iC+(7%}kg&v2zW>s0tK`Hf%aZ`yQLP98|@RFipK#7%%cv=S(4az#WmWisX_&$y6l>4(^E4k+m1T%I=1XT_lu#mgQVO2@Z&sMXeM3V+;oj z)I_gRACY5)-L$ML6-;OO^{^a7XVV9dmxbw@Fcj1`7(8#OjvcuMcvG?fjEa^oIza1} zRmRgru3ylLjj2FMc3*6Obc6{!#%=iXS^kf<)MW(@3AUZ<`3nsvcSSXG7ll+)KJCQ# zE6ROWvicDEZSeJ%8q##^??DUzfCUaoKb7Mk)UL{cAZ?bO+VSJl#~}SfG+H(cU0^Gw zJl#rN%fO%}f^8-8G9bEuL16!SLiYFl(@wWzrVi#6JKccGX;pdV+K;kh2U(+>Zp`s~ zRy<}fcbLUx)1-FKlfmsXy8|MH*EauFGwbm$R&Hz)mIBofYx{jcW`NGNQly(fn!%%YLN%+*R8D zf@kGjvaFo%@oe>$zPtk?sqJg1V7ABBJbGe5GW2mrvGtCa&||)8voY^ z$p<7<@(+%DHF~SHRi&ZhZo5s~GGP~UuZP2W@+Q#o)KJTlSlS z9ITttd1zpN@sQT@CNiY2obMUI0&b|O3Mxg5n{zfLvZB{#WwG|It;thLRz2ZL z`OR)`Ls&*;`9A5lVulvB#RtXpcH~u8hvdf$wuI07qgR_ItC?M0-I9!+B6<}3@{KH` zAK6xw%aw!V-#Onf9UfT8n}09n-nD?TJQ#e;B~Lb5`or?FtX!V---*;eSf9F7Rcw68 zINBu8&UgBE8S21+l3pS3d==|g?*4s5{tf~;# zs`w~RXXR+#0@w+Pep!}3tXYz?^W+&XcVWlO^KR+fdL8__r4HY+MtMqa-nwJ7*$mEN z4IjHJK`ZnPrL3;)rI3{t6mLl{4p+T*|QC|{p@0H z!Y&NCm5J%}aS>GqTcddKTh8cVuII@kQeq7aPt5!O#!9+>L{aDKKwyAtCt0DpBn@yeW)V;7yU>lC4s?=%j3=X3%0Y* zVqM2xu#vnnuiB3_x)LTQ#@3umzI&nyh%#PqrF{!=mh8T-TOClJua6vI0Y1VY-G8eM zCMNw?{2O^%i2p_Z6*D&OvUB=3=Fq3Sym@{;5En1PA?ll*WzP$C4&R0L-;F%PGV*UM z9tM|a-t~I=`|TL}bmTM*`c&Ax%}PYk3IOAK^CiTOv`ic&^TBT{JzP}`gYS>O*{KQH z_D6LPudcmnF0EPLG3wzBsM+M8B4Dk&m2V_!!D2afW*^2p{j}7+5<5IQ|M&k$`|^OM z>;L~xhnbpanYTcGI?NOaO$^789awm-|yG!`Fvc@*E-p$U&YN?^B_?? z2r84q0K3wQFQ*=sP!;dS;N4n>usg-Nt%F!UfpD@BLm^uI{Sc>l z87-sHs!1ywv2@d%uZ_{;vIAz6MG{p={jcK}$&7_QNmQYET)aWKNP3hzC`^yOcj;VK4SV+T z;ABSH*)4Fa=GhV`T{+iyi>cCfV8sK`M5>1QEx*cp0jfjnTWBdYlt#9UP)pfPZTjzu z&~496lx=9uT)12$_Sp!}+BR#YhOun67FrE{pGA|*rd8t4AuJZM@fdRH7e~`zJD1#5#($Eo>iOFT-^QxOj5~ zs)`qR@51qPmfPzDx>alNy#ozl)_d13QI9+6cOmp0yM91*2CB)!0ywa7^`udO*JtiU zJz+8XTKb+cqhrlU887^z1Dy3D=ijt&GVb|O)#401=lnpt5*-@B447r(DA>*1#D&pT zxEfX_?~C5Rs_}Dn5P6e1u#`U=JH4pVMOwu(FPj+xAL`AXsh0BIy_-`W3*{Iu`(Rso z9xBXUWBGoCf>_GMsW}7Gty0bAE)~L^Ba%I1C13Rz8+J$S%igezUDuYiZFP{Eaf-hY z8)=sE!c|jpg$)l>?ijQ{T!XQ_P%@|bI=50-N@AJG6|i&cx_dL(TcFUtvea4FerTtfaolv)>|65ALa!^-O+FAMl8-U*AEzWov`J5hnRz5s>#6<`yM`IE zcnLe+eFH1aFY64WE!53#cbA%=8-EY0Iq*3@I=C%cU4-@bH_5Vqp5@uv)~mzlP7?(u&0 zRHYSi`&@$1!;DmMw*_2O26)3u;xsi$jsgavD^LhKlS?8a*8Rl4o0lGqp8urd*3^ug z1Q5~yLOqD8;`AFhiG3+zDAb^uqNf4Sp>MTE&Ryf7Gu5?7Nn`s$6@s*43>%2#TIUzP%WxJaArn2!|002I2+wMD; zU`Jl6iTyl5#~2vn$=06+z(n*ltOTJ1@QpL@>t?NTMerN@G0TIodISsn?XwSk%XTr6 z8Y1%;_?9srNq0Kl*&@!k$h#vxzw)kc{DaQB(BY~}xW`Y&yr3mZ(do1tPCR=;;;i6} zuVE-j+E4&MtqV#z2XznccJ^(RDheJGTO-}cI#e3h@&O#lTZ;}jta_0s4h@M)`CbaN zT;pw6-dx;l7SX*NYjF_HBUiES+7%_6LZCuU8-adPy1f%%(1Tko3rVtHSN~@ zcN80bB>Q-zUR6tMq1?Mi7JO}7d82-XbI`9cROT_Dw7S(``spd+;ZO1a=#0eG;XEWs zoNb3o%ZGr^>V0_=&pMwi)!m$ZLksQof_|~!yY^KXVXzz$8Y1T-I zK7&5hMFkJK><8jOi_p>LlTuk?5#4BTC_xuQ>Z>j{yv%?>7x&sIN1w$;U%cSg`>vjR zL2fCxt5eM)E&HZDvoqyv$I&pV8rV8|2S@<^8tJckdZ9AUV`WC($|wD`k5X<-Z!X;5 zI#3l#QP#6sHCLHHEg)^au5fO;DjvTyqO7g8fbs1LeNXoVI0vD?bgifNq<<0AHA3Ue zFpJFf%2TqZ0Mhw#_x#t>l>|bn4rz=l+m!yv*AGNy`F5%s7g*YWyx?t1|BaSjOty6^4btfGJu=5!m~IJRe*sscYTEaIH$ z<)t{Qa%Q_1W)c`5c53vm<`mnBSE#LO4+o#q{_+a-=Jg*DoaU4x@WYn1ySUyBzRjwY zE`YUhQqz1dFM_6rTVHW~$X-mB525Pt+x(U;;wZPL*2b3peArWPspdV36B=g?)AD^8`| zY_g|m`9kptC3Dl`OAu_>aHnI4haq8ppzV6UKdGidlMlIpK20*+fB-L#d7+_}%4&G9Euu zJP?slP?OMZJjIqmTy)-4voHFbu7HcLGFWNyf1B`LaIaGR>6jnF5|SBjH(%zx&U)zEA7HM_`qg4U zH&iM5;HLR{#*h0M=m>?{(ScF^%zz&+HUF0I|5J*>SzF=W%Q-5Ui!@tTEKt@fzI_{K zYk&OlB+{Y>y&ND@y=oB%bQMU_v6NQA=NMWHbHyQJvG2gC+@OgF;lY2DNhtu6&n)8s zN-9p>OlYK}=s_w;W3_i$4pk4?OvCS_ng1{kZWbBTAU%{3j1BmV|I)AVYS$0Ysh~vQ zo-*Fnc!i=C>ekaa?l;EUcYp(qZ;*;k_ZJR&(qUh+cjqyfk(cy=szpa~n0F45phaIS zzl`@!(4dwSL>favXh1xN*Ix7dm%QS%%`zJen<%b$h~G6TdU-{jI`fF zQ5LEF7BXh)T>U)hmbystL0DG^?#?khL!^u}TVVrX$`w+O%vz2Yh&d!ZY)JHZX{g=q zNy^2^a8J4szp9me?U!fCu#K;LPrg3jF2AhU<}1p;#cUfB3^IyBv291fq)!YF^Gy*6^}cg%RFBebT`n2|)r~(r zub?ePL9OO*gPu6mz3xM4+R}#A39mvG>dMzXBlTVTw-8!zPKT+?RlEg@FXB7ZSJN!g zXqZBhBjV(xHr#zPExQ^wJo416+8>#Ri9688lZ+Vhqu)7j7JE<1BA$MC8|Vvb2@UkX zZhpOQiQ9ThRwUKY^%-gZ$tZ(fGv{i^iK=@6%nDq9ZG=-$W>Ln?k^=bfYvn+?2nu6n zbde%Je0^rcoqd!9MmW;^x71E~=E!7HQ)3H7kJnR!6R=kg+KE*|(M`yJHT*5_AT zLOp`_S#Kua=Q4J)Fap{KRsYtk4r+UGwSpvo7=RGp5FfUB5^@s#Sl!_S=C)U_gDC>s z7f1y<3mhr<_OFuEUUMwjxzr7c8dRopkz?_TPL|x`Gmn4|)_D7FA*nlFS4uc(PMP7e z=qle@*A;3$lQ@O`(yYDnx6h_{L1+h~Ep>&>nn?S6v9+zrljrbD%?HN-dZtf6ed-Z7 zjmpUo3kv+3*LEey|`5YAo zla$=eqMXvjeqA+fRY}xzmH85dAg8JbWJ)sX{*3LgE+bhkM7PXTekxB+tfz)BEGBqx}jn6d`nIw0P| z!Tf|SHtVyOS@;hI4keE2gh}rnip)d)E~<*wP^70@DmqI!;TC@}-usNQxGL}#dzCZ`ZnmXVLW@+iX&|8q6SoTp17`BhK5 zR$mhJXBxR}t9TuU_PBgbmx{X$iGq;_@oIa(am(tXTEUFdwWmft)MgIHL_4Z3seiq& z^g}EGU?+Xp2{{y(s`Zv_CMvI7TPxrS1l~R`tu*o|c2hmwP-H5oqYB0LLLV-7M&=8) zplk}J#c(xUJ&Lv!j&YT$BVo@{>B{dMCRI9d#|ueZ?;IT*NlW70#XhY|N6^H3i>fV8 z{4$QY-(|mS=&V7t2_*GWJm>JtyBy5sx(6(YRpJcJ1PpHTROMlz6KXM}ed^4v%iBgb z7sVGGdF=;9T8epJa|A~5&VdEaeKXqRA!VCz2*o%L{EfdVp1r$xv5y1{r$1JbI^gfH zAu+239BFNmeAza3)u>}rqqYfN#vMg$op#w9y|Def9acMJKV;TYcJo&S{k4;koOE7O ztFCQS`fo%UDA-+~9|b}2S1>-YHH7>+x&;ZCXL*cWAF#EVipVXqZ{|j{#d$ykV3cZ` zzpZK7?uv~n(WqvI>JfZyfJd+;WqR<;Ok2l*>t}6wuZ+vFn#W9AXGvPPJQ%h1gKf49 zw`(;8K_0JZ_wEK{7E|I8Vi}6q`U#H8P=)whXRWhYwJ3AZH%5e{I0=@;kvf+4(->}* z>_+szaWtvJo{Bj?Af?^MhahzlTgfYDnM!!~1fcr&@~6myn_Sg{I!mna1dhu1D5@W` zbjw2^JMj!bfD+7P0~QZ30QTa$07ir0i_KvS1*MW1%#<_Hzff;~gO~aF-CnlE0-wNg z&fzE)NvPd=k8(Pgs=Syq7p?vBcD-_o)LGy@H_WiK#;l_CQT@iQSmqh(gnMm)CAReB z1;Q*}t%$PKYV=6tA%quDMB>M4akCBR>bKfr_mposX3A&&8|n|#83cmV07QG9>y=ZY zzR7JbS)%Gi>8T~)%p*mAdn9~(B(C%*l|+Aq>f5?+W8BgYX`j4XzNPJ+`B@giiYIo^ z$zE^fK?^=6P*#R!sT?Qy9c&QfcT(U5ad%=gXIo zCR}7(U1!u(+frdI$^k6TxZ>0D@fn6sK%S6*x)*XfOMv!-7yGaQ^q?3MQq=WNq2Fh& zn5bCJ>{ir9>)3^h83vxv7^9c|#8iG|S#{=$V8aFsZ$H{B)P)hYKlJVgz9k7^iUT&v z9!~rRuZi@NJy5kr*8?@@EVTq+qBP_Ut9H=xw^W z5HE62G(k!$Anv_|q%W73HGhvS$YKU2He zdIhRYn=--&Ws799_m9f~gX$Q+g)e4`sv%n=Fa2+ucyTQncmUkuI2CHE?SlSs6#h=G zL-6Cpm}>EC7mqHTp7rH<-QM2xCf1;ixb&COjrT*H9UkBcbQ+79CJHx529}~$0fyB9 z{ZA+d!n-l)r=?VJs#@KT`F6b)aZLT2czUUz0mKBS&+S0QQ@pE-8CYJbudTh@M5^8w z^c@|o=C8mkvI{Ul)tKYZ936~D1n|0HDfq9NDv7Der?ir1yK*w9hvWsBs-+_%nO+Ta z_dUZXvfsinCGT7k_|eo(^)#z|CWNY~RX?OIl~(5%BuRiI4@xWH5>WJ*ePn4zEk>-= zZ3?(Z`;AP=DIn}!3`f#>M9%6{u`I|sguF?kL$>0~2IZhlC^)nfhz_2AXh;mWZWj&k zEu8H|k@V#~y}F)~4;^PaHUlch%|?{ud4VpA{%uQMQ;=7s?o-m(`cBLF?HDzO4P5ou z5+(ig!4dfUN&Av9nQ^Qza}8Chu0sq0K2iXSp4kbN>#n!K?A|c;7;y0!e@ed45o9m6 zgHaV=X~lRKf>H$|Y-bz5lGDzhR?Y#0QKKw1UUG_Bp3RuoZmI9GReF1)W=yPHumC+` zRITJ@QA3NV=Kc2kk#{lc1ePrpG68!tg7%TM;+X0EtCJ20h#lHvu(EBf(q5bBvPXbi z>W*eyiM}gR1^~-rmvDs+Cu&D8TGxU_6+jHX<72CjGuy0XdewFQ>cylP=K`suUp`>7 zS_E6!zPxbG>}-xIe)h&%Hhj<~ zGmX2!=Fv8mkfiRQd?dH|Ncv07|Bi$tTRt~QhZOli>|^Y4wdhPDbB=a;$FUGK{@oqJ z0r-5JN?ZAF4?8oXA_`A4p_0`@kl;GVu2`yzscJ3wq>L)Y7vLl3pCd~=zH(|zzhs9EMH2SUZjunD1&g6Malw9%v!xn`uAx_{6Cl8`zaS#5) zrZn#6^HUti?FQ+XA}-_%x84EX2_c4+5Mp?=S+!oN^uVPXtZXe2Zdo8E=u1zM^3tVU z6so6IfxGK{1msaF5Td2&${Ihx8(q*qiR^DY(t2R;)$Tt+$p8QR*G?fa2ONYNBXc}6hFbQtQ&qU+}5BRQ*4cnogtjKr}IK$Q$N zrIk+47<7wN`!=OHIp;5Wqyy~u4RoK29)5TvytXyuA_+a-K55o-1_=tBeyZ>uhNmSk zX}ODJv##x4Ps~qz+UA#GpYR-cxBv&Or&cQp!XozgDG>hXM}!|CDYs=)l_iNz9%(b9 zj~>&c(JiRCba7W`cc5y}v!YHnl4jTPI*NtjpiZOFw#lS|uF~(MyXPH{&l3 zvsv`7mfXTbs&pb65{JCJJ~!H34Cag*9pklVvzUQ=2unXRE4=w0kd6DVQw9nr;~l9Z zxjFjZGc*^>jJ^|}ZD&hhSH0Y^L>S!t+@qe~5=I-SpC{fvkPDp1}wUG z?N&%T#s#m$lo=FoB1@LhJ*BIU2LNvwV6d(kg1+igb$r($s6}1Sb+RylDlyFxlM#U# zd7!1gdfjA#NkK)FB3-qe!TB5%O?1F904p%^;1q%Umk8_$1^(_f%56IELl8)xaBwi7 zwB;Ei$wC2#M080Kl<~$ydA&gAdG#HS&7&a6u^}&Yb6VLJ?j~@GTdW33KgLox7IVQ4 z8+$tu6Gz0z=P8WyOd!w@GS+&V2>&crjV*-+MeW-%o-&iN(2xpg?I?*6_oGBeFC%h; z&NWGp5*WFgh_^qh6sk%KJSxbHC**ySE{BdM0-kW{1(qI;%Xk$hDlnQ^`r;Rg7Hiv$ zqs|hNH2iOc$$iGlB*%2r7IQB#?nMY_1#IJ4r}Es?;KY{DW#Gq79{UO+nx37j_H$s^ z0q8oGvG*E#@qeg<^aY_lMBPzLDomAOl?jO$cve|lc-m_EB@YwcAmyq4bu(y;5{~hR zAEgwH=qgM>ZCZJ;x4arMew=38;bLp4De6sVFKWc65z1JjV6%)NTSP204}+Ax+9*@b zU0gN-76xF>$h(KeU-0BA{Z)_1u_0y)cO&NMxm$R~quhUTl=iLVRJ`PUEKxjXx%+Eo zK&qKS7f*f|jH$$X1wdB?UqGw`z6tq1nuAeabx#^W68gwZb18&$buhM|0l9zj(jnJw zwN-%efo4=-`~nZUN6KTr@T29^Z?ChB>dA!ZLtYeVE~`QgKfe}14K!;DAKu`}v4E3F z4WIgG*5+S*Alf~1Gt8$HR=#kCVZ5=vaTB4Ahr(3JqBryB?NF9>31G%pwT;~eQZAu1 z#S(1WJU`^*>Fu)%shtols77=zHqH{tEwrS32Lgsi@R=_(pv|K^Cg`jIDJLWIFx{N< z<)BG8=ay_VG9K2TDHs&_C#O|F>cXZ~CN1=e2T1!Y;sv0Rzb}%Ef{QekTxAxPeM4-rN;;{T=TSNA1-AUQdb2u}AXnOi%~zC}YqU4+eR44(M3gD^2| z`2DmUGATngV8VH`)mj))>R|0h>Db*oy|X=qJ}K!u)M+loGcV}P=4fe`1Y}`(U0vp7 zDiLmszQNq)Z^tvc-{|x9E>bG+iK8g5QZ)p1v0Up#BC1x#lWRx6h%XkbG@UxUs;y`^ zExf6)*fi_QRg(@9+jiZv7*GvQB{7EdD`1>|IHb1T^{~}f(dbyWnn~sQ*DyoOAD6eS zya=rL)s|`cHk73`E?f|*L)8wOi3w5Ugh@W>5*jOmVanc}7_(yO{M< z^k74RscjRse&90>ahPV!j!B^LQePas2OV%m%(}48vH7N`_YW3C`jF8BtG=eQ^NH@W zVxW5yfUbSUo(XlI>z;WU_!gafDioZNL`a@c!EevZ!pu(snXHHStjhl(C%#E#Ha;rd z4k>NGOqO+USb|gP9IwCcA50%%JALXaABhj&wgRT;xN+*j&ou;crYEd^^ zOKlxFuiH0Vgqx`B4E>dzb^%L-7}^_LMuw0!!RL4u6?g?Q?S&z8w zT7g0%+;$1F_6z#l?Rdr>54dMX-LXXDuxYOL)ov3iD^3@P+;O|ICzG<+$C;(|#TD|# zF>U6JM(^)wR}`Xv%$$<{(E6xf27KZx!>;g!J=MU-L|}I{-n~}lz5gb9ibkIHP9i5w zyS6qqtiv2zj>TZmr+DMB0==QGbABhzPGMXhyUR4L$7#FdIW}MfpEsoi8Hd(4vUOXD z*^HjWYewaw zkxz%^GMA?=YnwfMskZ%pl$=mhoJc?wL^zFU0osc4;EeMny5dr;;41bAKx=vh4X%Z& z45g8_ElZ&e4ZWI_y(w+T`aq4*@e8lg<`+J>$Qy(rU?>YNwouO58r!!S?c36hQ5?Oqte~t4@ag| zI8OHq0-p%Y@U zD=nf-A2aQJdX;j+UEzj^Kmqs~?AiECKS^pEDWi)J8oTdvTB5di>ouz6rTNcj7Cg9rB;8KyFVbzMng@`zQ16xHoPKtr zJ~~vL6xHVL9d;2EGnC#ezdR5 zDpGiV{hnp2wDr^`L7I8HFw~nB7BcoA%a=cCJNn0;!aqBuO5q5$b?jWh9{PA5;1#2KP}Nn0mQIuLUdyQ)+(t~7jOamJeCJ9#(XV10T`UF@^| zRR;Ih=HjejE3f(PKE#Xlmo7@*x>(*au>4@@;Oxrt=yym=YQk<2e!Gc&(x#QtMJ|C8 za*sJCEnrA=%Ba<)8F!5n;+d*IzWj*yurl@DQ_W*?m?3+c%=g6O4zkpvPgN=z4R3vW zUA;FuJ$bn_W@x7>HM+*g7?+nQ49eU5>*;l@@`K*4F{@|oE#dmA;7_wYoy04ZjSebY z$ErCX8{L0EdJfO+gkNx4*dZSA_rnkI^02?z5*o5M%w=83=gI77KRH&tK`yXKmbt|9U-5llT4-R}#=tqS4sZSrZ(p-2&Rf1GY)P09 z;to8OCDliD0M=TStTlThL;g?r1c6nUI%)ZOcyBv+zeaOqDL!9G zvrjw-Rst*wYB}TY`q|e?;~9c>t5bP*XV$y24?3EKdxz}n>Dg2_u&6R}Z*g`}8f>-zr>(h$TR5x_3Njz`y zaQqS{4-l6?zYVd!1~C45SFh>ieLScp`^rcFX zv3}#iMkQmAi+aa_tYP1XGsP}G{VzrK!@hBD*jm>ZWpu|**fdQi%IP1CZ&&y`)b)q0 zyqzfA1^P&t`J7|kqVtZ*?T)N%8_#X4Xk5&5bS}!v8LVbKHvfs2g!HYa9*<*wdB`#5 zctw-~yV3o;q0<QMd`VEq z-qkg&aC;L3ERlNePfJ{Krj_Sa%Y5g1X*Mb^hs;mFzx5t(%?C?4)`}k$zTB{BXnV9~r@yNX^)cSj8#u%G zrx?VJgpIU`1GQN7E?P4?hD}Q|xnG7ZV7~5@liaUugTwfzhJH7EWhWCjGXLaaH`Y|z1{vBSaA!GZWLd^zkPEk`)n#N83@t0Ll ziqPgfS2@?bRNDFztZ{lTc5gn*%rQ`TC4a&C3RH2Gx~$N6vI5DC`Ry?(&Ek6QLSsJ` z@wST}hXmx{1@4mXm$Jm`4Uc|hsS^@^S^||8?NxP~C)A_PxBkNJ8j8WmrG zaU@X$$xGVUqS{N$_wlV1sM_3K#*hb&{Z`)UA`KM!{}$;Z$hZsl3NM(r*DU!}$RnXn z4Y#smzbvZJ$krbWBTJI{e%GC(btNi8x8ir0#Wjp%1jB;DYM;ils%2muRn~L$QOAb~ zsmpM7-DHIm+r6SI@|Dx}gUJ(Yxw@s1!tcL#Cwt`yy6=JyxMvG&P zHqgtaeHOr~XSAgBt)8&0}~29ME-^I0c7{JGS8v&yBTi!ifseyy7_G&nLv!t#v=U z&3mAq3P|cNX5O^&F2!eleub|b{VxQvs3NtaS|%DLUwKWmdjTWKQjO4Ia*GHcg0N5@ zG$fq0JxDPcmTlceK~SD{uN%kQc?f!(WrAh!c1K$Rz@pgDjXa5?tspHm-)Q-*dNCAK z94(z?xEZ2(qCt%2Vhjm~-R&Ui6I7O<4l4q!XkB`rcp5Nf_OoOqoYu7aYI1`zTfdYX z^a?gxbYaZX8E)$Ki%&E^IVwetNiwG>aX-K#2!~-vHP#_u;gda%^u|s2xoh_$`x4!Z zh?=;IC#fH7ic(M;HucwQI)qrhl}sZllkG;XtNh@QX>pk$_{)Xz1Z(Zx)>9b3M*t~% zWWayl0El#&+(IXpb|gQeG)c(&9HEB$e8E>dCs3F+6Ng7qO{~G?)Ou_mp_{9_YU246 zy+Ykv@PsblsQ0dy8`=K0PbOI$)WzY3xrOZ!@3CU3rY=l9xZ9xVXLeI2GM5I-!ojWXjxWP-Ygbds#l#x%0%N}< zS?qk}$hgLTa)Xp72@er;2OVPXyw&jlm!P@DzZF8?ZA6mU#5wBBZ?47xQ^iJg?uaa^zj$ew(I(CdXQ{h2 zEU1r4D6>N_PnfCCWOqIobBfRVx<)S+j#6>irc(xxxw`^Y!>R2?Tk7CEd$fedcgt|mLEPHURxW<94|p;4VM-_vpCE4^V&6?4L)hP;lR zaJ#g6?#s4@PAE#sB)I-Nni%o-EobZi4oEzY^VmACA{2U|pztR>c&S8zm84Mee~Xm%ArcK|JA8nJav-B+(Q z7cp@YNr4?0hVL65ox4z=wIfnZ=7;#L0QGI_MS&pnCpr#EY#FSU!OyKYRd#%2>u zMIU=#%z?gaE@&!UqrmBJZe;A4mR0t<)#ezF7e%P-67yC-+GLf5M{2pE?8a;;fK6X) zggPrSf5`r?GOt`pT*z!8$!LST?F3bD&B5Evfi2rI=+e;FN4Se;eqf#*SBk?U2k|1M z=IBA+%&Ri1d8cY%=NiP>6e31R@L^#ncc__vowFS0q`|6vlEp;HCy71XwMay7w>l~6 zTU0V{vMRyu-B~+}Z}0r&si%ohkteQK(FK=Y zluHYDSZSWvE}SAOAXOxx_lu8`r+l6>?Zg;HkotDwkogSVoWgC0fK^RJEbDlH%rHBs zIV#_%JBFm8Q!9f(YSN#R48JUG;mmZ!_*m02_`4J+>VlWPIbZPPR*Pw*CUeTNXG=nYmLKL&)fA+ANE z;&i|Z5tVtPC2`0q=;3#wupLr=*WG)a^hWvvLOS-Kf?l+ww4Yh1kWNeX37xCsg3lieq@AQXbC) z1##V-uK4J(FH6)EihP{N8UeYGvV&T4;0dfql;f+L#W3Z}q~CpU zTpZ{2m7mCWkBdn3T3b4k)1B8eZ2{B{Jr?eD;X8;a6T~LKq@T9JzQKAov9{Ql_`;gx zxJ$rBdSz*4NC+anI9*()J2qD^v`+#7K&3x_q`8em!?7lAGq(>h>&&W?LMaF^BE^PG zG280ziy&Y_kl&=$r;#*k;dWGfWC!`}C6H$T2zAMCdgoU1f@wTe6K4vL`l@ss0-{oT zp!!7$Z61O(l`x6w<^KFiRNM_QYPRe_RNnKr)B;9)zqe^dTFRU#5WGP%sqhJL3kOqL zT&gj?WO9hL@^Q>xYsn{B@f0I{#*O(0r0A6O39ON<_N#$$Doe*Tq^Oe6_8`kCKJ)b9 zI33235K7S*EDZCFX&RC=m3ViRk$Sz-~V@y_0);K^REhq=bDM>R4B)JMa8{-s@voi2*|oSMwtB7CnHIg!U;! znilgE|2bYKF6oYF2LTzw#H1I@H)b#l6OY}R$huRvc}$tFl;NGputqNQ(kQ++6+_+X ze+rn|U+-4)M#XS^0dzC{Q41HjZ{mzy3;ix^_cP3l8>>mQ-w~82PvI;HDg0~&`wll8 zld@44vT()bWJ<-G%FvZvuMi@^pN9*u*xGVN_k5#}l#`l(A@%}@K~Whn)%Lm=Ss5%) z4y6Sg+kLOipu%2IR&svCu|6~fJ-bZ=G92FY3 z&N_hBHLm)q6XXFZV*=Mqs?6akOIvaPg8(Sf0TXi~JEQ-`=^}_^^N-jo=j6IZzZ+F1 zFiA96)w)ji^&wjptsY6s{n5*_V=>;hHdwC-fC!UHy}B|^yB4VqzzcUA0L&L5_eVMwrE0+VX)17ab| zglxhc`JB|*X`bRdn(MEE$v~3wb(8`fvd&3hQXb9JSc~Ezf zup-R$XT~-LSi}NFKkJHw$plljY<_Bknc8RnzasTM@aI##0|F^O_tf**6~l8-}Ybjp~E-lK{EqH0+MUh`|#g}{-8aRtLZiXqHgPHbq1`b zoycU2pYZ!_C4)_Dm?Rmu&b2kFpTJf!U=Zf04KqaQ0VSah&PsRyZ&o-2yBrdk(|BB! zs#L9ej;Gfhr@$RtWeS7JM3zUNe?vM#Wr<-s?&~hsyB)^;E@`V<$&?`Qb0N3I0g9?Lr*KJyPgAn*@rb>L!>L_?B9 z3ES(GbzuQ@Z#X-jqy0l{rB%%p{I1b~v^RDwW*5SfCOv~57Mz3Y%&RSgap}Ow6tb;F zKQOW0enK~>8W=IuM)__;2FP-enxt}xbM~Tui~2AZqovfgCH+KFN~gSI(0@Nt7Y`-$ z`%`e2%`ro@8+>L^F5*F!cmCE}L0HwD8=o!ic!ZGl5r6q!0&vP+$w1uuyfR2I&$ERh z+vYt)nd)8>b0aNL{m6yHsxy>Yx5l3XTAHuL8NZa+QSx%m6b71GjGy9!7}5Qb z|9*&>iHbX=ydk9 z@+q43e^#+e^&2ZN+<~|mf<~%_NT1jRm$y}b<&5z!)jBgs$fZ0HGSe`f`hWA;)Z+yI zyoHmsA<9#2OqKb1Xd2@V6vk7J7-_U_lp86|4E!gthT)4TM>8>C)S9r$6!}G0V5G!> zQPYV$0m4;-vvV9(xTYZ2BHjt6Y~CGi4-dr zDo-Wgs}}Whz31fXk(7@cgI$^yLVLF^)Y2Iq0bX+~L~mWM5?W8D#+ypY?UYG{D8`ly z@M{tj9+0RtI!Bvn6+7JUt2o_p2Fl7F8fIr6_oky`kC%CVELb_;q=WhpA_|8A%XkK%(@~NPaEWTOwe>Bqy zc=FcI+)?KOT83BLD6cDp(=b}LN1(Yw1ESDjZV35eFktE0A9)%GK3S!vS#$dx8)mvQGSKTJ4jmD5=V8>r-?+bhy;M<$jvlaDh`Oxf8mB|AkCIk zo29@1K{2INAHE;AZWPr$bvjJ5=@atFRK#W_)3?QqeIRT`>JSmv$_*N_MwRJ_YbNGH zHm6-ol%aC*%%=TFBQ7L2Ju$_QFq*hDdeamsOQ%VhM{J-UU513Eua5V(Pf|Vk4Zm?aEj^`i&ILFxD_K|1rX}ILz zm^QSLf;@)cZ47z57_# z0o{3c_=Fy9W(wIGz~VL)``jydkq}QYN2ew`;>$f7$5HRFLga@m_RHZ{uS@2wnUD*q zs+^Gz8bLMyy@Gm^Ks^a`*_{$1dKBuv8&Ze<7*jJB1})5}+re`it~G8AI0#PudSQPS zBR(l;93~GVX(*$bcQCrfZ<52p<9nI3!4Il7(&2hA_?xWuYW7nWKex(OmyVbmnSmS| zfwm=-rYA1T1K8U9%y@uZxMZZ>VX5uZ>G>WXYGNHChVcm_i|NlsiA--@KL5#>Wsq;A z=vvNTI~^N~oIWe7;t;X7f|gN?tN7qzbu3{fKpA-=aFNPhDWA@=MIYN!2QUpUi8J?l ziAO9B7P8E$bDk33PCZ8c6_~S?`JEVLoe1W#qgUPnk;}0U8n66D?q5JH5q5nst{U}u|x~Bh#adm&Y!7ZY&DJVwyUJZw!=AQ;>u$okE<_g|OlJ%aK zvExgS7S!fTe!QDY;RqBLyhRg2mU{8ajdrpt9_=N`3d)T>y>qGja^OC1TubKFtXDBR z3)SoAAS;&6F01{{H$Yz^G>%hgUf*ALamsNagR8o(0&lX`mAFB>!bDxHzMmiM6DH~A zShWWQYPR82IBDJK|CNlV_G_wG;^O1_BX;RYHj$@z#9E!XE5_`Vw(R0H#3zR^ShoVC z^%LSPJYh?+;P8L!i*Cdx5T*dSvt#MZ*Tlmiww1kb!5&O*!Ue@Cq27JeiByl?Ekd^y zt$>JFwpO}qfOBfbVPNp!rI~e}!Fnu}n;TR#r8PPj$ImF1TQi}#v@(IDw*#_`mafiZ z_m?(Fffx8~g@4)v9<5$#>74l$gWP0vC|j73z12$&;DoZ%Aj5T#2vK8_(J7TalF{k$ zF|ZuUOcRE>1uG986#pOD83fHM-ox3MD`ur>#{VKdI0n;;cBX?fhk5$oOZbdobm|~qBra9$Utj4^V zDDeZ>tQ2%zd4ZpX6Q>d`BET8ydWN49k~(L4+10=0Y)o#oPb5AA6Bls3=nS@`jC-+N zhkR2~wP}j;17uVYH_bJ;m3D!P-6RfbBC=kk7pCUv5*(`iRC9(0Gy9^*i(@?~}VtkZbG9UrVKxq%=V zR3H*N^vVhwS*3!~Og^RX3hNGa^6HXyq0a6`WO3#*@;j|_X`Z2KF{>t#A#LcgF+PZH z)0`L5*}b+{$S(JLh0brO^ljJpnSdiGwr2A7oZfD>i<_q!ZoF)tl`wFRpi)b63kt(@ z=QYv-$GTrBz?rMh6^~3v3WM}6#nz0ql=BL?PPBk1O8C@0_3!|@q?!1f22X%TR)9w` zBikuphWYn)97AJRB|ox#SQrr;K-4&yn7l&#Ftw zoYZc)8mK6csV=7SCyiQs;(YW1(Ws)_hLfTyc%!U)7 zi3M0rKW;q=`|() zEbnlCms$aw}g+t#c=hDW_p3AasW7<3@)QPSuI>G`$D<@|_{Cy8s zhub6k-aR^1>v^B|v1udRqEl+h1~;ty0V@GcIVOAo@ADD=Ld5w|bu~EpJ!*)e-1|Oz z&X5#v4yMo@WS(Qw0$#D}+xn|8Oh&KVHq!{c-DFF)u>l@n7va78ZP^b}K{)d$ozHr- zXudg+>nw*9{UuAPb`VkDUW3ya@8t{@lCwkL(REnEs|o7^*;hqbPvj&1~Y`NA=hy1oW_!xOuvg4ow3wz4Ol}?p1A1RY-Y<_RRFwDBDUFNjc%0K)(}<) zNGT;6{n^V(yDA5J^jUK*6W72zh!D+#NR`>TfPa;@DnOO00waZ}2uhQ_ipqMd3;3jy z7eGKSgkO!~CeRc6CbxMOyG=!CAQR2+RP)j}lfUm+2Ss)1WaDfO9xJNV`@ccKJh1R1 zhEi%l>&mU!TB>IEWX~l}S>}|p6Q6V0l=dEjk15mlv$WFwhe~eO?U0RLoPaa26OJ)Q z=f!Fftg#;iF&}%Z+)S!QkhS(-HZ({F84Ot=G2GFox&!keWRz$o!L?Vhy|G(P;fxE7 zo-&d_)SMs`w&nXouF2Pbg#k>EK1a^{{JoDNC_KruxC2vJG#bIRp`eI=Kc>r%;q}GB{8xM_ zO~c?g@99-cdZJLVa5om-3^98m<}Rc+PO&b)q?~WB-*S%Mk&)XJTIT~n!?p^_?RCBJ zFNQzTB6I~#K_I+iQ;!440J&Wvm{dB)3Eun==P52yD0dHeAS+^O@e|I)LZm=tcA5@( z2K$j?VKqu!eE#K}~^m)y*Mjq)&Ipf#Dp}e<3X3 zqlU;z&cz^iV!s%c{Y&V$w~ueo%>uWo*~H~O5a+BVrG7}slVBDf>g+L-wL=YAY&`P3 z%hCMZ`Ka-YNN7c)eQCTTujTxBlf?*}mdX-Iq!V<@2$*`#2U;P`%bAe6^!ORDR!f&Gt5T$Z>Pf+Ca%({X*O=&qwC17c0rCkp)AF)v$3$fQ|$Rj2Z%2{Y7te=N|(Iy(hhtzm6C$x2(G zb5Yhlz;$zO)Qe}urG~wh%+Im#x4<~-I8{fn^*Z<0O=DBldp}b=32Rq2ZqD$taYXx7 zZ9WD!MF&6fZeg3CalWhrCd$Gse2-0v4go~3eOb4|-dFGaxz+K%hTta43!KgvmFbH6 z>6Pp}{y2@a{|wzikM_uZk%*HhvvH}qv>XP~qRh4WmINgDp@Eyr79SCqt=<+DgD(*@ zeqHQ(I|?GukE1Lq54*WEi14EsEpRA$3ueGWf6TlihIls?c1e3;>OxQq+|<58c$2kG_j9q9kj8U^0{U~J#clfQ z_!t~Me$90dJdVYy54iPLmMwcAP~yD~`L6i2kguF(3o!OUf&z#Vv6Pa&q}dV8mboMU zi|f=d6LA(iz}z6nk_pm@l6O1+1|1>z92@8Cy?vv#1XUbt^seu>S>QaS1F!Dv4QY-s z0ddjZ0~z-IIV5bvm+gkoO!p;YvZ;K)(}K{mQ_p2zP^1Vxo9t$+b-qHCVi$T|=0Awi zp4vKVH7(H%W2l6+Tg>3k`c77oR+A!iS)$jm3bW2$7}ty9{BQ(0ck;H15#NZDET+`z z#S~U3;dd3ENXpkO>;R%+rBUT`R+hN>35qh-do-t6zT%~t?F@QN>|@eLfH@X(+G{YY z7Reh$Zsg^Y+2K^+Xqe^AkcC76VnJa?HeEHafY@-REjJ2PF?P}bkd^Qb~0FMq< zI-Gi9iEe#RM4|6z^f1Iz17XjamPceM_7EwB=LR{;iv`EFdM?|fr^n@mEuDqikrp&5 zJ4+=)%0JgzX*v%Y6tp@>D^>Q>=6XZ}C7ic-xE~9!+ z5?qk_=L8L+0HzL~lp+`zhM}b^ z-?0Tv`4yp5`Q?nw?>3jbz-_2*YkD;{}OU{i<02DN~{o zqsiF4WoDNJ0?V=WU^;dlMRzR-^q03J-wCHw4`N_*`D}CZX*dic=vwa5%&Vh=QdqJ7 zSXD}^!e-7lnxCwgPm(Yw0IapmZOpj)!g!cX#n~EUs#^xGoqr^y+le4pUXeU31fK|@ zveuA#lvaPknq8ss%)I>XlMrh@I80gw(PBC&Q^g&v}P z`H&DJuja_&a#K~hjA%$WGXt`Sq+LycO6N}82~^v2y0#APFBCVc@SY8acC^r=LsX0H z*2q!8dtwJpT=TCh&tJ6Pr)kE1I2!`l{WU%Nh%|{~FCHNzH`36xtNn=>}n$j0Ig@7o6zgx$J9fLe!3O z+D!{CU}Rc`BvUnyC&{l*j2j7B6fsE*hwHo$8j1rVba$zq#VUIsn`irPm#s?re|GzH z?u_Zg5gL&K%}5S;Mu=1yIL~wSZu?VKB=s(H^aa}y0fZdMS(w{9m(~?*D{bBw`DoI&e{C+^=W=`6TqEi27bIgDD0a!#rTOpPa9Y zZ;#C@!n4}6>zb{n1N!F6xs@UPh*L?Bit5vqK!CvSl#|@s*g>f3d;i_!^I}d9{?#UH z3DTfOQM0E)_RLr9Rn(#Z^dM9nK2t`gT4qe|)p83|G24e4Xb!E<9#Y{gZ$0%WBA6Qc zfr59ycO2H707gZnx*YS*=g;BtoT#>;j`>lKk{t9UyPd3pP8%Cw$w|Ubky)?Ga@(iD z!;5M&BhxIlJlbEj%6?#_H2WQLJ{b;Hu@r6TD5lw;%xT5*cxLjH@whq~sIr{5{q;Ml z=Y%}eU}&4mei&f5j-OGq7d-k>UQv~L3?nw(5}OLAx6lGnWBx;Y@EpZlvD`EShb8yv zpndOg6{HpHozHTjD4C}+f9uyDzCJtY;M|czC_{9=%!4C% ziCWp%SqrzDa)>j_D09NDi{n$(6`IaiNB^v3a@-5X91Owc_K$zT$0~3!D%`}JO7YHU z&e%#z`i}zJdz6H$*7tcpN%hFS{uy4k#;3J3+Jhmbace7$hDv|dFyeL%pzg~%0IPn- zD?=2|jWuUQn(LI?>>{Xn3*}$gymRcQ{4EU9^T!xH!#E%P#svCW*+a%J$RCdau68p=S9%=-g{V+U z+;@z;HLI|wkfVH7>@ly;k(o-x8w@j6ZY74^AyF$aDpFtmnT`r^)Ly5bN6FyO6}z+2 z+V5URFpo%6d+RFMLV$T^mzQL$*-M;9B$3u@qV<>pkBdWX=L9fBeY`?75K%RkzMlay z7}B|bE5B2zu;bEX5?+4E#*b`hCY3xdtw4LkX%4c#Fw9eQZWtT^!f8)iC#6TrN^XtH z$xmn$#sg=2C%4ON89I`Y9Cqz(unb}yxIG19WmqslcbFq9x4Qq?>M1{nP25}a7VCd% zlB>{UnSXrRD?;qo0id8_3gfi!(8UX_{%feX&RWIK*KV9>sxwsQ<*luXpDgJ=SSID`Y{`&;CtB^%}4pT%-9r?V5N+7R5m8v7B zHjb*P5kHB{$@a=^WM|Dj;_M&zCwE%RmThUmzws>#fgp2j*FaG3h!W(IhxDOGnph{3 z>3ut!QN-r@jG^i_Tu0Aozo0cyhp(w48P97Jz@)G<1%s3?dfFa|$V96&sx#KP?v;=1 z9$%%%OW-|>Cg>{tmt@lbt4gZEhBwH>7}{+Yw)^Gp&*_V)Kg@F;+ z(qu5Pf~lI|Q>J+zZECbsj*-pbvWaC)gitaKfa9Ap@UT}-XpgXQ_;)WYw;&dobLf=-Vri1 z7H#a^kI!0x;Y|%3JeQ@9?kqOOb0dK*beR+jFcrDes^U3S-4Iu!*$W*yOC8plE!I3g z(n2$$zwgrmf^y_fBA>%>rUzNx@bPxbTwf~b(N^f=%YU7iRs+!#yI9xr6MD7DrKVa} z{!#8ZbQTXf_)J;(tACIo#Ui4WrpRd52{_(BRaEb*@w?X`7(my7Bg&({^i9!P73VA3 zN6w~+jqEyfs2eq0Deb@M7=ys*sICc@-pQeaU@^s-iNlpiywh!;G_uswel_|$)(5%c z9wraQMz{aI4KnSt2or9yIMCojp*jC`Q|oxV20xqy8xEu%GvI(4bc@9>#c# z-2I_K(u~he5zD8YZAIP;`6M&5W4O*AQLoIO9rKFMYERmn;6J6H%}o;r;U|`$$4v~P zY!o!d@oUy9$Ro0o>g~`@xR0((BD|qO@n|^TGL?dK)8*7toeFV|(Z{G|l9M^VqOS_X zxPbSMsEelrEPG_$S5~O!#QZFVEFu{Q;_*9cf=OD1>pg{Xq3wvRjz&7@XdxAx67_!t zI#H%o7vXSbY<~WGI8@|sJ~gKr!8o7AKWyVz(YZn)*4haul#9i5Q5r~6=6z-{e$#+1 zCS3Mbc2g&yF!VGf*0kk3(73Z%*wL)*=gKH9zpWy;2*y#oMkUGo2@{@UUW1M#_YY`_ zwmT!i1m`n!sX9p|7g6i%Ll|0uP3_;Xv)cfvS!=OiKRO2eMe-cPasC5aTj)({_~glx znO+p8>cOJ!z4Anjvu0nXT6K0($aRU`*yDPYi~pcPGWzH&ZEyc-##FeKDlFEZDGSOQ zYK}!Sc$CoG6Q{%GSMhVA3%D*1sq?m-WBBu;p-mzN36XW;psbWZ<$`p=M%g+_u55)s zP}>FNWAlq7G3oPRso)p%A4o)?VJbt&x@$}u2j@^@c0aUcbjJ6Ea&4OKs$Do4y+G<& zaztIW3mpFNj3Lr-0bA)t73A8lav&oW?MwJC~ZC?iq)zaVHY}@P{c_B*~cR9!%hd(LAX&y1*l(yd7wyo~5ibtOs z614D1ntbT97mQ|^Md$Og{RrOjsB`*K0t1QU-hS%N=sZmM0VixtO%$A6N1o!E{r^b2 z_JA1E_C3=HNjZf?leH^^HX%C9gk7vCyKGrhTS-odEv3WElvB>NYssl*_CSjz6{S?O zpHdM`pHLZ^O);gZQByNb(@eknJ$;vRJ2Ro{Dz5q7 zu4j{36Rwm7O|!EiN&&44T;vn#^Yts;3cnWWn$pHKs%_EC zRXMqFc)o9!DA3)1Qi)ocm;ftu1o#w%rj49oz7$NG=$5 zq>J@h7={#^4A(l-1!P5UhoIf?>EI<=HxUtuwBLW#Oq|2J)vM&-`0N#Mf6m)~Ki1bE zJY>8o`?z}fzu3qLr6Ar~-0uk;LNfe&#bS(YDe$y$)2bKJds;znk*ca&Lap@2wD`O? zv%tEd-6}Tv_gQQ>xdL8o=YcdL0}Uoeo{=-;z0adycAhEr!S{BwQWPgyfHgdbbdZRp zb3c~Kk=~TZzw!tP6fG6muZkGDkKafs^c>{IXK z;26SvdBXvnpy$8zEx%8*ArK1JZO0{LF@0Tfe#W!cuqltYJNl*MDIw5A&VXnVN$+tA zu&4%Cr1gHQO?^*%%Kq_!$LHKXf4LJ!P}g`;b?#%erj2W^I(+|CsuNBk!l*Sb*(bg` z!h^(48Q*_&?6~x4aFSO4Mwk6N$?E`+eF1lV3Vwv2loGD43B&w=^SyZe(wwTG>LA0KtPVP8_S6*%ovn?Td*rwR}{m9m3Z z-bk7k77%Czfhw^c5C?4+(8Lh)9zJoXHj4ulU$W3gu`{LTDcGGV*-wkxaVc|8Kv|&_ z{u7>jd6rt>RJOB;$3I==P`znQPl$y`qp_x^_Sg*o33hl{;gh>=4mOZE673Eu9&1GZ z_I*=XQ)$+Z%;(w6Jf5+Qd#7rEA);{hC!~$9nx%823wJX%tljKe%s!7F`O&n=M~R*% z0EvDJnsQr?VD_@}K8?H<)B-U#EuIbj^S&9&P8=g^R5lNf9+f zs3_MLaJs!UAu83@Z%-WTJ9?^$-=Ts9X*m|SYh$eGkRzOGB7&h2hs+W5;D=(fF!97I z54U6zM4*5#^3SXUejA(dBZF>E?{R*=T7~Q+d1Wo_7EUYGLoJea%wwC}ZYm`>Gtj1s z3WzHqLL&bMd{=Vd`6<>wwh?k90AM8SR10=~isP@)tNu-@s@L^Ii6XkD%|%*a)MkYQ zaM5$`cgrQ{zeBzKSbGdwD5WOyu|H2k*fHAHU&YTzLMfL+XCsH66=BxakmvIt;S5Ww z7TQ-iaOnV(u5{ zScZ|=B2-26yx)U7;;c&Aav&@``hJ*ndR6PG2Q}x;$-BUHjyeb{vP>{vN1G7eVbC4? zL9$N@X$wf>OA)OAp-CfkB3iT|?o5Iy)!?q^+h{m9dgzXb88v?3F;&u8lBI0!uJ0}L zGp6liXidxt3O?Ee^-{i$w~ff99+T7#K6Wjj5Mfa>r!~qMQ}rP|6D;1X%e2JW7iN8^ zhau)maQtxXRIQ>T`VSq>v9Z?}+tXhDIO9YGI^%(3^S1niNVThFZW`%XL2J~5trac!S|RG2|3kd7 zvevK9k)HicqD}6j3Y&lz(&|0gW`(0PL6Y7weJ2HRCII5WsU6h13ssV=l)fiOp7b6T z#K{BjY!79~BcXj%{OX*cSOx-en3|EJtm{ug`LL8X69U~%C&`_kmyqyBc@FDzi9^lE z9!*Pes+B}mP{wEW6wlCdwVq|Jo8M)w*V|q;TiI}?JKG((N^vo|Um$0$upZ1IH{Opv zwj*vp``u%zg=}Au967f`S*)%<7;k^Sj5tB)#~x{LPfL$VP@I3sKF_C$u()0o7d|RY zp0+FHt+0IP3{mOO$GYk@?pA-Bl+&OTg^wSS9#K<$cvMA4e)Lh1A=aL?W+kmbk6P?G ztt&el9M-~UEF`RD(wsVEpY9kXRL;R-S^?w|F+<3yYs-Vca&ZbWI?z)UVRjFHE7p~v z7CrpHGdMv&4AJ%0Vn`dF=cF~_P76Pn#Q8%l>orv?a^slC6I~L-U-0uGy_sdR3J<72 zpf+UWez+E8x9r+l6~UC8Jwu58;BbreUN9nsoDcHQ9g*nG@LU8upqve01RFuy0~l*z zzW`h;p1INkJtdIzJ@h-Efs-^eYE6(*=WmPX=@o43lzU_&Muvgwl%JshsaPaiRnM#Y zWRiJ^qokDo=mzhu4K}=kQ;W0(&JjmJJdiaTgOH7$MIhGXI0_~0<8Z|x0wOa76)!w#QT|?D3AGQ!h{hibAGt82axzolX{HHu4IunfZl=Rt74_*;`!hu0b@>cO`{&-&iw71gDl zyuF=KXkY={tBt2ySPQ9Q6c|Kz1wb`I2g`{00U@-nItsG`PzM!~aPNsYI@HO`A@u>yAzy+eo zRe*9axBb&^g%f5P58uXl1duohbQ};+9VY(y(WYP+?Gr>1EvmYa<=I^WOm^09h&za+ zwIPYDU-5=&{AYNs@J`3@sGhRvD&-N}%z=hs)JWnB!dkHWTTJSlSK}TvyP^6R4ZSkb z8RdTT@FH3W=yQ7@7O}obq*#THp2)O%k)u~T?tFjfyOmwcrdK9ay0eXIt* zQ_OqA1;>9{cZ}4`e$I1K&L(JNO8)$IjV%z%sq;|Ryz2-+hv%(5LZ<|0(SyNVG>)=% zp@SBM%x1NT0^uM)(q2)ckQ$I}Nh2vKmJD@D$?bOcxRZHS3t7rGwg~V7NL| z!$+SZX`PMv$ixNXO^!|fN$Q!*H${CU$P*Pm9k;9Hy-vhpzYEKxw4?M#Pbp^1UR$2NV4*VL*6d6;+%b%Ybk zLRqmhgpKJK|82p|WhaFzu_I$3ggPPX(Sc)6VQ6?o}<4c6%&pQ zR{onfuWB-aL}j(5p|T^^G;H9xQ)I<*j@2+gNnHqMD1t+f^kkwi1Vi%t~kVz zFJLtx(HC&)Yb~0g*J64rj6EkWvsHe6SKBlz7jtS|)*P+84xb?knoZJuG?6B)4wg9Dl9vj1?=FBguQ#ZPiavg{7? z`W$Zy`z!}jAYNbjH!LdbfTZaBHsw0V%z2&zXOc7_hbLDJFis{3z0*nI>KRKkcs4#y zG5w>-@hMN>s|7j_j3r{p?t;Zq^@1YoOh?jL;+|jB8HGC8kP;D)%J2S$Z?3Vn`I|dw z>rp?D`MBrDHX*LAhKf|zbiw<$^bHaD7$Zotd8NKL+HBV-zkdhW##&wXmeqUKwCnR1 z40ihM{F}X}9Be%-Oh-iC8x#3-O!TT{Z>IRa+2r5(!-3kABef|O@pMv76)F53)?pdAdLv>di807L> zhq|k)j8ip;yKhv?0#~Y`t!}7;E#=}V%BmvDqawK?ixuWWYx+Xc}!QXu8jPj-F&5i@SZK{NP|hC1qw^>^41({+kEcJZJzJFe{oe}li` zkv~Fy{?suuE*<{&+XZ5yjYooP^*25;;0ihn+Y7EHp+S%Bh^xSyO>9^ZDW;D zv90~QK7*0>qQMl~zqkNb3 zJ957x%kE!K-u5-+;%Wyw<=~A+8gHRDJlK|^ICYHrm*z>&p?WdovVtd<4C)2xbrYV+ zo2+<=gI$0-4WzW$GIgmN&8t!~7PEF&stv|2z6e*crB1$H<0Eu$trq}Orn6$>6qgAb zD%%?iDfNp7*;4;HLj3hJ4Y+d*xckP$+#3_~bWF^uW$?3uO19{h%R5GFXNXfbyX5b4 zq&$~!y7#jw7mwD222)C~mujgzaHk@pvTky%gR3pPBFe}$vUz)D4_m9!d9lbbwp#C3 z@$G_Tl&Sud&Hj|{(n58w>71~o+_0rgFVuSN2flIfJ{xn$^uThDAtm-32XKokRd3E; zsQYFwjbj+j%(17``&Y(f#*QyvnY%u4-1$S)$%T5{@%fbzbbQQ8Nm+ z>N_NT+*K*6C{;xF0z2ljSk9ERv@HF+Id*gZW&x3B95Ue#s~cE0xJ)F zkCIf8^u)FR{03JXK)xIFvnTHdTP>sfG%vMM4KB0Mf1n@g_TpEjC0Dx#yTHL5voe`u ze(y3bNpWzYhYi_iekx|$>xsrJ_)&b3X6|9K%=mK;Jn(KAsyq3*ah7yl>;mzIvu=tE z^N(GvD_U&_FvQufO-tlkiVfEbr~a9|Pddfg+dJ@Y?5b7N=WQaJbRAf6Bca4>%!@eq z^_n$5#Ex16U#0%!LZfo{G|1wUaA*)-eBg;-OBL4BNWb9;m6Nzle1~1$`NM00B{D6c zADP51e&8diJhhnuM+UjjujzJ;qOF*H?7KTgjKx*6W|7o#X^ z=E9pkxjHtQ3;%$9D%XdMgnwL}W7@n)Y@LVR zv*JLtAyW6X>q7tE4J9;M=tmnmnge7pd^mdx|MtbI^_!nyZm+@K40p`)&;%L&W#yH2e4bTvQ%zy^g04B(ikqK`_v%JMG}=0 zLqWIg^TKNHd%!B5q^6tH&eL795jK~R+#q!AtnNw@hkONmqA3;IzF`%hJBg+?z+P1N zxn=4Qm*NK!?0Q){2XH0Dt#@-@AQSL2fZmN5N`d9ou3Mjb6*+ zZ|{R|+S9hc8#HbRbN8g9S4#^WV{v=mNoMY&Ishtzp}e2e8R?gsV8wyLKJ9sx(_U+A z$L#;h&UvYWtWn);}>O`o{t7NxYvPQI7tx$`;B` zW|i5Bt$D$z6^C`V>W_smG6R4eBQgSO{f@9p+x~ZOQ7l4SW<*I+PV{o2z$b_7+|8nzNTGQ8&PFo^_OSi*+hSiJRk*P`NPnzd8uDgD1VXKdU<|WT&_C}$NMF#z22IaNO9BP{A5>=7eLTS$xWL++9GQ!F) zx!tIo9$NoNML(Y}%w_foJ<(TPI3nvCleMs?P>?M zhX(w-4Hoc%u-qjseBB1(rBU)Ez;8&4DynQauPKVE+1wylyJbEzb%B^R{Re|vEP|U;Bk7PZU#J87HN)S)$aNi?dx@~#FD;p|L=h6Q)LcbURihG*B zX8FAMW-roxLBRjkKlekor`>)v7QOo6=G#rdG_MRqW8Er*gywxgQL>z zRWtiQp`VP%r6r5K|adk=jaH8qe>}nd^xjJV<^Mq$(1Tz+)ZCTSB z`d;FiR@``|Qn{`KzM0@YXlN&e+|rE7MJJQ5{ixsHl7<}=|62Ptf+NZU8A~;lM-|cK zWaeS1^@Tc#y;Pg^k#>CoH0q;hmv;&6&xnNNerC`Bo$q(V7KU&KZ?CScymq!^jR(pp z%%SAb68X3DsxhobiL4rNtuc|B;Jz~^T0FLV&NbciiX)}t$y=+*v^&mu->q%i+V|FA zIb&V!i1OMS-Vyq+ap|_Ho(^h|-jg`$YF#UmS8>7wEkD!77kLjBG2~B_>Ya>d^bq1% zVj$=v*b8byNav{6#G4zy<%pblIR=`#3b2RXr~@z#dyY?(+c=rl$@|t~SZip8Df$@G zLe;W0H^J`lH3H9J_ru|N-}h$RplsU0UOHDd-MU9-D4Y+Z3nxWqm$iOt8WVj9>QPq> z5`;l@&Tq4Wc7WKCL-f1UUBlSAB>0if;`VM)j z#{?2WDw7~{j!AF?jjgL`&a8*|-ETSgPMRn*(d@%S(IjqxTNLuWtc#@s6!EZB`a7~` zkBo^%oF6q51do(h+*UwgYCUn%7~2UNzwFtej;8O8I_K@@3oXc=RZy79hg&C@j0EJl z6Ri%wGN91teOyN84hOTLNS`0v1bzOrbvdW0f6if7jKM!0VFx45W|7*IkU)TYp|9xyL-q|xKl28Omfp)w(#)U;<~Dte4C zO6;K*i7wx<#b4$9*i?XZXd@ExM$J&o1jL8aaKRLy;XEy)4n8#_K4a*Z>;*-mVm_W` zfO3zdRvi8o_#$9#0QRv4785ODUQ(?!y2X%98mB-|jucyH=c`z+d2zMh>@ANJHs9F3 zY2YVRVC{mKHyc|+l1gJ2p&SxJgZ0RY_$AfsN&CZKwE9^1p|l=n(i%E~Bukd_jIjEIGJOfm#EsFb^)&#nuIXpaH451Z zV!iIPBnDfzf5dct%SltT0R_C7I236TaGEHTeJMDw6UO*9_TrvQVKvTGOS;uNGzg7m z-*N2Gr|sDI2V%gjlOJ8=B1ygM`Po*aD8=8(J7PVz)YXkybLFS1X*-MsQmX3q!@c z2X!OUdgyU})1C+P_|q!Vdgcu{RMm54VSpH9(GD{9E0WB@U^5h;S*u1p?`u9}7v zW!UK*TZDEm=%&8We6rU2)*?M!E5*o+)OM+hw|R`WTs4_kS8gtRzT$_Qa_}CKl}Xle z@a8jBl%o{qHLl3(x-INA{n^5sA7&uUFrHz#OCoJchZ^71sSTUhdgn(k$B|q$H~qrYW3n~zA%EmcP+NX zmZ!^a2}&*e29sY5hL6(P9aWWpSr6e9xxduDFOiZK`XF5gpM|{fyNiK|tesZe%I5Ah z@H`PFrAR1qRG!MWhZi|MLB)CT^#en+2_57j0MyHJx|3yhf6uC(nG}S=c~=b%H|xI! za|+BOG$ntlnPYUdT=M%rhV?6Jue!?(2#D4-&LXVLlwfe+=_b(^oig3{n?ASvyO;&{ zDM<*VAo{5H_q`6$8y9KNXL0_-j`m}ZG%M#zYPHp%l)(qIE_N+2*e!M6*#Q^fA_yT? z)!YOHsqK%w(34u+?!Qc6o%RFj^X86;(%KaU>*dw@mT-2*fUc@=qZH4|Yp{Tj&-On! zZ#2Gqy5s?cxXDsV9-njYOB270M8`rcO1amx<)K%RVSnI>lFr|qtp~WlJ2sm4#M4q) z;Tr8&pe#-KdshTGkKk4~axhK-nWSaf?7A;uy`1pu?%V3s< z!lr6ZuDm&{H1%qlRy#*^-ln`X51T3hj0%ETSyg0DRn4-MbAJ7aE#AoQe<}v_Vae`T^G~)9h%6cDpSciT2QH+BfVClGoRX0g%|0{2rVR4%z z3xK=qKKL_97JLFRk*xGj&DB8}D^|1KdYiG}bJV&_0`p1nSBxHPSBH_>OczdIBnv1J zoRa)-3kLu~_W5nHNo}1ymnineF7ce;w4WoT8e%ymT+)h-)ZjV51KcIbdaBc3bs$=+ zz7z;>Vi*U2a()z5w6IOs0ceb1s`T0&TD%@;Dnn3ed|B!(7%XE%IaU|m+n8zr70E%O zb+h8iMQ@gDrw^m~=0vr`t5k>) zjFiY4`O(|RJpy%&e1hIW*&CJ7k|6a3IK?7dhVzWoR{6zaG|jinWTE={NDcXivy85y z;M9HQD1mDZO#S&=M^e(5%Zl;O?rmz*A)2{ZXT7Ibp9_{)4@<#f=V*G}u7UO!j%@At zE*bcjqYO!wNmWm`fTv{lY^bcRJ7M8LjOx)*|MaK{&!#gN!7(Jgv{nBQfcri(wFSsL zpC~}*4{5h^XrWrWj5_uPwPB|!Y=5w3yjD?@V>Vhp3VtJ?vs;D$iv>W5QXj<|QO=L@ zna#eTQ<9Z%8M>^khY?0Jh91W^ra`5_2GX!1e+)m^Q@S1D*+z^&HrLyyPd{0Sbk!|0 z(Z8(!f>e9r0ZC7^4s8kHiA)CTC%AuKX%+*i4K9?Y2C^n``>tUm#Uv3WK5qkNTk}qC zU2y-n@x>fU_2uth>4TaBVYXRUbi1ON)vn&Jd|xe`tKoar(^NzK3BsT}k`c@=NEroR zS?|sLWSJ253~~hwa-m;9M;XvJXru>-hGY(fY3!4lM6l_4?Kx9OBK?A7hzCLfuV}kKVmq<1;nyhc>yHT zT`dYfB-dps2?koZGi*(ZrYUznRyCr1#|;=A;u@JWL1Nzexz0lkw5~_Mr+4(I$x6F5 zMEP}dNex&3m5C<9kWC|GRC06(Ey!lyE?47-10}FMG7OXW`@2Li; zl+HM+$`+I@>&hCTDZ<7LEOpp^m_TD=m-cy1uJdTO74yaH8TL1|NKld&LAS zCaE@{{1VEn7$-zUW{!3NTWo2QSi%&8z(KWb_N_9DIFkj6yuV;m2H=-A9calX0{YZh zKAqT<&4X@iesRKu57kF}^g`*%XW2HY2xciht26SroSgQj0w7VLC(|o$E?nr-Rh5m1~Xi!6*klr}qS(3A7wvI|&Pbu;4;KBwfyZX2H`pQm2<05-tKJBtYHoxptRdn8Sx=J3hno$zoZ z+r9k6m{0L`r}*upd+fRjm03{nky3-YK95uLJF&6}#6 z$jC6#8V!W<-4z<393*K_yH%RJr_RL0ZSS9J6eS0^guV2kys(mP5?5AM*0tyHwBJ;G zLCxdnQK(Q0MV09%W)GphwJQ-dlf1dUppuflSRplO!+{X1Ia4Q3>=w2Cbn1nbw5Ch)tvKX0sn-LhIJy8(Z}XkwKJ{!!Z$e6+HtQvK_8o%Wl= zF#kdRz3Hl%Kw=ZKwbTsJM3rwas;oiOL7p*wO{#SHC943aE`M%D;Eely?}J1AWynR1 z%I7XUkVHLdJKoNPc^_!+y;WxAV=8QQ9~C2iWNHVMqu6K#&CaE6@`RIDe~5yqA*OY- zjQY9!v0?j<$UGnDbV_=ZmgdtQ$g28%| zx}cNLaJ)Qm#kz-g?%^b_maeNYJUuHk-j->tgQ+SB{Xn1H(;U!S;?VlI?WB}|^F<>_ zn+V8d4v;I%g_CPvK+r0`b+DNEZT7o$KYg+3IEY^(LrkoJaTfpajlSmdq2w^DPpTsH zQK}Vf%2I-jHQmedkJB8U(d|+=OdF5Ef#4=%7lvHKWY6$Z4?!ja+GGZA!5Omtl;+!2 zB}VOce?Vc zs=A799*|P~J;N$iY7aR61uhj9$|GgJO>cjHd&VEJJYM3k(j!_zT6};Yw*dp>W6JfP0QR+!vxI`m%@^rHQA&{{y)prJh$Y3QAw;E6Ix?JCW0Kw8v=3 z?sU}aLlSFhN#^!fw7Y}K`7f=9At!jm)=1pdpV{lqx`2=%M|pCPII_-x+Tf+<62Zco zC-5p%`U-@sOeYU?v<2kNg48`N-(|1<2E zQ$4vfR8v%({53>fX%EsG_~Q_Q)x*6VN(59iz#d7SmPkMBF~fAt`4 zyB0P{=Gn$#g~)Y|_;HmwB)IzcM1FVBE`m(?=#l%NhCtpS4PD)mCGvILq(dqkWli_# z-|SL9p93u&^e0;x9l`=&#cMdJ6$5HC&|%aEwa+A$Ol?ZFSNP)3@PM3NyyZ-(i7*SMFLTcqvB5bl%N3361Km3f^U)Rq-AzdduTG#!H%~f27L`8 z$QOv}>zA)3!T7~qeKLW;`s}=CV~l-%KTC18@i~a($QrIsy?NipEF*5a|0U|Iq8U^L zB7U{EachUZ7`J(t0vFA;$XcAk0zk9m@l2>PoKtzjCln!S?!NG6bq-aGXq(?{^_b?h z2sBPO0~C_?bJuzt{^&$Lm+myMyrDRY6hK_bXsHy(*dgl%kPlvSI2@Z+7F59Pfq#zB zU9s_?>16cxp#15ES|5mJtBior@0zGzc99YS;JOLtm{(uaO3jKhw!35VIaCu@(;<}2 zHqdk>pjTtsWUeOnm~C0oURr%udrE%|^*pYqvey5s<`b#0S5C^>mDEcdS7C179Lzm| zckr39ZE3NRcc_2uTKpOpRD;@Bzv6caI(8&22rUuWsOtxj5uMB{={~`m zYyJroG)~rnq(_T00~Y@%v-3!oVrUuRKd7QQw*}tN>Pu*|POSZ3zK(p8TU`Xr;=q;I zL}l7PPtoF^K`B}AIo(^2)B-Sl`SH7E%jPZt*@4D%023lmfeH?P14mtcP(uwPY<~R% z0_jlFi(@x~$`#oiKs!xGsM3%h2ZVO%t-}Y{<+6}qrr2M~s{mB|7MOG85jzp=76DEN zSD@(N9W7Cg5Bs{L0=09jXO9(lq>1dN8*1NZ!_Hk*^W+HIf^LI!pR8MJ$o2RM&WeJH zK$Pvo01sCZm)Gb-zoe6Zc*(Ttja}4BFRb~mhwl}{9AMDT>M|#=amtMtRU}K~DckJk!7bkW(>A`}O#Oq1Je#Cyvwy zYTdM90)6!ktiAkYNYuil9z>*--*$OD_4;=78~zJiU?iLHUaDlLip3pGda#Dwd=ZRP zKX|^l&{=w1oBxq^L;^#M3&D_?xd(zmKByEuvTNXI+@vJe&BOa43Is`x9Z75K4&WW> z#d8}sobJ_yMP8w`zF+GClN_sI{q!qf?Yv^rM&$4e8=vDs9`ucn~y$wkGfUs9dLjus+`6Q{@VE98i+%T-Oj zZ2db;h&Y)vd4!hQyt!_Q)6kiB%77Uvh=ma2p7JSVKn z1@bLS{q)LPaMobB4r=nyLPp%+*0B8m7rMir0xNdK1pqu#e21!d5CzhtmjOgx4@={no;i5^0Yv1Y1ITr}Sd;g;sY-ekOo( zx$_I}We&#QsY)qY3KZ6_;4i`!GqM5pB^P9_J@PZEKpG~!24G=!Mbnx|MAA3apO1KJ zeV2I8oAuuwjph-CfiF(Hw;Oy{A4)b9!Z@1*lGmW*FvR9h>t;WIaa?adEZ_PLNpEyy ztExtO7miR?vfd*zf0wQks`3x9xKC9zOLms1$#Fryr}%(U*|eogWB%o)>>3+I5^r74 zl2g08yAipXwq)R~p&>@=?yegy4I`P>r%;jHNK~z&_r0PXQaR2I!-vYFI+&rz(OiZ}De< z;t`qdvwHqyxKet_r$EwF+dm`GPyx-`jsvNhOQ)G52YPNml8+g;YIuy_5lQ7etd4Ev@mZWAdt?Z9 z2zT%gbqznQWu1LXbOa_(;Lma0QKUsa(-QNop&U~}UIQbzN*60>nB-?Gn9|0VJG1qM z;scY7O2xX^e4cc4V84v-`&OP#mpFA!8HV83hEuwt1u087o@jRo7sSCp341%)pp>fr z>QOH}o7r!R@}9{v=q?$`=HvL>>56W;=P>r+;6`=lsw^G+TA^Kw{7JPdGrzeb={?F} z+2DG4>u2w5C*8u;J@zK;&Xl}hWfH>MAsT{az4pkd+JmPPyr1;2g`EyUcNiBeyva!| zpjS&ebbHU$o8{Hr=ES1vYZ)Pz)E2f)7ztSuoT+DhI(pFKkZ`*iD=AOv3EVvHCT)_c zq!ADnK>8a{7xG6TxDs{rX?CvGR88R7dI716gx<)w;W)<*h&Vu}nVc>OqyBHu=qWN! z%=TjR|L(R?2u-3^chac6>vRPA9hWm@xm_499GwF7zX-P{4*!I^82SirgifwZ=LW`4d3$Lf4Cl4_OAIs3q zc{v*RF>LMyij3;E?t7B&0|`e=9~$d@?jqgt<}EzCwuN(L>pBd<_3W=7SygI@y1U_+ zw55A(!@z&d$~xl}C^LIFLS?fMS*rEmYhBPJ4f6TrOfrXLK2aZA6^rwLK&T+=>*ET3 zIJav$F+jA6FbyZDBwg-?NEU0s3qasG)lTjPHzaq>klvE-!|hYqw!a2`arl zQ`K{>c#2=o7GwBJ^5Prql#CGW0hMsxNPjDr#`}6)TifI!7F#GQwnfN<&HCx?X-_vE zF)c~He9z|;N|9s`tdnv``*EKxl|-~6H};{IiDgexCW!vkpWp7x&Z374p218PnYq17 zpPd$Jt&RtMaev)knof1r?+@Y@5`>1a3qR3$&ny#Zlr11UP%{(Qs^>l$+c6R`6Ea&e z(=UwhC*M4fb-k_G#9pkmwslqB1pz-Wi|LX%5%r@LRG^`5}x882H1m~gM4$Pam z&D^b6yGakr(}BxcMtLn-2O79het%<~CNsE7^|SU``>@I0HSxb1^}9t}Fs+1OZFIV- z?IZsw%pAz|3a;e!kVP z=u2y3al>90eXCmQ=IAyLYbK3N^dM{SCx|up1>trZ@By5XUe0d@>%P6uz%-^WvYt|C51ps>IDB+4gpQ{v_`MqTjqO*qyFi=(3~E3Pl9@ znLghp`H%$%?^}VScGta2lsif!Q)oil?%=7BHVg>mOKM22|B1+#GwVi=uJnJ=OPj}R zVrwiI)nj*j>Hu)H0Aj=BlX>^Z;! z;n7CdOxAP8ZFje~>s5gG6IEWC$O15E-`wR`K&BhL+jAqIMi|)o?38C?yp^RLNE`zW zkh-c4M?7R2T5{4~yxb`R4;g`w_}%kq7_p0bYB|NqpM|-_BO0~`ik%<>x0dJ#20fQ#EHiMYltW@Z=^5#^SKtck6tu@!Lq!Frd(CmoM9?vtDA)? z9y_B++_4lXBxv%{EuE2TW!Ky4tZ!(I=A8E)ey1vXE6;@``2mqa6Txf!gdf3vLmPI& zgR2o|3o4y^t^`?^Yx_iWRy^Ir5~S2GZ|6a0`^YWi5aKh23U%m8JoDva_s!UFcepi{ zK|lms1^v^)?g?xdi73|L0bw1zhO{PYba8FzC1SmG#BG<|oh?($ZbdXgc&+$S5~++i zpz;;z5u0p)$#ThNa)-V3ysVd)<{dbd=+?(Gj@xUE%SED}XDrgde@CtWRF~LQAfso_ zcPdfMi@_FB;aW`SdQt~Moj&qX5R~IMQFAF)mOTBO)+fs=%Qw0FioBr?MYbTtxe#_Z z!h3|L@<87vQGfsf>Bmtkn=LtL&^$`q<7$WMznvvo{UVh5^u)@-CcwWa=!Aimbgm;; zNmUV-hEp>P+i$)c4EzXCO(5lU|7KH)T_%D_S?O^2i|T?*-kK(h>@1TPwg&*VX+3M*adHEoAwN87Ef+{ zV-HwbT-fHnlB~9$0E#39AaJQZ!KNPIjDuF9#z%4Z8FX!=UBvr^%EcO=*3guH|0G-`R`h3*gc=TXP5 z9Ky8?8&ont2B>5IjLox=$q<2vI4Arh8xKI<8sv>(dL;LL9cr%jF+qPGBUO_9fg+c3+Zq#Xxq|Fc7g5&a!bG1u^BhH^EvWQ#e>>MLu(mq>&FC8+F@vNj+h z;+zXqOh&A_%4pVD5}Tymk&KEfM*Yq^`ceTWTh;&{yDk<4P|uCc_YuvYgQe0{IVrg) zpL8rZa-&$!2}W%4b@8S&d3X+sz$WjI3sU~>ub{&CQ#b;<5)xa$30I#p@xVJlf{Hyx zJHU{|7JWPQ3N~RDug&mLG}qySKO{Bl?LGWGJS0S0l1&m~0Z}gbr#lm2e>J&}TuxKEZPi?P7^tQIs%k2fyyS=)siHyUu~^@)N0s3QbOZrKTj4&)&~-e46Xk!%aWtPvz&rV@X^fADnLYKd!-oZaK4~Q zVAd_FNw2)1s^|L*Gh!i8J^JVw557@fX7P6sKjmdheSQP$Gr$^BPE2LT5B5p;IcH{B`7dsy~k+x%+CzXBMdNxBq;V zzK;~^xQW=-Hv=Mw?Zvo3)uAdADhJ~+o3PJd@k?FN=l>vG?@j(fOY54lFO7T4!L(C7 zwG!_7^fu6UFHcNl>*B)#utVGa4Y{pvsa*qlz=5tYCwEoFy}F!|HX3id#dUXj`y1am z%Ej>XtC(#*ae>#{3~|GnM7MhMLg%*93N0%RgeC+q{_BnnDIARWxA#4P2y|NV`E#07 zq>lz?%Ux2LDb5IJAS6v9)tk)Ug~)fIRiO~iT0RJCP9e=VZdem_784w8@`u^J*~16qsh@cTmg) zBKU0>wH7%sZ|$KwgI;F`k}6OR!Rkjor^#gg-H38g=hjXM;zK0+tIE^N{dYBiPfSC3qw_YhWz^)h5q_EX zsl-Y$T|}B@P8KU>+C_lrN&^_vCA&}YARn8MT8fXq3|0&p{ON7ua+gZU5*29Gk;2pj z%5H;)`TtDzuITG>>-^K2V>JvbOec*C7TzrH%55GpA53k8p7f)gwCV9*o%3X^iA~1J zQ@##!TIlK$;4MiVlTWO8#2A1~;3UD4{6XT~l^evietu8O;wFprLqcRwc6+r08=Uzc zRiHrN5=0~O{N=S*{zS^cPx_HvNLFt?PrS3I^$cF3j;df*XO0?7^4c!_h^j7qQxtfC z67YsJ`spXoNWmqZX#+^Tm&N3?^I-d;c92A15&O|tkwR7gG6aJ!Hn<*N&TGSUA{iXz zf;prV0Ld7DxRG#`GJ-Vo;@M}$!hhvaemxBT@H6#ukN>$g(k3tVmD7P$ zqWB|!MOd_WExp3)*n5$B_0Z@`9^ZX7MW@oFcz)ZU@=c!)v=n|roCXkMJm4)$SKoOl z&O=eFJ6M@37aJ6wfo$rg8zah99o-ksp0)$EWIW_XRn6ntLhiY`^HxxlA!!j&Jx%l! z+oW&R;>c_N(fCP$Ws4fsUsE_PfqAil6}aBzZ^Rtu?MQ9yaJf~`Y=nMxjss>H%y9{` zeOwn+>kXhDjjR`@dQA`IG3StqaoN@13SxoVdnhSfi4o)Pv6ctLu%4xv4c!9Sd8v?* z&lgPOrQbKh26V<7jl?nHpEHwYXW0?G%gLl+GdS&?wNudSosPONwbW7i*#ZdkM6any zw6muK_J^8Bly?+2@iiAsEv-B0W{BBtl61!+W5}Xi1nu=(#|^8SFD5<@v3eX!#OKB7 z>Ly6E;`92#JDiXYilHn2n5^sf0NgztPluF?)c*E@mAHzGRs9?O0wWJdmLx?Xr$?lz z%6q!YGL7qD>`+OMJHcouG}{O-4+$-e`cY%vMlyAZ%=$|Q&gd5k-#ooG!i z>l`ev*#BezE>7DamNeuohPkBDM(=r+OgiS6L0*>ZsF~!F5gUch{qmy}wu2hfb;q|W zj9`h+W4ve$yY={v19G4I)rssA$Bgvs?yv)4AVhb zeyp*07UCmAb^(lgK>iavnHo+OJ!f=aHYDX&Zn1X>YdzC`3h~P#g#oEy$hXSB+-bhC z1wF9?bkxHp+z@jNl&^%HztDD%I%YI~!Ueq>i}%Clx%=Lj-A~8tUbSrCRR4jS{Rgf& zFyXHw6aG3nVac7nU{u?kn>nbf^>fBxzyE$exJ_R$rC~GY(31E?dWuyY+(ilTNrT7g z-m+Yq5pS|NxnO$X(2;(P;fq#m^_n5Ov10*zy2yp@oMBo_rkQE3@trMxjg1rbb7$`7 z&Ov{X1b zV3YLjJbBr6v-{?*8qVlOg(LDe4qdt1uUY0aPWvIIg>rTn_w&-`=&N$4`OycYy@9L# z-aM(qW6#5=M?>pZCP5V#4OL*igcdxJbNQmRt=_&OQslWE#`wEi&zbL#|I4+Z3n8##ep*1{e{*sx{y2f% zH7pbCpuRpUY1I{TU=nU82NEU6pgbu($tD8GS* zwqHzsA|CFmD1kd_G;mpAws3{H){XbM?79T6ieR4IFI;}3<8XC%eet{oX4FeQ=QMZT z%i$a-WGhecPHx!)Ha1hdNq~J`3B5-QZYk&B2><9cO{S|*2tyzX={3l+}d+>Bp zLvf&9y5%UJm-8Cx24_jfwWl#gJ+#>a%ZnG1V=w;U*|-Y(grq&u@ZsFtK6^LZZd=+g z$K*ZVHT|UUZWI03{KK~2=s`uWrHH_y-Cerr%yE~jzBBD5UoA?0Z3ECbmswYn}n zfvq02h*;t$r~l>6KKEx9`S!;OD-zV_;ELpe18V%8OHTEuRaDl)6CB%imP@l)7>Hll zQNLPQL~Bf(58!=ww0K?lm@0ke{Kl8)iX91Sb?c6ZpSMI_|H&9?+~mSvxvMjRzrTwV zL9k`M%RsdvqPVd4Sx(5j@kO#f)C zS9#OPW8;w3hJIM1m1CP}Lj4TQQrjlmXWNLZwFSgVYmQG~*i%GUDby-d)1E(t7Xzhg zWjWvE3*reo>U&8>@A&y-5zjoX^loF=Dr0(@!@{+|PTO%^QFgO5|Ji{`hZs zb;;e`tD_(9j;;+e%<)Q9s1ncZiM}+V9xqhKQ`f{0W${XB#}4M7S!vjn(HiB@t46)A z(0A@=D(dKk7>qRRLOqrh+7DaFN9~+D%+5?ZaL1Er+_p~;VI1kii4Sd@ zl6(goEbg>Go(#6M{DDrJD+PiY)lVbgJ`>`Pu6}xyNiSj3Z+KsoY{?&JE#mI0Vzl^o zm8||YC>|}t`zDsI8-~|kv{oU%E?K1aof=txV@g9u-5%#}%H{3OgWv$rx^e3zjf&Ra zJDmnRxVWf%Tt$3_kf!8zaO`TLR|#w6-E*i)N4&~}O`3dTMrC~7n9*4#Vb$I zXO8%F^NW&Y2}jNg?|MH-2Eeqt>(n5qZO5R7oz?tbq|^~L>x;r;yI)noGs{3AM2F)K zLl396jcf1dcn(j(i@{Kzd#ZQw`+wUdr<3-)Dr+CI*V0F?rffdHn~N3+`W(OFkQJM~ zu7(Xd(f;c&^n+SWpKb{|bI+V{@D9ig30zBjd`m)>3R%7ha8>dhl|s_I%=8gh{O9|c&SjJ#MXI>kH9E%^YAsZUz1*tw_`jaMWE>M& z3SCWM$9g$&A$&(Qy}zTAEq3oLQD{-5i#ToS^iJ4;Z#PeB2vN08IM_T6GL`C}h=#F@ z0XT8P)g{L8f-#VB<*;*Hsn50B^E5j?{Ug67*axgGNHgY+^0{H@b2Di-s45?Z+JzXm zU34QbnsO{}*BTei$_~5r^77z`{ap(35q|0)TrfFGZ)DfOE|wo3sJ778d_~L4MZXA@ zyNTPHZmr7wy@``yjqE4m-^2G(vSn$l8-LxM`)ap^EV5Z9i5OM*0>Ikf ztQjTh)w_fho2XjAaDC}HfuvhhGK?q}0c`!}cWy<#^1cLb4*hhM$g=s^PgfjYgnYWw zOGa-?;a+AQnB+Wm80H!&N@a@ICD`c1pBewCcF0f!GM5xDnx-ntv;cqT8k==7OLIqM zAw_EnAl4^^KciS0$GNU@Gh(lS$3cR}$%TJfrY@gfNpt<}hXm(#cRh&bc5Vn$S=2c1 z2dM-gmuzVG8D+-7F`9RHhn_B-m!A>Za%aDL<)L91YNI176na#=7HS~=J1!^d*e|gA zU8_Q+TkS|~-}n{Se_Pvk6wM=cwA$Z|kh=tXo#g&J$Xjb{oM=OD4M!If3fw{f4Ff9E z;KF|D((>{s9&ezU*T?o8M|tr=r_!px_R=BT&P zD)=ulIs7Mg+y+OqHqtUL&P1zGI{T@?hUN{4ud6|7rM zziBGBp8WX6D)v_0uf>e4-)72ul&6lV%~M5Z z&d8EX)c@$qgiF5=C(T518S$S^9CU8mHI|} zBinCi{o#KE)`Ns=BPkQ$Yqg}A+fIO2@HzMI^D{{qK}L&YhdjPbtbGJ2qk2kk~ z*{VxNp)Cms6VEG&ZC=xotd1;KbC_G5#-2yYhb)%g{NGcWi{~-g_U(eIMLu7CciR}O z48t0lAs6x4ewm)b$+|2o=vAu-i1W^e+A()p7#b4R>CqtE(_=Z0KZp@B%H;%hfxH}05R_P5L|TL7%^%z-dlFm zdpY~u@@qfMh4Ynn80WCWQI=U&d)VsMS@T2wkF;wKh%x`(R*TK8WwNnUi?1$75<)du z_a%mn%}S+0h}t$ymzk+$C52|Ox=4*{?YdP+s3w~dTbWf$_u5LevrR@#rpt8sozHun zP&@Yb*M7fi_4dB+=bZDL=XuU~uZ)?Svu;SogMiVU^+yX)S2i8Gw&JLBf8H-|8t&c^ zb6MeVB~m>Ug7vw({IjlBj~@XqsYB9P2%*XNGspUm@-;`ahvb8r_a!gy<9x_0jJY}c z^FDq9|7;uUEdJ7shEI|d)}mqd-*QhkpxpcRn-;y zEuKeEqu0dY7bYB{tNunvR%iQ5j*u}{x5|fEYQBARmb=*>@|o@=H5IV14^Rbas$Yf=psH1p(({eF)m5nl;L(R2}RJ{@=hV&VofBjJ29ogk^q| zrOZWN%7u4X{&T+{jkZ`yfkSCH$Q|SRr^K#K(p$@zfnM25m#GjRvDxrUowUxaHtzDI zxCs=U1F*A?gKzYTdKD2F9WqvRZ;2W6&hcKKs`ec&bDVmQ2_oBNr@F5>N1RY_3(~ji z)o*lh4vRVS`XhxPqbt9+Cwp;m+XG$eJV-gFCOJ>7FNI$ZteB;U-rex+4n#GDAZ{u) z;_{gVb4*Q8DjJ$-TZEXY5av!j#7ymShAuDaZ}s3mlY2{ZS||5b4wcw?Gupb6&DpV=L!2@LbjwNT$j1k6ECZWTO_MH&Z@93cKlO(_~9WS$R}C1M>4lt zA3M%n{;^*YIm;j+!F`FB>cNz$hemmN`O zBzgN)N>0sh4*9$xBxtfV$%;4MZI4`Uf^H0c^pfmD_>V?^{`+{n((!s+gEOy> zKRe{{v)<)9go*W`$k}7;A{x5C zJFpf#kulD{FN2IwW(^rZeH?@MiPSy8o#U6y48EXVHGXaTiroi;R_x2vGK^PGT76ty z@Q-zS@x2g}#OTBfPOVi1{-_Gn{&4VV0Z?Aok;tE$GhXjA=g3b?cED>Xtq^L116yw+ zpzki&d^r2rquJ-3GnY+xxNPFXtR*8EJ4Q10jbt!2*S0^}m1(w`F;jaFLnv9W*206I z_UagYJvKPZ0jg435aGsf0 ztcj$bn!4h%XYI4I>5J?Zy)HcA8H*i=pF=jMR*l9klR-T=;N!^qLa!9NuR|Kk8A20y zM+Jv0BU#q3L3Lv!NG&r~e#W3rfm7g79sIY?T(;LfR=zfF_i+4u%^Bk+-%!9+`3!Uv zHmEy(d$u8@txT9SgK2G2Z4>^>i=>9)d+Lq{CM7pkR31F56L(f0UdrpFF>6w*r6Euw ztP&oY?c8gVcJHs&$M~rTnfmY$Dp1$+{r>gnZPa@e-&l-jB#Y*xKo=V_21ilajQyl;^q)pfjOT9gFZ*Hlx6m$h!xb(i=v_Ijqe zQBjcy2SJj-vj%8zYuchLeUJ>N*BJ?a`m6I!D#45%!tipLZ33s|TEi1r7VlbXiL3bA zZ|{gwn3V~w`-d`^o3!WXajkV*0RNaZ_cZ%G$;VzP+k(|Day_cyycN<(tU2JTl@QvD zhLDZ7j;?Ni+g~*2t#mSb19oKJ^J+hC^efHUERNQTWl#Rg*56J?k9)=c<+jY6r)yCv z>3YeZRq7QF5D;BK&$+SXet^U7-4hr>?B75-X>ynT^i}WeZB&5M;RtUEPcg60Lr|<> z2sfPBX32^kKZ6$?()cDu>S^7+@y+Ak$WWK^SwlRC{1JKNdTygUUu!59U6aE-CdZm* zmv*xk%(4C@lDL}z1MphIZidTc57Xalr^W~V1^GEfUDw>qWaxZ`Jp7;5pZ>C-Ggn1M z&HYhCPKMyPB{dO2bX2W5a(Uu|o=35Oak3!F4~42T0OO#H`M&J(#$uoIwbmv*N$#(Q z)M2B_&ilNDtoBGDFVF+Bm|f2;Eh3AV1TgI)iVDMT*3Q_29cIWdQ(j1hH1&;?f>95u zh^zwH?`IQK3EI~~?!TyB1w|+}e(kZ-!u+i6ea2B)D@Qj_8D_R_e4E13@u3=>G>aO~ z*#3=YYC}enUf4*+bUorHQqQvglTl`EA=%Nj-`FWLei4Joc6S~r(TnYvFceRYPE+p8 zN@#m?>b476Uh;+CP18l0vZB<&XF6VC$RhB*`oftli2O@m(RnC+hWz!b4R9n}@xxb< zHN)zmQlflwug=UCD^aM5H3e8rf~!zPY@kcLkhS{3%h}hU&hcImqtE?)Z2Z;q3`xWr zqL6))U~Ys;3d&#-`xzbAui*6n9R~d%RG-OIj}8Hz>fd=OzgSzWD@y7G&CIWc*Y!hW zj6R7?4pd~B1^(~^)%{I*)_EXOomq7~x6D2F_7V@k99JMO00%BfF5Z}0rLpoI7y@Lo z9*t12|C-1qO97CK2V7DBLEK`|3~^QFSL5RN+fO4y>Sj4pvo;@QKrIkE9smKAmi z4)Kpi&PJzD%WiW|^Jza>x;6z!GKcNVXJ-7&AIbRVF;=gAcTItMM3#yE13EQC)EJ`^ z2Q}!Q6F=gSCSUn`kOB`yLUHx6Yxs(9rJN4MJ_8^UG9h}V zIx@xZj>rcH2}5o_t7F8Kg)9t&pdhHcv-m{ZY%D|mr;Jg&d~?87wp?`8R0))XuzKPr zV()3Q|Lw8{34+8)L)1L;Z`}i79;@9P01GQs$xVkU>h$$sSuL~Kzu4TfuyzF0O3Uv9 znp_(69tG6b{wWNY?KngoU97$M$mOaD2%rWEJ4QaHQ1IFh&mJK;4bi=0vk$Spy|5)G z7B0oL_YBY}tJM5C_7{|w;MmU_V<$H>SA4RZdtwB2&eJLk3Fs&fh({C&Is%Y+2~__s zAl|4KOQMqBo*RWVGQ6&snB=rJDav9~Uvs(wdqwQn#G_Z@0{_a-LT(_2mn3i59($%d z{hYYjl};&pwauTu%0U>#7|05JXo&XbS+_!C1ktb(QbSJOGF|kCC@TS1!{EU`&u?>f zAE{Rlc=?TmU#xG~XCi3Uh=m2n7M{C2CCLO*p(k9%?MZ~n3KO}^=j3u((1{yw`;cMu}AOut8f zbZDxyQcvdFDCIB_A9%YAuAXK7~XU6 zGIjEZq;kh?QGG%KL^`}4?A)y_R;=XHdH<-9OI1Ow1{L9LMb!u-h<$4A+2E}c41Gsu zB;{g#?)$5zK>yL|Du`pN(Xu(8>j5TtzDPdF+^o7W)Qea1=CRh^dIV9iVhxS2w2rfu z^(U2*cSaaIR`IrW)Ogu%7uddlGE*l?xdvwHx8*f5xh0)2;~+q>M!eBrA1b)&Om z+-XP4*x{JL?#r2$jFI5 zhTOx@eyqL&z;JVxMbjR8@$(6I4hd{>>HG-;#t&D1KD#>O>v8Bti<>Q~QJrfGcv6bP z)ezaTD;18x)R}kLrgP@VzfcLHLOpn}J2QLccg1l4vTw44P7>9H2LY}DEtluw&k!h! z9beoKw6e^ICLe%80&(#71+wx?c&5%cYeClR{$p%D!{f!B8bLZ<>%?UdGRRccX-%Q| zCWpyP1$X7AxRj$yUo8jS)#WM@PeS_GqL|1D6Du$#0adQZFa#Tv7!0b%IO&?xHb}_5 zVpJ$N1A?#(K2-<$t5klAf76u3HU!D3_C5kugiUOah16ZCH3-o}@qB*_Ny~C|snOn6z z+gQvFN^ZsZVo;Y+2bhrJ5%6#_fq2mCX;zg5;ZiIJJH7stFe=jKc*sKbp3Gr#*`ajX zSv`gOlmJKWjp^<)G))laLC_$mXOUcZ)bZc(1{1>@W+34DRAg zEM9AoAa=++B)uF8%1Bs)I)rZ28#jk9vhdo85=F|44e?Y#Apr+cJI4uB!1k#j3B29h zt|El(H)+@?X)<*h_i1eJpFA(MmNN)3$e^Dj#jkz_H@u$Us09UMC_O_vuNl z*VK5&^H~^U4Xik(%Qz)}@+ls^0Pc&fUN5<9^*7Pm!=d?hIwI#N+AL|mn^!DO(!K`~ zQx}S5{}$5fYE09NiP7!#xtpjP%5`8bvWTIpWjE)8iQ49yjf3LM{@F&+jMfYdMeVd~ zDrb17mo6Xv^++l+)u?tNDN-jtOX0cs2c?R?w!9_&nbMCh;S5#=_554{)Zc6~2M*^$ z@Sv_@t~F|mQ8Q%1Q}k5IZ$;m|nvtZ1^du+eF7BNhW{R`+(6vJG!KAE`RA-rr<(Nnr zEiSwo4yWPj7c?=Omm_{Cd@-+L4N>Ny>)LD5qF8%$GR0?t_DYv}#L*6*`T(nl!Hg~o zC*v%Kst%jn$k&EzHZ~S}Ny-l;%;;Pse>h7V{%RV!iE5XrNX>d9PqeyKdvt66*CP~x zcMsc+8V=T{0EOu$xXEc?8AXRId>$F;60gVIX2nXA?MWc@lbEPg*BhJsa-}cl(4ESi zu$Vpag+<)$fJXYl3S86$!<@qKl_`)PUuWlGjZ3xK@^=W2c8u`w>=w#4ZGt38i@Nfq zJ@qM9(1BM6`^o;HiEY`PBG+7|t9wxu^Q=CyVnQUNhQ(5nvC4S2%M$G<)RdbHtv??^ z5FWirP4P#tN(&+@2>i3(Y1ij7QbhWJYt)oQn5LhamKKPeLP=<9l=^vQHD8P7QTes1 zo*YtrQBR$HqW#s41iCtJm94B&3I(1+N}u$!GcfffBt_)CBm`orqkb1Jl7J>UB&YFI zLU@i}W_)H$lshoLgnTgCanO&{-Egk9EBv_1jIHG89GPv|wmzIK%xYj#%)gT>>Wb0g zu4UsHuwg!Lzrr~a*W}rZU=JRyCFxlo1Bv&IdqOov5Mo>^zY&XdiXsL-T7NvhQa)+) zyt@VIWdttZo@GkXuZSlfAn)yZWA{$uE84yA{RSvEpeA6^2OFZUyNEt4p}>}vwZIKw zxiQWIo+Rk+PF1x!x^WaZys2+$`(}#->B`}OyB&@mPtJKufTtDF_rV=php~F0FEQTh zIjT5@@r|Re^BOdzUYss)&bA!`%$5JbYs^d$viS z>}ptd;~l{ixkuUhW7^hplX{EgHd#Gh6Q{fMf|+%yLb?wYF^ib3g;^G1Wh_P+#-Mt~ z&Q`0wcglW<7(PU&MV!eV!Y3kMdPl!w%om6f072Uvl8DH)(LXSwWw<3y`qlb5kIpNt zrA1GZp`nmU!1jb3!2e1V;g)!y;@ za7zlDQBFDX27vlWGZXInh<<*cR!N>GJ`-Ex@^-8{_?di6p%Giff?dMZ8Z@lTY3hsm z3wVS91%=Q%E)lYW5guup+@lQpeT0ct^exG?*a4|S@c)mb)pFh6hH-s(bZbMRa}r zDSaRORG#1ZF4F!2iVvRX3#6^a@X6c>CeJVr$|1gZ0G1IK+lypZ9FD$0rW$csTZ(r6 z_~Nx&t;D|_!xGiZrg~`#%81Rrm04~{z&t@pGyxa7r|JqTl{_lt$?;-`8VGDcZwD2y zdfXcPL7~P%S7h6>(TF+$^UMwFY@?uQc>g1kBa>F&6jm7en zl0mpIJvw1Cg-ILt1RC0BQ-Y7`w{u#Z^BD7)={BgRx~~ivcBqe*JHv7Q1JYo&Lb3}e z5B76W*C=bCB?x=R)LY(?jhyoThnDN9J%cCL?XC0ZX)|`@SiPwp!hpum`*DWcg!ecj z1r%k4_tqQ-++N1edjyH2GqLx7>Ha^21mQU3kVanV!*B8nDQJN3hDvIP({F3;SJQ?G z$QU5Y6KDf<6b*IZ5kx1CrT@OfB3g@)@2&!kxlhkMf)nrp_hNx_4b?Q$-!A`FlY5b_ zX$gYFM!PK1h&APfPG7E%t`{E-Q{@B=M|s zkYnyWCKH+}mHS)D950X@dRyBa5yjLO|EjK=*y|MZN9Do&ewTO5C7Tg*(-T{Y;&}&Wr)zF+ z2tj^(aC|W5*yXGPTYo?O%)lnqSbY&A1-o6L{NR)3?sZ;Q7Hzj~f7&{^%u8Q4(ee4( z^01|A5+hUUzub}0xX9fKNhqUP$uI$gsbyG#`E}AUWaQ1V0m&Kj z;DIqIpLy-X2N3zld{<^&oEp=j?*R$q`PATsbwry~+2Q;(-pMDm?n)_&L57Ls482)3 z9unMRJ6`RU-1kG!H*qn=%UNQ9JDn4|Pss8eYs2uc0zR{`afe`fsOw^-7PFyme?&&X zJ1!`?J35qpagighk01;?5$rbM;e2_ec>@sI!pdOdZ*iY05?N|}Rpo#szj2)p3M7q; zwuZKjwE$@8yjT-%JQ2zu=9>X-*8Y;dTlK(p<<(^jGX1F6A)z5PX!&Du%tv7(xviB!>t3Qjpi zdzP7Hb`G$Z!FwCP(5eAuGA7uit+)W+ksVaMH)aKHOlnlHGvbi6iF82dJ<*HwM*JUI zcY)j@W>b;f8?jAtVKI1P2@ho^EWhaMnx+gHJjWJ*0bnL`3I+W&_*jSu*p#+9=yez7 z^ecS4E4P%~C$YHDw?3?n6$1VBe)}+iA z#o$fRK%`6bb-7NJ7N?E&(3ja*_-r9&0qzT{BG#P2wPF-<51BV2KcIgnGRQn_Sq2gv zN$SHrQ)n=)hkQ9}_-wmdGJzmC}{U)Nt{S9a$e+l@#eqc)bbGd?^#$zIDbrkLVZV<;SGes^IiX zF*<>Cl>&K8nl-RrSA^`y=BzY{C}jUb;B04Z02T-sd*O`*R<3P5FL%tPdDL*;g~#6* zgyCJ%%&H~VSnuS<0{f%=%~NdD)1mBRm-iMF+*HtQ|))@NK8)aw`uMgSAo{8n_z&iyV-l&eJcc3wN*tzdk^H%+UK*4+wsbr~l5?f^%VGz!arHoEUvcs;uD0C_Dv+vt6W3 z=qNsC3Z@A~?jN48oP0V69XDdG#q+9S6v6u0D z?)}e0Fl>qpsjByCr2j+a5}|WU!v<>ej*vpiqp-F-yN!ir;PA02x&0RQxH{kM7Cvam zA9oM4@6{7HNVa7!=~eW-ky1*z2z&>{rs%6S9BJ_I17y5AqZq_z_f0% zAmkNTK>(vN0ZrYX?f#u4OIlBqEMi}=ycQk?vddfcu|Cc+Y<7>ZssqCLddMy$Fo+z+lee}|DL!G@jRbYGtLlA_tN@% zh2tajBr*T{hn|k9I)EpH@M-0}|IOO_84e-sx)Av#Q{bNraSw@UJpegEjs-4YUCRPN7I7eE ziU{+-Wu^FpEIz9X%}mp7-Tc+>n~Q;SuG(bG=g2*ld1LNOVW9K6O<-QHib5k64|dk< zsY>vi3qCP;XGymw+U3Zh2ILFJ8U{X@PNj|H2Fm=BH9j&}&zZ)3=)Jr>FiZJ{iid~` zZMcw{l`W{1EjC=vtGOUT;{!((vm6ztrVP#^JSj+kDb=#RJYy0~wP5q04gH}#n4Ts5 zP#ne9f|wAP{LxuRnn9XB72JZ|j+pNNJlGEz^7w*h%GU}$%r80`!%-)D870*fo$I&f zT8UUVHX8k!pQR6^T}kQx+3EYgT*5-U3>UQd`vG9 zzj*ZTk?xtg#S|MrB@%vpZR>8W(W}7EgCRzAbCMR%4*S>r_#DU%@m*z-=8Rv-_ZnFW zY0h{)Dle4q0fMygMmhl4gph1hwDHtQJPxa7Z@z$OMU!l zA8OV-;|X;Cw3D?oy8$5i-uC_T#$s09QW+8*RR?v{eBE`st!}+_HsK3+FS`KuV^gFR zS=}de#!>+Ceo1OfRs%LYiz~=GrI+$>$?-CkhiPE^4%Gj}I*mjkHQpUBUB}DIcjGg= z6c*vRFYIY{CQW5i*>g{9>3SGrWwZl0ShCSUMzh$Ihwp22fE%hRrrhiUjmPk@Y${A^ zNtp}Ar7KGxfx@=5Cw-Je&!L7BiZ?kJNn*sY%olE6I5;aS6CeFYlXg99*wIMTxkrmt z>~FFfz8CfG2Y9YD6=TiGSk8@9B3COUsUJ}^`MlJ_etm;Lg)y<_^kS{Aa?s!n)#KMh zS8XMJD1e@5-s`nn-2zFZJjRWc`e+w8MNtCTo!1i!lQ3i-l^PD5CPn+aGnh}=+K+#a z?J@v28`=Q?#;KO_-6KI3E#i7^p(D>--W+m!e5O}CqWGXW?y?-?ChBW}flXwDdfY!z zQg|r6_hiu$7VSrjg@vZ_zQLJx{>-fOrDoVkIPO+$U z8_t=8vmbiJ7vHa7CV2QyRi~t{x35Op9pC?+$QhX#n!n657u;Ny9M%nsC9&lbPmG7q zo@Mr}HL}Y-X1MeV9DI|Xs?zo85RrJ1Tp;LLz_PHa>e8$N?16^u0G>S9nJFAI#nPIb zvBTL`c1CH?ftm?_C^a=z#lOlebpAWx>WW5_Ly8(=1jr3=Whq*Yh9?n8d(A^l1idlE z4GCbWRg$V#;|U`ZK#SRK?2c2Ey}@~;CN^1!3+eBX+lXoZGV3&}1df09SlVo!VJhu7 zWkx6I3aN4P775+b#QujdT5vEw*6%GjO3%X+J2#|DjzJ2;K<%2;q>QBQhFd#4Hg;PS zUL8grOtf@E=GoUpDrVj)ia~pv2r-egJ}4~`A)%1MZ)*Wf$jBg%Ncd-qrot=`Hr0yc z%hWQvfI?0BWTG2Xii3eqCh}DjX0^54Ye=!9EvtwssoQ|3Dlnk?0phx@?c;g;AdR0b zbrB=;fkrxY&dqS>Zi(mU_X-x)Vm|cO>lRXZvBa@hK5uZJ4J-|B$)g3lM+BKXfO-cx zWFhzWLG;NmZBBD2So5XQ(Z~?2@mHE}eJlA6@Zc!3J69^mwMlyg>)Y^Iaj@s*4y6H! zJn?8OZO#+b4jDsR7Y0BEnD|8Sti`gwx-#j9=L6;@z zJzcr85po7s=l?;3m}5jpV|O}1guH|;kXTRSUSo7)h7c#v@I@iHl?FWlmrtGSM%Ty8 z0f=B-h3Loo6M|4*VKQ4|E$t3bi1z)xrQ%rsyF1zxvUQ@_NUfagLN5wQ_^O(w4LE7D zI$~%W@GWT|4Rw$fqzXc2N=3EpX7VE1AmtEj#i0Y3lh&kGlGCsb@*`&ARQ(*1KG+ax znQ)6G6A^VZ2ACJPb~v6DP+11OFzxdvl#3`oe2L1V9mG}KYy6WuPB6CyOw?q)I1eU$ zO_yyeodVle95}c6$bl(YABPs-y!umm_QY7gi&NE>A2HNSl5@4gMrs244Q5gMyDnkk z=rNl6MruyiTMtu#2QC~x;5>O~=$xUU^M?-C4K?7pEUTV4ZTM%cb3>Eoq5 zd>}I?Gd;@vFE|&%12Ai8K3q|sGBq@4yaAm3k3*YfCHG4fZ3*c9!8CixNX^M{>$A@A z_8_sJ!|DnTjz71m>hs7$x8KI>2Li*COU%# zORUcy0dK>(^(F@{978t*B-W@w_${H|@%QoQl3WA0$e19HpA96ltiJq>b!Xb}9;4(0 z=30%}>)SWK`J>tzCUOiOJqWAuTEkb5Wg2BI9s^UjciKJzZ+7F(h|!OwokNJ*L%2;i zdgajJsNZA>@C#7)3U31cJu-u*46ho$p?yWj!FiUvxbatcim1%bZpmDid|B=C;+M~E zH54x#?zr{r(Gs?JP;=|<$?ygyqWhD~ZGPIYc>PTDD-2(L&61BU#UO5Efa@HnVK21H z)3NICi%WbisofNNC+YL-`Rv1BQ|*lvCbYGlIG&L#HK!4}!x z^25Iu!wBvoc~#lsF$w|iZ~aieixmMEis!G^y!Owpra|`Kn_KeyOOk&stZ21W%;R43 z|GNuJt0u7AOzv{$>gqbH+YxXYs&;3Mb`9;2mDF5F>QHMq2dgR8A1ZFPHi6#8x#RI- z6V8yBWK}r(UyzIm;(Hr#C6ltp7jGyYw$x>$<_MGZhc=hy zS9!oFa#`VvX@y?%h?klT8*t;hyH5s8qc3pYc`$wfbjo&&L_x~b+|d5$2rL29oGIC@ z>GH&5Wpj7AgZTWzsLY&2noM>WY|zn&X=|QVa(TSLl9`r+zZ_$i62Ut;1;T<0He5&v znxUIHLJbuUP{_d`%j3>7JN6mekUx`jEf^BS-=q=as6gk`>1+bCWQ~1|2Nn0lH#O!| z$Ql%jv1bXXW@m!!%c*KXq3Xo1Pd&ucY37xUM>p!lDrHYP36==hW&flxh%an_Ed9hUwC+2u)={Bx! zFJ2gGk_f5ITDLcjN}C?hit@tU>exGrTmo&Ns2ZI*;+4?%1n(3-813sJQ%)UTWv~Gl z*N=x-btJ9xtXus+JY@1yrR3}>(&g0Ahb?fry>Rz%>LRSvtsMVbCQ5m7;G1cUf|t|e zIz07EMf1raDM$I=Uflew^3l@`?Za!kqHAP%whM=%(}SF6)lYRxle{_U(vIIoqF1(L zrZhM^b@Q#FK-mdMkslK|pUNwclkr^r`aGPt6`H~g=M!_f)I(vDs$ZOMfN@9iGIN`} zq@mf9%$HZIDWYm(w4z33Bl%a;OEPl#o(c!{j`G&5Kh`6$Xem%~Cnkh$v4{t_%wdGgKe2Ka7JD08O)B2vyHLy18r{B!9?+2!Nc=Rrjn!D+Gf z)Ls)n+E{6~2EkUf)Xqfn=vQdE?dW3>%G zm?5UiuavlMpzj)kDD=A>Fx+}d$K9)4I*fj!sb)>X)x{z^L3jc8)GHi4m zFMToJ!KDy&0Sh5h{LuLSL98f!JRDZ`^p~;7Xb?zc{&&-k+kaWe{v&NA-xRXe#7I+= zQnt$0*i%*hetMI$PK_AQCVtKILlG(`tq~kZS}kQ8iZ}hyq93);rhRj}{;Y}zkRx$8 zA@DpBKMl`QgO~5E02{WK*tVX!R;dgI@|3fdc<5gq{a4$~#f1isPF5Yx?77+NP+&A{ zI30ltxVsp5C@h9uH}=0&)kbLTLmnCIp784+-jK!+MF;W9I#8%5w$;@KvY^6NS6Z9R zb{(#3z7m)V&4jeaco^XC%=_+kBUk(#o!eH<+shgi5stCq=N_k++X@uFAUvba&XNba5LKEeN=TF z_zr(L;xW69`t-<3ZqAs)y&?8iE-i204-xGB+>I+rkpjb5t<>RxU1eID%$>*gEa!y9 zTzoxlh2v+{Y8S-Mut$fjPJmZsrq~kdv1kra%9ewUqgu{i;?x@ua}JiS3S5UP{`@i^ z@E`>JsL+M%(9B`*b+a5eb)Xu^3v-3?SiDG6m?37HD{#&|M&8QMU! zz7;YJ+CZcU6zj<4y6BHK<*i4HMKpQv&+|XP1|oxc0AN9uesOn?Ps`}GcGA5os`~7s z;ksADI*OQad@z%2%eZ>c_lVVPz?TS!gt-ofVcrT!p-oh3j3I%fu`F_WJIW#z$52&( z5)S$ejXDQ9lkHoZ)~W@^v&?j_>MSAxEyK()rPeM7ef11-Gw95%Pat!dajNzN2o@QD z0S-mM?GG&6O$L$~&MncC7eG|MLFGHybm_xXru|y$a6h$xEcnqtg9Zt*Q)j!+$eH`767~28V#RV=5dhQnq&b- zZ3V;|tFwbw>eA#5FcGrI%!)xud8D+aV!&R6%#r1LPt4$Lhl2XqtNi_HveqYnTz>>U zY1luFd!(xt#Tr7@#9I%BL+1X)O5x7u+>a)H zC`!hX{BmjQppS_@B&)R1ALU{&M=r1-;Ogf4$zS4l_&tC%2$rv|N6S|=eNv5O!#+~J zlKjyxiJE;!lx2Y$Erfh6I2s${{mV`B+^XCc@yg} zZJwsr%<^dQP+&e|F1+rRK&qL!PIH&RH_nH_UUD7?lr|^FAroBKaj0aYTmfrEg4tI} zY%A;Dms)@*jAyBoUHB-wGzVA+v6H$fXC&179JDE5eev_vVa89M0xrUO8rV!^1Y3-< z^`&r9A^5G&8h(u((_f-Dpfd^)3tL4r(Hb8W4viqE;k3>+h{J!*tKmgL&XI*@Y~$n2 zINB`#)eD4)q`5af@wXrjC~80=(j#LX{uxZaOqK9@RXk7Q8}8pfD0Lv(oOu6Z7>|Gl zezMQUaZ_t)#Bj9juN)O?#IoOTBs5=>dv;1jv@*}poL5x%5q9$R)@QwFQt*y6GSR+T zyl-pT;du7vo*zC60zOm)Y+SaWY^YY@CwXDa}eesyPWfPb(zmTrY^zc#zu%bqOqh2y)J&} z$Oe~ccHRew<=dD*ngm?4v5=G*wg@gN=Y7R4r!Fr|Ds}iMiba-|`NQZW70?$j4%p_3 zO%XU1Y0A?#`iTcAW06PqF7Pq}3tR@HD>4)wzq_~?(O!`~s>o%M^s<*MlgL`7z-g^dNk zz95L34~~i@gRq5nWG5;6a5dThp!YIy`@m z>hEYm8uo^#DK#Y;C|G#;Hf4#o`saO1+wPLPU**yAM(!@ydDE1g&|>8OpQ0z+LH%w(Rm7G87LBAQTdEKBR(fI5sUq zJE;4|GgVKZuO-9zqHky;It^ohm)Kj8z~T({?uw>a(BvXeX=p@BHTnJEe*En?vC^`2 zOPSwT?hh#OXe2n$(^hG};qL+wFagQ&bH$HoY?Ce-d_ersC(0SHdz}SudVe?$Z9_C@ zf5P_;jkhn3 zev{U8O;O>vCX6LXOkvig_joeatSN!H{0pnDr>1`;kNIXe z$(*2#@4Mnl8{tE_?{qSKnw+n*AvqEJ$)w>1^^c&n`PpD|@hR8P1}tH+C)9L_$7A^e zu#HP+BqHiVIX#iO7~P&UhG77+y}6a=U8^qf+LvOpi0cnULZ|THT6!!BfJJjqSWkhy zh%`Sm;L%a|)*n50Ff->$@Mwbg)Lq1Co>cQscqyR*SxiRh=cEQji^R&niha;eOU@uUa z6zTW4&{VD`r@~SEoJ%vGqk?$zwuaKz2)JcsNR&J5eiCZ?5O<(Gxc)2e5?14`5wqV6 zo*c;+8{DW_x?%=;L;$^gIM=`JUW+Za!%3G$n6`q3;(l_|(iQ0A!kBnt0)Kr!Mo7Ph z{e)1%l2!IY;g6QxL7zZlt+NPKFw`#Dj&Eo%bZG0kr;EKOylQ)=Ts?1DaKaNOUlG_r zc%K5F12OJ&10&yBEIc>G z#L%{BR!;_D(2mXRgbz6yrT$%L7APBv z7gx`?RRjh@0q_A7$$4K#NtDn1I=Ul;F6NA2JKo?!5z1YsDG&LxmIerK;H#fXbQ<~; zXB;$7yZ(hquzfS3DS{Siez6sNL!yGV6#Fr)N0iH{;)Ba+rtqHPl+Gel;Qar74SWHT zG_%t4m*GLj_P*)SbIyn*K-1AUf7_i48#|Q_Xa6S!vEq0;QQkD|OzR#d5Rm?; z8^bOX#5=LND<_)BfhfRJg^!FZ^=KN>A9gG#T?oDpG;kE)*Rpse==ywAU#|1y2(quZ zu6QWa1_=?rN?rHse{8O$SN<1F#ZF%7X>yx>KkK=(I!3*q>h#ToCBm%*6R*>^vq)tr zh~iW$X-aj0*)KCxWpxCSR(;LPhi)%;c72_Kr( z{O2*&La46EEN#BW)v3uG;?ajowMw{6^ZQ1Xb(4jaZpZ+MBLTKB9|%sgi0DI`qwx#r0hrRt-y3F(?I)L}%d<8pd6=d}!JQqsV0FvXB zc;_bI*{?7suP`1I%DeSfpHlg+vFG*-txHq!>V_eXw`3R<5J&UfV#V{?5fOpOjt^-( zAj#cKY1PN==NBTUs&<@@u;p{&R07|5CjF1oADo~p666tVV1#Mxp`p#W^a!(mV11Zm zT7jFxRVAX}KitwypR4gX5M{Iq^Lhw}N*MR8nx>YDA5)Pm?}Qx(O6hNaJgWpX*6!o8 zI{(m9zQ`%7HZ?l^6;_7*T**_SA>PuH2JVsx{e>wn+J!|DjWhn9Q7S(Xw-SgTbS=zm zQ+(el!>oDoMH*=!rdc)8>wNp!8@pipvdA>M=o{xkHDEun!`)uQ1P!LmRHW&VdcSc@ z_GpNRhtu2KqQv`v1%+O=f_0MFj22Q%$+{ z=pqI9J94hL3=NX5#g$yo_GPCq#RW+sU*545pgk3V_8D!rzy1WmcN|zYFdfEjb=Jhe z4TLmE(4`}Q2*hkm1GX&w+~7}v9~;rOv(pw-UCcqzRxgX{k>lnbz>VR&WeUB@PZv<; zqU5%^@3up^P(pI>E%gCxA!LOvX54Z0UjeKvT<-n>z)-lsh{wPK3psrTo3RaFw|5%T zohPTs@NMT5!L}f7bT+cI1EBhm|Ye&prD+j+4cOU2=};QyjTR({(4 zK~!|7+TSu3sL}2dVc!%2TdGtMT;wmGI4lTZ$&|HRmS;%xX(RxEjUd%>-Sev~p_W2W zxZ^9lYDxc#=JNX0)7C+ttbAMBdR_(_@Cn%A@4Mn5!p_Je(P}OWX78=2VwbMvtK9ft2jR19cEvF7kC3*6xm1M3Jg)|MoJ{tiitg>zez~ zP_&;The(`s?RxmmUFGeJZDB+>pF3idD!iHQHSZB!frQA8iB?;^+Z8In(qgsvEiW5+ zv9>llZbL;8s@rk=37AIlSfHrJRTeC5y?XjtG9ODVNol&V%^9C}-leRv!^>xy2nnkrLYBaJOL`C0DDff5d8YCl2vkK$!Y&d|0 zi6V4{a|*-mX60j#4@>$6l8N#f)6bPIl+v)A#&ME`yHw==XhNs?UVtpP8cFYjm2FgZ z_v`9W^d*`GAL#I&M=(}EP)Yj|I;7nBt`qA5xZTx<2ef#_)NoQf4j$|E{gDP$2Cq8y zJjHWhfpjls3AtbP+@7)vX@;82cJok_zH0q_zEZ}1<*{-p_gGt=5Lo#~Nt z^!z@Td7=9xKy?=PS|%qvJQ9C7BiUwL#`W%XnD zTeworDgzEv8a!3eu+KoJboG*dEMT z5v^N~<3cVLahxQrF=14*SlPGPAbF;DpEIedvNidl#*^*~kwY=Yko2lXe^pyc%Xe+k zCiXZAjwH9eB`FlxE2LlpS0ROT@EYPfa6}?@0sk0y*d_@NkEZ!rjtw`!R*NOTWEtpv z_cmJu{-&ey5yhRIzK+6<^h-*>C-h;&Hkw22;c+v>o4&?l5WLjsFf*f?TZw*Vg0g9W z<44m<*-9trR!b)Cr73Xl2~dDpC?i2(*8LID5}b!^YC8j?Xk8BX+v6N59q^Um9Y8^GhD0S_P3Eg0h9-Pna#40ui?2nY+gx~j zsL6#sAkO127-m0Q13BSQN+P4sq+Zov;KBXZsi0$~@4ZLQ* zhC*UpA!%Z<;Q4c@BKNO2neo}zdsj#F0IN) z^L+y5=~98Gp^(*awx+=>KOhk_tx>7~`3ae%l&zMfRe+_cTnR#z6ae0Jq&qq8J83)t zfF;@FbVe?;L13XRTt1ir(ZM{~ik>;!717vODuHid6JTF8x#0RJ6?(XR#?LOF$nDmmZjzs?I9;`ia94mcpzZDRN_y)pwQN+4T zyXey46J{TlzvgSog<}-~2~%mI6hNF@*#7QHQp^4M09(v;v znEA;1UTF5(gLA98y*;^GBuLIo;T>PvsrHDpyswZPfqYU_RChWKncS5mng55nTZXB- zqTIG<_l2C!xxklTJnPV)gxT%@{r+jE^2kif@+ObaKX39gEwebt1&LZqWDyZgH3CWj z7S1B})8)ad?|W0~z@9SSR`XKut1i)S$X z%#?T&q@VQBdc`k>sxaenM|yaTw0jD?=h{zMHg2_PYO+H7Y25>EE)|J`829 z^1Fpg=m>P@H#85A7+Bu}kDN5>akvs> z|82`@EAK&6CY!DMi&SK4>`7kA87|~za#{Z{;dK5$XEV&`Vd%d{CqLmCNNP$gkK?u! z>DV>Uci|ign$pve$Gm)Nwq`^yjr<43d`mp7NaI;Uw_y($HV7lU+%&r_VC%D3(sZ`U z$b493OHRB}LOH)GxeY#X1|SALPD8uO9F|CqIK$`g&j0N~;v2$!wontsX<(`bRW^N* zW*cVrcM#>yvwV_>@g}4ZKJk2eshzDxpv^VpIO{xexuQ7q4ipC+xkHX!r`k|BCz!rn zV|`+eQuC_1c(c+;_v25&ecVU8X}Wrb=xNYXW!vdw+}=?J-_F1tBbD;!Q-Dzi=iO*!*{odQCV_`haUeT z(LzwV_WHCo@hgH2;)4?f8A<))8urM8(Vk2KH5gmkx12758zMb1mGYgnkYJSNR|nP$ zuz8vqzjW?6%xgjA$0rFVY4^R8<4T#e4b_r!0{c>fiwxZHLn#Jvt^i@!%JX5ZE#Sa6C1M_azQ?t0=8S3Gw zOYAdr`QDNt6D0681zStH4dL5gGR;IfQ* z0+)`YWE>s7$ZW(*+&gQinFQ;jKM);k)ve;fQKy(g?I6qeg*|J@PUB6Y$9c{rx(nb* z3fw-JXbs|-{bOG7J){dtPJt~ZB)0(bqJ{Cr{uWK2n<)*b3UCPmh-3c6rxa{1uy<=j zKB9l8k=-3H#W)~$JwPjrn71+y<+m4vBh>@oDo}qQHjjI)Fol6-V&o~SH0MVBS)Cu0 z^I?Is-zY#HNNmC|tj5Ws^eb$dpP*km77y9hsdgA|rC<&MDC^pe#Bs^(pm6|%!aQ{~ zs?ycekZ-fUy)N>kC_P3u+8CHyS>Tk#3it$)>Mni)fYj{M&Hjot2ZV(ezrd6% zK7Bo-)GSrUsSAP%es|nR_r|w$IlmA$#AA0O=u0RoZ6|n_lsWGkONzk_PHnE-vr4{I z7~K(wO`Q5>YE8y1@F>CzeXxBj2YBdIj-+RLa~jzlal^i#=qDyDcf&P@C~C!oy&FrQnwHYp?T}rl zPv|I5LAhD#Y3n#avXmQADAt{gTheum?XIx+>ZCLU8!Z$kOS<|H_ON*2hkqY`{cC!b z*u4e{=<}s8aEJ@s29mO@8r|81x`AZp-1J!;mj2W!y=DAWE;^>L7M`$_(%$a=pQHKk z)UnpWTxCU*Z|iStNTo%|@ml%kONj9dv|jDJwwtb<(`xKe86S{^VXQIcQq3B>SZZ2f zrBg3A2Yes!+u>G{FFSdca>wBK2P$^{EW4jRxJOHq*sKsw7^TEtTucnyfJ_@&u8L#$5rDlh{>3od znyj&q8err}X2=UJYJ*hys6CoI_5G&djRp=l7^#Kz4dpi=K_U}6(bKRs+q(EEq#As@ zc+B!WmX-2jdfgvU0HyP>M5Ae=qIgGKLESAZr)Y1W#(3Xa9)R&G#JI1)xyXrXq4zeR z*p4-HfU!e!o8n*>$>1H$6OdnV(N0)e0Mj&}_h<*%Tl|mEJz?$;l^*%-KT~}pu+?O6 zj6CCBANW>LYPUs!QYYJ~*1#x`p{661nrEyYj#InPF^S${R_)4ECY7F7p8Hg!Ae@*e z@heI;6x$tgCRV4wC();Uiv~h`o|R`ckdxSkkU?KCMd-fpmjq%qB{>iHigf36Uh;N? zu){PxG~fQHWAep#d-In^=(b*Bsgp2?*bf6(PQFlOhv{d87pL9AxaQ~=^aJc|Ykf0@ zas*t@37#=?C9$vx9RmxMJ2PUAM&uoukUnvW<$fipSv$Mov_pOa0RMsTxgp(6x*6;!}ZXzdl|}_1M2Tpo%jrSl8vTN03&es>l($y zQO?uA)LuLR_|2m~r)6Db^|7SoSAH4J2iMwLnc|3Y62Z2T5IX~c2Z!D>fz*Li-e!BEERyqkTgbpT3=5DjIhR%)6 zJS*9jKK#T8qwdwpy-dF)ltJ!ztqi;M`(hQAoKGH!0O4KZIR zA`Oy7s?RFmYK^2(Gvz3+ok%^UOu@TYaXgZv?us*1&f37O1#*3W(=O5+m zTf;r$L7U(qb0j6KJZ=I20N+UTbp53lGG|ds;fa#Mcw!=#AVHe(K1MlR^j%ogKjvWK zs}4Lw9DihWR<^;rcffcTJRSG~ak$PaxmgfUsj(69_aC&NWvCe9Se4ATcUp+X$-TFK z;Kg)EGrJ@%VbP zNtL^@Y1QJz{}O8U=nyOmx`>Z%eacVR3M9%O@bA)vc6N?~6U+D$P_9Wifl&4;F6B@u zFx=8_QJQuL{{NA5owE^4@sMmyQpcB~&x4^|f9SKucP?1cGi&|1?)Mo;?8ZsVMwQ^9&ee}@G5F(%3+y zSr{fLshc;tDvjtuiJgW@`H$j<-z}o3j1h~@nhSPxwc&R|$YzgiZ+?ub0h)<>A?v)$ z1bB;n1lo4jB(qeR*rWz%ZphWcY&(^c?aJo+apZzFbvYI}X1SKpkmN8q_iV=?vb;Nvr}h=?Z)#`lGU2k3*Xff8Q&YBK#VHfx5(X0SzV zpVlH)?>~JKhqb0WNlXmKqtp@LYWEC%OrlUYdx~QiQT%~GJwv%W@ek0@1oc3yK9iOD zX>+wkQv%8A7faW2ylj>Bclf22KGz^dLeT50f=`?P!iLW(TjNVER6^U$yg*rz|M$v` zO2Znu-K>0-LJiUY#3-5b7LZXE4Uk)}=A*&Gdyi8KHOW1Nk_nIAobH(f^eidf@;hQ2 z|EZz&7`#cdtnB#l4js7;A415XWr$4%?q-VHj@*;5Gm09-Z?89gK?A137q41;=F(Bc z`4G8)2wdF+Kcx$tzgrr*g%#IZm|d9Uq*TgRH_&Ld_Y2Pi2X0f=#e z`h=|$u=J28pAm;lrg{b;xU&)IHR^$GDcXhmAaB#)@I~ z4C7p3CQ&}`C;8-H!ZV583%13GOrmhoh9>$v0lIlW&5fM0YZBbW4e!{BA)<*)lclV~ zI&DZ4uv_bz%`u1{SperHF?#f(#<(!&2p&fu%!t zuAS7+VpX+JJ-IG2tp>U;-626E)Z2U0(UR4Y;D8H}Ii89T=Q7Nk^i-3di@8D^Q=N;e zm#!#74egGM>%S6i;s zv%MeEp@p4bC(1%b^x7Ji=csBD6EsGFUreH2FiWxJ$E&n0yd?N*Z1Wd^d{rVLLZj_# z^ep%H?8!JxMfL^@rdY}16VKb$2-6=*p6x=LzGIq~C;nCSf2@6bT$6SGeo1P148>C_ zJW?j6NJfeZY#tuev;?(61zAA}hKhikWQWL1od%f+n!-RcI>91QP;fJ2%pSm{rbASw zn?N>TjtSe?>G%HJ$035l@9(eY$>;TWcklju-iPabUDsRxgkyvoZE!w(Fw6gZSNUCX z!$E>KaX-mwYH2#zUOeTHH0jSRBySFxv*A@6;bey2lAhTa69MMicOWMP7!yFw1N|?m zrVb7NThpRjMh~yhZCAa22gCFx0YG`|*P_!ZD1-~47_Ymz;`j_+L@IA}k zw0g4mb_JsTY21fc?Ezn9*xRcf=PkY|8eueiaegxrZCiaY=Q5epbbz@Ubbo}`wxff; zK|B2$1B1-QKf&NL``Z~=Di8=G$U~HYnIQreF@+TQ_K!b ziC4o|FZe&e9`iEI%}i^R!mMExc69t_M{;QXA$#~E@7IJw@UMnb7r=c8%qF+jC3t5j z($BV>;6o)`aoGJ@^ZV6ykaQo$xJs@+``ZODfF1 z>2f6Wib6zRH-wH=|PVz z80b-}RvS0Rqe0KLnKr`Iy*VktMUm7w#T8=Yd)S~FNMvqxD0GOzGE|edG`d9IyBhx= zoSNDa%?dnX;0QFx6h1NmZ)QNv@;0&*PMnqYhr)&Nu2nS@!x*ay`*97Go@jYanRh6I%x`~tRr3e7s@J=7diL0Gsf7kl$o zgVx$$&heT^xF*Ae(>P8#CwU(iMu+PHg6JvqY?s8}-?Kx0jg57eSJJb5k;9@Xs-@Yv zzJFsT^9{f%set=y^x8`4R3cTNI!dFz+i8anJz}{JgW+EM(ZHRUq@FTjc;-uG(i-V6 zv7Mh-5uXZ2-28L_-{U$1gs-r9UdFNtT6e(dYU)CEQjhZ)vXDMQ&1)-X-F~Obl(s{t zzxy^?ECUmm@i2up9dSRE(-GF1YR7RWz>m3J5(53$(!#qz$o?lq*c&n5y|@aBmmaK` zF|*VUgC|{Lslma?Ubzbt(aJr;C*o*JkU{fi_4 zm{d|wh(nb24`VdtC(6LlQ63hFJHp0kBZ1}^R8A>N?CZ_U$mAH=kmCSb0R5fKX zi|q`tj{jQa>L$QfnIL@e$lomqSLnX`+x6_OOImu@U*I^!uQ7MdoFH|5xF|n~TUbe< z!D?fXCVweSJT-Cqj<>WXPOd7h=x=}Brrno-E)wIzow)q~72ubil3 z^2YnYef6@To7%U_X3WV;u$2L^WjE<-G$)NR3sNCuUD@y7-g7Rn>wkm zm~CjU`PH*Uq)>t3L?b)ne4oVbO(|;jMi<}#$oA? zAdJE4m6cbWzM|oC3`T--PW$g_e7Q+)!aBbd!NoT7y{5xTU2+3+$xzHK6{fU|U%`6K zb0Gi?xab9$lliy2Jk0n~cGrHTrRs=4`SjvC+$q%{a?98j`xcDx38z$?+u_P&Y-@hI zXoS;FSofajx7q-*gN^Eq#slv7G8u3>{H{)(!#qLFKgf{r&X0y?Cvoq7jp=r&MI^WMpO|Zmprew%Y&o}a=&ymp(e>*BX!E}sD zB##HDuqfiYn%(l=Ds6rKE_=In>pQWhypH)|a%Ze*dA>lc-d=R-FDj3G{%zhI2Zu-sS}S5NZO0 zNqZkJeUV{=^)06_9wfzdr;)q68;En;K(cz*Ee0x%cfsR00)-IxclcHPV}8lJy2D5? zi~}Cmv7?ihj!mWEN2mcGT-aPrtO9Z zK0j*_EXcG^ZTA@}qQvQ5MbaLGwLVAg`7E;Yg7*N=Y;e8A(sG)6@sR#*=X?nsJG{*X zkFLdlqXs=ZOfgQ?PFn8w7N5Yp3d4ZZs-RoVEX`Qe@RlBb!~u7n_#+UV#$`F*^ZxpW4WMS6IX}u+6JRxxQO|0V;CO zz;j-5Ho;xr$$7a_53)A`{y=dgc>9~<35^R3XlmbZ5$JUWOn`-3q{3t!9rmZTTb5&^ zmySxU+0`EcRu|T~2Fw~jIk$Qg+HJAsw~ytVHbJVo^DL`X;BpcxkMQ0F3uM4wT-%x5 zd@XXDn?LbMPYh z1s9Z7&yAsb7xLIZvDYW}_6XMYETC=KNmJIlG6#{20!Vki4*ra~j$~#<(_%vDi?Yvo z2SFCTM)$QFT95;0ltfu%fxwy|gfQ?vjBe?AxM#{y&) zPvvN{3+~ivif12@l43o0Uf91E`s2C%`ye9I_1y^WR$&Po7WfVAfNsE#YJOE+h1KK8 z01Uz>mFNlYX%Qs0s7dB0^T?0lf3iXeI&!_H5&2oB=E{i^KX)QQnwDE|*i zIt{L*Q;%TYN1`@*H`T9s05yG&_r4HQU~+qxsfQZ#hR>CXt6zhs2tJJjL)D@Ug4?JN zBX$0{rQ;S*HDE7vP&jy}!CgHJvbeovNQkxW6%vAnhCrr@V=ub%e=VSAC{H|k3p%nd zYN6~Rz|E-jtd7c9dw)wjGoXEX6qyWstdZQv0o0a%gtLETr~Vt*qlfKxfwi-oYTV5| zIBcq25GxgdUlyer?|x1l+TWC9x*+K4wGP4?$_ox%amCpE;Z&PL^lc|XZq}RL>|2fE z*RnhWt{QgrU?(p!Tp234DXP4Si0lZAMmbhDMZ2p55x*dE)wRT7PIuIHDEegBWVP81 zrC-0f_H<6w#Iyt3uH2tL$?c6}-~J*Rzx+$v{|1dZkzH{5o&OH*Z~pY`cLfozh+jWD z?Z}tpUc9)aEAJgUb}?Y@XJ7hfgl{rV^ick0``Fs~O~ge0gtEmm2Mlx3XBpL37Y}h6 z;qCF=D335<`|s5U!(SdSXitIkZs2dL2D{{YJMG*%j)(&@HW0>mo5;nk`xo)u$BYV? zvCc*NfoT5kf!5mmJDeou27x;O%X1UI3?DMVL#g?$X_|z3NPUJWZbNP@cyEOd+xd4t z$^Gj2cf-kqL_KOexy$q3SMUY_`}dCSKR(sEZ02cm`ZS5gvN^Gs7dQQ-Yv~>EBKv*! z#V;{UVZ3^GAN;%XCybxDW8u0qchL)1{5W+zJjb(Swm2#a+xgh-W#$1~H?al$MWhFn z&I)}*eITyh9T6~WLNH(7Iqb4QebsN-sKKD<9klcG7GZFCP{+P-*Ax8y{JD*?={byz zo-?mrP};jRJUkuLGo(tZJMgI#nU@4^2*6aE_q{&UiTnPd7( zLW@0WYfr)xYTHbqQ(a38zkc4Z(JHQFzAXJI-l`s}YclI2@9a=o+7ZC)>=cmxWvy}9 zex~gG+~kUZhJQYu3h?UjcO&8R9iF!HdMm35KAx}l4p0bzYy&Eo&}t$}!LN_YhTM0# z1k8Aik3CuEQJJYoQ^wk6dQIdtA+bzA`g#z{NYADCcuf>60Zsf@hZamKn6I^zF%B)* zkNrXI_6db9eK{wanp0dNsxn<$>Gj=CQJg1?5Fdt6vD;t8A zP75jzOVT~uh|c3&>LH#biDvL^HsZUo;Yi*)lz|xlz^BJd2l*3Lxt#gIBkuCC4(KX)oTb8f^ zUUbproN*p)9&j;m#kxbkU6a+i4koh~XP)uN8h>aS{`(E&D@<`Ng)VTUmu@opptGrz zGpLiPToyaeJE-&!;Z%AzysBU#5B#XC_$myzH**^?@BE9C;2OYn^Bgq0!;fFokd&J& zzBOinDE^m4`y;GJ&#c;)Hk@zpNYkZvtRQZ*VE=d?XPxUv^9uM{m*5ZMJ-$n{%@d5H zkHXfX25M{y&%${!bHDS5TM5A<;P=X$C2;44xroKG1m>6UM&OZBNZxE$MODOSc2`>| z3&WG;`O& zPtugzHsoGBzLdO2y}VJL;oPmu)}|@Eu&K%uD)oVV^Jhx$)rW4m1OGW=<-PN1$|TG5 zw9-}8$KNf2KU&qi2L!m*2y_ZT+8*U-H_5j8%Q?iop2^KA zxT&@@gw12%uN!~jVw$pg{{AKVv7_Ac z(jB71h_j71_aq)kov;rnQ9XR*=PhbrsFvZxRuu0r7(8IuRDS5YE@z@v{#w+ua-XNz zN#ZNIqlPVoiU|i&y*o(&+ZV8Z%=>Cx?wstd zw}4XT^mYrhY3)s7hNY1{oA(#N@Xr}uV9212{rUN(JD;U|^KZ3-$EAap0hijAWp}If z3$*6WSiwB&k%+jM89uKE*Vgv9z@5+GQ}nQvVB?$JRvK-z;mys zejNPYb&t<->s-iC{QItxC|2RIkte;60`cwUsHVRPsB7SBt!Hn)Z-AtSf2uy-IlTIC zRcNKlIscfW&E9cux7IWaXk12qs#MGBF;v`FcXV3f+>Xr6SOuTxmByf@D4Py(Npaaj z6(Xl^MTQbqBD2Zm*i?MvmyVeMt2CJ%Q**S1589JhkRom!sTw+jta`Mu{a$;~?w4fR zX4pQmb{3=0NCp%tieMqE=elQ8vvHcFw#~QDMF{2z4TpU^?CTPvYs<}+&7wDwQAlyO zz4J1b*8G%bf9|)SC>F~zlTOWlBms~x+2*>4ckED8 ztZk$u5=*Y@r{=IAmzS<8S49^Gnp^}33FrHL%WM)eouqRWyez;1+dKe$AK|-xYNPDr zC=X?DOG7n&VJ-#p=LQ{xOStLGvsU%YMg+8|TxMda5OObwMY?}lBK7GPIESndGpj-- zl&-pmw&@0>8&gL@{4VuTm93FcCkZMDfqKcVPqC5~N{GEN!~7n(_Sda$(nDh0GZmFo zMr;Jsy>#9pYm&7oR^w^OJQp_2LS>uHjHHec`)pfq`Hw*nPgmNyqB9h9ix(rV+B<3f ze!4;zt0P}{fY(6dT&_Toa^gVMVU$7bYa;4i^irUcw;jm;Le`Au_!HDY_iAVHXFgb< zEzMS>l%Si9#jqvi=KJgu7x6+8el#Ms^r;XUH@>b4jJM~)c*#1ivT)_SVJh>1P3(Er zw$LxJf?@7#JiqFSxVi!O_o6O3)n-sdQ7^$iz^|$_yJMdKK9{Sqbf_h3No2$nbtItHT8R0IVwv$5{sFT$>Mftbq}X9_P&LkEO+S) z0pl%oN4$w2vid2`+OPn>Mz0{V?f|pUg;^5f$9|YM64&LeKXx%qc2MbCpPUN?3Df}n zBooRO<`vBO*i09qVWxi%kE&OU8c+6*k~ZJQ~p^dE)F>A#u4znJ@ewvHt|gvE}5 zfHqEfZi{68e%trXA+D`9txmV8KVPbea2^}XClV}CpxoV3*>F95V$0mV1dycM-QvI4 z*zShC{!%kea)o*`t{Su6 zq5ER$+Lbe}m&`$R<}e5{@t`4|6I3o^JvVpP|HfpI)ut@M@|l0oy_G*f%x7{*ca;TpbEj!tR>#~H9I{4DCH1H#4KjjEFuf$eN|^kWOV65dQ3uePrwvw z+Gh;J3Ww&G(EHqyzq26-+UZHC0WT34{#Vc*xE{YBYR?L~ zI`{g31S<|&gbe%RAnK;9<%jVugl;>?UkZ{-v@yHKwu9&p-CQ(=!kf}I)bc_ZgujjX zR%Y2A{O`rk5vAAqMq$tOBMGXbM&*$%%6WL>U@&#g;P8{mMOQ7yvgz=iF9u^c6wI;H z7N|SnDL7v7pyBi@Jrq8@26(a($uJC!z3~yMu264dPT05p_{E8pXO2%)1eTM?0oKVo zE4FUL8`J8(9Dzm7wvR>gwX#5K`KpShqXK4)YA)t)1_()o?bqP3!?UH)DQ`aqH}$pA zKz|)}6cI;7*JQ87f<~NEMdNKMZtyEEfo~%8F%VUVMu>_ zqq7+sV>Ra}$bJ!P^sQn2KXb<)MfQ(W(@2$=D7@e(L-)FaD^|YnjrHI|mP)W6voFL@ zHFnU0)}ddZ1EkU4fj~zqD0tl*0c`IBU}x8MR&Tv8}Zb!E~jo%xoTKyvy9tUw*R0l!HfLWszv{aH{Uj z-97yBy27-+m%YOzs<qyyok8be2%B(nH3M^O0zRw6*S z)g5%_0#+^vyVP~MlO-0}6gogpF6|^fdu;@RDTCr8K2Tv?ANCJ5x%Q7QH791*dib z7}56ot-X)a8b&ZbIjK&+8C|A`%ReN7W#TOUtq-e{>Tj#EIzMI(MRDX_?PLU=nRJmU zZ&STGF?)hR4ex7D3;;(^^_?*-ILO~EW$sd%$Z)b-+@Q!xn)n>PT_VdP?heGUL#*N^ z99RwZCRo%@GC;evyrXI4ew zNLTBIH&H!MIX~9>Glz1AAO$+o5NuJmkTx7n0ZuN(#Xr zB2*2s-7_$h@7p}Z5MJ6I^Cq6gjWFmy#eYT8;-f-3D;PM3C${tf3WYG+ZETao?z9;L ze^cN%GW2@{M!$~rbrsd4owZanttk}#tEAE$22N7H8;VsY4IslZ;+sCvdBZ10j~RaH z^+nbNy9qE<03FlJt+~m}OvS(W9l-FB8`xiw0N4u& zA;Zk3s-Z1v0QQ|ihK=;nT@*x43u4>2UNJhdqJyKbA(yH~sCVnFaBO8V^$i>0{*kd{ ztKYU(a5cd%7}jnG4R>NK{RiM54H^J{t73bX$7GKGG(Qk8yt+sE0KY?CILz9rD7mT_ z0l|ctD{EgJ$T@1)*l0ibu0bQFYJ>|FSjegxdY&a9>XF`mw_r5y0#rwMvvc4i`0d{O z2^#*yFWr;IHl=s?GyY?A@8+n4x+-MGwSUG8g+Ei z9_di2u0||ov8p@=!oywX!5otp^BDl0`bJgK9=m2kqB|w}X)t+gx{p$>r$elLGN{T4 z^4p@_{~-)i{D~Rn0>nx1(w#x?i4ARXcgvplvmJxJvByzBuN^TlYi50x5OTT{uwrZu zPz@L!K5kCs?DDV!iz^~um>xLf%&M;K2bsDrNHR_PrV$F$UVcLDl(o8pzstyL2l%R` zeV(m-;}pEhKP#D%XZd#c3<&zAFWumc@iE(DfGb`5I@{tuuI7_31QD@N^J0HGuZUE~2S3z&(v56UCEg=u z9K@ziy&<_3JBNizV7_MgxR^8~I-WsY2@GB7l@e)WLm-BSMNlV(Qqc zDL;bEXB382-^AWN1I-OgpS>Bo*SNu#La85WiuHMay`O8aaI$T$_}a&ly;+Rxrzeug zF(Qdl|3~ta6O0uQyX*(RPLlh_7r}TJ(K-kk348Cd^6c=rCzJm_pd-Kc&uG9(1gauQ zPt~=rp#cTu{nb|UeC_VZ4a1238#*XdT~>*waxdplL(Fj`|DorMnx-_ycMe-g%w~oH zg=xry;o165aI}ZCg$0t(sY=yonK(*DwKaREA?gu1-o9K3Pj&?J)UN#P(Mt!j+0~{@ zY+OYUWa3RT0|n$9z+_=}O{%8p9kA-tftgdi&`a-&4`#_)S&hNlcUXEty?;k|A)YN3dFvN}Xt&A?R&c(1=O^<;vP)VLdtUjiS zpzd=N3Z5?I*nk*j&kKN7J38gf9asnGx$Ewj&8QQIznylsmwL`ShlneWiCYvAZMQJu z%i-KBwqzR`I8*pB@Gia>OQFbL<`razLzIr0AxDTnPm|xe7eF*4Er5Ma-nnnU zqfup~=H|N?Fybyct}jcXgs5}`h78d__Z%hv2{MPaM%iF&BXp4^nP;wa z%O?~%llc=2p;NglVxAuk^B6=bE1HJD63s|GImP+^fR#i7doY-9nBcGD!ooZl)M$k@ z$Bpq;lQ(1o%TZP%&XFN;676{2+SRSVlzA6jKPXBFG7wfJJKomRYY+cirTPXAC9sb0 zY30^iN5ty!7l<5<#tg~EW$fI}aacNf${V0oTh}nZ80#_@kV34**x@eP3IMiUsXSc& zVU*6}+F_ivsMI|h7&!m|BAMg=!?j~vI25da-tY#L>_J{15s{{lxL4 ziorLo%luIMB{~fVy(O0e2uKgf>k9OSe#^|Vu9F)2^N@7D$4{U2*VlzkT@i@}GOxfW zSjwIr^bpO6-HTxIDh8Z`pt0g$E%CqZdQKAR;u4P$MZ%`m1DG6tVt2*_9^(>-Ztdqa z6Fj(b+drRC!*Gp?l!c~JU@zaq&EY4i*fHhz+=ekEB!>uMe}Ci z#{@BQ3SG3{8ZcxR=YCE)Rr{IZl5TcE_Qs43ATf zc1xZheBs@+ZWS{{g9hdnF%jw|m%<497e&Hgy1~!g?eoKZaDGEY&!&`8oi8>R+5+LF zXKE9<>-;g9lpJ0EE}uN3DyxHLosDxt5+{Pqr`eO|fQ^b0Xgbr7rN-L-u&K)AbTJ#d_RdkBL(9L0y(}~uy#}Z z#un=w0Y2!pV~038XY`? z!RVVdKoRa^-~49XqY$*Sk|ik>@!xt=ryieFk|;sXg(Jn19nM#T_>Bv5orf6r6qjPi zzeKpe%F|Nm6z0Z#WR@Wr+iaHOCRc?xS(#$MNduw{X}|=kq`zP)+a<$$kE?m}Eiv zm1Z3P?T|~PA59CYV0m7OS(1$*E)9pZ@+m()6@gWGHCi57Ptf}fXlxSD`uZgfUs~l4 zbpBYtr)w0;m3H}6M1CNB8nRbz| zPiKNCK`MAb@~oOPcj>W}Em1P4KhFFyN9dv*Dycd?4&{-1wP3ZmPW#J)(OwUOT0^H| z=?v=ym0rkeHQ_#cef z@P}#PRK#<`;6WunE;RhYgOb@S@Y-N)~Xmrhk_xU8g8?Ae^)dT zoLQMn^iOKnT@h$8+!o1*5?0(^}jP^D(e)!3>(svt*RJv>(8tChT?0rR~Y`B z&V30UZBalONx%B%#7dyPo#HN@g6OKv%n1=MpAOw>RW&uGm?{sthy5N`ce$RQcFfN^ zs2EzdqzzP}CYhIy?G91VdL&Sg!^#L@w;f>oX^!q#f^0}q;eD!DKb7L!Xd%Q|=y92qhjxR#^h;>ojj zNc*3_bT;O>@h8SQ33gr5sUwZkrsDm^nN>^oir?fFWKGUtY$hg{>ZD*S8sy8uj}11^e&^n~IGlm;RLvStng5QrY*|d-3a5bb920{72@Vyz z>?_zL)B}~9jAh;PHib~!@jp_9vI^N^40B;>8fN~EH)5z*3}TBfY4QydaKxR=+xSf0 zwtZh8gh}xIhc>gChObE%J4>EbdX*q3_W|myXY!nEmT`vM-ON{}gNZ7No<$9>L&`EE z(7!#DdHetsrV}%So7Mt+OgA6U8^U}5-!;-5sHWLyH!a+FyZKP=ZoTn71ROe6TR5y< zm>n>h?X5^P9}LG(1F6gczG?E{^nl~Fm#sJ#%{b+TT(4;hUWFdEKLXL>)g4yLc6K&H z*%sN9q64V>MA zV`gi%(Dz--;T~*`CT1Ow3ya>%6JOf_6u2$}oEdoetG_(24ivyv?1 zxe4TNhR^HmZ=SrZ=bJ}O*%U=%%DPrb8pAa!o5o5cFN?-3i=fkOYI#D0Kk##FfypwynD>sMcO{aL%2m!DYf^#@K8=vzQm{?1POOkgewbav}7oMP12 zKcxH?gB}klofgz+p6-(nQ=4R4j;QXrN6^)YUQ5?mmto(YY;u%(YuVex^s6rb)35+@ zma(6N$uz2#IkP@6tg|h9i5~qL+&TtnG88vE4@*Iahe_=ccPce|`$hueSV1R=OgdR^qDa_X&B|n9t+W zH_zcoDDOQOunj9#o?3Zg<_9nO2OBcbR7nj%e6ZFafIQj4^%9?dlmkQ-S=2p)q|wv3 z(pga2dCu=VBozW8e3h>eUiJO96r1V-l@#M}7;Yzlb0r!0wm^kN{oM|PBTyXXZ1?KI zN>^%6`K_QxBDc9J`6gXmelPr&qK3jRk!V2!CFM*!3*rq=cN&aBu1-q%`dI=ow#}Pw2*L_~O#MBv zu5iXn5unrQHCUra(+{`w zid&IHc!hR!OT(6a0Z@9>!AKE_X=duDD$hQgC*H;;BzakZ0>G5&73!=ZpN6aKm7Bmf zyPiJgxl1#7-k*VL83o*)#FX=3?E_{R0M&=Jd`lRZM*Jkb&k_qkm2wA(;SRbp)~^y= zt~f|V5O=A>GA+d%}^|dbYvJ0G`~z@BGa z1AQvI<&a{m%%kEch3bz(Z&unPhwh9$8|MPq7lFzY1DUR=9Fu4Vl>aXRW>EBfhvOK# z{oCQx?-*23b!H4rB3GVV0s}V3XmxZU5||^BYfiv*r_u|XC-BiEl4Bd~zTpr5su}@z zK+DX!`St%rrf1y_G!l57E`u9q#gXqaR#Q$7I{6fsWhc+NLLElOA+>EDBCn)koAFOK z7`raLAdkPH9OM#@HeuoB0T0Jzlf}qvuoXe>6?=03e-l~(^$ZIhA^i2aEg3}oz>l8> z#CzO?#CjD_ksc21rzPGQq^Dd{uV=@F`+W3S&Aa3BY^Vhmo}f_y^b+(8M@Y zglja0zpi-`Bs6R&mi*6AQRwsdAw-43?hGl55Z)s$E9M+P{nZX#0p-tAY9jySHjz9` zCrMTLvP9Ilcn;SavfX)H#5Zhed*(SwB{udANQFrv3M3|I0^v=fBGAjYOWBwwT#o>d zZ;-iS@1#uT^V)|~QRHfj`5=e!Wtvj}`@w;*OuQ^Xdb!vWhCN=(uM#v8fY?e`Vf@@a zV7yNKH5#V4T18Q)*g<|VGGaUmRQM(sI?UIO&*D=!a*LJIN7*04gR4C75ie8Ri1@gm zWyEDX$t^n}oM5mE6j-;FS4RtyaD1G0Zs}7Q=M}OZ8Pw8^rSrcsyCTFeo28lcNK@$` ze=gQ56d%w$`16)pI5B(?Qq@t#hGr1YT3oCf`DB8RFh>Wg-qC6*?>zwj2hYbfdS22k(1?H2bR#_6(9?4HvhY53Q$8RbxpGF=Sr+| zK+VheB5$P7OI{)wK{*rgHWVE%0BZv9G=kqX8#aEEL*6c)M!h(XObFpZ*(2KY5$Ecw zpemc!1o9qW!~;wYhrc;ju#$v+_6c}^%xI4p8o2_z#2(n8!vD+U> z+v~?;1p~h53=Pt7AC2xJms{NW#{Ov--}4YN5*{|3FSywWJA2VI$Q$`;<>=dCc^g(i z!@W+nSR55>0KjCXM zS%}nx9X~AQ1|C??O~Zw4fE85wp1R&=xJdr0&b1|yPSEA@;4m6nv4~>yrZ=!g_i>z; z-bodh7fk=**$rEi_5_jolACR1Uf8dX)If4Z15yLI>ZzY^7@-D2W2g2fV=FXIM57QK zG5)Qk-^O)bhCF3SDg}PY49!zGg}@WCBZ{m$J!lGeqcmFC30cl$1teDjK zF=I%}VO-HW%2r1hxCz^jFQRh@u-W!(JlwC(bI5HTVR*2}m=?hPz#=qm7tXy7L=hyN znXe6FPM$<6@fHKGKzelwL<_@f7j;#B|K9{O^R`f4Oe6jQTD!)lyvmToU)wabnqH@HUw>HFT z9gM~O#-ODwea2z}nk9v-U+h^h$))&g#2a*8yp8EhA9egJGBQTXgy0rN6^L|)0nr(E zDWhzJsEN>SuTQx%Z2tBN-=jGxFsH-=eDNsFZ>NZHZ%|Z=F`;WB>6uha3}R~Ycc-?E z@;Z7IHlEnoCaw^!Cb9Zr_$|dzUKuZtUD#ji%72Qpl)Z$!b55x~cBSf3oQ~TQN`ZP? z5*lG@6RuV%qDWO9kPvOw2~EJa>2&h7E9)btiKPE@Y^KJ7(Xy^UOpk|sB40ovB1(&O zme=z~N!nSX(?Q`o>s)Kd{sl(C8#x@w`IDloJeP)s%IYw{__$} zhRyx!da(IhL;%GJDia13_{TWxvPq6zw1zW6Hwn~`m`n%jkaoB~KSS8qh*Oq^4BE`O ztxVevd?PYc{Z*%fk-cN)b;l@idz0$J`s0=ZxX6Tb#;DN0dY`;fI~Im$ul=B%RP~aI zwEipZC>L}=R1sH|C2)xH9wwHV+Fsc~D)7Lm4oDp+@6pzJbSI{r-;D}Fa)Te*Lfp2A_V;Mk@-N) z^RUwp#SX&mrRO*Z!mWNC`czE*3jBKD1w#K<=z?U|v7OsqAucpJ6kjFJppox&sX1t( z>zES(?Vae)9mjbDm;R73X)9ik)ODVf>Mk^Z2>Rmj3R~!w<)0x3*6W6AoA%fT#E{l? zq+#RZ`AUQq&sC8j#IaRXTizd(r0V{nAc~wF!qN-i+hCwB{DgaBvO}4Z$6&8T`4IG| zP}t^CPc<+)^+xL}z9jE#f=9i2VA?>^U1WFm%IO6{lO}?5v=T*v{!<5#WK7WO z?6rU`fV!hA_@OjCgl!QQdEg~aVDF5O@}-HKcV57Yd?0n7|HWU1P7D?wE9V0pp?7Or zyv#3mYh5i>bOBKr)js0@??d1loD#XpS#f1sT|S{0UX*vLN&gfo7Oj=52Q&itQ4*Zk zt+{hJ-r#PFf3eaxD|8l(i(>fhnJC7riud|F0z@tC-q0rj#cb!bgdG+W1VFk zM?jmn0juE)e+$^5V|~$ryaHkEk4dCzhIlVZlH<^?=chdNBGy<_&StUJ(;M;34`GUx zq0lIH`qHnIf}jtWs7kTeglz#r46)5Ec4l29e&>1{UGa$|Ku@XjxMqT3f=-Ie^VlcHX!JKW5aszIE|9scu?8`8V6} z5nWt!+cNa1xV$VQPM?KXg2%@vV`Ctk3B!dmg)Yr=Ez@ODfOkX#60+Q7?t?R{%0+Hf z(GN+xGB8lQqBQ+3m#xmg_@g+7wK>Y`RFmyK=Y}E;gHb(R%V@`d>3GkYyO6C$6!>$v9_CS za~epG5zLNT->B(aaED+Pz$Z+8M{YVzdps0K%2xHctJiL47hs-slq!SU%0eV60uS8G z@fT?17bX%j1iTXI8#=)a*KA2aKGBq|xQJEd_Bm<23QtfSA6|n`O3?AJ_8B`3U<)sF z&f13GX<Ny5uOy@vZCJZmk^i-M?P1lcbEiQ?(=3GRr5@b)f^3?VyCAkbHZDW?0^!dS zTeL`O$JEF>C1-7&rg2!K4x{(NplVgMZ97x-&cG_cS*s=Xo7Xzr(u)SWM61LRN} z&zuO7+OE9Se_jQes?keqtmT;|i)YX_` zlfZ+4`8c;O)9Pj+cYpwMK!^FY8#2PrmbO}j>!u``@NtK12BUEkM?2|E6%%9eE^TI? zIOKG4v~XZ3MHJkZ=8h^_N_^P!e0PU3p-eLVwd<^6o~TP(fuqnvv@nt3EKJQ*1Ud+AO)y(JNM210E5kU3uq!c9BHiNAbr* z50PrxkgS1lQb-#7f1StgL_z{AT4nOQgW>#G%2oTfFUI}^I<&)m#yK@kYnVsCH;Ysh z&UY3TU%>}vpb>_2rVnPnA*>{zJII_uLjku-9p2*srTyOxDa`8yYv}Y0Go^7q(_@&; zoO2pxlThDDQdR$|W3s$|cJw0HJ*OewyS@H7d*3mPND=0@3Kvn~mrl~O7=3^Gof^BC z1p)np$9WBN@_Eb&pr*Lm_%aLI3mdKy2JkQ|?r0ASC#L)#8nU65(_YY;NOK#gZ#w$s zX^*+B$_{=eyd1_tDxkfKi;i2yVVrCoFu?R%W^3SBUo5Jc2B*4S`_l}aoX}xLwInz= zFk9rDVI1s&4`7nm>y>S++w<-BNYsv*3%CR+|6j9CJFBjwUG+TWFoKammV1Upp2~R) z7u7M7#FC19ICo#e1~FprfX1DPG=hei&VhnNcv;@n-JV~mK$Oph zTc-MBIGV=KL9Sy63{hiXNNt>xSssB?Q4f<<2;#(J1g0JtSwhY_@gf(3)_@E}*sV2& zPb#5#BoVasQK{AHNH-k%MCm)53R5UEpc-9+hOUul=n9929J)ScPk~I+K58LRnBy+1 ze%CXS$YD%z`zS$Fg4MM}MrDR`t$@BD3WejGe&}fwt@`%C%L)F(>tH^Hb4AN@nlPIw z3`~uh#xOoewcMLk=z)Is7a`%#I?4$BngTi# zOlSRTkTo6IZ5S%c+IPO+XS_!fX+F5v_MeKbib>=VT>y4rWIcCV4yr7Lpqu zz3ahGR{Vu&!*_pt05sE7l+;?zVFsl;D>8Ta@;F!CFJEAaJU4(o82&4$t{Midy`>a7 zpjeImoY_8fyiWs)*7s;#Ac5Z|?9KYKkQMs^fk8*LwD-lkjo_#nI2_vyK<~RKX_AWF z@`rzhP0TQB#?xE0M>;yCgh?)n`VOP11}_~(Z-<>U`q7F>XUiMs((_y`(*}CQX`*jq zoyU@{slgtZ*IN>O++uZe(W;u4ygf3%oqG~f?IK2M3>bq-yP>O?8(L3(tNJsm%#}w> za@h!EFWh97gVqK{*YnLGBPH>c>Cd7r5N75Wp*>QaXc7qpQNS`MNs!?~s@Ji7{zak^ z+%XX^`tYy;C#%Qx4oT%=9#FsG15%q}V3`D3%LCk7%xpNM z`uQ_`EI$}aVk`*|s%THwfdS^GZ7FY4I`-4bk>f=2F%pv8K*TEKqE?shXf2BiUSTpB zZ`|=BelQ7s8F(m{yhAk|XK#y@Rqs3`O_TwxQ!X0O=XOAA5*5I4x1&W>WO>uVzrWru z=S~*APrHd<57V~)04DPwGnz@7JU$uxjybklc6fWeYt@vsUB(!0#5{LHP?S2+#uc(Q z`vfWI>pus#wkC;+Z+UcpUOV||Jb$$yFR6#bS8 z@_>6Qfs^>n6AYLB3G$nPG0Oz7X-Z{HweCKGPXukFG|Ie@OOX4jPF&9xwo+sea1>cS z?exEH`i5uiCp5_!9jm-?#ygBh!C{%=xx4J~)UQQ0sH8P~&&G*BOD$OQ0QXTtScGFT6$bgXqn?rtog()hRzJS<>0v2P&);x z%b%bk$1`_pji&v~OH>mMdcC_EchVjGuR3*8pW6&q?Tq6MnJSu!06viI!cGz_13=p~+|= zYb`U7Y@EhAo$OF@rlMF}^zl9gX$ssU7>_oS>G1tv?Oeb)fs9UqtSSFg$p7+`MNv@9 zZIM`9P4Cgln?4!eGCbbjVZTOTJ^r11KVOqN+1Ysx2MgrI~4zv8f&Y` ze6}!J`^Gfg6|EiZ%bYeejna4vIEHywb79g8)RJKYBIrSji^W*@zJV`)#Ca&8nU+bW)B}G()aMGkt<-9zfHW(S^B5U`aNBRS70%!Nk_st8nCq=7Y zA^9Zc!;J4h-B#e9QN~2qm1Q{~;p3|eYfEmVig0vBvA`rRs^!@f7(fCgZ0E|TcTY+pLZOjjkqxQN(An1v?kz6_W z^Gw*VK*7e<13zKc|J(UiCWR;|f38wa+xn2==jF|cCuqJxWaCY2(sIbxX-ZgQ5ovBu zy5h2hCK2_lE!u&3?e7sAF;FqLH=t`V2j=$VV6^*N(as`%TsK8)5*32C=I*}z7CA|) zjXP9(`4WJx<(+!<88ao+*_XCQ_Q2W-?u>+WE|lh?wR zz$b9U5Eo<2OEdA4$<#D;p15sqxf=Jub>-@2^d-y2Wrd7KX!-U}Ud6!G7R;pm$u1+x zQGyCFrdqRegHQga93vhhY8Dh&swDo2gjAlS;74kA7}`-u^}y6XjZlLT z1SmCzANP`%u67TEU5H&typo%XEW~e2n04z57#RlC zIs_6U%2IG>CW7|V_}1(syFlrAK;4(Ek%XI+w($_=vyCnI1j9Id!!1|-4k1-TRb4Xh zCq1loRl?#!5GlK)?J7wSdwyx$4nQ#X2DNgqX61MQ*d_Au5ED4W3<9+?ObTP7??xXU2gG0||>RlNEh zl4> z*atk8!HM;Z==@6rv-_{>7PU2w>RJsa?{+;p1hEy>iak9doO#pyR>wiIAqN*?SvhGu zUpz|CHrnllpC~Utl=!lKZ;xNr$G*Sf<}=rkxiO_WadQzStFsxD>}2z8ak8SAGXE%$ zOy;7Wjm&b61ubMbiONVCl6*a8$!#KLwQ37D!q#BByUjZJ=-uwMBu86tps5|IZ@sya zMYi1(nOmDS5Bfuz6J{BGD+?NKRHUOgY#sh+wGdeZdrKTxg%g|M^~0L5bcE_6Nd!Xe zVxb+qvKJQu!AdYO<4b|;x}_tzfcGNFA1|&PGtSfYietYZH4`3`7!HJD7Wo5yzzE_g zhkjBO4=6b5&Nihy_Zd(IV{=<0yzMkK7(>ObeWJ>T$D-mSiB)LW&Tn`Y9D1PV8~nimCSro$hT@MzDtaud_+0LQ5kU}PjAX6IVVSm@=4+ol`Ai}~o275C;NJ&{t#6)H!CdiYdS_nTRKuwx} za+F%WFy`EJioR${>B?#)<4VsRoRdWD6BbbrGLR;fxVaRqE^P+$UX)G|$v;YM-JOxN z-gPA2C8%Q!0U^;$w7H!k45AesJ+}oEO+8sU?ek3gxptZ|)sl>Bf-v8M&9~i(Qc5;0 zr=}?;Bi;AHV9kL75>N{5wYJ9heq)mN`_6o4!LNB)lPQ{=_SSv9$b1lYp#%a;T_Af` z6X3Aa-%gS5ACpmNagA6z?gzEo44_hyXv`j^C82X{IQ1ZXvQe0Fu-P6Uf%D+rw?*J^ zuT1KPyOtxo6+Bq6om#MQQw^&rd3u|*!D>AV%Ypr|`5`{SQKnXj#F>F%lsTlM?0|VL z8j2Bbw4U)Ap50|0Y&i5e&IH3Y=0Pc96N#@2L0OJR7uedX-P^G$0=#zUAr4_H(p8^_ zZOrP?gcY1%)p2s!S76ujUK0>L@oWHu_|0Itj_OA=2+kI|7^9qr*D<#{br4{JEYyqN~(@EbHzDT!sBoWC?N>iPV;34>~?{d!&Gv`qsG_e!*U$# zAJP1V(Pc?}?;MqPYMQ#x>O7R^=79VfvImf1w!)@IvvJdHL5ZA0sj({0{~}?XeKdpDIhetn z-BPrv+{02#+KUqSoa~vf&_$`Lzl2q8@X&!fPq)gXshn8^r54%%eM_HVYvnnK0{7e| z+BVQ$WyO2-BRph*TO}DRjmc=B0h3dP#`9gFAX4bt%b6%w-L}|sbrJt~+yDw{HB?ti zQ;j40(N*d0OYIZiLHg_K=}GnAkM=}Mj&&}$6MQ;{uWwOX6Nv?3G-UKFUn2#DAjUW3`SWg4Hc5YfaKCVyEU$UpNPHd63M5h$m znJR?ngPU`_R?|=G8tzHtq+97T&qYj8;#EGO|L~OH-E7BZ^>bDGRM1;D`6ov4K4F|& z;olW(O%*&n)T+Rt*0S$wfLsTK2u~uOozWVwOJA049%x)G<$*&HEvoT5w}KdFpbD?uq&wyJD#blJr&{fuHRTKYtOHi< z4(?sxsx}X-a+^Vz_v)I^LJ4*dTOrpFP7bIRv7ND4r)Ru?rz05UcXOyAUH!X#M#^Gj zhdU#7mURf*noR+e6FhR%%i}0y?Y7Ev`Z^3ANesEe+86OC?r3Jx2vagTVrb26#bCep zaLe@CxUt;)zpnc;e%Wq0(_{lQ- z-9Y_o*F9a(_PKi+<|34X$1wORQ)Y>n{Aqsdc3?N5_={kJ)J<;}dKFVE!3xd^=u-#c zaj2*w%`19j9?%2#{ed}ZjO+&*{6eFAlK6wW4aLutN zk}Hyq{1WqpNv^OrVP!wCb?)t$aP~cn9Xunb`j6`C{#;-o4^ed`v#y2E(JW?v@vwS@ zN2A!>7-4IPKkDA0U@m&eH!mvOrbGWEW-R)+ndcT^t+vV{b9Y-55&s0b==@rF#|+ca z$v*?s{;Mkl41ZU#cF9YyB@8($Um`buOXo7>@^8%G;G5!v_V>P=cy?7aLbKbZo(I4V zGiZV>6XDR%_->IjTzdmc309#LxdhBiUyb)QDH{l)7;cHvZPAV$GIfFs9ygj&mY66n%4m%o7uoYk@F>?QA9BNyw?1 z?9g=55gvK~(?nhs>5~eH+wkym*Ocm6(qWrZ=|HRRJUrV(?y&~5YJ7v;FM@n0YS!oK z#pzt1bNRu;ji?7foHVI^zgI>g@a*2GblgOU19Kd3B?$b2CSstwd0!Y9f{T^j-*in7 zmOqTLh0i;c#O7Xiv=g9yK-ZF{h%*h)5#sVW5^+s>Bc8NNJnhOVk*69Xu$k~z2>vvz zmUqRlGRrcbH~@yhl&w-AczD=u+%`~R5^gTCvFq@$!LQ z%T70_esi+d*_i9MEJyQQe4B63^a8^x&+2~fFF=2g2ZNO#&&g=(M03qpk4{+2xnzH> zon<^CvBg(Q`vt&&Cw?gieHY9egDA?)2bHr=o0YahUi(VVsS0LlcOAG2WKr-NL00vI z%Ek|~Fe2B1H%$uwmaA(?@(Wc)Y@r_#F9AKR&V;ea`@~KQDEDtMJNsyjQL&$v=Dte- z*?!x?km)NnWJZ%(8K@E4o&g#HJ%gwhLsG)byTntm%A^kxv}DPO<~Sc@DMX0)K)`)w z6&Rfauy<#K5gh!?Kg?1Y0Lspqlm5K1bxp+n8qCNj(r(HECuuM2LUm*%l~SWtXMKQ} z3ur)qyWz8QE2AG?7lzX$+fwObNm~+u_yGp+E$~13hQn&hEUCs2cl*Kj8SbJXRCtzJ zTm?TAlCT4mUt(6*4BulBO;=yaguOyNc!+{I0YPSgH4p;DN5%MhtDM zw>ij)u;a^U_XS_N&kKYoNe3`+uG^wMa+fmhfV+1mKLKBci-~^B0f~-6*A(!|H*66q z+6kZ^-@s!CQ#1~w0>86xB8&MV4a{iz(jAigv?(I#?~uii{3fwHt<5bQ0d*j!w^Yz) zef??epXJ+!Qp|^rR9}i;(L2tRw|n4S(#4svjcvK@1H%%+^=!Ub#$?T~jpsS9YyF;D{hdP+_s5Bm?op`JYZ8N}EZ~{&Pc3T4&90@C6 zOJtHFb(V?KcTr;b!YIxg;5$mP?O>VcDbeEL z8;CFs6oP}Do?zq79OWJwLHS@p9Bhe8@k7T{TGOYv8A~KlPj@8GLV4 z%YN72z%3Z&HIX_S266x!ACB%Y@OQCgn}UMmc`62k>x69P5OScYzP2 zopQqglVHH*OXM3BV@T$@^(a2(HQF!SZ24iiTFdv+h2)GSO@ayQD@V@DuSHGR>?FXi zYK@H;onTo8P{@nz#c6YBUG_cUp>~=!+;EH$w1J<()L^aUwpkPYyIFXK%}R zm}ClX@};1-Jni=kA$vr1zXFp}Wb#%wBWnT&AVSJd<&XFnoM(qG$rxIFH6K=g8^Xk~ zd-DSU^26L0RHMd!0-+C^-9X=D;-J+W)TFYv%SQcp<~KS|`Vq$bI8nuXD@*zuUDwE3 zA~`qTq-t;l>N>$~Vd#0sJF|COwEEhc@wY#sDgV%LM!rd`bXmG-?hs&&sI?qw zcRtL95*4Tqgik;`vaTZu!p_3|>v@#-UvY=2?>J=gAC^uZyLCp;s$6ZjpTy55#B!pS z+D&TntH)`4P^^LBOkWEPk$|OW(ns-{y6pNM&QDgJo3NA8%e5OUeEGbe=F^mMEd0_U zKu=JI{AX)#>JXX{&+*ojn=YYJ16HE?u816h?V=C_oJcD1GpPm zfqc@6$1P&*B~c0IpaIp|HvbH=wicb;^e$vo_2c>VOt~;b6Hgf zKJ22ek)|g?yFLto?AVOAxSzx##UBf6ByLf+3io`%Nl=gBi8M8&gPh+83gV0_?ZX## zDL?W9!yu6mL=kL3uk2>$(7V(Ea3e6yHW#3+WKT^r!~9m2Qy9C#aky-*Eny$FqW8gq zSl<`0W(?jAVIOFR&=khmI}aaj#Oseu=XTBqlQWp}`g&8~W@g!JY!5dB8QEgLO(Q1W z?rxB0;MmxB%|oo1+JP642>qW_*fTr~ zAtKmtNSkg3mDg1H;l;-!pllp*KmFPz7($V&di$X*-xT%h31d8>_~5##rxeBk(d=K! z*lIZ6w3%~*GDt#BkR``wWKAaH$5-pj_wV<4*qS4hYcP5Z+3N+dg8!@!6-7u$| z?iWzL;9>c3e^Tw$*9~M~KwYkkzTE!S08Bx-72Ycv>+@KupE2R~BxFAgqS))~dNeAB zng(-y42Hwl=jh87Lq00Z~z$MCfL%|6`dVZDO15uGHT00 zx-ion++Z~*Cq;p5$nE42u_0lgPQud`d?hyTNJi=5C425xZGOwnzutbaYww~b6gEKk zT9NdDWaLm(*J8HKc8k)dFDI6wV2dDy|BtjQkBhSU-ruq^TO=366;d;oQAtUWfElyQ zl$1;b6#<2m3}r-;b(Wu5sko5Zh$b+Z3z^7>8zL~13XXv=is>NRCNs%);;7 zcO6u4uz&h~V-W$5LdJ{gcH|HylnpbBbKX)XD zHw@FO711r_EC(32sg7Ot2B8Vb0L9r&7!J(!D8?q+!%SW&G}P23-$lFrspeiAtrMen zp)#hQQ_&gT-qp}bL+Q;v-s8Tr<-E7%(+(2~9Pyh+b=0HDT?}TGX%PR@n}uJ&zl|G- z!qxQn0gp*{eO*7{85FWMcL?3W(Y5Rh>QASOZPQ|jL5rl!+Adic?Dhu!aWQk$Bn6YU z3U*BGjQ;_=33?eD#9&~_qq3ameN7mGSds`B^|Zhu9fnI5-M(mC^bO<7oB-NLH0Z5? zoqF}U-$Z!lTzG`jPuc!y+C^-1|~0-+0+zsU5v zXHQ%Qd*!!8`gPP40X6|REhr!GTN`k?ICH`4q`>rNAJfOv1CC^x{NKj$gcqBbB?RoU zHp;4P4pfm5V0Z}C?vLQb10xXTa8{pS`eJtoiY(X0Hm7&`c+lu*NXDr;L`OXBf{YW{ z3Xy)kpVLRyVmi&Qd#$E_&(y@`$edf~7^dBpIS?LYoAJ-2_=^sczkIxpr5zs-nBf}q z1XKmPvRp*Wc*R`3t2A@R45dI3e4;2t34*gu6AaDhN^%d{C{i*a_pFKuA<_|FqVY-} zHo)rUyu_C}-L0Z9k)P3cI;2f8xRO);y1CZ+=F7;mL}MPNo_trj7B%J)Bf#OMvRsCe zrtd^N*_IifBqBl#$j)#d_>W##b;iS-ouhO4HU*KQ;p;w7C7yXJF<6^r933To8tM|QGj5Y18-U)`O$g|98pi(p)cWB4D-!=pGA)i9C+>RwnRt9dkV z7zj&4>IkAFpsR+3YPG)tpYmx<%9yHdcu7es?9Ur4<^ht4$$>^R;tj89VC&hO647*T zR8H$!Oy|(aZ*!aPdtmst9#u=&Tx3lya|(rfKP#F%-<1{RDXD{U#ECGt4Y9q{L|;XW z&e*cTae!$74nZEk26>sLIsG)9%qodw1&$eX)_4o?4@Z&BP=a-qQdqgO&gSGaw{LEP zatBNLprk>*@hbzyhiR6X3WG<{v@hJDdBc7!h98!}O+PN04o)kz1{Y6~|IN^y#)Bu^lz!?aOAzRfu?Ph$K zxH$8&H`6#!r$3_$;q=aCcAnW4o&>30*18dBga$PQbA;%BcflwC%fDba5;p3bii$QS zCe8EujcbzW+Uq}ubPIL<;=ZhPK>CKpayeKK$7WU=Tfq1*3KA#H1Uw08iAY4ta2TCg+#lp|n40yC}>j8v`yiOJ?!p$X;x&6pKb zF}z!rW!l?FU*rZbD=CK`WqJRo>>GSS&P+6M0!Wkm5OC6f*&)?Y@nZlP#Z~dMLak=4 zKvh5tsd?_c5%&u=S7Lk(Jupu!8Dw><<{Mkb_xVq8BXMk=$R0V4P(2iO@#;e`8E^rn zxj(vzUlk+_f(}Hh@w@>n+V}nzX7mhg)wUQtLqZa$`A)x+3?Cqy#W<81+=ln)Wb4a3 z=qalp`}&{So3@x9@+#%(caW(qMOU&ER#vcUUyU!_yo|C{d67rl_xuc|m|K4}rM$iG zLM(DXn`W_d8K7A?U-*cK)qRtRr%Itt|HG~yv5^cQZR<%Wq=g|yUyj?OW*FsT6>ry&ZrlkTiAeO@Hx8WMC8*6y$JEmx;RZVrMyq0

A-~Ny+tEDa(%i-$f-Hq>rdGj}jt}ZEyBq~Il+j6gAi*q?&Fp6k z6ds;-64SjOiUzvCqV4`U^@FrqYLI~^&_gLH= z!8_&tBYuoi8Tlv&k->^m(}&=rWAzPABNC>pO)i9uQ+GQ@_~CiWG$(pZFS_#Ofh(z< z^J=_QXE;^^5<6H*ka>Ou_%oq5v%ShN{&v6SjNC4f^!}vvtFnK=r4_rMv0SqKQu1^) zlLil+dp~*0+2(W@&S%}l23A`Gh;T~2ykPm=3`TY&q@arcUq$FTz~H85-rnFtg3ZZ( z`qn|bB917iqc|$mK#a6mWCAyiC)q#81%Ed%(*P@7v}9^nGZJa|1c%D${ydUC?{2je zzvqe@{ztD?%gq=C#Z_YXPl7(lwU$apRN?M6l9%-BME9v~-}oLKw|aps-!HFNB|P@B zwRpSGi$)T){_FeFwR7B49_}P@tlsg_XO4rJ1jhSdK(d%oMCw+_cttyh;`*;q-Azp- zkrB02u8ISP0LVpggVq+;$1o3s^QEckE}^qRbWOfK=7Rp+&BpdWCtD%PkQmqm`}dvg zQRn=nsRh|R=Y+QG4B9Y_LgUqVNX&UHWjCo?)05Cg{Hn5kA-K{0q$ zkNeGaz4fc{}Dh6+%}A zK1dhL$Wf)C|LtO>k98*3&`MeE!xb(yKjluwcpmT7cOWZ4S#J70na+9?y4opLOh;be z+(f!A!z(86<&Nhfv(L|vM=uCex^-B`Jx+L%n)$&1!T^L19tczTy}%U=2<__1VMB2Q z7v&4Wh5d(>74{+x@~j|98&DX!$yZbUFF?ge+)r6KR!@3Rc>HyO%tkvf@JKG@p>7WW zF24RPC5^|UO2sos;B{G{XdE8V*Nf{>TAnre>LNC{Ml%2nUrR+jw^pjv1~|}o_Nj z1KdyhFl$CF1AV^^0Tz_!h-QVQ2KWBN=o^mYuDk=MhhJz$?3U`W;^jQ^hPn7o#i+)a zn)YSnh)OK4<#qB$!_k*cRy;O92^!;rcGMyMgmP6}W6WzM+a*38If?m(3fheYR1!_> zRbc--2-|be=rX~@>ACY>QY4Co&MvBsR!xCxD}@@T!QeF3o88j~s`WQc*AAJFbH8ATKxol&7ASOm<4vwhu(!lK0@lGC&|fNQ zRYWgy9ZdJo-@Z*LE}|5gZn%mb%fqW(75ZaAS(IrC zi9`dZKyWc#Qwmhi%%|bT_I9&>;6)nn2J!E1hvH;3GMZ4U1YErI1*ydSDz3uDX4rG% zXiw*%3C_Az-z3nOdNj!B#!J3o!!t5!KhV5?#AE)hFLg%pOl$ z!wWl7t{wVg|NJ_#V$VBy^=SMzHfdrx`i5XVf{2$gjXV4lPcEJqzuC1x zyaM`Vz+6PhJg81RU^Q-2!h&2sHOBoBVObYC(}Pbl7cPu$KSyaF6t{bCrpaZ;Cq|-VPA87VQ*uIj`pP!D z62HLdy{*Wf8C?HSREBJ9Fj`gzAd(Vj1$t^W$(P$!q|MZ{@D9qE+|Hs|Q0RW~z2)QA z$>0c5Ba4A4nHTv4`)ZBc*#`4yhAF(xn*@lRv0kw))q|X}h_O4Ea>Pl;qvi+9`Zhrd zMSZ92t&mH~MY<$=A^Vs!I^X@DR&=d&nzvk?#cL+SS|}l{`cl8Cz3y#ZDnONJGUiiM z9ppM)u9lUCwIue?Lt2TV#bjXd`9;(YB8fRNIF(cwBQLE;H0!E)=69{KckxpI+Lv%+u z{?Wc-63Op=*0^()-{w(OyDxcw55%)`5}@h9@7XH0KuMp%EFzN;yg&Gv-bE=`J6<#= zS9~{WL>>?|KFKcQnsJ#t3!){<<1KrgBmmMpu;Q72yz;g=4MQ~(;Pej zLE94KDML0>_IWoB|6Dejxt-scbG4y}VQJj%7Y=eDTyU_a%_~f98QSVd!U300J>}xn zlcLvZN@YVMC~;Hh?7P}{LEQX3UJpUuvx#r62s&igi4_-6@x|qNZ3N>`8myu^X}SZG zjDx@wtO9aVE6rysv=yMt0C6+wfpEGKZVy{ec)wEb0?t8oB5%B2wc$xKFY~MSCywsa z*Wx;uwkAc;gk;G9-16y#;nWb$)W^*?tmcGm`QBBMVwL7FKP?0i4Q|x%)egm3YgIhmy5Os+S+?5tI<~p!jww#%@At zs+sn4XIiUEhHgZ>oD!NDcYFP4k-9?`@+iC=ocp(rN&r*#DyaA%Ff5?pRE4O``*q}$ zh{R<`xoVB5?)QUAgsxfoyC1Ph41$l7@HLm-W*$M{2S8qA`BJ@$ML<~Kw9%}*_Xc2U z!dkNX6xA-#f;&C0U3%q5aUT8&&mk}@oO=`#)aEe;Sr{Q39mvuE$Y#u*}+J;+)T_g3+N zBc>DZZIb^9`S|sV#U!IP*W-UrpJPQHX`bBu?k9{Thm}DuXvffwo%DmEJ0^RB;|`Uj zwZV|Q?ZiZYXI%WGj;70(L7w)0Gxq!SwZTCMHbqP z4t87IgO^`r8G?nQ0;W5#v*aNk5&~(xC>T)Z8O58c*H#_L9nfpG1&#OwqBS~MT$I3= z?KsAw-00UISM@)^>_WOWb740lMo15lu@MTHh#OmrxgMdjVf~-Ppz>%zj@@23iSB&Qc zF|-*K^D)#Ep{=BQh+G|qPfDfxXN;N%G2(&{xq6WCBgO7u*FQOU;%RSK5&o?%v82((&3Y0 z?QwPUro7g7V8*g&e6}XKa~%8>!iG1OQYzIa^-5jdICP10QR*I!1|(5280ngS3nA;4 zK?*JJKY}{5O`5fp-k@!uToEtkJG_tI)CeqaRAHSu9xf{a{=#jY>b`^m);123CgpMh zZvA83&!V~Mma7vGNd~No{^v|lv|*o>G%h-o_L#utaC9B4W_uiP#`W!0nhr52qpiPJ zDwMNWW;V$#DjmzA)NPeYN`9o*Z*4pC3az?+4va%cLQGX+UIh~ugjoK@f(Br+@17%# z`mh?$*CaP`a4#o_y;l@?!?R?&E!NCBJmsjFr!n3ye9(FrRLT@!3aWvhMbHw1gB)NK zg4h-qSiX7!38FqJZm+%D_XRQzOn$m8YGHcdCs3rHEH;RO348b1r&$Oa1KrEIn2R7T z!vv^5Mv2;bO~-dTjQI)mSVXrz*$R0;OIP05pC<9G8p-t)hcq7i?bH|tq{_ZgV=A*^ z2@;S+VUP2U(P4MZAClw;pjcQ}=4{U68-(cuwuZuTF1U5lz&c>i)}8TafF~;Zpn%2$ z;q@s_h(RK60II`v`zYq!rUt`#k0S7=Mct-E?lC)O=oP~D8OsdR<hu%e|F8VVh;ac5Z?KJzB7?__FHIHut(B;wnAb}v zSL>&6hptaFMds%OI-m8{U@gda8-T`G*i4Ta1Fh=_=Lv3sm_IElR`l;#u+}1i%cRfs z)0Y&1Y)F~2Ip;YZngGjZEh3GKGT{gL$Fvh5p}{L+7}~j4aM!GCYvVaf{-P}ANEn!W z6Y3^;W~GN!EpQv_F9>nt9V`85>h7~+&*Tj0O9Q7+?aABsu6O~uwpzDwjuB^Tt7>-r z((a^&DrD%uh{pc2`yv&YXwwb`32vl+i5kGf>>Yn$0mY&kOrWM5xkI|5T)aKDh3k-aJsp7Pi%C2k;QE?2H}<*)f| zaL2Fcjse$@pI!W%y%2!E0ofz&Hc$*Lf$KlrwYx3qNV+Ts?to4sXYzX2(=fYEsQ3RH z+J!*Z)u^~z3hph?A2SaVW4pMFdwApSV050Ja~B}qrT1*keU0wY-{53J+cR$&CC+Fy z?SP@Rl&lMS$VdI0>J6F@En9kk1uY(`ey0d0M50;UhNo?=c4xK*VgBye)28s*8;@a< z6J38OK=HA!kWdAA$01(|@=;X6N;Ilan(1ykN!~1#M@9&* z{{FwwbGI92$H8+#*FguVl_Gn13&@3S`+}RRxt4$lIH_dH?Stm_XvC+SSCFP_@H&ox z4GKOgm$2RW+8ZbGU0)-NdTf6qfJ>*(<}_WjG`)!-&NzGDcc6F6_kZC|4WBo3gfuGl zCN0}P$xGzC?xiM&J)?~yQ~=fJOPWw$E0)lrx9%$985j!f>OF?q3l<)vOBK zk+h*Pc(s~uIe1&D>nI%?Ut{DqEy_sTY&v*5w?oHV*lJ-J7dNgR&9D1T%~uVWt>!CI z3#vLaAq#XCzVXvrMpnlc<~_|JZFU0I$+Cjd#{)us)<_P;Z8nb2n>=x^B;0|)^!1GF zFhs<)mu6IFCrHj-cjbTCm+_`&n!cj3w&l8|m%)F%Pk=U+xoY*{t%95GN%Q)C?4CG$ zw;kip)U;nb({5}xXMFeXs@ZKN=EohC{Pum5xM}A+(@ExZ^rx}d>=&0bGoEG{)VZeE@D?|8<@5TBF_x*>5%zJp?y_VHXh=9Qv?2l~^$#}>@HcXeJlyv{M> zX5~u!jo`b(H-$ISFFsR!65i!oMzD(}ub?8N;#8^7xn)?djOvI}_Cf}HccGxclmAX~ z3;7;N%M2?d2D`u-w^HvnzC<6-)#y1o&F3AH@F(|Z ztF6s{FKO8Wp(V*T;KJ?4Ur5fbT79S?ZC!-Yhf^JrU$uCD)i-Ww>oOO${Ulf)ru{*1 zAe$TJYCNLXv=v0UFJUjeSJ$f9#WfDjDYxI&qIsK9uKFS1lAc zTFfYy`Hyh&ndP1A8+0=b#gj++67z1fi`*7g2$wF*Z7m(acd2UXZ8jPMA(mZ53s$RH zbqtKotxm_0W;h*J;dHD{YA%m~O?xM}4}+Pi4n>hk%xpY@Z>dE-vx?J}PUcP?jPK)f z{l8yRyMaTWZ)yh%esm;uFlWLt%^ldg=LH!HV}e#Ut!naFC%3$>Rf$m4LVHQSEM`TE zbW{d;)T7QOtiIe9_^st7SEvj)#}7ml8iJ-9AX1c=eda43U0CXg9jcfA!^>FGO4~dg4eX0cHCcD#W%fRGd119JUr1c6o*}QGP6E^+|CWhuusEEpv>AjmNy8^be1Wsk#rM7}~JYrnjZmZ*tHnoVrM|xs9LnHZ*^R zhu~b(z82S-cRpm;e9TKnn{E{7Q&~m^yS&s#xMR4}hGAsjsw{Aoc>j+Ij%)In*H2o= zi1pMrBd-;>&+uy{KXtEt;Cvs>62BqC1Y?!(#SHGE(){-w4TX(vB7M^80&bjf=7{4E zO{zm`R|o1x29!IKd%!+>zkj>ClM?NuS>DV0TsF2u+qR{T*~hI&!6VALj?3Z(XJ+J9 z!TR*GXNr>jG<}S$VBKv;udO1}5T!sB`DfMXGet!yr~5}-xD^|7Lbo6ck2DLM6w!SL zZF!{s3I3&7-VkN*XaX_ka3W7ubKX2XHSX#>1q71v6R}qds6UtXur3 zrC>drETuqM8#@;^pMJ%r#*UrBd&<^~j%@EzyGEbJ9X`L$$G1!UPuD`@IyQTR_%yyO zuV?>LlXJ#gaYqB`!ap%%Uc>Lz-LNl%6+B~Bt9iR1#w*{v9ow@t=&pUnRYC6|wlQpP ztNYb>*^-1YY5F8fWzgycCSE4nxN#Vs`(QDobnQe4TjW)~-c^Z$NN#Hcv7WYtkwzFz zuGB+@L|o;S1rLTQhy(#$6!F~f?H|3+4U3;T!`bFsUX>w!2Yn)B1jztTrySHs*o z-M1S9sLYC$(CKtPXQ%qqIo5^MhM#{^E>(U?KP9YoPhhB3#PtwAS{|E8Y|oF+ZnX6R zr&mR5ZhZ9X99LoJDgBC7s~5m_NVs^52(S33Ixs1hS)GH0;AccBTizo-y=HGfA>*LMoK(im!2(c$-5>D6bof5*Tz6{Zvz^Q+FLNajO&A98S`!cvDPzHT{o z_;rlZxHYw#VD4R~2U$n=uD{#zETOu*#hWi<$Pcp#eNx!?}UDY%?q1@kp^^)tgplP-fTDXOnJU7|x#1q(gI zpVm)Ue$VHKU_BNp+jBMw;|>^O@+ZH?*Z(QdoW)J0N@nwjC}#?iikVlosl;~5cu zMP$m9YaG7c*)eIbQXqg(@b8J1c*R%YaCD`Kyz~r*Ec1$XOWwR0Gtb6cWM!bGjNzd4 zzl%7HcE2n>_i{e7$==B;$rr0F+M{+rb-~&%*0n~Br!P_axB=d=J6B?f?LMDbHyyJ( z-#dv-y^D$b^;y|Jo!^XYIX{fvHjw?R4pog#z+?ZiK5l25_Zt~H@~9dAt>|22kTp|x z&+uSsi+rnd=&%%@J2M`u<*=Nil35e`@(F1S^(t7}_Ge;KRLT|sR<%&c`LpVa=@X#7 z@VrqOpL=x-pVdccPo8O0TE*l?X9Mux9lgm$e(vqTRE$+?Q-0;xcCA@uYK{Ka9=Shm zA~UtpQ>FPA^YLHZ>-B4K&F0>^q-7Z$H&UhV5l>pZU?7TsUMvS9L3`d|L-~#2?8a2?QhdWHH<}#R+mqcaXbO@tPj#tqQ<=_E;#{pH~73d>oZVt?9O+r9dh!nA0d)7x5tKP*VfH zvGy_+KOz~z9M>70N*Nc1Fx29hp@}6!O1u7=nEMtgJF!A01(FjgUd(bfTdrB?OrzVp zBe-dmrI?{>Xxk%-mMbU4sSd76VuicOY9}teGT3unW2a5FXJHCKRP~ZEh}h!yCsL>ENl?O;c)@9O zTiTvIP#if&L$S;NgAJ2b=2@0&nOHK8j z?^@>=ZHuY>2n(~uIHF$iYS-|}^Pd9MqibMpiTW)HB+xG#;`I0(>M3Z~U-}}LT9F+5 zbb0BFrI~yju(4@T3L-oXCqNZPmvtLu>eUb12rObJ*Er|;LHq1kORX;qJj!BV8(RE; zOHO+Cr5JegjC7VpK7s-V#Vk>~@aShX7Yi5Vk!w?-ij$PN7E3z@(O1(GPa-p$E`oV6 zBf>6%CE~C|Cu4J~BleHishlwQi^WifiX(|68N)rUiamX(k9RI=np3Ck3~w|;gnvaS zZ#x5d6Ha-^bSgtC3kn2PS0`&~xgAGCU)|l(8T3Gf z9x6flcmis2J9pJF_0w^qn>?dADei!zCEkDdjg*zrjwVaOlevcB56PBO0C%$FjmMlg zIRTns%@r!+#fm$MoxTY9*%Yw-vS#f;bcN|s5&kxHY`k#*0iVK(KK0H3UhXOY@X{_K zv-wQsg5$~-dh@HJj9ImEJHYrN5FCq@B!lfWt~CO@1pGK|Q43uB)tLjDyb0uzN*=oh z9JJH?3gTryD%M{TLE%Z{+66l`9zR*77?=ESD-0AM_f&a{qHlvBq^r$IX7zlZ#+nCP z)o(tqN;L{}2Lo96R>WS4Bl6xv6(>EY)u~Sx#GbS`ZjUz^08MEeb!O{3IO>}iwoT3$ z=_=m#clxYhvS2!Ps70O8n(n|%65xp0#TWzV7oE>Qto5o6vcoWefJ-A$9E>T;uOohv zLP1Zt-$@d3jSRn-T3v`{_&O>Qa;k)_NeTEvdjzl}B#KDSbjCfp zTQvD0v^T~V&~f7%(}+g^DVgrRH zhxj&!nch$(^*Xv(8Sn z)XOXd(N1Av@dwmvKoWSdPWdSfXN3hC1DxBqdqgBmnVp>9+zAx#KFngE2ArfgUb4jf zbpq0;#UYKDsym9yG{F)r-`+Jd<)yo-H_bB}NhFY&>g0@ye3GCN_*4yhmeW^l93i_*LYxWg#&Rhl5iuI&UyN6I zo56iLj$mXB8C4eDD!4H8)H=k`{_&4epaVvum|>TFI+^>aCo>YU8W|lfyfwnx(%k|# zlx3gPk*kJ*V5*8#`5gQf_$MY`y&0=a>Uo2W+BQHzH~gPYr?KRrI|dOb&n7de10ZeL zEAj3}rNY3MZB^Ij6M17^MeWA86QT9F4mg?lnj&)7-S4WfzuN{YM?9`8#Ksui5zeU~idpRR2jbEZzjFOqQrPXc+2#RBm zq-HZ2mf&rgV**PQ{Ye;Xik>&3Q*Qd492gxkp}qTwisrbPG&WONu&U!Fk`jn;aQ`bu zw;fNSmT$kTyEt-Ra2KZrWW5MS$L|08pcev*js19Q zR-0~%CCwLk>$Z%k+)8J)VYP=k_WvLDiJV6cRwr|$75P<{kEGkx1^XUiR)*#y`WMy) z)eSs%Anl2oE1=yoA@{n9cT>WmLxJQg z#BD4TB>4M{u|zo%Yc{p_g^JopzEZ6Rf&u5Ar|6lE*0O-y*0^gpgZ^|8R#KqkC{p6L8RE!TP3(c<*&~RXSzc0)FC9k`sY2GOysCwm>+h805r1n$L1ka53V zY$$aYethe2*iW$&SLG{P)q{W%k9#au6|~iRPQ#;Bi5)XQ#0e@EFRXrCnL*ZwgE1tI zycKLYAhH5;tlNqKa61sxEC7D{nBjN@@e2^*6`&F19-tn;DIYuKb`S0#oXgBA56LYF zT~A-9XM+;IC`#}zrVhJybCsw)O&)?$l6^iwU)roCp~A0HcaRkf`65Mlq!@lZf&bp< zJv`DCoZL0U10gU*-Z}6B;OLos26ZRe<`AnFe*V0dZO__~o6x@361ka*Sqc75ALTmQ zs=UF2d`n2}D(9bA^~^k~T;cho>r4k%li2tTe@CrTduu6vw~RfNcVF3=zARD4G>SM~ zQp`j^5t;>>P4Nnhx+6H|NQN4rcesw|fXlcIZgI!BdUwSP5h3~jDz-G!`?5^6fpZnn zuVW$PTyjloh4Lml`Q`vz$R>%PiUG4jIpw65_BU?xF76Ac8;%dK}SH zr32q5AW^DHr$1L_P~iP>)PcJ9YI5VSreGX;Kxvau+H)4Df_WjriDI=d#axW!_9sco zl?ca0N*-nn`^LT0Q9{Gnb=0z)YiL&XKsH6dTjvr)N3k0M*XBWH`-}XzeljXf>w8P* z-MF{)>p%nBfqIH*xUE@DP{LyuMvc(YC@Qs&O@AWV89uiQ$3rN>XY!J`(T|cbvJcg! zgH0YiDu4;mMvil2%m-~zAK-{a8-Zxt*)%p2NC->-RySEFRidGX3Nq{VX3h>2Ly_wrh|g@zyEtspjdpm+3#&19#*RSqO?Dmr(79%u+7h+o(vcL zN0FeM0E9!juxPuvROL0Xn#`@y_GeGL_>jb#2SAXd_DjU?1nYXw80ZDL91e*BP7419 zEl?!#RI^)Yxj5xLb1|K8D>5YO*~{rmlA~(ALWPj!+dt0cY($X>faY}yODrx+M08DQ zT=OAPtf+A_M_)#?#8VFh2;h3dgSc4yWZ#woLISZ`nzZpHO$0cFqbSf$9IU(Y>^-e}wj}8%c z>j?$2Ns`o`Sc+cmx}wKgtpP*65vRn5ke#Bs$CA7Endh;z*$ab-yITUjtRFtHz%Y(|!xi^?L1Lv(4)35aTr zV*O}zsZ^VaE@HA}D_$1;MtCko3LB5v@7u8EN6@7Q#FS6_;&#JU07FkUHG~J?iN~7S zP{p=U5Kd^Av^HJ)s*AyMEYwBTY7VGXb|KcKtGuH_>@AQ%N=&3AhvI!M+yM<3D1tvb z#uTkkIvzL6I$8od%)&$d-!wJH9FvQoID8}qJ#D?QT@k(*q_oWg<=<2uFE9>8qV2q- z+$pUa{CR15)nX}HWu?GEQj0*wHsK`-CJ9Fc+>=sgvf?dJt#vQbU=SQuq9Dy~MiLr5uB+mTh;-{%v3Gtr<}75UQ`&B#E8(DgaBRnTn<;YiJ2eO-N)3y(l4vj49jH zoF8gDiH`XKCwC=+b2jEmZdZ*ZQmZj_>8^2y!rR#|(a)1ok@9(}cM4!pZ-_Z67ZcJH z;u0@u7)>8QwOl%B7YQx~-4sun>SSHucBgwMA_sV60L{%P$(4pKP zRyLL!-(H{9U|!`k3gigHkvKTO?{QpD6Q3wXro3%`(o~%C9nqmmW4WN07|aU{h63g&ym`;R zZ5NNq%V+>ZR^ZP~{bBu<8^V*1Fv$TtY0S2&`Y9A{^l^F7-_t>vRIeNgm$&&hsKOB& zoN}f*0z*8WKHZoYW@7+o4kRrFs*T*b&{lwtQ0WrLU7(P6>{eKkN>AnFLxysK$44C( z2eO$}a+9MYd8(j*eH_QKv4mZl@0b|k11edipj_2fEX)OngUC)I7(6c!hBqnA#t$4c zZC8QNDH*23rRu+AGgW1ZdbR_qTkaspBZ(=_U<<#0rar7wU4seCo*hyu0Px`jWQcr< z6#bw9<>c-Wpb1alCi&)k!#eGk;eCVHC}$AVb0?i2IX|Hvel#BClu+jYno?dW8}m&I zl90j~k6thFbZk{)ttXHQ>yw%gmfBgti-UFR9j45;bHn#)Yeq1n3zBm6m^K2M1{JGf zCwod1w@k^rZRtlJ^MuY}g~UIeE%hVRN0N$^>ey@YLuA?j@@gH&-=03_LTw4t^E2w| z(|dNtvA$z%2*4AfXHbGP{HV25-2P;D3w6^*G9n)gCa4!L*Swf9b&cPjj=WrlV@kjy z<=xlC^t^OFaj_W~r+dWVyM zzjac%c^*!n`+@Q*?ub_#es$bO7ad~ki~|i<8kl9f&`l_i)>;h5v8#*}*ypELy-P2R zA~R0x^De#qBAeHrhCa6Dj`>7YuCP+zT!{MnP5Of!o0+|V+epWGsHHoVP>>TxuMh0* zrX+M8rS9hDO>>|n0cp~WhX^#iZLa#n16;cgw{k_BIY!wq4Hp2T=wW2q8a--xVz!KB z_7s)QUfy!P4jNeqH9GV;C2+Z4n$#u|y~w)f<@%we@BWQ)S=(vF6jCjQV;~ER!?*S#N?+YlM+i6QYGCwT`9% z*#fCwPQbmeR6I(%ovv+Uy^?6kd?jrnyeMjBF^yGxA872K^Bt*J1X-btk}ZHRi-h%% z%`U+tLP+f_DVMq5dx(S37=U28z&@~DIfXs}tj=mu5*qJLR1&2AU)E8STM`{{P<7|l zhR&ve{`OpE^XTE&9tseTN!gNrUx$D>q*ss(Q50eolP#cZSZzdht*kVNA}yd(&JPGw zF@c9fnVA6wmqPlW@p@EvV=CN&!hr3}62&np1?iL7eEQA3bIB91QOk|HaPLAU46aIRXeIdK?3wo zSGF`blGEs&^r%b`h2UnaaAyZEFr}6L*l=4-|3QBIEHUYhHGTm@rq0d@ooXA35ft}f6i7k7RCoW!X&ImcNa2tV@|1_O&Vc)1sHIOP^MHbe4}{!VywT_C#~s z6x|29mV$=ZXx=Vs*#|Vhjg4ejaj7?6f(}RB7|GV&_-4iV7QDf#?$dC7kZsB>W~8C= zoCqF8G6oXA^0^6QjDTLTN)=;FV{l0ZnSl5C*jj%6- zTGl7aSd>0_V&H%501`7FMeMOs0E-QA7w|j~>q-ttFb#);NlMaf?|aU7d=TPujb*+U znBm;WQ|i3JtvYAo{X-|4E8nKV@0$E7-61-edWW+DDnU$TFH+fdlMveU0PVEA`nFyO z5dm%bRiZ1BZU2r)g=rB$2hrr3t^es#-7Rf|F9HQ9&5Si=+%=(puGvG8sT5jLe6K0p z^Nc$)vmR&9*R`>KaXMe=T znT174dr2ySPVq+hh~H6rJ|WKUqD;iQTOCDLlJi`9JielYu^L+&D!EKgyaZ(Rp_GTdBpCW!U|@P4|#Rs7zjQ(w>m@oaPh@ zqbw-_G-Qz3%sVQbOyVrik1ZGb%%UL3r~2}re_@-J!3nT%P?s~wJL{JjN<$Cp2~rc; z3z)T+Jk!_iB$5SCe`?Q5J71r+ByG*-5*76s)_`i`vOV}|Myg|{#v#zrWoZ8cM{#M9 zDT(9Qwgalz#< zLxT5539CSDgtB@NC)zAGw$_*~;z`WYp{v7^k=Pp-sHc^7)E%<8vpONDNN9RrsiD|h zyfL3sI`2OfEh4OahpC-7(K8Ynv<@M_g9l=dj!O30%;rnmlq(rn1wFO5M~Kr`!+l>L z;A4vXlW2tNc$klr5GAr{Rqk1pc0F!{E2vCA8Z{q70rBR0ekPb;NTemvGxMaAiMtZ( zP&=o~%Bza*t6fg0KshTq7x2!Nb~WaefNt^mME703@;eM~p{yOO?$83uaopAcHxS9T zHx8W1X(VDG>i6d~?$}I|p)b_%-?--&(KL|EP}Uv-nWtwYCDDw^jC#ly)6CC{J>${J zN9L8zWc~(+A!;d<8%WU)YN)t9yiZbG7+S%@Am@$8uxqUhV!L9&MV8>X4ObNK3?0Fz zPc8^3!7v<5`mltz}j{^{yE=D%7EbT*%^Oohw!U`9tx_dphTTu z3!u7l$C6Z3Yfd(W-R44)iaVDWA6%M3<&4?o4tpgny8k`K`80HGTgoF4cmyUD2BOym zY*L`0dA=6J-l#8V5kN*tHS>n$SEUW<+?8BAZFwM8y1~2QHV{zT2IIY3&kK|oqH2t( z4Nd$2!}u^bB$0qa4v9X-lQ?JdeUIL6Lf??{`8y2+@cne5M%0GSl8_k*30a1(*t-pq z2FmWEHr&@}P07?XX{QxBw?&byF!eRVj9RE-PNvlTr?!_A3^#7kT>3-3qoVH5;EoW} z4Lqbk6{C)8SDWyx2l-K80`{1I=1sxS{(*I(01&btr67t0Gni=0j2ZshJr88-L2e*K zE>&Tf4?RcQ8IuA0ydo~^il{>0EX2f127yHTy*&i@0A?Y-kJ5e zJMkk|Z~Rrc5`DM7t?H(V%7D|QnWou?a!BUH_Dhy(hXO^JXSxJ6JyTx}V&&G@+YzJi zny}C1(!iLlfL3tsoNwi%nbUt?zre|f@6z}3*4*XAn3l0%-VE`&0nam!q76T^#d8fK zqS+Wc!kZW#0On2tUrVFCRT3#>UcnIRV#eV_r|hLYIOW)a5rps5^l6DrpTK>FHSDX9 zx*b+6!>&2sDlKX}7vvQ36`$&&IJaX@XSp&6V!_)4J6BI<`o{z^gV?j9RhQE|Wnz8C zhqNpe)C}s@cbsTVDpc1Irw_O=+SMxw_V>0FJbR`f519V~jkxGO;41|Qxm!(#stVx% z&`mKoIuiNPshSwn=!-aApSu53f)&PRA0-tshG@tX7yU=e+sHD0uaCW;#Z_9y4-HMfyb;N)8m9&NXGr9V~_b&hZSJGcu0Z z8^8X_k~9hjTH8xurGddWrtm^M@D=R;a>|w;la}35_coG%$&+qcUKDWBH4BvGXDG{_ zS@KC=st74ft7zPNwLS`O-GjSmDMXd#tdm@$j6Cn3bOPq->#v)*%whx@D+6vT6?EZN zS6OG`t^dGb|NPy{INsv zLOWaF&FdIK1(haUra5NDE`nd9a13O%VCm~aZA0P)efp%+)NgrAEjKGyB5UP15}~CA z4=q9L#Cb+HJO}Ilaxtt&~_e}lhB&l7S1sx#~OS^t{|uj{h4k;eDqgQZT{W0>n0;xkku>3vOM=+ z>s$%dht%?N5%B?~59*d(cCc5<*~|q2l7xRSCH&#kVg}FKo)QMtf$11>=X>e7x&hO& ztN?N3t5r1(0#PUSCiRk5HxKq{BJVK-IQBQ0LGr)7kp=S zG?ms`HO|K8o_N2EqKHO@C&Lvvf;_&JG)+$v|6h3h4M=~BQ!*38J zda*hbSL0%+YX&ResPw%jbE1IuEXY=zgXH_#I9S9_1?fWTK5FzB|lsiHcS}hKV@Ud zz|4>;;{*nJxU?~?Xo!he- z+1HAo`wtvgfm7lv=&&G%)NbT(NU#vRyc+o@Vy>)#AY6e2d)Uq0YL^SH$BJ6~@8F18 zRHkmKV@fcoW1sbSmE0Sp*H+$u<`lQCEFGwPJ|c5!Rn1@D!k_I|6e=E&jdiQEJ+m{1py`jIF60T#7c5?EyO%`=s* z((JQgYPqVVpFBKkJ<-`K@g(#m^3hyn6}0<0helY`sa6c01C!rKY zlDvU~ApusNWzX~70H4f3%{d7c*0o?cPIN-aj%-Xl_czL3tIybh167#IlkaUW^^rQV z{c+?s?C)oEt{7U4!vKd;FQdW=Xmv4V2&pc{l2DvjVkU%E4a57uaLp^$S}L(J3d|8j z5psGu+a+lc>hkC=cG+idxH>j)*f6VO$8oZHr7UC3rVLl_Yw|h&h42BVpxz}dy2I9e zxREjL0MJn$1f{9DzmS06WlczC&uOawwI5G1kdo(Q_!%Cmk3#-SaByILd1@b+U;fAU z$ds@;b8zPy{kcJA7TQjX+spAo2NiCTjHrH@w} zxx@T{MWg6fX}vS>a5Z~aevqu=O_MKZDPr(&ZsuOoe(d%I(v~Rd-e8DB9|?DyW2fFw z)W)L~;e=_ih^1E3!sl6!N7^U{Iv3ROHtXyaOrqvKwYgy{RA(eAd&OcWKYluDi)Tr2 z6c~nJ^0JB(f&*tojbi5HdUhW~23z?s|3^!rjfXHxB5v80$%bJa$K$PW6uz#HaWnXd z0#go)(kHidOM)!cVD}K}|I>`2fM#HXKU6vxmP6jzJ&>DROFdko*iOlQ}gu)x!FS0ludmNQOt0owF%-#Z! z$L@cj!?yn# z#d+lY^IXsZO)_YsYOEf`DZRk$jF{U3Ftf`;7Fc)QKs%+$bp^cz1WM>saeDFOYg&&yf)OliEVK-I42 z+$Nw(s-lUQOUl*idpq%aXG3|smj7Czd^(<(qZo2^^6`{T!etVA>n16vjQ4;2Q~#*u zCemjaOj94UjIgSWMQVTAlZaEAIJ#Eizmm$0>4N4N_Z!vGli}s+k+0aPw#xSp&8%+d zO?|(6Ddv3UXTu56L@viGC*Wz4pq_W%txH!wn)Ftv8T_$eH$!W8gA(t}rPb@8)y!}x zC-*7x1ec=2PSI|*6-t)03buCHAJCd_B?OWA#*&FXCIm5_U^Z+DB(ejWB@@;Gi&NPg zFoMc+pbtv&N5hs%Qq9$vJzlg`{mBD52bFu_R#am$vCi^%-PmL)sWF7oWlil`hruBD!xLg4g&oIH z>DG(t`<#;Q|~}edpXsj1}vt22>WW3N7zF zx`rP`ast1?Rf^9=5QubmaRh`wjpyWqpU-md9^&5G=)t6%IG&Pzl&IN_B7NoR#F$~e z_x^@&Z~^-aoCUfkCe_eAds9K5Mog+{FOBIt9gJE6wyHg?fY6wN(0WfSu`?~LZkzXd znXt0w_(W~6(}H=>4og`H1C1katj6PF$=l%p2ysyyPIesKb&Uc2bk7&Mg3+Vo`^c;; z{qR?*x(txyz-A+lB6FhnWr9)vL`AaDTcPndPLUa!&P7v+ddPDj_=-~=>51&l4b+j- zcH+P!Hn(O?ZCinSI&tu6r+661L0#V@I`Rw>j1DLml!j=$L4nwgDX9Ty4n%SnFMnt6G!p>J?4}IE|wuaO={5@tT=?1 z(x3J&S5nf?Zo5TkYgK!rk8@naDo$fx+9NSrARA+@T;DmY_*6BwXlX*&0@ELmeC8Qa zS6eMdQgF+W@-_arQgf5l@CP7g*@o;bR^cS_PJ5xN@NM9x2`(;?-3Q(|8o5H)Ci1l+ z0F@fkQQ1DIAO`)Q^ zaDo+;KY@p*y>Jp<>BL~%ID-d zg2s^!9jK}7>g1}#XBw=c{v}^*_|$VPivqwU*@_bcu zR30hq#j5!W(+*T!bqNrq5e<7tQ1VgFHEQ;8+5dP}Zbc3DkcnVJnySIqR`l6C;UofM zfx4c{{}G%*lU-?=&!M;b6F6#IT@D^Lx~XKqg2cOVEH+?_vIh}m>JMo`DcsQ`47xoq zh?oTXd(Op18Dov-e4$|)Yd=E+QSc#GW%8zcNjBxC2Ex0@+`12~5W6aFWannzZsicP z*{b}G_=BmK!6i8fC!X67K(wpEoCd|tz>!gW&&C7?x+Cm0t`2ve5ota)#r#2f37~$rs^*9<=+rLq?;|}C zpHqV&)P{&H*67t9k?;m-6oT~0Oar&*MKB*)pB8DK=v&379ibzEB&B-~lKkh$n6nbC z+HZ(D?U--}IdTvm;|N{?0N*|1`Xa5**x5N7+J}M14<@89B$P7d>wGV(=BOC|7UQqf zUe`xE+E}rlYi44tH%Y!t4#q2=Yj~$AhNd!}>!sJ6H+O2f33AfT6D3gHe7NNGziQJw zF>PA5=Mnx<$pEl3nT|StVMr&MLj_^`{Iz_=WuMrk8X;f%i@oA#GJC+q^3RU?S57X= z1DWe44rcYP5#~?_0sM<>R$Fw8{KAO*AReKv2&9oVN5%cSOS#fY6sjz09gHJi2$l2^GYmU3zOUOPX%$4G8wbB3z}X3Rs46NQOr zLnI_<(NuHjK$sQ$La28^$WHR%NMqaOxC06u0j=v=#V2X$x7xL|7eZU}+=PCV83OeC zto0okZ#}~)aLIQV_kYQWILh6~Ev$xQ203L$uecK$My~8}hr?H&PiXy{^-vq!( z9_g{6Lqna<%QJDm z_wQwGPd^dO{gBUIbvs!la{)GTfW{g}52hvKYl=`AIOiA#wwuU@P}ZAcfv$ zOH||6ScXlbE2bA2-oQ}}v#$wGq)8KK(bf$j=HlV>&yGvG3kgHlo^q483A-^=z0=+b z=L~W%&9@83j~6Jd&yQz9Y-%j4tM{N&s>iFG@^18WU1af|KR0?V0w zdg2t5WzDmZby9aGzi5i$Of)BG7GJ}hi`WrA+AF5DH4KpiL=O3#HZVp5QPr*;nZzJY zG6S}Py}RsxJtk0-s(3SpSl2L99}0+GRPAuyKx{o1+9H-Pw;Q@Cl&h$NKU!VQA_SsYRwg$X(!M zlo-JY_C(5-^|+zhKApWa`m^&(EJpz+2g@vQd zlPItBACl%~sE(kKn@ER%@H55Da4OdUWm$K34NYJ;Wq<13j(J5=hUU9}83;ADA%|11X6dd_0}dfqihLPCmx6@kr(l&$PL!xg4q zY|K_^3@P4oe^vcRsF$dtz)^i$foo)uz~0z! z_n^RlCSumqZ)#5llT=EydaCrbPfh9^ke{Y60XNmUHR^9x4|`l;UY|Xu8s_8rXm5bo zs*_Mv&K{7j0gKfMT9Ao?>Xq_a#eZVdO57?z@cQX3_{U;Q=}P`la$;p|=1@?tqGcQ} zV`z^un7y;_WwzE~bE6(*80i3_E@fw$EE9?Q0PETt;&gNSbX88XG3z912i^|$241Kg zc!UtOHuUd%bMnkM(wvnXoY6&T&6iyc^Ul6G7xT|M>F7m3s!m=PYWqQB6qaw4ynPR- z(nLTIggO_>e(>q3n56dW*+nVg9&7-oMuW8!OXtTVblYC9p9aKJr_|mM8Y%Slehs&$ zzJq+9CRgMCv-a(AP1pPX=XCRw-{PbZd4tN#Y9*CN5rOSg$4p5*Wr7L}g_I0oDGH8l z>{OmZ;)T+KWFYI5$Vrijpp(nCV~Qv!E66i&u%$S6kd3(k8)IzzUhmI+2srHb&v`uZ zoFk2WKJWMI^}PCDZx=*&`H^qAF=C@^DQyY7lofO3MR_1m_%O`X12WZ4FSMxze$Mwh z`jV2m9Z38Vq1UN%g2;@%ex}jeuD2ynd}csoa=*+QP@hB z^mL(p#wWkYsaK;tksR=jA7kjThDL+37*yf}8Iu(94uqqVmr36?tgiwYT-HYu2A7eE zSH>`Myy*WNqSFlhdvc9p#w>u8u)q05)-!3c!2bwtbpA55<_>ySz4Qwa0ch2{NB}0B zC_>Ss86@;&GO;GtaVT>h`t4azFxffX85n<>*G2!5=)~}9px`sTye1p77R^HnvtVgx zpe(`N`YSkWQ;6n>fd-cJtbI8(b)ZpXz5ZxPp&e`5JqPJ{o?J}7dn%Uk-nMkO=rh-# zZO3)X>%|*6DbLid=VZ-b6a40&|a%rpp{a1$T6XLgBdew5U(Jp5r}9b zgeZ9*07T=rs?NPqyOVQ1dp7uw5h^Xm4cB9gM?>$ZD0+jGmKMKF_d=RNaX84PYL|1LU&kj#_ z{SB|f6O-ZbR;Foy138|tg8RqLDi`_+q6=1CL%H$BNaqSjk0pEXuuRtWcy;nSb19_= z;m#9@54-kIE#6SMYcR$Cb=q&~w9;URh%va%xzB$yQoW(oMuO?yCfe?=^3^QPMv??h zLoBTb;JKN{0%r_~A7uqZM`pm|-*+ zm^8wS0up%BbB>VfaQk5?M@4v6iOzI-@;@kqBuMdRr}bTN6^?8p^;!FnriPA;0BIzl zWF6)~BGjeu#%Diz_3ukP$M)(gTceZF;R2sASc(K&i4Pt&{5I|9W@Xqf1{05b)q$7Q z6vltIgf>vLnV$VJ(>{Z`1aGgMG9N2JAud_(`X{T6ukXM;NvlcUstmdylPD6Zd0|VV zg>udj-H^E%v$%vA$Qvm?sP+~wlh^8R(zs9UE1qLew<1*0K^BvuLuE*D%!so(H3TI` z7{`Yfz-!kB&CArblgi@t`sZrUZiCql`BNFWkz;r0LDaJ-qq#&fLmR?p`188Ip(;nQ zaZBDbj}GVs1qbJSPXz}|Dx~Wd4K>4rnG+L=(3qFrq=N=LkBrtDh3HQOlql<&v_YY< zQAa0BlOPb7DYwaS0%(*?zOl|lc3W{x-A{HnAe9yAS1VFjYzv5n%5rQW6fZ-ZC0pNv zGsgofQM`ZqH>pOtFx5zDn=d~p3rJsVHo+WvA`n*Bsi&jd5z0QZUhljptp#KaRvcve zC8J45()ZWCTg^gm;Z?R@)d_)c={d}nhooB2=9`f{!}+>|(Gh7}pna=h*8B~*e_F~! z=l!O8QorQ2G|Zk%-mn~&tg~0}9yLaTZ{`PxU?tfG$dXzw?bF?dFLc9bI`Gu$HgmuI z?(#G1@%kr!P!qhUF?3uW^rT8U=fto+qZg1i?b&W&QSEay<|@JLq>vrO)r=(>cAb#} zQEar16+W0=RZm9Hq8Z2(~8V z>9MO`Tikv>;4&-M&a z#D}h&R##%631B^%L+`^l^xUq@Ql)h)Nv$ePQ^~i!0J|{EGyHJnY{v6qsolx&feck} z=XTjkd4u?m1n36Owiqt#-qEjU?DnwKW?a-|lKou|2ZwCnYWY%MYH-aqds&KxTFI=q zvQ20_yQo9y`C;CpgFi3Tonk_yiLHFh_;+l5z2n3E&Ye0?0dn19S@O_5%3pyowgdN6{jB7hj8aKzeFbp$C}C3C0syAKFiv z;83uL4^dp_hgNnxT4a>0OlpI0G=Co~wt+Q?g#E=b-M|4Z^%}PXt)D7Y@4}TEXcV?@ z^%8AjWN`QhrYD2-lUjEj`{_P2-)9^pSC)jbTtXh_gbjvP0E4V>{kRUxt>uo!tA`rnh zoY#vy1!dvNga$7(?#)p%yTMt+h%azn$eu?%3~frC#x)#nU-m?4E`nm$1P3l!xi7 zqS=||K0+D;hTXn$^VSCH$@JQ?>n@Il%;qaS>}cw_K_ypL?9yuN+=m_1KliBol%L?Y z%0~m8ZHHax=|p;9(mVr}Kg(jeZt-6*$2@|5xt3h5nh-;R<^MK6*h49fg!NLBtE=)B zqsE{Ofjf8h^8sK`qc12R;JTvhgLwYnW%2hkzt{e{JN>KSbdZSg%%j zLBkdp7U^U+>RuU*S4J}&(efQHviPhlFih^>yJQPpB z_l|z*PNJDLy(KS$2%>ZAWNh{9gP;K;Mbz zU+1vFzr%3-qzK0ssoxx&HA8t4YB=S`m{zR>RX9`NyYc>K*@Ph=bGsJa*FQOI*>BZXCWI4H76b}yuWRk8&?#M z0JvcX2zcU~>oH&j2T^6X1GGl5HISW3t8K#0SG8H~zq^M|Rc;L?P!O%HBPTJPX}aUE z)b$}lTWV@fnVRA^lN%1!ju-H`s?&l`B7v^x_TD;%*enc6JjqT80(6zHEi^;n)sTh> zJd4%d?zkxVJ5a7elxB`4v^)kYsxdDS`B?5aJun&g!{a`h>tmnkU9w<}V)>gQsk#|w+<3>PUEFvYLg z9JU)CIp8NdxGZ1{V685aC%i!QLgLBTBc{Dl!$>N(Lerb!V_s!Ins;!L^r*JQVEL=1 zQKf+ayQSF#lJxMIZP_~q|6Cx5<^>6A=z?cVMd8f=v_UUG-B%_VnB${EV&j#PYi#w?+m5fe& z)yoWbpj^`eTV&bip?HD-TJe+-rS6#Mnh+|fNskNMg4=GG&r;&BZ$&>|8~b3gF~NC& zt^1U^YQf+##qj+SY9l|8qq-(i-V2sTO$*k!FV|6{4?vQvAD0s%Pgsb31p6#eCXE!3f|Fp92X-0_bJo`=5;_kMdSW6_Sz&cPtHgFS_$13V zdBm`c{u?86iP{vG4SA^b7;Bl35@{6s><`h%Qoy{^9MH{zV%~GWf^s(tyB(Fez|IWi z8M7f`v54wb83N}+kI`06+3SNHX1+ctR(hc8tukv~BIs3nL@skiILsx^ps;h7>&&S~ z3RXETU*=Xm6C&MsKlGBABQs(@Th($Nm$&v42-6anbQI&XJ}d7=m2U#->Pu0o6jvfZ*e$|hIl`w#IRTEpv z3BM|Ba37XZ{oJ^uVi@5Dz1>tBrE73a5;&cjlp1j@PrMWnl9j#GZ*fZOG{HrByYV{y z6bo-4>@>d4N2*Dg*-0Lc_dlsSGj{@hIXnelg^9ww^5?bco%Z%E1(+=E3X&2gV)VY95@#DN~^iJqg6n zXrjvZ;A0WEXV$HIY#Sh5S;vE(Kj$CuBntWm*2cZhj{&%%IQYABHjoiIlgqJlSph)_Jlldes9E)9;7g)e%YdqRsaVAsUFTbx z$%E7hoM}Vwt}O51DrR`@)uUtfvqSa=??3fwCsXFY+ceG3SuAy3u+2Y$7a{|8Ar&Yx zUZ+UDu`!B7jEPKXFwe(&cw!1ZcMv@tJabP79fE2<-DWx(O*Ow@zdcVN2Ka06sU+Sl z6Bi-6$9yoa6@@O@l1i?Voz^G}ptnjO+RiD=+6g`$GcpC9LShqwXmPmnGco_6hSh8(y{7D{%`_xuxHiVZu zW+sTKozP1mAV&Jiz+U^Jt)ztiq51n;0pWwY3{_ar2%Mjju6u}5dX1;bMm=(7B;#F=6y%lmSGz9b;0a_YN8CK;UfF+B zltgVDVaadn_i?j{uns^O%4@sE!s_GiV5q`eExk-nCmdFq^Xp^V9y^7ePHBt{&uj`!i^N&1PBR3PWcCQyLIh6}_Fn zEs*Un$6()E^7k|JbZ2mR22Ogn>4=0Jls=8zHRc8Vcuu1hB75EKO8;q2GB_QPf!Vs8{1 zY9U-K6)TtlA=-6lh^f^=JoR)Y546RPq5)o1(X3XAuoUsoCh}&)7fz8tE2yd@#VWfB2XNDfzn-AoNXBZ zRAfsdyGSn4rVDW9ZK8>qJC175yqh<*bfwV|JM1FNze;NdC{nRB+oCu81%Ed2gppL1 zWT0RoF#x^!s@5mf2Uy_P2flQ7-HRQaLC984mkmtYM85|ruw>jHNQl9ZW?-u2;}ARD zetrgjKv7h$+GfW)2&v|ZQGv-AodoMqBBeOTgrHOrp|v~w5A%?cpC9u}FK)&r6A!M- zCUz~OIy1fbrWC0M_w}H>M9d@PP8dkTYN_JNps}e=yiXXVWnwS-%gTOT!Bh{+Wq9x|#E~W1a_3?-ldQmlvo8(x4=d5-}ZXj@4c# zBLm<%31TOSw~^S~m~siwgFt4m&ax%OJ~SC=9MaOgfMoc7pi?I z@hVX(q2oy!;$e!Rb{!8{n&&wJ-yUGKMS`=7b+8xV$SwI#KYX+wb z@;6vHT>GR9#^H4aC4V3(C68ymaW^q_9?1opUcBPMBgAm7k|sAKz??d{Oi9 z64h(8a$1N|K`GGhZc`#=p$P%wtxt#)b;L2mtneHNk20sXt@C*Jb<7+?(zu#jECzIx zpHyxQ#kk*sNMq$bzBCy|hxsgQoq^i;=qqVQlNs1ZS!8@9_*;l!gvdCH9oX`lC>j+e z8;O>tZpzvc0I`L5uP+jtE#VA)c2`YhBynUat{rA*`4TeHC9rRkUsWDVIGnmLy0YG=tMGf%S)Gvt& z&>zL13=#9@+@t-;SBhv=Po`Z$%g!3unepP+p9E1NL}z15Qt?z+`@Bu{F4e(mVp#^( znJydODLe?HCpA&EoyRjkY7~>^g`LAsjKV3Coi_LVeDLlUzS#H_`PmLYEXP{v^MH&* z$#D}6oWnr6s9h8tB;9FTe)KGB$Ze*e^#`$!rK#kB7i}gP+~<%Zm}r}DA5zGCb58r% ze*ft!SHXI=z2Hu&Xq0NR!W=agUSxn(V%9%(ohL7^$Zp%j#gkag%Bm-yfXX?#j|R#B zH4Ca|im}LmjVWO3Rfzr%LCJ^-_SC_99|(Ur?2@b6s!(*Ne1|G=j_#Sp!h6DbP`J72 zG5|Nh%}4+NoJ_`BO2Zo4i!}q2{swa^;@f}W&v;0Z`t$cp83ahToD=Djd*t^TLh|_h z*zP%>0{Orw^))IrXVbP*(Di3q_GX z*OS@=4oel~t|B6vF|49?)~ziA(KpB>dLbL3B2d*Oeu+%VqhlvV{#-DMxLd6Thz#_U z(kAP_hd{v9DE0u|;5&b5RoHvJzB3<(qu!QXpUU|k{1%B#04CxQmSV`$$C8!5vG27oERVDW#m#-=K*Nwq0xPJ(hhcmt-Pg+WG z^A(x$j)8rHU5q$1htRX>+MD{1x>~UDWBq~zkq3hVe~I)YW4keSny%2yDf^Wa1d%{m zBcH0-^(uwrl)N%BJpe2)GzMRBL$rkgVPT#46+n^UA9f>PUDy*Febrw2wme3;# zxBKKx8fz^$jv`2$>4yiOq!QAgCLF@hZaYH#hsz3RH1h|hZS+o_hR3n0OeqybgAD)@ zdQK|V25Luznh9IN@!B~O!sGlycb4vc`qU17uZI>8+zAR%&wm;#uxd|ur4N0pn$nyn z0`vXM;{=!#69c^CD1KO>7|Zc~Pk`$wh}@ zvecx*5j1Lw9`(#pu)Fayiy|LZFn)I}_E%e?tW6n@{T6PhxO$e2-y`r`pEidG-3J*w z3cn?C-uZ5Z(d;=aoEi-7WbW!HBRV78Er#9s6*rNIPun}^m>#8h(h@yi-g(z%)Vr+FZVxEAFdZs|GwG@%Zv4P`lDYBm2GYMr~9Vk7Hp-98m5@f^E(mHxC}d>mv2%!DTex@+1#&>!ru5ve+v@)cEm!NR4*rBJ z>~e-d&+Ea&fj8Cg#pdfEkR=dS4W>tfqyj(QJK)VHT6{tI#Q74kT{w|SdioVN8G3LAU zJ_8)zq2eN+kRKvJT~v#M*6@H$j4kRXh1^PdmqD@uhD z82qu71JsX!?D^l9_b_6dhiZ051{G*68aGz(cEBL=VpFo1=E#H0YyiQoaE)H|GCoDZ zo_{-7Q8#BA1UHh*)+o0qgRslqDW5&JEt5v4ll8X`tfS_F1HOW$Md|O}fhI5#Q*g)Q zvXOXfnyPty)}DidRdhrEBr!?;-PAdq`e7|Mv*fd%VTA6@YTxX6dyPEnP%x{jIxg}n z6&81ZdNv39aH>Y(Slx<$MHB9WTA0o8)2;4zAkPQGXcmoyM_cVEFl)M(i5pm_q^`^A z^Zs-m>s%Jkx$Et8(VvEBNNmkZvcF=673t2z-F|To4>a>Ld$uzYnkh zL^c|xIwAgP$pV(;yM+&x(8~vnx*?v5UR5mr6-x= z)nK&5s!7;7B(%^i1sZrP(?O+n7VhA`UA4qM2joB~<-V;hL>%x4B~-aoS37s*b@$^V z$3}x%eZ=r@Mo*1H!ErdJ&_{?Qr^=-SBQRm(C8_sn3exS>)qN1pbHw=EvU(0+qUvlroK3arvsBNtbhYr?tcG=$>gKL+KdJ_$YeO-n zXFavAz}=7#ajNu0LPQ22BpU-a=e@8;RlIR|XbnjH9XR&Wf1@p{!-RKX231{ceNP7S5SziB*qdNCMA@PkXY^fV_2k4PQWn@;k}pxw(W^f&i#-zG5Reu*Xj3=!-bZ~pJDx%5%l zGE?ra9$^2T9-yx}AMi{Qf)s;OJl%jB_42{N3`OR(pmTZx^*h9@##kw> zr@gLp+5gUwN@OH@8WKC(k?|iq#cPyx6n3{lsr>IRdPG>)vFsE&Zr|2s&Q465 z6GbWq1sz}1VyI3IbbuCz3HDMC+}(~z0(7lt(S4xoV53@s{Xf`D52L|j{`-(?Wx6d=ZJcwK!(Mv=dWFQWUvQNSHB0|m&Edu$&^-O#A8FE z6n$V72vX{(B0a*thlbWW1tULsTboys;?v|d3_7HPZdIG&^S(sEAHm`7MJS`6Fv#qB$!m; zJbG^?puHeVu73{0)j@QZ4h08D>}ucEVqnw1^e|{6Et0Q>T1?`FC*lmCG!wFXCGHzx zb5?@Q3cCk-+8;zX<}g)G(pvp1kgeB?Oc)*UwV2M@Sk5E(V4H^rR z(x%cx{~wrp7QeOISw_E#Pvss{sjpC0qF=j*#6^xiS0kt01aw}1nTOk->gckW>@cP;+T_`^}=EJD(Tz>PPSij{zhkrlWa(m~$<5OO4 zzb@N#=!AFSTSN$fwN$1#T8sCIYYR4>m%cWexDl^wHn2G$KD1a;tHdHY~^v3 zBLw)LPOtbM;7JtGCiz#E(m)D%2cSinJ5afvaRjL5h?D=1dI%&$Vqq_v8^Xt7Gw)XU zw5qoxC1Ay(-klouKVG04Z(7@v0ykYW6P*GyiA>=I;D5TwzH7y|I6`YadUa1~k?SefI5kfK`mIT#2SzdZr zGZyPgOB_fE&E4)|48-wu9%X^_nT|b8u9?ee(mrj+3xP1QtX})OfFuSkrJBs499v#k zY;n%rcC5l7I0cD0)Yqc_L__a+a+dYusF!iA6MQGX_C>olGM+73LQR2$H`tNx7I+>@{-(QW zs}{5DSQ=6q*AYD{+ZkfI0t_%|80N6d1JkadV*%>{C)8`%rOH=M6CO0J6;T z09kS;rvFGQ*Xl9P@d(N_QP*9G@Lebe9uX8*ez#tH+a*E{dy=FV@gQ@5X$4|~SnV(6JBxY3H zG`CU-DZe%;4ox4c+Ka=o9r&|)O90)o4Oqmuqlaoe(oPGwme6KQu!>%5g#@c^A@v}X z%3)O1Mswui8}c_8r=b3zxtqGwpwlweA^Mtr0q({B)7m97hqR%ncgm3ypZ3?*aZx1k z&3PcZb~a$Ks1j#rIfEgI$ z1C`F)k*EOrE?rs4$)=!Yu!sw!jVZ*Cg@}ChbIna_IxIxo9!Q7B_JPQZ$6k zId4LE+GbKVKOx1(dAR9p!X}@Q4va>)e%onQXR`;ZgP%KusD7?5`1*dXJB4Z@7K^xi zoYgrUR-oRp4@D2vf<*cf60n(hKOU<#`u{v5Y~gO~Pz-ea8ZWL9Kdl1G=HJ#@nlp%w zn;*It|KAb#)VL1^g!CDR<}JDdwQcS5q#&VP`;bRXLr@!?=6^)h47r{Ch(VSnbR_ck!R8uX0cB z!#BM9E~&;1SZ&-V)8yyD9Z!iXll7@9bf4N+5-*!TXpEnuV}`A(^<(jOAo~IIN|mkg zp))<;uv+`n&(AYw0gX1pmu^uY;A~*1oNEY-Ik&`4CE$)gb7IYe`Z;X>ca73eQi)L- zRZ%Z;5-DR9wY90wc8ef{K>q=uD!aYaGkA_X4e!)OP~Q#6ev0H5=epbU?5|ZTWQCk| z^IpuE5AQ)rJkuH@lkb{&XS^z;EP0_A&T9KnRlG~wpCGPbpT1^W62z1XShw9&=i`2K z7(KF0Z*^Hpmt9nu#gzN`*UrseI_)q81SX*eZb#>KU$z?nIN$%G-4uYghxsghy*X)CU5x{Qy^1Id+n%3SK&#bC5q=*h{CfLsi zODbQ1@wKNkg?nIPm9Mk>i!D4C4jeK6N6=4!GjRczzV4zYpRTpKCpY-4 zA|z}uj^E2M8EV`qZxn1qx<4EP0)WQ(xMYbXnmCPTvz9p@c@iJD=*`Sa@}>Ee0VoV8 z(z)yG*3u+r58yErMqk|Au9lv_*ji9t+xvvYx#zc0@%w!fD4Y&|2=LI@5zb*GH-Q|W z5}9U(86|hTyu3@p!7>J>gFuFq%UurW*jSJ=7M2u)m-LB%})gb@E1;-B)eB2HZa zLk=Pz3)xaU;~K|0rlLde-Hkthz%5SXJOgaUIi3{T)8ng_BH*t#M1WX081 z!+$B&EoyKW{C){-$+;JqMpvY>=N~;G&|v7K+F;u1&Vp=Po5~PzDpIfSqM<}Z2{zIe zc9Pk{qdY!T#5@?9a=#Qe>0+3hP4^?3#$O2%d&^iOk!e_iqxu6N(ir8+GosD`foBZR`Gc7o{~u1g44x{LPy z7zKHc8vI0A8mmU3OGy{mAI~DUD@4wNb8Y4#*~L=jiOoXX6lV%Q=!1x*{7*!OC0^FU zlLyMb7Rt}-O&-HhvG4?)r52`8)yBxh>pWZd0%t}`sCxoUM%5=`ymBE~PpJdj8skla zyE=bDA(1g^c&0=~K=9A4*Qb`I<<@wDCp+%z=%bq-6z4o32XAah$gWVf+qq4{%urG9 zgfGpGUJ5{WThID`r0a^)WuPcbBs$v~0_y`zn!P`aAv#*(t0`V?j^$&~kezf6cjrFs zU;`r?a%uo)}Fbnms2#J+PYA zrYMq$1Nzfi+udg{Vrl^+51Z%oKhjgcWggLa5<27?Mv2H}ht(esRnvKUMq?I0jWMMK{u@jeHb*UCs?!Yg%aKCfz#TQyS|CBWNLfiAS-|)o3g}6M!oAs`-&On?o zRuNa3+tar;A4FzE9z8_XS$;%GNjOtOBqhZPj!!dpdu&2*&~Sx#X5-MAV7^WLaXbkeu9KsR~@(?4jE;3 zco%{8K@`D5wB;NRYP`GlvN9)A^mv}ffMdT2jZ?W5CY zk>f*!p+<4!1+(E3YT3EHPAACMP2Wu;qLg}dgwY*AD5^SpYSm$8*^a6%Na<$k(F=T+ z*&X!ue=iv+iUHTAMXGQnp#n*nSrk$!;2MKLE^=H&dZ6pM4}PV~#9JQyiCuKWHKa7E z54r!G?z;B4v`O4FXfmP!u9|{FOJ$E!gWZ7~^9qsDMR~SX1p@d!u-V8_%GzB2Xa!$3tKzm=B2E#r^96zE!)Vo2H%9>c0&gZR8&?Va+%DNMt|Uf z|AIVAMm<>|4HirXLbGas`vM%_XZvrvem4S;jE&vEDg5VrkmX-CEQE-Lb8Y$<^| zkWB=dIX?Jj?ERlH=!&ku-UAD9p)7n=27T|gf7=(75b5++6EKCyn16p+qMsIJ@L*e= zHIUr2^|I(yg5(rMY)_{mj1nRgs#YTO4LF#-p})R<*QNkmur&%?TLtQqM|1k~2c#sQ z1Pwq|b~8D1bz3v4tt1^oNfN!FM2;MzXA>?@@LtAM^RLV~sL9q?(@vhwaHaVKG}5M| zSlhdABE~q!-T6JDShi$s$@>#av$AD2%bCw+Yh=3Tv)bW*_kpocQr`f7)^#8!>AU~If4pRC z>`l&&w0UO1(*Fa|ODkIRAu@OqO$}uFa`fwVOS^ZORHRh4}ud7Ii_!3LPRm(WN3``mMX4@a)i!OR|lc4 zo@6@XL=v8%eUwr%sXFy>(!xD5Ij1<)z^-Q__5$flx z*Yk5I!gJ{K0O`K=Gj-UlINGr8&>ClF?=knD@L73$Cpab{Z4?vXXSK~(OyDPAatxE& z9*g5MhKP`=u}BzDejK1FLGmosCVmV_!$1^%-yXWC>OfAB>9O@* z1MdL+DAcC4xVg-q=YRVb#kAmw9gECdG>WP~8ud+>K^J{_aRJ0#8+HIJX>OCm3K$$YrIqSlZeUn%GmdHcHxB zw88(dOEuUj9u1j~y3i+TbZG#$`bAF;ow1&(Yo9fY3Fw#c)cYnWt=f?Wzy^6SelW=WrCDHwEX4ZGtxjtxbd$^dE1XQyHw znD(z?>#25@3d7dWNn=itYJI@ooy~V z-BEU#kjcZ^qwvR;@-caOHp}dp2J?8jmg|8MFh=PQ1g#hN24rk z(>`qz?Q1heoIm>KbMa2>_k)2@v6e51d_07i^m?68Mr(C4T`iZffsuT*;{qf(T@x9a zxU0EA86*~UProiee>OyI?eGYG+PrPrEc{T%1aZ!1&G$088K2BRCkMyLvMrF?+9EA% zMg&ciW2!ca;MmZhE&9l{M4r02`frtjX>)MlnA+=9CUhJUQ%DVanlVqA3F7aB1Dkc) zx${qhg$H>;gT#jW=+A_$7mtrTk%p`9caAKxr**D@Z5cOJSx?bkKqDvK-rd`Gb)oxw zce97mwTpj}*HU>{bA$X-Q~(4pO@A@^${@+kr{pD=naTBW;1j)f|VQ9^aH9mmu~YatVMnKJ)MNjbemgz)OHG zY@}CHQ7@V8a%r02tSFRNanLKUPV$ehknzwwBU)zNA5v#vNpD5KSM|xCyR@nzCWGTcL}cMzRa;&7|DiVp5d~AG3NGC z*D-8p9%b+cnMwH)w-(AIX*TsX?4lUbgVG#)L#nrEDb@Zx4R5GVEsZU2?%L~b}Lr|Rz#oXUZJ`6^Mx$JMVe6W6jtlhcU58XkkL4L*C4 zW7nbIJ)O)nCbLcoM=F%qUT^IQfz=rqiIrH+H)!KR{C?ryAbxrItG?2$_%QY@&ft1V zuhScf0x01TAmQmzFs;=U667TwEQnO-G%>~n$$&U^WQS#+xO_0mvIC5^|N0BSuDC`O z>%|G<*$ymq@Xi3=f@|l|*`Z@U6su~-PY-5S@Q`T)6Uz=STB}fnU4oWV$)D0rR`poe zKZ6KA(>0Cc{zZyA?TM|<68k)Tge z0z3~lG=+y4l~DrC8V^7ul;;Q`jAdxcp3K|%?pXMKOm|hot~gV0;|W@aVT77p)iGR; zgoNvFR5YioW%yV6PWXL)(=`>|1i+Zua|CyjEK@^20HH0qH?{^`BEy5=JuehkPVHo@ z+LEIO+)v_ECwddGeJkwL5ZHry-mM1 zpJfk5$fc2T)bZ%?$*k3{nIskvWrYDD|#?kPymeiT>OfCC}{Z!t`pg ziXXGg-}F15HML1@h0H)NHW9Pd0GgKaWsj8mWxfsn62Ob%l!E6bI3oH|m{W_TtN|9X zsVw{aQo&ZtX(wyr3|@kRB>bw1C6htoUXB);#If#RD_fXhMe_%;*UT--=CzL7Nj84o zD^rt=w`;{u&?hWs93PuLP$X6!j5Nw4uLG)yWMuQC=UTgyb`=YW+JC+ zY9KaVW@tvmK%Hx=)rnqd$&&ROVlNl^BW)!iC5s1F6C5Y?oBI#$u4Q3A90Hfu1D5eD zl!af-=1kFU}at2)AKC-EVf_1axzq{z3aNe*3xmVDtKN%;(K%6)KHZ8dPq8l(7 zv+be%y!mW;kXCH`e1?Zf;I0A+JP}H3Td|;{bS`z=KopL7^&Tor3$&dIdlYbPBpo&s zLJn7l5HR^@NYkX)iZ274w7R}3$NrW)&{|4pLG0x|lV#a5ro8?GPfIqrTo3bf5Zun7 zQCc0VR)@$RdVs-*2_KXAo?&p@%?tC6*4nUr6poodC)Y5r>M8G&DoMySh2I=xIFC3n zELqwI8^a|z_OP&w|6pi;ZpJ76((SF??&DQ!X-}Wm$(tMWd@Oej9DP31f`y!maFA?; zWhVt#ni+M%x&7Z_JI%kX*lGPLckmIfdVV0j+`xVWSf@I$bFx3v)nu zQd}LFo7NwaO7y8=v8y{S4VG}kFSda_s>R$I!yMq>CTuri%wX)A$TrJTJ#IWhh z5ESCzH zv|(O0D(ZQiaPwPQ9}j-RwP_iHMs0CEnk*@rFC`C-Juyy1*Moj>mwf@d{;rfQ`IA(2 z?J3(H4WbHa#Fc4Snn*Z%#0M|RN2SXsGsK9(vSEN#`=9uMny9@S19%t`8M&01!R*m!oj zeE%jAPi-|qV0Jz<A;eZsgT<^1QYSJ_u=MY`#*9N@MD&PF=sN} zyQOYD+p1#O-bm36q@$+Ttw!;Al`(~olNf9MZn4}?T%=I91x&2z_u)p*Qu0GsDLM8; zVzt8FdULYmO);XkJL?$|Sj}G1rA3v5Llc1)imw_JB`@?+!iByQhJSZ^$hf>oUoKtt z{x-d8g@@$H(EmQ|W+}+dlRwCz50Ia<$A#VoX3+b7L8PWK+x{Mt5n7hV!{nsyV0S0jsn@N`aXL02w$#sorOu)iNA8Kmcyo5t za36?^ed!rcq>_;^#X{qYtv%mNq_LPBb)-pJjpQ+M;Sx*e%0FD4Zt^?`!<7b0h7+s^ zjHaZ@Or&X)ERGP)S!Kb(b_xhvaIp1OSq~TeK+yC-l5IQ)l!ew#MreaDG})dD*B8Of z4<%4W`CyC*#8|(uyL&Fu7ZJ>Svc6wIl*_lg5z0mT8#}b9jsUE|8IbET(YY7i z>*>!s&t5SsRp8ODb0b$;VwMkvwyQ3)OIcdHa2@2JaDBBrUny_n9>nv&fmw@1ZYC-IQ;A1s@x4$9efH2ISJXXHSQ-5)h>ixh{8(REsM!KY0!#P z`k(LIbuUP(8C!L z8(6RP^`q#2nEv~)l`iup5V4U1`qKdiz?!sgC)Bb?R5z z3^e(M|3GTl2S~%U+i*sUiyLA1^zffQ4HS0?9@MnT-Lyj6v5gaW2g;UP zGOp|MoVzs*P~l;coNRfEyJ#O9$iwJ&xdiQpc4P=`BrqDo*w{lr#W?N%l_Bs;|;_ z*JILafYb1pyjty%rv@8RsQM1U)$!YmRbRwo?k^0?kgBlQURnxG`5#7~PBzP{P2W#y zPuc;XKcaHnCM>Ts%5indYvf;#mU{j71m%F>8vJK&0zRKO*xmY}84)n0Yv^%qkDnqSY8af~5l3-wUOe|?lO7($KCmNM%_sgqg* zTAKVgTv`blSweLzN;)^i~LXnT}_FU5- z2RzirHlliyUIm=%rIMY9DyK9Tak_aD5aYnAf`#At31RRa<>#pC zI{PnVpJc9u`d>uH2`;;$DD1Q{Y#%L^zZ!Ye>#jpOa)8e*&_z`~#`qz1P3*i_;&?|? zbCz7kHU&@*!tLHLj};e1)r<~cky`olw&~(0gNQu(S^_Yu1R=#P=Nb%kfujT5(*H0N z(oQhje@_gV>_*0vNL{Pa0F@-p$DN)jB?pdsoE$J|1?LA1b@dVb7GP=uP^CkAyb*R6 zllR<>127Tjx2P0L9L}3~!In$K!FQTe2&DakzFl-2{N)1%N!YrYpbduF^UX2GYui~} zpC3aS$y?Reb3Xv)hH`Oizh5ZI_I|D541D8{GDHZ63bs7*!X;Rkpp1gVCASCX&!Tp$~6#`+^bRew#_JQLhybHbV0=CKdDu5e8O!^UBN)#Su#T-z!wf#Y6d_!v*6wyM5gQ05tV!LgvuGqBJ z+2biTY?(7+O-Kr%ScD|^&cmM~3}ff^s3(cyAY2mfr= zDc=L>^u%gf9`A`D2f7M^rTE}|=PX&=EV?Yx%}VjP0n|ev&&AX=0w;kma{Y{ z*nG1vtawS!eisw8unZ6eB7l%Xwz=muA;Xc9cdfVrM2F0&u{Et)hh?jPFxu-MMM+jpQ zo=aQYEU8^U#L;LPuknKzs7ki{FX4=rr2a+Z&ZOE-y*#K-zsgy54ix%{X1t9ZR2qQZ zfHe%kHK?SyK&oypP=f*ddVW|xj=lz(lF$x*5q2{^#Ro5i$FzMI-9Oy6h@DRI}23e>efwJ6L{}a2>0V9+7Z7;OH z>=~LQ`fk`v0&hiY>Wa(_gWZGu0fVksA7^o}GhJ|pc+Ds)?7UVLjR@ObJZue`Bo3Ok z2=NyKh#l#t)WZoi80lW3DH8Q`G3Q~}VVUxITk0gBKCqU1NSX-h`ddo~C)-Z7=IYe# zmbEn=re5+H8tr;-9{=A!8FqSt9jCGczE`Y|GR}N!w=9N{>Q%!QPTx%oPPEqpNbpc@ z1(C>(z#I7m>RJ>o)p3zsdKfjY-gWAgFGxEtl(E~-fCZ>Vs|&O}D@DUExBtwbp--RL z+SK)FOpW0NFJ7NG2TpP1GTd#3mB>>6u)2t{+Iw^NpW2xma0%I|5MNAMdz1B>ltr~Z z^nnR$>po6mKE10v6G~}^HV9BipwkP28e$IK` z5U0_jEjU5TW1w^#)3M<@UTxSRMs$}MB``3sQ^=GcFPz~YMl!!q&3$W@{aF##(shN{ ziU2FJX+hNviz}XdB9h*^%uSyP=L^_ei9B>+they`>QasVfUmnl0?_Q9`u1;ZA;_r* z^eK2_LS)x-KOCG?B}t7s!3)?egG#_v9pKvo_GkQLlm#pFcZ77HHRwn?)C&_LH$otL zZ);Ko)Bx)EH3iSt>57nH23i2IP_}tTg4c3xmqQ?KFKuRNkGD!4VdKc-rH})HNNfi7 zKKd1cf3oM!6XyC*Xa^*}nzo+qNFz$)u=t>v7qKytJkj@Y)gEuS zzWv78ZAQzuF2v@0Un7PG*C)XT*C4Fkl!_(n!A zs><$6-4+OdA4!7?e)q}PDKqUU`Cf*w7=?Ajk_Bp*j*fp+y;O@0Ewtl^224jaQ4u10 zp16j)R~#nP(f!S!AJ9bkwu=bO3}Rqp8cu=lkV6odb*GravPX6}J$h`dBHP*Sv6oS+2SwNUk z5d@GQ)TDiMYbco(-Sx}jOW^VQ_kXtd!+}Ahxs479pifZPfa<% znfOsF9s}F0%4ge@${j#nT-_Pnv9?C+ZkY&q15c}3B2zU@Yao&aOY}P!8HZ~-DWw<0 z$cy4e(>c=*rLkeaun%j8!~h65N6@~bJ0^d0w&~G5&NX(@V3OEUcD{qGz=VDJC$1Xf zbKy;{6?`GTR#KeMC7@9ivlo5G2GRN+b3o$vO9 zQ@S-J$C~!hU_xl_|Cncp!sY6(GvI?xU#k)3a6rEn%(_K6J3gAS+{+I|<-#_wBr5%3 zg)W1PqK|_u%js+q{0^Hl2x)9Z>1*4RhqOa=Ye{FXV|^GygXkH37zD>Wd{>u$iVs@q z7RJZ&I!^tm0Z?L)o{%2lsEXKbdr(}Bxa0_E1@gkc*AUQ}VtaI(pYvP^0&fwHi9%r& zX7uonITkkS;mf*3@HbOiPM<58!w;B74aw_kjx(pqvCA})0jtzp>DpeyOyx+{TlV6j z6Z!Tv!ka%&zflk%i2BfNq{W-~2cj{|+zeHGV54-FbK5D)iy=Vp!d`=2BON16J=JX6 z?ypEp3SV&aeDNVC_$J8ZA0i~yz07U5Vu`WVq#d>e}bieajwfTDL}lRiTUmPYU~GMmZ{{1*~;`R8fUDwgi;ncFzRcjG4gJaY?~ZU zz0iE&WgbD!JskrIIwm_#_By*XoIczq=bSZ27&sHhgMJz1oT^E_mJo5Ck1diG zL4SHCc~n7aknfWn?8k{A3Pm;8H=m3=_!mNUkIpL9GAsZ9itXcd86f)hG82qsd){uF ziE78lbl4(kr?OqfnVAaWwJ_#^kD&Cu3>Is=KlVL=+3)TV8>{(P{~tJpyKFzXbF{kG zXf+#X^mL$dXDVR}Vx3=qGZ6MWiU{hlfb;?z3w}!g8zjV{0JiK6J1_|rC4>zCG^4q= z`M(JY)1Gd`T4TXom#_eYr~S~Hg(+dtMgx-Yc0vie=hzLQw_}OFPgO8j1yQUBiDQ6{ z!h9&4)@a)YwEmfP5u-Z6Z=C1Wjbj)IBb7$dDl>(>D!tm;L#mflS)z+?kxoMN%55+| z?XEtTa-NJ!p~tOvp(CXFge$tg|J-5?MwGCNMk}GkT|x!#xk4K=#(^~i&;5Xi9Egt; z9S?@j=)-#_mzZHOTW>)7-t)B9R}pXzlL-V7>`pqVq(5MC4fpz9cLR~+^@sDFX9mXE zTf0M&t2*X{l6QLWdt)CP)GmHs0hb|h-XFB@A{1j9>QppH^_#MT#>2MXxw(lAr|F4OEE zuctgrTgvOai-Ewk*0-g)tf$AHR)-NLjFP*pDY1Cu~o5w)emORR;`Kxmi z=ArDb*yc|bc8$1)7Url4_fC!CKJ)kNnPO@}k;O@a7s*g{C>{e_HnaF#e%Mo0VckQk zE^fQ#p+<8&3>E^F2%q23=A2P72=HWBM{~fB1EGWgaL|#k6w923*RDAlUOQ?;SqJji z!Mtc*pd>1CP(!G#kZ`)Q+p$ua^o!7uR&0nJSkhWsDh`a6 z>h`mx(rpcWCrLxbK*o92#P1k!t+qF>jb&rSvxBUPP-`aw)v06=(T7L24b~+hFa!ZI zTHc!2%mc}EAy;|s3QzGi5)F1EmQpOH3c$8tG1qtWe+9AHj{=Ydl48tf*56#=Gk4}( zma4v&RWLi_6-2%xHGhtJx)P6XzyXZ=n(yI*rH5G|K7py!10P8!Eys#6F8{dedhm$x zrlVZxbP7RducZ$)cF+@$zQ6wnEu>hl@BS-}MMDN&{~# z3EG4s72L{iAt>#UVCU0eg427G_YszCbXfUSU|$m$$_r-C!jAb-sE;IiN@2@3buU&w z1Ggpx{dCC&!lI~As7!gk&5}UQTY<65jZzQ{{oCycGBuhHkXez#?}wBhFsUmDI0r(I zQjefll%f5unbEzyiXW!ECy$PZ^ymcMC)XQx{39o+q>Qi<*R>x5mXvXfwAQm zFOK*#$W`Odcu4o#e8hb45xc54i`kNFT*`neW0ArcHRf1;)SV8R2ip(M&7OdCxr7L| zYM^pEP(CP9bU9!sNMH}4!h4V$z*1*R>42`SYriwO=4TS6TVO^xh51qNK%qOJ(5?vo z)c88*|KKqtfRm+z$)y-o+_|44qtibEH9LfgCKXYQfxIoZZ+O0XD4Vw0ia$@If*9SY z%74R5L@fRp5eh&PakL921;GNhK8G{$NqpY|jB@M?R#!wpu7&>xNX}qBsao6q1I^5Q zA2}DMPcwm0p0Rh2y$B;zAxmK1-{1=B3TiutV-^6;J6Yy01u;4=B;Ro)TfO8>a8dKl|8{r(h4`|1C7YTE|4H-A)Iu_vB|K;`IJ8$esyQ?S(C06C zXTOKj7>3HVcg2(;ZB3rNj7@KG>ub1MH!pHdquzMI?qy98IzI;&N%+v&67-Dc@JfEf zVYWqv#!V#29Y{m@d(=ar4a5@(&_$z|cR}%|>21&RhwA$wQBXB0*DLunx%K!xbhTDl zQ+t(|PW}JJOx@ z5nOn9DHkX+P}&+G-Q%iiX_PYfSJ;*%{|tm9M-_v4eGf(sU|JL$M42)5TY0JF6Yo|Z z@S^y|>Q$efV}un9B!^1|T151-6BDS4au*Z#72+dOHDP0&qT!%S`U?EvY+AzFoVc`c z2_6v!m!KuTbnsUVU;nZ0L_UZ0N8(%oZffj;u#|yIQ$3dgml^W@$+N3M-8)}v3P@)B8-;A?q0;OPYRTSUVos}@tm^P-5oNe^*_?#Y(gC*SfT4Y2>>US z{sCAlTb(c&>ABD!phS+0XQj@pG%RBW*5*g+}#vt6D4I?w909`*-~p%PF|b zee+fD$|OkVL78ph9IU>JK?b9>5!1<{upR#Kq@{%8Zw&Q*X;{mS)75`bav;l-5{4++ zWrr`=cbpd;HyMr)Dk5&Az;9DV=s&;^f{D!xIc}1D2hoX_>kdRI_U@M~$0F8<1XzeD zsEYijKSPFDTy1>xwuKZ*Avs27_?SoOwz|`qdp+v?Jd2XPaISgAUa8=j2PT!1$ig4X zeFS6XBseTdy&eMp7<*NnYx6SIHHJ7{Xk<;Vp-E?Ll6dT(rLFGA1b6;Kh6G-Jo3ZfA zOC&||r{ASM3Q^KUs&gp!)17KdXl|<`qD~6lyCA8dg&sfzpWKJq97yh?Oche8<#o*c zk~)YLQTxV%-p1ZnZ6@X2Pmk(k$=S|A+Cd3=kN^9SVX$f_-o@kpktUs; zQxE(<(ylz9sq5*28){XoN(B{YYhAH|QblA*tyRCeVO>D0280T=3RF=LLK2l$tD@9} zf)$BYk-8BPl_Dg8BBTNm3tB*ys4Nj7L!4+O;i{_CPV-hKDZojG&n95g>I zYRe4DeLJtvz+0osM4z&cQ(MBx(zsTz!$7;{(4pm)*XrD5AL(Wis<|fR@3h~DRHXPz z&$cqLCpt(h0Kv8JlGYYr0_)pl`dj5Ed3POk*nl}U33$eg;q&dS2jo(M*)Me&dqhm4 z%^2S|6y#|V*@ZxGudNfkxGT?dEm>bCS$Si}Xmw}~eO7dQ%xsW$Rh0$%Zsjg#h ziG)me5?30fm5+pRfVH8UeI~UY2M+83XFtxEEuLpiAjZP5`w=0OOV7%yZbXy86F8O~ z_xsXntbm8^kT*s*T?GH4Z%B>$?K1xS3KR7vqVemVon=$$q0PrR>~3HSM#5e2-tb1xv29+m(Y+EZ-19}K9shQq_gyd z2?4X~;H3~?KA|s{$lcx)@erErA*>s?SvJ6x^i*NnE~lnNteNO0Cd(=?GAs|uRf`gE z8hQM!7d>*wiDvsfGxg%bN?kq{L?2S+^_XTm9C8joB#UFbALvM6Cs zf{5SSU@6Nsv1cf~aX2qEL!1QwI=(*v9RBia!jKrj?)NatO0E&`5&8WHB#MM-kzBN! zQlHRyta`cCR)Nl7#cjRHWT$ zNUGHLUBIBBBKx*pwRg|I@?EJV5xgSADzcM`L9k7*d}^)n%@EgUwtxgCwW6MD*1}%;`+JR42iA2 zCeGsvLSX=;)CkevzPNOQl~$GDq>K{dU=OX#X{RW-`sVQO&HybZq!u^K`n)TF+_vQ` zHIjmCqKzQYa62kixGGcICyZ4eACrFMH_3gBBFm?BZuq=?GB_x8c2yt;=55F`ksd8u zm{F1+oUR7BbnsIcl2%g5H+IW7v=^D2fO6}R>(J`|K*R-6&N;QJAPY#z@B=^V7MjcZ z)-uv+nY$^B4U&qNL>z5&i6l%!m9K%@LAP?g zp~Q<8DQ{SnqZ8y1JG-hx^&Y1Q!(yej;~|udSS@r7tA%pt7oy`So<5bvj4IpuxrWKM zM^&#-D=*mVeGtx1FiYPYkI?WPxuuFD%+=oEBSN5kGatCHX=a?8`qyP+#A@vuBgiG% zEvD;>NL^WkAj_UKNP5ckf1NBhaA|GM?$?x1#lJp-E5+^vrLUJ@rWP2GA4@= z_u^=!16wc*n@ZS2KfHi3+VDZ&sW5^W4O4?bIIvU%DxL==ut?P&EkTdT1b>3~RUDZ* z-R_&zU}av3>!jv*peItAKsqKMgs1H)di*3nXby|s* z$==k7CHwMa=LSZPxi-m?1%|P!V$xnvv@mqfco|<-lD6meF!*=P+u7BCs@zTc57ZPz z?I()hKlW~i}$pI`v+5f zmOy9$yP0H40lyp>E94KW{xH{nV6Y(zXQTXgV2VU}U`a_YpebSxF$ITJ8dK`%sQNqA#!|eiD#cUl6$ZIO93}MuiA64Xqri45j5 z?as6D2o0G@MZ-=WUruiTu~}LORDMHT_RyPAG5J@RE((kZUZ^L!K5sSrtW`UQTO-;6 zsP-e$R}0zLaaEGlMAW#xIq@+|WyXfdtjgfdH(ej-s=#U63vAnF*P#?FE=};n?{*d8 zd_a#n%hYTLJ3fwV_b9UDeIzSVl=y4a$*Fq>Q?OF!copM5UU7kTh_hd~XlkMl`+qE9Jzmy5mv%9`#Yuty7ZG78{b10L6ap%w)sFz-u4Tq<2--4oYpgCGl_B zUeigfw&6E{4A-te!mcnocw(`f!Y4L;MtfK691_F@Grt$>nus99iC&0nkRXpZ#JpWM zhhmC{iz+Rnm6RT>NDAqT!>j>SXKGXhbW z)Uabm^=qYmw*!JY+Dkp5)p+t4QaJ)$V$^Zla)P1M8)QU`?x-EBPR_)0l5|l$RON`T zlU#GT#E%>lYTC*k65z21JW_B()Vf1j(38~&@tTT=9%TY zDPEf__Z@QkPQJm7+y!qcodUQRZ^Ag;rw$?VoQHYRU3W~BFOs#{L?xaMb!;eM@rE2c zr7DkV5R_)sX{#V}1QLrtfgiO9KsgrOj1G9aU8z%^LMEm`aEz=0cG1FVlW^PwDRShy z(*KYhZRK2L7VbS;EEM{vN8XOgKssfQo2S`4ZwDufz9w`>c(YoVD;yj#Sh&@H2%?GW z4f?JGGj|!SeXmRDL=Y8mVVpn-d-J$I()m*FNdu%uH~$BM?pF^uTi|jd2_udFo+U=C zM)iX}^*MV^iH7fHNFSYyIzI(k78Uq_Za1s~T)j=8jV_le{@hgDN%W=m^@KU({4ZTp z-nNIDsN!W#ktoMUjd~*YmEu;e-jgq`jldNkUt-lkR`=Bb8qr7A=EmKeB%utz6^cmw^%J)5=D>dpB*B-K9BCaU~o^S6YK@?x+aG zljVny7EqT!(pfm=D#GN)WmNp9gOTXPXn)kGt0SW&ju8v~WC6Cj9*Fn6nVtl(C!fW{ z;?O=9sN8cU)nWPKW;pp61^YG2q z&qc2%XcNABp9F66jPj-p_a0Cj7<_AeZFjh1m0@c{5XcIuAB8c7dSqBNrV-eT=e#Z^ z*KeOFX1nuaVmesrL`srAA>iI&TxqOm;1*B|%2S`B{6 zR8@k$qpp~2tTu22UM+5#AdIp8S7_7=YfTOna>M zpu2ihB9?ndmp~sN9KEJFjbzFJe%?0D^U%p1F#T>&^kY7g_8Cj_x!8gZ$6c?mEh%3D z;--eu3C2O<*BNvs=(dcQ-7K(ULiC2C;NDj5IvN&0m8KMvYTt?17Y zs16ZEi-p8;8L1wN*l}zK<#EVb90`Te&Y`fVZQolp5u4l_eU>y9kAKnS3T4`oxjCaO z@%yLO_PzkQ3t}Mp-OV^)o=|#HkZ)orpsW4;MQ z?e3}B1{G?>fk;vHr}R_$7GeS;pw?GxH73xYaA!X?grWNwozub)cSK{)s^kV2QokEjy7p#37Db5ofei{}Tz%&&pQh7T6w70$az$SxIx zbHI6z8d{{2X4X$Wj^S&YMO9l2MLeHaHmwSKZVn7Qy>aJoIAbJvtQ6YQdY}Be%b!b{eC`5;r3ulmX$BhA^Sf!Lk9OJppsnWBH1E7G1(%`zVPm7 zOs&6I7%v9i7Nx#uTU|eA4jHn*n%Br0;ul(-o`u8eB0TTOFE4j z4*c!~={yXUNVFOQIiv4$h7?f~SIdIAAHG0_I|$O>b?2Efjf=NoK9jE4<)Hdaqa+$o z%mq#Fa)%MjdY)1J1-g?;flld^Z`zU*vcgth&elfhb++n$&m`Ce$dUMBkk+l#uY`hu zh6w`j?=loi2)(iA3eCWU<)`kPGO6lUMA)POrT``G;V@KOVdc@x{~M%B@R4H2@*^3v zC-fRzLKf!#m}+y4^Knuu)*7tS|HHsecpVZ+RD6zN>v>cwR_CWFKs8MQVQ+FOrvQ5Z zlXJNb&KG|N1^;_nbou|HqTshhxc2!aW86WF02TSc8o@}#P494tg1JGLmtt$g!ya}| zvtwm8GC=1x$%g;i^>!4Yal?Rx>Rsw8kSwRz!z4yoLisKD)FmmV^ooIH;+J5MX!jB8MuWUDQ!w3tC|~WOJ>Ppj6N|{nZhP3Z01_IS&!C@F z3kG)tNdjSzR=>7QM`r((BH)iqG~m;(A?(nR9BGiAe7q%)L#b#Z30dKX7Yx`4j}5}^zFRNC~ZGE?z96y zN;$gYFs%EHp*g61&W6)58(Pf8OZEX8QYzy)R1MJvAGgDZF$7tXD5}zMKNl}7jeZ+} z2%)7zg^-dgEkE+2+Jthk?@E=7_NH_Vnt7Q~kICBgnFKY+B&I<6cFJ8#u7PH{K@v4u zC_NSM0=v_T2Es%*jQN6HMrBs(JzxA#KoPuMKPJN5)}} zq;tyJOWPT$ZK8uy(&UL+nxKu~5=?zRQw2Gex@W^<&bPV*$hL zejgK~={CVh^HOH(>qF?F^rV<&y6b}}^05K6>OT|8lR)-0X`SeLV^B)SZG<0t9n?B6 z$z#uX+)cja2Mkzd_}xIkiZMbz_q$h0L1Okls>iBl-2B11F*LO7=@r0>&0VgeLN5Ti+A`{Es!zsamLV6Wz<|JiQMFGu^$p3KiDY83&ai7+ z2jMh@Kzbdej7up7B?uP%T{&HHzZ_R#?Kvy;E`#AG^j9kDot)_^IvSl2vZ~_a^zE$S zrewI1HviMdZ%GceRNSa&ih=IiU@}sH2E5f5hCUAX8VV;F+=Jf1FoqPgKjPwliZcb% zQ^ChswwN1g4QSoOoV&??kuq(E$-hY-Gmc+`{uDa3%pnXiZ)&5pk|K}~$Bbj}?6H>& zD8xq5c2Ml`bUZp&l|ZWwX$b1LrvpQ`8_w~bZF}*Q0n85Qp5^`XIF-~+H1}~qr@Xxn zEqu|DuhKee?1Ix(N-pj+j}By~`j5yZs&EKin$rBcoo$$w3H;PMj>vk1Yl!(`Kwxhw zhi)#?;UnNE-8Z!CkTM4fR&sBM&ocL14h+Q# z6RNR}Txa1~UXd7-8_ViY>33Y#@ixc9HAd6ECCQ(BpAyPHA;Sy}mBp=>z}#+m+xd53#KW+oNz~7>#=C9< zQjdP8cm+2j@EZ_K$x0AH+7ujag$-;YF!UWsLW^G@vc?^tvx=}*U;DU4zdJ?5TO9bE ztp?S@rJz$A(=6%A{A!Z?1)ZhzCA$TZ5{f>N{GA;Tp*_+3fhn~XVpIk~3?gcwiiYjh z2{8smZ%wJqUbv{pWTF@T1Ziyqy#WPNg6Q5Fs>o#9k5^JaFc1!z{Nh`KuL?)mIiUbS zS4mcn4H#1Mv35^#l$dwbFl-!bBg&?7ZuyG21xvB*{AwX4V*dV*I3>H z4o7N5YM(d;82XS_t{j;U7EUA#SjsvSwnFER=hjWkG(i)h+m8;x0P&G^zf*^)F91jA zrX;b(g{QY*iwy@ZjV_nGNAacdv{I_qWK3q)wqsK@tVXB#(D8g%MQ_c9P*#&l`vI<7 zFb9Ee(Dh4QrrWUtdke@V$`1WmdT7lh?L-R9-PH$63>v>Z9`W48wK#e+)`Fc>KiPl_ z1Mroj3}d3gw;<##)E)8s1^l4YCj_2@@B-x>Cc+J@ws={CHp!}-6yy|qT4_4hkR6rT z)L1JVZ-c@qE;F$}9hcu3eeV5R5#;(3sXyl{vp{6$85pr3r+-s&nNoYpns@el6}0It zC!NeRk@bUY1x&X3HdmC}#+#uCULhz)(xzWig2rP&__}7OJhuGWieUMQ6@ODoD3Xi1SB`zsueWye%NQNUh@lF z??_08@q7%qoz^2qE6~(KWFcnaHt9IPQkI%_S(0El`aEftZV9hsyWyk^p8<4-cOO7& z9KF8^qdrqz3qe`r*I6$Ak|SCm@9{L`$$hzDye=!sWm{*0KPY?<3ZuP&w`S_d57oK9 zpcXB-`UY^jS3jg+ofYb^0c*KPbcEwLRP19M-q9|^srMd*|Y`^|F89=+< zx(1mKxUzcO8ZBvMiELr{Oe!3m#%htYkkBoNvo}Ri0rtv)D544oyR)e~+EVT{XF-UHM*H;N@p2pqpUq{b#=dGslQOha>Gw|b1_E$tQ-_J8G2oW1#JFu0 z9F>z5*)>q|T>}(n`u#H*rzj$`7*3D+SfDSpi6VSSrJ=NpUw3xm%SH*ONH3Cn6l^*$ zPkF;tNMs)%yu@b?WAVXH@PA;o#iF<^i$|BETnDPLF>L+!FB^pZ5MyKda9_`Lr*k2G zsMAoFEFh|QuBMIzYQp<&0p{Wt{=O)}g+d<@d|GyGPO<+0^mu`e1O1eY)*evX_U9kU zup2<~{KD;x()+05mbkN-0xU%HN_}FVfnm|Fg%rlACwvx{c{wP%2_|cl&uT9j!Q zqRV@UtmUaC|6T4v>}n5nohb{s_rOq$Kyea&6ie2@NEx~q73%M~Cqx{7a34bQrF@!W zlyo5`b@@&e38*njUOP^qH05j6p;shX1Qd}w_8edCcMLo0NF68d?7R0CBm%KEPLD2; zZ}T*^Z2~JE41k6ym;8jPBBHVal-o_ek|K%H$D#i_6vMC5QdXisPOYobo;vt1I*Ye+ zk)D6KaE@mJS~S9BRhF!_Gkd7_aVJ8Z+68n3bWP9(K?)ukk>E*eTw-t%EF$jZR+CMy z9p!HjJJmcr`gIq$2xP>hy^K&A=&{jJ%mY`#aE=>5q<6#z!6LmW%H!T)Lkt1i=IUf- z0Z+Opw>uEAV!ZUGi8DvCB+t{`+o@q1^;J zTP>@&=fVjs4wh7_MQNts2EsKdXU!z0RA3YzD*m^}%VZA=0S&Selv0ADIH0rm`sYrg zh%+w(OFpPG2@cx5xHmMkwfkTT0=f+&oZIGCQ`x%5TPbb3IOZ0m{P(JcJG+p1FJKZ1 zVql-3#aDe;<~s~M0v7J3HZN`uiH9XXrHGLzjpD1Srw*s@WAry(YlJ**=ifZ(a3jUO z8H!w89{GZ*(fD#uURmtjhP-3at-_@3JD=i`A`wnLJ{izA$;x@ zSB!)3=i76!qPzyeUE`+dtaWMy*=~kC`T6YTu$wrEu@UK;EOm`jl-o>{Ofm$WW2u& zcb2L&gppHC0%+%%FKardhY4aBQD~WtmR#Kob&wsFJjpik_m+s9uz^t-s=g$)Ao~GT zA&hyyQspAWZ@4_Yy*8=1Q5r)pYq<3jg-1qLD6SdgA}iFa6mIrf!|$`7 zZ5VQzBfMQLr^IdtsOuQC@-c>cBa}6DOD^apOu<;1XioD^!y!aYvz;?DPAuM!(^y*2 zYUq0Dp+z+!w>pyfS5Xck25AX$bFz^jApP}lG4&os6_?t`h+?S3YG-&(P%b5?FkYVx z0CRPUmpYJ@`Rvt*5Pl*;Z^1<(J=KF+|0j{iDiDcu;+AftOD~Qu^4~_uVze?K$L(^; z02x9<0s~EFnOgmkV2wA5br6oo$S4}T=5r%KYBkPYd24NwEVE+LKp_T>_bbFu%I12( zVeQ@B>^jL0WO?E@CA#^i6U}J@44|MVMi>{lB(9u>#JTLrI+Eqy?n|yVDMo$2SCVh8}CLLTq#qk%R1SY$-YCtE?jjcnDR8RhTn)x;L81%S zy)&t>FBOX!gB!!_NJYpWIAsP_aqJ0VrVp(q(mm)Zf@b)Y%}3u^=XVjXtM3cq4uUp? z*($A!x`wL1MJ5bXrv&Xib9vVsbOylvnKHPqof=AxqWrWpKc+}FjJkII4(EhaaL*>) zUqUArPV>}-kI|=i^1XfIPZ1F%RLy_V5Gh9U6xLar>+MNb*zwKUU1^CJhp{=WY}wfR z)liesnnKi<>ExuvYnwjun{Kx_;=Fxl8YoMV@+hT+HX#iEU6k6$=?)|+!s;*)r+-)Q z7V$~>UwptgXsSYwiVDxT^>CdKA=|P-J4*Gs$pEl?u?c$C&`yHleA&xflx_=R=nq8c zklUixiH|{CTcAX0B4T*3kAh2(inUfIK0T^Im`Om)Kq?|#IO3;XGT2jH8K;IPO;*J*<0gsiQDz;sxs z>yp8ws7D4T2_3=9jGrOX#7(D&M1;E3%Dsq`ND-!q(OA6@;gt7hN>*PFIpK@~==rwS zEv##@)9r?+)#94b6oZ+nqC5}f5vJyhfmrgL%)ZaT5ofSS)i%DhTiuIR9H;h{IiPm9 z7`sgptm7n+3kw7OENNKbLel*-RZ$2n2jtUBQ}w6&G^$Q0NDi;R;d=H(HN_1qK&=Sg zzFK4fG4e$aN?-vY@ERQf3io~Sit?0rz2oh<-_KJ$fwRUEoXZJ~d}wgrEa4<5e?5j8 z=Ri_YxAMmQigNz!>fdPGP-ld_@&qtiAg@$AR+~dv*9~Bc@aH9wsgAe}82&f9HwELP zQq~n#oTFi2=I&vs<}}-@Yhh*{;XZ8&w1s+z%HNkIGPf!1LA(ODL4JiyM4Nqp;+hGZ z?O;uqWCGB@R{CmO?4X74&%*2KHyHe&H+o#7J)uKQtuTXg!A2xu31OtyDu?5c7D8*5 zv?rB>TN`)^Vqs^VLhr;!WXup6rp(4kTV7D@@s!(1$*y`6>nN!JL6V#%-S=Twr@I3} zh*C+^^Pr)n*#$}@7$DrIs?LmYNLu?F+SVq0e1NS0?ZtWFdM7fTREdNQijgu;6^XTU zHSuAwo$1(fdnpmX9%a`;{-*{2H$7Uih!@s|ajtB$)&W=5Fm9r8J&v9b+E}9b z`!*dROo>xLnYccPBH{W5`bKU>m16I_N)BS!MLg;V zFZSzAAQ<)IAB6NdBtk8?M%k4V1Xj!RPVZX3=8M z#Y24ekWx-0sy^vC{s;*ib30#XJr1n@mG^``GSoXqkN6$CyuPz!MziZb>?A?j)4aeY z(3?%>cr-SJ&yUi2e!$SHX+cxmcfqH!{h>f6Qqgp2aj)8SB{a~6(QySJN~;SLTxp-s zmX)Wg_S_@WH>Y3vU8&cs$f?R&TB2s_XI^=!WwX|7mFd-BM9SBT1Al+1<>;4dw{NBW zRxWU7U3&`m#9E1&S`4no+6-^ch2ib!=o&(9Ci(o9YIzGE8!D-Ko^eb6c|7#JUw?EA zOVFI+J$5~Eby1P4y>;anpmp|Xo96JNv^O2VW|_bQ1mz9O;!&9*-jC1NBYyix$=ckw zqG;PNvS#*V7=MFQKz-#TVZ$@I<)0RT;s?npL0S!~0sKWSTKc^Yum1>@Y<=6`qQi!k z#&%9cOec90;)%WR>L2E{d3%lu(Zq$T<)kNOWu8{$ni0I~1_UbfY%ZP zB;FOhc8Mbn2U4czDk!;E4^Htxsk@l0B%vho;XWiKLgc!d%VQz?l2o4~yvUF@ba8E& zDp+C=w(?ZFbCIHfD6;zUdSJHfp>9ph=JP85GBEo?U0Nt~wX&6$c-5}>K1AA3YG=3u z$el+%uNw{k!Ms&?Bq^G`L})6Tvfq&CDb{TS3qte);QhEysQ5^E*CEV>c1U!2y%PcN zBc%QpF+O^gR5~3e0gzp`w_vuywuvGHu@%eaZZ2UToQ7F(9O0$TFnFl^1$}M4B&W(^ zniZGKF<1C@-u(4SVRcXQ?FnY5e!y6A-hrkuFrb`P2t?a}9K?L!tCsq^PF=VxGB*~l zysM+B;D2-aNh@?&uIA`5W$(&ECDm8rQEOytNT@KmH{Tpxp@cX8db?;{8}n&een0{a z^ssXH0rYdE185ajqz!fxrQ>s22&J2kUcZKuqSf_04sXC7qj)(B8@Zbd`!=l%Mvak9 zB+)^w;&PeGSKM1+5D8IZei_IxT|3LN> z9Xdo*;O;7|!v&^_JEos~Ad2YJTF382!%%C_v=3Ot)G(erWF}RZ_7L;Cs|LKF%;XWj zDUCwC$6u>&S3Ze;A7NUmo8^&GQ3~Zq{=NrMDkGvO-*u+yPNX5Gb@@_68rVxZ7LXI% ze}~g-tkp&&7I_W3G>w5Ns1^-E5nzdvWDM$e+CF|h)@75tz^Rjcp|SX}bLLtnc{GoU zX&#h1iy$}N$dJx4{%10VtwX!k8A!`uM05Qlr7d*Z<9h@MCnF0oI7+w$b`#i;$y8z( zky)2NhgbI_lw^odLaIZ$_f_B?g6ouwpb`TWT&C1AwU^2VleO|2MvD!`JyD#N+61RN zr~F0Jf}CW2oBAQ=+H8Z#DN4j;s?wQ}_01XJIEd6lm}-;1=Tj{&K`@YncwyF=_qX}l z|49mNuF@`5o+oWdW6|mzH$k6<%57;hiFa?j_^jCfTflfJ8Z7*0BKqWC6t2m);QB>{ zB@Lvx>S$@$Bgka_GJa}(FT0Opi7=(|!A7;+Pl)z3kkb*L!j6!m&@8U}wQ=KpS4vaP zQEhekC~y8}aAOfDh4e-cR;7_EPJZ?7?-Rs~0xsqB(#1hx8jzwR(kS;Nj)plEI~$`8 zG?(f=0LH)TajF1z`<+8e-W?GMWm>5^NfMfd7V z-v+u|dh{V_0>v5X7luIKQT~5X1`R)!SlFpM)EAhi<)&!$-`r0-AxR;+<0d3db|zXT zJ)27c@86yMFJA2NCDoF925(2i!L0EU+(_d>%*fX;D_CW%{&LDTlpF;4(j(U!hO|9F zN??vXGS7)3>8@19L8T9o5ofj>SApBO)L=b@WYlUOnbDt@Bq{@^ktIEo+Q&RFAzF=_ zoz`ykG{52slRkuULTXEBt!$wMkl?N$lS2-Szm^v8XsP8+G%EyXLH}c7R3OrIE?HTu z!rXuUn+Qt=Z0`@5DpeizBzEqrpXtF|NS1cp4!b zim>JSqe5^+qB)9>8&HQrfsAMp^VXbElojBP}fr+ft35#`vmf-@+iO}C|d9A zmq8LGFk8eVx2*&^4<1#>__t}Fz}3|=ReS!_Ta;WNeVaQ@xQLaF+mDpk6(G`tZpLC4(o$i^D=hZ{UzU%n!?oXWo7{Dn zPo=k41U@)!@AU8G@|f@U7mj*Z^zWj@pPhFv3s`oS-9P*Jx5IuId0a5FD33OSw_t_K zso!=Tp3b;=t1)ZoMH9H(+<$dhfB4F`liW{5uYckmezE1RywYrFjkkrcQ(IZn)*ntw zh>o?n9(fp$Fv%CM(7*L~jr&wT_BOFYD1BS2*H2+ZLkFgcRqbAAabseWZ-v#UUR%o| zq8FQjGsX28jGLp@JXm^tvQ6^U8|{m0e~L~%y2W*>EH`K-lu%|F~ zk=XQR(aWr%ZKuuhRCOnqRY#RUuP0ppC&KL2S2klRSd!`pEMY@_D4KsnM8j*0a{;KE^lup#-9nmNHuybbq+ood{Ega!ad7)5Ru`Cq(x%Jjfj1z8oOtzx* zp=|U%WNH4Ga%0t_nM;D_yJ96`R^BZWEZZWK(rJKLiyZxga1S93h* zKBhr5t}{ngGFeAIgQ&|jvx6!SbvfbvfUQn#UXub6Um-gtde%tClv`zO4(%C3uq8O> z@xlr;0YLenjNQ8qPXD? zuVK6OlG)IJ7w>umpsMhf3MXo{MmDojZ;t|U)-3S45j<|oqT?U1A|z$mBiEvafO*`{ z!ft-yvhAk>!Rw-no3k)i7UcAzwLZFW;P0GvK{n2$%O|7PuWbRrSt;h<#ZR!YG^bbCKA`uy~4l8(rV!6l~erh-gzV z!lV}?G~sXvC_#jmqszO7e^h*tzU}D6tvTPt}!;x0YzqjgVM$A^!FkS^iGe)`n2n`_eIf^xV*_Zx!i| zFhA7B(}X6JwNquZFjg9No!b|@nvkU#_)`|7&u^`NmyHMcDXg3%THLTr5T;VX=0=SS zJ+QZ`-M*;F5adf=2tc+4;2PVEsi*^M2F{RY;&$98y z9qGY$zSkl95n4#rdIw<~7CUnIt3O5#A9C1iwb@$Usb4%+`LB_u=j95zl@Ejmcofh%> z)`)(~BPZD<|CV|G>Y(cM=&@e8i|dSYHJOYj#*`{ayxM0{C-F44>SKb-*3$zV_(Yw=4NZX@;=PG9${2GxZiS% z0kL~VdU?;-fB4CO$?kK^#kVqy?1Sw??35z;l&t#|qm~z#dF9?WuG<;*J^aKEGgqzJ ze<7atOxd3CxHx&Ssn;JGd04-K z`Gf6d{hE3I`+lRZjf<3Rr0=uX_?we?dQ05qol7;UQ9;Y>W_j$h7;O?OsoygZ`AY{6 z3?0_S3ce7ew)?>P!@~deCK>Q1iaDls<<%DyE#g_J14ai8jGeV}Uns9-pv>qpzFPKn z!8`wN;N^e%o4@+XZp>$PlKzwxx_DqHzCz;`?89D;@;#hl;d|88jmXv2vHf2S8*O+G z`EiHL&kh(ZTrlupSg@s^I!xO7=Y5MV4_U6aV{fcY$JS^1ADO2Y?Au^s48K?G?7?;o zA78#`StJZ6n27s)%yBUX0oTkL7g$5=A-h|C+CnKC%00$M zQK|LdFa7tW@vyc}%!iJPl^er1x$M*r|L(oN730iUzu4r5X`C&MDH}}N=EjB;0I2em z1B+L>-qLg3j;KWL=2;Ox^;

KC8ol`hz!37V^XokINF{PtFN5TIe$5;DHt++aj!R;rzbjmRSr`1PpUl6x(|Cyi?FYg!gvP)~% zg`&m_nWKOb?%;mfSuBDIBYVg31t zZ38R|GCmqQ)GlbHiRJQ%@Yjd0TVP@@+5IT%vjZc1kI#xt%k!#34%KfR!{ip@pw_`9DMi`LeZyb|_* zVxipxY}@RKLic^{mwTd+^=4FY)w5+ov=h-I1{>(Gqh;6A_5}9mTxV0eV9N`d!z1?{ zPJ7k-p53fOQ!6-gy6QV_@73j>>W?h+n6+Mi_*qL-rF0r?pkXUzi0>ocmN;);FBpiQ zH#n)-ewv&+Dt7$}FYk2`&6^*-XXle0Wa1NeSzE)+?-v`p@xbAM`)J>VDv@>OtLa=05w*hJ;jE|s250@CWP~r{ z>A&=_Yi86}a=pW$oIVTl^beQ6dOobU%kg8I(3?3y|Cw!g zA)k^4S(O*~-dTsW1BtM|&w9_ESmbDtSIdioFOB*ZO}HT)Xf&yiZeJ{@7uI>zP0;Qw z=4mCIwC#2~mzl(h>#vQ|4l5oqKi1LVK)+#1ma?RhKE#=`1?n0T2op#|sqY+7*4%PT zj2LnG{oN1(rpB^<)ZJ={D_&qyJa~R==)!f6vI-n6ciSC<0OT{wH)(ck+SRP~q|2_^ z;lhIw*1^#5coDb#BD-*%iK*RAM#nRK$JaR@G=$rhF`byEcA57fF2Vjh`HXvVrzo@3 zEUU=4Lu_{rZlPCK?1z~QFHk`!wZty(|4HF&)eGsYI?2b?WJRTZb;cXkz#Hl-Ja~O1JB^eZK(lLt&iDpWv(?KElp$ z$0pN`6ibHuaFDpm8yQksl&0ysxGm#c_Fae{uy8^DAlJ_+Z_?}iXNV`eZYnHhvyPZj z9u-ojs>$H0x9Q6t} zWLa`eP1IiW)k>7M`C z`+sIke4y{V3QY#vk&D&)`3{+5n;AJ=WErV-NxqVrOMMkxT?m7G6+f@WYP`00kzTIwt68PlnxT<;5RKcyH)U9Sr5$bvBj)PSlX;a^Xbe8zZy}Gfd9;v! z`=s8t-+x`WxGfNdSqD`*z9@rxh=?TPvDD7dQ$E4)EbSM2S;gi(USd7pD$!o75+`lD zn?7y}OD0*tWVe$kiIIPu2;ZtzX1ncz0tOThSLIGpvZ93YbF`ZfZU7yDG^5qH zVjv3-Kob7sv0tnhjhN+HKk-JP zXuW2bz2s^HIttVdIEb;YnwOKGcMh^d<4CWLnEuOm)E^J|Kw~9J=iM%VEwa<;iE+PS zZI3M`>uTYj@Dw5UOEXG#+im_&WF&%^%@!xE-H>dkdWe^Il9Byng*Dfuza|06$FVw~ zO4fX9+1E!xZ1ni4&Pr!yyxiR>Rp@z@$-6twt5L2|Tu`?9^rxgG71HauUm)qQ`OwSb z|FSq3HYhjVczV}8dQYNVcgqv2V#ordmpq{&t3qa7e)u^O5y|`+iW~b+$TN4>e_P4N zZhoIRPuku?2q8+TH}hE}^w$lHO@1D_Pvs)5JkW1>!KYbh=$+sdUvBHNlB_#Y0?pWE zsYf9-?{cvuP1w=1KVwb#C-Tq!cn3icW@C6Tb3*-iCPkPZE}kCbD9WT<|z zF}w|qf>%fEmm^h9y*>xICMS4l?u~gdZ3CWnD;cF@uh&ZAy5?DZ$$k!$CE*!KhIINj zs&6Vs_!i#C1W?2dD$%k=#vBn*nJiwl?|D4$a&u@!(VEX8G$g)qgwSC6D5S#?iTX$d z(AOHKC5umg5&gf2>d)@P-)M(pElBERKPyZRC5v{j>1?!?bp%BtmBc-@=e3NOLWz0rmom2AZPsiJ-A_tMD+=V52_xrA( zgl}CJZH2@x0$DI;4485O3Jkm^7f6beE_19V_xMG#cDuE^7PzB;Nw23odHdCx?W>I_ z$GmYJJ=rv64*sM;xqR_d-rq*#8@&@4L!53w472~YVH#>QX&k?;h>=dou=1T7N9U25 z+kc(E^S6#&=LZ)GE|}6Kr%k2avM7x=QuN#%Y0s=o>CQ_W^rf3_!U z8U{-``j`4egZ`%oQfObG3=q>4|0meD^Wb5}{0UCldZAkA>3ulOIJat<$o84eW$_mU z)jl2vmpcr=7t*5t3H27Si}o7!lIKQ@bc$KK7B>2^4;5QpeRzLH1X64d8z|=vfMi*_ zw4Eoe4;hJEP+e-cfw@VO!Uy_l64`}z!ROLtHrf?CycB5zW0_6k3MM#a#wC5Z&8zM) z4=^BRzyJs}nZ~{;4h6G(`r8Zh;`f(HW{!B2S#aWo(eQ$}=@El`Iq8GP#X7DY0RQ^p znMHvsR7eGJKf@n%RXrT7_a8L8AR{e(1pJY&A+2^@?4?-OFNOQP9sk-ikzKHVC~K*2 zpiFF4&-(>U8%hf8)Y8qGz0zU!OO9L1rg)YNL6Wn>Y40x|)i^q4nli;Sv2@R-0qAZ5 z80E@$ezC=HA3`_)OfvWXb|Ns!bh|O90s2snOm$;rtJqNt{+OXXfdCbplP=QVH>*|) z@uR=rVxllABwwb0XJEUlNqLLAt}sx6Lnzzq)_!J}*dP7huRhEq7JicXD~njQNBov< z_81^WC=_5^rwpq#{RBUg1AQYKz2c)Zb#sXFyp{#F$yHVpar83c!tc!L!g?bV-~&K3 zABAKWE*JudO*whdJ?%Lro4z z-Tk-`UC~;sRB;B{&wU&vIRWBHS*l08kJr$V$9JhJ9wz)ts!Wg}L9@sCh zFv+0=B&bE8c`|is)+$kEg|$kXqIY3E%0I_q71W>&6#~_!Q~}8z(Q@?AT(c6u-ZG1w zwF?4bWT7CQs02={d7Ao#Prt(|V&u>ib`z20)g@Ko+dRI?k~g&v8E3Bk{blRD;qVCv z81_w=_dxRSKhmXNG!u|0w$1Wo+sLAzFmp%nw50&UpegjYVP?Y%x{pt}u0NjZd7B}Z zx>IaAulcJ@1F~mM*zY+#JZzoY1Mj4M_KSnOX?>#$hsU}L-9y9V-IY19{iYW}F5#Sge-i}Z2~mj>TbDxYC|w@k z&pc0Cr7*4y|8x`imeR7k9$qs^cmrA(Z``uTp2Cq7m;LRmqU;frgX^Pope=%L2iHri zuGVOwqx$Y2F&+04n6`x-a8o@l_WI*HuP$M!*hMCrbXIx4{e3h#aYFcy$D>7c&+#`_ zBHzQf%y^&j1adK`a)hFsnCTxs`cI`C=Xp@20&!#%mscWaTr9+)A<#stW|L%@fYcT7$l}MEXu^2U-@y zr2`zi2MJrh!*4L5AZ|P~{}{@%+LI5h=WAp%28Gj`Q1FSN{%Z zbVW{-QZ~z558Yh^oVZWBJ`_@oW9R$X5Bk_|J)fnNnTiuVZM=t2P9{Pk5u>OW-|X`O)*b(~a)~+ygxn|6!%W^87Kb-$9BSCv z_XXi5@;f%3mz6pre5XO0*6AL!b7AeomtS7mvg8XS%)QajG}MKvyV8Ztf$u?52#5lb z%TzaiYdu7QCM-z%bXV}1FBs~ruP_7@+1MqKUGo{*_W+=??AkZ_SixPdyWp&QA59{A zXcbjtl`_=Q4sG~r%4Kh^Qs|aob?8*TbdAFGcvbtW< z!xWxO5f=%~L*n4V4HtgZ;{l{u$l*y73teTqJ=`9=?X{9i9G_TgdwJ49LjSjC+2-oHN3AoUs;3v-ky)5t%4~Z zELQALS-yAazsNck3np++e%+)D4Hs}J2~3aK=UqSD|Bdc80z#lKM0%vO>keIo%R8-5ucLVev3SjE``h>enS$Z!skeG=O=BxC7fB*#~li}*zo zd8^P8uuEt5Kqy_-iV$ZGhL+ks(?p-bF(Tl8K=*n3K~>ab0xCvYRuWe5@R;(=joFKk1><#5J#KAh0w*B?AXd-YEgS3q}R*ADXS1%?9I%~#7FF~ZLE((I2sa{B_9W;zfV;1xtkH609A%=^H9m z)eI}}wO#;?YCJ2Cgkl{{iSQEA3s4~d3aU%QibNYu}=jB_xkv^pHoCwf(KSG`!a+DCf}x;@#BX z9_z<4B3KktmFlW0&$cr>%Ou$Ow za~#UUQc8jvC*+wx`GLP$H|2PcW;lui1RIB?kNoo9vYt}jod;2#N^a6sZ?RKh)D*x` z^G`czMOdB`$=nf(a=H)>P+nR3+D4|^wqZnMdgBU&g9%M1Q=vc9lid<1Y8udq0v3F-cL55Wf9(v58OgJE!d z_&-s0z(F`}_ujxRoH*<*?_Z$w9s4W4)_*80{QSKGC)Xh*ReST(t<&18$PfiZRU)Nw ze`?VMCxHA2cn+%O2DP0nfJ`NlUs(@&4~wO)+|7PRtda5&fwLhhn#4+@tt42WDjxoP znnf)u_(X2GgUfUHHQt82Y#&)HLs672IWaKvNUX zWHC*vdjdnSDm9T=-@e%e>tA8WnFCue2)QTFWK$p$9be^w_5FIQhxuQvhdViJV zoWXqEYIy_VI?`lB;=+jBnZa>CqF);515^ECoWq_bF3lmKvgR#gKg#P4y-JaJ^B&~S z;B|wQ;eklOG*|!dOvFF!RC$!TNfJBm9rZwR+U28OFQL^o`n!ds&pzHGsFc-uG56ZH zDB9}P6tZXYY}Lf&-Q#n>4}1>%z^Xt-3Nx$}+674KjGcql-(FQ`=c9cV>>klJ&i+X; z_=BFq5Wpe?2>Q3@Cy|0~AlCtMV3P|`Sc#JwE=m0c8e=%Dv}>Q^=CwIk`-(u7`uo@( z7-}aEz8W8KCTOh5ODF9n1mi{6J6EAv3mUt?BxM9b-5E0mNQHx^+f~@xDIS*B$Lo8} zja-o2D3W>Wc@h!`cLyFlmhTwST&-<5WX8C@vyGL$7D*@aDcq|~478BLn^KzG=hAKI^#JD)6LQk(unARiFts=|o z?8m$p`=MdEj#fouO~IC(Ru$9na|;k9QL5lnKWl5XYm0D*(PWsFfQJJ*+7(00YHe>z z{8kGAuXuy9?43JNEQ~?&p!tH3*!SofjGiWad3j}Y(FR{hyp`YmD{}3 z+LXvvx(9&$09`kC`eF~l4(d4wrMD(9>*v#0#*^!Q#R}39cI6JzFd_w=s!Xv>)6^<= z5|!wiI16!;D=atF#|tfbsYI>3c5pt{e`Sm{r2wS^ywY?%L5a+2^~o07omQ76*!uhY z$eu_(@ukONglqvt4}mxryF?}8XQ**vO#M$Qdy7Y-BV8=-IGjrGY^NUE5LVz=G9oFg zjvwM(|LAS7vpPi*%(x_A^prZ_bj)Sbr3`2 zF=NxmTns}hz3$M9dD%d5(hl?Sc%ZE*d5repASaUHInn0EShsCtMsE=-ZJl(x#{dX$ z1A?k+G%W?P5i0JDLSa8NlgH>61h|V(mhqOpv-I~_s^7*y;Q1#Di3lG14nr@de(7lg zJ!qhLVcC$}q&XbcbEnu)r*)#Ng0!RkThFm(BIl7H5T+eHAF;s%r3zgZa`pevB#T$= ze;%)OYt$a9Pkt?C2OvZtoHQgfFW9uzE(js?u3#QiVXqH`=pXqr9s+!{dx{pBm#RYX zqh0&T9-I7)aGwzb0D+FUlF}S$vBhw&7r|HY{D?!JKsJaX#~9iRjZ3~CyUfh(K@E}@ z^>k28%+n)1S+<`*DdXW1Z-gdA-|CwKqB0tOB6_WGRHuBqQ5QCx%onW12=N7L^dad2 z1fv`aZ1qE)Ij|dEu$gyy#f={3g|sPjZYaA3fqlK`g4>2hb%p5enZ^wk`iJE1dL!+| zas2PX*~;B9y(eJdRu1WpEot#T93)Yy{sj(fzd7hBh2S7RmTy|yXyeRL&VPB~~{SKtB1U3pi- zQ&K%!WFG?WviqwXB{k<(eY0IXrV}0(D{=8B`M>b}qHIg=Xxfc-_6WNIzJym3r>AvO zO&Hkc@)VE9^0SAiVO^H7#t;`oeCdnUf4?EON)Js5e&9CGV|jvz?%>^VkuC+?%yxE% zpS5o~)4$6XTwGh?9KDC>Fz zM68hm2O^y4p~IBJ3e=~>@k+7pqpZgm&)G58t8RM48DxCt`&ae_Av^X0@gaL9SEezU zka>SXWqJMBHY!%+$UBY}=@99G>`>mgtAV32+mA)w8jHzI5e5{)=h9$mV|aBk67Z@` zn2EyWz2ViYE%mK8p*wsr!YyPJu$z$^hDK+9-J&_&SdM{$6-pS@2)0uyCDCDc(2t$9 z+7RpTX1KVXqYMYkI(~ohGMmJ)^U*srwiunp=?=UR%-9haMJ>mK)%7Qoi_ndT3@+6+ zme5fciVQE*olXitMnI-tz_J11P)?Q-B zfP$ZAb}luMx@FC5tkG}Eh_DhTpg>j^s*ItDSD^OyjE&aqGf)d0Gc#H?ZbrU4a80ep z>s}^S_=;D&UNbhUeJ(Nq({sB&{Ml^UHMI8coFq_5(T&wU8+D(5OofPA-Ob35005sj z=z(BF&!Lsl(URZdGM|wEAI#cO#?gQ{L4=`Gp9f2KxbDRPA~D`bt1sV6W_l^9y3%X= z>JxjRi6{r)&AVh-!b+ucH(=_Jx)5G*6pXQ2Id^L$j zAM@%+R;`&`SawLrO4YazBIu1FJNNO6ML9xQ_&y?KYWnykOb)^yK>3Ym6AePN^i04@ z!NcbI6hf4KS+&xZrdRnjy%4IE(3!}PEAJRB*JNJ>h6_^g`FyzR zEc2s_+VSnsq3s(=Bq-k80cqIJtRJB?+x?^JACt}_dWMdcT(VJj7N{M^N6_~lPD45) ztc*mtBbm{k-R!8o;QG4;B^Lw8AngjQ#v&zgmZn|H-rNr;9-alq*(PYw(?dVYIdg|X zI_<^77y&xZh2b?)?e_3M67x(go3t`swI>K4zkrTb`A=QCXm~!9bZhr1&p$q~w(q$D zjq}>k|CM}AiMtNv)?v{hnvD;2!Oux8WBlVOYAx*7V=w~L`o%CjU#NPXg!aC>G(`*v zgHNJ|ihj$}km|YO2m{g{RD{d7iK`#@;XL4OKpQwcMg&`?|19l@zj|s!V^DSS_7mdx zdb-Aw{d63Ox0$OSjiUj<4%(IajPqFJ$0 zZ;K+P(9nKjM$$bCZEx&w`=~wfXwL{azBMz$tyLQvy6Gn`wJUF1NdwgizgVSI9)2nH zdnXbgx)q^%I%R0PaU+#x9k;)%u`;_Ns53}(+b!x`?=7^_baqkH>z?C~KguXqhNxYN z>mdjN-{>=?Q2%fif)p{3UY`9t11CRn|KI*0YOC6CoN@L4j9q&`jA{E`Zs9Jv6WF{r5Q0bYBHH- zn)%(&`@VB1GvoK)w?6fHpZ9t0`?|0Dy6$H>Ywm7~F-kVU)M}ZUs*LP2ew9Nfz@lQQ zhpTJg9?V_+S!3trgQ!MPU}xv2flBHYf=`w-0!|`ss&3{#-l%|({ zQ`s|U77Tigg;BfF&Ffnz!+%-09ij=SXF)(fS_?GS=eAN|bUMRDoyH{#3h~A+av)SU zb_>PLDS67)op#+NaP~T@l^i3=-2eksJ~b$7+;}4Mt0rYrJ=l9|2E}TQ}MQ`QzFmn$mn}naKeH4_5 zt;GIt))dUZpe2%nG9g8N&!uJSU?m_z1g8}yl)MNw9|>>k{72%#h&toVAH0ke@ba_X z4pIFb$m6)Rgqv$f+)6Msl)EoKr?glQr}*#+nrU(ms}k z+t{<0@%L?uIU1tUVW)24cf2axyUKoU=+W@vr-M#{@Ot^&m4DeY&Ej7MrnFOB!SSJ{ z$PVk~fv9Fspyye)0r@OnP-C0TjD`Q){Xsu43(C4c&!sHL`E5gEm?kvG??9F9k`3Z* z&-L)vlSk2_&)(-_h1w%vteYHMr&3-RN6~A7CIC4DOez9JwT3$q&0IHA)}9gsD?`J4 zNzA31_guVEdS;5;AB4V@^zF+_N==ctmQ%-jAzp#ep4yT&b(QEP|9U_RaxcSW-uGNc-Jl@fJr&dQCZ4wDyrr3!ra)9L>h zC{n270J7gn(Aj_a$P})-G6Ab|`T}~w*abwmU~@j}2hg-CYnJwqt*=#zC3cNS4Bout zO+T6RFtT6KxWUk=}3YKf6s-u2e=n^2lb zTI8feaLS6Nao&rfuaq09f?+?d*hA2&EPQw67oMu$FkE+k1MCW0q$5^DX{8lk>%%)j zKgoB)GT&m3jiu9;jaOf^aCo!k=9NcEs4}6eyvu^JsNQGihhmII!K#)sZ2lhs+0hm% z5D%`b&lTvDHBDjNPoQ4@OvkE{XXn@FxW({(M>4}<%yfwT6}u1T6~4?;w(4X5OE11E z?T#NVZiSgWX8K)IO!^SklxKZeBk8im68do2C>1&K+J5l3#+Xc1HEw-R>vZnSPQN?7ho{_8!@oa03$_Dw}D& z1IDQPd);AaWK{XfkD8nL;d8^bwsbi;XUb{~XL0|qKn8hSJ{%sCFi;sbe%RqmT>?== z!Lm9J@7wP|U@6V@r=Cx@Se>i{q|GjhqITP38k~z(%q2i94S*=A0jt%8NNT1MK^f^S zp`8YsMujYP3A2J_Njr6AL8uZ3n!KxT>WXGuxjsh&U#M*AgX^m7qEsK8yhQv67~GWg zK-JQJ>;kQUcRw4dUUh13hMs7S=regIb(f<6Vr&kznsy-9uqsx)d`j7^V#o?osEspw z7Jm5{@t2Hj(IQq>XtJ4A^!M(?^SI{9YK;Z}w@%4)us4eyg~zNMta!7}&=RdJf)L;g z;&xRET;X4(wN|?m7t!?M;cLRMk4Z6V3f&Z@)EPVr|a)mQ@k1sO^RRLorfbA57+tB9f^!CR?^%(GU?kC##hRBEG-Y~t)GH- zOy7zb7wC&BJYQ&eHl#QOXp)rCYaHwV^&%#lQI5Cv`THDQt|%YA|00CnZF~9?6p99? z5mC4?rieNh4$~Nr%+q|fd_dEGqFQGy6*pZ~DIe?PrXj~8*v7x5D}oZTjNEx_Go>{+HPwn91l_?*ltza{ee6_J#w=y|a{F48^ zwqsin4nYZLNXufZ3uZEG+ECdFdE6e+_}u9IvwQX`OT?(1+ERJy>@P_U^HM7KJMM^0 zp*NtA;Pm6BG73y_<^lI=6uo^>KBgTO@JoOx=9U9pt1b^U*P&$x8@RU+@HFE%oJfMh zX$=xW_&_kT}aM;}4>ju-Z z?*8O49n5DhhYXvWp5OKRA_fLaV73N~?ZC-vEurT@=Yp=TQ;+YATEFFX(3ZwzsS|Ym zaUCQvove>z4Od@Fg0hTPhJ@m9n;Hqea`4Z}ySE-c3BCbV$ea)MOz9E4neTq*F+Jp| z&GmAseLs(vp3h-`U8OyEhm0m9 z?Lb=(j@i}K`G=X3HhQOAOf|P|xMY4V+ba4`%y8RhKcR7Q3UlzS9SuX3kJ__8VwG|k zMR)4cF4b80eMyJ{_RfAYodY#6p2%{o7_laBpj4|jm&)kLN8$)$1PFnHEu7-Gt6|uW zwh*UMEOli&SFO?5=uvKwp=G(JBpdv~+m)*M0g1jXn8@jHER5Td%x$+#ei>+7D*oNU zFAVB!Z~@OoEp8|d!PBj#43!$6kX>SE&_F1eB60U7FX7n5vRaEU#TNrr)&wseYGWvv z@tB+0#@7K@5*RZ zW*8{Mc+AW_FV1sIm_vR z8XF;A8IRlcyweG47wtTT0XLe$-W2z#9T`h{egX9f#-WgXxXqTB=M&Taiuy@7 zEsw5$>0t7|PblR09MBdz6#Bh0Edhyagzv>g49iYh3LJ29gE@9h8 z#W26Xi`#sfPMx5qhULl{-I!hTv6llx@XM;@jzw+fdzPIPMgKnlEAyacJt01QsFUTw zWYH^PRvS90`}V5n;b0<0eUuhIgSo)Q4EH#$-=%!oO~&Uo-~R+tDQj^9Y!BX%+J%i4rY>X_$9A}O`2NInB-5tD*vZz>C?S$KdQS}T`$t1(=uT5G zEi2_W9ct=@)pHqX(JjBkj6${wqHX_X!Nc^;r?Q1>TPYWVM;3|F-ixy^>PpckYKu*Df0*P&g(!vPJS4gxs_kFm7YuK z4hCrpgrS(V*yL3Ndd#h0mp#qzoCN>??O>30QrEsI$c_F@o> zuPt$1qVurQvZL?6J6SMOO}{vi$=ll!u6(-!fk1i};58w3@uCPR^zSiw<2qt!h$@YC zVc$c$y5{{h_Mnzd6+I5sN$&P$KQEm4hjDpTk3t^RA4=k6TL82@r^Zvm^KGMqLehj2< za{j}*+N%1(7wxuDsz5Y=X;1YZfz_4J5o`kUkM!GaSMiNKU)m_5Xycaci?nGi6eC*w zD2H=x@;j3-YguSce*u-f1)JL=Od?XQe)guZ;vWc)SzhiBRB+N(LoCYaZkLIJz-i{NFMX>gFLW?AtTlY- z;ZU~VV;TfzdmxG`dQ|_+MSecg0`?!)?pIMc3QlQfi zWyCz3viIo&5UeVbc+5ND+$F!ry=cP-k{>=cf$a&SxF#l2ugs7~{;ias2y+MI`#idRMA^dnbWe*y)&{kTEN$UJtL)K#@u$3m_+uCQ{@InuU~I%BK}WledbyqYnmR}d1} z7`#@g64ES(T!IMD* z&QX%yS}U=<i9vs>tjVvH~C@UB(&xJp`vkM32A33I zwiN;_iovKP3#MdoBuzoIYJz&+^#__h0Q%-tH$8C!q4sX0F=>UAKD>A*>&&)1sQ*duDnz~>b z7B)z!@8p-f0UqHq5vtLO7!r#^-~66)U3&b^yK;~VU^nVcMHu->G@vES=Y zUBhe{GU@85gHT+Psw_*uC4Hf3jJw;+!;#atvQyc>+WJ4TEcr8Tq!D=~T;4#+`=j(z z0rwCsuPGv4T%0NXmOm04$|RCcf~i%J$@|}3{l~k-U%W8d-O-5b7u2z8>F%WM#G|st zF;@&B9k(ob<`%zk(4^%9&%&TK(ldLK=ui9NNh5iho>kW*T?JF7qo;F&(k6?7Em}-x zmXy5w7WS%tS;eHX&F98oKQ`mH67TAgy6Kr6K~K=zm<;=gbmnVPw$(xOOR?dKBQM3S z(jR!mfwTF@;Bu0X;+t%^7I~Yf5!^ zx)H-K{)mw#rQ4Hi*~eBc^;P^?>8S27*Xdbd&b+9DHrRw}QYh%D{r`0{MtbTcXeiOt z!<1=d^T|(r1^&nuW{j@HDE&ItCNL=vuEg-?{xPm;Q(Cu~a6(b0#IY>%RHgMP78*)) zv<3M)&^Sk^%#P4}=yx--$mlo3gD@>mym}k-=i_8F1(mj0t4>h zTf@>q!#-sR40I%oIphCZkUzg@WX-w=v|3m7m%tSUou|z`>;?OtKhkf%XmBte8^GY^KCu7@focl_n(1lB| z-)pc0hES2v6c*}tqDvRXxH}u=*JmA(+GBg+v(3y!n^|z@n7B?}6=Hb+q(ny(?yQ2z zgQfRcPbWl$xWf@AjalzMBgmf~cEIlApMMhDE9yn)ji`gzE}D1{rUClH1sNY<4dCd+ zq+Y5yHdFHkYq&Ske!fdMiBsEkGIx{#iBveoDD*5$h>MSCc;<-h-C3kF_9O;xQ|lI) zwzq@*?tS!Prr*D7*&LFkCJ2anCjINds zC3f_j!>6Wk_x5=yqXp&I!xAE*gyBConQ1&XjqqAw@LHlxMywj?ow<(^o4(aP_{5P$z&GlASAk>89IMrBhbsK1}+o5*4PP}uSIK6Vk` zonOOm96Tw|^dKsOXT^HDIATG~+dJW6dP3gt%r}1V_%^*|vg$moX4De2f#4*ZbBkXK z2N4SeOy2cIAJGmCrywL`b2_=KnzyLDuC2MDapN>B{y5A1i1=e;R_2BWn^pSF9*Mrq zUo)=t!(*<7LqKek1hH&$OYQ7xvlt?U$B5aaK^;b?tMmlSCj%j?o|`1Zxp zuSB767f(WJ=ph=MfvDCAMGM|4g2r<1`2XM?S@Jiwi$h7sSr38Ac*R?aEd6G=-nPBZq0g`X6dA6_|SC}cHgt|@|# z;3{3_51;EWMuYy=c_7{6Am@C{!n(_g0{g(^;G-uwO`;_D@9 zIh2-FTp8>2(=Xrss|%xzliij(-$IxP)0JehE=-K!MoTNA)i_LaVto6F;1I zAWE4y*{BqcOj@$45LW89Aj2(^%aps5GzNFr*72rJSw$w2^ASbQhPh^1f-DtZT>}zh zO;0mN`L>TU&s?$8y0~+lpX^S;))(-_x$|w2Iv+<9Jfu(YNq`GZL0wUjc+xj9!>{I8 z=z?-1k4oT?8mPLJNmrqRb)uQo9HxBI*kk05)OBtIVY>XS44v4dKDLI=2K_TwTlP zd#f9lP0l=9szgKFF3;)n@YvAemlTRNs&j?#+5uuK=?X_-kq@0TMF;d^$3oFQVUgIp z9VxIZs6n48ABR$wUFjnJ^J`#b=O5Mtvk9~i5uaDP zucN$0{czg0i)p;;2=idkz)up(>TEiMe#wmAO1+*hH3z=gR z9MZszJED9$$C4=Fp;;erjCGajC`*EzDvlP2*LZ(9r8&oHwptX9`;im@hDtHDVz{b}+D)t(G3yw;q~ zX$?8S_q2 zf2e_ zeM_^yt6p!ckNWwaxM>4Fug-{_wk|Q)Y**NbMKNCi1peoNHD36aCwFx=kHJqUR-7eA z2iWv@?pH<$`qB@5stV`*J+^WutR6R!&|wo3$5%U%>pbFAZ)sob5(OKA&MJGU&G zDQU4^juHZ^ob|i>ssodYq#fj88W;dYCBtpbv|T$?d7y3_i(p&Pyna%9%g2pb*OhTX z^uFt}S5zRC{0y7*2QV}SW#YdYVA!G(Dc@;AP1aa-7#0+BN)NAFpt30bheJ1XmrYcF z6fKp7wDoPaVJud&YI)Sl(z>dJqQ=d#vxdrd+Y_JHH98b4!3gTc$M6xuh={{lKp&z~ zOe8TKoh#<(Okm9SJubz22dY0T=z%&SdSUUCE4PsVUs~SFgIQx!S?21lF}mZRXrYLl zDcUTrJs0DlCpEBZ(*p!jxbCQ=&Z=3!Y|{sIX^_m9`hFMqm#Ll^y1y zYHOEY;?Yb-imVI6nC{H!en$tW0xwxGZ-c-(P2TZth#KWK4Tk$H@gRr;qGB)-=Iz)h zj2omO0?sO}ixaNW2fHhemRnrw>i43wlnKoKj|J!JTje#==o$CMLTIs= zAG<`K=fPxe)?eeg*|i+XGE|)1IcC-AO!fT33Pm5hcylw(hj0U9(LA~iGQOJ+s3_sT z%!Is<>0Z=hx@)yXP%OnHiDmPP{v9U2yC3rkd0hqQfQB^o{8bj;bL@x-og&*g@G*XChr_Apv|78M(79 z7L|aC`m4h@&TlH0+{xzM$IogFq(Q{q$O;C@+VPF|%zp+7$r{*5VOOX#2eOccj4)17 zBH9Gzd+p>I{sLiF$pU!#-59JqtOhKQc$Nhd%(O7I*3P-z(cup2+Js3U9!glm5NIqJgS-LPT*)reiNLM$^*PIQJusVM2X4U!T3T|DjK#&eLjJLe?U-C7t{kBd4s5k1eP( zUe=Ktr5^Op`BkeRRLM(DxAGwOjT{d;^A9TsX48{5hmX*KMTH~t>nRtWsz1t?De@Ma ziol9|MD&);A0zbHjc_p0(1RHz7sp z$oJm!>~j`ajgJvYh7}dHkF?Q$H1qokQcmpLapj0sbck_DF-Z~8=3#R}+W(x*oxQG2 z?21vU2Bb~0heKKTGZ0@dyz&0*6-O1LDyMh#;WvB!gb0RF+0mT8BKO_Vz+|)DJ45*f zOt$Fb&Rl8PHxPU7oP|k6@d+nqmNkAlpX>fw$tEcvQzNHlf|UaOKk#$dWJ_zI;(k~!t61@2knidDd1QXGFQF%#*H^eC71i_RvH3qMVK2yhr z0w&;AigQQw!BA*b7;b?b43sk1^3%HYx%tXsiUZx~hf7sNC@1Rkj)m~j13%v+i)!hd z0H3OeV<8{Y$Wi~4K+z2(_ul=>JIyrEqP|Q)phfaZMu&Qx)3t*B?^vwJC#XtWmujDY zI3-4_F6#5}mVSI{`J$PK9yPx&TRu!S^$k_bn(*u3HQHg5AxY#+6aQKRIA-sM7KeFI zkf6>GkRbHGzQV&H9Hy=`-=humb;qdpwBoe~pzS42uZ83cjQ2r*^YeC%0<5vS!m2{( z>c^>Wf}fbEw&13lPgPmatBH}U#ACDuB3Kz46T~kl$)AF-+@Ou;Iht2^qAvSf&0uf! z6*i=N`>1Qa@-3&8<&H|PPQuA1L==kl%KAdYC&~jgarxcVXeadP4gEx-7e`D&m5)DP zqTl+^K#Fo4(W7uINvE$Q*k7#UmPM=dyEjzpI}&8KY|EVnPD_Ffwz2yrRdXJy?j}k| zVJlA*`X1e^9(==As}~kkneLYz+*IjCb3%poUh1r=T3&2-5|Dz>aVjA5_t-7Ld}l&x z8R}E;{iQFuU~dy$18D9&f7rp^gJ&H;q&HI%HRf-4-1kQ#5qa8Yvs|Ioe#}JkLU^Ez zyX@hcyR-T_lwZK}oB8h?{B}0cIoqXo$fP=zmK;4~M$a#OViKb3lz+7BN$H<)5THg5 zJcI_Qt!b<2+Tu#X-ML4r{*CQkf|R7_~q% zsHIlKHExPrbrixp0R^GrXy$h=K7zd(ZC6E?)DOCO;gsD37QOsNU%?O`baJO97{3QR}zOQu~s8)CBB{_lOoh*_9hA5f>f&^lEpKvdH%Z zXLiHW5xI);*^GO>0IX#L_pF(eDdFoe76xUk?jNL z&-ypkQe^0MX)=Gp+nqIX1W1S;{}Ebirc3)fB`(6cY~mN@*GD2R2Edx|-3RGB7S`g1 zo<9CZqxO>CL;uWSsoNyvcOCuE*+_V6jz`RsPmV+=(;R*Tc=$Q=cUI(dZaU0&@bX12 z{9OWUY#QqLNq#^y4yhXu*=Wyz8hdUYQ$JT{f|ODUam(GXu%THvvn{3 z6qPCXHh%4cy|t438xdY_2meL=Db?^vi4=r|P-?!lSp$jzE9TNkhYh?3shW=}Dp+_U zxu!YAS-P>_3Buu7qKbpTniiAQ;QmfS%7KkazO=PpRG*f=`F-f>K!OB!{H2FE=T3XF zvE-{YDkT2yr9n!2DZm*?E`iwX>OozO_F^H_`Le{5_H|7?e;_4Mi_V;B(>J!O1{ zuK1lRuGY$u&7NfFlsxU%FNFwbFSA`6K4Sf&KG_tMG79JggZkYZdIqVZlAS>4G$29; zW}+1C{fm3EWTz+~Q={DJ3XO$9qTNa2#@1E?aV!N|_XH^NAc@YM zO;ZFQ2b@j{r*K)@iii$AK_n|Egr19M{nj;X}=5MJ|j#(iwLCv2Z`HfTpygPE>1AmbK4*YzJ)cZ}5t=?SrnZ({U?uCUb-%7Sv0gpPaKFX(^@ zhAr9|x6s*BiTXa1(1Fg}k)Qy4=dZo@ok&N}D>7jpi~K!YLRFDgX-&adTAo%>`8u-rW09@zMwtIN-4f^I&+Fzls#fX$zQ->;|~BAN(}P|FgY%B zf1~ek*>R;YQ$>LCswrK9_M&oΠ?neWh?(MD<43*|glxsWP{OC#*Fo?#oG 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 literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/modules.png b/ext/fatfs/documents/res/modules.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e69a3e0528d14d7c2e0eaff685c693c2f70e8f GIT binary patch literal 15396 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 literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/rwtest1.png b/ext/fatfs/documents/res/rwtest1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0330200bcf272a14b4d0a103764e25ceec1a3f GIT binary patch literal 69114 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 AM*si- literal 0 HcmV?d00001 diff --git a/ext/fatfs/documents/res/rwtest3.png b/ext/fatfs/documents/res/rwtest3.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa3d118948580fc8ed1f4ab9f2ea9149ea9757 GIT binary patch literal 3011 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 for copy, compare and search instead of built-in string functions. + Added support for long long integer and floating point to f_printf(). (FF_STRF_LLI and FF_STRF_FP) + Made path name parser ignore the terminating separator to allow "dir/". + Improved the compatibility in Unix style path name feature. + Fixed the file gets dead-locked when f_open() failed with some conditions. (appeared at R0.12a) + Fixed f_mkfs() can create wrong exFAT volume due to a timing dependent error. (appeared at R0.12) + Fixed code page 855 cannot be set by f_setcp(). + Fixed some compiler warnings. + + +R0.14a (December 05, 2020) + Limited number of recursive calls in f_findnext(). + Fixed old floppy disks formatted with MS-DOS 2.x and 3.x cannot be mounted. + Fixed some compiler warnings. + + +R0.14 (October 14, 2019) + Added support for 64-bit LBA and GUID partition table (FF_LBA64) + Changed some API functions, f_mkfs() and f_fdisk(). + Fixed f_open() function cannot find the file with file name in length of FF_MAX_LFN characters. + Fixed f_readdir() function cannot retrieve long file names in length of FF_MAX_LFN - 1 characters. + Fixed f_readdir() function returns file names with wrong case conversion. (appeared at R0.12) + Fixed f_mkfs() function can fail to create exFAT volume in the second partition. (appeared at R0.12) + +R0.13c (October 14, 2018) + Supported stdint.h for C99 and later. (integer.h was included in ff.h) + Fixed reading a directory gets infinite loop when the last directory entry is not empty. (appeared at R0.12) + Fixed creating a sub-directory in the fragmented sub-directory on the exFAT volume collapses FAT chain of the parent directory. (appeared at R0.12) + Fixed f_getcwd() cause output buffer overrun when the buffer has a valid drive number. (appeared at R0.13b) + + +R0.13b (April 07, 2018) + Added support for UTF-32 encoding on the API. (FF_LFN_UNICODE = 3) + Added support for Unix style volume prefix. (FF_STR_VOLUME_ID = 2) + Fixed accesing any object on the exFAT root directory beyond the cluster boundary can fail. (appeared at R0.12c) + Fixed f_setlabel() does not reject some invalid characters. (appeared at R0.09b) + + +R0.13a (October 14, 2017) + Added support for UTF-8 encoding on the API. (FF_LFN_UNICODE = 2) + Added options for file name output buffer. (FF_LFN_BUF, FF_SFN_BUF). + Added dynamic memory allocation option for working buffer of f_mkfs() and f_fdisk(). + Fixed f_fdisk() and f_mkfs() create the partition table with wrong CHS parameters. (appeared at R0.09) + Fixed f_unlink() can cause lost clusters at fragmented file on the exFAT volume. (appeared at R0.12c) + Fixed f_setlabel() rejects some valid characters for exFAT volume. (appeared at R0.12) + + +R0.13 (May 21, 2017) + Changed heading character of configuration keywords "_" to "FF_". + Removed ASCII-only configuration, FF_CODE_PAGE = 1. Use FF_CODE_PAGE = 437 instead. + Added f_setcp(), run-time code page configuration. (FF_CODE_PAGE = 0) + Improved cluster allocation time on stretch a deep buried cluster chain. + Improved processing time of f_mkdir() with large cluster size by using FF_USE_LFN = 3. + Improved NoFatChain flag of the fragmented file to be set after it is truncated and got contiguous. + Fixed archive attribute is left not set when a file on the exFAT volume is renamed. (appeared at R0.12) + Fixed exFAT FAT entry can be collapsed when write or lseek operation to the existing file is done. (appeared at R0.12c) + Fixed creating a file can fail when a new cluster allocation to the exFAT directory occures. (appeared at R0.12c) + + +R0.12c (March 04, 2017) + Improved write throughput at the fragmented file on the exFAT volume. + Made memory usage for exFAT be able to be reduced as decreasing _MAX_LFN. + Fixed successive f_getfree() can return wrong count on the FAT12/16 volume. (appeared at R0.12) + Fixed configuration option _VOLUMES cannot be set 10. (appeared at R0.10c) + + +R0.12b (September 4, 2016) + Made f_rename() be able to rename objects with the same name but case. + Fixed an error in the case conversion teble of code page 866. (ff.c) + Fixed writing data is truncated at the file offset 4GiB on the exFAT volume. (appeared at R0.12) + Fixed creating a file in the root directory of exFAT volume can fail. (appeared at R0.12) + Fixed f_mkfs() creating exFAT volume with too small cluster size can collapse unallocated memory. (appeared at R0.12a) + Fixed wrong object name can be returned when read directory at Unicode cfg. (appeared at R0.12) + Fixed large file allocation/removing on the exFAT volume collapses allocation bitmap. (appeared at R0.12) + Fixed some internal errors in f_expand() and f_lseek(). (appeared at R0.12) + + +R0.12a (July 10, 2016) + Added support for creating exFAT volume with some changes of f_mkfs(). + Added a file open method FA_OPEN_APPEND. An f_lseek() following f_open() is no longer needed. + f_forward() is available regardless of _FS_TINY. + Fixed f_mkfs() creates wrong volume. (appeared at R0.12) + Fixed wrong memory read in create_name(). (appeared at R0.12) + Fixed compilation fails at some configurations, _USE_FASTSEEK and _USE_FORWARD. + + +R0.12 (April 12, 2016) + Added support for exFAT file system. (_FS_EXFAT) + Added f_expand(). (_USE_EXPAND) + Changed some members in FINFO structure and behavior of f_readdir(). + Added an option _USE_CHMOD and removed an option _WORD_ACCESS. + Fixed errors in the case conversion teble of Unicode (cc*.c). + + +R0.11a (September 5, 2015) + Fixed wrong media change can lead a deadlock at thread-safe configuration. + Added code page 771, 860, 861, 863, 864, 865 and 869. (_CODE_PAGE) + Removed some code pages actually not exist on the standard systems. (_CODE_PAGE) + Fixed errors in the case conversion teble of code page 437 and 850 (ff.c). + Fixed errors in the case conversion teble of Unicode (cc*.c). + + +R0.11 (February 9, 2015) + Added f_findfirst() and f_findnext(). (_USE_FIND) + Fixed f_unlink() does not remove cluster chain of the file. (appeared at R0.10c) + Fixed _FS_NORTC option does not work properly. (appeared at R0.10c) + + +R0.10c (November 9, 2014) + Added a configuration option for the platforms without RTC. (_FS_NORTC) + Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel(). (appeared at R0.09b) + Fixed a potential problem of FAT access that can appear on disk error. + Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08) + + +R0.10b (May 19, 2014) + Fixed a hard error in the disk I/O layer can collapse the directory entry. + Fixed LFN entry is not deleted on delete/rename an object with its lossy converted SFN. (appeared at R0.07) + + +R0.10a (January 15, 2014) + Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID) + Added an option for minimum sector size. (_MIN_SS) + 2nd argument of f_rename() can have a drive number and it will be ignored. + Fixed f_mount() with forced mount fails when drive number is larger than 0. (appeared at R0.10) + Fixed f_close() invalidates the file object without volume lock. + Fixed volume lock is left acquired after return from f_closedir(). (appeared at R0.10) + Fixed creation of a directory entry with LFN fails on too many SFN collisions. (appeared at R0.07) + + +R0.10 (October 2, 2013) + Added an option for character encoding on the file. (_STRF_ENCODE) + Added f_closedir(). + Added forced full FAT scan option for f_getfree(). (_FS_NOFSINFO) + Added forced mount option with changes of f_mount(). + Improved behavior of volume auto detection. + Improved write throughput of f_puts() and f_printf(). + Changed argument of f_chdrive(), f_mkfs(), disk_read() and disk_write(). + Fixed f_write() can be truncated when the file size is close to 4GB. + Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect result code on error. + + +R0.09b (January 24, 2013) + Added f_getlabel() and f_setlabel(). (_USE_LABEL = 1) + + +R0.09a (August 27, 2012) + Fixed assertion failure due to OS/2 EA on FAT12/16 volume. + Changed file functions reject null object pointer to avoid crash. + Changed option name _FS_SHARE to _FS_LOCK. + + +R0.09 (September 6, 2011) + f_mkfs() supports multiple partition on a physical drive. + Added f_fdisk(). (_MULTI_PARTITION = 2) + + +R0.08b (January 15, 2011) + Fast seek function is also applied to f_read() and f_write(). + f_lseek() reports required table size on creating CLMP. + Extended format syntax of f_printf(). + Ignores duplicated directory separators in given path names. + + +R0.08a (August 16, 2010) + Added f_getcwd(). (_FS_RPATH = 2) + Added sector erase function. (_USE_ERASE) + Moved file lock semaphore table from fs object to the bss. + Fixed a wrong directory entry is created on non-LFN cfg when the given name contains ';'. + Fixed f_mkfs() creates wrong FAT32 volume. + + +R0.08 (May 15, 2010) + Added a memory configuration option. (_USE_LFN) + Added support of file lock. (_FS_SHARE) + Added fast seek function. (_USE_FASTSEEK) + Changed some types on the API, XCHAR->TCHAR. + Changed fname member in the FILINFO structure on Unicode cfg. + String functions support UTF-8 encoding files on Unicode cfg. + + +R0.07e (November 3, 2009) + Separated out configuration options from ff.h to ffconf.h. + Added a configuration option, _LFN_UNICODE. + Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. + Fixed name matching error on the 13 char boundary. + Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. + + +R0.07c (Junuary 21, 2009) + Fixed f_unlink() may return FR_OK on error. + Fixed wrong cache control in f_lseek(). + Added support of relative path. + Added f_chdir(). + Added f_chdrive(). + Added proper case conversion to extended characters. + + +R0.07a (April 14, 2009) + Separated out OS dependent code on re-entrant configuration. + Added multiple sector size support. + + +R0.07 (April 1, 2009) + Merged Tiny-FatFs into FatFs as a buffer configuration option. + Added long file name support. + Added multiple code page support. + Added re-entrancy for multitask operation. + Added auto cluster size selection to f_mkfs(). + Added rewind option to f_readdir(). + Changed result code of critical errors. + Renamed string functions to avoid name collision. + + +R0.06 (April 1, 2008) + Added f_forward. (Tiny-FatFs) + Added string functions: fgets, fputc, fputs and fprintf. + Improved performance of f_lseek on moving to the same or following cluster. + + +R0.05a (February 3, 2008) + Added f_truncate. + Added f_utime. + Fixed off by one error at FAT sub-type determination. + Fixed btr in f_read can be mistruncated. + Fixed cached sector is left not flushed when create and close without write. + + +R0.05 (August 26, 2007) + Changed arguments of f_read, f_write. + Changed arguments of f_mkfs. (FatFs) + Fixed f_mkfs on FAT32 creates incorrect FSInfo. (FatFs) + Fixed f_mkdir on FAT32 creates incorrect directory. (FatFs) + + +R0.04b (May 5, 2007) + Added _USE_NTFLAG option. + Added FSInfo support. + Fixed some problems corresponds to FAT32. (Tiny-FatFs) + Fixed DBCS name can result FR_INVALID_NAME. + Fixed short seek (<= csize) collapses the file object. + + +R0.04a (April 1, 2007) + Supported multiple partitions on a plysical drive. (FatFs) + Added minimization level 3. + Added a capability of extending file size to f_lseek. + Fixed an endian sensitive code in f_mkfs. (FatFs) + Fixed a problem corresponds to FAT32 support. (Tiny-FatFs) + + +R0.04 (February 4, 2007) + Supported multiple drive system. (FatFs) + Changed some APIs for multiple drive system. + Added f_mkfs. (FatFs) + Added _USE_FAT32 option. (Tiny-FatFs) + + +R0.03a (December 11, 2006) + Improved cluster scan algolithm to write files fast. + Fixed f_mkdir creates incorrect directory on FAT32. + + +R0.03 (September 22, 2006) + Added f_rename. + Changed option _FS_MINIMUM to _FS_MINIMIZE. + + +R0.02a (June 10, 2006) + Added a configuration option _FS_MINIMUM. + + +R0.02 (Jun 01, 2006) + Added FAT12. + Removed unbuffered mode. + Fixed a problem on small (<32M) patition. + + +R0.01 (April 29, 2006) + First release + + +R0.00 (February 26, 2006) + Prototype (not released) + diff --git a/ext/fatfs/source/00history.txt b/ext/fatfs/source/00history.txt new file mode 100644 index 0000000000..d3c910c197 --- /dev/null +++ b/ext/fatfs/source/00history.txt @@ -0,0 +1,359 @@ +---------------------------------------------------------------------------- + Revision history of FatFs module +---------------------------------------------------------------------------- + +R0.00 (February 26, 2006) + + Prototype. + + + +R0.01 (April 29, 2006) + + The first release. + + + +R0.02 (June 01, 2006) + + Added FAT12 support. + Removed unbuffered mode. + Fixed a problem on small (<32M) partition. + + + +R0.02a (June 10, 2006) + + Added a configuration option (_FS_MINIMUM). + + + +R0.03 (September 22, 2006) + + Added f_rename(). + Changed option _FS_MINIMUM to _FS_MINIMIZE. + + + +R0.03a (December 11, 2006) + + Improved cluster scan algorithm to write files fast. + Fixed f_mkdir() creates incorrect directory on FAT32. + + + +R0.04 (February 04, 2007) + + Added f_mkfs(). + Supported multiple drive system. + Changed some interfaces for multiple drive system. + Changed f_mountdrv() to f_mount(). + + + +R0.04a (April 01, 2007) + + Supported multiple partitions on a physical drive. + Added a capability of extending file size to f_lseek(). + Added minimization level 3. + Fixed an endian sensitive code in f_mkfs(). + + + +R0.04b (May 05, 2007) + + Added a configuration option _USE_NTFLAG. + Added FSINFO support. + Fixed DBCS name can result FR_INVALID_NAME. + Fixed short seek (<= csize) collapses the file object. + + + +R0.05 (August 25, 2007) + + Changed arguments of f_read(), f_write() and f_mkfs(). + Fixed f_mkfs() on FAT32 creates incorrect FSINFO. + Fixed f_mkdir() on FAT32 creates incorrect directory. + + + +R0.05a (February 03, 2008) + + Added f_truncate() and f_utime(). + Fixed off by one error at FAT sub-type determination. + Fixed btr in f_read() can be mistruncated. + Fixed cached sector is not flushed when create and close without write. + + + +R0.06 (April 01, 2008) + + Added fputc(), fputs(), fprintf() and fgets(). + Improved performance of f_lseek() on moving to the same or following cluster. + + + +R0.07 (April 01, 2009) + + Merged Tiny-FatFs as a configuration option. (_FS_TINY) + Added long file name feature. (_USE_LFN) + Added multiple code page feature. (_CODE_PAGE) + Added re-entrancy for multitask operation. (_FS_REENTRANT) + Added auto cluster size selection to f_mkfs(). + Added rewind option to f_readdir(). + Changed result code of critical errors. + Renamed string functions to avoid name collision. + + + +R0.07a (April 14, 2009) + + Septemberarated out OS dependent code on reentrant cfg. + Added multiple sector size feature. + + + +R0.07c (June 21, 2009) + + Fixed f_unlink() can return FR_OK on error. + Fixed wrong cache control in f_lseek(). + Added relative path feature. + Added f_chdir() and f_chdrive(). + Added proper case conversion to extended character. + + + +R0.07e (November 03, 2009) + + Septemberarated out configuration options from ff.h to ffconf.h. + Fixed f_unlink() fails to remove a sub-directory on _FS_RPATH. + Fixed name matching error on the 13 character boundary. + Added a configuration option, _LFN_UNICODE. + Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. + + + +R0.08 (May 15, 2010) + + Added a memory configuration option. (_USE_LFN = 3) + Added file lock feature. (_FS_SHARE) + Added fast seek feature. (_USE_FASTSEEK) + Changed some types on the API, XCHAR->TCHAR. + Changed .fname in the FILINFO structure on Unicode cfg. + String functions support UTF-8 encoding files on Unicode cfg. + + + +R0.08a (August 16, 2010) + + Added f_getcwd(). (_FS_RPATH = 2) + Added sector erase feature. (_USE_ERASE) + Moved file lock semaphore table from fs object to the bss. + Fixed f_mkfs() creates wrong FAT32 volume. + + + +R0.08b (January 15, 2011) + + Fast seek feature is also applied to f_read() and f_write(). + f_lseek() reports required table size on creating CLMP. + Extended format syntax of f_printf(). + Ignores duplicated directory separators in given path name. + + + +R0.09 (September 06, 2011) + + f_mkfs() supports multiple partition to complete the multiple partition feature. + Added f_fdisk(). + + + +R0.09a (August 27, 2012) + + Changed f_open() and f_opendir() reject null object pointer to avoid crash. + Changed option name _FS_SHARE to _FS_LOCK. + Fixed assertion failure due to OS/2 EA on FAT12/16 volume. + + + +R0.09b (January 24, 2013) + + Added f_setlabel() and f_getlabel(). + + + +R0.10 (October 02, 2013) + + Added selection of character encoding on the file. (_STRF_ENCODE) + Added f_closedir(). + Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO) + Added forced mount feature with changes of f_mount(). + Improved behavior of volume auto detection. + Improved write throughput of f_puts() and f_printf(). + Changed argument of f_chdrive(), f_mkfs(), disk_read() and disk_write(). + Fixed f_write() can be truncated when the file size is close to 4GB. + Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect value on error. + + + +R0.10a (January 15, 2014) + + Added arbitrary strings as drive number in the path name. (_STR_VOLUME_ID) + Added a configuration option of minimum sector size. (_MIN_SS) + 2nd argument of f_rename() can have a drive number and it will be ignored. + Fixed f_mount() with forced mount fails when drive number is >= 1. (appeared at R0.10) + Fixed f_close() invalidates the file object without volume lock. + Fixed f_closedir() returns but the volume lock is left acquired. (appeared at R0.10) + Fixed creation of an entry with LFN fails on too many SFN collisions. (appeared at R0.07) + + + +R0.10b (May 19, 2014) + + Fixed a hard error in the disk I/O layer can collapse the directory entry. + Fixed LFN entry is not deleted when delete/rename an object with lossy converted SFN. (appeared at R0.07) + + + +R0.10c (November 09, 2014) + + Added a configuration option for the platforms without RTC. (_FS_NORTC) + Changed option name _USE_ERASE to _USE_TRIM. + Fixed volume label created by Mac OS X cannot be retrieved with f_getlabel(). (appeared at R0.09b) + Fixed a potential problem of FAT access that can appear on disk error. + Fixed null pointer dereference on attempting to delete the root direcotry. (appeared at R0.08) + + + +R0.11 (February 09, 2015) + + Added f_findfirst(), f_findnext() and f_findclose(). (_USE_FIND) + Fixed f_unlink() does not remove cluster chain of the file. (appeared at R0.10c) + Fixed _FS_NORTC option does not work properly. (appeared at R0.10c) + + + +R0.11a (September 05, 2015) + + Fixed wrong media change can lead a deadlock at thread-safe configuration. + Added code page 771, 860, 861, 863, 864, 865 and 869. (_CODE_PAGE) + Removed some code pages actually not exist on the standard systems. (_CODE_PAGE) + Fixed errors in the case conversion teble of code page 437 and 850 (ff.c). + Fixed errors in the case conversion teble of Unicode (cc*.c). + + + +R0.12 (April 12, 2016) + + Added support for exFAT file system. (_FS_EXFAT) + Added f_expand(). (_USE_EXPAND) + Changed some members in FINFO structure and behavior of f_readdir(). + Added an option _USE_CHMOD. + Removed an option _WORD_ACCESS. + Fixed errors in the case conversion table of Unicode (cc*.c). + + + +R0.12a (July 10, 2016) + + Added support for creating exFAT volume with some changes of f_mkfs(). + Added a file open method FA_OPEN_APPEND. An f_lseek() following f_open() is no longer needed. + f_forward() is available regardless of _FS_TINY. + Fixed f_mkfs() creates wrong volume. (appeared at R0.12) + Fixed wrong memory read in create_name(). (appeared at R0.12) + Fixed compilation fails at some configurations, _USE_FASTSEEK and _USE_FORWARD. + + + +R0.12b (September 04, 2016) + + Made f_rename() be able to rename objects with the same name but case. + Fixed an error in the case conversion teble of code page 866. (ff.c) + Fixed writing data is truncated at the file offset 4GiB on the exFAT volume. (appeared at R0.12) + Fixed creating a file in the root directory of exFAT volume can fail. (appeared at R0.12) + Fixed f_mkfs() creating exFAT volume with too small cluster size can collapse unallocated memory. (appeared at R0.12) + Fixed wrong object name can be returned when read directory at Unicode cfg. (appeared at R0.12) + Fixed large file allocation/removing on the exFAT volume collapses allocation bitmap. (appeared at R0.12) + Fixed some internal errors in f_expand() and f_lseek(). (appeared at R0.12) + + + +R0.12c (March 04, 2017) + + Improved write throughput at the fragmented file on the exFAT volume. + Made memory usage for exFAT be able to be reduced as decreasing _MAX_LFN. + Fixed successive f_getfree() can return wrong count on the FAT12/16 volume. (appeared at R0.12) + Fixed configuration option _VOLUMES cannot be set 10. (appeared at R0.10c) + + + +R0.13 (May 21, 2017) + + Changed heading character of configuration keywords "_" to "FF_". + Removed ASCII-only configuration, FF_CODE_PAGE = 1. Use FF_CODE_PAGE = 437 instead. + Added f_setcp(), run-time code page configuration. (FF_CODE_PAGE = 0) + Improved cluster allocation time on stretch a deep buried cluster chain. + Improved processing time of f_mkdir() with large cluster size by using FF_USE_LFN = 3. + Improved NoFatChain flag of the fragmented file to be set after it is truncated and got contiguous. + Fixed archive attribute is left not set when a file on the exFAT volume is renamed. (appeared at R0.12) + Fixed exFAT FAT entry can be collapsed when write or lseek operation to the existing file is done. (appeared at R0.12c) + Fixed creating a file can fail when a new cluster allocation to the exFAT directory occures. (appeared at R0.12c) + + + +R0.13a (October 14, 2017) + + Added support for UTF-8 encoding on the API. (FF_LFN_UNICODE = 2) + Added options for file name output buffer. (FF_LFN_BUF, FF_SFN_BUF). + Added dynamic memory allocation option for working buffer of f_mkfs() and f_fdisk(). + Fixed f_fdisk() and f_mkfs() create the partition table with wrong CHS parameters. (appeared at R0.09) + Fixed f_unlink() can cause lost clusters at fragmented file on the exFAT volume. (appeared at R0.12c) + Fixed f_setlabel() rejects some valid characters for exFAT volume. (appeared at R0.12) + + + +R0.13b (April 07, 2018) + + Added support for UTF-32 encoding on the API. (FF_LFN_UNICODE = 3) + Added support for Unix style volume ID. (FF_STR_VOLUME_ID = 2) + Fixed accesing any object on the exFAT root directory beyond the cluster boundary can fail. (appeared at R0.12c) + Fixed f_setlabel() does not reject some invalid characters. (appeared at R0.09b) + + + +R0.13c (October 14, 2018) + Supported stdint.h for C99 and later. (integer.h was included in ff.h) + Fixed reading a directory gets infinite loop when the last directory entry is not empty. (appeared at R0.12) + Fixed creating a sub-directory in the fragmented sub-directory on the exFAT volume collapses FAT chain of the parent directory. (appeared at R0.12) + Fixed f_getcwd() cause output buffer overrun when the buffer has a valid drive number. (appeared at R0.13b) + + + +R0.14 (October 14, 2019) + Added support for 64-bit LBA and GUID partition table (FF_LBA64 = 1) + Changed some API functions, f_mkfs() and f_fdisk(). + Fixed f_open() function cannot find the file with file name in length of FF_MAX_LFN characters. + Fixed f_readdir() function cannot retrieve long file names in length of FF_MAX_LFN - 1 characters. + Fixed f_readdir() function returns file names with wrong case conversion. (appeared at R0.12) + Fixed f_mkfs() function can fail to create exFAT volume in the second partition. (appeared at R0.12) + + +R0.14a (December 5, 2020) + Limited number of recursive calls in f_findnext(). + Fixed old floppy disks formatted with MS-DOS 2.x and 3.x cannot be mounted. + Fixed some compiler warnings. + + + +R0.14b (April 17, 2021) + Made FatFs uses standard library for copy, compare and search instead of built-in string functions. + Added support for long long integer and floating point to f_printf(). (FF_STRF_LLI and FF_STRF_FP) + Made path name parser ignore the terminating separator to allow "dir/". + Improved the compatibility in Unix style path name feature. + Fixed the file gets dead-locked when f_open() failed with some conditions. (appeared at R0.12a) + Fixed f_mkfs() can create wrong exFAT volume due to a timing dependent error. (appeared at R0.12) + Fixed code page 855 cannot be set by f_setcp(). + Fixed some compiler warnings. + + diff --git a/ext/fatfs/source/00readme.txt b/ext/fatfs/source/00readme.txt new file mode 100644 index 0000000000..53e035f6fd --- /dev/null +++ b/ext/fatfs/source/00readme.txt @@ -0,0 +1,21 @@ +FatFs Module Source Files R0.14b + + +FILES + + 00readme.txt This file. + 00history.txt Revision history. + ff.c FatFs module. + ffconf.h Configuration file of FatFs module. + ff.h Common include file for FatFs and application module. + diskio.h Common include file for FatFs and disk I/O module. + diskio.c An example of glue function to attach existing disk I/O module to FatFs. + ffunicode.c Optional Unicode utility functions. + ffsystem.c An example of optional O/S related functions. + + + Low level disk I/O module is not included in this archive because the FatFs + module is only a generic file system layer and it does not depend on any specific + storage device. You need to provide a low level disk I/O module written to + control the storage device that attached to the target system. + diff --git a/ext/fatfs/source/_ffconf.h b/ext/fatfs/source/_ffconf.h new file mode 100644 index 0000000000..3eefdf4932 --- /dev/null +++ b/ext/fatfs/source/_ffconf.h @@ -0,0 +1,301 @@ +/*---------------------------------------------------------------------------/ +/ FatFs Functional Configurations +/---------------------------------------------------------------------------*/ + +#define FFCONF_DEF 86631 /* Revision ID */ + +/*---------------------------------------------------------------------------/ +/ Function Configurations +/---------------------------------------------------------------------------*/ + +#define FF_FS_READONLY 0 +/* This option switches read-only configuration. (0:Read/Write or 1:Read-only) +/ Read-only configuration removes writing API functions, f_write(), f_sync(), +/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree() +/ and optional writing functions as well. */ + + +#define FF_FS_MINIMIZE 0 +/* This option defines minimization level to remove some basic API functions. +/ +/ 0: Basic functions are fully enabled. +/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename() +/ are removed. +/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1. +/ 3: f_lseek() function is removed in addition to 2. */ + + +#define FF_USE_FIND 0 +/* This option switches filtered directory read functions, f_findfirst() and +/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ + + +#define FF_USE_MKFS 0 +/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */ + + +#define FF_USE_FASTSEEK 0 +/* This option switches fast seek function. (0:Disable or 1:Enable) */ + + +#define FF_USE_EXPAND 0 +/* This option switches f_expand function. (0:Disable or 1:Enable) */ + + +#define FF_USE_CHMOD 0 +/* This option switches attribute manipulation functions, f_chmod() and f_utime(). +/ (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */ + + +#define FF_USE_LABEL 0 +/* This option switches volume label functions, f_getlabel() and f_setlabel(). +/ (0:Disable or 1:Enable) */ + + +#define FF_USE_FORWARD 0 +/* This option switches f_forward() function. (0:Disable or 1:Enable) */ + + +#define FF_USE_STRFUNC 0 +#define FF_PRINT_LLI 0 +#define FF_PRINT_FLOAT 0 +#define FF_STRF_ENCODE 0 +/* FF_USE_STRFUNC switches string functions, f_gets(), f_putc(), f_puts() and +/ f_printf(). +/ +/ 0: Disable. FF_PRINT_LLI, FF_PRINT_FLOAT and FF_STRF_ENCODE have no effect. +/ 1: Enable without LF-CRLF conversion. +/ 2: Enable with LF-CRLF conversion. +/ +/ FF_PRINT_LLI = 1 makes f_printf() support long long argument and FF_PRINT_FLOAT = 1/2 + makes f_printf() support floating point argument. These features want C99 or later. +/ When FF_LFN_UNICODE >= 1 with LFN enabled, string functions convert the character +/ encoding in it. FF_STRF_ENCODE selects assumption of character encoding ON THE FILE +/ to be read/written via those functions. +/ +/ 0: ANSI/OEM in current CP +/ 1: Unicode in UTF-16LE +/ 2: Unicode in UTF-16BE +/ 3: Unicode in UTF-8 +*/ + + +/*---------------------------------------------------------------------------/ +/ Locale and Namespace Configurations +/---------------------------------------------------------------------------*/ + +#define FF_CODE_PAGE 932 +/* This option specifies the OEM code page to be used on the target system. +/ Incorrect code page setting can cause a file open failure. +/ +/ 437 - U.S. +/ 720 - Arabic +/ 737 - Greek +/ 771 - KBL +/ 775 - Baltic +/ 850 - Latin 1 +/ 852 - Latin 2 +/ 855 - Cyrillic +/ 857 - Turkish +/ 860 - Portuguese +/ 861 - Icelandic +/ 862 - Hebrew +/ 863 - Canadian French +/ 864 - Arabic +/ 865 - Nordic +/ 866 - Russian +/ 869 - Greek 2 +/ 932 - Japanese (DBCS) +/ 936 - Simplified Chinese (DBCS) +/ 949 - Korean (DBCS) +/ 950 - Traditional Chinese (DBCS) +/ 0 - Include all code pages above and configured by f_setcp() +*/ + + +#define FF_USE_LFN 0 +#define FF_MAX_LFN 255 +/* The FF_USE_LFN switches the support for LFN (long file name). +/ +/ 0: Disable LFN. FF_MAX_LFN has no effect. +/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe. +/ 2: Enable LFN with dynamic working buffer on the STACK. +/ 3: Enable LFN with dynamic working buffer on the HEAP. +/ +/ To enable the LFN, ffunicode.c needs to be added to the project. The LFN function +/ requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and +/ additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled. +/ The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can +/ be in range of 12 to 255. It is recommended to be set it 255 to fully support LFN +/ specification. +/ When use stack for the working buffer, take care on stack overflow. When use heap +/ memory for the working buffer, memory management functions, ff_memalloc() and +/ ff_memfree() exemplified in ffsystem.c, need to be added to the project. */ + + +#define FF_LFN_UNICODE 0 +/* This option switches the character encoding on the API when LFN is enabled. +/ +/ 0: ANSI/OEM in current CP (TCHAR = char) +/ 1: Unicode in UTF-16 (TCHAR = WCHAR) +/ 2: Unicode in UTF-8 (TCHAR = char) +/ 3: Unicode in UTF-32 (TCHAR = DWORD) +/ +/ Also behavior of string I/O functions will be affected by this option. +/ When LFN is not enabled, this option has no effect. */ + + +#define FF_LFN_BUF 255 +#define FF_SFN_BUF 12 +/* This set of options defines size of file name members in the FILINFO structure +/ which is used to read out directory items. These values should be suffcient for +/ the file names to read. The maximum possible length of the read file name depends +/ on character encoding. When LFN is not enabled, these options have no effect. */ + + +#define FF_FS_RPATH 0 +/* This option configures support for relative path. +/ +/ 0: Disable relative path and remove related functions. +/ 1: Enable relative path. f_chdir() and f_chdrive() are available. +/ 2: f_getcwd() function is available in addition to 1. +*/ + + +/*---------------------------------------------------------------------------/ +/ Drive/Volume Configurations +/---------------------------------------------------------------------------*/ + +#define FF_VOLUMES 1 +/* Number of volumes (logical drives) to be used. (1-10) */ + + +#define FF_STR_VOLUME_ID 0 +#define FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2","USB","USB2","USB3" +/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings. +/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive +/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each +/ logical drives. Number of items must not be less than FF_VOLUMES. Valid +/ characters for the volume ID strings are A-Z, a-z and 0-9, however, they are +/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is +/ not defined, a user defined volume string table needs to be defined as: +/ +/ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",... +*/ + + +#define FF_MULTI_PARTITION 0 +/* This option switches support for multiple volumes on the physical drive. +/ By default (0), each logical drive number is bound to the same physical drive +/ number and only an FAT volume found on the physical drive will be mounted. +/ When this function is enabled (1), each logical drive number can be bound to +/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk() +/ funciton will be available. */ + + +#define FF_MIN_SS 512 +#define FF_MAX_SS 512 +/* This set of options configures the range of sector size to be supported. (512, +/ 1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and +/ harddisk, but a larger value may be required for on-board flash memory and some +/ type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured +/ for variable sector size mode and disk_ioctl() function needs to implement +/ GET_SECTOR_SIZE command. */ + + +#define FF_LBA64 0 +/* This option switches support for 64-bit LBA. (0:Disable or 1:Enable) +/ To enable the 64-bit LBA, also exFAT needs to be enabled. (FF_FS_EXFAT == 1) */ + + +#define FF_MIN_GPT 0x10000000 +/* Minimum number of sectors to switch GPT as partitioning format in f_mkfs and +/ f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */ + + +#define FF_USE_TRIM 0 +/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable) +/ To enable Trim function, also CTRL_TRIM command should be implemented to the +/ disk_ioctl() function. */ + + + +/*---------------------------------------------------------------------------/ +/ System Configurations +/---------------------------------------------------------------------------*/ + +#define FF_FS_TINY 0 +/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny) +/ At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes. +/ Instead of private sector buffer eliminated from the file object, common sector +/ buffer in the filesystem object (FATFS) is used for the file data transfer. */ + + +#define FF_FS_EXFAT 0 +/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable) +/ To enable exFAT, also LFN needs to be enabled. (FF_USE_LFN >= 1) +/ Note that enabling exFAT discards ANSI C (C89) compatibility. */ + + +#define FF_FS_NORTC 0 +#define FF_NORTC_MON 1 +#define FF_NORTC_MDAY 1 +#define FF_NORTC_YEAR 2020 +/* The option FF_FS_NORTC switches timestamp functiton. If the system does not have +/ any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable +/ the timestamp function. Every object modified by FatFs will have a fixed timestamp +/ defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time. +/ To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be +/ added to the project to read current time form real-time clock. FF_NORTC_MON, +/ FF_NORTC_MDAY and FF_NORTC_YEAR have no effect. +/ These options have no effect in read-only configuration (FF_FS_READONLY = 1). */ + + +#define FF_FS_NOFSINFO 0 +/* If you need to know correct free space on the FAT32 volume, set bit 0 of this +/ option, and f_getfree() function at first time after volume mount will force +/ a full FAT scan. Bit 1 controls the use of last allocated cluster number. +/ +/ bit0=0: Use free cluster count in the FSINFO if available. +/ bit0=1: Do not trust free cluster count in the FSINFO. +/ bit1=0: Use last allocated cluster number in the FSINFO if available. +/ bit1=1: Do not trust last allocated cluster number in the FSINFO. +*/ + + +#define FF_FS_LOCK 0 +/* The option FF_FS_LOCK switches file lock function to control duplicated file open +/ and illegal operation to open objects. This option must be 0 when FF_FS_READONLY +/ is 1. +/ +/ 0: Disable file lock function. To avoid volume corruption, application program +/ should avoid illegal open, remove and rename to the open objects. +/ >0: Enable file lock function. The value defines how many files/sub-directories +/ can be opened simultaneously under file lock control. Note that the file +/ lock control is independent of re-entrancy. */ + + +/* #include // O/S definitions */ +#define FF_FS_REENTRANT 0 +#define FF_FS_TIMEOUT 1000 +#define FF_SYNC_t HANDLE +/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs +/ module itself. Note that regardless of this option, file access to different +/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs() +/ and f_fdisk() function, are always not re-entrant. Only file/directory access +/ to the same volume is under control of this function. +/ +/ 0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect. +/ 1: Enable re-entrancy. Also user provided synchronization handlers, +/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj() +/ function, must be added to the project. Samples are available in +/ option/syscall.c. +/ +/ The FF_FS_TIMEOUT defines timeout period in unit of time tick. +/ The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*, +/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be +/ included somewhere in the scope of ff.h. */ + + + +/*--- End of configuration options ---*/ diff --git a/ext/fatfs/source/diskio.c b/ext/fatfs/source/diskio.c new file mode 100644 index 0000000000..81aaf59ad6 --- /dev/null +++ b/ext/fatfs/source/diskio.c @@ -0,0 +1,229 @@ +/*-----------------------------------------------------------------------*/ +/* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */ +/*-----------------------------------------------------------------------*/ +/* If a working storage control module is available, it should be */ +/* attached to the FatFs via a glue function rather than modifying it. */ +/* This is an example of glue functions to attach various exsisting */ +/* storage control modules to the FatFs module with a defined API. */ +/*-----------------------------------------------------------------------*/ + +#include "ff.h" /* Obtains integer types */ +#include "diskio.h" /* Declarations of disk functions */ + +/* Definitions of physical drive number for each drive */ +#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */ +#define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */ +#define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */ + + +/*-----------------------------------------------------------------------*/ +/* Get Drive Status */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_status ( + BYTE pdrv /* Physical drive nmuber to identify the drive */ +) +{ + DSTATUS stat; + int result; + + switch (pdrv) { + case DEV_RAM : + result = RAM_disk_status(); + + // translate the reslut code here + + return stat; + + case DEV_MMC : + result = MMC_disk_status(); + + // translate the reslut code here + + return stat; + + case DEV_USB : + result = USB_disk_status(); + + // translate the reslut code here + + return stat; + } + return STA_NOINIT; +} + + + +/*-----------------------------------------------------------------------*/ +/* Inidialize a Drive */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_initialize ( + BYTE pdrv /* Physical drive nmuber to identify the drive */ +) +{ + DSTATUS stat; + int result; + + switch (pdrv) { + case DEV_RAM : + result = RAM_disk_initialize(); + + // translate the reslut code here + + return stat; + + case DEV_MMC : + result = MMC_disk_initialize(); + + // translate the reslut code here + + return stat; + + case DEV_USB : + result = USB_disk_initialize(); + + // translate the reslut code here + + return stat; + } + return STA_NOINIT; +} + + + +/*-----------------------------------------------------------------------*/ +/* Read Sector(s) */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_read ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + BYTE *buff, /* Data buffer to store read data */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to read */ +) +{ + DRESULT res; + int result; + + switch (pdrv) { + case DEV_RAM : + // translate the arguments here + + result = RAM_disk_read(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_MMC : + // translate the arguments here + + result = MMC_disk_read(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_USB : + // translate the arguments here + + result = USB_disk_read(buff, sector, count); + + // translate the reslut code here + + return res; + } + + return RES_PARERR; +} + + + +/*-----------------------------------------------------------------------*/ +/* Write Sector(s) */ +/*-----------------------------------------------------------------------*/ + +#if FF_FS_READONLY == 0 + +DRESULT disk_write ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + const BYTE *buff, /* Data to be written */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to write */ +) +{ + DRESULT res; + int result; + + switch (pdrv) { + case DEV_RAM : + // translate the arguments here + + result = RAM_disk_write(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_MMC : + // translate the arguments here + + result = MMC_disk_write(buff, sector, count); + + // translate the reslut code here + + return res; + + case DEV_USB : + // translate the arguments here + + result = USB_disk_write(buff, sector, count); + + // translate the reslut code here + + return res; + } + + return RES_PARERR; +} + +#endif + + +/*-----------------------------------------------------------------------*/ +/* Miscellaneous Functions */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_ioctl ( + BYTE pdrv, /* Physical drive nmuber (0..) */ + BYTE cmd, /* Control code */ + void *buff /* Buffer to send/receive control data */ +) +{ + DRESULT res; + int result; + + switch (pdrv) { + case DEV_RAM : + + // Process of the command for the RAM drive + + return res; + + case DEV_MMC : + + // Process of the command for the MMC/SD card + + return res; + + case DEV_USB : + + // Process of the command the USB drive + + return res; + } + + return RES_PARERR; +} + diff --git a/ext/fatfs/source/diskio.h b/ext/fatfs/source/diskio.h new file mode 100644 index 0000000000..c22afaa5f4 --- /dev/null +++ b/ext/fatfs/source/diskio.h @@ -0,0 +1,77 @@ +/*-----------------------------------------------------------------------/ +/ Low level disk interface modlue include file (C)ChaN, 2019 / +/-----------------------------------------------------------------------*/ + +#ifndef _DISKIO_DEFINED +#define _DISKIO_DEFINED + +#ifdef __cplusplus +extern "C" { +#endif + +/* Status of Disk Functions */ +typedef BYTE DSTATUS; + +/* Results of Disk Functions */ +typedef enum { + RES_OK = 0, /* 0: Successful */ + RES_ERROR, /* 1: R/W Error */ + RES_WRPRT, /* 2: Write Protected */ + RES_NOTRDY, /* 3: Not Ready */ + RES_PARERR /* 4: Invalid Parameter */ +} DRESULT; + + +/*---------------------------------------*/ +/* Prototypes for disk control functions */ + + +DSTATUS disk_initialize (BYTE pdrv); +DSTATUS disk_status (BYTE pdrv); +DRESULT disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count); +DRESULT disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count); +DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff); + + +/* Disk Status Bits (DSTATUS) */ + +#define STA_NOINIT 0x01 /* Drive not initialized */ +#define STA_NODISK 0x02 /* No medium in the drive */ +#define STA_PROTECT 0x04 /* Write protected */ + + +/* Command code for disk_ioctrl fucntion */ + +/* Generic command (Used by FatFs) */ +#define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */ +#define GET_SECTOR_COUNT 1 /* Get media size (needed at FF_USE_MKFS == 1) */ +#define GET_SECTOR_SIZE 2 /* Get sector size (needed at FF_MAX_SS != FF_MIN_SS) */ +#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at FF_USE_MKFS == 1) */ +#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at FF_USE_TRIM == 1) */ + +/* Generic command (Not used by FatFs) */ +#define CTRL_POWER 5 /* Get/Set power status */ +#define CTRL_LOCK 6 /* Lock/Unlock media removal */ +#define CTRL_EJECT 7 /* Eject media */ +#define CTRL_FORMAT 8 /* Create physical format on the media */ + +/* MMC/SDC specific ioctl command */ +#define MMC_GET_TYPE 10 /* Get card type */ +#define MMC_GET_CSD 11 /* Get CSD */ +#define MMC_GET_CID 12 /* Get CID */ +#define MMC_GET_OCR 13 /* Get OCR */ +#define MMC_GET_SDSTAT 14 /* Get SD status */ +#define ISDIO_READ 55 /* Read data form SD iSDIO register */ +#define ISDIO_WRITE 56 /* Write data to SD iSDIO register */ +#define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */ + +/* ATA/CF specific ioctl command */ +#define ATA_GET_REV 20 /* Get F/W revision */ +#define ATA_GET_MODEL 21 /* Get model name */ +#define ATA_GET_SN 22 /* Get serial number */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ext/fatfs/source/ff.c b/ext/fatfs/source/ff.c new file mode 100644 index 0000000000..cbdf685b4e --- /dev/null +++ b/ext/fatfs/source/ff.c @@ -0,0 +1,6982 @@ +/*----------------------------------------------------------------------------/ +/ FatFs - Generic FAT Filesystem Module R0.14b / +/-----------------------------------------------------------------------------/ +/ +/ Copyright (C) 2021, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/ +/----------------------------------------------------------------------------*/ + + +#include +#include "ff.h" /* Declarations of FatFs API */ +#include "diskio.h" /* Declarations of device I/O functions */ + + +/*-------------------------------------------------------------------------- + + Module Private Definitions + +---------------------------------------------------------------------------*/ + +#if FF_DEFINED != 86631 /* Revision ID */ +#error Wrong include file (ff.h). +#endif + + +/* Limits and boundaries */ +#define MAX_DIR 0x200000 /* Max size of FAT directory */ +#define MAX_DIR_EX 0x10000000 /* Max size of exFAT directory */ +#define MAX_FAT12 0xFF5 /* Max FAT12 clusters (differs from specs, but right for real DOS/Windows behavior) */ +#define MAX_FAT16 0xFFF5 /* Max FAT16 clusters (differs from specs, but right for real DOS/Windows behavior) */ +#define MAX_FAT32 0x0FFFFFF5 /* Max FAT32 clusters (not specified, practical limit) */ +#define MAX_EXFAT 0x7FFFFFFD /* Max exFAT clusters (differs from specs, implementation limit) */ + + +/* Character code support macros */ +#define IsUpper(c) ((c) >= 'A' && (c) <= 'Z') +#define IsLower(c) ((c) >= 'a' && (c) <= 'z') +#define IsDigit(c) ((c) >= '0' && (c) <= '9') +#define IsSeparator(c) ((c) == '/' || (c) == '\\') +#define IsTerminator(c) ((UINT)(c) < (FF_USE_LFN ? ' ' : '!')) +#define IsSurrogate(c) ((c) >= 0xD800 && (c) <= 0xDFFF) +#define IsSurrogateH(c) ((c) >= 0xD800 && (c) <= 0xDBFF) +#define IsSurrogateL(c) ((c) >= 0xDC00 && (c) <= 0xDFFF) + + +/* Additional file access control and file status flags for internal use */ +#define FA_SEEKEND 0x20 /* Seek to end of the file on file open */ +#define FA_MODIFIED 0x40 /* File has been modified */ +#define FA_DIRTY 0x80 /* FIL.buf[] needs to be written-back */ + + +/* Additional file attribute bits for internal use */ +#define AM_VOL 0x08 /* Volume label */ +#define AM_LFN 0x0F /* LFN entry */ +#define AM_MASK 0x3F /* Mask of defined bits in FAT */ +#define AM_MASKX 0x37 /* Mask of defined bits in exFAT */ + + +/* Name status flags in fn[11] */ +#define NSFLAG 11 /* Index of the name status byte */ +#define NS_LOSS 0x01 /* Out of 8.3 format */ +#define NS_LFN 0x02 /* Force to create LFN entry */ +#define NS_LAST 0x04 /* Last segment */ +#define NS_BODY 0x08 /* Lower case flag (body) */ +#define NS_EXT 0x10 /* Lower case flag (ext) */ +#define NS_DOT 0x20 /* Dot entry */ +#define NS_NOLFN 0x40 /* Do not find LFN */ +#define NS_NONAME 0x80 /* Not followed */ + + +/* exFAT directory entry types */ +#define ET_BITMAP 0x81 /* Allocation bitmap */ +#define ET_UPCASE 0x82 /* Up-case table */ +#define ET_VLABEL 0x83 /* Volume label */ +#define ET_FILEDIR 0x85 /* File and directory */ +#define ET_STREAM 0xC0 /* Stream extension */ +#define ET_FILENAME 0xC1 /* Name extension */ + + +/* FatFs refers the FAT structure as simple byte array instead of structure member +/ because the C structure is not binary compatible between different platforms */ + +#define BS_JmpBoot 0 /* x86 jump instruction (3-byte) */ +#define BS_OEMName 3 /* OEM name (8-byte) */ +#define BPB_BytsPerSec 11 /* Sector size [byte] (WORD) */ +#define BPB_SecPerClus 13 /* Cluster size [sector] (BYTE) */ +#define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (WORD) */ +#define BPB_NumFATs 16 /* Number of FATs (BYTE) */ +#define BPB_RootEntCnt 17 /* Size of root directory area for FAT [entry] (WORD) */ +#define BPB_TotSec16 19 /* Volume size (16-bit) [sector] (WORD) */ +#define BPB_Media 21 /* Media descriptor byte (BYTE) */ +#define BPB_FATSz16 22 /* FAT size (16-bit) [sector] (WORD) */ +#define BPB_SecPerTrk 24 /* Number of sectors per track for int13h [sector] (WORD) */ +#define BPB_NumHeads 26 /* Number of heads for int13h (WORD) */ +#define BPB_HiddSec 28 /* Volume offset from top of the drive (DWORD) */ +#define BPB_TotSec32 32 /* Volume size (32-bit) [sector] (DWORD) */ +#define BS_DrvNum 36 /* Physical drive number for int13h (BYTE) */ +#define BS_NTres 37 /* WindowsNT error flag (BYTE) */ +#define BS_BootSig 38 /* Extended boot signature (BYTE) */ +#define BS_VolID 39 /* Volume serial number (DWORD) */ +#define BS_VolLab 43 /* Volume label string (8-byte) */ +#define BS_FilSysType 54 /* Filesystem type string (8-byte) */ +#define BS_BootCode 62 /* Boot code (448-byte) */ +#define BS_55AA 510 /* Signature word (WORD) */ + +#define BPB_FATSz32 36 /* FAT32: FAT size [sector] (DWORD) */ +#define BPB_ExtFlags32 40 /* FAT32: Extended flags (WORD) */ +#define BPB_FSVer32 42 /* FAT32: Filesystem version (WORD) */ +#define BPB_RootClus32 44 /* FAT32: Root directory cluster (DWORD) */ +#define BPB_FSInfo32 48 /* FAT32: Offset of FSINFO sector (WORD) */ +#define BPB_BkBootSec32 50 /* FAT32: Offset of backup boot sector (WORD) */ +#define BS_DrvNum32 64 /* FAT32: Physical drive number for int13h (BYTE) */ +#define BS_NTres32 65 /* FAT32: Error flag (BYTE) */ +#define BS_BootSig32 66 /* FAT32: Extended boot signature (BYTE) */ +#define BS_VolID32 67 /* FAT32: Volume serial number (DWORD) */ +#define BS_VolLab32 71 /* FAT32: Volume label string (8-byte) */ +#define BS_FilSysType32 82 /* FAT32: Filesystem type string (8-byte) */ +#define BS_BootCode32 90 /* FAT32: Boot code (420-byte) */ + +#define BPB_ZeroedEx 11 /* exFAT: MBZ field (53-byte) */ +#define BPB_VolOfsEx 64 /* exFAT: Volume offset from top of the drive [sector] (QWORD) */ +#define BPB_TotSecEx 72 /* exFAT: Volume size [sector] (QWORD) */ +#define BPB_FatOfsEx 80 /* exFAT: FAT offset from top of the volume [sector] (DWORD) */ +#define BPB_FatSzEx 84 /* exFAT: FAT size [sector] (DWORD) */ +#define BPB_DataOfsEx 88 /* exFAT: Data offset from top of the volume [sector] (DWORD) */ +#define BPB_NumClusEx 92 /* exFAT: Number of clusters (DWORD) */ +#define BPB_RootClusEx 96 /* exFAT: Root directory start cluster (DWORD) */ +#define BPB_VolIDEx 100 /* exFAT: Volume serial number (DWORD) */ +#define BPB_FSVerEx 104 /* exFAT: Filesystem version (WORD) */ +#define BPB_VolFlagEx 106 /* exFAT: Volume flags (WORD) */ +#define BPB_BytsPerSecEx 108 /* exFAT: Log2 of sector size in unit of byte (BYTE) */ +#define BPB_SecPerClusEx 109 /* exFAT: Log2 of cluster size in unit of sector (BYTE) */ +#define BPB_NumFATsEx 110 /* exFAT: Number of FATs (BYTE) */ +#define BPB_DrvNumEx 111 /* exFAT: Physical drive number for int13h (BYTE) */ +#define BPB_PercInUseEx 112 /* exFAT: Percent in use (BYTE) */ +#define BPB_RsvdEx 113 /* exFAT: Reserved (7-byte) */ +#define BS_BootCodeEx 120 /* exFAT: Boot code (390-byte) */ + +#define DIR_Name 0 /* Short file name (11-byte) */ +#define DIR_Attr 11 /* Attribute (BYTE) */ +#define DIR_NTres 12 /* Lower case flag (BYTE) */ +#define DIR_CrtTime10 13 /* Created time sub-second (BYTE) */ +#define DIR_CrtTime 14 /* Created time (DWORD) */ +#define DIR_LstAccDate 18 /* Last accessed date (WORD) */ +#define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (WORD) */ +#define DIR_ModTime 22 /* Modified time (DWORD) */ +#define DIR_FstClusLO 26 /* Lower 16-bit of first cluster (WORD) */ +#define DIR_FileSize 28 /* File size (DWORD) */ +#define LDIR_Ord 0 /* LFN: LFN order and LLE flag (BYTE) */ +#define LDIR_Attr 11 /* LFN: LFN attribute (BYTE) */ +#define LDIR_Type 12 /* LFN: Entry type (BYTE) */ +#define LDIR_Chksum 13 /* LFN: Checksum of the SFN (BYTE) */ +#define LDIR_FstClusLO 26 /* LFN: MBZ field (WORD) */ +#define XDIR_Type 0 /* exFAT: Type of exFAT directory entry (BYTE) */ +#define XDIR_NumLabel 1 /* exFAT: Number of volume label characters (BYTE) */ +#define XDIR_Label 2 /* exFAT: Volume label (11-WORD) */ +#define XDIR_CaseSum 4 /* exFAT: Sum of case conversion table (DWORD) */ +#define XDIR_NumSec 1 /* exFAT: Number of secondary entries (BYTE) */ +#define XDIR_SetSum 2 /* exFAT: Sum of the set of directory entries (WORD) */ +#define XDIR_Attr 4 /* exFAT: File attribute (WORD) */ +#define XDIR_CrtTime 8 /* exFAT: Created time (DWORD) */ +#define XDIR_ModTime 12 /* exFAT: Modified time (DWORD) */ +#define XDIR_AccTime 16 /* exFAT: Last accessed time (DWORD) */ +#define XDIR_CrtTime10 20 /* exFAT: Created time subsecond (BYTE) */ +#define XDIR_ModTime10 21 /* exFAT: Modified time subsecond (BYTE) */ +#define XDIR_CrtTZ 22 /* exFAT: Created timezone (BYTE) */ +#define XDIR_ModTZ 23 /* exFAT: Modified timezone (BYTE) */ +#define XDIR_AccTZ 24 /* exFAT: Last accessed timezone (BYTE) */ +#define XDIR_GenFlags 33 /* exFAT: General secondary flags (BYTE) */ +#define XDIR_NumName 35 /* exFAT: Number of file name characters (BYTE) */ +#define XDIR_NameHash 36 /* exFAT: Hash of file name (WORD) */ +#define XDIR_ValidFileSize 40 /* exFAT: Valid file size (QWORD) */ +#define XDIR_FstClus 52 /* exFAT: First cluster of the file data (DWORD) */ +#define XDIR_FileSize 56 /* exFAT: File/Directory size (QWORD) */ + +#define SZDIRE 32 /* Size of a directory entry */ +#define DDEM 0xE5 /* Deleted directory entry mark set to DIR_Name[0] */ +#define RDDEM 0x05 /* Replacement of the character collides with DDEM */ +#define LLEF 0x40 /* Last long entry flag in LDIR_Ord */ + +#define FSI_LeadSig 0 /* FAT32 FSI: Leading signature (DWORD) */ +#define FSI_StrucSig 484 /* FAT32 FSI: Structure signature (DWORD) */ +#define FSI_Free_Count 488 /* FAT32 FSI: Number of free clusters (DWORD) */ +#define FSI_Nxt_Free 492 /* FAT32 FSI: Last allocated cluster (DWORD) */ + +#define MBR_Table 446 /* MBR: Offset of partition table in the MBR */ +#define SZ_PTE 16 /* MBR: Size of a partition table entry */ +#define PTE_Boot 0 /* MBR PTE: Boot indicator */ +#define PTE_StHead 1 /* MBR PTE: Start head */ +#define PTE_StSec 2 /* MBR PTE: Start sector */ +#define PTE_StCyl 3 /* MBR PTE: Start cylinder */ +#define PTE_System 4 /* MBR PTE: System ID */ +#define PTE_EdHead 5 /* MBR PTE: End head */ +#define PTE_EdSec 6 /* MBR PTE: End sector */ +#define PTE_EdCyl 7 /* MBR PTE: End cylinder */ +#define PTE_StLba 8 /* MBR PTE: Start in LBA */ +#define PTE_SizLba 12 /* MBR PTE: Size in LBA */ + +#define GPTH_Sign 0 /* GPT: Header signature (8-byte) */ +#define GPTH_Rev 8 /* GPT: Revision (DWORD) */ +#define GPTH_Size 12 /* GPT: Header size (DWORD) */ +#define GPTH_Bcc 16 /* GPT: Header BCC (DWORD) */ +#define GPTH_CurLba 24 /* GPT: Main header LBA (QWORD) */ +#define GPTH_BakLba 32 /* GPT: Backup header LBA (QWORD) */ +#define GPTH_FstLba 40 /* GPT: First LBA for partitions (QWORD) */ +#define GPTH_LstLba 48 /* GPT: Last LBA for partitions (QWORD) */ +#define GPTH_DskGuid 56 /* GPT: Disk GUID (16-byte) */ +#define GPTH_PtOfs 72 /* GPT: Partation table LBA (QWORD) */ +#define GPTH_PtNum 80 /* GPT: Number of table entries (DWORD) */ +#define GPTH_PteSize 84 /* GPT: Size of table entry (DWORD) */ +#define GPTH_PtBcc 88 /* GPT: Partation table BCC (DWORD) */ +#define SZ_GPTE 128 /* GPT: Size of partition table entry */ +#define GPTE_PtGuid 0 /* GPT PTE: Partition type GUID (16-byte) */ +#define GPTE_UpGuid 16 /* GPT PTE: Partition unique GUID (16-byte) */ +#define GPTE_FstLba 32 /* GPT PTE: First LBA (QWORD) */ +#define GPTE_LstLba 40 /* GPT PTE: Last LBA inclusive (QWORD) */ +#define GPTE_Flags 48 /* GPT PTE: Flags (QWORD) */ +#define GPTE_Name 56 /* GPT PTE: Name */ + + +/* Post process on fatal error in the file operations */ +#define ABORT(fs, res) { fp->err = (BYTE)(res); LEAVE_FF(fs, res); } + + +/* Re-entrancy related */ +#if FF_FS_REENTRANT +#if FF_USE_LFN == 1 +#error Static LFN work area cannot be used in thread-safe configuration +#endif +#define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; } +#else +#define LEAVE_FF(fs, res) return res +#endif + + +/* Definitions of logical drive - physical location conversion */ +#if FF_MULTI_PARTITION +#define LD2PD(vol) VolToPart[vol].pd /* Get physical drive number */ +#define LD2PT(vol) VolToPart[vol].pt /* Get partition number (0:auto search, 1..:forced partition number) */ +#else +#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is associated with the same physical drive number */ +#define LD2PT(vol) 0 /* Auto partition search */ +#endif + + +/* Definitions of sector size */ +#if (FF_MAX_SS < FF_MIN_SS) || (FF_MAX_SS != 512 && FF_MAX_SS != 1024 && FF_MAX_SS != 2048 && FF_MAX_SS != 4096) || (FF_MIN_SS != 512 && FF_MIN_SS != 1024 && FF_MIN_SS != 2048 && FF_MIN_SS != 4096) +#error Wrong sector size configuration +#endif +#if FF_MAX_SS == FF_MIN_SS +#define SS(fs) ((UINT)FF_MAX_SS) /* Fixed sector size */ +#else +#define SS(fs) ((fs)->ssize) /* Variable sector size */ +#endif + + +/* Timestamp */ +#if FF_FS_NORTC == 1 +#if FF_NORTC_YEAR < 1980 || FF_NORTC_YEAR > 2107 || FF_NORTC_MON < 1 || FF_NORTC_MON > 12 || FF_NORTC_MDAY < 1 || FF_NORTC_MDAY > 31 +#error Invalid FF_FS_NORTC settings +#endif +#define GET_FATTIME() ((DWORD)(FF_NORTC_YEAR - 1980) << 25 | (DWORD)FF_NORTC_MON << 21 | (DWORD)FF_NORTC_MDAY << 16) +#else +#define GET_FATTIME() get_fattime() +#endif + + +/* File lock controls */ +#if FF_FS_LOCK != 0 +#if FF_FS_READONLY +#error FF_FS_LOCK must be 0 at read-only configuration +#endif +typedef struct { + FATFS *fs; /* Object ID 1, volume (NULL:blank entry) */ + DWORD clu; /* Object ID 2, containing directory (0:root) */ + DWORD ofs; /* Object ID 3, offset in the directory */ + WORD ctr; /* Object open counter, 0:none, 0x01..0xFF:read mode open count, 0x100:write mode */ +} FILESEM; +#endif + + +/* SBCS up-case tables (\x80-\xFF) */ +#define TBL_CT437 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT720 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT737 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ + 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xEF,0xF5,0xF0,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT771 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDC,0xDE,0xDE, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFE,0xFF} +#define TBL_CT775 {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F, \ + 0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT850 {0x43,0x55,0x45,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x45,0x49,0x49,0x49,0x41,0x41, \ + 0x45,0x92,0x92,0x4F,0x4F,0x4F,0x55,0x55,0x59,0x4F,0x55,0x4F,0x9C,0x4F,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0x41,0x41,0x41,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x41,0x41,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD1,0xD1,0x45,0x45,0x45,0x49,0x49,0x49,0x49,0xD9,0xDA,0xDB,0xDC,0xDD,0x49,0xDF, \ + 0x4F,0xE1,0x4F,0x4F,0x4F,0x4F,0xE6,0xE8,0xE8,0x55,0x55,0x55,0x59,0x59,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT852 {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0xAC, \ + 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} +#define TBL_CT855 {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F, \ + 0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ + 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ + 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF, \ + 0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT857 {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ + 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0x49,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT860 {0x80,0x9A,0x90,0x8F,0x8E,0x91,0x86,0x80,0x89,0x89,0x92,0x8B,0x8C,0x98,0x8E,0x8F, \ + 0x90,0x91,0x92,0x8C,0x99,0xA9,0x96,0x9D,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x86,0x8B,0x9F,0x96,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT861 {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x8B,0x8B,0x8D,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x8D,0x55,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ + 0xA4,0xA5,0xA6,0xA7,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT862 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT863 {0x43,0x55,0x45,0x41,0x41,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x41,0x8F, \ + 0x45,0x45,0x45,0x4F,0x45,0x49,0x55,0x55,0x98,0x4F,0x55,0x9B,0x9C,0x55,0x55,0x9F, \ + 0xA0,0xA1,0x4F,0x55,0xA4,0xA5,0xA6,0xA7,0x49,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT864 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT865 {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \ + 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \ + 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT866 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ + 0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} +#define TBL_CT869 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \ + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x86,0x9C,0x8D,0x8F,0x90, \ + 0x91,0x90,0x92,0x95,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \ + 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ + 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \ + 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xA4,0xA5,0xA6,0xD9,0xDA,0xDB,0xDC,0xA7,0xA8,0xDF, \ + 0xA9,0xAA,0xAC,0xAD,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xCF,0xCF,0xD0,0xEF, \ + 0xF0,0xF1,0xD1,0xD2,0xD3,0xF5,0xD4,0xF7,0xF8,0xF9,0xD5,0x96,0x95,0x98,0xFE,0xFF} + + +/* DBCS code range |----- 1st byte -----| |----------- 2nd byte -----------| */ +/* <------> <------> <------> <------> <------> */ +#define TBL_DC932 {0x81, 0x9F, 0xE0, 0xFC, 0x40, 0x7E, 0x80, 0xFC, 0x00, 0x00} +#define TBL_DC936 {0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0x80, 0xFE, 0x00, 0x00} +#define TBL_DC949 {0x81, 0xFE, 0x00, 0x00, 0x41, 0x5A, 0x61, 0x7A, 0x81, 0xFE} +#define TBL_DC950 {0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0xA1, 0xFE, 0x00, 0x00} + + +/* Macros for table definitions */ +#define MERGE_2STR(a, b) a ## b +#define MKCVTBL(hd, cp) MERGE_2STR(hd, cp) + + + + +/*-------------------------------------------------------------------------- + + Module Private Work Area + +---------------------------------------------------------------------------*/ +/* Remark: Variables defined here without initial value shall be guaranteed +/ zero/null at start-up. If not, the linker option or start-up routine is +/ not compliance with C standard. */ + +/*--------------------------------*/ +/* File/Volume controls */ +/*--------------------------------*/ + +#if FF_VOLUMES < 1 || FF_VOLUMES > 10 +#error Wrong FF_VOLUMES setting +#endif +static FATFS* FatFs[FF_VOLUMES]; /* Pointer to the filesystem objects (logical drives) */ +static WORD Fsid; /* Filesystem mount ID */ + +#if FF_FS_RPATH != 0 +static BYTE CurrVol; /* Current drive */ +#endif + +#if FF_FS_LOCK != 0 +static FILESEM Files[FF_FS_LOCK]; /* Open object lock semaphores */ +#endif + +#if FF_STR_VOLUME_ID +#ifdef FF_VOLUME_STRS +static const char* const VolumeStr[FF_VOLUMES] = {FF_VOLUME_STRS}; /* Pre-defined volume ID */ +#endif +#endif + +#if FF_LBA64 +#if FF_MIN_GPT > 0x100000000 +#error Wrong FF_MIN_GPT setting +#endif +static const BYTE GUID_MS_Basic[16] = {0xA2,0xA0,0xD0,0xEB,0xE5,0xB9,0x33,0x44,0x87,0xC0,0x68,0xB6,0xB7,0x26,0x99,0xC7}; +#endif + + + +/*--------------------------------*/ +/* LFN/Directory working buffer */ +/*--------------------------------*/ + +#if FF_USE_LFN == 0 /* Non-LFN configuration */ +#if FF_FS_EXFAT +#error LFN must be enabled when enable exFAT +#endif +#define DEF_NAMBUF +#define INIT_NAMBUF(fs) +#define FREE_NAMBUF() +#define LEAVE_MKFS(res) return res + +#else /* LFN configurations */ +#if FF_MAX_LFN < 12 || FF_MAX_LFN > 255 +#error Wrong setting of FF_MAX_LFN +#endif +#if FF_LFN_BUF < FF_SFN_BUF || FF_SFN_BUF < 12 +#error Wrong setting of FF_LFN_BUF or FF_SFN_BUF +#endif +#if FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 3 +#error Wrong setting of FF_LFN_UNICODE +#endif +static const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* FAT: Offset of LFN characters in the directory entry */ +#define MAXDIRB(nc) ((nc + 44U) / 15 * SZDIRE) /* exFAT: Size of directory entry block scratchpad buffer needed for the name length */ + +#if FF_USE_LFN == 1 /* LFN enabled with static working buffer */ +#if FF_FS_EXFAT +static BYTE DirBuf[MAXDIRB(FF_MAX_LFN)]; /* Directory entry block scratchpad buffer */ +#endif +static WCHAR LfnBuf[FF_MAX_LFN + 1]; /* LFN working buffer */ +#define DEF_NAMBUF +#define INIT_NAMBUF(fs) +#define FREE_NAMBUF() +#define LEAVE_MKFS(res) return res + +#elif FF_USE_LFN == 2 /* LFN enabled with dynamic working buffer on the stack */ +#if FF_FS_EXFAT +#define DEF_NAMBUF WCHAR lbuf[FF_MAX_LFN+1]; BYTE dbuf[MAXDIRB(FF_MAX_LFN)]; /* LFN working buffer and directory entry block scratchpad buffer */ +#define INIT_NAMBUF(fs) { (fs)->lfnbuf = lbuf; (fs)->dirbuf = dbuf; } +#define FREE_NAMBUF() +#else +#define DEF_NAMBUF WCHAR lbuf[FF_MAX_LFN+1]; /* LFN working buffer */ +#define INIT_NAMBUF(fs) { (fs)->lfnbuf = lbuf; } +#define FREE_NAMBUF() +#endif +#define LEAVE_MKFS(res) return res + +#elif FF_USE_LFN == 3 /* LFN enabled with dynamic working buffer on the heap */ +#if FF_FS_EXFAT +#define DEF_NAMBUF WCHAR *lfn; /* Pointer to LFN working buffer and directory entry block scratchpad buffer */ +#define INIT_NAMBUF(fs) { lfn = ff_memalloc((FF_MAX_LFN+1)*2 + MAXDIRB(FF_MAX_LFN)); if (!lfn) LEAVE_FF(fs, FR_NOT_ENOUGH_CORE); (fs)->lfnbuf = lfn; (fs)->dirbuf = (BYTE*)(lfn+FF_MAX_LFN+1); } +#define FREE_NAMBUF() ff_memfree(lfn) +#else +#define DEF_NAMBUF WCHAR *lfn; /* Pointer to LFN working buffer */ +#define INIT_NAMBUF(fs) { lfn = ff_memalloc((FF_MAX_LFN+1)*2); if (!lfn) LEAVE_FF(fs, FR_NOT_ENOUGH_CORE); (fs)->lfnbuf = lfn; } +#define FREE_NAMBUF() ff_memfree(lfn) +#endif +#define LEAVE_MKFS(res) { if (!work) ff_memfree(buf); return res; } +#define MAX_MALLOC 0x8000 /* Must be >=FF_MAX_SS */ + +#else +#error Wrong setting of FF_USE_LFN + +#endif /* FF_USE_LFN == 1 */ +#endif /* FF_USE_LFN == 0 */ + + + +/*--------------------------------*/ +/* Code conversion tables */ +/*--------------------------------*/ + +#if FF_CODE_PAGE == 0 /* Run-time code page configuration */ +#define CODEPAGE CodePage +static WORD CodePage; /* Current code page */ +static const BYTE *ExCvt, *DbcTbl; /* Pointer to current SBCS up-case table and DBCS code range table below */ + +static const BYTE Ct437[] = TBL_CT437; +static const BYTE Ct720[] = TBL_CT720; +static const BYTE Ct737[] = TBL_CT737; +static const BYTE Ct771[] = TBL_CT771; +static const BYTE Ct775[] = TBL_CT775; +static const BYTE Ct850[] = TBL_CT850; +static const BYTE Ct852[] = TBL_CT852; +static const BYTE Ct855[] = TBL_CT855; +static const BYTE Ct857[] = TBL_CT857; +static const BYTE Ct860[] = TBL_CT860; +static const BYTE Ct861[] = TBL_CT861; +static const BYTE Ct862[] = TBL_CT862; +static const BYTE Ct863[] = TBL_CT863; +static const BYTE Ct864[] = TBL_CT864; +static const BYTE Ct865[] = TBL_CT865; +static const BYTE Ct866[] = TBL_CT866; +static const BYTE Ct869[] = TBL_CT869; +static const BYTE Dc932[] = TBL_DC932; +static const BYTE Dc936[] = TBL_DC936; +static const BYTE Dc949[] = TBL_DC949; +static const BYTE Dc950[] = TBL_DC950; + +#elif FF_CODE_PAGE < 900 /* Static code page configuration (SBCS) */ +#define CODEPAGE FF_CODE_PAGE +static const BYTE ExCvt[] = MKCVTBL(TBL_CT, FF_CODE_PAGE); + +#else /* Static code page configuration (DBCS) */ +#define CODEPAGE FF_CODE_PAGE +static const BYTE DbcTbl[] = MKCVTBL(TBL_DC, FF_CODE_PAGE); + +#endif + + + + +/*-------------------------------------------------------------------------- + + Module Private Functions + +---------------------------------------------------------------------------*/ + + +/*-----------------------------------------------------------------------*/ +/* Load/Store multi-byte word in the FAT structure */ +/*-----------------------------------------------------------------------*/ + +static WORD ld_word (const BYTE* ptr) /* Load a 2-byte little-endian word */ +{ + WORD rv; + + rv = ptr[1]; + rv = rv << 8 | ptr[0]; + return rv; +} + +static DWORD ld_dword (const BYTE* ptr) /* Load a 4-byte little-endian word */ +{ + DWORD rv; + + rv = ptr[3]; + rv = rv << 8 | ptr[2]; + rv = rv << 8 | ptr[1]; + rv = rv << 8 | ptr[0]; + return rv; +} + +#if FF_FS_EXFAT +static QWORD ld_qword (const BYTE* ptr) /* Load an 8-byte little-endian word */ +{ + QWORD rv; + + rv = ptr[7]; + rv = rv << 8 | ptr[6]; + rv = rv << 8 | ptr[5]; + rv = rv << 8 | ptr[4]; + rv = rv << 8 | ptr[3]; + rv = rv << 8 | ptr[2]; + rv = rv << 8 | ptr[1]; + rv = rv << 8 | ptr[0]; + return rv; +} +#endif + +#if !FF_FS_READONLY +static void st_word (BYTE* ptr, WORD val) /* Store a 2-byte word in little-endian */ +{ + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; +} + +static void st_dword (BYTE* ptr, DWORD val) /* Store a 4-byte word in little-endian */ +{ + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; +} + +#if FF_FS_EXFAT +static void st_qword (BYTE* ptr, QWORD val) /* Store an 8-byte word in little-endian */ +{ + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; val >>= 8; + *ptr++ = (BYTE)val; +} +#endif +#endif /* !FF_FS_READONLY */ + + + +/*-----------------------------------------------------------------------*/ +/* String functions */ +/*-----------------------------------------------------------------------*/ + +/* Test if the byte is DBC 1st byte */ +static int dbc_1st (BYTE c) +{ +#if FF_CODE_PAGE == 0 /* Variable code page */ + if (DbcTbl && c >= DbcTbl[0]) { + if (c <= DbcTbl[1]) return 1; /* 1st byte range 1 */ + if (c >= DbcTbl[2] && c <= DbcTbl[3]) return 1; /* 1st byte range 2 */ + } +#elif FF_CODE_PAGE >= 900 /* DBCS fixed code page */ + if (c >= DbcTbl[0]) { + if (c <= DbcTbl[1]) return 1; + if (c >= DbcTbl[2] && c <= DbcTbl[3]) return 1; + } +#else /* SBCS fixed code page */ + if (c != 0) return 0; /* Always false */ +#endif + return 0; +} + + +/* Test if the byte is DBC 2nd byte */ +static int dbc_2nd (BYTE c) +{ +#if FF_CODE_PAGE == 0 /* Variable code page */ + if (DbcTbl && c >= DbcTbl[4]) { + if (c <= DbcTbl[5]) return 1; /* 2nd byte range 1 */ + if (c >= DbcTbl[6] && c <= DbcTbl[7]) return 1; /* 2nd byte range 2 */ + if (c >= DbcTbl[8] && c <= DbcTbl[9]) return 1; /* 2nd byte range 3 */ + } +#elif FF_CODE_PAGE >= 900 /* DBCS fixed code page */ + if (c >= DbcTbl[4]) { + if (c <= DbcTbl[5]) return 1; + if (c >= DbcTbl[6] && c <= DbcTbl[7]) return 1; + if (c >= DbcTbl[8] && c <= DbcTbl[9]) return 1; + } +#else /* SBCS fixed code page */ + if (c != 0) return 0; /* Always false */ +#endif + return 0; +} + + +#if FF_USE_LFN + +/* Get a Unicode code point from the TCHAR string in defined API encodeing */ +static DWORD tchar2uni ( /* Returns a character in UTF-16 encoding (>=0x10000 on surrogate pair, 0xFFFFFFFF on decode error) */ + const TCHAR** str /* Pointer to pointer to TCHAR string in configured encoding */ +) +{ + DWORD uc; + const TCHAR *p = *str; + +#if FF_LFN_UNICODE == 1 /* UTF-16 input */ + WCHAR wc; + + uc = *p++; /* Get a unit */ + if (IsSurrogate(uc)) { /* Surrogate? */ + wc = *p++; /* Get low surrogate */ + if (!IsSurrogateH(uc) || !IsSurrogateL(wc)) return 0xFFFFFFFF; /* Wrong surrogate? */ + uc = uc << 16 | wc; + } + +#elif FF_LFN_UNICODE == 2 /* UTF-8 input */ + BYTE b; + int nf; + + uc = (BYTE)*p++; /* Get an encoding unit */ + if (uc & 0x80) { /* Multiple byte code? */ + if ((uc & 0xE0) == 0xC0) { /* 2-byte sequence? */ + uc &= 0x1F; nf = 1; + } else if ((uc & 0xF0) == 0xE0) { /* 3-byte sequence? */ + uc &= 0x0F; nf = 2; + } else if ((uc & 0xF8) == 0xF0) { /* 4-byte sequence? */ + uc &= 0x07; nf = 3; + } else { /* Wrong sequence */ + return 0xFFFFFFFF; + } + do { /* Get trailing bytes */ + b = (BYTE)*p++; + if ((b & 0xC0) != 0x80) return 0xFFFFFFFF; /* Wrong sequence? */ + uc = uc << 6 | (b & 0x3F); + } while (--nf != 0); + if (uc < 0x80 || IsSurrogate(uc) || uc >= 0x110000) return 0xFFFFFFFF; /* Wrong code? */ + if (uc >= 0x010000) uc = 0xD800DC00 | ((uc - 0x10000) << 6 & 0x3FF0000) | (uc & 0x3FF); /* Make a surrogate pair if needed */ + } + +#elif FF_LFN_UNICODE == 3 /* UTF-32 input */ + uc = (TCHAR)*p++; /* Get a unit */ + if (uc >= 0x110000 || IsSurrogate(uc)) return 0xFFFFFFFF; /* Wrong code? */ + if (uc >= 0x010000) uc = 0xD800DC00 | ((uc - 0x10000) << 6 & 0x3FF0000) | (uc & 0x3FF); /* Make a surrogate pair if needed */ + +#else /* ANSI/OEM input */ + BYTE b; + WCHAR wc; + + wc = (BYTE)*p++; /* Get a byte */ + if (dbc_1st((BYTE)wc)) { /* Is it a DBC 1st byte? */ + b = (BYTE)*p++; /* Get 2nd byte */ + if (!dbc_2nd(b)) return 0xFFFFFFFF; /* Invalid code? */ + wc = (wc << 8) + b; /* Make a DBC */ + } + if (wc != 0) { + wc = ff_oem2uni(wc, CODEPAGE); /* ANSI/OEM ==> Unicode */ + if (wc == 0) return 0xFFFFFFFF; /* Invalid code? */ + } + uc = wc; + +#endif + *str = p; /* Next read pointer */ + return uc; +} + + +/* Store a Unicode char in defined API encoding */ +static UINT put_utf ( /* Returns number of encoding units written (0:buffer overflow or wrong encoding) */ + DWORD chr, /* UTF-16 encoded character (Surrogate pair if >=0x10000) */ + TCHAR* buf, /* Output buffer */ + UINT szb /* Size of the buffer */ +) +{ +#if FF_LFN_UNICODE == 1 /* UTF-16 output */ + WCHAR hs, wc; + + hs = (WCHAR)(chr >> 16); + wc = (WCHAR)chr; + if (hs == 0) { /* Single encoding unit? */ + if (szb < 1 || IsSurrogate(wc)) return 0; /* Buffer overflow or wrong code? */ + *buf = wc; + return 1; + } + if (szb < 2 || !IsSurrogateH(hs) || !IsSurrogateL(wc)) return 0; /* Buffer overflow or wrong surrogate? */ + *buf++ = hs; + *buf++ = wc; + return 2; + +#elif FF_LFN_UNICODE == 2 /* UTF-8 output */ + DWORD hc; + + if (chr < 0x80) { /* Single byte code? */ + if (szb < 1) return 0; /* Buffer overflow? */ + *buf = (TCHAR)chr; + return 1; + } + if (chr < 0x800) { /* 2-byte sequence? */ + if (szb < 2) return 0; /* Buffer overflow? */ + *buf++ = (TCHAR)(0xC0 | (chr >> 6 & 0x1F)); + *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F)); + return 2; + } + if (chr < 0x10000) { /* 3-byte sequence? */ + if (szb < 3 || IsSurrogate(chr)) return 0; /* Buffer overflow or wrong code? */ + *buf++ = (TCHAR)(0xE0 | (chr >> 12 & 0x0F)); + *buf++ = (TCHAR)(0x80 | (chr >> 6 & 0x3F)); + *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F)); + return 3; + } + /* 4-byte sequence */ + if (szb < 4) return 0; /* Buffer overflow? */ + hc = ((chr & 0xFFFF0000) - 0xD8000000) >> 6; /* Get high 10 bits */ + chr = (chr & 0xFFFF) - 0xDC00; /* Get low 10 bits */ + if (hc >= 0x100000 || chr >= 0x400) return 0; /* Wrong surrogate? */ + chr = (hc | chr) + 0x10000; + *buf++ = (TCHAR)(0xF0 | (chr >> 18 & 0x07)); + *buf++ = (TCHAR)(0x80 | (chr >> 12 & 0x3F)); + *buf++ = (TCHAR)(0x80 | (chr >> 6 & 0x3F)); + *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F)); + return 4; + +#elif FF_LFN_UNICODE == 3 /* UTF-32 output */ + DWORD hc; + + if (szb < 1) return 0; /* Buffer overflow? */ + if (chr >= 0x10000) { /* Out of BMP? */ + hc = ((chr & 0xFFFF0000) - 0xD8000000) >> 6; /* Get high 10 bits */ + chr = (chr & 0xFFFF) - 0xDC00; /* Get low 10 bits */ + if (hc >= 0x100000 || chr >= 0x400) return 0; /* Wrong surrogate? */ + chr = (hc | chr) + 0x10000; + } + *buf++ = (TCHAR)chr; + return 1; + +#else /* ANSI/OEM output */ + WCHAR wc; + + wc = ff_uni2oem(chr, CODEPAGE); + if (wc >= 0x100) { /* Is this a DBC? */ + if (szb < 2) return 0; + *buf++ = (char)(wc >> 8); /* Store DBC 1st byte */ + *buf++ = (TCHAR)wc; /* Store DBC 2nd byte */ + return 2; + } + if (wc == 0 || szb < 1) return 0; /* Invalid char or buffer overflow? */ + *buf++ = (TCHAR)wc; /* Store the character */ + return 1; +#endif +} +#endif /* FF_USE_LFN */ + + +#if FF_FS_REENTRANT +/*-----------------------------------------------------------------------*/ +/* Request/Release grant to access the volume */ +/*-----------------------------------------------------------------------*/ +static int lock_fs ( /* 1:Ok, 0:timeout */ + FATFS* fs /* Filesystem object */ +) +{ + return ff_req_grant(fs->sobj); +} + + +static void unlock_fs ( + FATFS* fs, /* Filesystem object */ + FRESULT res /* Result code to be returned */ +) +{ + if (fs && res != FR_NOT_ENABLED && res != FR_INVALID_DRIVE && res != FR_TIMEOUT) { + ff_rel_grant(fs->sobj); + } +} + +#endif + + + +#if FF_FS_LOCK != 0 +/*-----------------------------------------------------------------------*/ +/* File lock control functions */ +/*-----------------------------------------------------------------------*/ + +static FRESULT chk_lock ( /* Check if the file can be accessed */ + DIR* dp, /* Directory object pointing the file to be checked */ + int acc /* Desired access type (0:Read mode open, 1:Write mode open, 2:Delete or rename) */ +) +{ + UINT i, be; + + /* Search open object table for the object */ + be = 0; + for (i = 0; i < FF_FS_LOCK; i++) { + if (Files[i].fs) { /* Existing entry */ + if (Files[i].fs == dp->obj.fs && /* Check if the object matches with an open object */ + Files[i].clu == dp->obj.sclust && + Files[i].ofs == dp->dptr) break; + } else { /* Blank entry */ + be = 1; + } + } + if (i == FF_FS_LOCK) { /* The object has not been opened */ + return (!be && acc != 2) ? FR_TOO_MANY_OPEN_FILES : FR_OK; /* Is there a blank entry for new object? */ + } + + /* The object was opened. Reject any open against writing file and all write mode open */ + return (acc != 0 || Files[i].ctr == 0x100) ? FR_LOCKED : FR_OK; +} + + +static int enq_lock (void) /* Check if an entry is available for a new object */ +{ + UINT i; + + for (i = 0; i < FF_FS_LOCK && Files[i].fs; i++) ; + return (i == FF_FS_LOCK) ? 0 : 1; +} + + +static UINT inc_lock ( /* Increment object open counter and returns its index (0:Internal error) */ + DIR* dp, /* Directory object pointing the file to register or increment */ + int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ +) +{ + UINT i; + + + for (i = 0; i < FF_FS_LOCK; i++) { /* Find the object */ + if (Files[i].fs == dp->obj.fs + && Files[i].clu == dp->obj.sclust + && Files[i].ofs == dp->dptr) break; + } + + if (i == FF_FS_LOCK) { /* Not opened. Register it as new. */ + for (i = 0; i < FF_FS_LOCK && Files[i].fs; i++) ; + if (i == FF_FS_LOCK) return 0; /* No free entry to register (int err) */ + Files[i].fs = dp->obj.fs; + Files[i].clu = dp->obj.sclust; + Files[i].ofs = dp->dptr; + Files[i].ctr = 0; + } + + if (acc >= 1 && Files[i].ctr) return 0; /* Access violation (int err) */ + + Files[i].ctr = acc ? 0x100 : Files[i].ctr + 1; /* Set semaphore value */ + + return i + 1; /* Index number origin from 1 */ +} + + +static FRESULT dec_lock ( /* Decrement object open counter */ + UINT i /* Semaphore index (1..) */ +) +{ + WORD n; + FRESULT res; + + + if (--i < FF_FS_LOCK) { /* Index number origin from 0 */ + n = Files[i].ctr; + if (n == 0x100) n = 0; /* If write mode open, delete the entry */ + if (n > 0) n--; /* Decrement read mode open count */ + Files[i].ctr = n; + if (n == 0) Files[i].fs = 0; /* Delete the entry if open count gets zero */ + res = FR_OK; + } else { + res = FR_INT_ERR; /* Invalid index nunber */ + } + return res; +} + + +static void clear_lock ( /* Clear lock entries of the volume */ + FATFS *fs +) +{ + UINT i; + + for (i = 0; i < FF_FS_LOCK; i++) { + if (Files[i].fs == fs) Files[i].fs = 0; + } +} + +#endif /* FF_FS_LOCK != 0 */ + + + +/*-----------------------------------------------------------------------*/ +/* Move/Flush disk access window in the filesystem object */ +/*-----------------------------------------------------------------------*/ +#if !FF_FS_READONLY +static FRESULT sync_window ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS* fs /* Filesystem object */ +) +{ + FRESULT res = FR_OK; + + + if (fs->wflag) { /* Is the disk access window dirty? */ + if (disk_write(fs->pdrv, fs->win, fs->winsect, 1) == RES_OK) { /* Write it back into the volume */ + fs->wflag = 0; /* Clear window dirty flag */ + if (fs->winsect - fs->fatbase < fs->fsize) { /* Is it in the 1st FAT? */ + if (fs->n_fats == 2) disk_write(fs->pdrv, fs->win, fs->winsect + fs->fsize, 1); /* Reflect it to 2nd FAT if needed */ + } + } else { + res = FR_DISK_ERR; + } + } + return res; +} +#endif + + +static FRESULT move_window ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS* fs, /* Filesystem object */ + LBA_t sect /* Sector LBA to make appearance in the fs->win[] */ +) +{ + FRESULT res = FR_OK; + + + if (sect != fs->winsect) { /* Window offset changed? */ +#if !FF_FS_READONLY + res = sync_window(fs); /* Flush the window */ +#endif + if (res == FR_OK) { /* Fill sector window with new data */ + if (disk_read(fs->pdrv, fs->win, sect, 1) != RES_OK) { + sect = (LBA_t)0 - 1; /* Invalidate window if read data is not valid */ + res = FR_DISK_ERR; + } + fs->winsect = sect; + } + } + return res; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Synchronize filesystem and data on the storage */ +/*-----------------------------------------------------------------------*/ + +static FRESULT sync_fs ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS* fs /* Filesystem object */ +) +{ + FRESULT res; + + + res = sync_window(fs); + if (res == FR_OK) { + if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) { /* FAT32: Update FSInfo sector if needed */ + /* Create FSInfo structure */ + memset(fs->win, 0, sizeof fs->win); + st_word(fs->win + BS_55AA, 0xAA55); /* Boot signature */ + st_dword(fs->win + FSI_LeadSig, 0x41615252); /* Leading signature */ + st_dword(fs->win + FSI_StrucSig, 0x61417272); /* Structure signature */ + st_dword(fs->win + FSI_Free_Count, fs->free_clst); /* Number of free clusters */ + st_dword(fs->win + FSI_Nxt_Free, fs->last_clst); /* Last allocated culuster */ + fs->winsect = fs->volbase + 1; /* Write it into the FSInfo sector (Next to VBR) */ + disk_write(fs->pdrv, fs->win, fs->winsect, 1); + fs->fsi_flag = 0; + } + /* Make sure that no pending write process in the lower layer */ + if (disk_ioctl(fs->pdrv, CTRL_SYNC, 0) != RES_OK) res = FR_DISK_ERR; + } + + return res; +} + +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Get physical sector number from cluster number */ +/*-----------------------------------------------------------------------*/ + +static LBA_t clst2sect ( /* !=0:Sector number, 0:Failed (invalid cluster#) */ + FATFS* fs, /* Filesystem object */ + DWORD clst /* Cluster# to be converted */ +) +{ + clst -= 2; /* Cluster number is origin from 2 */ + if (clst >= fs->n_fatent - 2) return 0; /* Is it invalid cluster number? */ + return fs->database + (LBA_t)fs->csize * clst; /* Start sector number of the cluster */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* FAT access - Read value of an FAT entry */ +/*-----------------------------------------------------------------------*/ + +static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x7FFFFFFF:Cluster status */ + FFOBJID* obj, /* Corresponding object */ + DWORD clst /* Cluster number to get the value */ +) +{ + UINT wc, bc; + DWORD val; + FATFS *fs = obj->fs; + + + if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */ + val = 1; /* Internal error */ + + } else { + val = 0xFFFFFFFF; /* Default value falls on disk error */ + + switch (fs->fs_type) { + case FS_FAT12 : + bc = (UINT)clst; bc += bc / 2; + if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; + wc = fs->win[bc++ % SS(fs)]; /* Get 1st byte of the entry */ + if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; + wc |= fs->win[bc % SS(fs)] << 8; /* Merge 2nd byte of the entry */ + val = (clst & 1) ? (wc >> 4) : (wc & 0xFFF); /* Adjust bit position */ + break; + + case FS_FAT16 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break; + val = ld_word(fs->win + clst * 2 % SS(fs)); /* Simple WORD array */ + break; + + case FS_FAT32 : + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; + val = ld_dword(fs->win + clst * 4 % SS(fs)) & 0x0FFFFFFF; /* Simple DWORD array but mask out upper 4 bits */ + break; +#if FF_FS_EXFAT + case FS_EXFAT : + if ((obj->objsize != 0 && obj->sclust != 0) || obj->stat == 0) { /* Object except root dir must have valid data length */ + DWORD cofs = clst - obj->sclust; /* Offset from start cluster */ + DWORD clen = (DWORD)((LBA_t)((obj->objsize - 1) / SS(fs)) / fs->csize); /* Number of clusters - 1 */ + + if (obj->stat == 2 && cofs <= clen) { /* Is it a contiguous chain? */ + val = (cofs == clen) ? 0x7FFFFFFF : clst + 1; /* No data on the FAT, generate the value */ + break; + } + if (obj->stat == 3 && cofs < obj->n_cont) { /* Is it in the 1st fragment? */ + val = clst + 1; /* Generate the value */ + break; + } + if (obj->stat != 2) { /* Get value from FAT if FAT chain is valid */ + if (obj->n_frag != 0) { /* Is it on the growing edge? */ + val = 0x7FFFFFFF; /* Generate EOC */ + } else { + if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; + val = ld_dword(fs->win + clst * 4 % SS(fs)) & 0x7FFFFFFF; + } + break; + } + } + val = 1; /* Internal error */ + break; +#endif + default: + val = 1; /* Internal error */ + } + } + + return val; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* FAT access - Change value of an FAT entry */ +/*-----------------------------------------------------------------------*/ + +static FRESULT put_fat ( /* FR_OK(0):succeeded, !=0:error */ + FATFS* fs, /* Corresponding filesystem object */ + DWORD clst, /* FAT index number (cluster number) to be changed */ + DWORD val /* New value to be set to the entry */ +) +{ + UINT bc; + BYTE *p; + FRESULT res = FR_INT_ERR; + + + if (clst >= 2 && clst < fs->n_fatent) { /* Check if in valid range */ + switch (fs->fs_type) { + case FS_FAT12: + bc = (UINT)clst; bc += bc / 2; /* bc: byte offset of the entry */ + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = fs->win + bc++ % SS(fs); + *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; /* Update 1st byte */ + fs->wflag = 1; + res = move_window(fs, fs->fatbase + (bc / SS(fs))); + if (res != FR_OK) break; + p = fs->win + bc % SS(fs); + *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); /* Update 2nd byte */ + fs->wflag = 1; + break; + + case FS_FAT16: + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); + if (res != FR_OK) break; + st_word(fs->win + clst * 2 % SS(fs), (WORD)val); /* Simple WORD array */ + fs->wflag = 1; + break; + + case FS_FAT32: +#if FF_FS_EXFAT + case FS_EXFAT: +#endif + res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); + if (res != FR_OK) break; + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { + val = (val & 0x0FFFFFFF) | (ld_dword(fs->win + clst * 4 % SS(fs)) & 0xF0000000); + } + st_dword(fs->win + clst * 4 % SS(fs), val); + fs->wflag = 1; + break; + } + } + return res; +} + +#endif /* !FF_FS_READONLY */ + + + + +#if FF_FS_EXFAT && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* exFAT: Accessing FAT and Allocation Bitmap */ +/*-----------------------------------------------------------------------*/ + +/*--------------------------------------*/ +/* Find a contiguous free cluster block */ +/*--------------------------------------*/ + +static DWORD find_bitmap ( /* 0:Not found, 2..:Cluster block found, 0xFFFFFFFF:Disk error */ + FATFS* fs, /* Filesystem object */ + DWORD clst, /* Cluster number to scan from */ + DWORD ncl /* Number of contiguous clusters to find (1..) */ +) +{ + BYTE bm, bv; + UINT i; + DWORD val, scl, ctr; + + + clst -= 2; /* The first bit in the bitmap corresponds to cluster #2 */ + if (clst >= fs->n_fatent - 2) clst = 0; + scl = val = clst; ctr = 0; + for (;;) { + if (move_window(fs, fs->bitbase + val / 8 / SS(fs)) != FR_OK) return 0xFFFFFFFF; + i = val / 8 % SS(fs); bm = 1 << (val % 8); + do { + do { + bv = fs->win[i] & bm; bm <<= 1; /* Get bit value */ + if (++val >= fs->n_fatent - 2) { /* Next cluster (with wrap-around) */ + val = 0; bm = 0; i = SS(fs); + } + if (bv == 0) { /* Is it a free cluster? */ + if (++ctr == ncl) return scl + 2; /* Check if run length is sufficient for required */ + } else { + scl = val; ctr = 0; /* Encountered a cluster in-use, restart to scan */ + } + if (val == clst) return 0; /* All cluster scanned? */ + } while (bm != 0); + bm = 1; + } while (++i < SS(fs)); + } +} + + +/*----------------------------------------*/ +/* Set/Clear a block of allocation bitmap */ +/*----------------------------------------*/ + +static FRESULT change_bitmap ( + FATFS* fs, /* Filesystem object */ + DWORD clst, /* Cluster number to change from */ + DWORD ncl, /* Number of clusters to be changed */ + int bv /* bit value to be set (0 or 1) */ +) +{ + BYTE bm; + UINT i; + LBA_t sect; + + + clst -= 2; /* The first bit corresponds to cluster #2 */ + sect = fs->bitbase + clst / 8 / SS(fs); /* Sector address */ + i = clst / 8 % SS(fs); /* Byte offset in the sector */ + bm = 1 << (clst % 8); /* Bit mask in the byte */ + for (;;) { + if (move_window(fs, sect++) != FR_OK) return FR_DISK_ERR; + do { + do { + if (bv == (int)((fs->win[i] & bm) != 0)) return FR_INT_ERR; /* Is the bit expected value? */ + fs->win[i] ^= bm; /* Flip the bit */ + fs->wflag = 1; + if (--ncl == 0) return FR_OK; /* All bits processed? */ + } while (bm <<= 1); /* Next bit */ + bm = 1; + } while (++i < SS(fs)); /* Next byte */ + i = 0; + } +} + + +/*---------------------------------------------*/ +/* Fill the first fragment of the FAT chain */ +/*---------------------------------------------*/ + +static FRESULT fill_first_frag ( + FFOBJID* obj /* Pointer to the corresponding object */ +) +{ + FRESULT res; + DWORD cl, n; + + + if (obj->stat == 3) { /* Has the object been changed 'fragmented' in this session? */ + for (cl = obj->sclust, n = obj->n_cont; n; cl++, n--) { /* Create cluster chain on the FAT */ + res = put_fat(obj->fs, cl, cl + 1); + if (res != FR_OK) return res; + } + obj->stat = 0; /* Change status 'FAT chain is valid' */ + } + return FR_OK; +} + + +/*---------------------------------------------*/ +/* Fill the last fragment of the FAT chain */ +/*---------------------------------------------*/ + +static FRESULT fill_last_frag ( + FFOBJID* obj, /* Pointer to the corresponding object */ + DWORD lcl, /* Last cluster of the fragment */ + DWORD term /* Value to set the last FAT entry */ +) +{ + FRESULT res; + + + while (obj->n_frag > 0) { /* Create the chain of last fragment */ + res = put_fat(obj->fs, lcl - obj->n_frag + 1, (obj->n_frag > 1) ? lcl - obj->n_frag + 2 : term); + if (res != FR_OK) return res; + obj->n_frag--; + } + return FR_OK; +} + +#endif /* FF_FS_EXFAT && !FF_FS_READONLY */ + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* FAT handling - Remove a cluster chain */ +/*-----------------------------------------------------------------------*/ + +static FRESULT remove_chain ( /* FR_OK(0):succeeded, !=0:error */ + FFOBJID* obj, /* Corresponding object */ + DWORD clst, /* Cluster to remove a chain from */ + DWORD pclst /* Previous cluster of clst (0 if entire chain) */ +) +{ + FRESULT res = FR_OK; + DWORD nxt; + FATFS *fs = obj->fs; +#if FF_FS_EXFAT || FF_USE_TRIM + DWORD scl = clst, ecl = clst; +#endif +#if FF_USE_TRIM + LBA_t rt[2]; +#endif + + if (clst < 2 || clst >= fs->n_fatent) return FR_INT_ERR; /* Check if in valid range */ + + /* Mark the previous cluster 'EOC' on the FAT if it exists */ + if (pclst != 0 && (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT || obj->stat != 2)) { + res = put_fat(fs, pclst, 0xFFFFFFFF); + if (res != FR_OK) return res; + } + + /* Remove the chain */ + do { + nxt = get_fat(obj, clst); /* Get cluster status */ + if (nxt == 0) break; /* Empty cluster? */ + if (nxt == 1) return FR_INT_ERR; /* Internal error? */ + if (nxt == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error? */ + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { + res = put_fat(fs, clst, 0); /* Mark the cluster 'free' on the FAT */ + if (res != FR_OK) return res; + } + if (fs->free_clst < fs->n_fatent - 2) { /* Update FSINFO */ + fs->free_clst++; + fs->fsi_flag |= 1; + } +#if FF_FS_EXFAT || FF_USE_TRIM + if (ecl + 1 == nxt) { /* Is next cluster contiguous? */ + ecl = nxt; + } else { /* End of contiguous cluster block */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + res = change_bitmap(fs, scl, ecl - scl + 1, 0); /* Mark the cluster block 'free' on the bitmap */ + if (res != FR_OK) return res; + } +#endif +#if FF_USE_TRIM + rt[0] = clst2sect(fs, scl); /* Start of data area to be freed */ + rt[1] = clst2sect(fs, ecl) + fs->csize - 1; /* End of data area to be freed */ + disk_ioctl(fs->pdrv, CTRL_TRIM, rt); /* Inform storage device that the data in the block may be erased */ +#endif + scl = ecl = nxt; + } +#endif + clst = nxt; /* Next cluster */ + } while (clst < fs->n_fatent); /* Repeat while not the last link */ + +#if FF_FS_EXFAT + /* Some post processes for chain status */ + if (fs->fs_type == FS_EXFAT) { + if (pclst == 0) { /* Has the entire chain been removed? */ + obj->stat = 0; /* Change the chain status 'initial' */ + } else { + if (obj->stat == 0) { /* Is it a fragmented chain from the beginning of this session? */ + clst = obj->sclust; /* Follow the chain to check if it gets contiguous */ + while (clst != pclst) { + nxt = get_fat(obj, clst); + if (nxt < 2) return FR_INT_ERR; + if (nxt == 0xFFFFFFFF) return FR_DISK_ERR; + if (nxt != clst + 1) break; /* Not contiguous? */ + clst++; + } + if (clst == pclst) { /* Has the chain got contiguous again? */ + obj->stat = 2; /* Change the chain status 'contiguous' */ + } + } else { + if (obj->stat == 3 && pclst >= obj->sclust && pclst <= obj->sclust + obj->n_cont) { /* Was the chain fragmented in this session and got contiguous again? */ + obj->stat = 2; /* Change the chain status 'contiguous' */ + } + } + } + } +#endif + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* FAT handling - Stretch a chain or Create a new chain */ +/*-----------------------------------------------------------------------*/ + +static DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */ + FFOBJID* obj, /* Corresponding object */ + DWORD clst /* Cluster# to stretch, 0:Create a new chain */ +) +{ + DWORD cs, ncl, scl; + FRESULT res; + FATFS *fs = obj->fs; + + + if (clst == 0) { /* Create a new chain */ + scl = fs->last_clst; /* Suggested cluster to start to find */ + if (scl == 0 || scl >= fs->n_fatent) scl = 1; + } + else { /* Stretch a chain */ + cs = get_fat(obj, clst); /* Check the cluster status */ + if (cs < 2) return 1; /* Test for insanity */ + if (cs == 0xFFFFFFFF) return cs; /* Test for disk error */ + if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ + scl = clst; /* Cluster to start to find */ + } + if (fs->free_clst == 0) return 0; /* No free cluster */ + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + ncl = find_bitmap(fs, scl, 1); /* Find a free cluster */ + if (ncl == 0 || ncl == 0xFFFFFFFF) return ncl; /* No free cluster or hard error? */ + res = change_bitmap(fs, ncl, 1, 1); /* Mark the cluster 'in use' */ + if (res == FR_INT_ERR) return 1; + if (res == FR_DISK_ERR) return 0xFFFFFFFF; + if (clst == 0) { /* Is it a new chain? */ + obj->stat = 2; /* Set status 'contiguous' */ + } else { /* It is a stretched chain */ + if (obj->stat == 2 && ncl != scl + 1) { /* Is the chain got fragmented? */ + obj->n_cont = scl - obj->sclust; /* Set size of the contiguous part */ + obj->stat = 3; /* Change status 'just fragmented' */ + } + } + if (obj->stat != 2) { /* Is the file non-contiguous? */ + if (ncl == clst + 1) { /* Is the cluster next to previous one? */ + obj->n_frag = obj->n_frag ? obj->n_frag + 1 : 2; /* Increment size of last framgent */ + } else { /* New fragment */ + if (obj->n_frag == 0) obj->n_frag = 1; + res = fill_last_frag(obj, clst, ncl); /* Fill last fragment on the FAT and link it to new one */ + if (res == FR_OK) obj->n_frag = 1; + } + } + } else +#endif + { /* On the FAT/FAT32 volume */ + ncl = 0; + if (scl == clst) { /* Stretching an existing chain? */ + ncl = scl + 1; /* Test if next cluster is free */ + if (ncl >= fs->n_fatent) ncl = 2; + cs = get_fat(obj, ncl); /* Get next cluster status */ + if (cs == 1 || cs == 0xFFFFFFFF) return cs; /* Test for error */ + if (cs != 0) { /* Not free? */ + cs = fs->last_clst; /* Start at suggested cluster if it is valid */ + if (cs >= 2 && cs < fs->n_fatent) scl = cs; + ncl = 0; + } + } + if (ncl == 0) { /* The new cluster cannot be contiguous and find another fragment */ + ncl = scl; /* Start cluster */ + for (;;) { + ncl++; /* Next cluster */ + if (ncl >= fs->n_fatent) { /* Check wrap-around */ + ncl = 2; + if (ncl > scl) return 0; /* No free cluster found? */ + } + cs = get_fat(obj, ncl); /* Get the cluster status */ + if (cs == 0) break; /* Found a free cluster? */ + if (cs == 1 || cs == 0xFFFFFFFF) return cs; /* Test for error */ + if (ncl == scl) return 0; /* No free cluster found? */ + } + } + res = put_fat(fs, ncl, 0xFFFFFFFF); /* Mark the new cluster 'EOC' */ + if (res == FR_OK && clst != 0) { + res = put_fat(fs, clst, ncl); /* Link it from the previous one if needed */ + } + } + + if (res == FR_OK) { /* Update FSINFO if function succeeded. */ + fs->last_clst = ncl; + if (fs->free_clst <= fs->n_fatent - 2) fs->free_clst--; + fs->fsi_flag |= 1; + } else { + ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; /* Failed. Generate error status */ + } + + return ncl; /* Return new cluster number or error status */ +} + +#endif /* !FF_FS_READONLY */ + + + + +#if FF_USE_FASTSEEK +/*-----------------------------------------------------------------------*/ +/* FAT handling - Convert offset into cluster with link map table */ +/*-----------------------------------------------------------------------*/ + +static DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */ + FIL* fp, /* Pointer to the file object */ + FSIZE_t ofs /* File offset to be converted to cluster# */ +) +{ + DWORD cl, ncl, *tbl; + FATFS *fs = fp->obj.fs; + + + tbl = fp->cltbl + 1; /* Top of CLMT */ + cl = (DWORD)(ofs / SS(fs) / fs->csize); /* Cluster order from top of the file */ + for (;;) { + ncl = *tbl++; /* Number of cluters in the fragment */ + if (ncl == 0) return 0; /* End of table? (error) */ + if (cl < ncl) break; /* In this fragment? */ + cl -= ncl; tbl++; /* Next fragment */ + } + return cl + *tbl; /* Return the cluster number */ +} + +#endif /* FF_USE_FASTSEEK */ + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Fill a cluster with zeros */ +/*-----------------------------------------------------------------------*/ + +#if !FF_FS_READONLY +static FRESULT dir_clear ( /* Returns FR_OK or FR_DISK_ERR */ + FATFS *fs, /* Filesystem object */ + DWORD clst /* Directory table to clear */ +) +{ + LBA_t sect; + UINT n, szb; + BYTE *ibuf; + + + if (sync_window(fs) != FR_OK) return FR_DISK_ERR; /* Flush disk access window */ + sect = clst2sect(fs, clst); /* Top of the cluster */ + fs->winsect = sect; /* Set window to top of the cluster */ + memset(fs->win, 0, sizeof fs->win); /* Clear window buffer */ +#if FF_USE_LFN == 3 /* Quick table clear by using multi-secter write */ + /* Allocate a temporary buffer */ + for (szb = ((DWORD)fs->csize * SS(fs) >= MAX_MALLOC) ? MAX_MALLOC : fs->csize * SS(fs), ibuf = 0; szb > SS(fs) && (ibuf = ff_memalloc(szb)) == 0; szb /= 2) ; + if (szb > SS(fs)) { /* Buffer allocated? */ + memset(ibuf, 0, szb); + szb /= SS(fs); /* Bytes -> Sectors */ + for (n = 0; n < fs->csize && disk_write(fs->pdrv, ibuf, sect + n, szb) == RES_OK; n += szb) ; /* Fill the cluster with 0 */ + ff_memfree(ibuf); + } else +#endif + { + ibuf = fs->win; szb = 1; /* Use window buffer (many single-sector writes may take a time) */ + for (n = 0; n < fs->csize && disk_write(fs->pdrv, ibuf, sect + n, szb) == RES_OK; n += szb) ; /* Fill the cluster with 0 */ + } + return (n == fs->csize) ? FR_OK : FR_DISK_ERR; +} +#endif /* !FF_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Set directory index */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_sdi ( /* FR_OK(0):succeeded, !=0:error */ + DIR* dp, /* Pointer to directory object */ + DWORD ofs /* Offset of directory table */ +) +{ + DWORD csz, clst; + FATFS *fs = dp->obj.fs; + + + if (ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR) || ofs % SZDIRE) { /* Check range of offset and alignment */ + return FR_INT_ERR; + } + dp->dptr = ofs; /* Set current offset */ + clst = dp->obj.sclust; /* Table start cluster (0:root) */ + if (clst == 0 && fs->fs_type >= FS_FAT32) { /* Replace cluster# 0 with root cluster# */ + clst = (DWORD)fs->dirbase; + if (FF_FS_EXFAT) dp->obj.stat = 0; /* exFAT: Root dir has an FAT chain */ + } + + if (clst == 0) { /* Static table (root-directory on the FAT volume) */ + if (ofs / SZDIRE >= fs->n_rootdir) return FR_INT_ERR; /* Is index out of range? */ + dp->sect = fs->dirbase; + + } else { /* Dynamic table (sub-directory or root-directory on the FAT32/exFAT volume) */ + csz = (DWORD)fs->csize * SS(fs); /* Bytes per cluster */ + while (ofs >= csz) { /* Follow cluster chain */ + clst = get_fat(&dp->obj, clst); /* Get next cluster */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (clst < 2 || clst >= fs->n_fatent) return FR_INT_ERR; /* Reached to end of table or internal error */ + ofs -= csz; + } + dp->sect = clst2sect(fs, clst); + } + dp->clust = clst; /* Current cluster# */ + if (dp->sect == 0) return FR_INT_ERR; + dp->sect += ofs / SS(fs); /* Sector# of the directory entry */ + dp->dir = fs->win + (ofs % SS(fs)); /* Pointer to the entry in the win[] */ + + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Move directory table index next */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_next ( /* FR_OK(0):succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */ + DIR* dp, /* Pointer to the directory object */ + int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ +) +{ + DWORD ofs, clst; + FATFS *fs = dp->obj.fs; + + + ofs = dp->dptr + SZDIRE; /* Next entry */ + if (ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR)) dp->sect = 0; /* Disable it if the offset reached the max value */ + if (dp->sect == 0) return FR_NO_FILE; /* Report EOT if it has been disabled */ + + if (ofs % SS(fs) == 0) { /* Sector changed? */ + dp->sect++; /* Next sector */ + + if (dp->clust == 0) { /* Static table */ + if (ofs / SZDIRE >= fs->n_rootdir) { /* Report EOT if it reached end of static table */ + dp->sect = 0; return FR_NO_FILE; + } + } + else { /* Dynamic table */ + if ((ofs / SS(fs) & (fs->csize - 1)) == 0) { /* Cluster changed? */ + clst = get_fat(&dp->obj, dp->clust); /* Get next cluster */ + if (clst <= 1) return FR_INT_ERR; /* Internal error */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (clst >= fs->n_fatent) { /* It reached end of dynamic table */ +#if !FF_FS_READONLY + if (!stretch) { /* If no stretch, report EOT */ + dp->sect = 0; return FR_NO_FILE; + } + clst = create_chain(&dp->obj, dp->clust); /* Allocate a cluster */ + if (clst == 0) return FR_DENIED; /* No free cluster */ + if (clst == 1) return FR_INT_ERR; /* Internal error */ + if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ + if (dir_clear(fs, clst) != FR_OK) return FR_DISK_ERR; /* Clean up the stretched table */ + if (FF_FS_EXFAT) dp->obj.stat |= 4; /* exFAT: The directory has been stretched */ +#else + if (!stretch) dp->sect = 0; /* (this line is to suppress compiler warning) */ + dp->sect = 0; return FR_NO_FILE; /* Report EOT */ +#endif + } + dp->clust = clst; /* Initialize data for new cluster */ + dp->sect = clst2sect(fs, clst); + } + } + } + dp->dptr = ofs; /* Current entry */ + dp->dir = fs->win + ofs % SS(fs); /* Pointer to the entry in the win[] */ + + return FR_OK; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Directory handling - Reserve a block of directory entries */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_alloc ( /* FR_OK(0):succeeded, !=0:error */ + DIR* dp, /* Pointer to the directory object */ + UINT n_ent /* Number of contiguous entries to allocate */ +) +{ + FRESULT res; + UINT n; + FATFS *fs = dp->obj.fs; + + + res = dir_sdi(dp, 0); + if (res == FR_OK) { + n = 0; + do { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; +#if FF_FS_EXFAT + if ((fs->fs_type == FS_EXFAT) ? (int)((dp->dir[XDIR_Type] & 0x80) == 0) : (int)(dp->dir[DIR_Name] == DDEM || dp->dir[DIR_Name] == 0)) { /* Is the entry free? */ +#else + if (dp->dir[DIR_Name] == DDEM || dp->dir[DIR_Name] == 0) { /* Is the entry free? */ +#endif + if (++n == n_ent) break; /* Is a block of contiguous free entries found? */ + } else { + n = 0; /* Not a free entry, restart to search */ + } + res = dir_next(dp, 1); /* Next entry with table stretch enabled */ + } while (res == FR_OK); + } + + if (res == FR_NO_FILE) res = FR_DENIED; /* No directory entry to allocate */ + return res; +} + +#endif /* !FF_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* FAT: Directory handling - Load/Store start cluster number */ +/*-----------------------------------------------------------------------*/ + +static DWORD ld_clust ( /* Returns the top cluster value of the SFN entry */ + FATFS* fs, /* Pointer to the fs object */ + const BYTE* dir /* Pointer to the key entry */ +) +{ + DWORD cl; + + cl = ld_word(dir + DIR_FstClusLO); + if (fs->fs_type == FS_FAT32) { + cl |= (DWORD)ld_word(dir + DIR_FstClusHI) << 16; + } + + return cl; +} + + +#if !FF_FS_READONLY +static void st_clust ( + FATFS* fs, /* Pointer to the fs object */ + BYTE* dir, /* Pointer to the key entry */ + DWORD cl /* Value to be set */ +) +{ + st_word(dir + DIR_FstClusLO, (WORD)cl); + if (fs->fs_type == FS_FAT32) { + st_word(dir + DIR_FstClusHI, (WORD)(cl >> 16)); + } +} +#endif + + + +#if FF_USE_LFN +/*--------------------------------------------------------*/ +/* FAT-LFN: Compare a part of file name with an LFN entry */ +/*--------------------------------------------------------*/ + +static int cmp_lfn ( /* 1:matched, 0:not matched */ + const WCHAR* lfnbuf, /* Pointer to the LFN working buffer to be compared */ + BYTE* dir /* Pointer to the directory entry containing the part of LFN */ +) +{ + UINT i, s; + WCHAR wc, uc; + + + if (ld_word(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO */ + + i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */ + + for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */ + uc = ld_word(dir + LfnOfs[s]); /* Pick an LFN character */ + if (wc != 0) { + if (i >= FF_MAX_LFN + 1 || ff_wtoupper(uc) != ff_wtoupper(lfnbuf[i++])) { /* Compare it */ + return 0; /* Not matched */ + } + wc = uc; + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } + + if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) return 0; /* Last segment matched but different length */ + + return 1; /* The part of LFN matched */ +} + + +#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 || FF_USE_LABEL || FF_FS_EXFAT +/*-----------------------------------------------------*/ +/* FAT-LFN: Pick a part of file name from an LFN entry */ +/*-----------------------------------------------------*/ + +static int pick_lfn ( /* 1:succeeded, 0:buffer overflow or invalid LFN entry */ + WCHAR* lfnbuf, /* Pointer to the LFN working buffer */ + BYTE* dir /* Pointer to the LFN entry */ +) +{ + UINT i, s; + WCHAR wc, uc; + + + if (ld_word(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO is 0 */ + + i = ((dir[LDIR_Ord] & ~LLEF) - 1) * 13; /* Offset in the LFN buffer */ + + for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */ + uc = ld_word(dir + LfnOfs[s]); /* Pick an LFN character */ + if (wc != 0) { + if (i >= FF_MAX_LFN + 1) return 0; /* Buffer overflow? */ + lfnbuf[i++] = wc = uc; /* Store it */ + } else { + if (uc != 0xFFFF) return 0; /* Check filler */ + } + } + + if (dir[LDIR_Ord] & LLEF && wc != 0) { /* Put terminator if it is the last LFN part and not terminated */ + if (i >= FF_MAX_LFN + 1) return 0; /* Buffer overflow? */ + lfnbuf[i] = 0; + } + + return 1; /* The part of LFN is valid */ +} +#endif + + +#if !FF_FS_READONLY +/*-----------------------------------------*/ +/* FAT-LFN: Create an entry of LFN entries */ +/*-----------------------------------------*/ + +static void put_lfn ( + const WCHAR* lfn, /* Pointer to the LFN */ + BYTE* dir, /* Pointer to the LFN entry to be created */ + BYTE ord, /* LFN order (1-20) */ + BYTE sum /* Checksum of the corresponding SFN */ +) +{ + UINT i, s; + WCHAR wc; + + + dir[LDIR_Chksum] = sum; /* Set checksum */ + dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */ + dir[LDIR_Type] = 0; + st_word(dir + LDIR_FstClusLO, 0); + + i = (ord - 1) * 13; /* Get offset in the LFN working buffer */ + s = wc = 0; + do { + if (wc != 0xFFFF) wc = lfn[i++]; /* Get an effective character */ + st_word(dir + LfnOfs[s], wc); /* Put it */ + if (wc == 0) wc = 0xFFFF; /* Padding characters for following items */ + } while (++s < 13); + if (wc == 0xFFFF || !lfn[i]) ord |= LLEF; /* Last LFN part is the start of LFN sequence */ + dir[LDIR_Ord] = ord; /* Set the LFN order */ +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_USE_LFN */ + + + +#if FF_USE_LFN && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* FAT-LFN: Create a Numbered SFN */ +/*-----------------------------------------------------------------------*/ + +static void gen_numname ( + BYTE* dst, /* Pointer to the buffer to store numbered SFN */ + const BYTE* src, /* Pointer to SFN in directory form */ + const WCHAR* lfn, /* Pointer to LFN */ + UINT seq /* Sequence number */ +) +{ + BYTE ns[8], c; + UINT i, j; + WCHAR wc; + DWORD sreg; + + + memcpy(dst, src, 11); /* Prepare the SFN to be modified */ + + if (seq > 5) { /* In case of many collisions, generate a hash number instead of sequential number */ + sreg = seq; + while (*lfn) { /* Create a CRC as hash value */ + wc = *lfn++; + for (i = 0; i < 16; i++) { + sreg = (sreg << 1) + (wc & 1); + wc >>= 1; + if (sreg & 0x10000) sreg ^= 0x11021; + } + } + seq = (UINT)sreg; + } + + /* Make suffix (~ + hexdecimal) */ + i = 7; + do { + c = (BYTE)((seq % 16) + '0'); seq /= 16; + if (c > '9') c += 7; + ns[i--] = c; + } while (i && seq); + ns[i] = '~'; + + /* Append the suffix to the SFN body */ + for (j = 0; j < i && dst[j] != ' '; j++) { /* Find the offset to append */ + if (dbc_1st(dst[j])) { /* To avoid DBC break up */ + if (j == i - 1) break; + j++; + } + } + do { /* Append the suffix */ + dst[j++] = (i < 8) ? ns[i++] : ' '; + } while (j < 8); +} +#endif /* FF_USE_LFN && !FF_FS_READONLY */ + + + +#if FF_USE_LFN +/*-----------------------------------------------------------------------*/ +/* FAT-LFN: Calculate checksum of an SFN entry */ +/*-----------------------------------------------------------------------*/ + +static BYTE sum_sfn ( + const BYTE* dir /* Pointer to the SFN entry */ +) +{ + BYTE sum = 0; + UINT n = 11; + + do { + sum = (sum >> 1) + (sum << 7) + *dir++; + } while (--n); + return sum; +} + +#endif /* FF_USE_LFN */ + + + +#if FF_FS_EXFAT +/*-----------------------------------------------------------------------*/ +/* exFAT: Checksum */ +/*-----------------------------------------------------------------------*/ + +static WORD xdir_sum ( /* Get checksum of the directoly entry block */ + const BYTE* dir /* Directory entry block to be calculated */ +) +{ + UINT i, szblk; + WORD sum; + + + szblk = (dir[XDIR_NumSec] + 1) * SZDIRE; /* Number of bytes of the entry block */ + for (i = sum = 0; i < szblk; i++) { + if (i == XDIR_SetSum) { /* Skip 2-byte sum field */ + i++; + } else { + sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + dir[i]; + } + } + return sum; +} + + + +static WORD xname_sum ( /* Get check sum (to be used as hash) of the file name */ + const WCHAR* name /* File name to be calculated */ +) +{ + WCHAR chr; + WORD sum = 0; + + + while ((chr = *name++) != 0) { + chr = (WCHAR)ff_wtoupper(chr); /* File name needs to be up-case converted */ + sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + (chr & 0xFF); + sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + (chr >> 8); + } + return sum; +} + + +#if !FF_FS_READONLY && FF_USE_MKFS +static DWORD xsum32 ( /* Returns 32-bit checksum */ + BYTE dat, /* Byte to be calculated (byte-by-byte processing) */ + DWORD sum /* Previous sum value */ +) +{ + sum = ((sum & 1) ? 0x80000000 : 0) + (sum >> 1) + dat; + return sum; +} +#endif + + + +/*-----------------------------------*/ +/* exFAT: Get a directry entry block */ +/*-----------------------------------*/ + +static FRESULT load_xdir ( /* FR_INT_ERR: invalid entry block */ + DIR* dp /* Reading direcotry object pointing top of the entry block to load */ +) +{ + FRESULT res; + UINT i, sz_ent; + BYTE *dirb = dp->obj.fs->dirbuf; /* Pointer to the on-memory direcotry entry block 85+C0+C1s */ + + + /* Load file directory entry */ + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) return res; + if (dp->dir[XDIR_Type] != ET_FILEDIR) return FR_INT_ERR; /* Invalid order */ + memcpy(dirb + 0 * SZDIRE, dp->dir, SZDIRE); + sz_ent = (dirb[XDIR_NumSec] + 1) * SZDIRE; + if (sz_ent < 3 * SZDIRE || sz_ent > 19 * SZDIRE) return FR_INT_ERR; + + /* Load stream extension entry */ + res = dir_next(dp, 0); + if (res == FR_NO_FILE) res = FR_INT_ERR; /* It cannot be */ + if (res != FR_OK) return res; + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) return res; + if (dp->dir[XDIR_Type] != ET_STREAM) return FR_INT_ERR; /* Invalid order */ + memcpy(dirb + 1 * SZDIRE, dp->dir, SZDIRE); + if (MAXDIRB(dirb[XDIR_NumName]) > sz_ent) return FR_INT_ERR; + + /* Load file name entries */ + i = 2 * SZDIRE; /* Name offset to load */ + do { + res = dir_next(dp, 0); + if (res == FR_NO_FILE) res = FR_INT_ERR; /* It cannot be */ + if (res != FR_OK) return res; + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) return res; + if (dp->dir[XDIR_Type] != ET_FILENAME) return FR_INT_ERR; /* Invalid order */ + if (i < MAXDIRB(FF_MAX_LFN)) memcpy(dirb + i, dp->dir, SZDIRE); + } while ((i += SZDIRE) < sz_ent); + + /* Sanity check (do it for only accessible object) */ + if (i <= MAXDIRB(FF_MAX_LFN)) { + if (xdir_sum(dirb) != ld_word(dirb + XDIR_SetSum)) return FR_INT_ERR; + } + return FR_OK; +} + + +/*------------------------------------------------------------------*/ +/* exFAT: Initialize object allocation info with loaded entry block */ +/*------------------------------------------------------------------*/ + +static void init_alloc_info ( + FATFS* fs, /* Filesystem object */ + FFOBJID* obj /* Object allocation information to be initialized */ +) +{ + obj->sclust = ld_dword(fs->dirbuf + XDIR_FstClus); /* Start cluster */ + obj->objsize = ld_qword(fs->dirbuf + XDIR_FileSize); /* Size */ + obj->stat = fs->dirbuf[XDIR_GenFlags] & 2; /* Allocation status */ + obj->n_frag = 0; /* No last fragment info */ +} + + + +#if !FF_FS_READONLY || FF_FS_RPATH != 0 +/*------------------------------------------------*/ +/* exFAT: Load the object's directory entry block */ +/*------------------------------------------------*/ + +static FRESULT load_obj_xdir ( + DIR* dp, /* Blank directory object to be used to access containing direcotry */ + const FFOBJID* obj /* Object with its containing directory information */ +) +{ + FRESULT res; + + /* Open object containing directory */ + dp->obj.fs = obj->fs; + dp->obj.sclust = obj->c_scl; + dp->obj.stat = (BYTE)obj->c_size; + dp->obj.objsize = obj->c_size & 0xFFFFFF00; + dp->obj.n_frag = 0; + dp->blk_ofs = obj->c_ofs; + + res = dir_sdi(dp, dp->blk_ofs); /* Goto object's entry block */ + if (res == FR_OK) { + res = load_xdir(dp); /* Load the object's entry block */ + } + return res; +} +#endif + + +#if !FF_FS_READONLY +/*----------------------------------------*/ +/* exFAT: Store the directory entry block */ +/*----------------------------------------*/ + +static FRESULT store_xdir ( + DIR* dp /* Pointer to the direcotry object */ +) +{ + FRESULT res; + UINT nent; + BYTE *dirb = dp->obj.fs->dirbuf; /* Pointer to the direcotry entry block 85+C0+C1s */ + + /* Create set sum */ + st_word(dirb + XDIR_SetSum, xdir_sum(dirb)); + nent = dirb[XDIR_NumSec] + 1; + + /* Store the direcotry entry block to the directory */ + res = dir_sdi(dp, dp->blk_ofs); + while (res == FR_OK) { + res = move_window(dp->obj.fs, dp->sect); + if (res != FR_OK) break; + memcpy(dp->dir, dirb, SZDIRE); + dp->obj.fs->wflag = 1; + if (--nent == 0) break; + dirb += SZDIRE; + res = dir_next(dp, 0); + } + return (res == FR_OK || res == FR_DISK_ERR) ? res : FR_INT_ERR; +} + + + +/*-------------------------------------------*/ +/* exFAT: Create a new directory enrty block */ +/*-------------------------------------------*/ + +static void create_xdir ( + BYTE* dirb, /* Pointer to the direcotry entry block buffer */ + const WCHAR* lfn /* Pointer to the object name */ +) +{ + UINT i; + BYTE nc1, nlen; + WCHAR wc; + + + /* Create file-directory and stream-extension entry */ + memset(dirb, 0, 2 * SZDIRE); + dirb[0 * SZDIRE + XDIR_Type] = ET_FILEDIR; + dirb[1 * SZDIRE + XDIR_Type] = ET_STREAM; + + /* Create file-name entries */ + i = SZDIRE * 2; /* Top of file_name entries */ + nlen = nc1 = 0; wc = 1; + do { + dirb[i++] = ET_FILENAME; dirb[i++] = 0; + do { /* Fill name field */ + if (wc != 0 && (wc = lfn[nlen]) != 0) nlen++; /* Get a character if exist */ + st_word(dirb + i, wc); /* Store it */ + i += 2; + } while (i % SZDIRE != 0); + nc1++; + } while (lfn[nlen]); /* Fill next entry if any char follows */ + + dirb[XDIR_NumName] = nlen; /* Set name length */ + dirb[XDIR_NumSec] = 1 + nc1; /* Set secondary count (C0 + C1s) */ + st_word(dirb + XDIR_NameHash, xname_sum(lfn)); /* Set name hash */ +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_FS_EXFAT */ + + + +#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 || FF_USE_LABEL || FF_FS_EXFAT +/*-----------------------------------------------------------------------*/ +/* Read an object from the directory */ +/*-----------------------------------------------------------------------*/ + +#define DIR_READ_FILE(dp) dir_read(dp, 0) +#define DIR_READ_LABEL(dp) dir_read(dp, 1) + +static FRESULT dir_read ( + DIR* dp, /* Pointer to the directory object */ + int vol /* Filtered by 0:file/directory or 1:volume label */ +) +{ + FRESULT res = FR_NO_FILE; + FATFS *fs = dp->obj.fs; + BYTE attr, b; +#if FF_USE_LFN + BYTE ord = 0xFF, sum = 0xFF; +#endif + + while (dp->sect) { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + b = dp->dir[DIR_Name]; /* Test for the entry type */ + if (b == 0) { + res = FR_NO_FILE; break; /* Reached to end of the directory */ + } +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + if (FF_USE_LABEL && vol) { + if (b == ET_VLABEL) break; /* Volume label entry? */ + } else { + if (b == ET_FILEDIR) { /* Start of the file entry block? */ + dp->blk_ofs = dp->dptr; /* Get location of the block */ + res = load_xdir(dp); /* Load the entry block */ + if (res == FR_OK) { + dp->obj.attr = fs->dirbuf[XDIR_Attr] & AM_MASK; /* Get attribute */ + } + break; + } + } + } else +#endif + { /* On the FAT/FAT32 volume */ + dp->obj.attr = attr = dp->dir[DIR_Attr] & AM_MASK; /* Get attribute */ +#if FF_USE_LFN /* LFN configuration */ + if (b == DDEM || b == '.' || (int)((attr & ~AM_ARC) == AM_VOL) != vol) { /* An entry without valid data */ + ord = 0xFF; + } else { + if (attr == AM_LFN) { /* An LFN entry is found */ + if (b & LLEF) { /* Is it start of an LFN sequence? */ + sum = dp->dir[LDIR_Chksum]; + b &= (BYTE)~LLEF; ord = b; + dp->blk_ofs = dp->dptr; + } + /* Check LFN validity and capture it */ + ord = (b == ord && sum == dp->dir[LDIR_Chksum] && pick_lfn(fs->lfnbuf, dp->dir)) ? ord - 1 : 0xFF; + } else { /* An SFN entry is found */ + if (ord != 0 || sum != sum_sfn(dp->dir)) { /* Is there a valid LFN? */ + dp->blk_ofs = 0xFFFFFFFF; /* It has no LFN. */ + } + break; + } + } +#else /* Non LFN configuration */ + if (b != DDEM && b != '.' && attr != AM_LFN && (int)((attr & ~AM_ARC) == AM_VOL) == vol) { /* Is it a valid entry? */ + break; + } +#endif + } + res = dir_next(dp, 0); /* Next entry */ + if (res != FR_OK) break; + } + + if (res != FR_OK) dp->sect = 0; /* Terminate the read operation on error or EOT */ + return res; +} + +#endif /* FF_FS_MINIMIZE <= 1 || FF_USE_LABEL || FF_FS_RPATH >= 2 */ + + + +/*-----------------------------------------------------------------------*/ +/* Directory handling - Find an object in the directory */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_find ( /* FR_OK(0):succeeded, !=0:error */ + DIR* dp /* Pointer to the directory object with the file name */ +) +{ + FRESULT res; + FATFS *fs = dp->obj.fs; + BYTE c; +#if FF_USE_LFN + BYTE a, ord, sum; +#endif + + res = dir_sdi(dp, 0); /* Rewind directory object */ + if (res != FR_OK) return res; +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + BYTE nc; + UINT di, ni; + WORD hash = xname_sum(fs->lfnbuf); /* Hash value of the name to find */ + + while ((res = DIR_READ_FILE(dp)) == FR_OK) { /* Read an item */ +#if FF_MAX_LFN < 255 + if (fs->dirbuf[XDIR_NumName] > FF_MAX_LFN) continue; /* Skip comparison if inaccessible object name */ +#endif + if (ld_word(fs->dirbuf + XDIR_NameHash) != hash) continue; /* Skip comparison if hash mismatched */ + for (nc = fs->dirbuf[XDIR_NumName], di = SZDIRE * 2, ni = 0; nc; nc--, di += 2, ni++) { /* Compare the name */ + if ((di % SZDIRE) == 0) di += 2; + if (ff_wtoupper(ld_word(fs->dirbuf + di)) != ff_wtoupper(fs->lfnbuf[ni])) break; + } + if (nc == 0 && !fs->lfnbuf[ni]) break; /* Name matched? */ + } + return res; + } +#endif + /* On the FAT/FAT32 volume */ +#if FF_USE_LFN + ord = sum = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */ +#endif + do { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + c = dp->dir[DIR_Name]; + if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ +#if FF_USE_LFN /* LFN configuration */ + dp->obj.attr = a = dp->dir[DIR_Attr] & AM_MASK; + if (c == DDEM || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */ + ord = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */ + } else { + if (a == AM_LFN) { /* An LFN entry is found */ + if (!(dp->fn[NSFLAG] & NS_NOLFN)) { + if (c & LLEF) { /* Is it start of LFN sequence? */ + sum = dp->dir[LDIR_Chksum]; + c &= (BYTE)~LLEF; ord = c; /* LFN start order */ + dp->blk_ofs = dp->dptr; /* Start offset of LFN */ + } + /* Check validity of the LFN entry and compare it with given name */ + ord = (c == ord && sum == dp->dir[LDIR_Chksum] && cmp_lfn(fs->lfnbuf, dp->dir)) ? ord - 1 : 0xFF; + } + } else { /* An SFN entry is found */ + if (ord == 0 && sum == sum_sfn(dp->dir)) break; /* LFN matched? */ + if (!(dp->fn[NSFLAG] & NS_LOSS) && !memcmp(dp->dir, dp->fn, 11)) break; /* SFN matched? */ + ord = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */ + } + } +#else /* Non LFN configuration */ + dp->obj.attr = dp->dir[DIR_Attr] & AM_MASK; + if (!(dp->dir[DIR_Attr] & AM_VOL) && !memcmp(dp->dir, dp->fn, 11)) break; /* Is it a valid entry? */ +#endif + res = dir_next(dp, 0); /* Next entry */ + } while (res == FR_OK); + + return res; +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Register an object to the directory */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_register ( /* FR_OK:succeeded, FR_DENIED:no free entry or too many SFN collision, FR_DISK_ERR:disk error */ + DIR* dp /* Target directory with object name to be created */ +) +{ + FRESULT res; + FATFS *fs = dp->obj.fs; +#if FF_USE_LFN /* LFN configuration */ + UINT n, len, n_ent; + BYTE sn[12], sum; + + + if (dp->fn[NSFLAG] & (NS_DOT | NS_NONAME)) return FR_INVALID_NAME; /* Check name validity */ + for (len = 0; fs->lfnbuf[len]; len++) ; /* Get lfn length */ + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + n_ent = (len + 14) / 15 + 2; /* Number of entries to allocate (85+C0+C1s) */ + res = dir_alloc(dp, n_ent); /* Allocate directory entries */ + if (res != FR_OK) return res; + dp->blk_ofs = dp->dptr - SZDIRE * (n_ent - 1); /* Set the allocated entry block offset */ + + if (dp->obj.stat & 4) { /* Has the directory been stretched by new allocation? */ + dp->obj.stat &= ~4; + res = fill_first_frag(&dp->obj); /* Fill the first fragment on the FAT if needed */ + if (res != FR_OK) return res; + res = fill_last_frag(&dp->obj, dp->clust, 0xFFFFFFFF); /* Fill the last fragment on the FAT if needed */ + if (res != FR_OK) return res; + if (dp->obj.sclust != 0) { /* Is it a sub-directory? */ + DIR dj; + + res = load_obj_xdir(&dj, &dp->obj); /* Load the object status */ + if (res != FR_OK) return res; + dp->obj.objsize += (DWORD)fs->csize * SS(fs); /* Increase the directory size by cluster size */ + st_qword(fs->dirbuf + XDIR_FileSize, dp->obj.objsize); + st_qword(fs->dirbuf + XDIR_ValidFileSize, dp->obj.objsize); + fs->dirbuf[XDIR_GenFlags] = dp->obj.stat | 1; /* Update the allocation status */ + res = store_xdir(&dj); /* Store the object status */ + if (res != FR_OK) return res; + } + } + + create_xdir(fs->dirbuf, fs->lfnbuf); /* Create on-memory directory block to be written later */ + return FR_OK; + } +#endif + /* On the FAT/FAT32 volume */ + memcpy(sn, dp->fn, 12); + if (sn[NSFLAG] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */ + dp->fn[NSFLAG] = NS_NOLFN; /* Find only SFN */ + for (n = 1; n < 100; n++) { + gen_numname(dp->fn, sn, fs->lfnbuf, n); /* Generate a numbered name */ + res = dir_find(dp); /* Check if the name collides with existing SFN */ + if (res != FR_OK) break; + } + if (n == 100) return FR_DENIED; /* Abort if too many collisions */ + if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */ + dp->fn[NSFLAG] = sn[NSFLAG]; + } + + /* Create an SFN with/without LFNs. */ + n_ent = (sn[NSFLAG] & NS_LFN) ? (len + 12) / 13 + 1 : 1; /* Number of entries to allocate */ + res = dir_alloc(dp, n_ent); /* Allocate entries */ + if (res == FR_OK && --n_ent) { /* Set LFN entry if needed */ + res = dir_sdi(dp, dp->dptr - n_ent * SZDIRE); + if (res == FR_OK) { + sum = sum_sfn(dp->fn); /* Checksum value of the SFN tied to the LFN */ + do { /* Store LFN entries in bottom first */ + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + put_lfn(fs->lfnbuf, dp->dir, (BYTE)n_ent, sum); + fs->wflag = 1; + res = dir_next(dp, 0); /* Next entry */ + } while (res == FR_OK && --n_ent); + } + } + +#else /* Non LFN configuration */ + res = dir_alloc(dp, 1); /* Allocate an entry for SFN */ + +#endif + + /* Set SFN entry */ + if (res == FR_OK) { + res = move_window(fs, dp->sect); + if (res == FR_OK) { + memset(dp->dir, 0, SZDIRE); /* Clean the entry */ + memcpy(dp->dir + DIR_Name, dp->fn, 11); /* Put SFN */ +#if FF_USE_LFN + dp->dir[DIR_NTres] = dp->fn[NSFLAG] & (NS_BODY | NS_EXT); /* Put NT flag */ +#endif + fs->wflag = 1; + } + } + + return res; +} + +#endif /* !FF_FS_READONLY */ + + + +#if !FF_FS_READONLY && FF_FS_MINIMIZE == 0 +/*-----------------------------------------------------------------------*/ +/* Remove an object from the directory */ +/*-----------------------------------------------------------------------*/ + +static FRESULT dir_remove ( /* FR_OK:Succeeded, FR_DISK_ERR:A disk error */ + DIR* dp /* Directory object pointing the entry to be removed */ +) +{ + FRESULT res; + FATFS *fs = dp->obj.fs; +#if FF_USE_LFN /* LFN configuration */ + DWORD last = dp->dptr; + + res = (dp->blk_ofs == 0xFFFFFFFF) ? FR_OK : dir_sdi(dp, dp->blk_ofs); /* Goto top of the entry block if LFN is exist */ + if (res == FR_OK) { + do { + res = move_window(fs, dp->sect); + if (res != FR_OK) break; + if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + dp->dir[XDIR_Type] &= 0x7F; /* Clear the entry InUse flag. */ + } else { /* On the FAT/FAT32 volume */ + dp->dir[DIR_Name] = DDEM; /* Mark the entry 'deleted'. */ + } + fs->wflag = 1; + if (dp->dptr >= last) break; /* If reached last entry then all entries of the object has been deleted. */ + res = dir_next(dp, 0); /* Next entry */ + } while (res == FR_OK); + if (res == FR_NO_FILE) res = FR_INT_ERR; + } +#else /* Non LFN configuration */ + + res = move_window(fs, dp->sect); + if (res == FR_OK) { + dp->dir[DIR_Name] = DDEM; /* Mark the entry 'deleted'.*/ + fs->wflag = 1; + } +#endif + + return res; +} + +#endif /* !FF_FS_READONLY && FF_FS_MINIMIZE == 0 */ + + + +#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 +/*-----------------------------------------------------------------------*/ +/* Get file information from directory entry */ +/*-----------------------------------------------------------------------*/ + +static void get_fileinfo ( + DIR* dp, /* Pointer to the directory object */ + FILINFO* fno /* Pointer to the file information to be filled */ +) +{ + UINT si, di; +#if FF_USE_LFN + BYTE lcf; + WCHAR wc, hs; + FATFS *fs = dp->obj.fs; + UINT nw; +#else + TCHAR c; +#endif + + + fno->fname[0] = 0; /* Invaidate file info */ + if (dp->sect == 0) return; /* Exit if read pointer has reached end of directory */ + +#if FF_USE_LFN /* LFN configuration */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* exFAT volume */ + UINT nc = 0; + + si = SZDIRE * 2; di = 0; /* 1st C1 entry in the entry block */ + hs = 0; + while (nc < fs->dirbuf[XDIR_NumName]) { + if (si >= MAXDIRB(FF_MAX_LFN)) { di = 0; break; } /* Truncated directory block? */ + if ((si % SZDIRE) == 0) si += 2; /* Skip entry type field */ + wc = ld_word(fs->dirbuf + si); si += 2; nc++; /* Get a character */ + if (hs == 0 && IsSurrogate(wc)) { /* Is it a surrogate? */ + hs = wc; continue; /* Get low surrogate */ + } + nw = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in API encoding */ + if (nw == 0) { di = 0; break; } /* Buffer overflow or wrong char? */ + di += nw; + hs = 0; + } + if (hs != 0) di = 0; /* Broken surrogate pair? */ + if (di == 0) fno->fname[di++] = '?'; /* Inaccessible object name? */ + fno->fname[di] = 0; /* Terminate the name */ + fno->altname[0] = 0; /* exFAT does not support SFN */ + + fno->fattrib = fs->dirbuf[XDIR_Attr] & AM_MASKX; /* Attribute */ + fno->fsize = (fno->fattrib & AM_DIR) ? 0 : ld_qword(fs->dirbuf + XDIR_FileSize); /* Size */ + fno->ftime = ld_word(fs->dirbuf + XDIR_ModTime + 0); /* Time */ + fno->fdate = ld_word(fs->dirbuf + XDIR_ModTime + 2); /* Date */ + return; + } else +#endif + { /* FAT/FAT32 volume */ + if (dp->blk_ofs != 0xFFFFFFFF) { /* Get LFN if available */ + si = di = 0; + hs = 0; + while (fs->lfnbuf[si] != 0) { + wc = fs->lfnbuf[si++]; /* Get an LFN character (UTF-16) */ + if (hs == 0 && IsSurrogate(wc)) { /* Is it a surrogate? */ + hs = wc; continue; /* Get low surrogate */ + } + nw = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in API encoding */ + if (nw == 0) { di = 0; break; } /* Buffer overflow or wrong char? */ + di += nw; + hs = 0; + } + if (hs != 0) di = 0; /* Broken surrogate pair? */ + fno->fname[di] = 0; /* Terminate the LFN (null string means LFN is invalid) */ + } + } + + si = di = 0; + while (si < 11) { /* Get SFN from SFN entry */ + wc = dp->dir[si++]; /* Get a char */ + if (wc == ' ') continue; /* Skip padding spaces */ + if (wc == RDDEM) wc = DDEM; /* Restore replaced DDEM character */ + if (si == 9 && di < FF_SFN_BUF) fno->altname[di++] = '.'; /* Insert a . if extension is exist */ +#if FF_LFN_UNICODE >= 1 /* Unicode output */ + if (dbc_1st((BYTE)wc) && si != 8 && si != 11 && dbc_2nd(dp->dir[si])) { /* Make a DBC if needed */ + wc = wc << 8 | dp->dir[si++]; + } + wc = ff_oem2uni(wc, CODEPAGE); /* ANSI/OEM -> Unicode */ + if (wc == 0) { di = 0; break; } /* Wrong char in the current code page? */ + nw = put_utf(wc, &fno->altname[di], FF_SFN_BUF - di); /* Store it in API encoding */ + if (nw == 0) { di = 0; break; } /* Buffer overflow? */ + di += nw; +#else /* ANSI/OEM output */ + fno->altname[di++] = (TCHAR)wc; /* Store it without any conversion */ +#endif + } + fno->altname[di] = 0; /* Terminate the SFN (null string means SFN is invalid) */ + + if (fno->fname[0] == 0) { /* If LFN is invalid, altname[] needs to be copied to fname[] */ + if (di == 0) { /* If LFN and SFN both are invalid, this object is inaccesible */ + fno->fname[di++] = '?'; + } else { + for (si = di = 0, lcf = NS_BODY; fno->altname[si]; si++, di++) { /* Copy altname[] to fname[] with case information */ + wc = (WCHAR)fno->altname[si]; + if (wc == '.') lcf = NS_EXT; + if (IsUpper(wc) && (dp->dir[DIR_NTres] & lcf)) wc += 0x20; + fno->fname[di] = (TCHAR)wc; + } + } + fno->fname[di] = 0; /* Terminate the LFN */ + if (!dp->dir[DIR_NTres]) fno->altname[0] = 0; /* Altname is not needed if neither LFN nor case info is exist. */ + } + +#else /* Non-LFN configuration */ + si = di = 0; + while (si < 11) { /* Copy name body and extension */ + c = (TCHAR)dp->dir[si++]; + if (c == ' ') continue; /* Skip padding spaces */ + if (c == RDDEM) c = DDEM; /* Restore replaced DDEM character */ + if (si == 9) fno->fname[di++] = '.';/* Insert a . if extension is exist */ + fno->fname[di++] = c; + } + fno->fname[di] = 0; /* Terminate the SFN */ +#endif + + fno->fattrib = dp->dir[DIR_Attr] & AM_MASK; /* Attribute */ + fno->fsize = ld_dword(dp->dir + DIR_FileSize); /* Size */ + fno->ftime = ld_word(dp->dir + DIR_ModTime + 0); /* Time */ + fno->fdate = ld_word(dp->dir + DIR_ModTime + 2); /* Date */ +} + +#endif /* FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 */ + + + +#if FF_USE_FIND && FF_FS_MINIMIZE <= 1 +/*-----------------------------------------------------------------------*/ +/* Pattern matching */ +/*-----------------------------------------------------------------------*/ + +#define FIND_RECURS 4 /* Maximum number of wildcard terms in the pattern to limit recursion */ + + +static DWORD get_achar ( /* Get a character and advance ptr */ + const TCHAR** ptr /* Pointer to pointer to the ANSI/OEM or Unicode string */ +) +{ + DWORD chr; + + +#if FF_USE_LFN && FF_LFN_UNICODE >= 1 /* Unicode input */ + chr = tchar2uni(ptr); + if (chr == 0xFFFFFFFF) chr = 0; /* Wrong UTF encoding is recognized as end of the string */ + chr = ff_wtoupper(chr); + +#else /* ANSI/OEM input */ + chr = (BYTE)*(*ptr)++; /* Get a byte */ + if (IsLower(chr)) chr -= 0x20; /* To upper ASCII char */ +#if FF_CODE_PAGE == 0 + if (ExCvt && chr >= 0x80) chr = ExCvt[chr - 0x80]; /* To upper SBCS extended char */ +#elif FF_CODE_PAGE < 900 + if (chr >= 0x80) chr = ExCvt[chr - 0x80]; /* To upper SBCS extended char */ +#endif +#if FF_CODE_PAGE == 0 || FF_CODE_PAGE >= 900 + if (dbc_1st((BYTE)chr)) { /* Get DBC 2nd byte if needed */ + chr = dbc_2nd((BYTE)**ptr) ? chr << 8 | (BYTE)*(*ptr)++ : 0; + } +#endif + +#endif + return chr; +} + + +static int pattern_match ( /* 0:mismatched, 1:matched */ + const TCHAR* pat, /* Matching pattern */ + const TCHAR* nam, /* String to be tested */ + UINT skip, /* Number of pre-skip chars (number of ?s, b8:infinite (* specified)) */ + UINT recur /* Recursion count */ +) +{ + const TCHAR *pptr, *nptr; + DWORD pchr, nchr; + UINT sk; + + + while ((skip & 0xFF) != 0) { /* Pre-skip name chars */ + if (!get_achar(&nam)) return 0; /* Branch mismatched if less name chars */ + skip--; + } + if (*pat == 0 && skip) return 1; /* Matched? (short circuit) */ + + do { + pptr = pat; nptr = nam; /* Top of pattern and name to match */ + for (;;) { + if (*pptr == '?' || *pptr == '*') { /* Wildcard term? */ + if (recur == 0) return 0; /* Too many wildcard terms? */ + sk = 0; + do { /* Analyze the wildcard term */ + if (*pptr++ == '?') sk++; else sk |= 0x100; + } while (*pptr == '?' || *pptr == '*'); + if (pattern_match(pptr, nptr, sk, recur - 1)) return 1; /* Test new branch (recursive call) */ + nchr = *nptr; break; /* Branch mismatched */ + } + pchr = get_achar(&pptr); /* Get a pattern char */ + nchr = get_achar(&nptr); /* Get a name char */ + if (pchr != nchr) break; /* Branch mismatched? */ + if (pchr == 0) return 1; /* Branch matched? (matched at end of both strings) */ + } + get_achar(&nam); /* nam++ */ + } while (skip && nchr); /* Retry until end of name if infinite search is specified */ + + return 0; +} + +#endif /* FF_USE_FIND && FF_FS_MINIMIZE <= 1 */ + + + +/*-----------------------------------------------------------------------*/ +/* Pick a top segment and create the object name in directory form */ +/*-----------------------------------------------------------------------*/ + +static FRESULT create_name ( /* FR_OK: successful, FR_INVALID_NAME: could not create */ + DIR* dp, /* Pointer to the directory object */ + const TCHAR** path /* Pointer to pointer to the segment in the path string */ +) +{ +#if FF_USE_LFN /* LFN configuration */ + BYTE b, cf; + WCHAR wc, *lfn; + DWORD uc; + UINT i, ni, si, di; + const TCHAR *p; + + + /* Create LFN into LFN working buffer */ + p = *path; lfn = dp->obj.fs->lfnbuf; di = 0; + for (;;) { + uc = tchar2uni(&p); /* Get a character */ + if (uc == 0xFFFFFFFF) return FR_INVALID_NAME; /* Invalid code or UTF decode error */ + if (uc >= 0x10000) lfn[di++] = (WCHAR)(uc >> 16); /* Store high surrogate if needed */ + wc = (WCHAR)uc; + if (wc < ' ' || IsSeparator(wc)) break; /* Break if end of the path or a separator is found */ + if (wc < 0x80 && strchr("*:<>|\"\?\x7F", (int)wc)) return FR_INVALID_NAME; /* Reject illegal characters for LFN */ + if (di >= FF_MAX_LFN) return FR_INVALID_NAME; /* Reject too long name */ + lfn[di++] = wc; /* Store the Unicode character */ + } + if (wc < ' ') { /* Stopped at end of the path? */ + cf = NS_LAST; /* Last segment */ + } else { /* Stopped at a separator */ + while (IsSeparator(*p)) p++; /* Skip duplicated separators if exist */ + cf = 0; /* Next segment may follow */ + if (IsTerminator(*p)) cf = NS_LAST; /* Ignore terminating separator */ + } + *path = p; /* Return pointer to the next segment */ + +#if FF_FS_RPATH != 0 + if ((di == 1 && lfn[di - 1] == '.') || + (di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) { /* Is this segment a dot name? */ + lfn[di] = 0; + for (i = 0; i < 11; i++) { /* Create dot name for SFN entry */ + dp->fn[i] = (i < di) ? '.' : ' '; + } + dp->fn[i] = cf | NS_DOT; /* This is a dot entry */ + return FR_OK; + } +#endif + while (di) { /* Snip off trailing spaces and dots if exist */ + wc = lfn[di - 1]; + if (wc != ' ' && wc != '.') break; + di--; + } + lfn[di] = 0; /* LFN is created into the working buffer */ + if (di == 0) return FR_INVALID_NAME; /* Reject null name */ + + /* Create SFN in directory form */ + for (si = 0; lfn[si] == ' '; si++) ; /* Remove leading spaces */ + if (si > 0 || lfn[si] == '.') cf |= NS_LOSS | NS_LFN; /* Is there any leading space or dot? */ + while (di > 0 && lfn[di - 1] != '.') di--; /* Find last dot (di<=si: no extension) */ + + memset(dp->fn, ' ', 11); + i = b = 0; ni = 8; + for (;;) { + wc = lfn[si++]; /* Get an LFN character */ + if (wc == 0) break; /* Break on end of the LFN */ + if (wc == ' ' || (wc == '.' && si != di)) { /* Remove embedded spaces and dots */ + cf |= NS_LOSS | NS_LFN; + continue; + } + + if (i >= ni || si == di) { /* End of field? */ + if (ni == 11) { /* Name extension overflow? */ + cf |= NS_LOSS | NS_LFN; + break; + } + if (si != di) cf |= NS_LOSS | NS_LFN; /* Name body overflow? */ + if (si > di) break; /* No name extension? */ + si = di; i = 8; ni = 11; b <<= 2; /* Enter name extension */ + continue; + } + + if (wc >= 0x80) { /* Is this an extended character? */ + cf |= NS_LFN; /* LFN entry needs to be created */ +#if FF_CODE_PAGE == 0 + if (ExCvt) { /* In SBCS cfg */ + wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */ + if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */ + } else { /* In DBCS cfg */ + wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Up-convert ==> ANSI/OEM code */ + } +#elif FF_CODE_PAGE < 900 /* In SBCS cfg */ + wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */ + if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */ +#else /* In DBCS cfg */ + wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Up-convert ==> ANSI/OEM code */ +#endif + } + + if (wc >= 0x100) { /* Is this a DBC? */ + if (i >= ni - 1) { /* Field overflow? */ + cf |= NS_LOSS | NS_LFN; + i = ni; continue; /* Next field */ + } + dp->fn[i++] = (BYTE)(wc >> 8); /* Put 1st byte */ + } else { /* SBC */ + if (wc == 0 || strchr("+,;=[]", (int)wc)) { /* Replace illegal characters for SFN */ + wc = '_'; cf |= NS_LOSS | NS_LFN;/* Lossy conversion */ + } else { + if (IsUpper(wc)) { /* ASCII upper case? */ + b |= 2; + } + if (IsLower(wc)) { /* ASCII lower case? */ + b |= 1; wc -= 0x20; + } + } + } + dp->fn[i++] = (BYTE)wc; + } + + if (dp->fn[0] == DDEM) dp->fn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */ + + if (ni == 8) b <<= 2; /* Shift capital flags if no extension */ + if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) cf |= NS_LFN; /* LFN entry needs to be created if composite capitals */ + if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended character, NT flags are created */ + if (b & 0x01) cf |= NS_EXT; /* NT flag (Extension has small capital letters only) */ + if (b & 0x04) cf |= NS_BODY; /* NT flag (Body has small capital letters only) */ + } + + dp->fn[NSFLAG] = cf; /* SFN is created into dp->fn[] */ + + return FR_OK; + + +#else /* FF_USE_LFN : Non-LFN configuration */ + BYTE c, d, *sfn; + UINT ni, si, i; + const char *p; + + /* Create file name in directory form */ + p = *path; sfn = dp->fn; + memset(sfn, ' ', 11); + si = i = 0; ni = 8; +#if FF_FS_RPATH != 0 + if (p[si] == '.') { /* Is this a dot entry? */ + for (;;) { + c = (BYTE)p[si++]; + if (c != '.' || si >= 3) break; + sfn[i++] = c; + } + if (!IsSeparator(c) && c > ' ') return FR_INVALID_NAME; + *path = p + si; /* Return pointer to the next segment */ + sfn[NSFLAG] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of the path */ + return FR_OK; + } +#endif + for (;;) { + c = (BYTE)p[si++]; /* Get a byte */ + if (c <= ' ') break; /* Break if end of the path name */ + if (IsSeparator(c)) { /* Break if a separator is found */ + while (IsSeparator(p[si])) si++; /* Skip duplicated separator if exist */ + break; + } + if (c == '.' || i >= ni) { /* End of body or field overflow? */ + if (ni == 11 || c != '.') return FR_INVALID_NAME; /* Field overflow or invalid dot? */ + i = 8; ni = 11; /* Enter file extension field */ + continue; + } +#if FF_CODE_PAGE == 0 + if (ExCvt && c >= 0x80) { /* Is SBC extended character? */ + c = ExCvt[c & 0x7F]; /* To upper SBC extended character */ + } +#elif FF_CODE_PAGE < 900 + if (c >= 0x80) { /* Is SBC extended character? */ + c = ExCvt[c & 0x7F]; /* To upper SBC extended character */ + } +#endif + if (dbc_1st(c)) { /* Check if it is a DBC 1st byte */ + d = (BYTE)p[si++]; /* Get 2nd byte */ + if (!dbc_2nd(d) || i >= ni - 1) return FR_INVALID_NAME; /* Reject invalid DBC */ + sfn[i++] = c; + sfn[i++] = d; + } else { /* SBC */ + if (strchr("*+,:;<=>[]|\"\?\x7F", (int)c)) return FR_INVALID_NAME; /* Reject illegal chrs for SFN */ + if (IsLower(c)) c -= 0x20; /* To upper */ + sfn[i++] = c; + } + } + *path = &p[si]; /* Return pointer to the next segment */ + if (i == 0) return FR_INVALID_NAME; /* Reject nul string */ + + if (sfn[0] == DDEM) sfn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */ + sfn[NSFLAG] = (c <= ' ' || p[si] <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of the path */ + + return FR_OK; +#endif /* FF_USE_LFN */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Follow a file path */ +/*-----------------------------------------------------------------------*/ + +static FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ + DIR* dp, /* Directory object to return last directory and found object */ + const TCHAR* path /* Full-path string to find a file or directory */ +) +{ + FRESULT res; + BYTE ns; + FATFS *fs = dp->obj.fs; + + +#if FF_FS_RPATH != 0 + if (!IsSeparator(*path) && (FF_STR_VOLUME_ID != 2 || !IsTerminator(*path))) { /* Without heading separator */ + dp->obj.sclust = fs->cdir; /* Start at the current directory */ + } else +#endif + { /* With heading separator */ + while (IsSeparator(*path)) path++; /* Strip separators */ + dp->obj.sclust = 0; /* Start from the root directory */ + } +#if FF_FS_EXFAT + dp->obj.n_frag = 0; /* Invalidate last fragment counter of the object */ +#if FF_FS_RPATH != 0 + if (fs->fs_type == FS_EXFAT && dp->obj.sclust) { /* exFAT: Retrieve the sub-directory's status */ + DIR dj; + + dp->obj.c_scl = fs->cdc_scl; + dp->obj.c_size = fs->cdc_size; + dp->obj.c_ofs = fs->cdc_ofs; + res = load_obj_xdir(&dj, &dp->obj); + if (res != FR_OK) return res; + dp->obj.objsize = ld_dword(fs->dirbuf + XDIR_FileSize); + dp->obj.stat = fs->dirbuf[XDIR_GenFlags] & 2; + } +#endif +#endif + + if ((UINT)*path < ' ') { /* Null path name is the origin directory itself */ + dp->fn[NSFLAG] = NS_NONAME; + res = dir_sdi(dp, 0); + + } else { /* Follow path */ + for (;;) { + res = create_name(dp, &path); /* Get a segment name of the path */ + if (res != FR_OK) break; + res = dir_find(dp); /* Find an object with the segment name */ + ns = dp->fn[NSFLAG]; + if (res != FR_OK) { /* Failed to find the object */ + if (res == FR_NO_FILE) { /* Object is not found */ + if (FF_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, stay there */ + if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */ + dp->fn[NSFLAG] = NS_NONAME; + res = FR_OK; + } else { /* Could not find the object */ + if (!(ns & NS_LAST)) res = FR_NO_PATH; /* Adjust error code if not last segment */ + } + } + break; + } + if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ + /* Get into the sub-directory */ + if (!(dp->obj.attr & AM_DIR)) { /* It is not a sub-directory and cannot follow */ + res = FR_NO_PATH; break; + } +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* Save containing directory information for next dir */ + dp->obj.c_scl = dp->obj.sclust; + dp->obj.c_size = ((DWORD)dp->obj.objsize & 0xFFFFFF00) | dp->obj.stat; + dp->obj.c_ofs = dp->blk_ofs; + init_alloc_info(fs, &dp->obj); /* Open next directory */ + } else +#endif + { + dp->obj.sclust = ld_clust(fs, fs->win + dp->dptr % SS(fs)); /* Open next directory */ + } + } + } + + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Get logical drive number from path name */ +/*-----------------------------------------------------------------------*/ + +static int get_ldnumber ( /* Returns logical drive number (-1:invalid drive number or null pointer) */ + const TCHAR** path /* Pointer to pointer to the path name */ +) +{ + const TCHAR *tp, *tt; + TCHAR tc; + int i; + int vol = -1; +#if FF_STR_VOLUME_ID /* Find string volume ID */ + const char *sp; + char c; +#endif + + tt = tp = *path; + if (!tp) return vol; /* Invalid path name? */ + do tc = *tt++; while (!IsTerminator(tc) && tc != ':'); /* Find a colon in the path */ + + if (tc == ':') { /* DOS/Windows style volume ID? */ + i = FF_VOLUMES; + if (IsDigit(*tp) && tp + 2 == tt) { /* Is there a numeric volume ID + colon? */ + i = (int)*tp - '0'; /* Get the LD number */ + } +#if FF_STR_VOLUME_ID == 1 /* Arbitrary string is enabled */ + else { + i = 0; + do { + sp = VolumeStr[i]; tp = *path; /* This string volume ID and path name */ + do { /* Compare the volume ID with path name */ + c = *sp++; tc = *tp++; + if (IsLower(c)) c -= 0x20; + if (IsLower(tc)) tc -= 0x20; + } while (c && (TCHAR)c == tc); + } while ((c || tp != tt) && ++i < FF_VOLUMES); /* Repeat for each id until pattern match */ + } +#endif + if (i < FF_VOLUMES) { /* If a volume ID is found, get the drive number and strip it */ + vol = i; /* Drive number */ + *path = tt; /* Snip the drive prefix off */ + } + return vol; + } +#if FF_STR_VOLUME_ID == 2 /* Unix style volume ID is enabled */ + if (*tp == '/') { /* Is there a volume ID? */ + while (*(tp + 1) == '/') tp++; /* Skip duplicated separator */ + i = 0; + do { + tt = tp; sp = VolumeStr[i]; /* Path name and this string volume ID */ + do { /* Compare the volume ID with path name */ + c = *sp++; tc = *(++tt); + if (IsLower(c)) c -= 0x20; + if (IsLower(tc)) tc -= 0x20; + } while (c && (TCHAR)c == tc); + } while ((c || (tc != '/' && !IsTerminator(tc))) && ++i < FF_VOLUMES); /* Repeat for each ID until pattern match */ + if (i < FF_VOLUMES) { /* If a volume ID is found, get the drive number and strip it */ + vol = i; /* Drive number */ + *path = tt; /* Snip the drive prefix off */ + } + return vol; + } +#endif + /* No drive prefix is found */ +#if FF_FS_RPATH != 0 + vol = CurrVol; /* Default drive is current drive */ +#else + vol = 0; /* Default drive is 0 */ +#endif + return vol; /* Return the default drive */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* GPT support functions */ +/*-----------------------------------------------------------------------*/ + +#if FF_LBA64 + +/* Calculate CRC32 in byte-by-byte */ + +static DWORD crc32 ( /* Returns next CRC value */ + DWORD crc, /* Current CRC value */ + BYTE d /* A byte to be processed */ +) +{ + BYTE b; + + + for (b = 1; b; b <<= 1) { + crc ^= (d & b) ? 1 : 0; + crc = (crc & 1) ? crc >> 1 ^ 0xEDB88320 : crc >> 1; + } + return crc; +} + + +/* Check validity of GPT header */ + +static int test_gpt_header ( /* 0:Invalid, 1:Valid */ + const BYTE* gpth /* Pointer to the GPT header */ +) +{ + UINT i; + DWORD bcc; + + + if (memcmp(gpth + GPTH_Sign, "EFI PART" "\0\0\1\0" "\x5C\0\0", 16)) return 0; /* Check sign, version (1.0) and length (92) */ + for (i = 0, bcc = 0xFFFFFFFF; i < 92; i++) { /* Check header BCC */ + bcc = crc32(bcc, i - GPTH_Bcc < 4 ? 0 : gpth[i]); + } + if (~bcc != ld_dword(gpth + GPTH_Bcc)) return 0; + if (ld_dword(gpth + GPTH_PteSize) != SZ_GPTE) return 0; /* Table entry size (must be SZ_GPTE bytes) */ + if (ld_dword(gpth + GPTH_PtNum) > 128) return 0; /* Table size (must be 128 entries or less) */ + + return 1; +} + +#if !FF_FS_READONLY && FF_USE_MKFS + +/* Generate random value */ +static DWORD make_rand ( + DWORD seed, /* Seed value */ + BYTE* buff, /* Output buffer */ + UINT n /* Data length */ +) +{ + UINT r; + + + if (seed == 0) seed = 1; + do { + for (r = 0; r < 8; r++) seed = seed & 1 ? seed >> 1 ^ 0xA3000000 : seed >> 1; /* Shift 8 bits the 32-bit LFSR */ + *buff++ = (BYTE)seed; + } while (--n); + return seed; +} + +#endif +#endif + + + +/*-----------------------------------------------------------------------*/ +/* Load a sector and check if it is an FAT VBR */ +/*-----------------------------------------------------------------------*/ + +/* Check what the sector is */ + +static UINT check_fs ( /* 0:FAT/FAT32 VBR, 1:exFAT VBR, 2:Not FAT and valid BS, 3:Not FAT and invalid BS, 4:Disk error */ + FATFS* fs, /* Filesystem object */ + LBA_t sect /* Sector to load and check if it is an FAT-VBR or not */ +) +{ + WORD w, sign; + BYTE b; + + + fs->wflag = 0; fs->winsect = (LBA_t)0 - 1; /* Invaidate window */ + if (move_window(fs, sect) != FR_OK) return 4; /* Load the boot sector */ + sign = ld_word(fs->win + BS_55AA); +#if FF_FS_EXFAT + if (sign == 0xAA55 && !memcmp(fs->win + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11)) return 1; /* It is an exFAT VBR */ +#endif + b = fs->win[BS_JmpBoot]; + if (b == 0xEB || b == 0xE9 || b == 0xE8) { /* Valid JumpBoot code? (short jump, near jump or near call) */ + if (sign == 0xAA55 && !memcmp(fs->win + BS_FilSysType32, "FAT32 ", 8)) { + return 0; /* It is an FAT32 VBR */ + } + /* FAT volumes formatted with early MS-DOS lack BS_55AA and BS_FilSysType, so FAT VBR needs to be identified without them. */ + w = ld_word(fs->win + BPB_BytsPerSec); + b = fs->win[BPB_SecPerClus]; + if ((w & (w - 1)) == 0 && w >= FF_MIN_SS && w <= FF_MAX_SS /* Properness of sector size (512-4096 and 2^n) */ + && b != 0 && (b & (b - 1)) == 0 /* Properness of cluster size (2^n) */ + && ld_word(fs->win + BPB_RsvdSecCnt) != 0 /* Properness of reserved sectors (MNBZ) */ + && (UINT)fs->win[BPB_NumFATs] - 1 <= 1 /* Properness of FATs (1 or 2) */ + && ld_word(fs->win + BPB_RootEntCnt) != 0 /* Properness of root dir entries (MNBZ) */ + && (ld_word(fs->win + BPB_TotSec16) >= 128 || ld_dword(fs->win + BPB_TotSec32) >= 0x10000) /* Properness of volume sectors (>=128) */ + && ld_word(fs->win + BPB_FATSz16) != 0) { /* Properness of FAT size (MNBZ) */ + return 0; /* It can be presumed an FAT VBR */ + } + } + return sign == 0xAA55 ? 2 : 3; /* Not an FAT VBR (valid or invalid BS) */ +} + + +/* Find an FAT volume */ +/* (It supports only generic partitioning rules, MBR, GPT and SFD) */ + +static UINT find_volume ( /* Returns BS status found in the hosting drive */ + FATFS* fs, /* Filesystem object */ + UINT part /* Partition to fined = 0:auto, 1..:forced */ +) +{ + UINT fmt, i; + DWORD mbr_pt[4]; + + + fmt = check_fs(fs, 0); /* Load sector 0 and check if it is an FAT VBR as SFD format */ + if (fmt != 2 && (fmt >= 3 || part == 0)) return fmt; /* Returns if it is an FAT VBR as auto scan, not a BS or disk error */ + + /* Sector 0 is not an FAT VBR or forced partition number wants a partition */ + +#if FF_LBA64 + if (fs->win[MBR_Table + PTE_System] == 0xEE) { /* GPT protective MBR? */ + DWORD n_ent, v_ent, ofs; + QWORD pt_lba; + + if (move_window(fs, 1) != FR_OK) return 4; /* Load GPT header sector (next to MBR) */ + if (!test_gpt_header(fs->win)) return 3; /* Check if GPT header is valid */ + n_ent = ld_dword(fs->win + GPTH_PtNum); /* Number of entries */ + pt_lba = ld_qword(fs->win + GPTH_PtOfs); /* Table location */ + for (v_ent = i = 0; i < n_ent; i++) { /* Find FAT partition */ + if (move_window(fs, pt_lba + i * SZ_GPTE / SS(fs)) != FR_OK) return 4; /* PT sector */ + ofs = i * SZ_GPTE % SS(fs); /* Offset in the sector */ + if (!memcmp(fs->win + ofs + GPTE_PtGuid, GUID_MS_Basic, 16)) { /* MS basic data partition? */ + v_ent++; + fmt = check_fs(fs, ld_qword(fs->win + ofs + GPTE_FstLba)); /* Load VBR and check status */ + if (part == 0 && fmt <= 1) return fmt; /* Auto search (valid FAT volume found first) */ + if (part != 0 && v_ent == part) return fmt; /* Forced partition order (regardless of it is valid or not) */ + } + } + return 3; /* Not found */ + } +#endif + if (FF_MULTI_PARTITION && part > 4) return 3; /* MBR has 4 partitions max */ + for (i = 0; i < 4; i++) { /* Load partition offset in the MBR */ + mbr_pt[i] = ld_dword(fs->win + MBR_Table + i * SZ_PTE + PTE_StLba); + } + i = part ? part - 1 : 0; /* Table index to find first */ + do { /* Find an FAT volume */ + fmt = mbr_pt[i] ? check_fs(fs, mbr_pt[i]) : 3; /* Check if the partition is FAT */ + } while (part == 0 && fmt >= 2 && ++i < 4); + return fmt; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Determine logical drive number and mount the volume if needed */ +/*-----------------------------------------------------------------------*/ + +static FRESULT mount_volume ( /* FR_OK(0): successful, !=0: an error occurred */ + const TCHAR** path, /* Pointer to pointer to the path name (drive number) */ + FATFS** rfs, /* Pointer to pointer to the found filesystem object */ + BYTE mode /* !=0: Check write protection for write access */ +) +{ + int vol; + DSTATUS stat; + LBA_t bsect; + DWORD tsect, sysect, fasize, nclst, szbfat; + WORD nrsv; + FATFS *fs; + UINT fmt; + + + /* Get logical drive number */ + *rfs = 0; + vol = get_ldnumber(path); + if (vol < 0) return FR_INVALID_DRIVE; + + /* Check if the filesystem object is valid or not */ + fs = FatFs[vol]; /* Get pointer to the filesystem object */ + if (!fs) return FR_NOT_ENABLED; /* Is the filesystem object available? */ +#if FF_FS_REENTRANT + if (!lock_fs(fs)) return FR_TIMEOUT; /* Lock the volume */ +#endif + *rfs = fs; /* Return pointer to the filesystem object */ + + mode &= (BYTE)~FA_READ; /* Desired access mode, write access or not */ + if (fs->fs_type != 0) { /* If the volume has been mounted */ + stat = disk_status(fs->pdrv); + if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */ + if (!FF_FS_READONLY && mode && (stat & STA_PROTECT)) { /* Check write protection if needed */ + return FR_WRITE_PROTECTED; + } + return FR_OK; /* The filesystem object is already valid */ + } + } + + /* The filesystem object is not valid. */ + /* Following code attempts to mount the volume. (find an FAT volume, analyze the BPB and initialize the filesystem object) */ + + fs->fs_type = 0; /* Clear the filesystem object */ + fs->pdrv = LD2PD(vol); /* Volume hosting physical drive */ + stat = disk_initialize(fs->pdrv); /* Initialize the physical drive */ + if (stat & STA_NOINIT) { /* Check if the initialization succeeded */ + return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ + } + if (!FF_FS_READONLY && mode && (stat & STA_PROTECT)) { /* Check disk write protection if needed */ + return FR_WRITE_PROTECTED; + } +#if FF_MAX_SS != FF_MIN_SS /* Get sector size (multiple sector size cfg only) */ + if (disk_ioctl(fs->pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK) return FR_DISK_ERR; + if (SS(fs) > FF_MAX_SS || SS(fs) < FF_MIN_SS || (SS(fs) & (SS(fs) - 1))) return FR_DISK_ERR; +#endif + + /* Find an FAT volume on the drive */ + fmt = find_volume(fs, LD2PT(vol)); + if (fmt == 4) return FR_DISK_ERR; /* An error occured in the disk I/O layer */ + if (fmt >= 2) return FR_NO_FILESYSTEM; /* No FAT volume is found */ + bsect = fs->winsect; /* Volume offset */ + + /* An FAT volume is found (bsect). Following code initializes the filesystem object */ + +#if FF_FS_EXFAT + if (fmt == 1) { + QWORD maxlba; + DWORD so, cv, bcl, i; + + for (i = BPB_ZeroedEx; i < BPB_ZeroedEx + 53 && fs->win[i] == 0; i++) ; /* Check zero filler */ + if (i < BPB_ZeroedEx + 53) return FR_NO_FILESYSTEM; + + if (ld_word(fs->win + BPB_FSVerEx) != 0x100) return FR_NO_FILESYSTEM; /* Check exFAT version (must be version 1.0) */ + + if (1 << fs->win[BPB_BytsPerSecEx] != SS(fs)) { /* (BPB_BytsPerSecEx must be equal to the physical sector size) */ + return FR_NO_FILESYSTEM; + } + + maxlba = ld_qword(fs->win + BPB_TotSecEx) + bsect; /* Last LBA of the volume + 1 */ + if (!FF_LBA64 && maxlba >= 0x100000000) return FR_NO_FILESYSTEM; /* (It cannot be accessed in 32-bit LBA) */ + + fs->fsize = ld_dword(fs->win + BPB_FatSzEx); /* Number of sectors per FAT */ + + fs->n_fats = fs->win[BPB_NumFATsEx]; /* Number of FATs */ + if (fs->n_fats != 1) return FR_NO_FILESYSTEM; /* (Supports only 1 FAT) */ + + fs->csize = 1 << fs->win[BPB_SecPerClusEx]; /* Cluster size */ + if (fs->csize == 0) return FR_NO_FILESYSTEM; /* (Must be 1..32768 sectors) */ + + nclst = ld_dword(fs->win + BPB_NumClusEx); /* Number of clusters */ + if (nclst > MAX_EXFAT) return FR_NO_FILESYSTEM; /* (Too many clusters) */ + fs->n_fatent = nclst + 2; + + /* Boundaries and Limits */ + fs->volbase = bsect; + fs->database = bsect + ld_dword(fs->win + BPB_DataOfsEx); + fs->fatbase = bsect + ld_dword(fs->win + BPB_FatOfsEx); + if (maxlba < (QWORD)fs->database + nclst * fs->csize) return FR_NO_FILESYSTEM; /* (Volume size must not be smaller than the size requiered) */ + fs->dirbase = ld_dword(fs->win + BPB_RootClusEx); + + /* Get bitmap location and check if it is contiguous (implementation assumption) */ + so = i = 0; + for (;;) { /* Find the bitmap entry in the root directory (in only first cluster) */ + if (i == 0) { + if (so >= fs->csize) return FR_NO_FILESYSTEM; /* Not found? */ + if (move_window(fs, clst2sect(fs, (DWORD)fs->dirbase) + so) != FR_OK) return FR_DISK_ERR; + so++; + } + if (fs->win[i] == ET_BITMAP) break; /* Is it a bitmap entry? */ + i = (i + SZDIRE) % SS(fs); /* Next entry */ + } + bcl = ld_dword(fs->win + i + 20); /* Bitmap cluster */ + if (bcl < 2 || bcl >= fs->n_fatent) return FR_NO_FILESYSTEM; /* (Wrong cluster#) */ + fs->bitbase = fs->database + fs->csize * (bcl - 2); /* Bitmap sector */ + for (;;) { /* Check if bitmap is contiguous */ + if (move_window(fs, fs->fatbase + bcl / (SS(fs) / 4)) != FR_OK) return FR_DISK_ERR; + cv = ld_dword(fs->win + bcl % (SS(fs) / 4) * 4); + if (cv == 0xFFFFFFFF) break; /* Last link? */ + if (cv != ++bcl) return FR_NO_FILESYSTEM; /* Fragmented? */ + } + +#if !FF_FS_READONLY + fs->last_clst = fs->free_clst = 0xFFFFFFFF; /* Initialize cluster allocation information */ +#endif + fmt = FS_EXFAT; /* FAT sub-type */ + } else +#endif /* FF_FS_EXFAT */ + { + if (ld_word(fs->win + BPB_BytsPerSec) != SS(fs)) return FR_NO_FILESYSTEM; /* (BPB_BytsPerSec must be equal to the physical sector size) */ + + fasize = ld_word(fs->win + BPB_FATSz16); /* Number of sectors per FAT */ + if (fasize == 0) fasize = ld_dword(fs->win + BPB_FATSz32); + fs->fsize = fasize; + + fs->n_fats = fs->win[BPB_NumFATs]; /* Number of FATs */ + if (fs->n_fats != 1 && fs->n_fats != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */ + fasize *= fs->n_fats; /* Number of sectors for FAT area */ + + fs->csize = fs->win[BPB_SecPerClus]; /* Cluster size */ + if (fs->csize == 0 || (fs->csize & (fs->csize - 1))) return FR_NO_FILESYSTEM; /* (Must be power of 2) */ + + fs->n_rootdir = ld_word(fs->win + BPB_RootEntCnt); /* Number of root directory entries */ + if (fs->n_rootdir % (SS(fs) / SZDIRE)) return FR_NO_FILESYSTEM; /* (Must be sector aligned) */ + + tsect = ld_word(fs->win + BPB_TotSec16); /* Number of sectors on the volume */ + if (tsect == 0) tsect = ld_dword(fs->win + BPB_TotSec32); + + nrsv = ld_word(fs->win + BPB_RsvdSecCnt); /* Number of reserved sectors */ + if (nrsv == 0) return FR_NO_FILESYSTEM; /* (Must not be 0) */ + + /* Determine the FAT sub type */ + sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZDIRE); /* RSV + FAT + DIR */ + if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ + if (nclst == 0) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ + fmt = 0; + if (nclst <= MAX_FAT32) fmt = FS_FAT32; + if (nclst <= MAX_FAT16) fmt = FS_FAT16; + if (nclst <= MAX_FAT12) fmt = FS_FAT12; + if (fmt == 0) return FR_NO_FILESYSTEM; + + /* Boundaries and Limits */ + fs->n_fatent = nclst + 2; /* Number of FAT entries */ + fs->volbase = bsect; /* Volume start sector */ + fs->fatbase = bsect + nrsv; /* FAT start sector */ + fs->database = bsect + sysect; /* Data start sector */ + if (fmt == FS_FAT32) { + if (ld_word(fs->win + BPB_FSVer32) != 0) return FR_NO_FILESYSTEM; /* (Must be FAT32 revision 0.0) */ + if (fs->n_rootdir != 0) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ + fs->dirbase = ld_dword(fs->win + BPB_RootClus32); /* Root directory start cluster */ + szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ + } else { + if (fs->n_rootdir == 0) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ + fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ + szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ + fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); + } + if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) return FR_NO_FILESYSTEM; /* (BPB_FATSz must not be less than the size needed) */ + +#if !FF_FS_READONLY + /* Get FSInfo if available */ + fs->last_clst = fs->free_clst = 0xFFFFFFFF; /* Initialize cluster allocation information */ + fs->fsi_flag = 0x80; +#if (FF_FS_NOFSINFO & 3) != 3 + if (fmt == FS_FAT32 /* Allow to update FSInfo only if BPB_FSInfo32 == 1 */ + && ld_word(fs->win + BPB_FSInfo32) == 1 + && move_window(fs, bsect + 1) == FR_OK) + { + fs->fsi_flag = 0; + if (ld_word(fs->win + BS_55AA) == 0xAA55 /* Load FSInfo data if available */ + && ld_dword(fs->win + FSI_LeadSig) == 0x41615252 + && ld_dword(fs->win + FSI_StrucSig) == 0x61417272) + { +#if (FF_FS_NOFSINFO & 1) == 0 + fs->free_clst = ld_dword(fs->win + FSI_Free_Count); +#endif +#if (FF_FS_NOFSINFO & 2) == 0 + fs->last_clst = ld_dword(fs->win + FSI_Nxt_Free); +#endif + } + } +#endif /* (FF_FS_NOFSINFO & 3) != 3 */ +#endif /* !FF_FS_READONLY */ + } + + fs->fs_type = (BYTE)fmt;/* FAT sub-type */ + fs->id = ++Fsid; /* Volume mount ID */ +#if FF_USE_LFN == 1 + fs->lfnbuf = LfnBuf; /* Static LFN working buffer */ +#if FF_FS_EXFAT + fs->dirbuf = DirBuf; /* Static directory block scratchpad buuffer */ +#endif +#endif +#if FF_FS_RPATH != 0 + fs->cdir = 0; /* Initialize current directory */ +#endif +#if FF_FS_LOCK != 0 /* Clear file lock semaphores */ + clear_lock(fs); +#endif + return FR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Check if the file/directory object is valid or not */ +/*-----------------------------------------------------------------------*/ + +static FRESULT validate ( /* Returns FR_OK or FR_INVALID_OBJECT */ + FFOBJID* obj, /* Pointer to the FFOBJID, the 1st member in the FIL/DIR object, to check validity */ + FATFS** rfs /* Pointer to pointer to the owner filesystem object to return */ +) +{ + FRESULT res = FR_INVALID_OBJECT; + + + if (obj && obj->fs && obj->fs->fs_type && obj->id == obj->fs->id) { /* Test if the object is valid */ +#if FF_FS_REENTRANT + if (lock_fs(obj->fs)) { /* Obtain the filesystem object */ + if (!(disk_status(obj->fs->pdrv) & STA_NOINIT)) { /* Test if the phsical drive is kept initialized */ + res = FR_OK; + } else { + unlock_fs(obj->fs, FR_OK); + } + } else { + res = FR_TIMEOUT; + } +#else + if (!(disk_status(obj->fs->pdrv) & STA_NOINIT)) { /* Test if the phsical drive is kept initialized */ + res = FR_OK; + } +#endif + } + *rfs = (res == FR_OK) ? obj->fs : 0; /* Corresponding filesystem object */ + return res; +} + + + + +/*--------------------------------------------------------------------------- + + Public Functions (FatFs API) + +----------------------------------------------------------------------------*/ + + + +/*-----------------------------------------------------------------------*/ +/* Mount/Unmount a Logical Drive */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mount ( + FATFS* fs, /* Pointer to the filesystem object to be registered (NULL:unmount)*/ + const TCHAR* path, /* Logical drive number to be mounted/unmounted */ + BYTE opt /* Mount option: 0=Do not mount (delayed mount), 1=Mount immediately */ +) +{ + FATFS *cfs; + int vol; + FRESULT res; + const TCHAR *rp = path; + + + /* Get logical drive number */ + vol = get_ldnumber(&rp); + if (vol < 0) return FR_INVALID_DRIVE; + cfs = FatFs[vol]; /* Pointer to fs object */ + + if (cfs) { +#if FF_FS_LOCK != 0 + clear_lock(cfs); +#endif +#if FF_FS_REENTRANT /* Discard sync object of the current volume */ + if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR; +#endif + cfs->fs_type = 0; /* Clear old fs object */ + } + + if (fs) { + fs->fs_type = 0; /* Clear new fs object */ +#if FF_FS_REENTRANT /* Create sync object for the new volume */ + if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR; +#endif + } + FatFs[vol] = fs; /* Register new fs object */ + + if (opt == 0) return FR_OK; /* Do not mount now, it will be mounted later */ + + res = mount_volume(&path, &fs, 0); /* Force mounted the volume */ + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Open or Create a File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_open ( + FIL* fp, /* Pointer to the blank file object */ + const TCHAR* path, /* Pointer to the file name */ + BYTE mode /* Access mode and open mode flags */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; +#if !FF_FS_READONLY + DWORD cl, bcs, clst, tm; + LBA_t sc; + FSIZE_t ofs; +#endif + DEF_NAMBUF + + + if (!fp) return FR_INVALID_OBJECT; + + /* Get logical drive number */ + mode &= FF_FS_READONLY ? FA_READ : FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_CREATE_NEW | FA_OPEN_ALWAYS | FA_OPEN_APPEND; + res = mount_volume(&path, &fs, mode); + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ +#if !FF_FS_READONLY /* Read/Write configuration */ + if (res == FR_OK) { + if (dj.fn[NSFLAG] & NS_NONAME) { /* Origin directory itself? */ + res = FR_INVALID_NAME; + } +#if FF_FS_LOCK != 0 + else { + res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); /* Check if the file can be used */ + } +#endif + } + /* Create or Open a file */ + if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { + if (res != FR_OK) { /* No file, create new */ + if (res == FR_NO_FILE) { /* There is no file to open, create a new entry */ +#if FF_FS_LOCK != 0 + res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; +#else + res = dir_register(&dj); +#endif + } + mode |= FA_CREATE_ALWAYS; /* File is created */ + } + else { /* Any object with the same name is already existing */ + if (dj.obj.attr & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ + res = FR_DENIED; + } else { + if (mode & FA_CREATE_NEW) res = FR_EXIST; /* Cannot create as new file */ + } + } + if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate the file if overwrite mode */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + /* Get current allocation info */ + fp->obj.fs = fs; + init_alloc_info(fs, &fp->obj); + /* Set directory entry block initial state */ + memset(fs->dirbuf + 2, 0, 30); /* Clear 85 entry except for NumSec */ + memset(fs->dirbuf + 38, 0, 26); /* Clear C0 entry except for NumName and NameHash */ + fs->dirbuf[XDIR_Attr] = AM_ARC; + st_dword(fs->dirbuf + XDIR_CrtTime, GET_FATTIME()); + fs->dirbuf[XDIR_GenFlags] = 1; + res = store_xdir(&dj); + if (res == FR_OK && fp->obj.sclust != 0) { /* Remove the cluster chain if exist */ + res = remove_chain(&fp->obj, fp->obj.sclust, 0); + fs->last_clst = fp->obj.sclust - 1; /* Reuse the cluster hole */ + } + } else +#endif + { + /* Set directory entry initial state */ + tm = GET_FATTIME(); /* Set created time */ + st_dword(dj.dir + DIR_CrtTime, tm); + st_dword(dj.dir + DIR_ModTime, tm); + cl = ld_clust(fs, dj.dir); /* Get current cluster chain */ + dj.dir[DIR_Attr] = AM_ARC; /* Reset attribute */ + st_clust(fs, dj.dir, 0); /* Reset file allocation info */ + st_dword(dj.dir + DIR_FileSize, 0); + fs->wflag = 1; + if (cl != 0) { /* Remove the cluster chain if exist */ + sc = fs->winsect; + res = remove_chain(&dj.obj, cl, 0); + if (res == FR_OK) { + res = move_window(fs, sc); + fs->last_clst = cl - 1; /* Reuse the cluster hole */ + } + } + } + } + } + else { /* Open an existing file */ + if (res == FR_OK) { /* Is the object exsiting? */ + if (dj.obj.attr & AM_DIR) { /* File open against a directory */ + res = FR_NO_FILE; + } else { + if ((mode & FA_WRITE) && (dj.obj.attr & AM_RDO)) { /* Write mode open against R/O file */ + res = FR_DENIED; + } + } + } + } + if (res == FR_OK) { + if (mode & FA_CREATE_ALWAYS) mode |= FA_MODIFIED; /* Set file change flag if created or overwritten */ + fp->dir_sect = fs->winsect; /* Pointer to the directory entry */ + fp->dir_ptr = dj.dir; +#if FF_FS_LOCK != 0 + fp->obj.lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); /* Lock the file for this session */ + if (fp->obj.lockid == 0) res = FR_INT_ERR; +#endif + } +#else /* R/O configuration */ + if (res == FR_OK) { + if (dj.fn[NSFLAG] & NS_NONAME) { /* Is it origin directory itself? */ + res = FR_INVALID_NAME; + } else { + if (dj.obj.attr & AM_DIR) { /* Is it a directory? */ + res = FR_NO_FILE; + } + } + } +#endif + + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fp->obj.c_scl = dj.obj.sclust; /* Get containing directory info */ + fp->obj.c_size = ((DWORD)dj.obj.objsize & 0xFFFFFF00) | dj.obj.stat; + fp->obj.c_ofs = dj.blk_ofs; + init_alloc_info(fs, &fp->obj); + } else +#endif + { + fp->obj.sclust = ld_clust(fs, dj.dir); /* Get object allocation info */ + fp->obj.objsize = ld_dword(dj.dir + DIR_FileSize); + } +#if FF_USE_FASTSEEK + fp->cltbl = 0; /* Disable fast seek mode */ +#endif + fp->obj.fs = fs; /* Validate the file object */ + fp->obj.id = fs->id; + fp->flag = mode; /* Set file access mode */ + fp->err = 0; /* Clear error flag */ + fp->sect = 0; /* Invalidate current data sector */ + fp->fptr = 0; /* Set file pointer top of the file */ +#if !FF_FS_READONLY +#if !FF_FS_TINY + memset(fp->buf, 0, sizeof fp->buf); /* Clear sector buffer */ +#endif + if ((mode & FA_SEEKEND) && fp->obj.objsize > 0) { /* Seek to end of file if FA_OPEN_APPEND is specified */ + fp->fptr = fp->obj.objsize; /* Offset to seek */ + bcs = (DWORD)fs->csize * SS(fs); /* Cluster size in byte */ + clst = fp->obj.sclust; /* Follow the cluster chain */ + for (ofs = fp->obj.objsize; res == FR_OK && ofs > bcs; ofs -= bcs) { + clst = get_fat(&fp->obj, clst); + if (clst <= 1) res = FR_INT_ERR; + if (clst == 0xFFFFFFFF) res = FR_DISK_ERR; + } + fp->clust = clst; + if (res == FR_OK && ofs % SS(fs)) { /* Fill sector buffer if not on the sector boundary */ + sc = clst2sect(fs, clst); + if (sc == 0) { + res = FR_INT_ERR; + } else { + fp->sect = sc + (DWORD)(ofs / SS(fs)); +#if !FF_FS_TINY + if (disk_read(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) res = FR_DISK_ERR; +#endif + } + } +#if FF_FS_LOCK != 0 + if (res != FR_OK) dec_lock(fp->obj.lockid); /* Decrement file open counter if seek failed */ +#endif + } +#endif + } + + FREE_NAMBUF(); + } + + if (res != FR_OK) fp->obj.fs = 0; /* Invalidate file object on error */ + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_read ( + FIL* fp, /* Open file to be read */ + void* buff, /* Data buffer to store the read data */ + UINT btr, /* Number of bytes to read */ + UINT* br /* Number of bytes read */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst; + LBA_t sect; + FSIZE_t remain; + UINT rcnt, cc, csect; + BYTE *rbuff = (BYTE*)buff; + + + *br = 0; /* Clear read byte counter */ + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); /* Check validity */ + if (!(fp->flag & FA_READ)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + remain = fp->obj.objsize - fp->fptr; + if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ + + for ( ; btr > 0; btr -= rcnt, *br += rcnt, rbuff += rcnt, fp->fptr += rcnt) { /* Repeat until btr bytes read */ + if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */ + csect = (UINT)(fp->fptr / SS(fs) & (fs->csize - 1)); /* Sector offset in the cluster */ + if (csect == 0) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->obj.sclust; /* Follow cluster chain from the origin */ + } else { /* Middle or end of the file */ +#if FF_USE_FASTSEEK + if (fp->cltbl) { + clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ + } else +#endif + { + clst = get_fat(&fp->obj, fp->clust); /* Follow cluster chain on the FAT */ + } + } + if (clst < 2) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->clust = clst; /* Update current cluster */ + } + sect = clst2sect(fs, fp->clust); /* Get current sector */ + if (sect == 0) ABORT(fs, FR_INT_ERR); + sect += csect; + cc = btr / SS(fs); /* When remaining bytes >= sector size, */ + if (cc > 0) { /* Read maximum contiguous sectors directly */ + if (csect + cc > fs->csize) { /* Clip at cluster boundary */ + cc = fs->csize - csect; + } + if (disk_read(fs->pdrv, rbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR); +#if !FF_FS_READONLY && FF_FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ +#if FF_FS_TINY + if (fs->wflag && fs->winsect - sect < cc) { + memcpy(rbuff + ((fs->winsect - sect) * SS(fs)), fs->win, SS(fs)); + } +#else + if ((fp->flag & FA_DIRTY) && fp->sect - sect < cc) { + memcpy(rbuff + ((fp->sect - sect) * SS(fs)), fp->buf, SS(fs)); + } +#endif +#endif + rcnt = SS(fs) * cc; /* Number of bytes transferred */ + continue; + } +#if !FF_FS_TINY + if (fp->sect != sect) { /* Load data sector if not in cache */ +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Fill sector cache */ + } +#endif + fp->sect = sect; + } + rcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes remains in the sector */ + if (rcnt > btr) rcnt = btr; /* Clip it by btr if needed */ +#if FF_FS_TINY + if (move_window(fs, fp->sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window */ + memcpy(rbuff, fs->win + fp->fptr % SS(fs), rcnt); /* Extract partial sector */ +#else + memcpy(rbuff, fp->buf + fp->fptr % SS(fs), rcnt); /* Extract partial sector */ +#endif + } + + LEAVE_FF(fs, FR_OK); +} + + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Write File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_write ( + FIL* fp, /* Open file to be written */ + const void* buff, /* Data to be written */ + UINT btw, /* Number of bytes to write */ + UINT* bw /* Number of bytes written */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst; + LBA_t sect; + UINT wcnt, cc, csect; + const BYTE *wbuff = (const BYTE*)buff; + + + *bw = 0; /* Clear write byte counter */ + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); /* Check validity */ + if (!(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + + /* Check fptr wrap-around (file size cannot reach 4 GiB at FAT volume) */ + if ((!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) && (DWORD)(fp->fptr + btw) < (DWORD)fp->fptr) { + btw = (UINT)(0xFFFFFFFF - (DWORD)fp->fptr); + } + + for ( ; btw > 0; btw -= wcnt, *bw += wcnt, wbuff += wcnt, fp->fptr += wcnt, fp->obj.objsize = (fp->fptr > fp->obj.objsize) ? fp->fptr : fp->obj.objsize) { /* Repeat until all data written */ + if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */ + csect = (UINT)(fp->fptr / SS(fs)) & (fs->csize - 1); /* Sector offset in the cluster */ + if (csect == 0) { /* On the cluster boundary? */ + if (fp->fptr == 0) { /* On the top of the file? */ + clst = fp->obj.sclust; /* Follow from the origin */ + if (clst == 0) { /* If no cluster is allocated, */ + clst = create_chain(&fp->obj, 0); /* create a new cluster chain */ + } + } else { /* On the middle or end of the file */ +#if FF_USE_FASTSEEK + if (fp->cltbl) { + clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ + } else +#endif + { + clst = create_chain(&fp->obj, fp->clust); /* Follow or stretch cluster chain on the FAT */ + } + } + if (clst == 0) break; /* Could not allocate a new cluster (disk full) */ + if (clst == 1) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->clust = clst; /* Update current cluster */ + if (fp->obj.sclust == 0) fp->obj.sclust = clst; /* Set start cluster if the first write */ + } +#if FF_FS_TINY + if (fs->winsect == fp->sect && sync_window(fs) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Write-back sector cache */ +#else + if (fp->flag & FA_DIRTY) { /* Write-back sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + sect = clst2sect(fs, fp->clust); /* Get current sector */ + if (sect == 0) ABORT(fs, FR_INT_ERR); + sect += csect; + cc = btw / SS(fs); /* When remaining bytes >= sector size, */ + if (cc > 0) { /* Write maximum contiguous sectors directly */ + if (csect + cc > fs->csize) { /* Clip at cluster boundary */ + cc = fs->csize - csect; + } + if (disk_write(fs->pdrv, wbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR); +#if FF_FS_MINIMIZE <= 2 +#if FF_FS_TINY + if (fs->winsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ + memcpy(fs->win, wbuff + ((fs->winsect - sect) * SS(fs)), SS(fs)); + fs->wflag = 0; + } +#else + if (fp->sect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */ + memcpy(fp->buf, wbuff + ((fp->sect - sect) * SS(fs)), SS(fs)); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif +#endif + wcnt = SS(fs) * cc; /* Number of bytes transferred */ + continue; + } +#if FF_FS_TINY + if (fp->fptr >= fp->obj.objsize) { /* Avoid silly cache filling on the growing edge */ + if (sync_window(fs) != FR_OK) ABORT(fs, FR_DISK_ERR); + fs->winsect = sect; + } +#else + if (fp->sect != sect && /* Fill sector cache with file data */ + fp->fptr < fp->obj.objsize && + disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) { + ABORT(fs, FR_DISK_ERR); + } +#endif + fp->sect = sect; + } + wcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes remains in the sector */ + if (wcnt > btw) wcnt = btw; /* Clip it by btw if needed */ +#if FF_FS_TINY + if (move_window(fs, fp->sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window */ + memcpy(fs->win + fp->fptr % SS(fs), wbuff, wcnt); /* Fit data to the sector */ + fs->wflag = 1; +#else + memcpy(fp->buf + fp->fptr % SS(fs), wbuff, wcnt); /* Fit data to the sector */ + fp->flag |= FA_DIRTY; +#endif + } + + fp->flag |= FA_MODIFIED; /* Set file change flag */ + + LEAVE_FF(fs, FR_OK); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Synchronize the File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_sync ( + FIL* fp /* Open file to be synced */ +) +{ + FRESULT res; + FATFS *fs; + DWORD tm; + BYTE *dir; + + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res == FR_OK) { + if (fp->flag & FA_MODIFIED) { /* Is there any change to the file? */ +#if !FF_FS_TINY + if (fp->flag & FA_DIRTY) { /* Write-back cached data if needed */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) LEAVE_FF(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + /* Update the directory entry */ + tm = GET_FATTIME(); /* Modified time */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + res = fill_first_frag(&fp->obj); /* Fill first fragment on the FAT if needed */ + if (res == FR_OK) { + res = fill_last_frag(&fp->obj, fp->clust, 0xFFFFFFFF); /* Fill last fragment on the FAT if needed */ + } + if (res == FR_OK) { + DIR dj; + DEF_NAMBUF + + INIT_NAMBUF(fs); + res = load_obj_xdir(&dj, &fp->obj); /* Load directory entry block */ + if (res == FR_OK) { + fs->dirbuf[XDIR_Attr] |= AM_ARC; /* Set archive attribute to indicate that the file has been changed */ + fs->dirbuf[XDIR_GenFlags] = fp->obj.stat | 1; /* Update file allocation information */ + st_dword(fs->dirbuf + XDIR_FstClus, fp->obj.sclust); /* Update start cluster */ + st_qword(fs->dirbuf + XDIR_FileSize, fp->obj.objsize); /* Update file size */ + st_qword(fs->dirbuf + XDIR_ValidFileSize, fp->obj.objsize); /* (FatFs does not support Valid File Size feature) */ + st_dword(fs->dirbuf + XDIR_ModTime, tm); /* Update modified time */ + fs->dirbuf[XDIR_ModTime10] = 0; + st_dword(fs->dirbuf + XDIR_AccTime, 0); + res = store_xdir(&dj); /* Restore it to the directory */ + if (res == FR_OK) { + res = sync_fs(fs); + fp->flag &= (BYTE)~FA_MODIFIED; + } + } + FREE_NAMBUF(); + } + } else +#endif + { + res = move_window(fs, fp->dir_sect); + if (res == FR_OK) { + dir = fp->dir_ptr; + dir[DIR_Attr] |= AM_ARC; /* Set archive attribute to indicate that the file has been changed */ + st_clust(fp->obj.fs, dir, fp->obj.sclust); /* Update file allocation information */ + st_dword(dir + DIR_FileSize, (DWORD)fp->obj.objsize); /* Update file size */ + st_dword(dir + DIR_ModTime, tm); /* Update modified time */ + st_word(dir + DIR_LstAccDate, 0); + fs->wflag = 1; + res = sync_fs(fs); /* Restore it to the directory */ + fp->flag &= (BYTE)~FA_MODIFIED; + } + } + } + } + + LEAVE_FF(fs, res); +} + +#endif /* !FF_FS_READONLY */ + + + + +/*-----------------------------------------------------------------------*/ +/* Close File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_close ( + FIL* fp /* Open file to be closed */ +) +{ + FRESULT res; + FATFS *fs; + +#if !FF_FS_READONLY + res = f_sync(fp); /* Flush cached data */ + if (res == FR_OK) +#endif + { + res = validate(&fp->obj, &fs); /* Lock volume */ + if (res == FR_OK) { +#if FF_FS_LOCK != 0 + res = dec_lock(fp->obj.lockid); /* Decrement file open counter */ + if (res == FR_OK) fp->obj.fs = 0; /* Invalidate file object */ +#else + fp->obj.fs = 0; /* Invalidate file object */ +#endif +#if FF_FS_REENTRANT + unlock_fs(fs, FR_OK); /* Unlock volume */ +#endif + } + } + return res; +} + + + + +#if FF_FS_RPATH >= 1 +/*-----------------------------------------------------------------------*/ +/* Change Current Directory or Current Drive, Get Current Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_chdrive ( + const TCHAR* path /* Drive number to set */ +) +{ + int vol; + + + /* Get logical drive number */ + vol = get_ldnumber(&path); + if (vol < 0) return FR_INVALID_DRIVE; + CurrVol = (BYTE)vol; /* Set it as current volume */ + + return FR_OK; +} + + + +FRESULT f_chdir ( + const TCHAR* path /* Pointer to the directory path */ +) +{ +#if FF_STR_VOLUME_ID == 2 + UINT i; +#endif + FRESULT res; + DIR dj; + FATFS *fs; + DEF_NAMBUF + + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the path */ + if (res == FR_OK) { /* Follow completed */ + if (dj.fn[NSFLAG] & NS_NONAME) { /* Is it the start directory itself? */ + fs->cdir = dj.obj.sclust; +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fs->cdc_scl = dj.obj.c_scl; + fs->cdc_size = dj.obj.c_size; + fs->cdc_ofs = dj.obj.c_ofs; + } +#endif + } else { + if (dj.obj.attr & AM_DIR) { /* It is a sub-directory */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fs->cdir = ld_dword(fs->dirbuf + XDIR_FstClus); /* Sub-directory cluster */ + fs->cdc_scl = dj.obj.sclust; /* Save containing directory information */ + fs->cdc_size = ((DWORD)dj.obj.objsize & 0xFFFFFF00) | dj.obj.stat; + fs->cdc_ofs = dj.blk_ofs; + } else +#endif + { + fs->cdir = ld_clust(fs, dj.dir); /* Sub-directory cluster */ + } + } else { + res = FR_NO_PATH; /* Reached but a file */ + } + } + } + FREE_NAMBUF(); + if (res == FR_NO_FILE) res = FR_NO_PATH; +#if FF_STR_VOLUME_ID == 2 /* Also current drive is changed if in Unix style volume ID */ + if (res == FR_OK) { + for (i = FF_VOLUMES - 1; i && fs != FatFs[i]; i--) ; /* Set current drive */ + CurrVol = (BYTE)i; + } +#endif + } + + LEAVE_FF(fs, res); +} + + +#if FF_FS_RPATH >= 2 +FRESULT f_getcwd ( + TCHAR* buff, /* Pointer to the directory path */ + UINT len /* Size of buff in unit of TCHAR */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + UINT i, n; + DWORD ccl; + TCHAR *tp = buff; +#if FF_VOLUMES >= 2 + UINT vl; +#if FF_STR_VOLUME_ID + const char *vp; +#endif +#endif + FILINFO fno; + DEF_NAMBUF + + + /* Get logical drive */ + buff[0] = 0; /* Set null string to get current volume */ + res = mount_volume((const TCHAR**)&buff, &fs, 0); /* Get current volume */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + + /* Follow parent directories and create the path */ + i = len; /* Bottom of buffer (directory stack base) */ + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { /* (Cannot do getcwd on exFAT and returns root path) */ + dj.obj.sclust = fs->cdir; /* Start to follow upper directory from current directory */ + while ((ccl = dj.obj.sclust) != 0) { /* Repeat while current directory is a sub-directory */ + res = dir_sdi(&dj, 1 * SZDIRE); /* Get parent directory */ + if (res != FR_OK) break; + res = move_window(fs, dj.sect); + if (res != FR_OK) break; + dj.obj.sclust = ld_clust(fs, dj.dir); /* Goto parent directory */ + res = dir_sdi(&dj, 0); + if (res != FR_OK) break; + do { /* Find the entry links to the child directory */ + res = DIR_READ_FILE(&dj); + if (res != FR_OK) break; + if (ccl == ld_clust(fs, dj.dir)) break; /* Found the entry */ + res = dir_next(&dj, 0); + } while (res == FR_OK); + if (res == FR_NO_FILE) res = FR_INT_ERR;/* It cannot be 'not found'. */ + if (res != FR_OK) break; + get_fileinfo(&dj, &fno); /* Get the directory name and push it to the buffer */ + for (n = 0; fno.fname[n]; n++) ; /* Name length */ + if (i < n + 1) { /* Insufficient space to store the path name? */ + res = FR_NOT_ENOUGH_CORE; break; + } + while (n) buff[--i] = fno.fname[--n]; /* Stack the name */ + buff[--i] = '/'; + } + } + if (res == FR_OK) { + if (i == len) buff[--i] = '/'; /* Is it the root-directory? */ +#if FF_VOLUMES >= 2 /* Put drive prefix */ + vl = 0; +#if FF_STR_VOLUME_ID >= 1 /* String volume ID */ + for (n = 0, vp = (const char*)VolumeStr[CurrVol]; vp[n]; n++) ; + if (i >= n + 2) { + if (FF_STR_VOLUME_ID == 2) *tp++ = (TCHAR)'/'; + for (vl = 0; vl < n; *tp++ = (TCHAR)vp[vl], vl++) ; + if (FF_STR_VOLUME_ID == 1) *tp++ = (TCHAR)':'; + vl++; + } +#else /* Numeric volume ID */ + if (i >= 3) { + *tp++ = (TCHAR)'0' + CurrVol; + *tp++ = (TCHAR)':'; + vl = 2; + } +#endif + if (vl == 0) res = FR_NOT_ENOUGH_CORE; +#endif + /* Add current directory path */ + if (res == FR_OK) { + do *tp++ = buff[i++]; while (i < len); /* Copy stacked path string */ + } + } + FREE_NAMBUF(); + } + + *tp = 0; + LEAVE_FF(fs, res); +} + +#endif /* FF_FS_RPATH >= 2 */ +#endif /* FF_FS_RPATH >= 1 */ + + + +#if FF_FS_MINIMIZE <= 2 +/*-----------------------------------------------------------------------*/ +/* Seek File Read/Write Pointer */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_lseek ( + FIL* fp, /* Pointer to the file object */ + FSIZE_t ofs /* File pointer from top of file */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst, bcs; + LBA_t nsect; + FSIZE_t ifptr; +#if FF_USE_FASTSEEK + DWORD cl, pcl, ncl, tcl, tlen, ulen; + DWORD *tbl; + LBA_t dsc; +#endif + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res == FR_OK) res = (FRESULT)fp->err; +#if FF_FS_EXFAT && !FF_FS_READONLY + if (res == FR_OK && fs->fs_type == FS_EXFAT) { + res = fill_last_frag(&fp->obj, fp->clust, 0xFFFFFFFF); /* Fill last fragment on the FAT if needed */ + } +#endif + if (res != FR_OK) LEAVE_FF(fs, res); + +#if FF_USE_FASTSEEK + if (fp->cltbl) { /* Fast seek */ + if (ofs == CREATE_LINKMAP) { /* Create CLMT */ + tbl = fp->cltbl; + tlen = *tbl++; ulen = 2; /* Given table size and required table size */ + cl = fp->obj.sclust; /* Origin of the chain */ + if (cl != 0) { + do { + /* Get a fragment */ + tcl = cl; ncl = 0; ulen += 2; /* Top, length and used items */ + do { + pcl = cl; ncl++; + cl = get_fat(&fp->obj, cl); + if (cl <= 1) ABORT(fs, FR_INT_ERR); + if (cl == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + } while (cl == pcl + 1); + if (ulen <= tlen) { /* Store the length and top of the fragment */ + *tbl++ = ncl; *tbl++ = tcl; + } + } while (cl < fs->n_fatent); /* Repeat until end of chain */ + } + *fp->cltbl = ulen; /* Number of items used */ + if (ulen <= tlen) { + *tbl = 0; /* Terminate table */ + } else { + res = FR_NOT_ENOUGH_CORE; /* Given table size is smaller than required */ + } + } else { /* Fast seek */ + if (ofs > fp->obj.objsize) ofs = fp->obj.objsize; /* Clip offset at the file size */ + fp->fptr = ofs; /* Set file pointer */ + if (ofs > 0) { + fp->clust = clmt_clust(fp, ofs - 1); + dsc = clst2sect(fs, fp->clust); + if (dsc == 0) ABORT(fs, FR_INT_ERR); + dsc += (DWORD)((ofs - 1) / SS(fs)) & (fs->csize - 1); + if (fp->fptr % SS(fs) && dsc != fp->sect) { /* Refill sector cache if needed */ +#if !FF_FS_TINY +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, dsc, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Load current sector */ +#endif + fp->sect = dsc; + } + } + } + } else +#endif + + /* Normal Seek */ + { +#if FF_FS_EXFAT + if (fs->fs_type != FS_EXFAT && ofs >= 0x100000000) ofs = 0xFFFFFFFF; /* Clip at 4 GiB - 1 if at FATxx */ +#endif + if (ofs > fp->obj.objsize && (FF_FS_READONLY || !(fp->flag & FA_WRITE))) { /* In read-only mode, clip offset with the file size */ + ofs = fp->obj.objsize; + } + ifptr = fp->fptr; + fp->fptr = nsect = 0; + if (ofs > 0) { + bcs = (DWORD)fs->csize * SS(fs); /* Cluster size (byte) */ + if (ifptr > 0 && + (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */ + fp->fptr = (ifptr - 1) & ~(FSIZE_t)(bcs - 1); /* start from the current cluster */ + ofs -= fp->fptr; + clst = fp->clust; + } else { /* When seek to back cluster, */ + clst = fp->obj.sclust; /* start from the first cluster */ +#if !FF_FS_READONLY + if (clst == 0) { /* If no cluster chain, create a new chain */ + clst = create_chain(&fp->obj, 0); + if (clst == 1) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->obj.sclust = clst; + } +#endif + fp->clust = clst; + } + if (clst != 0) { + while (ofs > bcs) { /* Cluster following loop */ + ofs -= bcs; fp->fptr += bcs; +#if !FF_FS_READONLY + if (fp->flag & FA_WRITE) { /* Check if in write mode or not */ + if (FF_FS_EXFAT && fp->fptr > fp->obj.objsize) { /* No FAT chain object needs correct objsize to generate FAT value */ + fp->obj.objsize = fp->fptr; + fp->flag |= FA_MODIFIED; + } + clst = create_chain(&fp->obj, clst); /* Follow chain with forceed stretch */ + if (clst == 0) { /* Clip file size in case of disk full */ + ofs = 0; break; + } + } else +#endif + { + clst = get_fat(&fp->obj, clst); /* Follow cluster chain if not in write mode */ + } + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + if (clst <= 1 || clst >= fs->n_fatent) ABORT(fs, FR_INT_ERR); + fp->clust = clst; + } + fp->fptr += ofs; + if (ofs % SS(fs)) { + nsect = clst2sect(fs, clst); /* Current sector */ + if (nsect == 0) ABORT(fs, FR_INT_ERR); + nsect += (DWORD)(ofs / SS(fs)); + } + } + } + if (!FF_FS_READONLY && fp->fptr > fp->obj.objsize) { /* Set file change flag if the file size is extended */ + fp->obj.objsize = fp->fptr; + fp->flag |= FA_MODIFIED; + } + if (fp->fptr % SS(fs) && nsect != fp->sect) { /* Fill sector cache if needed */ +#if !FF_FS_TINY +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, nsect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Fill sector cache */ +#endif + fp->sect = nsect; + } + } + + LEAVE_FF(fs, res); +} + + + +#if FF_FS_MINIMIZE <= 1 +/*-----------------------------------------------------------------------*/ +/* Create a Directory Object */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_opendir ( + DIR* dp, /* Pointer to directory object to create */ + const TCHAR* path /* Pointer to the directory path */ +) +{ + FRESULT res; + FATFS *fs; + DEF_NAMBUF + + + if (!dp) return FR_INVALID_OBJECT; + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + if (res == FR_OK) { + dp->obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(dp, path); /* Follow the path to the directory */ + if (res == FR_OK) { /* Follow completed */ + if (!(dp->fn[NSFLAG] & NS_NONAME)) { /* It is not the origin directory itself */ + if (dp->obj.attr & AM_DIR) { /* This object is a sub-directory */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + dp->obj.c_scl = dp->obj.sclust; /* Get containing directory inforamation */ + dp->obj.c_size = ((DWORD)dp->obj.objsize & 0xFFFFFF00) | dp->obj.stat; + dp->obj.c_ofs = dp->blk_ofs; + init_alloc_info(fs, &dp->obj); /* Get object allocation info */ + } else +#endif + { + dp->obj.sclust = ld_clust(fs, dp->dir); /* Get object allocation info */ + } + } else { /* This object is a file */ + res = FR_NO_PATH; + } + } + if (res == FR_OK) { + dp->obj.id = fs->id; + res = dir_sdi(dp, 0); /* Rewind directory */ +#if FF_FS_LOCK != 0 + if (res == FR_OK) { + if (dp->obj.sclust != 0) { + dp->obj.lockid = inc_lock(dp, 0); /* Lock the sub directory */ + if (!dp->obj.lockid) res = FR_TOO_MANY_OPEN_FILES; + } else { + dp->obj.lockid = 0; /* Root directory need not to be locked */ + } + } +#endif + } + } + FREE_NAMBUF(); + if (res == FR_NO_FILE) res = FR_NO_PATH; + } + if (res != FR_OK) dp->obj.fs = 0; /* Invalidate the directory object if function faild */ + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Close Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_closedir ( + DIR *dp /* Pointer to the directory object to be closed */ +) +{ + FRESULT res; + FATFS *fs; + + + res = validate(&dp->obj, &fs); /* Check validity of the file object */ + if (res == FR_OK) { +#if FF_FS_LOCK != 0 + if (dp->obj.lockid) res = dec_lock(dp->obj.lockid); /* Decrement sub-directory open counter */ + if (res == FR_OK) dp->obj.fs = 0; /* Invalidate directory object */ +#else + dp->obj.fs = 0; /* Invalidate directory object */ +#endif +#if FF_FS_REENTRANT + unlock_fs(fs, FR_OK); /* Unlock volume */ +#endif + } + return res; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Read Directory Entries in Sequence */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_readdir ( + DIR* dp, /* Pointer to the open directory object */ + FILINFO* fno /* Pointer to file information to return */ +) +{ + FRESULT res; + FATFS *fs; + DEF_NAMBUF + + + res = validate(&dp->obj, &fs); /* Check validity of the directory object */ + if (res == FR_OK) { + if (!fno) { + res = dir_sdi(dp, 0); /* Rewind the directory object */ + } else { + INIT_NAMBUF(fs); + res = DIR_READ_FILE(dp); /* Read an item */ + if (res == FR_NO_FILE) res = FR_OK; /* Ignore end of directory */ + if (res == FR_OK) { /* A valid entry is found */ + get_fileinfo(dp, fno); /* Get the object information */ + res = dir_next(dp, 0); /* Increment index for next */ + if (res == FR_NO_FILE) res = FR_OK; /* Ignore end of directory now */ + } + FREE_NAMBUF(); + } + } + LEAVE_FF(fs, res); +} + + + +#if FF_USE_FIND +/*-----------------------------------------------------------------------*/ +/* Find Next File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_findnext ( + DIR* dp, /* Pointer to the open directory object */ + FILINFO* fno /* Pointer to the file information structure */ +) +{ + FRESULT res; + + + for (;;) { + res = f_readdir(dp, fno); /* Get a directory item */ + if (res != FR_OK || !fno || !fno->fname[0]) break; /* Terminate if any error or end of directory */ + if (pattern_match(dp->pat, fno->fname, 0, FIND_RECURS)) break; /* Test for the file name */ +#if FF_USE_LFN && FF_USE_FIND == 2 + if (pattern_match(dp->pat, fno->altname, 0, FIND_RECURS)) break; /* Test for alternative name if exist */ +#endif + } + return res; +} + + + +/*-----------------------------------------------------------------------*/ +/* Find First File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_findfirst ( + DIR* dp, /* Pointer to the blank directory object */ + FILINFO* fno, /* Pointer to the file information structure */ + const TCHAR* path, /* Pointer to the directory to open */ + const TCHAR* pattern /* Pointer to the matching pattern */ +) +{ + FRESULT res; + + + dp->pat = pattern; /* Save pointer to pattern string */ + res = f_opendir(dp, path); /* Open the target directory */ + if (res == FR_OK) { + res = f_findnext(dp, fno); /* Find the first item */ + } + return res; +} + +#endif /* FF_USE_FIND */ + + + +#if FF_FS_MINIMIZE == 0 +/*-----------------------------------------------------------------------*/ +/* Get File Status */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_stat ( + const TCHAR* path, /* Pointer to the file path */ + FILINFO* fno /* Pointer to file information to return */ +) +{ + FRESULT res; + DIR dj; + DEF_NAMBUF + + + /* Get logical drive */ + res = mount_volume(&path, &dj.obj.fs, 0); + if (res == FR_OK) { + INIT_NAMBUF(dj.obj.fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) { /* Follow completed */ + if (dj.fn[NSFLAG] & NS_NONAME) { /* It is origin directory */ + res = FR_INVALID_NAME; + } else { /* Found an object */ + if (fno) get_fileinfo(&dj, fno); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(dj.obj.fs, res); +} + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Get Number of Free Clusters */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_getfree ( + const TCHAR* path, /* Logical drive number */ + DWORD* nclst, /* Pointer to a variable to return number of free clusters */ + FATFS** fatfs /* Pointer to return pointer to corresponding filesystem object */ +) +{ + FRESULT res; + FATFS *fs; + DWORD nfree, clst, stat; + LBA_t sect; + UINT i; + FFOBJID obj; + + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + if (res == FR_OK) { + *fatfs = fs; /* Return ptr to the fs object */ + /* If free_clst is valid, return it without full FAT scan */ + if (fs->free_clst <= fs->n_fatent - 2) { + *nclst = fs->free_clst; + } else { + /* Scan FAT to obtain number of free clusters */ + nfree = 0; + if (fs->fs_type == FS_FAT12) { /* FAT12: Scan bit field FAT entries */ + clst = 2; obj.fs = fs; + do { + stat = get_fat(&obj, clst); + if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } + if (stat == 1) { res = FR_INT_ERR; break; } + if (stat == 0) nfree++; + } while (++clst < fs->n_fatent); + } else { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* exFAT: Scan allocation bitmap */ + BYTE bm; + UINT b; + + clst = fs->n_fatent - 2; /* Number of clusters */ + sect = fs->bitbase; /* Bitmap sector */ + i = 0; /* Offset in the sector */ + do { /* Counts numbuer of bits with zero in the bitmap */ + if (i == 0) { + res = move_window(fs, sect++); + if (res != FR_OK) break; + } + for (b = 8, bm = fs->win[i]; b && clst; b--, clst--) { + if (!(bm & 1)) nfree++; + bm >>= 1; + } + i = (i + 1) % SS(fs); + } while (clst); + } else +#endif + { /* FAT16/32: Scan WORD/DWORD FAT entries */ + clst = fs->n_fatent; /* Number of entries */ + sect = fs->fatbase; /* Top of the FAT */ + i = 0; /* Offset in the sector */ + do { /* Counts numbuer of entries with zero in the FAT */ + if (i == 0) { + res = move_window(fs, sect++); + if (res != FR_OK) break; + } + if (fs->fs_type == FS_FAT16) { + if (ld_word(fs->win + i) == 0) nfree++; + i += 2; + } else { + if ((ld_dword(fs->win + i) & 0x0FFFFFFF) == 0) nfree++; + i += 4; + } + i %= SS(fs); + } while (--clst); + } + } + if (res == FR_OK) { /* Update parameters if succeeded */ + *nclst = nfree; /* Return the free clusters */ + fs->free_clst = nfree; /* Now free_clst is valid */ + fs->fsi_flag |= 1; /* FAT32: FSInfo is to be updated */ + } + } + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Truncate File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_truncate ( + FIL* fp /* Pointer to the file object */ +) +{ + FRESULT res; + FATFS *fs; + DWORD ncl; + + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); + if (!(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + + if (fp->fptr < fp->obj.objsize) { /* Process when fptr is not on the eof */ + if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */ + res = remove_chain(&fp->obj, fp->obj.sclust, 0); + fp->obj.sclust = 0; + } else { /* When truncate a part of the file, remove remaining clusters */ + ncl = get_fat(&fp->obj, fp->clust); + res = FR_OK; + if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (ncl == 1) res = FR_INT_ERR; + if (res == FR_OK && ncl < fs->n_fatent) { + res = remove_chain(&fp->obj, ncl, fp->clust); + } + } + fp->obj.objsize = fp->fptr; /* Set file size to current read/write point */ + fp->flag |= FA_MODIFIED; +#if !FF_FS_TINY + if (res == FR_OK && (fp->flag & FA_DIRTY)) { + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) { + res = FR_DISK_ERR; + } else { + fp->flag &= (BYTE)~FA_DIRTY; + } + } +#endif + if (res != FR_OK) ABORT(fs, res); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Delete a File/Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_unlink ( + const TCHAR* path /* Pointer to the file or directory path */ +) +{ + FRESULT res; + DIR dj, sdj; + DWORD dclst = 0; + FATFS *fs; +#if FF_FS_EXFAT + FFOBJID obj; +#endif + DEF_NAMBUF + + + /* Get logical drive */ + res = mount_volume(&path, &fs, FA_WRITE); + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (FF_FS_RPATH && res == FR_OK && (dj.fn[NSFLAG] & NS_DOT)) { + res = FR_INVALID_NAME; /* Cannot remove dot entry */ + } +#if FF_FS_LOCK != 0 + if (res == FR_OK) res = chk_lock(&dj, 2); /* Check if it is an open object */ +#endif + if (res == FR_OK) { /* The object is accessible */ + if (dj.fn[NSFLAG] & NS_NONAME) { + res = FR_INVALID_NAME; /* Cannot remove the origin directory */ + } else { + if (dj.obj.attr & AM_RDO) { + res = FR_DENIED; /* Cannot remove R/O object */ + } + } + if (res == FR_OK) { +#if FF_FS_EXFAT + obj.fs = fs; + if (fs->fs_type == FS_EXFAT) { + init_alloc_info(fs, &obj); + dclst = obj.sclust; + } else +#endif + { + dclst = ld_clust(fs, dj.dir); + } + if (dj.obj.attr & AM_DIR) { /* Is it a sub-directory? */ +#if FF_FS_RPATH != 0 + if (dclst == fs->cdir) { /* Is it the current directory? */ + res = FR_DENIED; + } else +#endif + { + sdj.obj.fs = fs; /* Open the sub-directory */ + sdj.obj.sclust = dclst; +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + sdj.obj.objsize = obj.objsize; + sdj.obj.stat = obj.stat; + } +#endif + res = dir_sdi(&sdj, 0); + if (res == FR_OK) { + res = DIR_READ_FILE(&sdj); /* Test if the directory is empty */ + if (res == FR_OK) res = FR_DENIED; /* Not empty? */ + if (res == FR_NO_FILE) res = FR_OK; /* Empty? */ + } + } + } + } + if (res == FR_OK) { + res = dir_remove(&dj); /* Remove the directory entry */ + if (res == FR_OK && dclst != 0) { /* Remove the cluster chain if exist */ +#if FF_FS_EXFAT + res = remove_chain(&obj, dclst, 0); +#else + res = remove_chain(&dj.obj, dclst, 0); +#endif + } + if (res == FR_OK) res = sync_fs(fs); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Create a Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_mkdir ( + const TCHAR* path /* Pointer to the directory path */ +) +{ + FRESULT res; + DIR dj; + FFOBJID sobj; + FATFS *fs; + DWORD dcl, pcl, tm; + DEF_NAMBUF + + + res = mount_volume(&path, &fs, FA_WRITE); /* Get logical drive */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK) res = FR_EXIST; /* Name collision? */ + if (FF_FS_RPATH && res == FR_NO_FILE && (dj.fn[NSFLAG] & NS_DOT)) { /* Invalid name? */ + res = FR_INVALID_NAME; + } + if (res == FR_NO_FILE) { /* It is clear to create a new directory */ + sobj.fs = fs; /* New object id to create a new chain */ + dcl = create_chain(&sobj, 0); /* Allocate a cluster for the new directory */ + res = FR_OK; + if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster? */ + if (dcl == 1) res = FR_INT_ERR; /* Any insanity? */ + if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR; /* Disk error? */ + tm = GET_FATTIME(); + if (res == FR_OK) { + res = dir_clear(fs, dcl); /* Clean up the new table */ + if (res == FR_OK) { + if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { /* Create dot entries (FAT only) */ + memset(fs->win + DIR_Name, ' ', 11); /* Create "." entry */ + fs->win[DIR_Name] = '.'; + fs->win[DIR_Attr] = AM_DIR; + st_dword(fs->win + DIR_ModTime, tm); + st_clust(fs, fs->win, dcl); + memcpy(fs->win + SZDIRE, fs->win, SZDIRE); /* Create ".." entry */ + fs->win[SZDIRE + 1] = '.'; pcl = dj.obj.sclust; + st_clust(fs, fs->win + SZDIRE, pcl); + fs->wflag = 1; + } + res = dir_register(&dj); /* Register the object to the parent directoy */ + } + } + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* Initialize directory entry block */ + st_dword(fs->dirbuf + XDIR_ModTime, tm); /* Created time */ + st_dword(fs->dirbuf + XDIR_FstClus, dcl); /* Table start cluster */ + st_dword(fs->dirbuf + XDIR_FileSize, (DWORD)fs->csize * SS(fs)); /* Directory size needs to be valid */ + st_dword(fs->dirbuf + XDIR_ValidFileSize, (DWORD)fs->csize * SS(fs)); + fs->dirbuf[XDIR_GenFlags] = 3; /* Initialize the object flag */ + fs->dirbuf[XDIR_Attr] = AM_DIR; /* Attribute */ + res = store_xdir(&dj); + } else +#endif + { + st_dword(dj.dir + DIR_ModTime, tm); /* Created time */ + st_clust(fs, dj.dir, dcl); /* Table start cluster */ + dj.dir[DIR_Attr] = AM_DIR; /* Attribute */ + fs->wflag = 1; + } + if (res == FR_OK) { + res = sync_fs(fs); + } + } else { + remove_chain(&sobj, dcl, 0); /* Could not register, remove the allocated cluster */ + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Rename a File/Directory */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_rename ( + const TCHAR* path_old, /* Pointer to the object name to be renamed */ + const TCHAR* path_new /* Pointer to the new name */ +) +{ + FRESULT res; + DIR djo, djn; + FATFS *fs; + BYTE buf[FF_FS_EXFAT ? SZDIRE * 2 : SZDIRE], *dir; + LBA_t sect; + DEF_NAMBUF + + + get_ldnumber(&path_new); /* Snip the drive number of new name off */ + res = mount_volume(&path_old, &fs, FA_WRITE); /* Get logical drive of the old object */ + if (res == FR_OK) { + djo.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&djo, path_old); /* Check old object */ + if (res == FR_OK && (djo.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check validity of name */ +#if FF_FS_LOCK != 0 + if (res == FR_OK) { + res = chk_lock(&djo, 2); + } +#endif + if (res == FR_OK) { /* Object to be renamed is found */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* At exFAT volume */ + BYTE nf, nn; + WORD nh; + + memcpy(buf, fs->dirbuf, SZDIRE * 2); /* Save 85+C0 entry of old object */ + memcpy(&djn, &djo, sizeof djo); + res = follow_path(&djn, path_new); /* Make sure if new object name is not in use */ + if (res == FR_OK) { /* Is new name already in use by any other object? */ + res = (djn.obj.sclust == djo.obj.sclust && djn.dptr == djo.dptr) ? FR_NO_FILE : FR_EXIST; + } + if (res == FR_NO_FILE) { /* It is a valid path and no name collision */ + res = dir_register(&djn); /* Register the new entry */ + if (res == FR_OK) { + nf = fs->dirbuf[XDIR_NumSec]; nn = fs->dirbuf[XDIR_NumName]; + nh = ld_word(fs->dirbuf + XDIR_NameHash); + memcpy(fs->dirbuf, buf, SZDIRE * 2); /* Restore 85+C0 entry */ + fs->dirbuf[XDIR_NumSec] = nf; fs->dirbuf[XDIR_NumName] = nn; + st_word(fs->dirbuf + XDIR_NameHash, nh); + if (!(fs->dirbuf[XDIR_Attr] & AM_DIR)) fs->dirbuf[XDIR_Attr] |= AM_ARC; /* Set archive attribute if it is a file */ +/* Start of critical section where an interruption can cause a cross-link */ + res = store_xdir(&djn); + } + } + } else +#endif + { /* At FAT/FAT32 volume */ + memcpy(buf, djo.dir, SZDIRE); /* Save directory entry of the object */ + memcpy(&djn, &djo, sizeof (DIR)); /* Duplicate the directory object */ + res = follow_path(&djn, path_new); /* Make sure if new object name is not in use */ + if (res == FR_OK) { /* Is new name already in use by any other object? */ + res = (djn.obj.sclust == djo.obj.sclust && djn.dptr == djo.dptr) ? FR_NO_FILE : FR_EXIST; + } + if (res == FR_NO_FILE) { /* It is a valid path and no name collision */ + res = dir_register(&djn); /* Register the new entry */ + if (res == FR_OK) { + dir = djn.dir; /* Copy directory entry of the object except name */ + memcpy(dir + 13, buf + 13, SZDIRE - 13); + dir[DIR_Attr] = buf[DIR_Attr]; + if (!(dir[DIR_Attr] & AM_DIR)) dir[DIR_Attr] |= AM_ARC; /* Set archive attribute if it is a file */ + fs->wflag = 1; + if ((dir[DIR_Attr] & AM_DIR) && djo.obj.sclust != djn.obj.sclust) { /* Update .. entry in the sub-directory if needed */ + sect = clst2sect(fs, ld_clust(fs, dir)); + if (sect == 0) { + res = FR_INT_ERR; + } else { +/* Start of critical section where an interruption can cause a cross-link */ + res = move_window(fs, sect); + dir = fs->win + SZDIRE * 1; /* Ptr to .. entry */ + if (res == FR_OK && dir[1] == '.') { + st_clust(fs, dir, djn.obj.sclust); + fs->wflag = 1; + } + } + } + } + } + } + if (res == FR_OK) { + res = dir_remove(&djo); /* Remove old entry */ + if (res == FR_OK) { + res = sync_fs(fs); + } + } +/* End of the critical section */ + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_FS_MINIMIZE == 0 */ +#endif /* FF_FS_MINIMIZE <= 1 */ +#endif /* FF_FS_MINIMIZE <= 2 */ + + + +#if FF_USE_CHMOD && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Change Attribute */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_chmod ( + const TCHAR* path, /* Pointer to the file path */ + BYTE attr, /* Attribute bits */ + BYTE mask /* Attribute mask to change */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + DEF_NAMBUF + + + res = mount_volume(&path, &fs, FA_WRITE); /* Get logical drive */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK && (dj.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check object validity */ + if (res == FR_OK) { + mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */ +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + fs->dirbuf[XDIR_Attr] = (attr & mask) | (fs->dirbuf[XDIR_Attr] & (BYTE)~mask); /* Apply attribute change */ + res = store_xdir(&dj); + } else +#endif + { + dj.dir[DIR_Attr] = (attr & mask) | (dj.dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */ + fs->wflag = 1; + } + if (res == FR_OK) { + res = sync_fs(fs); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Change Timestamp */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_utime ( + const TCHAR* path, /* Pointer to the file/directory name */ + const FILINFO* fno /* Pointer to the timestamp to be set */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + DEF_NAMBUF + + + res = mount_volume(&path, &fs, FA_WRITE); /* Get logical drive */ + if (res == FR_OK) { + dj.obj.fs = fs; + INIT_NAMBUF(fs); + res = follow_path(&dj, path); /* Follow the file path */ + if (res == FR_OK && (dj.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check object validity */ + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + st_dword(fs->dirbuf + XDIR_ModTime, (DWORD)fno->fdate << 16 | fno->ftime); + res = store_xdir(&dj); + } else +#endif + { + st_dword(dj.dir + DIR_ModTime, (DWORD)fno->fdate << 16 | fno->ftime); + fs->wflag = 1; + } + if (res == FR_OK) { + res = sync_fs(fs); + } + } + FREE_NAMBUF(); + } + + LEAVE_FF(fs, res); +} + +#endif /* FF_USE_CHMOD && !FF_FS_READONLY */ + + + +#if FF_USE_LABEL +/*-----------------------------------------------------------------------*/ +/* Get Volume Label */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_getlabel ( + const TCHAR* path, /* Logical drive number */ + TCHAR* label, /* Buffer to store the volume label */ + DWORD* vsn /* Variable to store the volume serial number */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + UINT si, di; + WCHAR wc; + + /* Get logical drive */ + res = mount_volume(&path, &fs, 0); + + /* Get volume label */ + if (res == FR_OK && label) { + dj.obj.fs = fs; dj.obj.sclust = 0; /* Open root directory */ + res = dir_sdi(&dj, 0); + if (res == FR_OK) { + res = DIR_READ_LABEL(&dj); /* Find a volume label entry */ + if (res == FR_OK) { +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + WCHAR hs; + UINT nw; + + for (si = di = hs = 0; si < dj.dir[XDIR_NumLabel]; si++) { /* Extract volume label from 83 entry */ + wc = ld_word(dj.dir + XDIR_Label + si * 2); + if (hs == 0 && IsSurrogate(wc)) { /* Is the code a surrogate? */ + hs = wc; continue; + } + nw = put_utf((DWORD)hs << 16 | wc, &label[di], 4); /* Store it in API encoding */ + if (nw == 0) { di = 0; break; } /* Encode error? */ + di += nw; + hs = 0; + } + if (hs != 0) di = 0; /* Broken surrogate pair? */ + label[di] = 0; + } else +#endif + { + si = di = 0; /* Extract volume label from AM_VOL entry */ + while (si < 11) { + wc = dj.dir[si++]; +#if FF_USE_LFN && FF_LFN_UNICODE >= 1 /* Unicode output */ + if (dbc_1st((BYTE)wc) && si < 11) wc = wc << 8 | dj.dir[si++]; /* Is it a DBC? */ + wc = ff_oem2uni(wc, CODEPAGE); /* Convert it into Unicode */ + if (wc == 0) { di = 0; break; } /* Invalid char in current code page? */ + di += put_utf(wc, &label[di], 4); /* Store it in Unicode */ +#else /* ANSI/OEM output */ + label[di++] = (TCHAR)wc; +#endif + } + do { /* Truncate trailing spaces */ + label[di] = 0; + if (di == 0) break; + } while (label[--di] == ' '); + } + } + } + if (res == FR_NO_FILE) { /* No label entry and return nul string */ + label[0] = 0; + res = FR_OK; + } + } + + /* Get volume serial number */ + if (res == FR_OK && vsn) { + res = move_window(fs, fs->volbase); + if (res == FR_OK) { + switch (fs->fs_type) { + case FS_EXFAT: + di = BPB_VolIDEx; + break; + + case FS_FAT32: + di = BS_VolID32; + break; + + default: + di = BS_VolID; + } + *vsn = ld_dword(fs->win + di); + } + } + + LEAVE_FF(fs, res); +} + + + +#if !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Set Volume Label */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_setlabel ( + const TCHAR* label /* Volume label to set with heading logical drive number */ +) +{ + FRESULT res; + DIR dj; + FATFS *fs; + BYTE dirvn[22]; + UINT di; + WCHAR wc; + static const char badchr[18] = "+.,;=[]" "/*:<>|\\\"\?\x7F"; /* [0..16] for FAT, [7..16] for exFAT */ +#if FF_USE_LFN + DWORD dc; +#endif + + /* Get logical drive */ + res = mount_volume(&label, &fs, FA_WRITE); + if (res != FR_OK) LEAVE_FF(fs, res); + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */ + memset(dirvn, 0, 22); + di = 0; + while ((UINT)*label >= ' ') { /* Create volume label */ + dc = tchar2uni(&label); /* Get a Unicode character */ + if (dc >= 0x10000) { + if (dc == 0xFFFFFFFF || di >= 10) { /* Wrong surrogate or buffer overflow */ + dc = 0; + } else { + st_word(dirvn + di * 2, (WCHAR)(dc >> 16)); di++; + } + } + if (dc == 0 || strchr(&badchr[7], (int)dc) || di >= 11) { /* Check validity of the volume label */ + LEAVE_FF(fs, FR_INVALID_NAME); + } + st_word(dirvn + di * 2, (WCHAR)dc); di++; + } + } else +#endif + { /* On the FAT/FAT32 volume */ + memset(dirvn, ' ', 11); + di = 0; + while ((UINT)*label >= ' ') { /* Create volume label */ +#if FF_USE_LFN + dc = tchar2uni(&label); + wc = (dc < 0x10000) ? ff_uni2oem(ff_wtoupper(dc), CODEPAGE) : 0; +#else /* ANSI/OEM input */ + wc = (BYTE)*label++; + if (dbc_1st((BYTE)wc)) wc = dbc_2nd((BYTE)*label) ? wc << 8 | (BYTE)*label++ : 0; + if (IsLower(wc)) wc -= 0x20; /* To upper ASCII characters */ +#if FF_CODE_PAGE == 0 + if (ExCvt && wc >= 0x80) wc = ExCvt[wc - 0x80]; /* To upper extended characters (SBCS cfg) */ +#elif FF_CODE_PAGE < 900 + if (wc >= 0x80) wc = ExCvt[wc - 0x80]; /* To upper extended characters (SBCS cfg) */ +#endif +#endif + if (wc == 0 || strchr(&badchr[0], (int)wc) || di >= (UINT)((wc >= 0x100) ? 10 : 11)) { /* Reject invalid characters for volume label */ + LEAVE_FF(fs, FR_INVALID_NAME); + } + if (wc >= 0x100) dirvn[di++] = (BYTE)(wc >> 8); + dirvn[di++] = (BYTE)wc; + } + if (dirvn[0] == DDEM) LEAVE_FF(fs, FR_INVALID_NAME); /* Reject illegal name (heading DDEM) */ + while (di && dirvn[di - 1] == ' ') di--; /* Snip trailing spaces */ + } + + /* Set volume label */ + dj.obj.fs = fs; dj.obj.sclust = 0; /* Open root directory */ + res = dir_sdi(&dj, 0); + if (res == FR_OK) { + res = DIR_READ_LABEL(&dj); /* Get volume label entry */ + if (res == FR_OK) { + if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { + dj.dir[XDIR_NumLabel] = (BYTE)di; /* Change the volume label */ + memcpy(dj.dir + XDIR_Label, dirvn, 22); + } else { + if (di != 0) { + memcpy(dj.dir, dirvn, 11); /* Change the volume label */ + } else { + dj.dir[DIR_Name] = DDEM; /* Remove the volume label */ + } + } + fs->wflag = 1; + res = sync_fs(fs); + } else { /* No volume label entry or an error */ + if (res == FR_NO_FILE) { + res = FR_OK; + if (di != 0) { /* Create a volume label entry */ + res = dir_alloc(&dj, 1); /* Allocate an entry */ + if (res == FR_OK) { + memset(dj.dir, 0, SZDIRE); /* Clean the entry */ + if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { + dj.dir[XDIR_Type] = ET_VLABEL; /* Create volume label entry */ + dj.dir[XDIR_NumLabel] = (BYTE)di; + memcpy(dj.dir + XDIR_Label, dirvn, 22); + } else { + dj.dir[DIR_Attr] = AM_VOL; /* Create volume label entry */ + memcpy(dj.dir, dirvn, 11); + } + fs->wflag = 1; + res = sync_fs(fs); + } + } + } + } + } + + LEAVE_FF(fs, res); +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_USE_LABEL */ + + + +#if FF_USE_EXPAND && !FF_FS_READONLY +/*-----------------------------------------------------------------------*/ +/* Allocate a Contiguous Blocks to the File */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_expand ( + FIL* fp, /* Pointer to the file object */ + FSIZE_t fsz, /* File size to be expanded to */ + BYTE opt /* Operation mode 0:Find and prepare or 1:Find and allocate */ +) +{ + FRESULT res; + FATFS *fs; + DWORD n, clst, stcl, scl, ncl, tcl, lclst; + + + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); + if (fsz == 0 || fp->obj.objsize != 0 || !(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); +#if FF_FS_EXFAT + if (fs->fs_type != FS_EXFAT && fsz >= 0x100000000) LEAVE_FF(fs, FR_DENIED); /* Check if in size limit */ +#endif + n = (DWORD)fs->csize * SS(fs); /* Cluster size */ + tcl = (DWORD)(fsz / n) + ((fsz & (n - 1)) ? 1 : 0); /* Number of clusters required */ + stcl = fs->last_clst; lclst = 0; + if (stcl < 2 || stcl >= fs->n_fatent) stcl = 2; + +#if FF_FS_EXFAT + if (fs->fs_type == FS_EXFAT) { + scl = find_bitmap(fs, stcl, tcl); /* Find a contiguous cluster block */ + if (scl == 0) res = FR_DENIED; /* No contiguous cluster block was found */ + if (scl == 0xFFFFFFFF) res = FR_DISK_ERR; + if (res == FR_OK) { /* A contiguous free area is found */ + if (opt) { /* Allocate it now */ + res = change_bitmap(fs, scl, tcl, 1); /* Mark the cluster block 'in use' */ + lclst = scl + tcl - 1; + } else { /* Set it as suggested point for next allocation */ + lclst = scl - 1; + } + } + } else +#endif + { + scl = clst = stcl; ncl = 0; + for (;;) { /* Find a contiguous cluster block */ + n = get_fat(&fp->obj, clst); + if (++clst >= fs->n_fatent) clst = 2; + if (n == 1) { res = FR_INT_ERR; break; } + if (n == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } + if (n == 0) { /* Is it a free cluster? */ + if (++ncl == tcl) break; /* Break if a contiguous cluster block is found */ + } else { + scl = clst; ncl = 0; /* Not a free cluster */ + } + if (clst == stcl) { res = FR_DENIED; break; } /* No contiguous cluster? */ + } + if (res == FR_OK) { /* A contiguous free area is found */ + if (opt) { /* Allocate it now */ + for (clst = scl, n = tcl; n; clst++, n--) { /* Create a cluster chain on the FAT */ + res = put_fat(fs, clst, (n == 1) ? 0xFFFFFFFF : clst + 1); + if (res != FR_OK) break; + lclst = clst; + } + } else { /* Set it as suggested point for next allocation */ + lclst = scl - 1; + } + } + } + + if (res == FR_OK) { + fs->last_clst = lclst; /* Set suggested start cluster to start next */ + if (opt) { /* Is it allocated now? */ + fp->obj.sclust = scl; /* Update object allocation information */ + fp->obj.objsize = fsz; + if (FF_FS_EXFAT) fp->obj.stat = 2; /* Set status 'contiguous chain' */ + fp->flag |= FA_MODIFIED; + if (fs->free_clst <= fs->n_fatent - 2) { /* Update FSINFO */ + fs->free_clst -= tcl; + fs->fsi_flag |= 1; + } + } + } + + LEAVE_FF(fs, res); +} + +#endif /* FF_USE_EXPAND && !FF_FS_READONLY */ + + + +#if FF_USE_FORWARD +/*-----------------------------------------------------------------------*/ +/* Forward Data to the Stream Directly */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_forward ( + FIL* fp, /* Pointer to the file object */ + UINT (*func)(const BYTE*,UINT), /* Pointer to the streaming function */ + UINT btf, /* Number of bytes to forward */ + UINT* bf /* Pointer to number of bytes forwarded */ +) +{ + FRESULT res; + FATFS *fs; + DWORD clst; + LBA_t sect; + FSIZE_t remain; + UINT rcnt, csect; + BYTE *dbuf; + + + *bf = 0; /* Clear transfer byte counter */ + res = validate(&fp->obj, &fs); /* Check validity of the file object */ + if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); + if (!(fp->flag & FA_READ)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */ + + remain = fp->obj.objsize - fp->fptr; + if (btf > remain) btf = (UINT)remain; /* Truncate btf by remaining bytes */ + + for ( ; btf > 0 && (*func)(0, 0); fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) { /* Repeat until all data transferred or stream goes busy */ + csect = (UINT)(fp->fptr / SS(fs) & (fs->csize - 1)); /* Sector offset in the cluster */ + if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */ + if (csect == 0) { /* On the cluster boundary? */ + clst = (fp->fptr == 0) ? /* On the top of the file? */ + fp->obj.sclust : get_fat(&fp->obj, fp->clust); + if (clst <= 1) ABORT(fs, FR_INT_ERR); + if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR); + fp->clust = clst; /* Update current cluster */ + } + } + sect = clst2sect(fs, fp->clust); /* Get current data sector */ + if (sect == 0) ABORT(fs, FR_INT_ERR); + sect += csect; +#if FF_FS_TINY + if (move_window(fs, sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window to the file data */ + dbuf = fs->win; +#else + if (fp->sect != sect) { /* Fill sector cache with file data */ +#if !FF_FS_READONLY + if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */ + if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + fp->flag &= (BYTE)~FA_DIRTY; + } +#endif + if (disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); + } + dbuf = fp->buf; +#endif + fp->sect = sect; + rcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes remains in the sector */ + if (rcnt > btf) rcnt = btf; /* Clip it by btr if needed */ + rcnt = (*func)(dbuf + ((UINT)fp->fptr % SS(fs)), rcnt); /* Forward the file data */ + if (rcnt == 0) ABORT(fs, FR_INT_ERR); + } + + LEAVE_FF(fs, FR_OK); +} +#endif /* FF_USE_FORWARD */ + + + +#if !FF_FS_READONLY && FF_USE_MKFS +/*-----------------------------------------------------------------------*/ +/* Create FAT/exFAT volume (with sub-functions) */ +/*-----------------------------------------------------------------------*/ + +#define N_SEC_TRACK 63 /* Sectors per track for determination of drive CHS */ +#define GPT_ALIGN 0x100000 /* Alignment of partitions in GPT [byte] (>=128KB) */ +#define GPT_ITEMS 128 /* Number of GPT table size (>=128, sector aligned) */ + + +/* Create partitions on the physical drive in format of MBR or GPT */ + +static FRESULT create_partition ( + BYTE drv, /* Physical drive number */ + const LBA_t plst[], /* Partition list */ + BYTE sys, /* System ID (for only MBR, temp setting) */ + BYTE* buf /* Working buffer for a sector */ +) +{ + UINT i, cy; + LBA_t sz_drv; + DWORD sz_drv32, nxt_alloc32, sz_part32; + BYTE *pte; + BYTE hd, n_hd, sc, n_sc; + + /* Get physical drive size */ + if (disk_ioctl(drv, GET_SECTOR_COUNT, &sz_drv) != RES_OK) return FR_DISK_ERR; + +#if FF_LBA64 + if (sz_drv >= FF_MIN_GPT) { /* Create partitions in GPT format */ + WORD ss; + UINT sz_ptbl, pi, si, ofs; + DWORD bcc, rnd, align; + QWORD nxt_alloc, sz_part, sz_pool, top_bpt; + static const BYTE gpt_mbr[16] = {0x00, 0x00, 0x02, 0x00, 0xEE, 0xFE, 0xFF, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}; + +#if FF_MAX_SS != FF_MIN_SS + if (disk_ioctl(drv, GET_SECTOR_SIZE, &ss) != RES_OK) return FR_DISK_ERR; /* Get sector size */ + if (ss > FF_MAX_SS || ss < FF_MIN_SS || (ss & (ss - 1))) return FR_DISK_ERR; +#else + ss = FF_MAX_SS; +#endif + rnd = (DWORD)sz_drv + GET_FATTIME(); /* Random seed */ + align = GPT_ALIGN / ss; /* Partition alignment for GPT [sector] */ + sz_ptbl = GPT_ITEMS * SZ_GPTE / ss; /* Size of partition table [sector] */ + top_bpt = sz_drv - sz_ptbl - 1; /* Backup partiiton table start sector */ + nxt_alloc = 2 + sz_ptbl; /* First allocatable sector */ + sz_pool = top_bpt - nxt_alloc; /* Size of allocatable area */ + bcc = 0xFFFFFFFF; sz_part = 1; + pi = si = 0; /* partition table index, size table index */ + do { + if (pi * SZ_GPTE % ss == 0) memset(buf, 0, ss); /* Clean the buffer if needed */ + if (sz_part != 0) { /* Is the size table not termintated? */ + nxt_alloc = (nxt_alloc + align - 1) & ((QWORD)0 - align); /* Align partition start */ + sz_part = plst[si++]; /* Get a partition size */ + if (sz_part <= 100) { /* Is the size in percentage? */ + sz_part = sz_pool * sz_part / 100; + sz_part = (sz_part + align - 1) & ((QWORD)0 - align); /* Align partition end (only if in percentage) */ + } + if (nxt_alloc + sz_part > top_bpt) { /* Clip the size at end of the pool */ + sz_part = (nxt_alloc < top_bpt) ? top_bpt - nxt_alloc : 0; + } + } + if (sz_part != 0) { /* Add a partition? */ + ofs = pi * SZ_GPTE % ss; + memcpy(buf + ofs + GPTE_PtGuid, GUID_MS_Basic, 16); /* Set partition GUID (Microsoft Basic Data) */ + rnd = make_rand(rnd, buf + ofs + GPTE_UpGuid, 16); /* Set unique partition GUID */ + st_qword(buf + ofs + GPTE_FstLba, nxt_alloc); /* Set partition start sector */ + st_qword(buf + ofs + GPTE_LstLba, nxt_alloc + sz_part - 1); /* Set partition end sector */ + nxt_alloc += sz_part; /* Next allocatable sector */ + } + if ((pi + 1) * SZ_GPTE % ss == 0) { /* Write the buffer if it is filled up */ + for (i = 0; i < ss; bcc = crc32(bcc, buf[i++])) ; /* Calculate table check sum */ + if (disk_write(drv, buf, 2 + pi * SZ_GPTE / ss, 1) != RES_OK) return FR_DISK_ERR; /* Write to primary table */ + if (disk_write(drv, buf, top_bpt + pi * SZ_GPTE / ss, 1) != RES_OK) return FR_DISK_ERR; /* Write to secondary table */ + } + } while (++pi < GPT_ITEMS); + + /* Create primary GPT header */ + memset(buf, 0, ss); + memcpy(buf + GPTH_Sign, "EFI PART" "\0\0\1\0" "\x5C\0\0", 16); /* Signature, version (1.0) and size (92) */ + st_dword(buf + GPTH_PtBcc, ~bcc); /* Table check sum */ + st_qword(buf + GPTH_CurLba, 1); /* LBA of this header */ + st_qword(buf + GPTH_BakLba, sz_drv - 1); /* LBA of secondary header */ + st_qword(buf + GPTH_FstLba, 2 + sz_ptbl); /* LBA of first allocatable sector */ + st_qword(buf + GPTH_LstLba, top_bpt - 1); /* LBA of last allocatable sector */ + st_dword(buf + GPTH_PteSize, SZ_GPTE); /* Size of a table entry */ + st_dword(buf + GPTH_PtNum, GPT_ITEMS); /* Number of table entries */ + st_dword(buf + GPTH_PtOfs, 2); /* LBA of this table */ + rnd = make_rand(rnd, buf + GPTH_DskGuid, 16); /* Disk GUID */ + for (i = 0, bcc= 0xFFFFFFFF; i < 92; bcc = crc32(bcc, buf[i++])) ; /* Calculate header check sum */ + st_dword(buf + GPTH_Bcc, ~bcc); /* Header check sum */ + if (disk_write(drv, buf, 1, 1) != RES_OK) return FR_DISK_ERR; + + /* Create secondary GPT header */ + st_qword(buf + GPTH_CurLba, sz_drv - 1); /* LBA of this header */ + st_qword(buf + GPTH_BakLba, 1); /* LBA of primary header */ + st_qword(buf + GPTH_PtOfs, top_bpt); /* LBA of this table */ + st_dword(buf + GPTH_Bcc, 0); + for (i = 0, bcc= 0xFFFFFFFF; i < 92; bcc = crc32(bcc, buf[i++])) ; /* Calculate header check sum */ + st_dword(buf + GPTH_Bcc, ~bcc); /* Header check sum */ + if (disk_write(drv, buf, sz_drv - 1, 1) != RES_OK) return FR_DISK_ERR; + + /* Create protective MBR */ + memset(buf, 0, ss); + memcpy(buf + MBR_Table, gpt_mbr, 16); /* Create a GPT partition */ + st_word(buf + BS_55AA, 0xAA55); + if (disk_write(drv, buf, 0, 1) != RES_OK) return FR_DISK_ERR; + + } else +#endif + { /* Create partitions in MBR format */ + sz_drv32 = (DWORD)sz_drv; + n_sc = N_SEC_TRACK; /* Determine drive CHS without any consideration of the drive geometry */ + for (n_hd = 8; n_hd != 0 && sz_drv32 / n_hd / n_sc > 1024; n_hd *= 2) ; + if (n_hd == 0) n_hd = 255; /* Number of heads needs to be <256 */ + + memset(buf, 0, FF_MAX_SS); /* Clear MBR */ + pte = buf + MBR_Table; /* Partition table in the MBR */ + for (i = 0, nxt_alloc32 = n_sc; i < 4 && nxt_alloc32 != 0 && nxt_alloc32 < sz_drv32; i++, nxt_alloc32 += sz_part32) { + sz_part32 = (DWORD)plst[i]; /* Get partition size */ + if (sz_part32 <= 100) sz_part32 = (sz_part32 == 100) ? sz_drv32 : sz_drv32 / 100 * sz_part32; /* Size in percentage? */ + if (nxt_alloc32 + sz_part32 > sz_drv32 || nxt_alloc32 + sz_part32 < nxt_alloc32) sz_part32 = sz_drv32 - nxt_alloc32; /* Clip at drive size */ + if (sz_part32 == 0) break; /* End of table or no sector to allocate? */ + + st_dword(pte + PTE_StLba, nxt_alloc32); /* Start LBA */ + st_dword(pte + PTE_SizLba, sz_part32); /* Number of sectors */ + pte[PTE_System] = sys; /* System type */ + + cy = (UINT)(nxt_alloc32 / n_sc / n_hd); /* Start cylinder */ + hd = (BYTE)(nxt_alloc32 / n_sc % n_hd); /* Start head */ + sc = (BYTE)(nxt_alloc32 % n_sc + 1); /* Start sector */ + pte[PTE_StHead] = hd; + pte[PTE_StSec] = (BYTE)((cy >> 2 & 0xC0) | sc); + pte[PTE_StCyl] = (BYTE)cy; + + cy = (UINT)((nxt_alloc32 + sz_part32 - 1) / n_sc / n_hd); /* End cylinder */ + hd = (BYTE)((nxt_alloc32 + sz_part32 - 1) / n_sc % n_hd); /* End head */ + sc = (BYTE)((nxt_alloc32 + sz_part32 - 1) % n_sc + 1); /* End sector */ + pte[PTE_EdHead] = hd; + pte[PTE_EdSec] = (BYTE)((cy >> 2 & 0xC0) | sc); + pte[PTE_EdCyl] = (BYTE)cy; + + pte += SZ_PTE; /* Next entry */ + } + + st_word(buf + BS_55AA, 0xAA55); /* MBR signature */ + if (disk_write(drv, buf, 0, 1) != RES_OK) return FR_DISK_ERR; /* Write it to the MBR */ + } + + return FR_OK; +} + + + +FRESULT f_mkfs ( + const TCHAR* path, /* Logical drive number */ + const MKFS_PARM* opt, /* Format options */ + void* work, /* Pointer to working buffer (null: use heap memory) */ + UINT len /* Size of working buffer [byte] */ +) +{ + static const WORD cst[] = {1, 4, 16, 64, 256, 512, 0}; /* Cluster size boundary for FAT volume (4Ks unit) */ + static const WORD cst32[] = {1, 2, 4, 8, 16, 32, 0}; /* Cluster size boundary for FAT32 volume (128Ks unit) */ + static const MKFS_PARM defopt = {FM_ANY, 0, 0, 0, 0}; /* Default parameter */ + BYTE fsopt, fsty, sys, *buf, *pte, pdrv, ipart; + WORD ss; /* Sector size */ + DWORD sz_buf, sz_blk, n_clst, pau, nsect, n, vsn; + LBA_t sz_vol, b_vol, b_fat, b_data; /* Size of volume, Base LBA of volume, fat, data */ + LBA_t sect, lba[2]; + DWORD sz_rsv, sz_fat, sz_dir, sz_au; /* Size of reserved, fat, dir, data, cluster */ + UINT n_fat, n_root, i; /* Index, Number of FATs and Number of roor dir entries */ + int vol; + DSTATUS ds; + FRESULT fr; + + + /* Check mounted drive and clear work area */ + vol = get_ldnumber(&path); /* Get target logical drive */ + if (vol < 0) return FR_INVALID_DRIVE; + if (FatFs[vol]) FatFs[vol]->fs_type = 0; /* Clear the fs object if mounted */ + pdrv = LD2PD(vol); /* Physical drive */ + ipart = LD2PT(vol); /* Partition (0:create as new, 1..:get from partition table) */ + if (!opt) opt = &defopt; /* Use default parameter if it is not given */ + + /* Get physical drive status (sz_drv, sz_blk, ss) */ + ds = disk_initialize(pdrv); + if (ds & STA_NOINIT) return FR_NOT_READY; + if (ds & STA_PROTECT) return FR_WRITE_PROTECTED; + sz_blk = opt->align; + if (sz_blk == 0 && disk_ioctl(pdrv, GET_BLOCK_SIZE, &sz_blk) != RES_OK) sz_blk = 1; + if (sz_blk == 0 || sz_blk > 0x8000 || (sz_blk & (sz_blk - 1))) sz_blk = 1; +#if FF_MAX_SS != FF_MIN_SS + if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &ss) != RES_OK) return FR_DISK_ERR; + if (ss > FF_MAX_SS || ss < FF_MIN_SS || (ss & (ss - 1))) return FR_DISK_ERR; +#else + ss = FF_MAX_SS; +#endif + /* Options for FAT sub-type and FAT parameters */ + fsopt = opt->fmt & (FM_ANY | FM_SFD); + n_fat = (opt->n_fat >= 1 && opt->n_fat <= 2) ? opt->n_fat : 1; + n_root = (opt->n_root >= 1 && opt->n_root <= 32768 && (opt->n_root % (ss / SZDIRE)) == 0) ? opt->n_root : 512; + sz_au = (opt->au_size <= 0x1000000 && (opt->au_size & (opt->au_size - 1)) == 0) ? opt->au_size : 0; + sz_au /= ss; /* Byte --> Sector */ + + /* Get working buffer */ + sz_buf = len / ss; /* Size of working buffer [sector] */ + if (sz_buf == 0) return FR_NOT_ENOUGH_CORE; + buf = (BYTE*)work; /* Working buffer */ +#if FF_USE_LFN == 3 + if (!buf) buf = ff_memalloc(sz_buf * ss); /* Use heap memory for working buffer */ +#endif + if (!buf) return FR_NOT_ENOUGH_CORE; + + /* Determine where the volume to be located (b_vol, sz_vol) */ + b_vol = sz_vol = 0; + if (FF_MULTI_PARTITION && ipart != 0) { /* Is the volume associated with any specific partition? */ + /* Get partition location from the existing partition table */ + if (disk_read(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Load MBR */ + if (ld_word(buf + BS_55AA) != 0xAA55) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if MBR is valid */ +#if FF_LBA64 + if (buf[MBR_Table + PTE_System] == 0xEE) { /* GPT protective MBR? */ + DWORD n_ent, ofs; + QWORD pt_lba; + + /* Get the partition location from GPT */ + if (disk_read(pdrv, buf, 1, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Load GPT header sector (next to MBR) */ + if (!test_gpt_header(buf)) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if GPT header is valid */ + n_ent = ld_dword(buf + GPTH_PtNum); /* Number of entries */ + pt_lba = ld_qword(buf + GPTH_PtOfs); /* Table start sector */ + ofs = i = 0; + while (n_ent) { /* Find MS Basic partition with order of ipart */ + if (ofs == 0 && disk_read(pdrv, buf, pt_lba++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Get PT sector */ + if (!memcmp(buf + ofs + GPTE_PtGuid, GUID_MS_Basic, 16) && ++i == ipart) { /* MS basic data partition? */ + b_vol = ld_qword(buf + ofs + GPTE_FstLba); + sz_vol = ld_qword(buf + ofs + GPTE_LstLba) - b_vol + 1; + break; + } + n_ent--; ofs = (ofs + SZ_GPTE) % ss; /* Next entry */ + } + if (n_ent == 0) LEAVE_MKFS(FR_MKFS_ABORTED); /* Partition not found */ + fsopt |= 0x80; /* Partitioning is in GPT */ + } else +#endif + { /* Get the partition location from MBR partition table */ + pte = buf + (MBR_Table + (ipart - 1) * SZ_PTE); + if (ipart > 4 || pte[PTE_System] == 0) LEAVE_MKFS(FR_MKFS_ABORTED); /* No partition? */ + b_vol = ld_dword(pte + PTE_StLba); /* Get volume start sector */ + sz_vol = ld_dword(pte + PTE_SizLba); /* Get volume size */ + } + } else { /* The volume is associated with a physical drive */ + if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + if (!(fsopt & FM_SFD)) { /* To be partitioned? */ + /* Create a single-partition on the drive in this function */ +#if FF_LBA64 + if (sz_vol >= FF_MIN_GPT) { /* Which partition type to create, MBR or GPT? */ + fsopt |= 0x80; /* Partitioning is in GPT */ + b_vol = GPT_ALIGN / ss; sz_vol -= b_vol + GPT_ITEMS * SZ_GPTE / ss + 1; /* Estimated partition offset and size */ + } else +#endif + { /* Partitioning is in MBR */ + if (sz_vol > N_SEC_TRACK) { + b_vol = N_SEC_TRACK; sz_vol -= b_vol; /* Estimated partition offset and size */ + } + } + } + } + if (sz_vol < 128) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >=128s */ + + /* Now start to create an FAT volume at b_vol and sz_vol */ + + do { /* Pre-determine the FAT type */ + if (FF_FS_EXFAT && (fsopt & FM_EXFAT)) { /* exFAT possible? */ + if ((fsopt & FM_ANY) == FM_EXFAT || sz_vol >= 0x4000000 || sz_au > 128) { /* exFAT only, vol >= 64MS or sz_au > 128S ? */ + fsty = FS_EXFAT; break; + } + } +#if FF_LBA64 + if (sz_vol >= 0x100000000) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too large volume for FAT/FAT32 */ +#endif + if (sz_au > 128) sz_au = 128; /* Invalid AU for FAT/FAT32? */ + if (fsopt & FM_FAT32) { /* FAT32 possible? */ + if (!(fsopt & FM_FAT)) { /* no-FAT? */ + fsty = FS_FAT32; break; + } + } + if (!(fsopt & FM_FAT)) LEAVE_MKFS(FR_INVALID_PARAMETER); /* no-FAT? */ + fsty = FS_FAT16; + } while (0); + + vsn = (DWORD)sz_vol + GET_FATTIME(); /* VSN generated from current time and partitiion size */ + +#if FF_FS_EXFAT + if (fsty == FS_EXFAT) { /* Create an exFAT volume */ + DWORD szb_bit, szb_case, sum, nbit, clu, clen[3]; + WCHAR ch, si; + UINT j, st; + + if (sz_vol < 0x1000) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume for exFAT? */ +#if FF_USE_TRIM + lba[0] = b_vol; lba[1] = b_vol + sz_vol - 1; /* Inform storage device that the volume area may be erased */ + disk_ioctl(pdrv, CTRL_TRIM, lba); +#endif + /* Determine FAT location, data location and number of clusters */ + if (sz_au == 0) { /* AU auto-selection */ + sz_au = 8; + if (sz_vol >= 0x80000) sz_au = 64; /* >= 512Ks */ + if (sz_vol >= 0x4000000) sz_au = 256; /* >= 64Ms */ + } + b_fat = b_vol + 32; /* FAT start at offset 32 */ + sz_fat = (DWORD)((sz_vol / sz_au + 2) * 4 + ss - 1) / ss; /* Number of FAT sectors */ + b_data = (b_fat + sz_fat + sz_blk - 1) & ~((LBA_t)sz_blk - 1); /* Align data area to the erase block boundary */ + if (b_data - b_vol >= sz_vol / 2) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ + n_clst = (DWORD)(sz_vol - (b_data - b_vol)) / sz_au; /* Number of clusters */ + if (n_clst <16) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too few clusters? */ + if (n_clst > MAX_EXFAT) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too many clusters? */ + + szb_bit = (n_clst + 7) / 8; /* Size of allocation bitmap */ + clen[0] = (szb_bit + sz_au * ss - 1) / (sz_au * ss); /* Number of allocation bitmap clusters */ + + /* Create a compressed up-case table */ + sect = b_data + sz_au * clen[0]; /* Table start sector */ + sum = 0; /* Table checksum to be stored in the 82 entry */ + st = 0; si = 0; i = 0; j = 0; szb_case = 0; + do { + switch (st) { + case 0: + ch = (WCHAR)ff_wtoupper(si); /* Get an up-case char */ + if (ch != si) { + si++; break; /* Store the up-case char if exist */ + } + for (j = 1; (WCHAR)(si + j) && (WCHAR)(si + j) == ff_wtoupper((WCHAR)(si + j)); j++) ; /* Get run length of no-case block */ + if (j >= 128) { + ch = 0xFFFF; st = 2; break; /* Compress the no-case block if run is >= 128 chars */ + } + st = 1; /* Do not compress short run */ + /* FALLTHROUGH */ + case 1: + ch = si++; /* Fill the short run */ + if (--j == 0) st = 0; + break; + + default: + ch = (WCHAR)j; si += (WCHAR)j; /* Number of chars to skip */ + st = 0; + } + sum = xsum32(buf[i + 0] = (BYTE)ch, sum); /* Put it into the write buffer */ + sum = xsum32(buf[i + 1] = (BYTE)(ch >> 8), sum); + i += 2; szb_case += 2; + if (si == 0 || i == sz_buf * ss) { /* Write buffered data when buffer full or end of process */ + n = (i + ss - 1) / ss; + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; i = 0; + } + } while (si); + clen[1] = (szb_case + sz_au * ss - 1) / (sz_au * ss); /* Number of up-case table clusters */ + clen[2] = 1; /* Number of root dir clusters */ + + /* Initialize the allocation bitmap */ + sect = b_data; nsect = (szb_bit + ss - 1) / ss; /* Start of bitmap and number of bitmap sectors */ + nbit = clen[0] + clen[1] + clen[2]; /* Number of clusters in-use by system (bitmap, up-case and root-dir) */ + do { + memset(buf, 0, sz_buf * ss); /* Initialize bitmap buffer */ + for (i = 0; nbit != 0 && i / 8 < sz_buf * ss; buf[i / 8] |= 1 << (i % 8), i++, nbit--) ; /* Mark used clusters */ + n = (nsect > sz_buf) ? sz_buf : nsect; /* Write the buffered data */ + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; nsect -= n; + } while (nsect); + + /* Initialize the FAT */ + sect = b_fat; nsect = sz_fat; /* Start of FAT and number of FAT sectors */ + j = nbit = clu = 0; + do { + memset(buf, 0, sz_buf * ss); i = 0; /* Clear work area and reset write offset */ + if (clu == 0) { /* Initialize FAT [0] and FAT[1] */ + st_dword(buf + i, 0xFFFFFFF8); i += 4; clu++; + st_dword(buf + i, 0xFFFFFFFF); i += 4; clu++; + } + do { /* Create chains of bitmap, up-case and root dir */ + while (nbit != 0 && i < sz_buf * ss) { /* Create a chain */ + st_dword(buf + i, (nbit > 1) ? clu + 1 : 0xFFFFFFFF); + i += 4; clu++; nbit--; + } + if (nbit == 0 && j < 3) nbit = clen[j++]; /* Get next chain length */ + } while (nbit != 0 && i < sz_buf * ss); + n = (nsect > sz_buf) ? sz_buf : nsect; /* Write the buffered data */ + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; nsect -= n; + } while (nsect); + + /* Initialize the root directory */ + memset(buf, 0, sz_buf * ss); + buf[SZDIRE * 0 + 0] = ET_VLABEL; /* Volume label entry (no label) */ + buf[SZDIRE * 1 + 0] = ET_BITMAP; /* Bitmap entry */ + st_dword(buf + SZDIRE * 1 + 20, 2); /* cluster */ + st_dword(buf + SZDIRE * 1 + 24, szb_bit); /* size */ + buf[SZDIRE * 2 + 0] = ET_UPCASE; /* Up-case table entry */ + st_dword(buf + SZDIRE * 2 + 4, sum); /* sum */ + st_dword(buf + SZDIRE * 2 + 20, 2 + clen[0]); /* cluster */ + st_dword(buf + SZDIRE * 2 + 24, szb_case); /* size */ + sect = b_data + sz_au * (clen[0] + clen[1]); nsect = sz_au; /* Start of the root directory and number of sectors */ + do { /* Fill root directory sectors */ + n = (nsect > sz_buf) ? sz_buf : nsect; + if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + memset(buf, 0, ss); /* Rest of entries are filled with zero */ + sect += n; nsect -= n; + } while (nsect); + + /* Create two set of the exFAT VBR blocks */ + sect = b_vol; + for (n = 0; n < 2; n++) { + /* Main record (+0) */ + memset(buf, 0, ss); + memcpy(buf + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11); /* Boot jump code (x86), OEM name */ + st_qword(buf + BPB_VolOfsEx, b_vol); /* Volume offset in the physical drive [sector] */ + st_qword(buf + BPB_TotSecEx, sz_vol); /* Volume size [sector] */ + st_dword(buf + BPB_FatOfsEx, (DWORD)(b_fat - b_vol)); /* FAT offset [sector] */ + st_dword(buf + BPB_FatSzEx, sz_fat); /* FAT size [sector] */ + st_dword(buf + BPB_DataOfsEx, (DWORD)(b_data - b_vol)); /* Data offset [sector] */ + st_dword(buf + BPB_NumClusEx, n_clst); /* Number of clusters */ + st_dword(buf + BPB_RootClusEx, 2 + clen[0] + clen[1]); /* Root dir cluster # */ + st_dword(buf + BPB_VolIDEx, vsn); /* VSN */ + st_word(buf + BPB_FSVerEx, 0x100); /* Filesystem version (1.00) */ + for (buf[BPB_BytsPerSecEx] = 0, i = ss; i >>= 1; buf[BPB_BytsPerSecEx]++) ; /* Log2 of sector size [byte] */ + for (buf[BPB_SecPerClusEx] = 0, i = sz_au; i >>= 1; buf[BPB_SecPerClusEx]++) ; /* Log2 of cluster size [sector] */ + buf[BPB_NumFATsEx] = 1; /* Number of FATs */ + buf[BPB_DrvNumEx] = 0x80; /* Drive number (for int13) */ + st_word(buf + BS_BootCodeEx, 0xFEEB); /* Boot code (x86) */ + st_word(buf + BS_55AA, 0xAA55); /* Signature (placed here regardless of sector size) */ + for (i = sum = 0; i < ss; i++) { /* VBR checksum */ + if (i != BPB_VolFlagEx && i != BPB_VolFlagEx + 1 && i != BPB_PercInUseEx) sum = xsum32(buf[i], sum); + } + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + /* Extended bootstrap record (+1..+8) */ + memset(buf, 0, ss); + st_word(buf + ss - 2, 0xAA55); /* Signature (placed at end of sector) */ + for (j = 1; j < 9; j++) { + for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ; /* VBR checksum */ + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + } + /* OEM/Reserved record (+9..+10) */ + memset(buf, 0, ss); + for ( ; j < 11; j++) { + for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ; /* VBR checksum */ + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + } + /* Sum record (+11) */ + for (i = 0; i < ss; i += 4) st_dword(buf + i, sum); /* Fill with checksum value */ + if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + } + + } else +#endif /* FF_FS_EXFAT */ + { /* Create an FAT/FAT32 volume */ + do { + pau = sz_au; + /* Pre-determine number of clusters and FAT sub-type */ + if (fsty == FS_FAT32) { /* FAT32 volume */ + if (pau == 0) { /* AU auto-selection */ + n = (DWORD)sz_vol / 0x20000; /* Volume size in unit of 128KS */ + for (i = 0, pau = 1; cst32[i] && cst32[i] <= n; i++, pau <<= 1) ; /* Get from table */ + } + n_clst = (DWORD)sz_vol / pau; /* Number of clusters */ + sz_fat = (n_clst * 4 + 8 + ss - 1) / ss; /* FAT size [sector] */ + sz_rsv = 32; /* Number of reserved sectors */ + sz_dir = 0; /* No static directory */ + if (n_clst <= MAX_FAT16 || n_clst > MAX_FAT32) LEAVE_MKFS(FR_MKFS_ABORTED); + } else { /* FAT volume */ + if (pau == 0) { /* au auto-selection */ + n = (DWORD)sz_vol / 0x1000; /* Volume size in unit of 4KS */ + for (i = 0, pau = 1; cst[i] && cst[i] <= n; i++, pau <<= 1) ; /* Get from table */ + } + n_clst = (DWORD)sz_vol / pau; + if (n_clst > MAX_FAT12) { + n = n_clst * 2 + 4; /* FAT size [byte] */ + } else { + fsty = FS_FAT12; + n = (n_clst * 3 + 1) / 2 + 3; /* FAT size [byte] */ + } + sz_fat = (n + ss - 1) / ss; /* FAT size [sector] */ + sz_rsv = 1; /* Number of reserved sectors */ + sz_dir = (DWORD)n_root * SZDIRE / ss; /* Root dir size [sector] */ + } + b_fat = b_vol + sz_rsv; /* FAT base */ + b_data = b_fat + sz_fat * n_fat + sz_dir; /* Data base */ + + /* Align data area to erase block boundary (for flash memory media) */ + n = (DWORD)(((b_data + sz_blk - 1) & ~(sz_blk - 1)) - b_data); /* Sectors to next nearest from current data base */ + if (fsty == FS_FAT32) { /* FAT32: Move FAT */ + sz_rsv += n; b_fat += n; + } else { /* FAT: Expand FAT */ + if (n % n_fat) { /* Adjust fractional error if needed */ + n--; sz_rsv++; b_fat++; + } + sz_fat += n / n_fat; + } + + /* Determine number of clusters and final check of validity of the FAT sub-type */ + if (sz_vol < b_data + pau * 16 - b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */ + n_clst = ((DWORD)sz_vol - sz_rsv - sz_fat * n_fat - sz_dir) / pau; + if (fsty == FS_FAT32) { + if (n_clst <= MAX_FAT16) { /* Too few clusters for FAT32? */ + if (sz_au == 0 && (sz_au = pau / 2) != 0) continue; /* Adjust cluster size and retry */ + LEAVE_MKFS(FR_MKFS_ABORTED); + } + } + if (fsty == FS_FAT16) { + if (n_clst > MAX_FAT16) { /* Too many clusters for FAT16 */ + if (sz_au == 0 && (pau * 2) <= 64) { + sz_au = pau * 2; continue; /* Adjust cluster size and retry */ + } + if ((fsopt & FM_FAT32)) { + fsty = FS_FAT32; continue; /* Switch type to FAT32 and retry */ + } + if (sz_au == 0 && (sz_au = pau * 2) <= 128) continue; /* Adjust cluster size and retry */ + LEAVE_MKFS(FR_MKFS_ABORTED); + } + if (n_clst <= MAX_FAT12) { /* Too few clusters for FAT16 */ + if (sz_au == 0 && (sz_au = pau * 2) <= 128) continue; /* Adjust cluster size and retry */ + LEAVE_MKFS(FR_MKFS_ABORTED); + } + } + if (fsty == FS_FAT12 && n_clst > MAX_FAT12) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too many clusters for FAT12 */ + + /* Ok, it is the valid cluster configuration */ + break; + } while (1); + +#if FF_USE_TRIM + lba[0] = b_vol; lba[1] = b_vol + sz_vol - 1; /* Inform storage device that the volume area may be erased */ + disk_ioctl(pdrv, CTRL_TRIM, lba); +#endif + /* Create FAT VBR */ + memset(buf, 0, ss); + memcpy(buf + BS_JmpBoot, "\xEB\xFE\x90" "MSDOS5.0", 11); /* Boot jump code (x86), OEM name */ + st_word(buf + BPB_BytsPerSec, ss); /* Sector size [byte] */ + buf[BPB_SecPerClus] = (BYTE)pau; /* Cluster size [sector] */ + st_word(buf + BPB_RsvdSecCnt, (WORD)sz_rsv); /* Size of reserved area */ + buf[BPB_NumFATs] = (BYTE)n_fat; /* Number of FATs */ + st_word(buf + BPB_RootEntCnt, (WORD)((fsty == FS_FAT32) ? 0 : n_root)); /* Number of root directory entries */ + if (sz_vol < 0x10000) { + st_word(buf + BPB_TotSec16, (WORD)sz_vol); /* Volume size in 16-bit LBA */ + } else { + st_dword(buf + BPB_TotSec32, (DWORD)sz_vol); /* Volume size in 32-bit LBA */ + } + buf[BPB_Media] = 0xF8; /* Media descriptor byte */ + st_word(buf + BPB_SecPerTrk, 63); /* Number of sectors per track (for int13) */ + st_word(buf + BPB_NumHeads, 255); /* Number of heads (for int13) */ + st_dword(buf + BPB_HiddSec, (DWORD)b_vol); /* Volume offset in the physical drive [sector] */ + if (fsty == FS_FAT32) { + st_dword(buf + BS_VolID32, vsn); /* VSN */ + st_dword(buf + BPB_FATSz32, sz_fat); /* FAT size [sector] */ + st_dword(buf + BPB_RootClus32, 2); /* Root directory cluster # (2) */ + st_word(buf + BPB_FSInfo32, 1); /* Offset of FSINFO sector (VBR + 1) */ + st_word(buf + BPB_BkBootSec32, 6); /* Offset of backup VBR (VBR + 6) */ + buf[BS_DrvNum32] = 0x80; /* Drive number (for int13) */ + buf[BS_BootSig32] = 0x29; /* Extended boot signature */ + memcpy(buf + BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */ + } else { + st_dword(buf + BS_VolID, vsn); /* VSN */ + st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */ + buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */ + buf[BS_BootSig] = 0x29; /* Extended boot signature */ + memcpy(buf + BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */ + } + st_word(buf + BS_55AA, 0xAA55); /* Signature (offset is fixed here regardless of sector size) */ + if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the VBR sector */ + + /* Create FSINFO record if needed */ + if (fsty == FS_FAT32) { + disk_write(pdrv, buf, b_vol + 6, 1); /* Write backup VBR (VBR + 6) */ + memset(buf, 0, ss); + st_dword(buf + FSI_LeadSig, 0x41615252); + st_dword(buf + FSI_StrucSig, 0x61417272); + st_dword(buf + FSI_Free_Count, n_clst - 1); /* Number of free clusters */ + st_dword(buf + FSI_Nxt_Free, 2); /* Last allocated cluster# */ + st_word(buf + BS_55AA, 0xAA55); + disk_write(pdrv, buf, b_vol + 7, 1); /* Write backup FSINFO (VBR + 7) */ + disk_write(pdrv, buf, b_vol + 1, 1); /* Write original FSINFO (VBR + 1) */ + } + + /* Initialize FAT area */ + memset(buf, 0, sz_buf * ss); + sect = b_fat; /* FAT start sector */ + for (i = 0; i < n_fat; i++) { /* Initialize FATs each */ + if (fsty == FS_FAT32) { + st_dword(buf + 0, 0xFFFFFFF8); /* FAT[0] */ + st_dword(buf + 4, 0xFFFFFFFF); /* FAT[1] */ + st_dword(buf + 8, 0x0FFFFFFF); /* FAT[2] (root directory) */ + } else { + st_dword(buf + 0, (fsty == FS_FAT12) ? 0xFFFFF8 : 0xFFFFFFF8); /* FAT[0] and FAT[1] */ + } + nsect = sz_fat; /* Number of FAT sectors */ + do { /* Fill FAT sectors */ + n = (nsect > sz_buf) ? sz_buf : nsect; + if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + memset(buf, 0, ss); /* Rest of FAT all are cleared */ + sect += n; nsect -= n; + } while (nsect); + } + + /* Initialize root directory (fill with zero) */ + nsect = (fsty == FS_FAT32) ? pau : sz_dir; /* Number of root directory sectors */ + do { + n = (nsect > sz_buf) ? sz_buf : nsect; + if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + sect += n; nsect -= n; + } while (nsect); + } + + /* A FAT volume has been created here */ + + /* Determine system ID in the MBR partition table */ + if (FF_FS_EXFAT && fsty == FS_EXFAT) { + sys = 0x07; /* exFAT */ + } else { + if (fsty == FS_FAT32) { + sys = 0x0C; /* FAT32X */ + } else { + if (sz_vol >= 0x10000) { + sys = 0x06; /* FAT12/16 (large) */ + } else { + sys = (fsty == FS_FAT16) ? 0x04 : 0x01; /* FAT16 : FAT12 */ + } + } + } + + /* Update partition information */ + if (FF_MULTI_PARTITION && ipart != 0) { /* Volume is in the existing partition */ + if (!FF_LBA64 || !(fsopt & 0x80)) { + /* Update system ID in the partition table */ + if (disk_read(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Read the MBR */ + buf[MBR_Table + (ipart - 1) * SZ_PTE + PTE_System] = sys; /* Set system ID */ + if (disk_write(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it back to the MBR */ + } + } else { /* Volume as a new single partition */ + if (!(fsopt & FM_SFD)) { /* Create partition table if not in SFD */ + lba[0] = sz_vol; lba[1] = 0; + fr = create_partition(pdrv, lba, sys, buf); + if (fr != FR_OK) LEAVE_MKFS(fr); + } + } + + if (disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); + + LEAVE_MKFS(FR_OK); +} + + + + +#if FF_MULTI_PARTITION +/*-----------------------------------------------------------------------*/ +/* Create Partition Table on the Physical Drive */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_fdisk ( + BYTE pdrv, /* Physical drive number */ + const LBA_t ptbl[], /* Pointer to the size table for each partitions */ + void* work /* Pointer to the working buffer (null: use heap memory) */ +) +{ + BYTE *buf = (BYTE*)work; + DSTATUS stat; + + + stat = disk_initialize(pdrv); + if (stat & STA_NOINIT) return FR_NOT_READY; + if (stat & STA_PROTECT) return FR_WRITE_PROTECTED; +#if FF_USE_LFN == 3 + if (!buf) buf = ff_memalloc(FF_MAX_SS); /* Use heap memory for working buffer */ +#endif + if (!buf) return FR_NOT_ENOUGH_CORE; + + LEAVE_MKFS(create_partition(pdrv, ptbl, 0x07, buf)); +} + +#endif /* FF_MULTI_PARTITION */ +#endif /* !FF_FS_READONLY && FF_USE_MKFS */ + + + + +#if FF_USE_STRFUNC +#if FF_USE_LFN && FF_LFN_UNICODE && (FF_STRF_ENCODE < 0 || FF_STRF_ENCODE > 3) +#error Wrong FF_STRF_ENCODE setting +#endif +/*-----------------------------------------------------------------------*/ +/* Get a String from the File */ +/*-----------------------------------------------------------------------*/ + +TCHAR* f_gets ( + TCHAR* buff, /* Pointer to the buffer to store read string */ + int len, /* Size of string buffer (items) */ + FIL* fp /* Pointer to the file object */ +) +{ + int nc = 0; + TCHAR *p = buff; + BYTE s[4]; + UINT rc; + DWORD dc; +#if FF_USE_LFN && FF_LFN_UNICODE && FF_STRF_ENCODE <= 2 + WCHAR wc; +#endif +#if FF_USE_LFN && FF_LFN_UNICODE && FF_STRF_ENCODE == 3 + UINT ct; +#endif + +#if FF_USE_LFN && FF_LFN_UNICODE /* With code conversion (Unicode API) */ + /* Make a room for the character and terminator */ + if (FF_LFN_UNICODE == 1) len -= (FF_STRF_ENCODE == 0) ? 1 : 2; + if (FF_LFN_UNICODE == 2) len -= (FF_STRF_ENCODE == 0) ? 3 : 4; + if (FF_LFN_UNICODE == 3) len -= 1; + while (nc < len) { +#if FF_STRF_ENCODE == 0 /* Read a character in ANSI/OEM */ + f_read(fp, s, 1, &rc); /* Get a code unit */ + if (rc != 1) break; /* EOF? */ + wc = s[0]; + if (dbc_1st((BYTE)wc)) { /* DBC 1st byte? */ + f_read(fp, s, 1, &rc); /* Get 2nd byte */ + if (rc != 1 || !dbc_2nd(s[0])) continue; /* Wrong code? */ + wc = wc << 8 | s[0]; + } + dc = ff_oem2uni(wc, CODEPAGE); /* Convert ANSI/OEM into Unicode */ + if (dc == 0) continue; /* Conversion error? */ +#elif FF_STRF_ENCODE == 1 || FF_STRF_ENCODE == 2 /* Read a character in UTF-16LE/BE */ + f_read(fp, s, 2, &rc); /* Get a code unit */ + if (rc != 2) break; /* EOF? */ + dc = (FF_STRF_ENCODE == 1) ? ld_word(s) : s[0] << 8 | s[1]; + if (IsSurrogateL(dc)) continue; /* Broken surrogate pair? */ + if (IsSurrogateH(dc)) { /* High surrogate? */ + f_read(fp, s, 2, &rc); /* Get low surrogate */ + if (rc != 2) break; /* EOF? */ + wc = (FF_STRF_ENCODE == 1) ? ld_word(s) : s[0] << 8 | s[1]; + if (!IsSurrogateL(wc)) continue; /* Broken surrogate pair? */ + dc = ((dc & 0x3FF) + 0x40) << 10 | (wc & 0x3FF); /* Merge surrogate pair */ + } +#else /* Read a character in UTF-8 */ + f_read(fp, s, 1, &rc); /* Get a code unit */ + if (rc != 1) break; /* EOF? */ + dc = s[0]; + if (dc >= 0x80) { /* Multi-byte sequence? */ + ct = 0; + if ((dc & 0xE0) == 0xC0) { dc &= 0x1F; ct = 1; } /* 2-byte sequence? */ + if ((dc & 0xF0) == 0xE0) { dc &= 0x0F; ct = 2; } /* 3-byte sequence? */ + if ((dc & 0xF8) == 0xF0) { dc &= 0x07; ct = 3; } /* 4-byte sequence? */ + if (ct == 0) continue; + f_read(fp, s, ct, &rc); /* Get trailing bytes */ + if (rc != ct) break; + rc = 0; + do { /* Merge the byte sequence */ + if ((s[rc] & 0xC0) != 0x80) break; + dc = dc << 6 | (s[rc] & 0x3F); + } while (++rc < ct); + if (rc != ct || dc < 0x80 || IsSurrogate(dc) || dc >= 0x110000) continue; /* Wrong encoding? */ + } +#endif + /* A code point is avaialble in dc to be output */ + + if (FF_USE_STRFUNC == 2 && dc == '\r') continue; /* Strip \r off if needed */ +#if FF_LFN_UNICODE == 1 || FF_LFN_UNICODE == 3 /* Output it in UTF-16/32 encoding */ + if (FF_LFN_UNICODE == 1 && dc >= 0x10000) { /* Out of BMP at UTF-16? */ + *p++ = (TCHAR)(0xD800 | ((dc >> 10) - 0x40)); nc++; /* Make and output high surrogate */ + dc = 0xDC00 | (dc & 0x3FF); /* Make low surrogate */ + } + *p++ = (TCHAR)dc; nc++; + if (dc == '\n') break; /* End of line? */ +#elif FF_LFN_UNICODE == 2 /* Output it in UTF-8 encoding */ + if (dc < 0x80) { /* Single byte? */ + *p++ = (TCHAR)dc; + nc++; + if (dc == '\n') break; /* End of line? */ + } else { + if (dc < 0x800) { /* 2-byte sequence? */ + *p++ = (TCHAR)(0xC0 | (dc >> 6 & 0x1F)); + *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); + nc += 2; + } else { + if (dc < 0x10000) { /* 3-byte sequence? */ + *p++ = (TCHAR)(0xE0 | (dc >> 12 & 0x0F)); + *p++ = (TCHAR)(0x80 | (dc >> 6 & 0x3F)); + *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); + nc += 3; + } else { /* 4-byte sequence? */ + *p++ = (TCHAR)(0xF0 | (dc >> 18 & 0x07)); + *p++ = (TCHAR)(0x80 | (dc >> 12 & 0x3F)); + *p++ = (TCHAR)(0x80 | (dc >> 6 & 0x3F)); + *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F)); + nc += 4; + } + } + } +#endif + } + +#else /* Byte-by-byte read without any conversion (ANSI/OEM API) */ + len -= 1; /* Make a room for the terminator */ + while (nc < len) { + f_read(fp, s, 1, &rc); /* Get a byte */ + if (rc != 1) break; /* EOF? */ + dc = s[0]; + if (FF_USE_STRFUNC == 2 && dc == '\r') continue; + *p++ = (TCHAR)dc; nc++; + if (dc == '\n') break; + } +#endif + + *p = 0; /* Terminate the string */ + return nc ? buff : 0; /* When no data read due to EOF or error, return with error. */ +} + + + + +#if !FF_FS_READONLY +#include +#define SZ_PUTC_BUF 64 +#define SZ_NUM_BUF 32 + +/*-----------------------------------------------------------------------*/ +/* Put a Character to the File (with sub-functions) */ +/*-----------------------------------------------------------------------*/ + +/* Output buffer and work area */ + +typedef struct { + FIL *fp; /* Ptr to the writing file */ + int idx, nchr; /* Write index of buf[] (-1:error), number of encoding units written */ +#if FF_USE_LFN && FF_LFN_UNICODE == 1 + WCHAR hs; +#elif FF_USE_LFN && FF_LFN_UNICODE == 2 + BYTE bs[4]; + UINT wi, ct; +#endif + BYTE buf[SZ_PUTC_BUF]; /* Write buffer */ +} putbuff; + + +/* Buffered file write with code conversion */ + +static void putc_bfd (putbuff* pb, TCHAR c) +{ + UINT n; + int i, nc; +#if FF_USE_LFN && FF_LFN_UNICODE + WCHAR hs, wc; +#if FF_LFN_UNICODE == 2 + DWORD dc; + const TCHAR *tp; +#endif +#endif + + if (FF_USE_STRFUNC == 2 && c == '\n') { /* LF -> CRLF conversion */ + putc_bfd(pb, '\r'); + } + + i = pb->idx; /* Write index of pb->buf[] */ + if (i < 0) return; /* In write error? */ + nc = pb->nchr; /* Write unit counter */ + +#if FF_USE_LFN && FF_LFN_UNICODE +#if FF_LFN_UNICODE == 1 /* UTF-16 input */ + if (IsSurrogateH(c)) { /* High surrogate? */ + pb->hs = c; return; /* Save it for next */ + } + hs = pb->hs; pb->hs = 0; + if (hs != 0) { /* There is a leading high surrogate */ + if (!IsSurrogateL(c)) hs = 0; /* Discard high surrogate if not a surrogate pair */ + } else { + if (IsSurrogateL(c)) return; /* Discard stray low surrogate */ + } + wc = c; +#elif FF_LFN_UNICODE == 2 /* UTF-8 input */ + for (;;) { + if (pb->ct == 0) { /* Out of multi-byte sequence? */ + pb->bs[pb->wi = 0] = (BYTE)c; /* Save 1st byte */ + if ((BYTE)c < 0x80) break; /* Single byte? */ + if (((BYTE)c & 0xE0) == 0xC0) pb->ct = 1; /* 2-byte sequence? */ + if (((BYTE)c & 0xF0) == 0xE0) pb->ct = 2; /* 3-byte sequence? */ + if (((BYTE)c & 0xF1) == 0xF0) pb->ct = 3; /* 4-byte sequence? */ + return; + } else { /* In the multi-byte sequence */ + if (((BYTE)c & 0xC0) != 0x80) { /* Broken sequence? */ + pb->ct = 0; continue; + } + pb->bs[++pb->wi] = (BYTE)c; /* Save the trailing byte */ + if (--pb->ct == 0) break; /* End of multi-byte sequence? */ + return; + } + } + tp = (const TCHAR*)pb->bs; + dc = tchar2uni(&tp); /* UTF-8 ==> UTF-16 */ + if (dc == 0xFFFFFFFF) return; /* Wrong code? */ + wc = (WCHAR)dc; + hs = (WCHAR)(dc >> 16); +#elif FF_LFN_UNICODE == 3 /* UTF-32 input */ + if (IsSurrogate(c) || c >= 0x110000) return; /* Discard invalid code */ + if (c >= 0x10000) { /* Out of BMP? */ + hs = (WCHAR)(0xD800 | ((c >> 10) - 0x40)); /* Make high surrogate */ + wc = 0xDC00 | (c & 0x3FF); /* Make low surrogate */ + } else { + hs = 0; + wc = (WCHAR)c; + } +#endif + /* A code point in UTF-16 is available in hs and wc */ + +#if FF_STRF_ENCODE == 1 /* Write a code point in UTF-16LE */ + if (hs != 0) { /* Surrogate pair? */ + st_word(&pb->buf[i], hs); + i += 2; + nc++; + } + st_word(&pb->buf[i], wc); + i += 2; +#elif FF_STRF_ENCODE == 2 /* Write a code point in UTF-16BE */ + if (hs != 0) { /* Surrogate pair? */ + pb->buf[i++] = (BYTE)(hs >> 8); + pb->buf[i++] = (BYTE)hs; + nc++; + } + pb->buf[i++] = (BYTE)(wc >> 8); + pb->buf[i++] = (BYTE)wc; +#elif FF_STRF_ENCODE == 3 /* Write a code point in UTF-8 */ + if (hs != 0) { /* 4-byte sequence? */ + nc += 3; + hs = (hs & 0x3FF) + 0x40; + pb->buf[i++] = (BYTE)(0xF0 | hs >> 8); + pb->buf[i++] = (BYTE)(0x80 | (hs >> 2 & 0x3F)); + pb->buf[i++] = (BYTE)(0x80 | (hs & 3) << 4 | (wc >> 6 & 0x0F)); + pb->buf[i++] = (BYTE)(0x80 | (wc & 0x3F)); + } else { + if (wc < 0x80) { /* Single byte? */ + pb->buf[i++] = (BYTE)wc; + } else { + if (wc < 0x800) { /* 2-byte sequence? */ + nc += 1; + pb->buf[i++] = (BYTE)(0xC0 | wc >> 6); + } else { /* 3-byte sequence */ + nc += 2; + pb->buf[i++] = (BYTE)(0xE0 | wc >> 12); + pb->buf[i++] = (BYTE)(0x80 | (wc >> 6 & 0x3F)); + } + pb->buf[i++] = (BYTE)(0x80 | (wc & 0x3F)); + } + } +#else /* Write a code point in ANSI/OEM */ + if (hs != 0) return; + wc = ff_uni2oem(wc, CODEPAGE); /* UTF-16 ==> ANSI/OEM */ + if (wc == 0) return; + if (wc >= 0x100) { + pb->buf[i++] = (BYTE)(wc >> 8); nc++; + } + pb->buf[i++] = (BYTE)wc; +#endif + +#else /* ANSI/OEM input (without re-encoding) */ + pb->buf[i++] = (BYTE)c; +#endif + + if (i >= (int)(sizeof pb->buf) - 4) { /* Write buffered characters to the file */ + f_write(pb->fp, pb->buf, (UINT)i, &n); + i = (n == (UINT)i) ? 0 : -1; + } + pb->idx = i; + pb->nchr = nc + 1; +} + + +/* Flush remaining characters in the buffer */ + +static int putc_flush (putbuff* pb) +{ + UINT nw; + + if ( pb->idx >= 0 /* Flush buffered characters to the file */ + && f_write(pb->fp, pb->buf, (UINT)pb->idx, &nw) == FR_OK + && (UINT)pb->idx == nw) return pb->nchr; + return -1; +} + + +/* Initialize write buffer */ + +static void putc_init (putbuff* pb, FIL* fp) +{ + memset(pb, 0, sizeof (putbuff)); + pb->fp = fp; +} + + + +int f_putc ( + TCHAR c, /* A character to be output */ + FIL* fp /* Pointer to the file object */ +) +{ + putbuff pb; + + + putc_init(&pb, fp); + putc_bfd(&pb, c); /* Put the character */ + return putc_flush(&pb); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a String to the File */ +/*-----------------------------------------------------------------------*/ + +int f_puts ( + const TCHAR* str, /* Pointer to the string to be output */ + FIL* fp /* Pointer to the file object */ +) +{ + putbuff pb; + + + putc_init(&pb, fp); + while (*str) putc_bfd(&pb, *str++); /* Put the string */ + return putc_flush(&pb); +} + + + + +/*-----------------------------------------------------------------------*/ +/* Put a Formatted String to the File (with sub-functions) */ +/*-----------------------------------------------------------------------*/ +#if FF_PRINT_FLOAT && FF_INTDEF == 2 +#include + +static int ilog10 (double n) /* Calculate log10(n) in integer output */ +{ + int rv = 0; + + while (n >= 10) { /* Decimate digit in right shift */ + if (n >= 100000) { + n /= 100000; rv += 5; + } else { + n /= 10; rv++; + } + } + while (n < 1) { /* Decimate digit in left shift */ + if (n < 0.00001) { + n *= 100000; rv -= 5; + } else { + n *= 10; rv--; + } + } + return rv; +} + + +static double i10x (int n) /* Calculate 10^n in integer input */ +{ + double rv = 1; + + while (n > 0) { /* Left shift */ + if (n >= 5) { + rv *= 100000; n -= 5; + } else { + rv *= 10; n--; + } + } + while (n < 0) { /* Right shift */ + if (n <= -5) { + rv /= 100000; n += 5; + } else { + rv /= 10; n++; + } + } + return rv; +} + + +static void ftoa ( + char* buf, /* Buffer to output the floating point string */ + double val, /* Value to output */ + int prec, /* Number of fractional digits */ + TCHAR fmt /* Notation */ +) +{ + int d; + int e = 0, m = 0; + char sign = 0; + double w; + const char *er = 0; + const char ds = FF_PRINT_FLOAT == 2 ? ',' : '.'; + + + if (isnan(val)) { /* Not a number? */ + er = "NaN"; + } else { + if (prec < 0) prec = 6; /* Default precision? (6 fractional digits) */ + if (val < 0) { /* Nagative? */ + val = 0 - val; sign = '-'; + } else { + sign = '+'; + } + if (isinf(val)) { /* Infinite? */ + er = "INF"; + } else { + if (fmt == 'f') { /* Decimal notation? */ + val += i10x(0 - prec) / 2; /* Round (nearest) */ + m = ilog10(val); + if (m < 0) m = 0; + if (m + prec + 3 >= SZ_NUM_BUF) er = "OV"; /* Buffer overflow? */ + } else { /* E notation */ + if (val != 0) { /* Not a true zero? */ + val += i10x(ilog10(val) - prec) / 2; /* Round (nearest) */ + e = ilog10(val); + if (e > 99 || prec + 7 >= SZ_NUM_BUF) { /* Buffer overflow or E > +99? */ + er = "OV"; + } else { + if (e < -99) e = -99; + val /= i10x(e); /* Normalize */ + } + } + } + } + if (!er) { /* Not error condition */ + if (sign == '-') *buf++ = sign; /* Add a - if negative value */ + do { /* Put decimal number */ + if (m == -1) *buf++ = ds; /* Insert a decimal separator when get into fractional part */ + w = i10x(m); /* Snip the highest digit d */ + d = (int)(val / w); val -= d * w; + *buf++ = (char)('0' + d); /* Put the digit */ + } while (--m >= -prec); /* Output all digits specified by prec */ + if (fmt != 'f') { /* Put exponent if needed */ + *buf++ = (char)fmt; + if (e < 0) { + e = 0 - e; *buf++ = '-'; + } else { + *buf++ = '+'; + } + *buf++ = (char)('0' + e / 10); + *buf++ = (char)('0' + e % 10); + } + } + } + if (er) { /* Error condition */ + if (sign) *buf++ = sign; /* Add sign if needed */ + do *buf++ = *er++; while (*er); /* Put error symbol */ + } + *buf = 0; /* Term */ +} +#endif /* FF_PRINT_FLOAT && FF_INTDEF == 2 */ + + + +int f_printf ( + FIL* fp, /* Pointer to the file object */ + const TCHAR* fmt, /* Pointer to the format string */ + ... /* Optional arguments... */ +) +{ + va_list arp; + putbuff pb; + UINT i, j, w, f, r; + int prec; +#if FF_PRINT_LLI && FF_INTDEF == 2 + QWORD v; +#else + DWORD v; +#endif + TCHAR tc, pad, *tp; + TCHAR nul = 0; + char d, str[SZ_NUM_BUF]; + + + putc_init(&pb, fp); + + va_start(arp, fmt); + + for (;;) { + tc = *fmt++; + if (tc == 0) break; /* End of format string */ + if (tc != '%') { /* Not an escape character (pass-through) */ + putc_bfd(&pb, tc); + continue; + } + f = w = 0; pad = ' '; prec = -1; /* Initialize parms */ + tc = *fmt++; + if (tc == '0') { /* Flag: '0' padded */ + pad = '0'; tc = *fmt++; + } else if (tc == '-') { /* Flag: Left aligned */ + f = 2; tc = *fmt++; + } + if (tc == '*') { /* Minimum width from an argument */ + w = va_arg(arp, int); + tc = *fmt++; + } else { + while (IsDigit(tc)) { /* Minimum width */ + w = w * 10 + tc - '0'; + tc = *fmt++; + } + } + if (tc == '.') { /* Precision */ + tc = *fmt++; + if (tc == '*') { /* Precision from an argument */ + prec = va_arg(arp, int); + tc = *fmt++; + } else { + prec = 0; + while (IsDigit(tc)) { /* Precision */ + prec = prec * 10 + tc - '0'; + tc = *fmt++; + } + } + } + if (tc == 'l') { /* Size: long int */ + f |= 4; tc = *fmt++; +#if FF_PRINT_LLI && FF_INTDEF == 2 + if (tc == 'l') { /* Size: long long int */ + f |= 8; tc = *fmt++; + } +#endif + } + if (tc == 0) break; /* End of format string */ + switch (tc) { /* Atgument type is... */ + case 'b': /* Unsigned binary */ + r = 2; break; + case 'o': /* Unsigned octal */ + r = 8; break; + case 'd': /* Signed decimal */ + case 'u': /* Unsigned decimal */ + r = 10; break; + case 'x': /* Unsigned hexdecimal (lower case) */ + case 'X': /* Unsigned hexdecimal (upper case) */ + r = 16; break; + case 'c': /* Character */ + putc_bfd(&pb, (TCHAR)va_arg(arp, int)); + continue; + case 's': /* String */ + tp = va_arg(arp, TCHAR*); /* Get a pointer argument */ + if (!tp) tp = &nul; /* Null ptr generates a null string */ + for (j = 0; tp[j]; j++) ; /* j = tcslen(tp) */ + if (prec >= 0 && j > (UINT)prec) j = prec; /* Limited length of string body */ + for ( ; !(f & 2) && j < w; j++) putc_bfd(&pb, pad); /* Left pads */ + while (*tp && prec--) putc_bfd(&pb, *tp++); /* Body */ + while (j++ < w) putc_bfd(&pb, ' '); /* Right pads */ + continue; +#if FF_PRINT_FLOAT && FF_INTDEF == 2 + case 'f': /* Floating point (decimal) */ + case 'e': /* Floating point (e) */ + case 'E': /* Floating point (E) */ + ftoa(str, va_arg(arp, double), prec, tc); /* Make a flaoting point string */ + for (j = strlen(str); !(f & 2) && j < w; j++) putc_bfd(&pb, pad); /* Left pads */ + for (i = 0; str[i]; putc_bfd(&pb, str[i++])) ; /* Body */ + while (j++ < w) putc_bfd(&pb, ' '); /* Right pads */ + continue; +#endif + default: /* Unknown type (pass-through) */ + putc_bfd(&pb, tc); continue; + } + + /* Get an integer argument and put it in numeral */ +#if FF_PRINT_LLI && FF_INTDEF == 2 + if (f & 8) { /* long long argument? */ + v = (QWORD)va_arg(arp, LONGLONG); + } else { + if (f & 4) { /* long argument? */ + v = (tc == 'd') ? (QWORD)(LONGLONG)va_arg(arp, long) : (QWORD)va_arg(arp, unsigned long); + } else { /* int/short/char argument */ + v = (tc == 'd') ? (QWORD)(LONGLONG)va_arg(arp, int) : (QWORD)va_arg(arp, unsigned int); + } + } + if (tc == 'd' && (v & 0x8000000000000000)) { /* Negative value? */ + v = 0 - v; f |= 1; + } +#else + if (f & 4) { /* long argument? */ + v = (DWORD)va_arg(arp, long); + } else { /* int/short/char argument */ + v = (tc == 'd') ? (DWORD)(long)va_arg(arp, int) : (DWORD)va_arg(arp, unsigned int); + } + if (tc == 'd' && (v & 0x80000000)) { /* Negative value? */ + v = 0 - v; f |= 1; + } +#endif + i = 0; + do { /* Make an integer number string */ + d = (char)(v % r); v /= r; + if (d > 9) d += (tc == 'x') ? 0x27 : 0x07; + str[i++] = d + '0'; + } while (v && i < SZ_NUM_BUF); + if (f & 1) str[i++] = '-'; /* Sign */ + /* Write it */ + for (j = i; !(f & 2) && j < w; j++) putc_bfd(&pb, pad); /* Left pads */ + do putc_bfd(&pb, (TCHAR)str[--i]); while (i); /* Body */ + while (j++ < w) putc_bfd(&pb, ' '); /* Right pads */ + } + + va_end(arp); + + return putc_flush(&pb); +} + +#endif /* !FF_FS_READONLY */ +#endif /* FF_USE_STRFUNC */ + + + +#if FF_CODE_PAGE == 0 +/*-----------------------------------------------------------------------*/ +/* Set Active Codepage for the Path Name */ +/*-----------------------------------------------------------------------*/ + +FRESULT f_setcp ( + WORD cp /* Value to be set as active code page */ +) +{ + static const WORD validcp[22] = { 437, 720, 737, 771, 775, 850, 852, 855, 857, 860, 861, 862, 863, 864, 865, 866, 869, 932, 936, 949, 950, 0}; + static const BYTE* const tables[22] = {Ct437, Ct720, Ct737, Ct771, Ct775, Ct850, Ct852, Ct855, Ct857, Ct860, Ct861, Ct862, Ct863, Ct864, Ct865, Ct866, Ct869, Dc932, Dc936, Dc949, Dc950, 0}; + UINT i; + + + for (i = 0; validcp[i] != 0 && validcp[i] != cp; i++) ; /* Find the code page */ + if (validcp[i] != cp) return FR_INVALID_PARAMETER; /* Not found? */ + + CodePage = cp; + if (cp >= 900) { /* DBCS */ + ExCvt = 0; + DbcTbl = tables[i]; + } else { /* SBCS */ + ExCvt = tables[i]; + DbcTbl = 0; + } + return FR_OK; +} +#endif /* FF_CODE_PAGE == 0 */ + diff --git a/ext/fatfs/source/ff.h b/ext/fatfs/source/ff.h new file mode 100644 index 0000000000..64bf79db15 --- /dev/null +++ b/ext/fatfs/source/ff.h @@ -0,0 +1,422 @@ +/*----------------------------------------------------------------------------/ +/ FatFs - Generic FAT Filesystem module R0.14b / +/-----------------------------------------------------------------------------/ +/ +/ Copyright (C) 2021, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: + +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +/ +/----------------------------------------------------------------------------*/ + + +#ifndef FF_DEFINED +#define FF_DEFINED 86631 /* Revision ID */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "ffconf.h" /* FatFs configuration options */ + +#if FF_DEFINED != FFCONF_DEF +#error Wrong configuration file (ffconf.h). +#endif + + +/* Integer types used for FatFs API */ + +#if defined(_WIN32) /* Windows VC++ (for development only) */ +#define FF_INTDEF 2 +#include +typedef unsigned __int64 QWORD; +#include +#define isnan(v) _isnan(v) +#define isinf(v) (!_finite(v)) + +#elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__cplusplus) /* C99 or later */ +#define FF_INTDEF 2 +#include +typedef unsigned int UINT; /* int must be 16-bit or 32-bit */ +typedef unsigned char BYTE; /* char must be 8-bit */ +typedef uint16_t WORD; /* 16-bit unsigned integer */ +typedef uint32_t DWORD; /* 32-bit unsigned integer */ +typedef uint64_t QWORD; /* 64-bit unsigned integer */ +typedef WORD WCHAR; /* UTF-16 character type */ + +#else /* Earlier than C99 */ +#define FF_INTDEF 1 +typedef unsigned int UINT; /* int must be 16-bit or 32-bit */ +typedef unsigned char BYTE; /* char must be 8-bit */ +typedef unsigned short WORD; /* 16-bit unsigned integer */ +typedef unsigned long DWORD; /* 32-bit unsigned integer */ +typedef WORD WCHAR; /* UTF-16 character type */ +#endif + + +/* Type of file size and LBA variables */ + +#if FF_FS_EXFAT +#if FF_INTDEF != 2 +#error exFAT feature wants C99 or later +#endif +typedef QWORD FSIZE_t; +#if FF_LBA64 +typedef QWORD LBA_t; +#else +typedef DWORD LBA_t; +#endif +#else +#if FF_LBA64 +#error exFAT needs to be enabled when enable 64-bit LBA +#endif +typedef DWORD FSIZE_t; +typedef DWORD LBA_t; +#endif + + + +/* Type of path name strings on FatFs API (TCHAR) */ + +#if FF_USE_LFN && FF_LFN_UNICODE == 1 /* Unicode in UTF-16 encoding */ +typedef WCHAR TCHAR; +#define _T(x) L ## x +#define _TEXT(x) L ## x +#elif FF_USE_LFN && FF_LFN_UNICODE == 2 /* Unicode in UTF-8 encoding */ +typedef char TCHAR; +#define _T(x) u8 ## x +#define _TEXT(x) u8 ## x +#elif FF_USE_LFN && FF_LFN_UNICODE == 3 /* Unicode in UTF-32 encoding */ +typedef DWORD TCHAR; +#define _T(x) U ## x +#define _TEXT(x) U ## x +#elif FF_USE_LFN && (FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 3) +#error Wrong FF_LFN_UNICODE setting +#else /* ANSI/OEM code in SBCS/DBCS */ +typedef char TCHAR; +#define _T(x) x +#define _TEXT(x) x +#endif + + + +/* Definitions of volume management */ + +#if FF_MULTI_PARTITION /* Multiple partition configuration */ +typedef struct { + BYTE pd; /* Physical drive number */ + BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */ +} PARTITION; +extern PARTITION VolToPart[]; /* Volume - Partition mapping table */ +#endif + +#if FF_STR_VOLUME_ID +#ifndef FF_VOLUME_STRS +extern const char* VolumeStr[FF_VOLUMES]; /* User defied volume ID */ +#endif +#endif + + + +/* Filesystem object structure (FATFS) */ + +typedef struct { + BYTE fs_type; /* Filesystem type (0:not mounted) */ + BYTE pdrv; /* Associated physical drive */ + BYTE n_fats; /* Number of FATs (1 or 2) */ + BYTE wflag; /* win[] flag (b0:dirty) */ + BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */ + WORD id; /* Volume mount ID */ + WORD n_rootdir; /* Number of root directory entries (FAT12/16) */ + WORD csize; /* Cluster size [sectors] */ +#if FF_MAX_SS != FF_MIN_SS + WORD ssize; /* Sector size (512, 1024, 2048 or 4096) */ +#endif +#if FF_USE_LFN + WCHAR* lfnbuf; /* LFN working buffer */ +#endif +#if FF_FS_EXFAT + BYTE* dirbuf; /* Directory entry block scratchpad buffer for exFAT */ +#endif +#if FF_FS_REENTRANT + FF_SYNC_t sobj; /* Identifier of sync object */ +#endif +#if !FF_FS_READONLY + DWORD last_clst; /* Last allocated cluster */ + DWORD free_clst; /* Number of free clusters */ +#endif +#if FF_FS_RPATH + DWORD cdir; /* Current directory start cluster (0:root) */ +#if FF_FS_EXFAT + DWORD cdc_scl; /* Containing directory start cluster (invalid when cdir is 0) */ + DWORD cdc_size; /* b31-b8:Size of containing directory, b7-b0: Chain status */ + DWORD cdc_ofs; /* Offset in the containing directory (invalid when cdir is 0) */ +#endif +#endif + DWORD n_fatent; /* Number of FAT entries (number of clusters + 2) */ + DWORD fsize; /* Size of an FAT [sectors] */ + LBA_t volbase; /* Volume base sector */ + LBA_t fatbase; /* FAT base sector */ + LBA_t dirbase; /* Root directory base sector/cluster */ + LBA_t database; /* Data base sector */ +#if FF_FS_EXFAT + LBA_t bitbase; /* Allocation bitmap base sector */ +#endif + LBA_t winsect; /* Current sector appearing in the win[] */ + BYTE win[FF_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */ +} FATFS; + + + +/* Object ID and allocation information (FFOBJID) */ + +typedef struct { + FATFS* fs; /* Pointer to the hosting volume of this object */ + WORD id; /* Hosting volume mount ID */ + BYTE attr; /* Object attribute */ + BYTE stat; /* Object chain status (b1-0: =0:not contiguous, =2:contiguous, =3:fragmented in this session, b2:sub-directory stretched) */ + DWORD sclust; /* Object data start cluster (0:no cluster or root directory) */ + FSIZE_t objsize; /* Object size (valid when sclust != 0) */ +#if FF_FS_EXFAT + DWORD n_cont; /* Size of first fragment - 1 (valid when stat == 3) */ + DWORD n_frag; /* Size of last fragment needs to be written to FAT (valid when not zero) */ + DWORD c_scl; /* Containing directory start cluster (valid when sclust != 0) */ + DWORD c_size; /* b31-b8:Size of containing directory, b7-b0: Chain status (valid when c_scl != 0) */ + DWORD c_ofs; /* Offset in the containing directory (valid when file object and sclust != 0) */ +#endif +#if FF_FS_LOCK + UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */ +#endif +} FFOBJID; + + + +/* File object structure (FIL) */ + +typedef struct { + FFOBJID obj; /* Object identifier (must be the 1st member to detect invalid object pointer) */ + BYTE flag; /* File status flags */ + BYTE err; /* Abort flag (error code) */ + FSIZE_t fptr; /* File read/write pointer (Zeroed on file open) */ + DWORD clust; /* Current cluster of fpter (invalid when fptr is 0) */ + LBA_t sect; /* Sector number appearing in buf[] (0:invalid) */ +#if !FF_FS_READONLY + LBA_t dir_sect; /* Sector number containing the directory entry (not used at exFAT) */ + BYTE* dir_ptr; /* Pointer to the directory entry in the win[] (not used at exFAT) */ +#endif +#if FF_USE_FASTSEEK + DWORD* cltbl; /* Pointer to the cluster link map table (nulled on open, set by application) */ +#endif +#if !FF_FS_TINY + BYTE buf[FF_MAX_SS]; /* File private data read/write window */ +#endif +} FIL; + + + +/* Directory object structure (DIR) */ + +typedef struct { + FFOBJID obj; /* Object identifier */ + DWORD dptr; /* Current read/write offset */ + DWORD clust; /* Current cluster */ + LBA_t sect; /* Current sector (0:Read operation has terminated) */ + BYTE* dir; /* Pointer to the directory item in the win[] */ + BYTE fn[12]; /* SFN (in/out) {body[8],ext[3],status[1]} */ +#if FF_USE_LFN + DWORD blk_ofs; /* Offset of current entry block being processed (0xFFFFFFFF:Invalid) */ +#endif +#if FF_USE_FIND + const TCHAR* pat; /* Pointer to the name matching pattern */ +#endif +} DIR; + + + +/* File information structure (FILINFO) */ + +typedef struct { + FSIZE_t fsize; /* File size */ + WORD fdate; /* Modified date */ + WORD ftime; /* Modified time */ + BYTE fattrib; /* File attribute */ +#if FF_USE_LFN + TCHAR altname[FF_SFN_BUF + 1];/* Altenative file name */ + TCHAR fname[FF_LFN_BUF + 1]; /* Primary file name */ +#else + TCHAR fname[12 + 1]; /* File name */ +#endif +} FILINFO; + + + +/* Format parameter structure (MKFS_PARM) */ + +typedef struct { + BYTE fmt; /* Format option (FM_FAT, FM_FAT32, FM_EXFAT and FM_SFD) */ + BYTE n_fat; /* Number of FATs */ + UINT align; /* Data area alignment (sector) */ + UINT n_root; /* Number of root directory entries */ + DWORD au_size; /* Cluster size (byte) */ +} MKFS_PARM; + + + +/* File function return code (FRESULT) */ + +typedef enum { + FR_OK = 0, /* (0) Succeeded */ + FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ + FR_INT_ERR, /* (2) Assertion failed */ + FR_NOT_READY, /* (3) The physical drive cannot work */ + FR_NO_FILE, /* (4) Could not find the file */ + FR_NO_PATH, /* (5) Could not find the path */ + FR_INVALID_NAME, /* (6) The path name format is invalid */ + FR_DENIED, /* (7) Access denied due to prohibited access or directory full */ + FR_EXIST, /* (8) Access denied due to prohibited access */ + FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ + FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ + FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ + FR_NOT_ENABLED, /* (12) The volume has no work area */ + FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */ + FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */ + FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ + FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */ + FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ + FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */ + FR_INVALID_PARAMETER /* (19) Given parameter is invalid */ +} FRESULT; + + + +/*--------------------------------------------------------------*/ +/* FatFs module application interface */ + +FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */ +FRESULT f_close (FIL* fp); /* Close an open file object */ +FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from the file */ +FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to the file */ +FRESULT f_lseek (FIL* fp, FSIZE_t ofs); /* Move file pointer of the file object */ +FRESULT f_truncate (FIL* fp); /* Truncate the file */ +FRESULT f_sync (FIL* fp); /* Flush cached data of the writing file */ +FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */ +FRESULT f_closedir (DIR* dp); /* Close an open directory */ +FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */ +FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern); /* Find first file */ +FRESULT f_findnext (DIR* dp, FILINFO* fno); /* Find next file */ +FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */ +FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */ +FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */ +FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */ +FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask); /* Change attribute of a file/dir */ +FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change timestamp of a file/dir */ +FRESULT f_chdir (const TCHAR* path); /* Change current directory */ +FRESULT f_chdrive (const TCHAR* path); /* Change current drive */ +FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */ +FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */ +FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */ +FRESULT f_setlabel (const TCHAR* label); /* Set volume label */ +FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */ +FRESULT f_expand (FIL* fp, FSIZE_t fsz, BYTE opt); /* Allocate a contiguous block to the file */ +FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */ +FRESULT f_mkfs (const TCHAR* path, const MKFS_PARM* opt, void* work, UINT len); /* Create a FAT volume */ +FRESULT f_fdisk (BYTE pdrv, const LBA_t ptbl[], void* work); /* Divide a physical drive into some partitions */ +FRESULT f_setcp (WORD cp); /* Set current code page */ +int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */ +int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */ +int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */ +TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */ + +#define f_eof(fp) ((int)((fp)->fptr == (fp)->obj.objsize)) +#define f_error(fp) ((fp)->err) +#define f_tell(fp) ((fp)->fptr) +#define f_size(fp) ((fp)->obj.objsize) +#define f_rewind(fp) f_lseek((fp), 0) +#define f_rewinddir(dp) f_readdir((dp), 0) +#define f_rmdir(path) f_unlink(path) +#define f_unmount(path) f_mount(0, path, 0) + + + + +/*--------------------------------------------------------------*/ +/* Additional user defined functions */ + +/* RTC function */ +#if !FF_FS_READONLY && !FF_FS_NORTC +DWORD get_fattime (void); +#endif + +/* LFN support functions */ +#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */ +WCHAR ff_oem2uni (WCHAR oem, WORD cp); /* OEM code to Unicode conversion */ +WCHAR ff_uni2oem (DWORD uni, WORD cp); /* Unicode to OEM code conversion */ +DWORD ff_wtoupper (DWORD uni); /* Unicode upper-case conversion */ +#endif +#if FF_USE_LFN == 3 /* Dynamic memory allocation */ +void* ff_memalloc (UINT msize); /* Allocate memory block */ +void ff_memfree (void* mblock); /* Free memory block */ +#endif + +/* Sync functions */ +#if FF_FS_REENTRANT +int ff_cre_syncobj (BYTE vol, FF_SYNC_t* sobj); /* Create a sync object */ +int ff_req_grant (FF_SYNC_t sobj); /* Lock sync object */ +void ff_rel_grant (FF_SYNC_t sobj); /* Unlock sync object */ +int ff_del_syncobj (FF_SYNC_t sobj); /* Delete a sync object */ +#endif + + + + +/*--------------------------------------------------------------*/ +/* Flags and offset address */ + + +/* File access mode and open method flags (3rd argument of f_open) */ +#define FA_READ 0x01 +#define FA_WRITE 0x02 +#define FA_OPEN_EXISTING 0x00 +#define FA_CREATE_NEW 0x04 +#define FA_CREATE_ALWAYS 0x08 +#define FA_OPEN_ALWAYS 0x10 +#define FA_OPEN_APPEND 0x30 + +/* Fast seek controls (2nd argument of f_lseek) */ +#define CREATE_LINKMAP ((FSIZE_t)0 - 1) + +/* Format options (2nd argument of f_mkfs) */ +#define FM_FAT 0x01 +#define FM_FAT32 0x02 +#define FM_EXFAT 0x04 +#define FM_ANY 0x07 +#define FM_SFD 0x08 + +/* Filesystem type (FATFS.fs_type) */ +#define FS_FAT12 1 +#define FS_FAT16 2 +#define FS_FAT32 3 +#define FS_EXFAT 4 + +/* File attribute bits for directory entry (FILINFO.fattrib) */ +#define AM_RDO 0x01 /* Read only */ +#define AM_HID 0x02 /* Hidden */ +#define AM_SYS 0x04 /* System */ +#define AM_DIR 0x10 /* Directory */ +#define AM_ARC 0x20 /* Archive */ + + +#ifdef __cplusplus +} +#endif + +#endif /* FF_DEFINED */ diff --git a/ext/fatfs/source/ffsystem.c b/ext/fatfs/source/ffsystem.c new file mode 100644 index 0000000000..ad5d73770f --- /dev/null +++ b/ext/fatfs/source/ffsystem.c @@ -0,0 +1,170 @@ +/*------------------------------------------------------------------------*/ +/* Sample Code of OS Dependent Functions for FatFs */ +/* (C)ChaN, 2018 */ +/*------------------------------------------------------------------------*/ + + +#include "ff.h" + + +#if FF_USE_LFN == 3 /* Dynamic memory allocation */ + +/*------------------------------------------------------------------------*/ +/* Allocate a memory block */ +/*------------------------------------------------------------------------*/ + +void* ff_memalloc ( /* Returns pointer to the allocated memory block (null if not enough core) */ + UINT msize /* Number of bytes to allocate */ +) +{ + return malloc(msize); /* Allocate a new memory block with POSIX API */ +} + + +/*------------------------------------------------------------------------*/ +/* Free a memory block */ +/*------------------------------------------------------------------------*/ + +void ff_memfree ( + void* mblock /* Pointer to the memory block to free (nothing to do if null) */ +) +{ + free(mblock); /* Free the memory block with POSIX API */ +} + +#endif + + + +#if FF_FS_REENTRANT /* Mutal exclusion */ + +/*------------------------------------------------------------------------*/ +/* Create a Synchronization Object */ +/*------------------------------------------------------------------------*/ +/* This function is called in f_mount() function to create a new +/ synchronization object for the volume, such as semaphore and mutex. +/ When a 0 is returned, the f_mount() function fails with FR_INT_ERR. +*/ + +//const osMutexDef_t Mutex[FF_VOLUMES]; /* Table of CMSIS-RTOS mutex */ + + +int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */ + BYTE vol, /* Corresponding volume (logical drive number) */ + FF_SYNC_t* sobj /* Pointer to return the created sync object */ +) +{ + /* Win32 */ + *sobj = CreateMutex(NULL, FALSE, NULL); + return (int)(*sobj != INVALID_HANDLE_VALUE); + + /* uITRON */ +// T_CSEM csem = {TA_TPRI,1,1}; +// *sobj = acre_sem(&csem); +// return (int)(*sobj > 0); + + /* uC/OS-II */ +// OS_ERR err; +// *sobj = OSMutexCreate(0, &err); +// return (int)(err == OS_NO_ERR); + + /* FreeRTOS */ +// *sobj = xSemaphoreCreateMutex(); +// return (int)(*sobj != NULL); + + /* CMSIS-RTOS */ +// *sobj = osMutexCreate(&Mutex[vol]); +// return (int)(*sobj != NULL); +} + + +/*------------------------------------------------------------------------*/ +/* Delete a Synchronization Object */ +/*------------------------------------------------------------------------*/ +/* This function is called in f_mount() function to delete a synchronization +/ object that created with ff_cre_syncobj() function. When a 0 is returned, +/ the f_mount() function fails with FR_INT_ERR. +*/ + +int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to an error */ + FF_SYNC_t sobj /* Sync object tied to the logical drive to be deleted */ +) +{ + /* Win32 */ + return (int)CloseHandle(sobj); + + /* uITRON */ +// return (int)(del_sem(sobj) == E_OK); + + /* uC/OS-II */ +// OS_ERR err; +// OSMutexDel(sobj, OS_DEL_ALWAYS, &err); +// return (int)(err == OS_NO_ERR); + + /* FreeRTOS */ +// vSemaphoreDelete(sobj); +// return 1; + + /* CMSIS-RTOS */ +// return (int)(osMutexDelete(sobj) == osOK); +} + + +/*------------------------------------------------------------------------*/ +/* Request Grant to Access the Volume */ +/*------------------------------------------------------------------------*/ +/* This function is called on entering file functions to lock the volume. +/ When a 0 is returned, the file function fails with FR_TIMEOUT. +*/ + +int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a grant */ + FF_SYNC_t sobj /* Sync object to wait */ +) +{ + /* Win32 */ + return (int)(WaitForSingleObject(sobj, FF_FS_TIMEOUT) == WAIT_OBJECT_0); + + /* uITRON */ +// return (int)(wai_sem(sobj) == E_OK); + + /* uC/OS-II */ +// OS_ERR err; +// OSMutexPend(sobj, FF_FS_TIMEOUT, &err)); +// return (int)(err == OS_NO_ERR); + + /* FreeRTOS */ +// return (int)(xSemaphoreTake(sobj, FF_FS_TIMEOUT) == pdTRUE); + + /* CMSIS-RTOS */ +// return (int)(osMutexWait(sobj, FF_FS_TIMEOUT) == osOK); +} + + +/*------------------------------------------------------------------------*/ +/* Release Grant to Access the Volume */ +/*------------------------------------------------------------------------*/ +/* This function is called on leaving file functions to unlock the volume. +*/ + +void ff_rel_grant ( + FF_SYNC_t sobj /* Sync object to be signaled */ +) +{ + /* Win32 */ + ReleaseMutex(sobj); + + /* uITRON */ +// sig_sem(sobj); + + /* uC/OS-II */ +// OSMutexPost(sobj); + + /* FreeRTOS */ +// xSemaphoreGive(sobj); + + /* CMSIS-RTOS */ +// osMutexRelease(sobj); +} + +#endif + diff --git a/ext/fatfs/source/ffunicode.c b/ext/fatfs/source/ffunicode.c new file mode 100644 index 0000000000..784a10e564 --- /dev/null +++ b/ext/fatfs/source/ffunicode.c @@ -0,0 +1,15593 @@ +/*------------------------------------------------------------------------*/ +/* Unicode handling functions for FatFs R0.13+ */ +/*------------------------------------------------------------------------*/ +/* This module will occupy a huge memory in the .const section when the / +/ FatFs is configured for LFN with DBCS. If the system has any Unicode / +/ utilitiy for the code conversion, this module should be modified to use / +/ that function to avoid silly memory consumption. / +/-------------------------------------------------------------------------*/ +/* +/ Copyright (C) 2014, ChaN, all right reserved. +/ +/ FatFs module is an open source software. Redistribution and use of FatFs in +/ source and binary forms, with or without modification, are permitted provided +/ that the following condition is met: +/ +/ 1. Redistributions of source code must retain the above copyright notice, +/ this condition and the following disclaimer. +/ +/ This software is provided by the copyright holder and contributors "AS IS" +/ and any warranties related to this software are DISCLAIMED. +/ The copyright owner or contributors be NOT LIABLE for any damages caused +/ by use of this software. +*/ + + +#include "ff.h" + +#if FF_USE_LFN /* This module will be blanked if non-LFN configuration */ + +#define MERGE2(a, b) a ## b +#define CVTBL(tbl, cp) MERGE2(tbl, cp) + + +/*------------------------------------------------------------------------*/ +/* Code Conversion Tables */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE == 932 || FF_CODE_PAGE == 0 /* Japanese */ +static const WCHAR uni2oem932[] = { /* Unicode --> Shift_JIS pairs */ + 0x00A7, 0x8198, 0x00A8, 0x814E, 0x00B0, 0x818B, 0x00B1, 0x817D, 0x00B4, 0x814C, 0x00B6, 0x81F7, 0x00D7, 0x817E, 0x00F7, 0x8180, + 0x0391, 0x839F, 0x0392, 0x83A0, 0x0393, 0x83A1, 0x0394, 0x83A2, 0x0395, 0x83A3, 0x0396, 0x83A4, 0x0397, 0x83A5, 0x0398, 0x83A6, + 0x0399, 0x83A7, 0x039A, 0x83A8, 0x039B, 0x83A9, 0x039C, 0x83AA, 0x039D, 0x83AB, 0x039E, 0x83AC, 0x039F, 0x83AD, 0x03A0, 0x83AE, + 0x03A1, 0x83AF, 0x03A3, 0x83B0, 0x03A4, 0x83B1, 0x03A5, 0x83B2, 0x03A6, 0x83B3, 0x03A7, 0x83B4, 0x03A8, 0x83B5, 0x03A9, 0x83B6, + 0x03B1, 0x83BF, 0x03B2, 0x83C0, 0x03B3, 0x83C1, 0x03B4, 0x83C2, 0x03B5, 0x83C3, 0x03B6, 0x83C4, 0x03B7, 0x83C5, 0x03B8, 0x83C6, + 0x03B9, 0x83C7, 0x03BA, 0x83C8, 0x03BB, 0x83C9, 0x03BC, 0x83CA, 0x03BD, 0x83CB, 0x03BE, 0x83CC, 0x03BF, 0x83CD, 0x03C0, 0x83CE, + 0x03C1, 0x83CF, 0x03C3, 0x83D0, 0x03C4, 0x83D1, 0x03C5, 0x83D2, 0x03C6, 0x83D3, 0x03C7, 0x83D4, 0x03C8, 0x83D5, 0x03C9, 0x83D6, + 0x0401, 0x8446, 0x0410, 0x8440, 0x0411, 0x8441, 0x0412, 0x8442, 0x0413, 0x8443, 0x0414, 0x8444, 0x0415, 0x8445, 0x0416, 0x8447, + 0x0417, 0x8448, 0x0418, 0x8449, 0x0419, 0x844A, 0x041A, 0x844B, 0x041B, 0x844C, 0x041C, 0x844D, 0x041D, 0x844E, 0x041E, 0x844F, + 0x041F, 0x8450, 0x0420, 0x8451, 0x0421, 0x8452, 0x0422, 0x8453, 0x0423, 0x8454, 0x0424, 0x8455, 0x0425, 0x8456, 0x0426, 0x8457, + 0x0427, 0x8458, 0x0428, 0x8459, 0x0429, 0x845A, 0x042A, 0x845B, 0x042B, 0x845C, 0x042C, 0x845D, 0x042D, 0x845E, 0x042E, 0x845F, + 0x042F, 0x8460, 0x0430, 0x8470, 0x0431, 0x8471, 0x0432, 0x8472, 0x0433, 0x8473, 0x0434, 0x8474, 0x0435, 0x8475, 0x0436, 0x8477, + 0x0437, 0x8478, 0x0438, 0x8479, 0x0439, 0x847A, 0x043A, 0x847B, 0x043B, 0x847C, 0x043C, 0x847D, 0x043D, 0x847E, 0x043E, 0x8480, + 0x043F, 0x8481, 0x0440, 0x8482, 0x0441, 0x8483, 0x0442, 0x8484, 0x0443, 0x8485, 0x0444, 0x8486, 0x0445, 0x8487, 0x0446, 0x8488, + 0x0447, 0x8489, 0x0448, 0x848A, 0x0449, 0x848B, 0x044A, 0x848C, 0x044B, 0x848D, 0x044C, 0x848E, 0x044D, 0x848F, 0x044E, 0x8490, + 0x044F, 0x8491, 0x0451, 0x8476, 0x2010, 0x815D, 0x2015, 0x815C, 0x2018, 0x8165, 0x2019, 0x8166, 0x201C, 0x8167, 0x201D, 0x8168, + 0x2020, 0x81F5, 0x2021, 0x81F6, 0x2025, 0x8164, 0x2026, 0x8163, 0x2030, 0x81F1, 0x2032, 0x818C, 0x2033, 0x818D, 0x203B, 0x81A6, + 0x2103, 0x818E, 0x2116, 0x8782, 0x2121, 0x8784, 0x212B, 0x81F0, 0x2160, 0x8754, 0x2161, 0x8755, 0x2162, 0x8756, 0x2163, 0x8757, + 0x2164, 0x8758, 0x2165, 0x8759, 0x2166, 0x875A, 0x2167, 0x875B, 0x2168, 0x875C, 0x2169, 0x875D, 0x2170, 0xFA40, 0x2171, 0xFA41, + 0x2172, 0xFA42, 0x2173, 0xFA43, 0x2174, 0xFA44, 0x2175, 0xFA45, 0x2176, 0xFA46, 0x2177, 0xFA47, 0x2178, 0xFA48, 0x2179, 0xFA49, + 0x2190, 0x81A9, 0x2191, 0x81AA, 0x2192, 0x81A8, 0x2193, 0x81AB, 0x21D2, 0x81CB, 0x21D4, 0x81CC, 0x2200, 0x81CD, 0x2202, 0x81DD, + 0x2203, 0x81CE, 0x2207, 0x81DE, 0x2208, 0x81B8, 0x220B, 0x81B9, 0x2211, 0x8794, 0x221A, 0x81E3, 0x221D, 0x81E5, 0x221E, 0x8187, + 0x221F, 0x8798, 0x2220, 0x81DA, 0x2225, 0x8161, 0x2227, 0x81C8, 0x2228, 0x81C9, 0x2229, 0x81BF, 0x222A, 0x81BE, 0x222B, 0x81E7, + 0x222C, 0x81E8, 0x222E, 0x8793, 0x2234, 0x8188, 0x2235, 0x81E6, 0x223D, 0x81E4, 0x2252, 0x81E0, 0x2260, 0x8182, 0x2261, 0x81DF, + 0x2266, 0x8185, 0x2267, 0x8186, 0x226A, 0x81E1, 0x226B, 0x81E2, 0x2282, 0x81BC, 0x2283, 0x81BD, 0x2286, 0x81BA, 0x2287, 0x81BB, + 0x22A5, 0x81DB, 0x22BF, 0x8799, 0x2312, 0x81DC, 0x2460, 0x8740, 0x2461, 0x8741, 0x2462, 0x8742, 0x2463, 0x8743, 0x2464, 0x8744, + 0x2465, 0x8745, 0x2466, 0x8746, 0x2467, 0x8747, 0x2468, 0x8748, 0x2469, 0x8749, 0x246A, 0x874A, 0x246B, 0x874B, 0x246C, 0x874C, + 0x246D, 0x874D, 0x246E, 0x874E, 0x246F, 0x874F, 0x2470, 0x8750, 0x2471, 0x8751, 0x2472, 0x8752, 0x2473, 0x8753, 0x2500, 0x849F, + 0x2501, 0x84AA, 0x2502, 0x84A0, 0x2503, 0x84AB, 0x250C, 0x84A1, 0x250F, 0x84AC, 0x2510, 0x84A2, 0x2513, 0x84AD, 0x2514, 0x84A4, + 0x2517, 0x84AF, 0x2518, 0x84A3, 0x251B, 0x84AE, 0x251C, 0x84A5, 0x251D, 0x84BA, 0x2520, 0x84B5, 0x2523, 0x84B0, 0x2524, 0x84A7, + 0x2525, 0x84BC, 0x2528, 0x84B7, 0x252B, 0x84B2, 0x252C, 0x84A6, 0x252F, 0x84B6, 0x2530, 0x84BB, 0x2533, 0x84B1, 0x2534, 0x84A8, + 0x2537, 0x84B8, 0x2538, 0x84BD, 0x253B, 0x84B3, 0x253C, 0x84A9, 0x253F, 0x84B9, 0x2542, 0x84BE, 0x254B, 0x84B4, 0x25A0, 0x81A1, + 0x25A1, 0x81A0, 0x25B2, 0x81A3, 0x25B3, 0x81A2, 0x25BC, 0x81A5, 0x25BD, 0x81A4, 0x25C6, 0x819F, 0x25C7, 0x819E, 0x25CB, 0x819B, + 0x25CE, 0x819D, 0x25CF, 0x819C, 0x25EF, 0x81FC, 0x2605, 0x819A, 0x2606, 0x8199, 0x2640, 0x818A, 0x2642, 0x8189, 0x266A, 0x81F4, + 0x266D, 0x81F3, 0x266F, 0x81F2, 0x3000, 0x8140, 0x3001, 0x8141, 0x3002, 0x8142, 0x3003, 0x8156, 0x3005, 0x8158, 0x3006, 0x8159, + 0x3007, 0x815A, 0x3008, 0x8171, 0x3009, 0x8172, 0x300A, 0x8173, 0x300B, 0x8174, 0x300C, 0x8175, 0x300D, 0x8176, 0x300E, 0x8177, + 0x300F, 0x8178, 0x3010, 0x8179, 0x3011, 0x817A, 0x3012, 0x81A7, 0x3013, 0x81AC, 0x3014, 0x816B, 0x3015, 0x816C, 0x301D, 0x8780, + 0x301F, 0x8781, 0x3041, 0x829F, 0x3042, 0x82A0, 0x3043, 0x82A1, 0x3044, 0x82A2, 0x3045, 0x82A3, 0x3046, 0x82A4, 0x3047, 0x82A5, + 0x3048, 0x82A6, 0x3049, 0x82A7, 0x304A, 0x82A8, 0x304B, 0x82A9, 0x304C, 0x82AA, 0x304D, 0x82AB, 0x304E, 0x82AC, 0x304F, 0x82AD, + 0x3050, 0x82AE, 0x3051, 0x82AF, 0x3052, 0x82B0, 0x3053, 0x82B1, 0x3054, 0x82B2, 0x3055, 0x82B3, 0x3056, 0x82B4, 0x3057, 0x82B5, + 0x3058, 0x82B6, 0x3059, 0x82B7, 0x305A, 0x82B8, 0x305B, 0x82B9, 0x305C, 0x82BA, 0x305D, 0x82BB, 0x305E, 0x82BC, 0x305F, 0x82BD, + 0x3060, 0x82BE, 0x3061, 0x82BF, 0x3062, 0x82C0, 0x3063, 0x82C1, 0x3064, 0x82C2, 0x3065, 0x82C3, 0x3066, 0x82C4, 0x3067, 0x82C5, + 0x3068, 0x82C6, 0x3069, 0x82C7, 0x306A, 0x82C8, 0x306B, 0x82C9, 0x306C, 0x82CA, 0x306D, 0x82CB, 0x306E, 0x82CC, 0x306F, 0x82CD, + 0x3070, 0x82CE, 0x3071, 0x82CF, 0x3072, 0x82D0, 0x3073, 0x82D1, 0x3074, 0x82D2, 0x3075, 0x82D3, 0x3076, 0x82D4, 0x3077, 0x82D5, + 0x3078, 0x82D6, 0x3079, 0x82D7, 0x307A, 0x82D8, 0x307B, 0x82D9, 0x307C, 0x82DA, 0x307D, 0x82DB, 0x307E, 0x82DC, 0x307F, 0x82DD, + 0x3080, 0x82DE, 0x3081, 0x82DF, 0x3082, 0x82E0, 0x3083, 0x82E1, 0x3084, 0x82E2, 0x3085, 0x82E3, 0x3086, 0x82E4, 0x3087, 0x82E5, + 0x3088, 0x82E6, 0x3089, 0x82E7, 0x308A, 0x82E8, 0x308B, 0x82E9, 0x308C, 0x82EA, 0x308D, 0x82EB, 0x308E, 0x82EC, 0x308F, 0x82ED, + 0x3090, 0x82EE, 0x3091, 0x82EF, 0x3092, 0x82F0, 0x3093, 0x82F1, 0x309B, 0x814A, 0x309C, 0x814B, 0x309D, 0x8154, 0x309E, 0x8155, + 0x30A1, 0x8340, 0x30A2, 0x8341, 0x30A3, 0x8342, 0x30A4, 0x8343, 0x30A5, 0x8344, 0x30A6, 0x8345, 0x30A7, 0x8346, 0x30A8, 0x8347, + 0x30A9, 0x8348, 0x30AA, 0x8349, 0x30AB, 0x834A, 0x30AC, 0x834B, 0x30AD, 0x834C, 0x30AE, 0x834D, 0x30AF, 0x834E, 0x30B0, 0x834F, + 0x30B1, 0x8350, 0x30B2, 0x8351, 0x30B3, 0x8352, 0x30B4, 0x8353, 0x30B5, 0x8354, 0x30B6, 0x8355, 0x30B7, 0x8356, 0x30B8, 0x8357, + 0x30B9, 0x8358, 0x30BA, 0x8359, 0x30BB, 0x835A, 0x30BC, 0x835B, 0x30BD, 0x835C, 0x30BE, 0x835D, 0x30BF, 0x835E, 0x30C0, 0x835F, + 0x30C1, 0x8360, 0x30C2, 0x8361, 0x30C3, 0x8362, 0x30C4, 0x8363, 0x30C5, 0x8364, 0x30C6, 0x8365, 0x30C7, 0x8366, 0x30C8, 0x8367, + 0x30C9, 0x8368, 0x30CA, 0x8369, 0x30CB, 0x836A, 0x30CC, 0x836B, 0x30CD, 0x836C, 0x30CE, 0x836D, 0x30CF, 0x836E, 0x30D0, 0x836F, + 0x30D1, 0x8370, 0x30D2, 0x8371, 0x30D3, 0x8372, 0x30D4, 0x8373, 0x30D5, 0x8374, 0x30D6, 0x8375, 0x30D7, 0x8376, 0x30D8, 0x8377, + 0x30D9, 0x8378, 0x30DA, 0x8379, 0x30DB, 0x837A, 0x30DC, 0x837B, 0x30DD, 0x837C, 0x30DE, 0x837D, 0x30DF, 0x837E, 0x30E0, 0x8380, + 0x30E1, 0x8381, 0x30E2, 0x8382, 0x30E3, 0x8383, 0x30E4, 0x8384, 0x30E5, 0x8385, 0x30E6, 0x8386, 0x30E7, 0x8387, 0x30E8, 0x8388, + 0x30E9, 0x8389, 0x30EA, 0x838A, 0x30EB, 0x838B, 0x30EC, 0x838C, 0x30ED, 0x838D, 0x30EE, 0x838E, 0x30EF, 0x838F, 0x30F0, 0x8390, + 0x30F1, 0x8391, 0x30F2, 0x8392, 0x30F3, 0x8393, 0x30F4, 0x8394, 0x30F5, 0x8395, 0x30F6, 0x8396, 0x30FB, 0x8145, 0x30FC, 0x815B, + 0x30FD, 0x8152, 0x30FE, 0x8153, 0x3231, 0x878A, 0x3232, 0x878B, 0x3239, 0x878C, 0x32A4, 0x8785, 0x32A5, 0x8786, 0x32A6, 0x8787, + 0x32A7, 0x8788, 0x32A8, 0x8789, 0x3303, 0x8765, 0x330D, 0x8769, 0x3314, 0x8760, 0x3318, 0x8763, 0x3322, 0x8761, 0x3323, 0x876B, + 0x3326, 0x876A, 0x3327, 0x8764, 0x332B, 0x876C, 0x3336, 0x8766, 0x333B, 0x876E, 0x3349, 0x875F, 0x334A, 0x876D, 0x334D, 0x8762, + 0x3351, 0x8767, 0x3357, 0x8768, 0x337B, 0x877E, 0x337C, 0x878F, 0x337D, 0x878E, 0x337E, 0x878D, 0x338E, 0x8772, 0x338F, 0x8773, + 0x339C, 0x876F, 0x339D, 0x8770, 0x339E, 0x8771, 0x33A1, 0x8775, 0x33C4, 0x8774, 0x33CD, 0x8783, 0x4E00, 0x88EA, 0x4E01, 0x929A, + 0x4E03, 0x8EB5, 0x4E07, 0x969C, 0x4E08, 0x8FE4, 0x4E09, 0x8E4F, 0x4E0A, 0x8FE3, 0x4E0B, 0x89BA, 0x4E0D, 0x9573, 0x4E0E, 0x975E, + 0x4E10, 0x98A0, 0x4E11, 0x894E, 0x4E14, 0x8A8E, 0x4E15, 0x98A1, 0x4E16, 0x90A2, 0x4E17, 0x99C0, 0x4E18, 0x8B75, 0x4E19, 0x95B8, + 0x4E1E, 0x8FE5, 0x4E21, 0x97BC, 0x4E26, 0x95C0, 0x4E28, 0xFA68, 0x4E2A, 0x98A2, 0x4E2D, 0x9286, 0x4E31, 0x98A3, 0x4E32, 0x8BF8, + 0x4E36, 0x98A4, 0x4E38, 0x8ADB, 0x4E39, 0x924F, 0x4E3B, 0x8EE5, 0x4E3C, 0x98A5, 0x4E3F, 0x98A6, 0x4E42, 0x98A7, 0x4E43, 0x9454, + 0x4E45, 0x8B76, 0x4E4B, 0x9456, 0x4E4D, 0x93E1, 0x4E4E, 0x8CC1, 0x4E4F, 0x9652, 0x4E55, 0xE568, 0x4E56, 0x98A8, 0x4E57, 0x8FE6, + 0x4E58, 0x98A9, 0x4E59, 0x89B3, 0x4E5D, 0x8BE3, 0x4E5E, 0x8CEE, 0x4E5F, 0x96E7, 0x4E62, 0x9BA4, 0x4E71, 0x9790, 0x4E73, 0x93FB, + 0x4E7E, 0x8AA3, 0x4E80, 0x8B54, 0x4E82, 0x98AA, 0x4E85, 0x98AB, 0x4E86, 0x97B9, 0x4E88, 0x975C, 0x4E89, 0x9188, 0x4E8A, 0x98AD, + 0x4E8B, 0x8E96, 0x4E8C, 0x93F1, 0x4E8E, 0x98B0, 0x4E91, 0x895D, 0x4E92, 0x8CDD, 0x4E94, 0x8CDC, 0x4E95, 0x88E4, 0x4E98, 0x986A, + 0x4E99, 0x9869, 0x4E9B, 0x8DB1, 0x4E9C, 0x889F, 0x4E9E, 0x98B1, 0x4E9F, 0x98B2, 0x4EA0, 0x98B3, 0x4EA1, 0x9653, 0x4EA2, 0x98B4, + 0x4EA4, 0x8CF0, 0x4EA5, 0x88E5, 0x4EA6, 0x9692, 0x4EA8, 0x8B9C, 0x4EAB, 0x8B9D, 0x4EAC, 0x8B9E, 0x4EAD, 0x92E0, 0x4EAE, 0x97BA, + 0x4EB0, 0x98B5, 0x4EB3, 0x98B6, 0x4EB6, 0x98B7, 0x4EBA, 0x906C, 0x4EC0, 0x8F59, 0x4EC1, 0x906D, 0x4EC2, 0x98BC, 0x4EC4, 0x98BA, + 0x4EC6, 0x98BB, 0x4EC7, 0x8B77, 0x4ECA, 0x8DA1, 0x4ECB, 0x89EE, 0x4ECD, 0x98B9, 0x4ECE, 0x98B8, 0x4ECF, 0x95A7, 0x4ED4, 0x8E65, + 0x4ED5, 0x8E64, 0x4ED6, 0x91BC, 0x4ED7, 0x98BD, 0x4ED8, 0x9574, 0x4ED9, 0x90E5, 0x4EDD, 0x8157, 0x4EDE, 0x98BE, 0x4EDF, 0x98C0, + 0x4EE1, 0xFA69, 0x4EE3, 0x91E3, 0x4EE4, 0x97DF, 0x4EE5, 0x88C8, 0x4EED, 0x98BF, 0x4EEE, 0x89BC, 0x4EF0, 0x8BC2, 0x4EF2, 0x9287, + 0x4EF6, 0x8C8F, 0x4EF7, 0x98C1, 0x4EFB, 0x9443, 0x4EFC, 0xFA6A, 0x4F00, 0xFA6B, 0x4F01, 0x8AE9, 0x4F03, 0xFA6C, 0x4F09, 0x98C2, + 0x4F0A, 0x88C9, 0x4F0D, 0x8CDE, 0x4F0E, 0x8AEA, 0x4F0F, 0x959A, 0x4F10, 0x94B0, 0x4F11, 0x8B78, 0x4F1A, 0x89EF, 0x4F1C, 0x98E5, + 0x4F1D, 0x9360, 0x4F2F, 0x948C, 0x4F30, 0x98C4, 0x4F34, 0x94BA, 0x4F36, 0x97E0, 0x4F38, 0x904C, 0x4F39, 0xFA6D, 0x4F3A, 0x8E66, + 0x4F3C, 0x8E97, 0x4F3D, 0x89BE, 0x4F43, 0x92CF, 0x4F46, 0x9241, 0x4F47, 0x98C8, 0x4F4D, 0x88CA, 0x4F4E, 0x92E1, 0x4F4F, 0x8F5A, + 0x4F50, 0x8DB2, 0x4F51, 0x9743, 0x4F53, 0x91CC, 0x4F55, 0x89BD, 0x4F56, 0xFA6E, 0x4F57, 0x98C7, 0x4F59, 0x975D, 0x4F5A, 0x98C3, + 0x4F5B, 0x98C5, 0x4F5C, 0x8DEC, 0x4F5D, 0x98C6, 0x4F5E, 0x9B43, 0x4F69, 0x98CE, 0x4F6F, 0x98D1, 0x4F70, 0x98CF, 0x4F73, 0x89C0, + 0x4F75, 0x95B9, 0x4F76, 0x98C9, 0x4F7B, 0x98CD, 0x4F7C, 0x8CF1, 0x4F7F, 0x8E67, 0x4F83, 0x8AA4, 0x4F86, 0x98D2, 0x4F88, 0x98CA, + 0x4F8A, 0xFA70, 0x4F8B, 0x97E1, 0x4F8D, 0x8E98, 0x4F8F, 0x98CB, 0x4F91, 0x98D0, 0x4F92, 0xFA6F, 0x4F94, 0xFA72, 0x4F96, 0x98D3, + 0x4F98, 0x98CC, 0x4F9A, 0xFA71, 0x4F9B, 0x8B9F, 0x4F9D, 0x88CB, 0x4FA0, 0x8BA0, 0x4FA1, 0x89BF, 0x4FAB, 0x9B44, 0x4FAD, 0x9699, + 0x4FAE, 0x958E, 0x4FAF, 0x8CF2, 0x4FB5, 0x904E, 0x4FB6, 0x97B5, 0x4FBF, 0x95D6, 0x4FC2, 0x8C57, 0x4FC3, 0x91A3, 0x4FC4, 0x89E2, + 0x4FC9, 0xFA61, 0x4FCA, 0x8F72, 0x4FCD, 0xFA73, 0x4FCE, 0x98D7, 0x4FD0, 0x98DC, 0x4FD1, 0x98DA, 0x4FD4, 0x98D5, 0x4FD7, 0x91AD, + 0x4FD8, 0x98D8, 0x4FDA, 0x98DB, 0x4FDB, 0x98D9, 0x4FDD, 0x95DB, 0x4FDF, 0x98D6, 0x4FE1, 0x904D, 0x4FE3, 0x9693, 0x4FE4, 0x98DD, + 0x4FE5, 0x98DE, 0x4FEE, 0x8F43, 0x4FEF, 0x98EB, 0x4FF3, 0x946F, 0x4FF5, 0x9555, 0x4FF6, 0x98E6, 0x4FF8, 0x95EE, 0x4FFA, 0x89B4, + 0x4FFE, 0x98EA, 0x4FFF, 0xFA76, 0x5005, 0x98E4, 0x5006, 0x98ED, 0x5009, 0x9171, 0x500B, 0x8CC2, 0x500D, 0x947B, 0x500F, 0xE0C5, + 0x5011, 0x98EC, 0x5012, 0x937C, 0x5014, 0x98E1, 0x5016, 0x8CF4, 0x5019, 0x8CF3, 0x501A, 0x98DF, 0x501E, 0xFA77, 0x501F, 0x8ED8, + 0x5021, 0x98E7, 0x5022, 0xFA75, 0x5023, 0x95ED, 0x5024, 0x926C, 0x5025, 0x98E3, 0x5026, 0x8C91, 0x5028, 0x98E0, 0x5029, 0x98E8, + 0x502A, 0x98E2, 0x502B, 0x97CF, 0x502C, 0x98E9, 0x502D, 0x9860, 0x5036, 0x8BE4, 0x5039, 0x8C90, 0x5040, 0xFA74, 0x5042, 0xFA7A, + 0x5043, 0x98EE, 0x5046, 0xFA78, 0x5047, 0x98EF, 0x5048, 0x98F3, 0x5049, 0x88CC, 0x504F, 0x95CE, 0x5050, 0x98F2, 0x5055, 0x98F1, + 0x5056, 0x98F5, 0x505A, 0x98F4, 0x505C, 0x92E2, 0x5065, 0x8C92, 0x506C, 0x98F6, 0x5070, 0xFA79, 0x5072, 0x8EC3, 0x5074, 0x91A4, + 0x5075, 0x92E3, 0x5076, 0x8BF4, 0x5078, 0x98F7, 0x507D, 0x8B55, 0x5080, 0x98F8, 0x5085, 0x98FA, 0x508D, 0x9654, 0x5091, 0x8C86, + 0x5094, 0xFA7B, 0x5098, 0x8E50, 0x5099, 0x94F5, 0x509A, 0x98F9, 0x50AC, 0x8DC3, 0x50AD, 0x9762, 0x50B2, 0x98FC, 0x50B3, 0x9942, + 0x50B4, 0x98FB, 0x50B5, 0x8DC2, 0x50B7, 0x8F9D, 0x50BE, 0x8C58, 0x50C2, 0x9943, 0x50C5, 0x8BCD, 0x50C9, 0x9940, 0x50CA, 0x9941, + 0x50CD, 0x93AD, 0x50CF, 0x919C, 0x50D1, 0x8BA1, 0x50D5, 0x966C, 0x50D6, 0x9944, 0x50D8, 0xFA7D, 0x50DA, 0x97BB, 0x50DE, 0x9945, + 0x50E3, 0x9948, 0x50E5, 0x9946, 0x50E7, 0x916D, 0x50ED, 0x9947, 0x50EE, 0x9949, 0x50F4, 0xFA7C, 0x50F5, 0x994B, 0x50F9, 0x994A, + 0x50FB, 0x95C6, 0x5100, 0x8B56, 0x5101, 0x994D, 0x5102, 0x994E, 0x5104, 0x89AD, 0x5109, 0x994C, 0x5112, 0x8EF2, 0x5114, 0x9951, + 0x5115, 0x9950, 0x5116, 0x994F, 0x5118, 0x98D4, 0x511A, 0x9952, 0x511F, 0x8F9E, 0x5121, 0x9953, 0x512A, 0x9744, 0x5132, 0x96D7, + 0x5137, 0x9955, 0x513A, 0x9954, 0x513B, 0x9957, 0x513C, 0x9956, 0x513F, 0x9958, 0x5140, 0x9959, 0x5141, 0x88F2, 0x5143, 0x8CB3, + 0x5144, 0x8C5A, 0x5145, 0x8F5B, 0x5146, 0x929B, 0x5147, 0x8BA2, 0x5148, 0x90E6, 0x5149, 0x8CF5, 0x514A, 0xFA7E, 0x514B, 0x8D8E, + 0x514C, 0x995B, 0x514D, 0x96C6, 0x514E, 0x9365, 0x5150, 0x8E99, 0x5152, 0x995A, 0x5154, 0x995C, 0x515A, 0x937D, 0x515C, 0x8A95, + 0x5162, 0x995D, 0x5164, 0xFA80, 0x5165, 0x93FC, 0x5168, 0x9153, 0x5169, 0x995F, 0x516A, 0x9960, 0x516B, 0x94AA, 0x516C, 0x8CF6, + 0x516D, 0x985A, 0x516E, 0x9961, 0x5171, 0x8BA4, 0x5175, 0x95BA, 0x5176, 0x91B4, 0x5177, 0x8BEF, 0x5178, 0x9354, 0x517C, 0x8C93, + 0x5180, 0x9962, 0x5182, 0x9963, 0x5185, 0x93E0, 0x5186, 0x897E, 0x5189, 0x9966, 0x518A, 0x8DFB, 0x518C, 0x9965, 0x518D, 0x8DC4, + 0x518F, 0x9967, 0x5190, 0xE3EC, 0x5191, 0x9968, 0x5192, 0x9660, 0x5193, 0x9969, 0x5195, 0x996A, 0x5196, 0x996B, 0x5197, 0x8FE7, + 0x5199, 0x8ECA, 0x519D, 0xFA81, 0x51A0, 0x8AA5, 0x51A2, 0x996E, 0x51A4, 0x996C, 0x51A5, 0x96BB, 0x51A6, 0x996D, 0x51A8, 0x9579, + 0x51A9, 0x996F, 0x51AA, 0x9970, 0x51AB, 0x9971, 0x51AC, 0x937E, 0x51B0, 0x9975, 0x51B1, 0x9973, 0x51B2, 0x9974, 0x51B3, 0x9972, + 0x51B4, 0x8DE1, 0x51B5, 0x9976, 0x51B6, 0x96E8, 0x51B7, 0x97E2, 0x51BD, 0x9977, 0x51BE, 0xFA82, 0x51C4, 0x90A6, 0x51C5, 0x9978, + 0x51C6, 0x8F79, 0x51C9, 0x9979, 0x51CB, 0x929C, 0x51CC, 0x97BD, 0x51CD, 0x9380, 0x51D6, 0x99C3, 0x51DB, 0x997A, 0x51DC, 0xEAA3, + 0x51DD, 0x8BC3, 0x51E0, 0x997B, 0x51E1, 0x967D, 0x51E6, 0x8F88, 0x51E7, 0x91FA, 0x51E9, 0x997D, 0x51EA, 0x93E2, 0x51EC, 0xFA83, + 0x51ED, 0x997E, 0x51F0, 0x9980, 0x51F1, 0x8A4D, 0x51F5, 0x9981, 0x51F6, 0x8BA5, 0x51F8, 0x93CA, 0x51F9, 0x899A, 0x51FA, 0x8F6F, + 0x51FD, 0x949F, 0x51FE, 0x9982, 0x5200, 0x9381, 0x5203, 0x906E, 0x5204, 0x9983, 0x5206, 0x95AA, 0x5207, 0x90D8, 0x5208, 0x8AA0, + 0x520A, 0x8AA7, 0x520B, 0x9984, 0x520E, 0x9986, 0x5211, 0x8C59, 0x5214, 0x9985, 0x5215, 0xFA84, 0x5217, 0x97F1, 0x521D, 0x8F89, + 0x5224, 0x94BB, 0x5225, 0x95CA, 0x5227, 0x9987, 0x5229, 0x9798, 0x522A, 0x9988, 0x522E, 0x9989, 0x5230, 0x939E, 0x5233, 0x998A, + 0x5236, 0x90A7, 0x5237, 0x8DFC, 0x5238, 0x8C94, 0x5239, 0x998B, 0x523A, 0x8E68, 0x523B, 0x8D8F, 0x5243, 0x92E4, 0x5244, 0x998D, + 0x5247, 0x91A5, 0x524A, 0x8DED, 0x524B, 0x998E, 0x524C, 0x998F, 0x524D, 0x914F, 0x524F, 0x998C, 0x5254, 0x9991, 0x5256, 0x9655, + 0x525B, 0x8D84, 0x525E, 0x9990, 0x5263, 0x8C95, 0x5264, 0x8DDC, 0x5265, 0x948D, 0x5269, 0x9994, 0x526A, 0x9992, 0x526F, 0x959B, + 0x5270, 0x8FE8, 0x5271, 0x999B, 0x5272, 0x8A84, 0x5273, 0x9995, 0x5274, 0x9993, 0x5275, 0x916E, 0x527D, 0x9997, 0x527F, 0x9996, + 0x5283, 0x8A63, 0x5287, 0x8C80, 0x5288, 0x999C, 0x5289, 0x97AB, 0x528D, 0x9998, 0x5291, 0x999D, 0x5292, 0x999A, 0x5294, 0x9999, + 0x529B, 0x97CD, 0x529C, 0xFA85, 0x529F, 0x8CF7, 0x52A0, 0x89C1, 0x52A3, 0x97F2, 0x52A6, 0xFA86, 0x52A9, 0x8F95, 0x52AA, 0x9377, + 0x52AB, 0x8D85, 0x52AC, 0x99A0, 0x52AD, 0x99A1, 0x52AF, 0xFB77, 0x52B1, 0x97E3, 0x52B4, 0x984A, 0x52B5, 0x99A3, 0x52B9, 0x8CF8, + 0x52BC, 0x99A2, 0x52BE, 0x8A4E, 0x52C0, 0xFA87, 0x52C1, 0x99A4, 0x52C3, 0x9675, 0x52C5, 0x92BA, 0x52C7, 0x9745, 0x52C9, 0x95D7, + 0x52CD, 0x99A5, 0x52D2, 0xE8D3, 0x52D5, 0x93AE, 0x52D7, 0x99A6, 0x52D8, 0x8AA8, 0x52D9, 0x96B1, 0x52DB, 0xFA88, 0x52DD, 0x8F9F, + 0x52DE, 0x99A7, 0x52DF, 0x95E5, 0x52E0, 0x99AB, 0x52E2, 0x90A8, 0x52E3, 0x99A8, 0x52E4, 0x8BCE, 0x52E6, 0x99A9, 0x52E7, 0x8AA9, + 0x52F2, 0x8C4D, 0x52F3, 0x99AC, 0x52F5, 0x99AD, 0x52F8, 0x99AE, 0x52F9, 0x99AF, 0x52FA, 0x8ED9, 0x52FE, 0x8CF9, 0x52FF, 0x96DC, + 0x5300, 0xFA89, 0x5301, 0x96E6, 0x5302, 0x93F5, 0x5305, 0x95EF, 0x5306, 0x99B0, 0x5307, 0xFA8A, 0x5308, 0x99B1, 0x530D, 0x99B3, + 0x530F, 0x99B5, 0x5310, 0x99B4, 0x5315, 0x99B6, 0x5316, 0x89BB, 0x5317, 0x966B, 0x5319, 0x8DFA, 0x531A, 0x99B7, 0x531D, 0x9178, + 0x5320, 0x8FA0, 0x5321, 0x8BA7, 0x5323, 0x99B8, 0x5324, 0xFA8B, 0x532A, 0x94D9, 0x532F, 0x99B9, 0x5331, 0x99BA, 0x5333, 0x99BB, + 0x5338, 0x99BC, 0x5339, 0x9543, 0x533A, 0x8BE6, 0x533B, 0x88E3, 0x533F, 0x93BD, 0x5340, 0x99BD, 0x5341, 0x8F5C, 0x5343, 0x90E7, + 0x5345, 0x99BF, 0x5346, 0x99BE, 0x5347, 0x8FA1, 0x5348, 0x8CDF, 0x5349, 0x99C1, 0x534A, 0x94BC, 0x534D, 0x99C2, 0x5351, 0x94DA, + 0x5352, 0x91B2, 0x5353, 0x91EC, 0x5354, 0x8BA6, 0x5357, 0x93EC, 0x5358, 0x9250, 0x535A, 0x948E, 0x535C, 0x966D, 0x535E, 0x99C4, + 0x5360, 0x90E8, 0x5366, 0x8C54, 0x5369, 0x99C5, 0x536E, 0x99C6, 0x536F, 0x894B, 0x5370, 0x88F3, 0x5371, 0x8AEB, 0x5372, 0xFA8C, + 0x5373, 0x91A6, 0x5374, 0x8B70, 0x5375, 0x9791, 0x5377, 0x99C9, 0x5378, 0x89B5, 0x537B, 0x99C8, 0x537F, 0x8BA8, 0x5382, 0x99CA, + 0x5384, 0x96EF, 0x5393, 0xFA8D, 0x5396, 0x99CB, 0x5398, 0x97D0, 0x539A, 0x8CFA, 0x539F, 0x8CB4, 0x53A0, 0x99CC, 0x53A5, 0x99CE, + 0x53A6, 0x99CD, 0x53A8, 0x907E, 0x53A9, 0x8958, 0x53AD, 0x897D, 0x53AE, 0x99CF, 0x53B0, 0x99D0, 0x53B2, 0xFA8E, 0x53B3, 0x8CB5, + 0x53B6, 0x99D1, 0x53BB, 0x8B8E, 0x53C2, 0x8E51, 0x53C3, 0x99D2, 0x53C8, 0x9694, 0x53C9, 0x8DB3, 0x53CA, 0x8B79, 0x53CB, 0x9746, + 0x53CC, 0x916F, 0x53CD, 0x94BD, 0x53CE, 0x8EFB, 0x53D4, 0x8F66, 0x53D6, 0x8EE6, 0x53D7, 0x8EF3, 0x53D9, 0x8F96, 0x53DB, 0x94BE, + 0x53DD, 0xFA8F, 0x53DF, 0x99D5, 0x53E1, 0x8962, 0x53E2, 0x9170, 0x53E3, 0x8CFB, 0x53E4, 0x8CC3, 0x53E5, 0x8BE5, 0x53E8, 0x99D9, + 0x53E9, 0x9240, 0x53EA, 0x91FC, 0x53EB, 0x8BA9, 0x53EC, 0x8FA2, 0x53ED, 0x99DA, 0x53EE, 0x99D8, 0x53EF, 0x89C2, 0x53F0, 0x91E4, + 0x53F1, 0x8EB6, 0x53F2, 0x8E6A, 0x53F3, 0x8945, 0x53F6, 0x8A90, 0x53F7, 0x8D86, 0x53F8, 0x8E69, 0x53FA, 0x99DB, 0x5401, 0x99DC, + 0x5403, 0x8B68, 0x5404, 0x8A65, 0x5408, 0x8D87, 0x5409, 0x8B67, 0x540A, 0x92DD, 0x540B, 0x8944, 0x540C, 0x93AF, 0x540D, 0x96BC, + 0x540E, 0x8D40, 0x540F, 0x9799, 0x5410, 0x9366, 0x5411, 0x8CFC, 0x541B, 0x8C4E, 0x541D, 0x99E5, 0x541F, 0x8BE1, 0x5420, 0x9669, + 0x5426, 0x94DB, 0x5429, 0x99E4, 0x542B, 0x8ADC, 0x542C, 0x99DF, 0x542D, 0x99E0, 0x542E, 0x99E2, 0x5436, 0x99E3, 0x5438, 0x8B7A, + 0x5439, 0x9081, 0x543B, 0x95AB, 0x543C, 0x99E1, 0x543D, 0x99DD, 0x543E, 0x8CE1, 0x5440, 0x99DE, 0x5442, 0x9843, 0x5446, 0x95F0, + 0x5448, 0x92E6, 0x5449, 0x8CE0, 0x544A, 0x8D90, 0x544E, 0x99E6, 0x5451, 0x93DB, 0x545F, 0x99EA, 0x5468, 0x8EFC, 0x546A, 0x8EF4, + 0x5470, 0x99ED, 0x5471, 0x99EB, 0x5473, 0x96A1, 0x5475, 0x99E8, 0x5476, 0x99F1, 0x5477, 0x99EC, 0x547B, 0x99EF, 0x547C, 0x8CC4, + 0x547D, 0x96BD, 0x5480, 0x99F0, 0x5484, 0x99F2, 0x5486, 0x99F4, 0x548A, 0xFA92, 0x548B, 0x8DEE, 0x548C, 0x9861, 0x548E, 0x99E9, + 0x548F, 0x99E7, 0x5490, 0x99F3, 0x5492, 0x99EE, 0x549C, 0xFA91, 0x54A2, 0x99F6, 0x54A4, 0x9A42, 0x54A5, 0x99F8, 0x54A8, 0x99FC, + 0x54A9, 0xFA93, 0x54AB, 0x9A40, 0x54AC, 0x99F9, 0x54AF, 0x9A5D, 0x54B2, 0x8DE7, 0x54B3, 0x8A50, 0x54B8, 0x99F7, 0x54BC, 0x9A44, + 0x54BD, 0x88F4, 0x54BE, 0x9A43, 0x54C0, 0x88A3, 0x54C1, 0x9569, 0x54C2, 0x9A41, 0x54C4, 0x99FA, 0x54C7, 0x99F5, 0x54C8, 0x99FB, + 0x54C9, 0x8DC6, 0x54D8, 0x9A45, 0x54E1, 0x88F5, 0x54E2, 0x9A4E, 0x54E5, 0x9A46, 0x54E6, 0x9A47, 0x54E8, 0x8FA3, 0x54E9, 0x9689, + 0x54ED, 0x9A4C, 0x54EE, 0x9A4B, 0x54F2, 0x934E, 0x54FA, 0x9A4D, 0x54FD, 0x9A4A, 0x54FF, 0xFA94, 0x5504, 0x8953, 0x5506, 0x8DB4, + 0x5507, 0x904F, 0x550F, 0x9A48, 0x5510, 0x9382, 0x5514, 0x9A49, 0x5516, 0x88A0, 0x552E, 0x9A53, 0x552F, 0x9742, 0x5531, 0x8FA5, + 0x5533, 0x9A59, 0x5538, 0x9A58, 0x5539, 0x9A4F, 0x553E, 0x91C1, 0x5540, 0x9A50, 0x5544, 0x91ED, 0x5545, 0x9A55, 0x5546, 0x8FA4, + 0x554C, 0x9A52, 0x554F, 0x96E2, 0x5553, 0x8C5B, 0x5556, 0x9A56, 0x5557, 0x9A57, 0x555C, 0x9A54, 0x555D, 0x9A5A, 0x5563, 0x9A51, + 0x557B, 0x9A60, 0x557C, 0x9A65, 0x557E, 0x9A61, 0x5580, 0x9A5C, 0x5583, 0x9A66, 0x5584, 0x9150, 0x5586, 0xFA95, 0x5587, 0x9A68, + 0x5589, 0x8D41, 0x558A, 0x9A5E, 0x558B, 0x929D, 0x5598, 0x9A62, 0x5599, 0x9A5B, 0x559A, 0x8AAB, 0x559C, 0x8AEC, 0x559D, 0x8A85, + 0x559E, 0x9A63, 0x559F, 0x9A5F, 0x55A7, 0x8C96, 0x55A8, 0x9A69, 0x55A9, 0x9A67, 0x55AA, 0x9172, 0x55AB, 0x8B69, 0x55AC, 0x8BAA, + 0x55AE, 0x9A64, 0x55B0, 0x8BF2, 0x55B6, 0x8963, 0x55C4, 0x9A6D, 0x55C5, 0x9A6B, 0x55C7, 0x9AA5, 0x55D4, 0x9A70, 0x55DA, 0x9A6A, + 0x55DC, 0x9A6E, 0x55DF, 0x9A6C, 0x55E3, 0x8E6B, 0x55E4, 0x9A6F, 0x55F7, 0x9A72, 0x55F9, 0x9A77, 0x55FD, 0x9A75, 0x55FE, 0x9A74, + 0x5606, 0x9251, 0x5609, 0x89C3, 0x5614, 0x9A71, 0x5616, 0x9A73, 0x5617, 0x8FA6, 0x5618, 0x8952, 0x561B, 0x9A76, 0x5629, 0x89DC, + 0x562F, 0x9A82, 0x5631, 0x8FFA, 0x5632, 0x9A7D, 0x5634, 0x9A7B, 0x5636, 0x9A7C, 0x5638, 0x9A7E, 0x5642, 0x895C, 0x564C, 0x9158, + 0x564E, 0x9A78, 0x5650, 0x9A79, 0x565B, 0x8A9A, 0x5664, 0x9A81, 0x5668, 0x8AED, 0x566A, 0x9A84, 0x566B, 0x9A80, 0x566C, 0x9A83, + 0x5674, 0x95AC, 0x5678, 0x93D3, 0x567A, 0x94B6, 0x5680, 0x9A86, 0x5686, 0x9A85, 0x5687, 0x8A64, 0x568A, 0x9A87, 0x568F, 0x9A8A, + 0x5694, 0x9A89, 0x56A0, 0x9A88, 0x56A2, 0x9458, 0x56A5, 0x9A8B, 0x56AE, 0x9A8C, 0x56B4, 0x9A8E, 0x56B6, 0x9A8D, 0x56BC, 0x9A90, + 0x56C0, 0x9A93, 0x56C1, 0x9A91, 0x56C2, 0x9A8F, 0x56C3, 0x9A92, 0x56C8, 0x9A94, 0x56CE, 0x9A95, 0x56D1, 0x9A96, 0x56D3, 0x9A97, + 0x56D7, 0x9A98, 0x56D8, 0x9964, 0x56DA, 0x8EFA, 0x56DB, 0x8E6C, 0x56DE, 0x89F1, 0x56E0, 0x88F6, 0x56E3, 0x9263, 0x56EE, 0x9A99, + 0x56F0, 0x8DA2, 0x56F2, 0x88CD, 0x56F3, 0x907D, 0x56F9, 0x9A9A, 0x56FA, 0x8CC5, 0x56FD, 0x8D91, 0x56FF, 0x9A9C, 0x5700, 0x9A9B, + 0x5703, 0x95DE, 0x5704, 0x9A9D, 0x5708, 0x9A9F, 0x5709, 0x9A9E, 0x570B, 0x9AA0, 0x570D, 0x9AA1, 0x570F, 0x8C97, 0x5712, 0x8980, + 0x5713, 0x9AA2, 0x5716, 0x9AA4, 0x5718, 0x9AA3, 0x571C, 0x9AA6, 0x571F, 0x9379, 0x5726, 0x9AA7, 0x5727, 0x88B3, 0x5728, 0x8DDD, + 0x572D, 0x8C5C, 0x5730, 0x926E, 0x5737, 0x9AA8, 0x5738, 0x9AA9, 0x573B, 0x9AAB, 0x5740, 0x9AAC, 0x5742, 0x8DE2, 0x5747, 0x8BCF, + 0x574A, 0x9656, 0x574E, 0x9AAA, 0x574F, 0x9AAD, 0x5750, 0x8DBF, 0x5751, 0x8D42, 0x5759, 0xFA96, 0x5761, 0x9AB1, 0x5764, 0x8DA3, + 0x5765, 0xFA97, 0x5766, 0x9252, 0x5769, 0x9AAE, 0x576A, 0x92D8, 0x577F, 0x9AB2, 0x5782, 0x9082, 0x5788, 0x9AB0, 0x5789, 0x9AB3, + 0x578B, 0x8C5E, 0x5793, 0x9AB4, 0x57A0, 0x9AB5, 0x57A2, 0x8D43, 0x57A3, 0x8A5F, 0x57A4, 0x9AB7, 0x57AA, 0x9AB8, 0x57AC, 0xFA98, + 0x57B0, 0x9AB9, 0x57B3, 0x9AB6, 0x57C0, 0x9AAF, 0x57C3, 0x9ABA, 0x57C6, 0x9ABB, 0x57C7, 0xFA9A, 0x57C8, 0xFA99, 0x57CB, 0x9684, + 0x57CE, 0x8FE9, 0x57D2, 0x9ABD, 0x57D3, 0x9ABE, 0x57D4, 0x9ABC, 0x57D6, 0x9AC0, 0x57DC, 0x9457, 0x57DF, 0x88E6, 0x57E0, 0x9575, + 0x57E3, 0x9AC1, 0x57F4, 0x8FFB, 0x57F7, 0x8EB7, 0x57F9, 0x947C, 0x57FA, 0x8AEE, 0x57FC, 0x8DE9, 0x5800, 0x9678, 0x5802, 0x93B0, + 0x5805, 0x8C98, 0x5806, 0x91CD, 0x580A, 0x9ABF, 0x580B, 0x9AC2, 0x5815, 0x91C2, 0x5819, 0x9AC3, 0x581D, 0x9AC4, 0x5821, 0x9AC6, + 0x5824, 0x92E7, 0x582A, 0x8AAC, 0x582F, 0xEA9F, 0x5830, 0x8981, 0x5831, 0x95F1, 0x5834, 0x8FEA, 0x5835, 0x9367, 0x583A, 0x8DE4, + 0x583D, 0x9ACC, 0x5840, 0x95BB, 0x5841, 0x97DB, 0x584A, 0x89F2, 0x584B, 0x9AC8, 0x5851, 0x9159, 0x5852, 0x9ACB, 0x5854, 0x9383, + 0x5857, 0x9368, 0x5858, 0x9384, 0x5859, 0x94B7, 0x585A, 0x92CB, 0x585E, 0x8DC7, 0x5862, 0x9AC7, 0x5869, 0x8996, 0x586B, 0x9355, + 0x5870, 0x9AC9, 0x5872, 0x9AC5, 0x5875, 0x906F, 0x5879, 0x9ACD, 0x587E, 0x8F6D, 0x5883, 0x8BAB, 0x5885, 0x9ACE, 0x5893, 0x95E6, + 0x5897, 0x919D, 0x589C, 0x92C4, 0x589E, 0xFA9D, 0x589F, 0x9AD0, 0x58A8, 0x966E, 0x58AB, 0x9AD1, 0x58AE, 0x9AD6, 0x58B2, 0xFA9E, + 0x58B3, 0x95AD, 0x58B8, 0x9AD5, 0x58B9, 0x9ACF, 0x58BA, 0x9AD2, 0x58BB, 0x9AD4, 0x58BE, 0x8DA4, 0x58C1, 0x95C7, 0x58C5, 0x9AD7, + 0x58C7, 0x9264, 0x58CA, 0x89F3, 0x58CC, 0x8FEB, 0x58D1, 0x9AD9, 0x58D3, 0x9AD8, 0x58D5, 0x8D88, 0x58D7, 0x9ADA, 0x58D8, 0x9ADC, + 0x58D9, 0x9ADB, 0x58DC, 0x9ADE, 0x58DE, 0x9AD3, 0x58DF, 0x9AE0, 0x58E4, 0x9ADF, 0x58E5, 0x9ADD, 0x58EB, 0x8E6D, 0x58EC, 0x9070, + 0x58EE, 0x9173, 0x58EF, 0x9AE1, 0x58F0, 0x90BA, 0x58F1, 0x88EB, 0x58F2, 0x9484, 0x58F7, 0x92D9, 0x58F9, 0x9AE3, 0x58FA, 0x9AE2, + 0x58FB, 0x9AE4, 0x58FC, 0x9AE5, 0x58FD, 0x9AE6, 0x5902, 0x9AE7, 0x5909, 0x95CF, 0x590A, 0x9AE8, 0x590B, 0xFA9F, 0x590F, 0x89C4, + 0x5910, 0x9AE9, 0x5915, 0x975B, 0x5916, 0x8A4F, 0x5918, 0x99C7, 0x5919, 0x8F67, 0x591A, 0x91BD, 0x591B, 0x9AEA, 0x591C, 0x96E9, + 0x5922, 0x96B2, 0x5925, 0x9AEC, 0x5927, 0x91E5, 0x5929, 0x9356, 0x592A, 0x91BE, 0x592B, 0x9576, 0x592C, 0x9AED, 0x592D, 0x9AEE, + 0x592E, 0x899B, 0x5931, 0x8EB8, 0x5932, 0x9AEF, 0x5937, 0x88CE, 0x5938, 0x9AF0, 0x593E, 0x9AF1, 0x5944, 0x8982, 0x5947, 0x8AEF, + 0x5948, 0x93DE, 0x5949, 0x95F2, 0x594E, 0x9AF5, 0x594F, 0x9174, 0x5950, 0x9AF4, 0x5951, 0x8C5F, 0x5953, 0xFAA0, 0x5954, 0x967A, + 0x5955, 0x9AF3, 0x5957, 0x9385, 0x5958, 0x9AF7, 0x595A, 0x9AF6, 0x595B, 0xFAA1, 0x595D, 0xFAA2, 0x5960, 0x9AF9, 0x5962, 0x9AF8, + 0x5963, 0xFAA3, 0x5965, 0x899C, 0x5967, 0x9AFA, 0x5968, 0x8FA7, 0x5969, 0x9AFC, 0x596A, 0x9244, 0x596C, 0x9AFB, 0x596E, 0x95B1, + 0x5973, 0x8F97, 0x5974, 0x937A, 0x5978, 0x9B40, 0x597D, 0x8D44, 0x5981, 0x9B41, 0x5982, 0x9440, 0x5983, 0x94DC, 0x5984, 0x96CF, + 0x598A, 0x9444, 0x598D, 0x9B4A, 0x5993, 0x8B57, 0x5996, 0x9764, 0x5999, 0x96AD, 0x599B, 0x9BAA, 0x599D, 0x9B42, 0x59A3, 0x9B45, + 0x59A4, 0xFAA4, 0x59A5, 0x91C3, 0x59A8, 0x9657, 0x59AC, 0x9369, 0x59B2, 0x9B46, 0x59B9, 0x9685, 0x59BA, 0xFAA5, 0x59BB, 0x8DC8, + 0x59BE, 0x8FA8, 0x59C6, 0x9B47, 0x59C9, 0x8E6F, 0x59CB, 0x8E6E, 0x59D0, 0x88B7, 0x59D1, 0x8CC6, 0x59D3, 0x90A9, 0x59D4, 0x88CF, + 0x59D9, 0x9B4B, 0x59DA, 0x9B4C, 0x59DC, 0x9B49, 0x59E5, 0x8957, 0x59E6, 0x8AAD, 0x59E8, 0x9B48, 0x59EA, 0x96C3, 0x59EB, 0x9550, + 0x59F6, 0x88A6, 0x59FB, 0x88F7, 0x59FF, 0x8E70, 0x5A01, 0x88D0, 0x5A03, 0x88A1, 0x5A09, 0x9B51, 0x5A11, 0x9B4F, 0x5A18, 0x96BA, + 0x5A1A, 0x9B52, 0x5A1C, 0x9B50, 0x5A1F, 0x9B4E, 0x5A20, 0x9050, 0x5A25, 0x9B4D, 0x5A29, 0x95D8, 0x5A2F, 0x8CE2, 0x5A35, 0x9B56, + 0x5A36, 0x9B57, 0x5A3C, 0x8FA9, 0x5A40, 0x9B53, 0x5A41, 0x984B, 0x5A46, 0x946B, 0x5A49, 0x9B55, 0x5A5A, 0x8DA5, 0x5A62, 0x9B58, + 0x5A66, 0x9577, 0x5A6A, 0x9B59, 0x5A6C, 0x9B54, 0x5A7F, 0x96B9, 0x5A92, 0x947D, 0x5A9A, 0x9B5A, 0x5A9B, 0x9551, 0x5ABC, 0x9B5B, + 0x5ABD, 0x9B5F, 0x5ABE, 0x9B5C, 0x5AC1, 0x89C5, 0x5AC2, 0x9B5E, 0x5AC9, 0x8EB9, 0x5ACB, 0x9B5D, 0x5ACC, 0x8C99, 0x5AD0, 0x9B6B, + 0x5AD6, 0x9B64, 0x5AD7, 0x9B61, 0x5AE1, 0x9284, 0x5AE3, 0x9B60, 0x5AE6, 0x9B62, 0x5AE9, 0x9B63, 0x5AFA, 0x9B65, 0x5AFB, 0x9B66, + 0x5B09, 0x8AF0, 0x5B0B, 0x9B68, 0x5B0C, 0x9B67, 0x5B16, 0x9B69, 0x5B22, 0x8FEC, 0x5B2A, 0x9B6C, 0x5B2C, 0x92DA, 0x5B30, 0x8964, + 0x5B32, 0x9B6A, 0x5B36, 0x9B6D, 0x5B3E, 0x9B6E, 0x5B40, 0x9B71, 0x5B43, 0x9B6F, 0x5B45, 0x9B70, 0x5B50, 0x8E71, 0x5B51, 0x9B72, + 0x5B54, 0x8D45, 0x5B55, 0x9B73, 0x5B56, 0xFAA6, 0x5B57, 0x8E9A, 0x5B58, 0x91B6, 0x5B5A, 0x9B74, 0x5B5B, 0x9B75, 0x5B5C, 0x8E79, + 0x5B5D, 0x8D46, 0x5B5F, 0x96D0, 0x5B63, 0x8B47, 0x5B64, 0x8CC7, 0x5B65, 0x9B76, 0x5B66, 0x8A77, 0x5B69, 0x9B77, 0x5B6B, 0x91B7, + 0x5B70, 0x9B78, 0x5B71, 0x9BA1, 0x5B73, 0x9B79, 0x5B75, 0x9B7A, 0x5B78, 0x9B7B, 0x5B7A, 0x9B7D, 0x5B80, 0x9B7E, 0x5B83, 0x9B80, + 0x5B85, 0x91EE, 0x5B87, 0x8946, 0x5B88, 0x8EE7, 0x5B89, 0x88C0, 0x5B8B, 0x9176, 0x5B8C, 0x8AAE, 0x5B8D, 0x8EB3, 0x5B8F, 0x8D47, + 0x5B95, 0x9386, 0x5B97, 0x8F40, 0x5B98, 0x8AAF, 0x5B99, 0x9288, 0x5B9A, 0x92E8, 0x5B9B, 0x88B6, 0x5B9C, 0x8B58, 0x5B9D, 0x95F3, + 0x5B9F, 0x8EC0, 0x5BA2, 0x8B71, 0x5BA3, 0x90E9, 0x5BA4, 0x8EBA, 0x5BA5, 0x9747, 0x5BA6, 0x9B81, 0x5BAE, 0x8B7B, 0x5BB0, 0x8DC9, + 0x5BB3, 0x8A51, 0x5BB4, 0x8983, 0x5BB5, 0x8FAA, 0x5BB6, 0x89C6, 0x5BB8, 0x9B82, 0x5BB9, 0x9765, 0x5BBF, 0x8F68, 0x5BC0, 0xFAA7, + 0x5BC2, 0x8EE2, 0x5BC3, 0x9B83, 0x5BC4, 0x8AF1, 0x5BC5, 0x93D0, 0x5BC6, 0x96A7, 0x5BC7, 0x9B84, 0x5BC9, 0x9B85, 0x5BCC, 0x9578, + 0x5BD0, 0x9B87, 0x5BD2, 0x8AA6, 0x5BD3, 0x8BF5, 0x5BD4, 0x9B86, 0x5BD8, 0xFAA9, 0x5BDB, 0x8AB0, 0x5BDD, 0x9051, 0x5BDE, 0x9B8B, + 0x5BDF, 0x8E40, 0x5BE1, 0x89C7, 0x5BE2, 0x9B8A, 0x5BE4, 0x9B88, 0x5BE5, 0x9B8C, 0x5BE6, 0x9B89, 0x5BE7, 0x944A, 0x5BE8, 0x9ECB, + 0x5BE9, 0x9052, 0x5BEB, 0x9B8D, 0x5BEC, 0xFAAA, 0x5BEE, 0x97BE, 0x5BF0, 0x9B8E, 0x5BF3, 0x9B90, 0x5BF5, 0x929E, 0x5BF6, 0x9B8F, + 0x5BF8, 0x90A1, 0x5BFA, 0x8E9B, 0x5BFE, 0x91CE, 0x5BFF, 0x8EF5, 0x5C01, 0x9595, 0x5C02, 0x90EA, 0x5C04, 0x8ECB, 0x5C05, 0x9B91, + 0x5C06, 0x8FAB, 0x5C07, 0x9B92, 0x5C08, 0x9B93, 0x5C09, 0x88D1, 0x5C0A, 0x91B8, 0x5C0B, 0x9071, 0x5C0D, 0x9B94, 0x5C0E, 0x93B1, + 0x5C0F, 0x8FAC, 0x5C11, 0x8FAD, 0x5C13, 0x9B95, 0x5C16, 0x90EB, 0x5C1A, 0x8FAE, 0x5C1E, 0xFAAB, 0x5C20, 0x9B96, 0x5C22, 0x9B97, + 0x5C24, 0x96DE, 0x5C28, 0x9B98, 0x5C2D, 0x8BC4, 0x5C31, 0x8F41, 0x5C38, 0x9B99, 0x5C39, 0x9B9A, 0x5C3A, 0x8EDA, 0x5C3B, 0x904B, + 0x5C3C, 0x93F2, 0x5C3D, 0x9073, 0x5C3E, 0x94F6, 0x5C3F, 0x9441, 0x5C40, 0x8BC7, 0x5C41, 0x9B9B, 0x5C45, 0x8B8F, 0x5C46, 0x9B9C, + 0x5C48, 0x8BFC, 0x5C4A, 0x93CD, 0x5C4B, 0x89AE, 0x5C4D, 0x8E72, 0x5C4E, 0x9B9D, 0x5C4F, 0x9BA0, 0x5C50, 0x9B9F, 0x5C51, 0x8BFB, + 0x5C53, 0x9B9E, 0x5C55, 0x9357, 0x5C5E, 0x91AE, 0x5C60, 0x936A, 0x5C61, 0x8EC6, 0x5C64, 0x9177, 0x5C65, 0x979A, 0x5C6C, 0x9BA2, + 0x5C6E, 0x9BA3, 0x5C6F, 0x93D4, 0x5C71, 0x8E52, 0x5C76, 0x9BA5, 0x5C79, 0x9BA6, 0x5C8C, 0x9BA7, 0x5C90, 0x8AF2, 0x5C91, 0x9BA8, + 0x5C94, 0x9BA9, 0x5CA1, 0x89AA, 0x5CA6, 0xFAAC, 0x5CA8, 0x915A, 0x5CA9, 0x8AE2, 0x5CAB, 0x9BAB, 0x5CAC, 0x96A6, 0x5CB1, 0x91D0, + 0x5CB3, 0x8A78, 0x5CB6, 0x9BAD, 0x5CB7, 0x9BAF, 0x5CB8, 0x8ADD, 0x5CBA, 0xFAAD, 0x5CBB, 0x9BAC, 0x5CBC, 0x9BAE, 0x5CBE, 0x9BB1, + 0x5CC5, 0x9BB0, 0x5CC7, 0x9BB2, 0x5CD9, 0x9BB3, 0x5CE0, 0x93BB, 0x5CE1, 0x8BAC, 0x5CE8, 0x89E3, 0x5CE9, 0x9BB4, 0x5CEA, 0x9BB9, + 0x5CED, 0x9BB7, 0x5CEF, 0x95F5, 0x5CF0, 0x95F4, 0x5CF5, 0xFAAE, 0x5CF6, 0x9387, 0x5CFA, 0x9BB6, 0x5CFB, 0x8F73, 0x5CFD, 0x9BB5, + 0x5D07, 0x9092, 0x5D0B, 0x9BBA, 0x5D0E, 0x8DE8, 0x5D11, 0x9BC0, 0x5D14, 0x9BC1, 0x5D15, 0x9BBB, 0x5D16, 0x8A52, 0x5D17, 0x9BBC, + 0x5D18, 0x9BC5, 0x5D19, 0x9BC4, 0x5D1A, 0x9BC3, 0x5D1B, 0x9BBF, 0x5D1F, 0x9BBE, 0x5D22, 0x9BC2, 0x5D27, 0xFAAF, 0x5D29, 0x95F6, + 0x5D42, 0xFAB2, 0x5D4B, 0x9BC9, 0x5D4C, 0x9BC6, 0x5D4E, 0x9BC8, 0x5D50, 0x9792, 0x5D52, 0x9BC7, 0x5D53, 0xFAB0, 0x5D5C, 0x9BBD, + 0x5D69, 0x9093, 0x5D6C, 0x9BCA, 0x5D6D, 0xFAB3, 0x5D6F, 0x8DB5, 0x5D73, 0x9BCB, 0x5D76, 0x9BCC, 0x5D82, 0x9BCF, 0x5D84, 0x9BCE, + 0x5D87, 0x9BCD, 0x5D8B, 0x9388, 0x5D8C, 0x9BB8, 0x5D90, 0x9BD5, 0x5D9D, 0x9BD1, 0x5DA2, 0x9BD0, 0x5DAC, 0x9BD2, 0x5DAE, 0x9BD3, + 0x5DB7, 0x9BD6, 0x5DB8, 0xFAB4, 0x5DB9, 0xFAB5, 0x5DBA, 0x97E4, 0x5DBC, 0x9BD7, 0x5DBD, 0x9BD4, 0x5DC9, 0x9BD8, 0x5DCC, 0x8ADE, + 0x5DCD, 0x9BD9, 0x5DD0, 0xFAB6, 0x5DD2, 0x9BDB, 0x5DD3, 0x9BDA, 0x5DD6, 0x9BDC, 0x5DDB, 0x9BDD, 0x5DDD, 0x90EC, 0x5DDE, 0x8F42, + 0x5DE1, 0x8F84, 0x5DE3, 0x9183, 0x5DE5, 0x8D48, 0x5DE6, 0x8DB6, 0x5DE7, 0x8D49, 0x5DE8, 0x8B90, 0x5DEB, 0x9BDE, 0x5DEE, 0x8DB7, + 0x5DF1, 0x8CC8, 0x5DF2, 0x9BDF, 0x5DF3, 0x96A4, 0x5DF4, 0x9462, 0x5DF5, 0x9BE0, 0x5DF7, 0x8D4A, 0x5DFB, 0x8AAA, 0x5DFD, 0x9246, + 0x5DFE, 0x8BD0, 0x5E02, 0x8E73, 0x5E03, 0x957A, 0x5E06, 0x94BF, 0x5E0B, 0x9BE1, 0x5E0C, 0x8AF3, 0x5E11, 0x9BE4, 0x5E16, 0x929F, + 0x5E19, 0x9BE3, 0x5E1A, 0x9BE2, 0x5E1B, 0x9BE5, 0x5E1D, 0x92E9, 0x5E25, 0x9083, 0x5E2B, 0x8E74, 0x5E2D, 0x90C8, 0x5E2F, 0x91D1, + 0x5E30, 0x8B41, 0x5E33, 0x92A0, 0x5E36, 0x9BE6, 0x5E37, 0x9BE7, 0x5E38, 0x8FED, 0x5E3D, 0x9658, 0x5E40, 0x9BEA, 0x5E43, 0x9BE9, + 0x5E44, 0x9BE8, 0x5E45, 0x959D, 0x5E47, 0x9BF1, 0x5E4C, 0x9679, 0x5E4E, 0x9BEB, 0x5E54, 0x9BED, 0x5E55, 0x968B, 0x5E57, 0x9BEC, + 0x5E5F, 0x9BEE, 0x5E61, 0x94A6, 0x5E62, 0x9BEF, 0x5E63, 0x95BC, 0x5E64, 0x9BF0, 0x5E72, 0x8AB1, 0x5E73, 0x95BD, 0x5E74, 0x944E, + 0x5E75, 0x9BF2, 0x5E76, 0x9BF3, 0x5E78, 0x8D4B, 0x5E79, 0x8AB2, 0x5E7A, 0x9BF4, 0x5E7B, 0x8CB6, 0x5E7C, 0x9763, 0x5E7D, 0x9748, + 0x5E7E, 0x8AF4, 0x5E7F, 0x9BF6, 0x5E81, 0x92A1, 0x5E83, 0x8D4C, 0x5E84, 0x8FAF, 0x5E87, 0x94DD, 0x5E8A, 0x8FB0, 0x5E8F, 0x8F98, + 0x5E95, 0x92EA, 0x5E96, 0x95F7, 0x5E97, 0x9358, 0x5E9A, 0x8D4D, 0x5E9C, 0x957B, 0x5EA0, 0x9BF7, 0x5EA6, 0x9378, 0x5EA7, 0x8DC0, + 0x5EAB, 0x8CC9, 0x5EAD, 0x92EB, 0x5EB5, 0x88C1, 0x5EB6, 0x8F8E, 0x5EB7, 0x8D4E, 0x5EB8, 0x9766, 0x5EC1, 0x9BF8, 0x5EC2, 0x9BF9, + 0x5EC3, 0x9470, 0x5EC8, 0x9BFA, 0x5EC9, 0x97F5, 0x5ECA, 0x984C, 0x5ECF, 0x9BFC, 0x5ED0, 0x9BFB, 0x5ED3, 0x8A66, 0x5ED6, 0x9C40, + 0x5EDA, 0x9C43, 0x5EDB, 0x9C44, 0x5EDD, 0x9C42, 0x5EDF, 0x955F, 0x5EE0, 0x8FB1, 0x5EE1, 0x9C46, 0x5EE2, 0x9C45, 0x5EE3, 0x9C41, + 0x5EE8, 0x9C47, 0x5EE9, 0x9C48, 0x5EEC, 0x9C49, 0x5EF0, 0x9C4C, 0x5EF1, 0x9C4A, 0x5EF3, 0x9C4B, 0x5EF4, 0x9C4D, 0x5EF6, 0x8984, + 0x5EF7, 0x92EC, 0x5EF8, 0x9C4E, 0x5EFA, 0x8C9A, 0x5EFB, 0x89F4, 0x5EFC, 0x9455, 0x5EFE, 0x9C4F, 0x5EFF, 0x93F9, 0x5F01, 0x95D9, + 0x5F03, 0x9C50, 0x5F04, 0x984D, 0x5F09, 0x9C51, 0x5F0A, 0x95BE, 0x5F0B, 0x9C54, 0x5F0C, 0x989F, 0x5F0D, 0x98AF, 0x5F0F, 0x8EAE, + 0x5F10, 0x93F3, 0x5F11, 0x9C55, 0x5F13, 0x8B7C, 0x5F14, 0x92A2, 0x5F15, 0x88F8, 0x5F16, 0x9C56, 0x5F17, 0x95A4, 0x5F18, 0x8D4F, + 0x5F1B, 0x926F, 0x5F1F, 0x92ED, 0x5F21, 0xFAB7, 0x5F25, 0x96ED, 0x5F26, 0x8CB7, 0x5F27, 0x8CCA, 0x5F29, 0x9C57, 0x5F2D, 0x9C58, + 0x5F2F, 0x9C5E, 0x5F31, 0x8EE3, 0x5F34, 0xFAB8, 0x5F35, 0x92A3, 0x5F37, 0x8BAD, 0x5F38, 0x9C59, 0x5F3C, 0x954A, 0x5F3E, 0x9265, + 0x5F41, 0x9C5A, 0x5F45, 0xFA67, 0x5F48, 0x9C5B, 0x5F4A, 0x8BAE, 0x5F4C, 0x9C5C, 0x5F4E, 0x9C5D, 0x5F51, 0x9C5F, 0x5F53, 0x9396, + 0x5F56, 0x9C60, 0x5F57, 0x9C61, 0x5F59, 0x9C62, 0x5F5C, 0x9C53, 0x5F5D, 0x9C52, 0x5F61, 0x9C63, 0x5F62, 0x8C60, 0x5F66, 0x9546, + 0x5F67, 0xFAB9, 0x5F69, 0x8DCA, 0x5F6A, 0x9556, 0x5F6B, 0x92A4, 0x5F6C, 0x956A, 0x5F6D, 0x9C64, 0x5F70, 0x8FB2, 0x5F71, 0x8965, + 0x5F73, 0x9C65, 0x5F77, 0x9C66, 0x5F79, 0x96F0, 0x5F7C, 0x94DE, 0x5F7F, 0x9C69, 0x5F80, 0x899D, 0x5F81, 0x90AA, 0x5F82, 0x9C68, + 0x5F83, 0x9C67, 0x5F84, 0x8C61, 0x5F85, 0x91D2, 0x5F87, 0x9C6D, 0x5F88, 0x9C6B, 0x5F8A, 0x9C6A, 0x5F8B, 0x97A5, 0x5F8C, 0x8CE3, + 0x5F90, 0x8F99, 0x5F91, 0x9C6C, 0x5F92, 0x936B, 0x5F93, 0x8F5D, 0x5F97, 0x93BE, 0x5F98, 0x9C70, 0x5F99, 0x9C6F, 0x5F9E, 0x9C6E, + 0x5FA0, 0x9C71, 0x5FA1, 0x8CE4, 0x5FA8, 0x9C72, 0x5FA9, 0x959C, 0x5FAA, 0x8F7A, 0x5FAD, 0x9C73, 0x5FAE, 0x94F7, 0x5FB3, 0x93BF, + 0x5FB4, 0x92A5, 0x5FB7, 0xFABA, 0x5FB9, 0x934F, 0x5FBC, 0x9C74, 0x5FBD, 0x8B4A, 0x5FC3, 0x9053, 0x5FC5, 0x954B, 0x5FCC, 0x8AF5, + 0x5FCD, 0x9445, 0x5FD6, 0x9C75, 0x5FD7, 0x8E75, 0x5FD8, 0x9659, 0x5FD9, 0x965A, 0x5FDC, 0x899E, 0x5FDD, 0x9C7A, 0x5FDE, 0xFABB, + 0x5FE0, 0x9289, 0x5FE4, 0x9C77, 0x5FEB, 0x89F5, 0x5FF0, 0x9CAB, 0x5FF1, 0x9C79, 0x5FF5, 0x944F, 0x5FF8, 0x9C78, 0x5FFB, 0x9C76, + 0x5FFD, 0x8D9A, 0x5FFF, 0x9C7C, 0x600E, 0x9C83, 0x600F, 0x9C89, 0x6010, 0x9C81, 0x6012, 0x937B, 0x6015, 0x9C86, 0x6016, 0x957C, + 0x6019, 0x9C80, 0x601B, 0x9C85, 0x601C, 0x97E5, 0x601D, 0x8E76, 0x6020, 0x91D3, 0x6021, 0x9C7D, 0x6025, 0x8B7D, 0x6026, 0x9C88, + 0x6027, 0x90AB, 0x6028, 0x8985, 0x6029, 0x9C82, 0x602A, 0x89F6, 0x602B, 0x9C87, 0x602F, 0x8BAF, 0x6031, 0x9C84, 0x603A, 0x9C8A, + 0x6041, 0x9C8C, 0x6042, 0x9C96, 0x6043, 0x9C94, 0x6046, 0x9C91, 0x604A, 0x9C90, 0x604B, 0x97F6, 0x604D, 0x9C92, 0x6050, 0x8BB0, + 0x6052, 0x8D50, 0x6055, 0x8F9A, 0x6059, 0x9C99, 0x605A, 0x9C8B, 0x605D, 0xFABC, 0x605F, 0x9C8F, 0x6060, 0x9C7E, 0x6062, 0x89F8, + 0x6063, 0x9C93, 0x6064, 0x9C95, 0x6065, 0x9270, 0x6068, 0x8DA6, 0x6069, 0x89B6, 0x606A, 0x9C8D, 0x606B, 0x9C98, 0x606C, 0x9C97, + 0x606D, 0x8BB1, 0x606F, 0x91A7, 0x6070, 0x8A86, 0x6075, 0x8C62, 0x6077, 0x9C8E, 0x6081, 0x9C9A, 0x6083, 0x9C9D, 0x6084, 0x9C9F, + 0x6085, 0xFABD, 0x6089, 0x8EBB, 0x608A, 0xFABE, 0x608B, 0x9CA5, 0x608C, 0x92EE, 0x608D, 0x9C9B, 0x6092, 0x9CA3, 0x6094, 0x89F7, + 0x6096, 0x9CA1, 0x6097, 0x9CA2, 0x609A, 0x9C9E, 0x609B, 0x9CA0, 0x609F, 0x8CE5, 0x60A0, 0x9749, 0x60A3, 0x8AB3, 0x60A6, 0x8978, + 0x60A7, 0x9CA4, 0x60A9, 0x9459, 0x60AA, 0x88AB, 0x60B2, 0x94DF, 0x60B3, 0x9C7B, 0x60B4, 0x9CAA, 0x60B5, 0x9CAE, 0x60B6, 0x96E3, + 0x60B8, 0x9CA7, 0x60BC, 0x9389, 0x60BD, 0x9CAC, 0x60C5, 0x8FEE, 0x60C6, 0x9CAD, 0x60C7, 0x93D5, 0x60D1, 0x9866, 0x60D3, 0x9CA9, + 0x60D5, 0xFAC0, 0x60D8, 0x9CAF, 0x60DA, 0x8D9B, 0x60DC, 0x90C9, 0x60DE, 0xFABF, 0x60DF, 0x88D2, 0x60E0, 0x9CA8, 0x60E1, 0x9CA6, + 0x60E3, 0x9179, 0x60E7, 0x9C9C, 0x60E8, 0x8E53, 0x60F0, 0x91C4, 0x60F1, 0x9CBB, 0x60F2, 0xFAC2, 0x60F3, 0x917A, 0x60F4, 0x9CB6, + 0x60F6, 0x9CB3, 0x60F7, 0x9CB4, 0x60F9, 0x8EE4, 0x60FA, 0x9CB7, 0x60FB, 0x9CBA, 0x6100, 0x9CB5, 0x6101, 0x8F44, 0x6103, 0x9CB8, + 0x6106, 0x9CB2, 0x6108, 0x96FA, 0x6109, 0x96F9, 0x610D, 0x9CBC, 0x610E, 0x9CBD, 0x610F, 0x88D3, 0x6111, 0xFAC3, 0x6115, 0x9CB1, + 0x611A, 0x8BF0, 0x611B, 0x88A4, 0x611F, 0x8AB4, 0x6120, 0xFAC1, 0x6121, 0x9CB9, 0x6127, 0x9CC1, 0x6128, 0x9CC0, 0x612C, 0x9CC5, + 0x6130, 0xFAC5, 0x6134, 0x9CC6, 0x6137, 0xFAC4, 0x613C, 0x9CC4, 0x613D, 0x9CC7, 0x613E, 0x9CBF, 0x613F, 0x9CC3, 0x6142, 0x9CC8, + 0x6144, 0x9CC9, 0x6147, 0x9CBE, 0x6148, 0x8E9C, 0x614A, 0x9CC2, 0x614B, 0x91D4, 0x614C, 0x8D51, 0x614D, 0x9CB0, 0x614E, 0x9054, + 0x6153, 0x9CD6, 0x6155, 0x95E7, 0x6158, 0x9CCC, 0x6159, 0x9CCD, 0x615A, 0x9CCE, 0x615D, 0x9CD5, 0x615F, 0x9CD4, 0x6162, 0x969D, + 0x6163, 0x8AB5, 0x6165, 0x9CD2, 0x6167, 0x8C64, 0x6168, 0x8A53, 0x616B, 0x9CCF, 0x616E, 0x97B6, 0x616F, 0x9CD1, 0x6170, 0x88D4, + 0x6171, 0x9CD3, 0x6173, 0x9CCA, 0x6174, 0x9CD0, 0x6175, 0x9CD7, 0x6176, 0x8C63, 0x6177, 0x9CCB, 0x617E, 0x977C, 0x6182, 0x974A, + 0x6187, 0x9CDA, 0x618A, 0x9CDE, 0x618E, 0x919E, 0x6190, 0x97F7, 0x6191, 0x9CDF, 0x6194, 0x9CDC, 0x6196, 0x9CD9, 0x6198, 0xFAC6, + 0x6199, 0x9CD8, 0x619A, 0x9CDD, 0x61A4, 0x95AE, 0x61A7, 0x93B2, 0x61A9, 0x8C65, 0x61AB, 0x9CE0, 0x61AC, 0x9CDB, 0x61AE, 0x9CE1, + 0x61B2, 0x8C9B, 0x61B6, 0x89AF, 0x61BA, 0x9CE9, 0x61BE, 0x8AB6, 0x61C3, 0x9CE7, 0x61C6, 0x9CE8, 0x61C7, 0x8DA7, 0x61C8, 0x9CE6, + 0x61C9, 0x9CE4, 0x61CA, 0x9CE3, 0x61CB, 0x9CEA, 0x61CC, 0x9CE2, 0x61CD, 0x9CEC, 0x61D0, 0x89F9, 0x61E3, 0x9CEE, 0x61E6, 0x9CED, + 0x61F2, 0x92A6, 0x61F4, 0x9CF1, 0x61F6, 0x9CEF, 0x61F7, 0x9CE5, 0x61F8, 0x8C9C, 0x61FA, 0x9CF0, 0x61FC, 0x9CF4, 0x61FD, 0x9CF3, + 0x61FE, 0x9CF5, 0x61FF, 0x9CF2, 0x6200, 0x9CF6, 0x6208, 0x9CF7, 0x6209, 0x9CF8, 0x620A, 0x95E8, 0x620C, 0x9CFA, 0x620D, 0x9CF9, + 0x620E, 0x8F5E, 0x6210, 0x90AC, 0x6211, 0x89E4, 0x6212, 0x89FA, 0x6213, 0xFAC7, 0x6214, 0x9CFB, 0x6216, 0x88BD, 0x621A, 0x90CA, + 0x621B, 0x9CFC, 0x621D, 0xE6C1, 0x621E, 0x9D40, 0x621F, 0x8C81, 0x6221, 0x9D41, 0x6226, 0x90ED, 0x622A, 0x9D42, 0x622E, 0x9D43, + 0x622F, 0x8B59, 0x6230, 0x9D44, 0x6232, 0x9D45, 0x6233, 0x9D46, 0x6234, 0x91D5, 0x6238, 0x8CCB, 0x623B, 0x96DF, 0x623F, 0x965B, + 0x6240, 0x8F8A, 0x6241, 0x9D47, 0x6247, 0x90EE, 0x6248, 0xE7BB, 0x6249, 0x94E0, 0x624B, 0x8EE8, 0x624D, 0x8DCB, 0x624E, 0x9D48, + 0x6253, 0x91C5, 0x6255, 0x95A5, 0x6258, 0x91EF, 0x625B, 0x9D4B, 0x625E, 0x9D49, 0x6260, 0x9D4C, 0x6263, 0x9D4A, 0x6268, 0x9D4D, + 0x626E, 0x95AF, 0x6271, 0x88B5, 0x6276, 0x957D, 0x6279, 0x94E1, 0x627C, 0x9D4E, 0x627E, 0x9D51, 0x627F, 0x8FB3, 0x6280, 0x8B5A, + 0x6282, 0x9D4F, 0x6283, 0x9D56, 0x6284, 0x8FB4, 0x6289, 0x9D50, 0x628A, 0x9463, 0x6291, 0x977D, 0x6292, 0x9D52, 0x6293, 0x9D53, + 0x6294, 0x9D57, 0x6295, 0x938A, 0x6296, 0x9D54, 0x6297, 0x8D52, 0x6298, 0x90DC, 0x629B, 0x9D65, 0x629C, 0x94B2, 0x629E, 0x91F0, + 0x62A6, 0xFAC8, 0x62AB, 0x94E2, 0x62AC, 0x9DAB, 0x62B1, 0x95F8, 0x62B5, 0x92EF, 0x62B9, 0x9695, 0x62BB, 0x9D5A, 0x62BC, 0x899F, + 0x62BD, 0x928A, 0x62C2, 0x9D63, 0x62C5, 0x9253, 0x62C6, 0x9D5D, 0x62C7, 0x9D64, 0x62C8, 0x9D5F, 0x62C9, 0x9D66, 0x62CA, 0x9D62, + 0x62CC, 0x9D61, 0x62CD, 0x948F, 0x62CF, 0x9D5B, 0x62D0, 0x89FB, 0x62D1, 0x9D59, 0x62D2, 0x8B91, 0x62D3, 0x91F1, 0x62D4, 0x9D55, + 0x62D7, 0x9D58, 0x62D8, 0x8D53, 0x62D9, 0x90D9, 0x62DB, 0x8FB5, 0x62DC, 0x9D60, 0x62DD, 0x9471, 0x62E0, 0x8B92, 0x62E1, 0x8A67, + 0x62EC, 0x8A87, 0x62ED, 0x9040, 0x62EE, 0x9D68, 0x62EF, 0x9D6D, 0x62F1, 0x9D69, 0x62F3, 0x8C9D, 0x62F5, 0x9D6E, 0x62F6, 0x8E41, + 0x62F7, 0x8D89, 0x62FE, 0x8F45, 0x62FF, 0x9D5C, 0x6301, 0x8E9D, 0x6302, 0x9D6B, 0x6307, 0x8E77, 0x6308, 0x9D6C, 0x6309, 0x88C2, + 0x630C, 0x9D67, 0x6311, 0x92A7, 0x6319, 0x8B93, 0x631F, 0x8BB2, 0x6327, 0x9D6A, 0x6328, 0x88A5, 0x632B, 0x8DC1, 0x632F, 0x9055, + 0x633A, 0x92F0, 0x633D, 0x94D2, 0x633E, 0x9D70, 0x633F, 0x917D, 0x6349, 0x91A8, 0x634C, 0x8E4A, 0x634D, 0x9D71, 0x634F, 0x9D73, + 0x6350, 0x9D6F, 0x6355, 0x95DF, 0x6357, 0x92BB, 0x635C, 0x917B, 0x6367, 0x95F9, 0x6368, 0x8ECC, 0x6369, 0x9D80, 0x636B, 0x9D7E, + 0x636E, 0x9098, 0x6372, 0x8C9E, 0x6376, 0x9D78, 0x6377, 0x8FB7, 0x637A, 0x93E6, 0x637B, 0x9450, 0x6380, 0x9D76, 0x6383, 0x917C, + 0x6388, 0x8EF6, 0x6389, 0x9D7B, 0x638C, 0x8FB6, 0x638E, 0x9D75, 0x638F, 0x9D7A, 0x6392, 0x9472, 0x6396, 0x9D74, 0x6398, 0x8C40, + 0x639B, 0x8A7C, 0x639F, 0x9D7C, 0x63A0, 0x97A9, 0x63A1, 0x8DCC, 0x63A2, 0x9254, 0x63A3, 0x9D79, 0x63A5, 0x90DA, 0x63A7, 0x8D54, + 0x63A8, 0x9084, 0x63A9, 0x8986, 0x63AA, 0x915B, 0x63AB, 0x9D77, 0x63AC, 0x8B64, 0x63B2, 0x8C66, 0x63B4, 0x92CD, 0x63B5, 0x9D7D, + 0x63BB, 0x917E, 0x63BE, 0x9D81, 0x63C0, 0x9D83, 0x63C3, 0x91B5, 0x63C4, 0x9D89, 0x63C6, 0x9D84, 0x63C9, 0x9D86, 0x63CF, 0x9560, + 0x63D0, 0x92F1, 0x63D2, 0x9D87, 0x63D6, 0x974B, 0x63DA, 0x9767, 0x63DB, 0x8AB7, 0x63E1, 0x88AC, 0x63E3, 0x9D85, 0x63E9, 0x9D82, + 0x63EE, 0x8AF6, 0x63F4, 0x8987, 0x63F5, 0xFAC9, 0x63F6, 0x9D88, 0x63FA, 0x9768, 0x6406, 0x9D8C, 0x640D, 0x91B9, 0x640F, 0x9D93, + 0x6413, 0x9D8D, 0x6416, 0x9D8A, 0x6417, 0x9D91, 0x641C, 0x9D72, 0x6426, 0x9D8E, 0x6428, 0x9D92, 0x642C, 0x94C0, 0x642D, 0x938B, + 0x6434, 0x9D8B, 0x6436, 0x9D8F, 0x643A, 0x8C67, 0x643E, 0x8DEF, 0x6442, 0x90DB, 0x644E, 0x9D97, 0x6458, 0x9345, 0x6460, 0xFACA, + 0x6467, 0x9D94, 0x6469, 0x9680, 0x646F, 0x9D95, 0x6476, 0x9D96, 0x6478, 0x96CC, 0x647A, 0x90A0, 0x6483, 0x8C82, 0x6488, 0x9D9D, + 0x6492, 0x8E54, 0x6493, 0x9D9A, 0x6495, 0x9D99, 0x649A, 0x9451, 0x649D, 0xFACB, 0x649E, 0x93B3, 0x64A4, 0x9350, 0x64A5, 0x9D9B, + 0x64A9, 0x9D9C, 0x64AB, 0x958F, 0x64AD, 0x9464, 0x64AE, 0x8E42, 0x64B0, 0x90EF, 0x64B2, 0x966F, 0x64B9, 0x8A68, 0x64BB, 0x9DA3, + 0x64BC, 0x9D9E, 0x64C1, 0x9769, 0x64C2, 0x9DA5, 0x64C5, 0x9DA1, 0x64C7, 0x9DA2, 0x64CD, 0x9180, 0x64CE, 0xFACC, 0x64D2, 0x9DA0, + 0x64D4, 0x9D5E, 0x64D8, 0x9DA4, 0x64DA, 0x9D9F, 0x64E0, 0x9DA9, 0x64E1, 0x9DAA, 0x64E2, 0x9346, 0x64E3, 0x9DAC, 0x64E6, 0x8E43, + 0x64E7, 0x9DA7, 0x64EC, 0x8B5B, 0x64EF, 0x9DAD, 0x64F1, 0x9DA6, 0x64F2, 0x9DB1, 0x64F4, 0x9DB0, 0x64F6, 0x9DAF, 0x64FA, 0x9DB2, + 0x64FD, 0x9DB4, 0x64FE, 0x8FEF, 0x6500, 0x9DB3, 0x6505, 0x9DB7, 0x6518, 0x9DB5, 0x651C, 0x9DB6, 0x651D, 0x9D90, 0x6523, 0x9DB9, + 0x6524, 0x9DB8, 0x652A, 0x9D98, 0x652B, 0x9DBA, 0x652C, 0x9DAE, 0x652F, 0x8E78, 0x6534, 0x9DBB, 0x6535, 0x9DBC, 0x6536, 0x9DBE, + 0x6537, 0x9DBD, 0x6538, 0x9DBF, 0x6539, 0x89FC, 0x653B, 0x8D55, 0x653E, 0x95FA, 0x653F, 0x90AD, 0x6545, 0x8CCC, 0x6548, 0x9DC1, + 0x654D, 0x9DC4, 0x654E, 0xFACD, 0x654F, 0x9571, 0x6551, 0x8B7E, 0x6555, 0x9DC3, 0x6556, 0x9DC2, 0x6557, 0x9473, 0x6558, 0x9DC5, + 0x6559, 0x8BB3, 0x655D, 0x9DC7, 0x655E, 0x9DC6, 0x6562, 0x8AB8, 0x6563, 0x8E55, 0x6566, 0x93D6, 0x656C, 0x8C68, 0x6570, 0x9094, + 0x6572, 0x9DC8, 0x6574, 0x90AE, 0x6575, 0x9347, 0x6577, 0x957E, 0x6578, 0x9DC9, 0x6582, 0x9DCA, 0x6583, 0x9DCB, 0x6587, 0x95B6, + 0x6588, 0x9B7C, 0x6589, 0x90C4, 0x658C, 0x956B, 0x658E, 0x8DD6, 0x6590, 0x94E3, 0x6591, 0x94C1, 0x6597, 0x936C, 0x6599, 0x97BF, + 0x659B, 0x9DCD, 0x659C, 0x8ECE, 0x659F, 0x9DCE, 0x65A1, 0x88B4, 0x65A4, 0x8BD2, 0x65A5, 0x90CB, 0x65A7, 0x9580, 0x65AB, 0x9DCF, + 0x65AC, 0x8E61, 0x65AD, 0x9266, 0x65AF, 0x8E7A, 0x65B0, 0x9056, 0x65B7, 0x9DD0, 0x65B9, 0x95FB, 0x65BC, 0x8997, 0x65BD, 0x8E7B, + 0x65C1, 0x9DD3, 0x65C3, 0x9DD1, 0x65C4, 0x9DD4, 0x65C5, 0x97B7, 0x65C6, 0x9DD2, 0x65CB, 0x90F9, 0x65CC, 0x9DD5, 0x65CF, 0x91B0, + 0x65D2, 0x9DD6, 0x65D7, 0x8AF8, 0x65D9, 0x9DD8, 0x65DB, 0x9DD7, 0x65E0, 0x9DD9, 0x65E1, 0x9DDA, 0x65E2, 0x8AF9, 0x65E5, 0x93FA, + 0x65E6, 0x9255, 0x65E7, 0x8B8C, 0x65E8, 0x8E7C, 0x65E9, 0x9181, 0x65EC, 0x8F7B, 0x65ED, 0x88AE, 0x65F1, 0x9DDB, 0x65FA, 0x89A0, + 0x65FB, 0x9DDF, 0x6600, 0xFACE, 0x6602, 0x8D56, 0x6603, 0x9DDE, 0x6606, 0x8DA9, 0x6607, 0x8FB8, 0x6609, 0xFAD1, 0x660A, 0x9DDD, + 0x660C, 0x8FB9, 0x660E, 0x96BE, 0x660F, 0x8DA8, 0x6613, 0x88D5, 0x6614, 0x90CC, 0x6615, 0xFACF, 0x661C, 0x9DE4, 0x661E, 0xFAD3, + 0x661F, 0x90AF, 0x6620, 0x8966, 0x6624, 0xFAD4, 0x6625, 0x8F74, 0x6627, 0x9686, 0x6628, 0x8DF0, 0x662D, 0x8FBA, 0x662E, 0xFAD2, + 0x662F, 0x90A5, 0x6631, 0xFA63, 0x6634, 0x9DE3, 0x6635, 0x9DE1, 0x6636, 0x9DE2, 0x663B, 0xFAD0, 0x663C, 0x928B, 0x663F, 0x9E45, + 0x6641, 0x9DE8, 0x6642, 0x8E9E, 0x6643, 0x8D57, 0x6644, 0x9DE6, 0x6649, 0x9DE7, 0x664B, 0x9057, 0x664F, 0x9DE5, 0x6652, 0x8E4E, + 0x6657, 0xFAD6, 0x6659, 0xFAD7, 0x665D, 0x9DEA, 0x665E, 0x9DE9, 0x665F, 0x9DEE, 0x6662, 0x9DEF, 0x6664, 0x9DEB, 0x6665, 0xFAD5, + 0x6666, 0x8A41, 0x6667, 0x9DEC, 0x6668, 0x9DED, 0x6669, 0x94D3, 0x666E, 0x9581, 0x666F, 0x8C69, 0x6670, 0x9DF0, 0x6673, 0xFAD9, + 0x6674, 0x90B0, 0x6676, 0x8FBB, 0x667A, 0x9271, 0x6681, 0x8BC5, 0x6683, 0x9DF1, 0x6684, 0x9DF5, 0x6687, 0x89C9, 0x6688, 0x9DF2, + 0x6689, 0x9DF4, 0x668E, 0x9DF3, 0x6691, 0x8F8B, 0x6696, 0x9267, 0x6697, 0x88C3, 0x6698, 0x9DF6, 0x6699, 0xFADA, 0x669D, 0x9DF7, + 0x66A0, 0xFADB, 0x66A2, 0x92A8, 0x66A6, 0x97EF, 0x66AB, 0x8E62, 0x66AE, 0x95E9, 0x66B2, 0xFADC, 0x66B4, 0x965C, 0x66B8, 0x9E41, + 0x66B9, 0x9DF9, 0x66BC, 0x9DFC, 0x66BE, 0x9DFB, 0x66BF, 0xFADD, 0x66C1, 0x9DF8, 0x66C4, 0x9E40, 0x66C7, 0x93DC, 0x66C9, 0x9DFA, + 0x66D6, 0x9E42, 0x66D9, 0x8F8C, 0x66DA, 0x9E43, 0x66DC, 0x976A, 0x66DD, 0x9498, 0x66E0, 0x9E44, 0x66E6, 0x9E46, 0x66E9, 0x9E47, + 0x66F0, 0x9E48, 0x66F2, 0x8BC8, 0x66F3, 0x8967, 0x66F4, 0x8D58, 0x66F5, 0x9E49, 0x66F7, 0x9E4A, 0x66F8, 0x8F91, 0x66F9, 0x9182, + 0x66FA, 0xFADE, 0x66FB, 0xFA66, 0x66FC, 0x99D6, 0x66FD, 0x915D, 0x66FE, 0x915C, 0x66FF, 0x91D6, 0x6700, 0x8DC5, 0x6703, 0x98F0, + 0x6708, 0x8C8E, 0x6709, 0x974C, 0x670B, 0x95FC, 0x670D, 0x959E, 0x670E, 0xFADF, 0x670F, 0x9E4B, 0x6714, 0x8DF1, 0x6715, 0x92BD, + 0x6716, 0x9E4C, 0x6717, 0x984E, 0x671B, 0x965D, 0x671D, 0x92A9, 0x671E, 0x9E4D, 0x671F, 0x8AFA, 0x6726, 0x9E4E, 0x6727, 0x9E4F, + 0x6728, 0x96D8, 0x672A, 0x96A2, 0x672B, 0x9696, 0x672C, 0x967B, 0x672D, 0x8E44, 0x672E, 0x9E51, 0x6731, 0x8EE9, 0x6734, 0x9670, + 0x6736, 0x9E53, 0x6737, 0x9E56, 0x6738, 0x9E55, 0x673A, 0x8AF7, 0x673D, 0x8B80, 0x673F, 0x9E52, 0x6741, 0x9E54, 0x6746, 0x9E57, + 0x6749, 0x9099, 0x674E, 0x979B, 0x674F, 0x88C7, 0x6750, 0x8DDE, 0x6751, 0x91BA, 0x6753, 0x8EDB, 0x6756, 0x8FF1, 0x6759, 0x9E5A, + 0x675C, 0x936D, 0x675E, 0x9E58, 0x675F, 0x91A9, 0x6760, 0x9E59, 0x6761, 0x8FF0, 0x6762, 0x96DB, 0x6763, 0x9E5B, 0x6764, 0x9E5C, + 0x6765, 0x9788, 0x6766, 0xFAE1, 0x676A, 0x9E61, 0x676D, 0x8D59, 0x676F, 0x9474, 0x6770, 0x9E5E, 0x6771, 0x938C, 0x6772, 0x9DDC, + 0x6773, 0x9DE0, 0x6775, 0x8B6E, 0x6777, 0x9466, 0x677C, 0x9E60, 0x677E, 0x8FBC, 0x677F, 0x94C2, 0x6785, 0x9E66, 0x6787, 0x94F8, + 0x6789, 0x9E5D, 0x678B, 0x9E63, 0x678C, 0x9E62, 0x6790, 0x90CD, 0x6795, 0x968D, 0x6797, 0x97D1, 0x679A, 0x9687, 0x679C, 0x89CA, + 0x679D, 0x8E7D, 0x67A0, 0x9867, 0x67A1, 0x9E65, 0x67A2, 0x9095, 0x67A6, 0x9E64, 0x67A9, 0x9E5F, 0x67AF, 0x8CCD, 0x67B3, 0x9E6B, + 0x67B4, 0x9E69, 0x67B6, 0x89CB, 0x67B7, 0x9E67, 0x67B8, 0x9E6D, 0x67B9, 0x9E73, 0x67BB, 0xFAE2, 0x67C0, 0xFAE4, 0x67C1, 0x91C6, + 0x67C4, 0x95BF, 0x67C6, 0x9E75, 0x67CA, 0x9541, 0x67CE, 0x9E74, 0x67CF, 0x9490, 0x67D0, 0x965E, 0x67D1, 0x8AB9, 0x67D3, 0x90F5, + 0x67D4, 0x8F5F, 0x67D8, 0x92D1, 0x67DA, 0x974D, 0x67DD, 0x9E70, 0x67DE, 0x9E6F, 0x67E2, 0x9E71, 0x67E4, 0x9E6E, 0x67E7, 0x9E76, + 0x67E9, 0x9E6C, 0x67EC, 0x9E6A, 0x67EE, 0x9E72, 0x67EF, 0x9E68, 0x67F1, 0x928C, 0x67F3, 0x96F6, 0x67F4, 0x8EC4, 0x67F5, 0x8DF2, + 0x67FB, 0x8DB8, 0x67FE, 0x968F, 0x67FF, 0x8A60, 0x6801, 0xFAE5, 0x6802, 0x92CC, 0x6803, 0x93C8, 0x6804, 0x8968, 0x6813, 0x90F0, + 0x6816, 0x90B2, 0x6817, 0x8C49, 0x681E, 0x9E78, 0x6821, 0x8D5A, 0x6822, 0x8A9C, 0x6829, 0x9E7A, 0x682A, 0x8A94, 0x682B, 0x9E81, + 0x6832, 0x9E7D, 0x6834, 0x90F1, 0x6838, 0x8A6A, 0x6839, 0x8DAA, 0x683C, 0x8A69, 0x683D, 0x8DCD, 0x6840, 0x9E7B, 0x6841, 0x8C85, + 0x6842, 0x8C6A, 0x6843, 0x938D, 0x6844, 0xFAE6, 0x6846, 0x9E79, 0x6848, 0x88C4, 0x684D, 0x9E7C, 0x684E, 0x9E7E, 0x6850, 0x8BCB, + 0x6851, 0x8C4B, 0x6852, 0xFAE3, 0x6853, 0x8ABA, 0x6854, 0x8B6A, 0x6859, 0x9E82, 0x685C, 0x8DF7, 0x685D, 0x9691, 0x685F, 0x8E56, + 0x6863, 0x9E83, 0x6867, 0x954F, 0x6874, 0x9E8F, 0x6876, 0x89B1, 0x6877, 0x9E84, 0x687E, 0x9E95, 0x687F, 0x9E85, 0x6881, 0x97C0, + 0x6883, 0x9E8C, 0x6885, 0x947E, 0x688D, 0x9E94, 0x688F, 0x9E87, 0x6893, 0x88B2, 0x6894, 0x9E89, 0x6897, 0x8D5B, 0x689B, 0x9E8B, + 0x689D, 0x9E8A, 0x689F, 0x9E86, 0x68A0, 0x9E91, 0x68A2, 0x8FBD, 0x68A6, 0x9AEB, 0x68A7, 0x8CE6, 0x68A8, 0x979C, 0x68AD, 0x9E88, + 0x68AF, 0x92F2, 0x68B0, 0x8A42, 0x68B1, 0x8DAB, 0x68B3, 0x9E80, 0x68B5, 0x9E90, 0x68B6, 0x8A81, 0x68B9, 0x9E8E, 0x68BA, 0x9E92, + 0x68BC, 0x938E, 0x68C4, 0x8AFC, 0x68C6, 0x9EB0, 0x68C8, 0xFA64, 0x68C9, 0x96C7, 0x68CA, 0x9E97, 0x68CB, 0x8AFB, 0x68CD, 0x9E9E, + 0x68CF, 0xFAE7, 0x68D2, 0x965F, 0x68D4, 0x9E9F, 0x68D5, 0x9EA1, 0x68D7, 0x9EA5, 0x68D8, 0x9E99, 0x68DA, 0x9249, 0x68DF, 0x938F, + 0x68E0, 0x9EA9, 0x68E1, 0x9E9C, 0x68E3, 0x9EA6, 0x68E7, 0x9EA0, 0x68EE, 0x9058, 0x68EF, 0x9EAA, 0x68F2, 0x90B1, 0x68F9, 0x9EA8, + 0x68FA, 0x8ABB, 0x6900, 0x986F, 0x6901, 0x9E96, 0x6904, 0x9EA4, 0x6905, 0x88D6, 0x6908, 0x9E98, 0x690B, 0x96B8, 0x690C, 0x9E9D, + 0x690D, 0x9041, 0x690E, 0x92C5, 0x690F, 0x9E93, 0x6912, 0x9EA3, 0x6919, 0x909A, 0x691A, 0x9EAD, 0x691B, 0x8A91, 0x691C, 0x8C9F, + 0x6921, 0x9EAF, 0x6922, 0x9E9A, 0x6923, 0x9EAE, 0x6925, 0x9EA7, 0x6926, 0x9E9B, 0x6928, 0x9EAB, 0x692A, 0x9EAC, 0x6930, 0x9EBD, + 0x6934, 0x93CC, 0x6936, 0x9EA2, 0x6939, 0x9EB9, 0x693D, 0x9EBB, 0x693F, 0x92D6, 0x694A, 0x976B, 0x6953, 0x9596, 0x6954, 0x9EB6, + 0x6955, 0x91C8, 0x6959, 0x9EBC, 0x695A, 0x915E, 0x695C, 0x9EB3, 0x695D, 0x9EC0, 0x695E, 0x9EBF, 0x6960, 0x93ED, 0x6961, 0x9EBE, + 0x6962, 0x93E8, 0x6968, 0xFAE9, 0x696A, 0x9EC2, 0x696B, 0x9EB5, 0x696D, 0x8BC6, 0x696E, 0x9EB8, 0x696F, 0x8F7C, 0x6973, 0x9480, + 0x6974, 0x9EBA, 0x6975, 0x8BC9, 0x6977, 0x9EB2, 0x6978, 0x9EB4, 0x6979, 0x9EB1, 0x697C, 0x984F, 0x697D, 0x8A79, 0x697E, 0x9EB7, + 0x6981, 0x9EC1, 0x6982, 0x8A54, 0x698A, 0x8DE5, 0x698E, 0x897C, 0x6991, 0x9ED2, 0x6994, 0x9850, 0x6995, 0x9ED5, 0x6998, 0xFAEB, + 0x699B, 0x9059, 0x699C, 0x9ED4, 0x69A0, 0x9ED3, 0x69A7, 0x9ED0, 0x69AE, 0x9EC4, 0x69B1, 0x9EE1, 0x69B2, 0x9EC3, 0x69B4, 0x9ED6, + 0x69BB, 0x9ECE, 0x69BE, 0x9EC9, 0x69BF, 0x9EC6, 0x69C1, 0x9EC7, 0x69C3, 0x9ECF, 0x69C7, 0xEAA0, 0x69CA, 0x9ECC, 0x69CB, 0x8D5C, + 0x69CC, 0x92C6, 0x69CD, 0x9184, 0x69CE, 0x9ECA, 0x69D0, 0x9EC5, 0x69D3, 0x9EC8, 0x69D8, 0x976C, 0x69D9, 0x968A, 0x69DD, 0x9ECD, + 0x69DE, 0x9ED7, 0x69E2, 0xFAEC, 0x69E7, 0x9EDF, 0x69E8, 0x9ED8, 0x69EB, 0x9EE5, 0x69ED, 0x9EE3, 0x69F2, 0x9EDE, 0x69F9, 0x9EDD, + 0x69FB, 0x92CE, 0x69FD, 0x9185, 0x69FF, 0x9EDB, 0x6A02, 0x9ED9, 0x6A05, 0x9EE0, 0x6A0A, 0x9EE6, 0x6A0B, 0x94F3, 0x6A0C, 0x9EEC, + 0x6A12, 0x9EE7, 0x6A13, 0x9EEA, 0x6A14, 0x9EE4, 0x6A17, 0x9294, 0x6A19, 0x9557, 0x6A1B, 0x9EDA, 0x6A1E, 0x9EE2, 0x6A1F, 0x8FBE, + 0x6A21, 0x96CD, 0x6A22, 0x9EF6, 0x6A23, 0x9EE9, 0x6A29, 0x8CA0, 0x6A2A, 0x89A1, 0x6A2B, 0x8A7E, 0x6A2E, 0x9ED1, 0x6A30, 0xFAED, + 0x6A35, 0x8FBF, 0x6A36, 0x9EEE, 0x6A38, 0x9EF5, 0x6A39, 0x8EF7, 0x6A3A, 0x8A92, 0x6A3D, 0x924D, 0x6A44, 0x9EEB, 0x6A46, 0xFAEF, + 0x6A47, 0x9EF0, 0x6A48, 0x9EF4, 0x6A4B, 0x8BB4, 0x6A58, 0x8B6B, 0x6A59, 0x9EF2, 0x6A5F, 0x8B40, 0x6A61, 0x93C9, 0x6A62, 0x9EF1, + 0x6A66, 0x9EF3, 0x6A6B, 0xFAEE, 0x6A72, 0x9EED, 0x6A73, 0xFAF0, 0x6A78, 0x9EEF, 0x6A7E, 0xFAF1, 0x6A7F, 0x8A80, 0x6A80, 0x9268, + 0x6A84, 0x9EFA, 0x6A8D, 0x9EF8, 0x6A8E, 0x8CE7, 0x6A90, 0x9EF7, 0x6A97, 0x9F40, 0x6A9C, 0x9E77, 0x6AA0, 0x9EF9, 0x6AA2, 0x9EFB, + 0x6AA3, 0x9EFC, 0x6AAA, 0x9F4B, 0x6AAC, 0x9F47, 0x6AAE, 0x9E8D, 0x6AB3, 0x9F46, 0x6AB8, 0x9F45, 0x6ABB, 0x9F42, 0x6AC1, 0x9EE8, + 0x6AC2, 0x9F44, 0x6AC3, 0x9F43, 0x6AD1, 0x9F49, 0x6AD3, 0x9845, 0x6ADA, 0x9F4C, 0x6ADB, 0x8BF9, 0x6ADE, 0x9F48, 0x6ADF, 0x9F4A, + 0x6AE2, 0xFAF2, 0x6AE4, 0xFAF3, 0x6AE8, 0x94A5, 0x6AEA, 0x9F4D, 0x6AFA, 0x9F51, 0x6AFB, 0x9F4E, 0x6B04, 0x9793, 0x6B05, 0x9F4F, + 0x6B0A, 0x9EDC, 0x6B12, 0x9F52, 0x6B16, 0x9F53, 0x6B1D, 0x8954, 0x6B1F, 0x9F55, 0x6B20, 0x8C87, 0x6B21, 0x8E9F, 0x6B23, 0x8BD3, + 0x6B27, 0x89A2, 0x6B32, 0x977E, 0x6B37, 0x9F57, 0x6B38, 0x9F56, 0x6B39, 0x9F59, 0x6B3A, 0x8B5C, 0x6B3D, 0x8BD4, 0x6B3E, 0x8ABC, + 0x6B43, 0x9F5C, 0x6B47, 0x9F5B, 0x6B49, 0x9F5D, 0x6B4C, 0x89CC, 0x6B4E, 0x9256, 0x6B50, 0x9F5E, 0x6B53, 0x8ABD, 0x6B54, 0x9F60, + 0x6B59, 0x9F5F, 0x6B5B, 0x9F61, 0x6B5F, 0x9F62, 0x6B61, 0x9F63, 0x6B62, 0x8E7E, 0x6B63, 0x90B3, 0x6B64, 0x8D9F, 0x6B66, 0x9590, + 0x6B69, 0x95E0, 0x6B6A, 0x9863, 0x6B6F, 0x8E95, 0x6B73, 0x8DCE, 0x6B74, 0x97F0, 0x6B78, 0x9F64, 0x6B79, 0x9F65, 0x6B7B, 0x8E80, + 0x6B7F, 0x9F66, 0x6B80, 0x9F67, 0x6B83, 0x9F69, 0x6B84, 0x9F68, 0x6B86, 0x9677, 0x6B89, 0x8F7D, 0x6B8A, 0x8EEA, 0x6B8B, 0x8E63, + 0x6B8D, 0x9F6A, 0x6B95, 0x9F6C, 0x6B96, 0x9042, 0x6B98, 0x9F6B, 0x6B9E, 0x9F6D, 0x6BA4, 0x9F6E, 0x6BAA, 0x9F6F, 0x6BAB, 0x9F70, + 0x6BAF, 0x9F71, 0x6BB1, 0x9F73, 0x6BB2, 0x9F72, 0x6BB3, 0x9F74, 0x6BB4, 0x89A3, 0x6BB5, 0x9269, 0x6BB7, 0x9F75, 0x6BBA, 0x8E45, + 0x6BBB, 0x8A6B, 0x6BBC, 0x9F76, 0x6BBF, 0x9361, 0x6BC0, 0x9ACA, 0x6BC5, 0x8B42, 0x6BC6, 0x9F77, 0x6BCB, 0x9F78, 0x6BCD, 0x95EA, + 0x6BCE, 0x9688, 0x6BD2, 0x93C5, 0x6BD3, 0x9F79, 0x6BD4, 0x94E4, 0x6BD6, 0xFAF4, 0x6BD8, 0x94F9, 0x6BDB, 0x96D1, 0x6BDF, 0x9F7A, + 0x6BEB, 0x9F7C, 0x6BEC, 0x9F7B, 0x6BEF, 0x9F7E, 0x6BF3, 0x9F7D, 0x6C08, 0x9F81, 0x6C0F, 0x8E81, 0x6C11, 0x96AF, 0x6C13, 0x9F82, + 0x6C14, 0x9F83, 0x6C17, 0x8B43, 0x6C1B, 0x9F84, 0x6C23, 0x9F86, 0x6C24, 0x9F85, 0x6C34, 0x9085, 0x6C37, 0x9558, 0x6C38, 0x8969, + 0x6C3E, 0x94C3, 0x6C3F, 0xFAF5, 0x6C40, 0x92F3, 0x6C41, 0x8F60, 0x6C42, 0x8B81, 0x6C4E, 0x94C4, 0x6C50, 0x8EAC, 0x6C55, 0x9F88, + 0x6C57, 0x8ABE, 0x6C5A, 0x8998, 0x6C5C, 0xFAF6, 0x6C5D, 0x93F0, 0x6C5E, 0x9F87, 0x6C5F, 0x8D5D, 0x6C60, 0x9272, 0x6C62, 0x9F89, + 0x6C68, 0x9F91, 0x6C6A, 0x9F8A, 0x6C6F, 0xFAF8, 0x6C70, 0x91BF, 0x6C72, 0x8B82, 0x6C73, 0x9F92, 0x6C7A, 0x8C88, 0x6C7D, 0x8B44, + 0x6C7E, 0x9F90, 0x6C81, 0x9F8E, 0x6C82, 0x9F8B, 0x6C83, 0x9780, 0x6C86, 0xFAF7, 0x6C88, 0x92BE, 0x6C8C, 0x93D7, 0x6C8D, 0x9F8C, + 0x6C90, 0x9F94, 0x6C92, 0x9F93, 0x6C93, 0x8C42, 0x6C96, 0x89AB, 0x6C99, 0x8DB9, 0x6C9A, 0x9F8D, 0x6C9B, 0x9F8F, 0x6CA1, 0x9676, + 0x6CA2, 0x91F2, 0x6CAB, 0x9697, 0x6CAE, 0x9F9C, 0x6CB1, 0x9F9D, 0x6CB3, 0x89CD, 0x6CB8, 0x95A6, 0x6CB9, 0x96FB, 0x6CBA, 0x9F9F, + 0x6CBB, 0x8EA1, 0x6CBC, 0x8FC0, 0x6CBD, 0x9F98, 0x6CBE, 0x9F9E, 0x6CBF, 0x8988, 0x6CC1, 0x8BB5, 0x6CC4, 0x9F95, 0x6CC5, 0x9F9A, + 0x6CC9, 0x90F2, 0x6CCA, 0x9491, 0x6CCC, 0x94E5, 0x6CD3, 0x9F97, 0x6CD5, 0x9640, 0x6CD7, 0x9F99, 0x6CD9, 0x9FA2, 0x6CDA, 0xFAF9, + 0x6CDB, 0x9FA0, 0x6CDD, 0x9F9B, 0x6CE1, 0x9641, 0x6CE2, 0x9467, 0x6CE3, 0x8B83, 0x6CE5, 0x9344, 0x6CE8, 0x928D, 0x6CEA, 0x9FA3, + 0x6CEF, 0x9FA1, 0x6CF0, 0x91D7, 0x6CF1, 0x9F96, 0x6CF3, 0x896A, 0x6D04, 0xFAFA, 0x6D0B, 0x976D, 0x6D0C, 0x9FAE, 0x6D12, 0x9FAD, + 0x6D17, 0x90F4, 0x6D19, 0x9FAA, 0x6D1B, 0x978C, 0x6D1E, 0x93B4, 0x6D1F, 0x9FA4, 0x6D25, 0x92C3, 0x6D29, 0x896B, 0x6D2A, 0x8D5E, + 0x6D2B, 0x9FA7, 0x6D32, 0x8F46, 0x6D33, 0x9FAC, 0x6D35, 0x9FAB, 0x6D36, 0x9FA6, 0x6D38, 0x9FA9, 0x6D3B, 0x8A88, 0x6D3D, 0x9FA8, + 0x6D3E, 0x9468, 0x6D41, 0x97AC, 0x6D44, 0x8FF2, 0x6D45, 0x90F3, 0x6D59, 0x9FB4, 0x6D5A, 0x9FB2, 0x6D5C, 0x956C, 0x6D63, 0x9FAF, + 0x6D64, 0x9FB1, 0x6D66, 0x8959, 0x6D69, 0x8D5F, 0x6D6A, 0x9851, 0x6D6C, 0x8A5C, 0x6D6E, 0x9582, 0x6D6F, 0xFAFC, 0x6D74, 0x9781, + 0x6D77, 0x8A43, 0x6D78, 0x905A, 0x6D79, 0x9FB3, 0x6D85, 0x9FB8, 0x6D87, 0xFAFB, 0x6D88, 0x8FC1, 0x6D8C, 0x974F, 0x6D8E, 0x9FB5, + 0x6D93, 0x9FB0, 0x6D95, 0x9FB6, 0x6D96, 0xFB40, 0x6D99, 0x97DC, 0x6D9B, 0x9393, 0x6D9C, 0x93C0, 0x6DAC, 0xFB41, 0x6DAF, 0x8A55, + 0x6DB2, 0x8974, 0x6DB5, 0x9FBC, 0x6DB8, 0x9FBF, 0x6DBC, 0x97C1, 0x6DC0, 0x9784, 0x6DC5, 0x9FC6, 0x6DC6, 0x9FC0, 0x6DC7, 0x9FBD, + 0x6DCB, 0x97D2, 0x6DCC, 0x9FC3, 0x6DCF, 0xFB42, 0x6DD1, 0x8F69, 0x6DD2, 0x9FC5, 0x6DD5, 0x9FCA, 0x6DD8, 0x9391, 0x6DD9, 0x9FC8, + 0x6DDE, 0x9FC2, 0x6DE1, 0x9257, 0x6DE4, 0x9FC9, 0x6DE6, 0x9FBE, 0x6DE8, 0x9FC4, 0x6DEA, 0x9FCB, 0x6DEB, 0x88FA, 0x6DEC, 0x9FC1, + 0x6DEE, 0x9FCC, 0x6DF1, 0x905B, 0x6DF2, 0xFB44, 0x6DF3, 0x8F7E, 0x6DF5, 0x95A3, 0x6DF7, 0x8DAC, 0x6DF8, 0xFB43, 0x6DF9, 0x9FB9, + 0x6DFA, 0x9FC7, 0x6DFB, 0x9359, 0x6DFC, 0xFB45, 0x6E05, 0x90B4, 0x6E07, 0x8A89, 0x6E08, 0x8DCF, 0x6E09, 0x8FC2, 0x6E0A, 0x9FBB, + 0x6E0B, 0x8F61, 0x6E13, 0x8C6B, 0x6E15, 0x9FBA, 0x6E19, 0x9FD0, 0x6E1A, 0x8F8D, 0x6E1B, 0x8CB8, 0x6E1D, 0x9FDF, 0x6E1F, 0x9FD9, + 0x6E20, 0x8B94, 0x6E21, 0x936E, 0x6E23, 0x9FD4, 0x6E24, 0x9FDD, 0x6E25, 0x88AD, 0x6E26, 0x8951, 0x6E27, 0xFB48, 0x6E29, 0x89B7, + 0x6E2B, 0x9FD6, 0x6E2C, 0x91AA, 0x6E2D, 0x9FCD, 0x6E2E, 0x9FCF, 0x6E2F, 0x8D60, 0x6E38, 0x9FE0, 0x6E39, 0xFB46, 0x6E3A, 0x9FDB, + 0x6E3C, 0xFB49, 0x6E3E, 0x9FD3, 0x6E43, 0x9FDA, 0x6E4A, 0x96A9, 0x6E4D, 0x9FD8, 0x6E4E, 0x9FDC, 0x6E56, 0x8CCE, 0x6E58, 0x8FC3, + 0x6E5B, 0x9258, 0x6E5C, 0xFB47, 0x6E5F, 0x9FD2, 0x6E67, 0x974E, 0x6E6B, 0x9FD5, 0x6E6E, 0x9FCE, 0x6E6F, 0x9392, 0x6E72, 0x9FD1, + 0x6E76, 0x9FD7, 0x6E7E, 0x9870, 0x6E7F, 0x8EBC, 0x6E80, 0x969E, 0x6E82, 0x9FE1, 0x6E8C, 0x94AC, 0x6E8F, 0x9FED, 0x6E90, 0x8CB9, + 0x6E96, 0x8F80, 0x6E98, 0x9FE3, 0x6E9C, 0x97AD, 0x6E9D, 0x8D61, 0x6E9F, 0x9FF0, 0x6EA2, 0x88EC, 0x6EA5, 0x9FEE, 0x6EAA, 0x9FE2, + 0x6EAF, 0x9FE8, 0x6EB2, 0x9FEA, 0x6EB6, 0x976E, 0x6EB7, 0x9FE5, 0x6EBA, 0x934D, 0x6EBD, 0x9FE7, 0x6EBF, 0xFB4A, 0x6EC2, 0x9FEF, + 0x6EC4, 0x9FE9, 0x6EC5, 0x96C5, 0x6EC9, 0x9FE4, 0x6ECB, 0x8EA0, 0x6ECC, 0x9FFC, 0x6ED1, 0x8A8A, 0x6ED3, 0x9FE6, 0x6ED4, 0x9FEB, + 0x6ED5, 0x9FEC, 0x6EDD, 0x91EA, 0x6EDE, 0x91D8, 0x6EEC, 0x9FF4, 0x6EEF, 0x9FFA, 0x6EF2, 0x9FF8, 0x6EF4, 0x9348, 0x6EF7, 0xE042, + 0x6EF8, 0x9FF5, 0x6EFE, 0x9FF6, 0x6EFF, 0x9FDE, 0x6F01, 0x8B99, 0x6F02, 0x9559, 0x6F06, 0x8EBD, 0x6F09, 0x8D97, 0x6F0F, 0x9852, + 0x6F11, 0x9FF2, 0x6F13, 0xE041, 0x6F14, 0x8989, 0x6F15, 0x9186, 0x6F20, 0x9499, 0x6F22, 0x8ABF, 0x6F23, 0x97F8, 0x6F2B, 0x969F, + 0x6F2C, 0x92D0, 0x6F31, 0x9FF9, 0x6F32, 0x9FFB, 0x6F38, 0x9151, 0x6F3E, 0xE040, 0x6F3F, 0x9FF7, 0x6F41, 0x9FF1, 0x6F45, 0x8AC1, + 0x6F54, 0x8C89, 0x6F58, 0xE04E, 0x6F5B, 0xE049, 0x6F5C, 0x90F6, 0x6F5F, 0x8A83, 0x6F64, 0x8F81, 0x6F66, 0xE052, 0x6F6D, 0xE04B, + 0x6F6E, 0x92AA, 0x6F6F, 0xE048, 0x6F70, 0x92D7, 0x6F74, 0xE06B, 0x6F78, 0xE045, 0x6F7A, 0xE044, 0x6F7C, 0xE04D, 0x6F80, 0xE047, + 0x6F81, 0xE046, 0x6F82, 0xE04C, 0x6F84, 0x909F, 0x6F86, 0xE043, 0x6F88, 0xFB4B, 0x6F8E, 0xE04F, 0x6F91, 0xE050, 0x6F97, 0x8AC0, + 0x6FA1, 0xE055, 0x6FA3, 0xE054, 0x6FA4, 0xE056, 0x6FAA, 0xE059, 0x6FB1, 0x9362, 0x6FB3, 0xE053, 0x6FB5, 0xFB4C, 0x6FB9, 0xE057, + 0x6FC0, 0x8C83, 0x6FC1, 0x91F7, 0x6FC2, 0xE051, 0x6FC3, 0x945A, 0x6FC6, 0xE058, 0x6FD4, 0xE05D, 0x6FD5, 0xE05B, 0x6FD8, 0xE05E, + 0x6FDB, 0xE061, 0x6FDF, 0xE05A, 0x6FE0, 0x8D8A, 0x6FE1, 0x9447, 0x6FE4, 0x9FB7, 0x6FEB, 0x9794, 0x6FEC, 0xE05C, 0x6FEE, 0xE060, + 0x6FEF, 0x91F3, 0x6FF1, 0xE05F, 0x6FF3, 0xE04A, 0x6FF5, 0xFB4D, 0x6FF6, 0xE889, 0x6FFA, 0xE064, 0x6FFE, 0xE068, 0x7001, 0xE066, + 0x7005, 0xFB4E, 0x7007, 0xFB4F, 0x7009, 0xE062, 0x700B, 0xE063, 0x700F, 0xE067, 0x7011, 0xE065, 0x7015, 0x956D, 0x7018, 0xE06D, + 0x701A, 0xE06A, 0x701B, 0xE069, 0x701D, 0xE06C, 0x701E, 0x93D2, 0x701F, 0xE06E, 0x7026, 0x9295, 0x7027, 0x91EB, 0x7028, 0xFB50, + 0x702C, 0x90A3, 0x7030, 0xE06F, 0x7032, 0xE071, 0x703E, 0xE070, 0x704C, 0x9FF3, 0x7051, 0xE072, 0x7058, 0x93E5, 0x7063, 0xE073, + 0x706B, 0x89CE, 0x706F, 0x9394, 0x7070, 0x8A44, 0x7078, 0x8B84, 0x707C, 0x8EDC, 0x707D, 0x8DD0, 0x7085, 0xFB51, 0x7089, 0x9846, + 0x708A, 0x9086, 0x708E, 0x898A, 0x7092, 0xE075, 0x7099, 0xE074, 0x70AB, 0xFB52, 0x70AC, 0xE078, 0x70AD, 0x9259, 0x70AE, 0xE07B, + 0x70AF, 0xE076, 0x70B3, 0xE07A, 0x70B8, 0xE079, 0x70B9, 0x935F, 0x70BA, 0x88D7, 0x70BB, 0xFA62, 0x70C8, 0x97F3, 0x70CB, 0xE07D, + 0x70CF, 0x8947, 0x70D9, 0xE080, 0x70DD, 0xE07E, 0x70DF, 0xE07C, 0x70F1, 0xE077, 0x70F9, 0x9642, 0x70FD, 0xE082, 0x7104, 0xFB54, + 0x7109, 0xE081, 0x710F, 0xFB53, 0x7114, 0x898B, 0x7119, 0xE084, 0x711A, 0x95B0, 0x711C, 0xE083, 0x7121, 0x96B3, 0x7126, 0x8FC5, + 0x7136, 0x9152, 0x713C, 0x8FC4, 0x7146, 0xFB56, 0x7147, 0xFB57, 0x7149, 0x97F9, 0x714C, 0xE08A, 0x714E, 0x90F7, 0x7155, 0xE086, + 0x7156, 0xE08B, 0x7159, 0x898C, 0x715C, 0xFB55, 0x7162, 0xE089, 0x7164, 0x9481, 0x7165, 0xE085, 0x7166, 0xE088, 0x7167, 0x8FC6, + 0x7169, 0x94CF, 0x716C, 0xE08C, 0x716E, 0x8ECF, 0x717D, 0x90F8, 0x7184, 0xE08F, 0x7188, 0xE087, 0x718A, 0x8C46, 0x718F, 0xE08D, + 0x7194, 0x976F, 0x7195, 0xE090, 0x7199, 0xEAA4, 0x719F, 0x8F6E, 0x71A8, 0xE091, 0x71AC, 0xE092, 0x71B1, 0x944D, 0x71B9, 0xE094, + 0x71BE, 0xE095, 0x71C1, 0xFB59, 0x71C3, 0x9452, 0x71C8, 0x9395, 0x71C9, 0xE097, 0x71CE, 0xE099, 0x71D0, 0x97D3, 0x71D2, 0xE096, + 0x71D4, 0xE098, 0x71D5, 0x898D, 0x71D7, 0xE093, 0x71DF, 0x9A7A, 0x71E0, 0xE09A, 0x71E5, 0x9187, 0x71E6, 0x8E57, 0x71E7, 0xE09C, + 0x71EC, 0xE09B, 0x71ED, 0x9043, 0x71EE, 0x99D7, 0x71F5, 0xE09D, 0x71F9, 0xE09F, 0x71FB, 0xE08E, 0x71FC, 0xE09E, 0x71FE, 0xFB5A, + 0x71FF, 0xE0A0, 0x7206, 0x949A, 0x720D, 0xE0A1, 0x7210, 0xE0A2, 0x721B, 0xE0A3, 0x7228, 0xE0A4, 0x722A, 0x92DC, 0x722C, 0xE0A6, + 0x722D, 0xE0A5, 0x7230, 0xE0A7, 0x7232, 0xE0A8, 0x7235, 0x8EDD, 0x7236, 0x9583, 0x723A, 0x96EA, 0x723B, 0xE0A9, 0x723C, 0xE0AA, + 0x723D, 0x9175, 0x723E, 0x8EA2, 0x723F, 0xE0AB, 0x7240, 0xE0AC, 0x7246, 0xE0AD, 0x7247, 0x95D0, 0x7248, 0x94C5, 0x724B, 0xE0AE, + 0x724C, 0x9476, 0x7252, 0x92AB, 0x7258, 0xE0AF, 0x7259, 0x89E5, 0x725B, 0x8B8D, 0x725D, 0x96C4, 0x725F, 0x96B4, 0x7261, 0x89B2, + 0x7262, 0x9853, 0x7267, 0x9671, 0x7269, 0x95A8, 0x7272, 0x90B5, 0x7274, 0xE0B0, 0x7279, 0x93C1, 0x727D, 0x8CA1, 0x727E, 0xE0B1, + 0x7280, 0x8DD2, 0x7281, 0xE0B3, 0x7282, 0xE0B2, 0x7287, 0xE0B4, 0x7292, 0xE0B5, 0x7296, 0xE0B6, 0x72A0, 0x8B5D, 0x72A2, 0xE0B7, + 0x72A7, 0xE0B8, 0x72AC, 0x8CA2, 0x72AF, 0x94C6, 0x72B1, 0xFB5B, 0x72B2, 0xE0BA, 0x72B6, 0x8FF3, 0x72B9, 0xE0B9, 0x72BE, 0xFB5C, + 0x72C2, 0x8BB6, 0x72C3, 0xE0BB, 0x72C4, 0xE0BD, 0x72C6, 0xE0BC, 0x72CE, 0xE0BE, 0x72D0, 0x8CCF, 0x72D2, 0xE0BF, 0x72D7, 0x8BE7, + 0x72D9, 0x915F, 0x72DB, 0x8D9D, 0x72E0, 0xE0C1, 0x72E1, 0xE0C2, 0x72E2, 0xE0C0, 0x72E9, 0x8EEB, 0x72EC, 0x93C6, 0x72ED, 0x8BB7, + 0x72F7, 0xE0C4, 0x72F8, 0x924B, 0x72F9, 0xE0C3, 0x72FC, 0x9854, 0x72FD, 0x9482, 0x730A, 0xE0C7, 0x7316, 0xE0C9, 0x7317, 0xE0C6, + 0x731B, 0x96D2, 0x731C, 0xE0C8, 0x731D, 0xE0CA, 0x731F, 0x97C2, 0x7324, 0xFB5D, 0x7325, 0xE0CE, 0x7329, 0xE0CD, 0x732A, 0x9296, + 0x732B, 0x944C, 0x732E, 0x8CA3, 0x732F, 0xE0CC, 0x7334, 0xE0CB, 0x7336, 0x9750, 0x7337, 0x9751, 0x733E, 0xE0CF, 0x733F, 0x898E, + 0x7344, 0x8D96, 0x7345, 0x8E82, 0x734E, 0xE0D0, 0x734F, 0xE0D1, 0x7357, 0xE0D3, 0x7363, 0x8F62, 0x7368, 0xE0D5, 0x736A, 0xE0D4, + 0x7370, 0xE0D6, 0x7372, 0x8A6C, 0x7375, 0xE0D8, 0x7377, 0xFB5F, 0x7378, 0xE0D7, 0x737A, 0xE0DA, 0x737B, 0xE0D9, 0x7384, 0x8CBA, + 0x7387, 0x97A6, 0x7389, 0x8BCA, 0x738B, 0x89A4, 0x7396, 0x8BE8, 0x73A9, 0x8ADF, 0x73B2, 0x97E6, 0x73B3, 0xE0DC, 0x73BB, 0xE0DE, + 0x73BD, 0xFB60, 0x73C0, 0xE0DF, 0x73C2, 0x89CF, 0x73C8, 0xE0DB, 0x73C9, 0xFB61, 0x73CA, 0x8E58, 0x73CD, 0x92BF, 0x73CE, 0xE0DD, + 0x73D2, 0xFB64, 0x73D6, 0xFB62, 0x73DE, 0xE0E2, 0x73E0, 0x8EEC, 0x73E3, 0xFB63, 0x73E5, 0xE0E0, 0x73EA, 0x8C5D, 0x73ED, 0x94C7, + 0x73EE, 0xE0E1, 0x73F1, 0xE0FC, 0x73F5, 0xFB66, 0x73F8, 0xE0E7, 0x73FE, 0x8CBB, 0x7403, 0x8B85, 0x7405, 0xE0E4, 0x7406, 0x979D, + 0x7407, 0xFB65, 0x7409, 0x97AE, 0x7422, 0x91F4, 0x7425, 0xE0E6, 0x7426, 0xFB67, 0x7429, 0xFB69, 0x742A, 0xFB68, 0x742E, 0xFB6A, + 0x7432, 0xE0E8, 0x7433, 0x97D4, 0x7434, 0x8BD5, 0x7435, 0x94FA, 0x7436, 0x9469, 0x743A, 0xE0E9, 0x743F, 0xE0EB, 0x7441, 0xE0EE, + 0x7455, 0xE0EA, 0x7459, 0xE0ED, 0x745A, 0x8CE8, 0x745B, 0x896C, 0x745C, 0xE0EF, 0x745E, 0x9090, 0x745F, 0xE0EC, 0x7460, 0x97DA, + 0x7462, 0xFB6B, 0x7463, 0xE0F2, 0x7464, 0xEAA2, 0x7469, 0xE0F0, 0x746A, 0xE0F3, 0x746F, 0xE0E5, 0x7470, 0xE0F1, 0x7473, 0x8DBA, + 0x7476, 0xE0F4, 0x747E, 0xE0F5, 0x7483, 0x979E, 0x7489, 0xFB6C, 0x748B, 0xE0F6, 0x749E, 0xE0F7, 0x749F, 0xFB6D, 0x74A2, 0xE0E3, + 0x74A7, 0xE0F8, 0x74B0, 0x8AC2, 0x74BD, 0x8EA3, 0x74CA, 0xE0F9, 0x74CF, 0xE0FA, 0x74D4, 0xE0FB, 0x74DC, 0x895A, 0x74E0, 0xE140, + 0x74E2, 0x955A, 0x74E3, 0xE141, 0x74E6, 0x8AA2, 0x74E7, 0xE142, 0x74E9, 0xE143, 0x74EE, 0xE144, 0x74F0, 0xE146, 0x74F1, 0xE147, + 0x74F2, 0xE145, 0x74F6, 0x9572, 0x74F7, 0xE149, 0x74F8, 0xE148, 0x7501, 0xFB6E, 0x7503, 0xE14B, 0x7504, 0xE14A, 0x7505, 0xE14C, + 0x750C, 0xE14D, 0x750D, 0xE14F, 0x750E, 0xE14E, 0x7511, 0x8D99, 0x7513, 0xE151, 0x7515, 0xE150, 0x7518, 0x8AC3, 0x751A, 0x9072, + 0x751C, 0x935B, 0x751E, 0xE152, 0x751F, 0x90B6, 0x7523, 0x8E59, 0x7525, 0x8999, 0x7526, 0xE153, 0x7528, 0x9770, 0x752B, 0x95E1, + 0x752C, 0xE154, 0x752F, 0xFAA8, 0x7530, 0x9363, 0x7531, 0x9752, 0x7532, 0x8D62, 0x7533, 0x905C, 0x7537, 0x926A, 0x7538, 0x99B2, + 0x753A, 0x92AC, 0x753B, 0x89E6, 0x753C, 0xE155, 0x7544, 0xE156, 0x7546, 0xE15B, 0x7549, 0xE159, 0x754A, 0xE158, 0x754B, 0x9DC0, + 0x754C, 0x8A45, 0x754D, 0xE157, 0x754F, 0x88D8, 0x7551, 0x94A8, 0x7554, 0x94C8, 0x7559, 0x97AF, 0x755A, 0xE15C, 0x755B, 0xE15A, + 0x755C, 0x927B, 0x755D, 0x90A4, 0x7560, 0x94A9, 0x7562, 0x954C, 0x7564, 0xE15E, 0x7565, 0x97AA, 0x7566, 0x8C6C, 0x7567, 0xE15F, + 0x7569, 0xE15D, 0x756A, 0x94D4, 0x756B, 0xE160, 0x756D, 0xE161, 0x756F, 0xFB6F, 0x7570, 0x88D9, 0x7573, 0x8FF4, 0x7574, 0xE166, + 0x7576, 0xE163, 0x7577, 0x93EB, 0x7578, 0xE162, 0x757F, 0x8B45, 0x7582, 0xE169, 0x7586, 0xE164, 0x7587, 0xE165, 0x7589, 0xE168, + 0x758A, 0xE167, 0x758B, 0x9544, 0x758E, 0x9161, 0x758F, 0x9160, 0x7591, 0x8B5E, 0x7594, 0xE16A, 0x759A, 0xE16B, 0x759D, 0xE16C, + 0x75A3, 0xE16E, 0x75A5, 0xE16D, 0x75AB, 0x8975, 0x75B1, 0xE176, 0x75B2, 0x94E6, 0x75B3, 0xE170, 0x75B5, 0xE172, 0x75B8, 0xE174, + 0x75B9, 0x905D, 0x75BC, 0xE175, 0x75BD, 0xE173, 0x75BE, 0x8EBE, 0x75C2, 0xE16F, 0x75C3, 0xE171, 0x75C5, 0x9561, 0x75C7, 0x8FC7, + 0x75CA, 0xE178, 0x75CD, 0xE177, 0x75D2, 0xE179, 0x75D4, 0x8EA4, 0x75D5, 0x8DAD, 0x75D8, 0x9397, 0x75D9, 0xE17A, 0x75DB, 0x92C9, + 0x75DE, 0xE17C, 0x75E2, 0x979F, 0x75E3, 0xE17B, 0x75E9, 0x9189, 0x75F0, 0xE182, 0x75F2, 0xE184, 0x75F3, 0xE185, 0x75F4, 0x9273, + 0x75FA, 0xE183, 0x75FC, 0xE180, 0x75FE, 0xE17D, 0x75FF, 0xE17E, 0x7601, 0xE181, 0x7609, 0xE188, 0x760B, 0xE186, 0x760D, 0xE187, + 0x761F, 0xE189, 0x7620, 0xE18B, 0x7621, 0xE18C, 0x7622, 0xE18D, 0x7624, 0xE18E, 0x7627, 0xE18A, 0x7630, 0xE190, 0x7634, 0xE18F, + 0x763B, 0xE191, 0x7642, 0x97C3, 0x7646, 0xE194, 0x7647, 0xE192, 0x7648, 0xE193, 0x764C, 0x8AE0, 0x7652, 0x96FC, 0x7656, 0x95C8, + 0x7658, 0xE196, 0x765C, 0xE195, 0x7661, 0xE197, 0x7662, 0xE198, 0x7667, 0xE19C, 0x7668, 0xE199, 0x7669, 0xE19A, 0x766A, 0xE19B, + 0x766C, 0xE19D, 0x7670, 0xE19E, 0x7672, 0xE19F, 0x7676, 0xE1A0, 0x7678, 0xE1A1, 0x767A, 0x94AD, 0x767B, 0x936F, 0x767C, 0xE1A2, + 0x767D, 0x9492, 0x767E, 0x9553, 0x7680, 0xE1A3, 0x7682, 0xFB70, 0x7683, 0xE1A4, 0x7684, 0x9349, 0x7686, 0x8A46, 0x7687, 0x8D63, + 0x7688, 0xE1A5, 0x768B, 0xE1A6, 0x768E, 0xE1A7, 0x7690, 0x8E48, 0x7693, 0xE1A9, 0x7696, 0xE1A8, 0x7699, 0xE1AA, 0x769A, 0xE1AB, + 0x769B, 0xFB73, 0x769C, 0xFB71, 0x769E, 0xFB72, 0x76A6, 0xFB74, 0x76AE, 0x94E7, 0x76B0, 0xE1AC, 0x76B4, 0xE1AD, 0x76B7, 0xEA89, + 0x76B8, 0xE1AE, 0x76B9, 0xE1AF, 0x76BA, 0xE1B0, 0x76BF, 0x8E4D, 0x76C2, 0xE1B1, 0x76C3, 0x9475, 0x76C6, 0x967E, 0x76C8, 0x896D, + 0x76CA, 0x8976, 0x76CD, 0xE1B2, 0x76D2, 0xE1B4, 0x76D6, 0xE1B3, 0x76D7, 0x9390, 0x76DB, 0x90B7, 0x76DC, 0x9F58, 0x76DE, 0xE1B5, + 0x76DF, 0x96BF, 0x76E1, 0xE1B6, 0x76E3, 0x8AC4, 0x76E4, 0x94D5, 0x76E5, 0xE1B7, 0x76E7, 0xE1B8, 0x76EA, 0xE1B9, 0x76EE, 0x96DA, + 0x76F2, 0x96D3, 0x76F4, 0x92BC, 0x76F8, 0x918A, 0x76FB, 0xE1BB, 0x76FE, 0x8F82, 0x7701, 0x8FC8, 0x7704, 0xE1BE, 0x7707, 0xE1BD, + 0x7708, 0xE1BC, 0x7709, 0x94FB, 0x770B, 0x8AC5, 0x770C, 0x8CA7, 0x771B, 0xE1C4, 0x771E, 0xE1C1, 0x771F, 0x905E, 0x7720, 0x96B0, + 0x7724, 0xE1C0, 0x7725, 0xE1C2, 0x7726, 0xE1C3, 0x7729, 0xE1BF, 0x7737, 0xE1C5, 0x7738, 0xE1C6, 0x773A, 0x92AD, 0x773C, 0x8AE1, + 0x7740, 0x9285, 0x7746, 0xFB76, 0x7747, 0xE1C7, 0x775A, 0xE1C8, 0x775B, 0xE1CB, 0x7761, 0x9087, 0x7763, 0x93C2, 0x7765, 0xE1CC, + 0x7766, 0x9672, 0x7768, 0xE1C9, 0x776B, 0xE1CA, 0x7779, 0xE1CF, 0x777E, 0xE1CE, 0x777F, 0xE1CD, 0x778B, 0xE1D1, 0x778E, 0xE1D0, + 0x7791, 0xE1D2, 0x779E, 0xE1D4, 0x77A0, 0xE1D3, 0x77A5, 0x95CB, 0x77AC, 0x8F75, 0x77AD, 0x97C4, 0x77B0, 0xE1D5, 0x77B3, 0x93B5, + 0x77B6, 0xE1D6, 0x77B9, 0xE1D7, 0x77BB, 0xE1DB, 0x77BC, 0xE1D9, 0x77BD, 0xE1DA, 0x77BF, 0xE1D8, 0x77C7, 0xE1DC, 0x77CD, 0xE1DD, + 0x77D7, 0xE1DE, 0x77DA, 0xE1DF, 0x77DB, 0x96B5, 0x77DC, 0xE1E0, 0x77E2, 0x96EE, 0x77E3, 0xE1E1, 0x77E5, 0x926D, 0x77E7, 0x948A, + 0x77E9, 0x8BE9, 0x77ED, 0x925A, 0x77EE, 0xE1E2, 0x77EF, 0x8BB8, 0x77F3, 0x90CE, 0x77FC, 0xE1E3, 0x7802, 0x8DBB, 0x780C, 0xE1E4, + 0x7812, 0xE1E5, 0x7814, 0x8CA4, 0x7815, 0x8DD3, 0x7820, 0xE1E7, 0x7821, 0xFB78, 0x7825, 0x9375, 0x7826, 0x8DD4, 0x7827, 0x8B6D, + 0x7832, 0x9643, 0x7834, 0x946A, 0x783A, 0x9376, 0x783F, 0x8D7B, 0x7845, 0xE1E9, 0x784E, 0xFB79, 0x785D, 0x8FC9, 0x7864, 0xFB7A, + 0x786B, 0x97B0, 0x786C, 0x8D64, 0x786F, 0x8CA5, 0x7872, 0x94A1, 0x7874, 0xE1EB, 0x787A, 0xFB7B, 0x787C, 0xE1ED, 0x7881, 0x8CE9, + 0x7886, 0xE1EC, 0x7887, 0x92F4, 0x788C, 0xE1EF, 0x788D, 0x8A56, 0x788E, 0xE1EA, 0x7891, 0x94E8, 0x7893, 0x894F, 0x7895, 0x8DEA, + 0x7897, 0x9871, 0x789A, 0xE1EE, 0x78A3, 0xE1F0, 0x78A7, 0x95C9, 0x78A9, 0x90D7, 0x78AA, 0xE1F2, 0x78AF, 0xE1F3, 0x78B5, 0xE1F1, + 0x78BA, 0x8A6D, 0x78BC, 0xE1F9, 0x78BE, 0xE1F8, 0x78C1, 0x8EA5, 0x78C5, 0xE1FA, 0x78C6, 0xE1F5, 0x78CA, 0xE1FB, 0x78CB, 0xE1F6, + 0x78D0, 0x94D6, 0x78D1, 0xE1F4, 0x78D4, 0xE1F7, 0x78DA, 0xE241, 0x78E7, 0xE240, 0x78E8, 0x9681, 0x78EC, 0xE1FC, 0x78EF, 0x88E9, + 0x78F4, 0xE243, 0x78FD, 0xE242, 0x7901, 0x8FCA, 0x7907, 0xE244, 0x790E, 0x9162, 0x7911, 0xE246, 0x7912, 0xE245, 0x7919, 0xE247, + 0x7926, 0xE1E6, 0x792A, 0xE1E8, 0x792B, 0xE249, 0x792C, 0xE248, 0x7930, 0xFB7C, 0x793A, 0x8EA6, 0x793C, 0x97E7, 0x793E, 0x8ED0, + 0x7940, 0xE24A, 0x7941, 0x8C56, 0x7947, 0x8B5F, 0x7948, 0x8B46, 0x7949, 0x8E83, 0x7950, 0x9753, 0x7953, 0xE250, 0x7955, 0xE24F, + 0x7956, 0x9163, 0x7957, 0xE24C, 0x795A, 0xE24E, 0x795D, 0x8F6A, 0x795E, 0x905F, 0x795F, 0xE24D, 0x7960, 0xE24B, 0x7962, 0x9449, + 0x7965, 0x8FCB, 0x7968, 0x955B, 0x796D, 0x8DD5, 0x7977, 0x9398, 0x797A, 0xE251, 0x797F, 0xE252, 0x7980, 0xE268, 0x7981, 0x8BD6, + 0x7984, 0x985C, 0x7985, 0x9154, 0x798A, 0xE253, 0x798D, 0x89D0, 0x798E, 0x92F5, 0x798F, 0x959F, 0x7994, 0xFB81, 0x799B, 0xFB83, + 0x799D, 0xE254, 0x79A6, 0x8B9A, 0x79A7, 0xE255, 0x79AA, 0xE257, 0x79AE, 0xE258, 0x79B0, 0x9448, 0x79B3, 0xE259, 0x79B9, 0xE25A, + 0x79BA, 0xE25B, 0x79BD, 0x8BD7, 0x79BE, 0x89D1, 0x79BF, 0x93C3, 0x79C0, 0x8F47, 0x79C1, 0x8E84, 0x79C9, 0xE25C, 0x79CB, 0x8F48, + 0x79D1, 0x89C8, 0x79D2, 0x9562, 0x79D5, 0xE25D, 0x79D8, 0x94E9, 0x79DF, 0x9164, 0x79E1, 0xE260, 0x79E3, 0xE261, 0x79E4, 0x9489, + 0x79E6, 0x9060, 0x79E7, 0xE25E, 0x79E9, 0x9281, 0x79EC, 0xE25F, 0x79F0, 0x8FCC, 0x79FB, 0x88DA, 0x7A00, 0x8B48, 0x7A08, 0xE262, + 0x7A0B, 0x92F6, 0x7A0D, 0xE263, 0x7A0E, 0x90C5, 0x7A14, 0x96AB, 0x7A17, 0x9542, 0x7A18, 0xE264, 0x7A19, 0xE265, 0x7A1A, 0x9274, + 0x7A1C, 0x97C5, 0x7A1F, 0xE267, 0x7A20, 0xE266, 0x7A2E, 0x8EED, 0x7A31, 0xE269, 0x7A32, 0x88EE, 0x7A37, 0xE26C, 0x7A3B, 0xE26A, + 0x7A3C, 0x89D2, 0x7A3D, 0x8C6D, 0x7A3E, 0xE26B, 0x7A3F, 0x8D65, 0x7A40, 0x8D92, 0x7A42, 0x95E4, 0x7A43, 0xE26D, 0x7A46, 0x9673, + 0x7A49, 0xE26F, 0x7A4D, 0x90CF, 0x7A4E, 0x896E, 0x7A4F, 0x89B8, 0x7A50, 0x88AA, 0x7A57, 0xE26E, 0x7A61, 0xE270, 0x7A62, 0xE271, + 0x7A63, 0x8FF5, 0x7A69, 0xE272, 0x7A6B, 0x8A6E, 0x7A70, 0xE274, 0x7A74, 0x8C8A, 0x7A76, 0x8B86, 0x7A79, 0xE275, 0x7A7A, 0x8BF3, + 0x7A7D, 0xE276, 0x7A7F, 0x90FA, 0x7A81, 0x93CB, 0x7A83, 0x90DE, 0x7A84, 0x8DF3, 0x7A88, 0xE277, 0x7A92, 0x9282, 0x7A93, 0x918B, + 0x7A95, 0xE279, 0x7A96, 0xE27B, 0x7A97, 0xE278, 0x7A98, 0xE27A, 0x7A9F, 0x8C41, 0x7AA9, 0xE27C, 0x7AAA, 0x8C45, 0x7AAE, 0x8B87, + 0x7AAF, 0x9771, 0x7AB0, 0xE27E, 0x7AB6, 0xE280, 0x7ABA, 0x894D, 0x7ABF, 0xE283, 0x7AC3, 0x8A96, 0x7AC4, 0xE282, 0x7AC5, 0xE281, + 0x7AC7, 0xE285, 0x7AC8, 0xE27D, 0x7ACA, 0xE286, 0x7ACB, 0x97A7, 0x7ACD, 0xE287, 0x7ACF, 0xE288, 0x7AD1, 0xFB84, 0x7AD2, 0x9AF2, + 0x7AD3, 0xE28A, 0x7AD5, 0xE289, 0x7AD9, 0xE28B, 0x7ADA, 0xE28C, 0x7ADC, 0x97B3, 0x7ADD, 0xE28D, 0x7ADF, 0xE8ED, 0x7AE0, 0x8FCD, + 0x7AE1, 0xE28E, 0x7AE2, 0xE28F, 0x7AE3, 0x8F76, 0x7AE5, 0x93B6, 0x7AE6, 0xE290, 0x7AE7, 0xFB85, 0x7AEA, 0x9247, 0x7AEB, 0xFB87, + 0x7AED, 0xE291, 0x7AEF, 0x925B, 0x7AF0, 0xE292, 0x7AF6, 0x8BA3, 0x7AF8, 0x995E, 0x7AF9, 0x927C, 0x7AFA, 0x8EB1, 0x7AFF, 0x8AC6, + 0x7B02, 0xE293, 0x7B04, 0xE2A0, 0x7B06, 0xE296, 0x7B08, 0x8B88, 0x7B0A, 0xE295, 0x7B0B, 0xE2A2, 0x7B0F, 0xE294, 0x7B11, 0x8FCE, + 0x7B18, 0xE298, 0x7B19, 0xE299, 0x7B1B, 0x934A, 0x7B1E, 0xE29A, 0x7B20, 0x8A7D, 0x7B25, 0x9079, 0x7B26, 0x9584, 0x7B28, 0xE29C, + 0x7B2C, 0x91E6, 0x7B33, 0xE297, 0x7B35, 0xE29B, 0x7B36, 0xE29D, 0x7B39, 0x8DF9, 0x7B45, 0xE2A4, 0x7B46, 0x954D, 0x7B48, 0x94A4, + 0x7B49, 0x9399, 0x7B4B, 0x8BD8, 0x7B4C, 0xE2A3, 0x7B4D, 0xE2A1, 0x7B4F, 0x94B3, 0x7B50, 0xE29E, 0x7B51, 0x927D, 0x7B52, 0x939B, + 0x7B54, 0x939A, 0x7B56, 0x8DF4, 0x7B5D, 0xE2B6, 0x7B65, 0xE2A6, 0x7B67, 0xE2A8, 0x7B6C, 0xE2AB, 0x7B6E, 0xE2AC, 0x7B70, 0xE2A9, + 0x7B71, 0xE2AA, 0x7B74, 0xE2A7, 0x7B75, 0xE2A5, 0x7B7A, 0xE29F, 0x7B86, 0x95CD, 0x7B87, 0x89D3, 0x7B8B, 0xE2B3, 0x7B8D, 0xE2B0, + 0x7B8F, 0xE2B5, 0x7B92, 0xE2B4, 0x7B94, 0x9493, 0x7B95, 0x96A5, 0x7B97, 0x8E5A, 0x7B98, 0xE2AE, 0x7B99, 0xE2B7, 0x7B9A, 0xE2B2, + 0x7B9C, 0xE2B1, 0x7B9D, 0xE2AD, 0x7B9E, 0xFB88, 0x7B9F, 0xE2AF, 0x7BA1, 0x8AC7, 0x7BAA, 0x925C, 0x7BAD, 0x90FB, 0x7BB1, 0x94A0, + 0x7BB4, 0xE2BC, 0x7BB8, 0x94A2, 0x7BC0, 0x90DF, 0x7BC1, 0xE2B9, 0x7BC4, 0x94CD, 0x7BC6, 0xE2BD, 0x7BC7, 0x95D1, 0x7BC9, 0x927A, + 0x7BCB, 0xE2B8, 0x7BCC, 0xE2BA, 0x7BCF, 0xE2BB, 0x7BDD, 0xE2BE, 0x7BE0, 0x8EC2, 0x7BE4, 0x93C4, 0x7BE5, 0xE2C3, 0x7BE6, 0xE2C2, + 0x7BE9, 0xE2BF, 0x7BED, 0x9855, 0x7BF3, 0xE2C8, 0x7BF6, 0xE2CC, 0x7BF7, 0xE2C9, 0x7C00, 0xE2C5, 0x7C07, 0xE2C6, 0x7C0D, 0xE2CB, + 0x7C11, 0xE2C0, 0x7C12, 0x99D3, 0x7C13, 0xE2C7, 0x7C14, 0xE2C1, 0x7C17, 0xE2CA, 0x7C1F, 0xE2D0, 0x7C21, 0x8AC8, 0x7C23, 0xE2CD, + 0x7C27, 0xE2CE, 0x7C2A, 0xE2CF, 0x7C2B, 0xE2D2, 0x7C37, 0xE2D1, 0x7C38, 0x94F4, 0x7C3D, 0xE2D3, 0x7C3E, 0x97FA, 0x7C3F, 0x95EB, + 0x7C40, 0xE2D8, 0x7C43, 0xE2D5, 0x7C4C, 0xE2D4, 0x7C4D, 0x90D0, 0x7C4F, 0xE2D7, 0x7C50, 0xE2D9, 0x7C54, 0xE2D6, 0x7C56, 0xE2DD, + 0x7C58, 0xE2DA, 0x7C5F, 0xE2DB, 0x7C60, 0xE2C4, 0x7C64, 0xE2DC, 0x7C65, 0xE2DE, 0x7C6C, 0xE2DF, 0x7C73, 0x95C4, 0x7C75, 0xE2E0, + 0x7C7E, 0x96E0, 0x7C81, 0x8BCC, 0x7C82, 0x8C48, 0x7C83, 0xE2E1, 0x7C89, 0x95B2, 0x7C8B, 0x9088, 0x7C8D, 0x96AE, 0x7C90, 0xE2E2, + 0x7C92, 0x97B1, 0x7C95, 0x9494, 0x7C97, 0x9165, 0x7C98, 0x9453, 0x7C9B, 0x8F6C, 0x7C9F, 0x88BE, 0x7CA1, 0xE2E7, 0x7CA2, 0xE2E5, + 0x7CA4, 0xE2E3, 0x7CA5, 0x8A9F, 0x7CA7, 0x8FCF, 0x7CA8, 0xE2E8, 0x7CAB, 0xE2E6, 0x7CAD, 0xE2E4, 0x7CAE, 0xE2EC, 0x7CB1, 0xE2EB, + 0x7CB2, 0xE2EA, 0x7CB3, 0xE2E9, 0x7CB9, 0xE2ED, 0x7CBD, 0xE2EE, 0x7CBE, 0x90B8, 0x7CC0, 0xE2EF, 0x7CC2, 0xE2F1, 0x7CC5, 0xE2F0, + 0x7CCA, 0x8CD0, 0x7CCE, 0x9157, 0x7CD2, 0xE2F3, 0x7CD6, 0x939C, 0x7CD8, 0xE2F2, 0x7CDC, 0xE2F4, 0x7CDE, 0x95B3, 0x7CDF, 0x918C, + 0x7CE0, 0x8D66, 0x7CE2, 0xE2F5, 0x7CE7, 0x97C6, 0x7CEF, 0xE2F7, 0x7CF2, 0xE2F8, 0x7CF4, 0xE2F9, 0x7CF6, 0xE2FA, 0x7CF8, 0x8E85, + 0x7CFA, 0xE2FB, 0x7CFB, 0x8C6E, 0x7CFE, 0x8B8A, 0x7D00, 0x8B49, 0x7D02, 0xE340, 0x7D04, 0x96F1, 0x7D05, 0x8D67, 0x7D06, 0xE2FC, + 0x7D0A, 0xE343, 0x7D0B, 0x96E4, 0x7D0D, 0x945B, 0x7D10, 0x9552, 0x7D14, 0x8F83, 0x7D15, 0xE342, 0x7D17, 0x8ED1, 0x7D18, 0x8D68, + 0x7D19, 0x8E86, 0x7D1A, 0x8B89, 0x7D1B, 0x95B4, 0x7D1C, 0xE341, 0x7D20, 0x9166, 0x7D21, 0x9661, 0x7D22, 0x8DF5, 0x7D2B, 0x8E87, + 0x7D2C, 0x92DB, 0x7D2E, 0xE346, 0x7D2F, 0x97DD, 0x7D30, 0x8DD7, 0x7D32, 0xE347, 0x7D33, 0x9061, 0x7D35, 0xE349, 0x7D39, 0x8FD0, + 0x7D3A, 0x8DAE, 0x7D3F, 0xE348, 0x7D42, 0x8F49, 0x7D43, 0x8CBC, 0x7D44, 0x9167, 0x7D45, 0xE344, 0x7D46, 0xE34A, 0x7D48, 0xFB8A, + 0x7D4B, 0xE345, 0x7D4C, 0x8C6F, 0x7D4E, 0xE34D, 0x7D4F, 0xE351, 0x7D50, 0x8C8B, 0x7D56, 0xE34C, 0x7D5B, 0xE355, 0x7D5C, 0xFB8B, + 0x7D5E, 0x8D69, 0x7D61, 0x978D, 0x7D62, 0x88BA, 0x7D63, 0xE352, 0x7D66, 0x8B8B, 0x7D68, 0xE34F, 0x7D6E, 0xE350, 0x7D71, 0x939D, + 0x7D72, 0xE34E, 0x7D73, 0xE34B, 0x7D75, 0x8A47, 0x7D76, 0x90E2, 0x7D79, 0x8CA6, 0x7D7D, 0xE357, 0x7D89, 0xE354, 0x7D8F, 0xE356, + 0x7D93, 0xE353, 0x7D99, 0x8C70, 0x7D9A, 0x91B1, 0x7D9B, 0xE358, 0x7D9C, 0x918E, 0x7D9F, 0xE365, 0x7DA0, 0xFB8D, 0x7DA2, 0xE361, + 0x7DA3, 0xE35B, 0x7DAB, 0xE35F, 0x7DAC, 0x8EF8, 0x7DAD, 0x88DB, 0x7DAE, 0xE35A, 0x7DAF, 0xE362, 0x7DB0, 0xE366, 0x7DB1, 0x8D6A, + 0x7DB2, 0x96D4, 0x7DB4, 0x92D4, 0x7DB5, 0xE35C, 0x7DB7, 0xFB8C, 0x7DB8, 0xE364, 0x7DBA, 0xE359, 0x7DBB, 0x925D, 0x7DBD, 0xE35E, + 0x7DBE, 0x88BB, 0x7DBF, 0x96C8, 0x7DC7, 0xE35D, 0x7DCA, 0x8BD9, 0x7DCB, 0x94EA, 0x7DCF, 0x918D, 0x7DD1, 0x97CE, 0x7DD2, 0x8F8F, + 0x7DD5, 0xE38E, 0x7DD6, 0xFB8E, 0x7DD8, 0xE367, 0x7DDA, 0x90FC, 0x7DDC, 0xE363, 0x7DDD, 0xE368, 0x7DDE, 0xE36A, 0x7DE0, 0x92F7, + 0x7DE1, 0xE36D, 0x7DE4, 0xE369, 0x7DE8, 0x95D2, 0x7DE9, 0x8AC9, 0x7DEC, 0x96C9, 0x7DEF, 0x88DC, 0x7DF2, 0xE36C, 0x7DF4, 0x97FB, + 0x7DFB, 0xE36B, 0x7E01, 0x898F, 0x7E04, 0x93EA, 0x7E05, 0xE36E, 0x7E09, 0xE375, 0x7E0A, 0xE36F, 0x7E0B, 0xE376, 0x7E12, 0xE372, + 0x7E1B, 0x949B, 0x7E1E, 0x8EC8, 0x7E1F, 0xE374, 0x7E21, 0xE371, 0x7E22, 0xE377, 0x7E23, 0xE370, 0x7E26, 0x8F63, 0x7E2B, 0x9644, + 0x7E2E, 0x8F6B, 0x7E31, 0xE373, 0x7E32, 0xE380, 0x7E35, 0xE37B, 0x7E37, 0xE37E, 0x7E39, 0xE37C, 0x7E3A, 0xE381, 0x7E3B, 0xE37A, + 0x7E3D, 0xE360, 0x7E3E, 0x90D1, 0x7E41, 0x94C9, 0x7E43, 0xE37D, 0x7E46, 0xE378, 0x7E4A, 0x9140, 0x7E4B, 0x8C71, 0x7E4D, 0x8F4A, + 0x7E52, 0xFB8F, 0x7E54, 0x9044, 0x7E55, 0x9155, 0x7E56, 0xE384, 0x7E59, 0xE386, 0x7E5A, 0xE387, 0x7E5D, 0xE383, 0x7E5E, 0xE385, + 0x7E66, 0xE379, 0x7E67, 0xE382, 0x7E69, 0xE38A, 0x7E6A, 0xE389, 0x7E6D, 0x969A, 0x7E70, 0x8C4A, 0x7E79, 0xE388, 0x7E7B, 0xE38C, + 0x7E7C, 0xE38B, 0x7E7D, 0xE38F, 0x7E7F, 0xE391, 0x7E82, 0x8E5B, 0x7E83, 0xE38D, 0x7E88, 0xE392, 0x7E89, 0xE393, 0x7E8A, 0xFA5C, + 0x7E8C, 0xE394, 0x7E8E, 0xE39A, 0x7E8F, 0x935A, 0x7E90, 0xE396, 0x7E92, 0xE395, 0x7E93, 0xE397, 0x7E94, 0xE398, 0x7E96, 0xE399, + 0x7E9B, 0xE39B, 0x7E9C, 0xE39C, 0x7F36, 0x8ACA, 0x7F38, 0xE39D, 0x7F3A, 0xE39E, 0x7F45, 0xE39F, 0x7F47, 0xFB90, 0x7F4C, 0xE3A0, + 0x7F4D, 0xE3A1, 0x7F4E, 0xE3A2, 0x7F50, 0xE3A3, 0x7F51, 0xE3A4, 0x7F54, 0xE3A6, 0x7F55, 0xE3A5, 0x7F58, 0xE3A7, 0x7F5F, 0xE3A8, + 0x7F60, 0xE3A9, 0x7F67, 0xE3AC, 0x7F68, 0xE3AA, 0x7F69, 0xE3AB, 0x7F6A, 0x8DDF, 0x7F6B, 0x8C72, 0x7F6E, 0x9275, 0x7F70, 0x94B1, + 0x7F72, 0x8F90, 0x7F75, 0x946C, 0x7F77, 0x94EB, 0x7F78, 0xE3AD, 0x7F79, 0x9CEB, 0x7F82, 0xE3AE, 0x7F83, 0xE3B0, 0x7F85, 0x9785, + 0x7F86, 0xE3AF, 0x7F87, 0xE3B2, 0x7F88, 0xE3B1, 0x7F8A, 0x9772, 0x7F8C, 0xE3B3, 0x7F8E, 0x94FC, 0x7F94, 0xE3B4, 0x7F9A, 0xE3B7, + 0x7F9D, 0xE3B6, 0x7F9E, 0xE3B5, 0x7FA1, 0xFB91, 0x7FA3, 0xE3B8, 0x7FA4, 0x8C51, 0x7FA8, 0x9141, 0x7FA9, 0x8B60, 0x7FAE, 0xE3BC, + 0x7FAF, 0xE3B9, 0x7FB2, 0xE3BA, 0x7FB6, 0xE3BD, 0x7FB8, 0xE3BE, 0x7FB9, 0xE3BB, 0x7FBD, 0x8948, 0x7FC1, 0x89A5, 0x7FC5, 0xE3C0, + 0x7FC6, 0xE3C1, 0x7FCA, 0xE3C2, 0x7FCC, 0x9782, 0x7FD2, 0x8F4B, 0x7FD4, 0xE3C4, 0x7FD5, 0xE3C3, 0x7FE0, 0x9089, 0x7FE1, 0xE3C5, + 0x7FE6, 0xE3C6, 0x7FE9, 0xE3C7, 0x7FEB, 0x8AE3, 0x7FF0, 0x8ACB, 0x7FF3, 0xE3C8, 0x7FF9, 0xE3C9, 0x7FFB, 0x967C, 0x7FFC, 0x9783, + 0x8000, 0x9773, 0x8001, 0x9856, 0x8003, 0x8D6C, 0x8004, 0xE3CC, 0x8005, 0x8ED2, 0x8006, 0xE3CB, 0x800B, 0xE3CD, 0x800C, 0x8EA7, + 0x8010, 0x91CF, 0x8012, 0xE3CE, 0x8015, 0x8D6B, 0x8017, 0x96D5, 0x8018, 0xE3CF, 0x8019, 0xE3D0, 0x801C, 0xE3D1, 0x8021, 0xE3D2, + 0x8028, 0xE3D3, 0x8033, 0x8EA8, 0x8036, 0x96EB, 0x803B, 0xE3D5, 0x803D, 0x925E, 0x803F, 0xE3D4, 0x8046, 0xE3D7, 0x804A, 0xE3D6, + 0x8052, 0xE3D8, 0x8056, 0x90B9, 0x8058, 0xE3D9, 0x805A, 0xE3DA, 0x805E, 0x95B7, 0x805F, 0xE3DB, 0x8061, 0x918F, 0x8062, 0xE3DC, + 0x8068, 0xE3DD, 0x806F, 0x97FC, 0x8070, 0xE3E0, 0x8072, 0xE3DF, 0x8073, 0xE3DE, 0x8074, 0x92AE, 0x8076, 0xE3E1, 0x8077, 0x9045, + 0x8079, 0xE3E2, 0x807D, 0xE3E3, 0x807E, 0x9857, 0x807F, 0xE3E4, 0x8084, 0xE3E5, 0x8085, 0xE3E7, 0x8086, 0xE3E6, 0x8087, 0x94A3, + 0x8089, 0x93F7, 0x808B, 0x985D, 0x808C, 0x94A7, 0x8093, 0xE3E9, 0x8096, 0x8FD1, 0x8098, 0x9549, 0x809A, 0xE3EA, 0x809B, 0xE3E8, + 0x809D, 0x8ACC, 0x80A1, 0x8CD2, 0x80A2, 0x8E88, 0x80A5, 0x94EC, 0x80A9, 0x8CA8, 0x80AA, 0x9662, 0x80AC, 0xE3ED, 0x80AD, 0xE3EB, + 0x80AF, 0x8D6D, 0x80B1, 0x8D6E, 0x80B2, 0x88E7, 0x80B4, 0x8DE6, 0x80BA, 0x9478, 0x80C3, 0x88DD, 0x80C4, 0xE3F2, 0x80C6, 0x925F, + 0x80CC, 0x9477, 0x80CE, 0x91D9, 0x80D6, 0xE3F4, 0x80D9, 0xE3F0, 0x80DA, 0xE3F3, 0x80DB, 0xE3EE, 0x80DD, 0xE3F1, 0x80DE, 0x9645, + 0x80E1, 0x8CD3, 0x80E4, 0x88FB, 0x80E5, 0xE3EF, 0x80EF, 0xE3F6, 0x80F1, 0xE3F7, 0x80F4, 0x93B7, 0x80F8, 0x8BB9, 0x80FC, 0xE445, + 0x80FD, 0x945C, 0x8102, 0x8E89, 0x8105, 0x8BBA, 0x8106, 0x90C6, 0x8107, 0x9865, 0x8108, 0x96AC, 0x8109, 0xE3F5, 0x810A, 0x90D2, + 0x811A, 0x8B72, 0x811B, 0xE3F8, 0x8123, 0xE3FA, 0x8129, 0xE3F9, 0x812F, 0xE3FB, 0x8131, 0x9245, 0x8133, 0x945D, 0x8139, 0x92AF, + 0x813E, 0xE442, 0x8146, 0xE441, 0x814B, 0xE3FC, 0x814E, 0x9074, 0x8150, 0x9585, 0x8151, 0xE444, 0x8153, 0xE443, 0x8154, 0x8D6F, + 0x8155, 0x9872, 0x815F, 0xE454, 0x8165, 0xE448, 0x8166, 0xE449, 0x816B, 0x8EEE, 0x816E, 0xE447, 0x8170, 0x8D98, 0x8171, 0xE446, + 0x8174, 0xE44A, 0x8178, 0x92B0, 0x8179, 0x95A0, 0x817A, 0x9142, 0x817F, 0x91DA, 0x8180, 0xE44E, 0x8182, 0xE44F, 0x8183, 0xE44B, + 0x8188, 0xE44C, 0x818A, 0xE44D, 0x818F, 0x8D70, 0x8193, 0xE455, 0x8195, 0xE451, 0x819A, 0x9586, 0x819C, 0x968C, 0x819D, 0x9547, + 0x81A0, 0xE450, 0x81A3, 0xE453, 0x81A4, 0xE452, 0x81A8, 0x9663, 0x81A9, 0xE456, 0x81B0, 0xE457, 0x81B3, 0x9156, 0x81B5, 0xE458, + 0x81B8, 0xE45A, 0x81BA, 0xE45E, 0x81BD, 0xE45B, 0x81BE, 0xE459, 0x81BF, 0x945E, 0x81C0, 0xE45C, 0x81C2, 0xE45D, 0x81C6, 0x89B0, + 0x81C8, 0xE464, 0x81C9, 0xE45F, 0x81CD, 0xE460, 0x81D1, 0xE461, 0x81D3, 0x919F, 0x81D8, 0xE463, 0x81D9, 0xE462, 0x81DA, 0xE465, + 0x81DF, 0xE466, 0x81E0, 0xE467, 0x81E3, 0x9062, 0x81E5, 0x89E7, 0x81E7, 0xE468, 0x81E8, 0x97D5, 0x81EA, 0x8EA9, 0x81ED, 0x8F4C, + 0x81F3, 0x8E8A, 0x81F4, 0x9276, 0x81FA, 0xE469, 0x81FB, 0xE46A, 0x81FC, 0x8950, 0x81FE, 0xE46B, 0x8201, 0xE46C, 0x8202, 0xE46D, + 0x8205, 0xE46E, 0x8207, 0xE46F, 0x8208, 0x8BBB, 0x8209, 0x9DA8, 0x820A, 0xE470, 0x820C, 0x90E3, 0x820D, 0xE471, 0x820E, 0x8EC9, + 0x8210, 0xE472, 0x8212, 0x98AE, 0x8216, 0xE473, 0x8217, 0x95DC, 0x8218, 0x8ADA, 0x821B, 0x9143, 0x821C, 0x8F77, 0x821E, 0x9591, + 0x821F, 0x8F4D, 0x8229, 0xE474, 0x822A, 0x8D71, 0x822B, 0xE475, 0x822C, 0x94CA, 0x822E, 0xE484, 0x8233, 0xE477, 0x8235, 0x91C7, + 0x8236, 0x9495, 0x8237, 0x8CBD, 0x8238, 0xE476, 0x8239, 0x9144, 0x8240, 0xE478, 0x8247, 0x92F8, 0x8258, 0xE47A, 0x8259, 0xE479, + 0x825A, 0xE47C, 0x825D, 0xE47B, 0x825F, 0xE47D, 0x8262, 0xE480, 0x8264, 0xE47E, 0x8266, 0x8ACD, 0x8268, 0xE481, 0x826A, 0xE482, + 0x826B, 0xE483, 0x826E, 0x8DAF, 0x826F, 0x97C7, 0x8271, 0xE485, 0x8272, 0x9046, 0x8276, 0x8990, 0x8277, 0xE486, 0x8278, 0xE487, + 0x827E, 0xE488, 0x828B, 0x88F0, 0x828D, 0xE489, 0x8292, 0xE48A, 0x8299, 0x9587, 0x829D, 0x8EC5, 0x829F, 0xE48C, 0x82A5, 0x8A48, + 0x82A6, 0x88B0, 0x82AB, 0xE48B, 0x82AC, 0xE48E, 0x82AD, 0x946D, 0x82AF, 0x9063, 0x82B1, 0x89D4, 0x82B3, 0x9646, 0x82B8, 0x8C7C, + 0x82B9, 0x8BDA, 0x82BB, 0xE48D, 0x82BD, 0x89E8, 0x82C5, 0x8AA1, 0x82D1, 0x8991, 0x82D2, 0xE492, 0x82D3, 0x97E8, 0x82D4, 0x91DB, + 0x82D7, 0x9563, 0x82D9, 0xE49E, 0x82DB, 0x89D5, 0x82DC, 0xE49C, 0x82DE, 0xE49A, 0x82DF, 0xE491, 0x82E1, 0xE48F, 0x82E3, 0xE490, + 0x82E5, 0x8EE1, 0x82E6, 0x8BEA, 0x82E7, 0x9297, 0x82EB, 0x93CF, 0x82F1, 0x8970, 0x82F3, 0xE494, 0x82F4, 0xE493, 0x82F9, 0xE499, + 0x82FA, 0xE495, 0x82FB, 0xE498, 0x8301, 0xFB93, 0x8302, 0x96CE, 0x8303, 0xE497, 0x8304, 0x89D6, 0x8305, 0x8A9D, 0x8306, 0xE49B, + 0x8309, 0xE49D, 0x830E, 0x8C73, 0x8316, 0xE4A1, 0x8317, 0xE4AA, 0x8318, 0xE4AB, 0x831C, 0x88A9, 0x8323, 0xE4B2, 0x8328, 0x88EF, + 0x832B, 0xE4A9, 0x832F, 0xE4A8, 0x8331, 0xE4A3, 0x8332, 0xE4A2, 0x8334, 0xE4A0, 0x8335, 0xE49F, 0x8336, 0x9283, 0x8338, 0x91F9, + 0x8339, 0xE4A5, 0x8340, 0xE4A4, 0x8345, 0xE4A7, 0x8349, 0x9190, 0x834A, 0x8C74, 0x834F, 0x8960, 0x8350, 0xE4A6, 0x8352, 0x8D72, + 0x8358, 0x9191, 0x8362, 0xFB94, 0x8373, 0xE4B8, 0x8375, 0xE4B9, 0x8377, 0x89D7, 0x837B, 0x89AC, 0x837C, 0xE4B6, 0x837F, 0xFB95, + 0x8385, 0xE4AC, 0x8387, 0xE4B4, 0x8389, 0xE4BB, 0x838A, 0xE4B5, 0x838E, 0xE4B3, 0x8393, 0xE496, 0x8396, 0xE4B1, 0x839A, 0xE4AD, + 0x839E, 0x8ACE, 0x839F, 0xE4AF, 0x83A0, 0xE4BA, 0x83A2, 0xE4B0, 0x83A8, 0xE4BC, 0x83AA, 0xE4AE, 0x83AB, 0x949C, 0x83B1, 0x9789, + 0x83B5, 0xE4B7, 0x83BD, 0xE4CD, 0x83C1, 0xE4C5, 0x83C5, 0x909B, 0x83C7, 0xFB96, 0x83CA, 0x8B65, 0x83CC, 0x8BDB, 0x83CE, 0xE4C0, + 0x83D3, 0x89D9, 0x83D6, 0x8FD2, 0x83D8, 0xE4C3, 0x83DC, 0x8DD8, 0x83DF, 0x9370, 0x83E0, 0xE4C8, 0x83E9, 0x95EC, 0x83EB, 0xE4BF, + 0x83EF, 0x89D8, 0x83F0, 0x8CD4, 0x83F1, 0x9548, 0x83F2, 0xE4C9, 0x83F4, 0xE4BD, 0x83F6, 0xFB97, 0x83F7, 0xE4C6, 0x83FB, 0xE4D0, + 0x83FD, 0xE4C1, 0x8403, 0xE4C2, 0x8404, 0x93B8, 0x8407, 0xE4C7, 0x840B, 0xE4C4, 0x840C, 0x9647, 0x840D, 0xE4CA, 0x840E, 0x88DE, + 0x8413, 0xE4BE, 0x8420, 0xE4CC, 0x8422, 0xE4CB, 0x8429, 0x948B, 0x842A, 0xE4D2, 0x842C, 0xE4DD, 0x8431, 0x8A9E, 0x8435, 0xE4E0, + 0x8438, 0xE4CE, 0x843C, 0xE4D3, 0x843D, 0x978E, 0x8446, 0xE4DC, 0x8448, 0xFB98, 0x8449, 0x9774, 0x844E, 0x97A8, 0x8457, 0x9298, + 0x845B, 0x8A8B, 0x8461, 0x9592, 0x8462, 0xE4E2, 0x8463, 0x939F, 0x8466, 0x88AF, 0x8469, 0xE4DB, 0x846B, 0xE4D7, 0x846C, 0x9192, + 0x846D, 0xE4D1, 0x846E, 0xE4D9, 0x846F, 0xE4DE, 0x8471, 0x944B, 0x8475, 0x88A8, 0x8477, 0xE4D6, 0x8479, 0xE4DF, 0x847A, 0x9598, + 0x8482, 0xE4DA, 0x8484, 0xE4D5, 0x848B, 0x8FD3, 0x8490, 0x8F4E, 0x8494, 0x8EAA, 0x8499, 0x96D6, 0x849C, 0x9566, 0x849F, 0xE4E5, + 0x84A1, 0xE4EE, 0x84AD, 0xE4D8, 0x84B2, 0x8A97, 0x84B4, 0xFB99, 0x84B8, 0x8FF6, 0x84B9, 0xE4E3, 0x84BB, 0xE4E8, 0x84BC, 0x9193, + 0x84BF, 0xE4E4, 0x84C1, 0xE4EB, 0x84C4, 0x927E, 0x84C6, 0xE4EC, 0x84C9, 0x9775, 0x84CA, 0xE4E1, 0x84CB, 0x8A57, 0x84CD, 0xE4E7, + 0x84D0, 0xE4EA, 0x84D1, 0x96AA, 0x84D6, 0xE4ED, 0x84D9, 0xE4E6, 0x84DA, 0xE4E9, 0x84DC, 0xFA60, 0x84EC, 0x9648, 0x84EE, 0x9840, + 0x84F4, 0xE4F1, 0x84FC, 0xE4F8, 0x84FF, 0xE4F0, 0x8500, 0x8EC1, 0x8506, 0xE4CF, 0x8511, 0x95CC, 0x8513, 0x96A0, 0x8514, 0xE4F7, + 0x8515, 0xE4F6, 0x8517, 0xE4F2, 0x8518, 0xE4F3, 0x851A, 0x8955, 0x851F, 0xE4F5, 0x8521, 0xE4EF, 0x8526, 0x92D3, 0x852C, 0xE4F4, + 0x852D, 0x88FC, 0x8535, 0x91A0, 0x853D, 0x95C1, 0x8540, 0xE4F9, 0x8541, 0xE540, 0x8543, 0x94D7, 0x8548, 0xE4FC, 0x8549, 0x8FD4, + 0x854A, 0x8EC7, 0x854B, 0xE542, 0x854E, 0x8BBC, 0x8553, 0xFB9A, 0x8555, 0xE543, 0x8557, 0x9599, 0x8558, 0xE4FB, 0x8559, 0xFB9B, + 0x855A, 0xE4D4, 0x8563, 0xE4FA, 0x8568, 0x986E, 0x8569, 0x93A0, 0x856A, 0x9593, 0x856B, 0xFB9C, 0x856D, 0xE54A, 0x8577, 0xE550, + 0x857E, 0xE551, 0x8580, 0xE544, 0x8584, 0x9496, 0x8587, 0xE54E, 0x8588, 0xE546, 0x858A, 0xE548, 0x8590, 0xE552, 0x8591, 0xE547, + 0x8594, 0xE54B, 0x8597, 0x8992, 0x8599, 0x93E3, 0x859B, 0xE54C, 0x859C, 0xE54F, 0x85A4, 0xE545, 0x85A6, 0x9145, 0x85A8, 0xE549, + 0x85A9, 0x8E46, 0x85AA, 0x9064, 0x85AB, 0x8C4F, 0x85AC, 0x96F2, 0x85AE, 0x96F7, 0x85AF, 0x8F92, 0x85B0, 0xFB9E, 0x85B9, 0xE556, + 0x85BA, 0xE554, 0x85C1, 0x986D, 0x85C9, 0xE553, 0x85CD, 0x9795, 0x85CF, 0xE555, 0x85D0, 0xE557, 0x85D5, 0xE558, 0x85DC, 0xE55B, + 0x85DD, 0xE559, 0x85E4, 0x93A1, 0x85E5, 0xE55A, 0x85E9, 0x94CB, 0x85EA, 0xE54D, 0x85F7, 0x8F93, 0x85F9, 0xE55C, 0x85FA, 0xE561, + 0x85FB, 0x9194, 0x85FE, 0xE560, 0x8602, 0xE541, 0x8606, 0xE562, 0x8607, 0x9168, 0x860A, 0xE55D, 0x860B, 0xE55F, 0x8613, 0xE55E, + 0x8616, 0x9F50, 0x8617, 0x9F41, 0x861A, 0xE564, 0x8622, 0xE563, 0x862D, 0x9796, 0x862F, 0xE1BA, 0x8630, 0xE565, 0x863F, 0xE566, + 0x864D, 0xE567, 0x864E, 0x8CD5, 0x8650, 0x8B73, 0x8654, 0xE569, 0x8655, 0x997C, 0x865A, 0x8B95, 0x865C, 0x97B8, 0x865E, 0x8BF1, + 0x865F, 0xE56A, 0x8667, 0xE56B, 0x866B, 0x928E, 0x8671, 0xE56C, 0x8679, 0x93F8, 0x867B, 0x88B8, 0x868A, 0x89E1, 0x868B, 0xE571, + 0x868C, 0xE572, 0x8693, 0xE56D, 0x8695, 0x8E5C, 0x86A3, 0xE56E, 0x86A4, 0x9461, 0x86A9, 0xE56F, 0x86AA, 0xE570, 0x86AB, 0xE57A, + 0x86AF, 0xE574, 0x86B0, 0xE577, 0x86B6, 0xE573, 0x86C4, 0xE575, 0x86C6, 0xE576, 0x86C7, 0x8ED6, 0x86C9, 0xE578, 0x86CB, 0x9260, + 0x86CD, 0x8C75, 0x86CE, 0x8A61, 0x86D4, 0xE57B, 0x86D9, 0x8A5E, 0x86DB, 0xE581, 0x86DE, 0xE57C, 0x86DF, 0xE580, 0x86E4, 0x94B8, + 0x86E9, 0xE57D, 0x86EC, 0xE57E, 0x86ED, 0x9567, 0x86EE, 0x94D8, 0x86EF, 0xE582, 0x86F8, 0x91FB, 0x86F9, 0xE58C, 0x86FB, 0xE588, + 0x86FE, 0x89E9, 0x8700, 0xE586, 0x8702, 0x9649, 0x8703, 0xE587, 0x8706, 0xE584, 0x8708, 0xE585, 0x8709, 0xE58A, 0x870A, 0xE58D, + 0x870D, 0xE58B, 0x8711, 0xE589, 0x8712, 0xE583, 0x8718, 0x9277, 0x871A, 0xE594, 0x871C, 0x96A8, 0x8725, 0xE592, 0x8729, 0xE593, + 0x8734, 0xE58E, 0x8737, 0xE590, 0x873B, 0xE591, 0x873F, 0xE58F, 0x8749, 0x90E4, 0x874B, 0x9858, 0x874C, 0xE598, 0x874E, 0xE599, + 0x8753, 0xE59F, 0x8755, 0x9049, 0x8757, 0xE59B, 0x8759, 0xE59E, 0x875F, 0xE596, 0x8760, 0xE595, 0x8763, 0xE5A0, 0x8766, 0x89DA, + 0x8768, 0xE59C, 0x876A, 0xE5A1, 0x876E, 0xE59D, 0x8774, 0xE59A, 0x8776, 0x92B1, 0x8778, 0xE597, 0x877F, 0x9488, 0x8782, 0xE5A5, + 0x878D, 0x975A, 0x879F, 0xE5A4, 0x87A2, 0xE5A3, 0x87AB, 0xE5AC, 0x87AF, 0xE5A6, 0x87B3, 0xE5AE, 0x87BA, 0x9786, 0x87BB, 0xE5B1, + 0x87BD, 0xE5A8, 0x87C0, 0xE5A9, 0x87C4, 0xE5AD, 0x87C6, 0xE5B0, 0x87C7, 0xE5AF, 0x87CB, 0xE5A7, 0x87D0, 0xE5AA, 0x87D2, 0xE5BB, + 0x87E0, 0xE5B4, 0x87EF, 0xE5B2, 0x87F2, 0xE5B3, 0x87F6, 0xE5B8, 0x87F7, 0xE5B9, 0x87F9, 0x8A49, 0x87FB, 0x8B61, 0x87FE, 0xE5B7, + 0x8805, 0xE5A2, 0x8807, 0xFBA1, 0x880D, 0xE5B6, 0x880E, 0xE5BA, 0x880F, 0xE5B5, 0x8811, 0xE5BC, 0x8815, 0xE5BE, 0x8816, 0xE5BD, + 0x8821, 0xE5C0, 0x8822, 0xE5BF, 0x8823, 0xE579, 0x8827, 0xE5C4, 0x8831, 0xE5C1, 0x8836, 0xE5C2, 0x8839, 0xE5C3, 0x883B, 0xE5C5, + 0x8840, 0x8C8C, 0x8842, 0xE5C7, 0x8844, 0xE5C6, 0x8846, 0x8F4F, 0x884C, 0x8D73, 0x884D, 0x9FA5, 0x8852, 0xE5C8, 0x8853, 0x8F70, + 0x8857, 0x8A58, 0x8859, 0xE5C9, 0x885B, 0x8971, 0x885D, 0x8FD5, 0x885E, 0xE5CA, 0x8861, 0x8D74, 0x8862, 0xE5CB, 0x8863, 0x88DF, + 0x8868, 0x955C, 0x886B, 0xE5CC, 0x8870, 0x908A, 0x8872, 0xE5D3, 0x8875, 0xE5D0, 0x8877, 0x928F, 0x887D, 0xE5D1, 0x887E, 0xE5CE, + 0x887F, 0x8BDC, 0x8881, 0xE5CD, 0x8882, 0xE5D4, 0x8888, 0x8C55, 0x888B, 0x91DC, 0x888D, 0xE5DA, 0x8892, 0xE5D6, 0x8896, 0x91B3, + 0x8897, 0xE5D5, 0x8899, 0xE5D8, 0x889E, 0xE5CF, 0x88A2, 0xE5D9, 0x88A4, 0xE5DB, 0x88AB, 0x94ED, 0x88AE, 0xE5D7, 0x88B0, 0xE5DC, + 0x88B1, 0xE5DE, 0x88B4, 0x8CD1, 0x88B5, 0xE5D2, 0x88B7, 0x88BF, 0x88BF, 0xE5DD, 0x88C1, 0x8DD9, 0x88C2, 0x97F4, 0x88C3, 0xE5DF, + 0x88C4, 0xE5E0, 0x88C5, 0x9195, 0x88CF, 0x97A0, 0x88D4, 0xE5E1, 0x88D5, 0x9754, 0x88D8, 0xE5E2, 0x88D9, 0xE5E3, 0x88DC, 0x95E2, + 0x88DD, 0xE5E4, 0x88DF, 0x8DBE, 0x88E1, 0x97A1, 0x88E8, 0xE5E9, 0x88F2, 0xE5EA, 0x88F3, 0x8FD6, 0x88F4, 0xE5E8, 0x88F5, 0xFBA2, + 0x88F8, 0x9787, 0x88F9, 0xE5E5, 0x88FC, 0xE5E7, 0x88FD, 0x90BB, 0x88FE, 0x909E, 0x8902, 0xE5E6, 0x8904, 0xE5EB, 0x8907, 0x95A1, + 0x890A, 0xE5ED, 0x890C, 0xE5EC, 0x8910, 0x8A8C, 0x8912, 0x964A, 0x8913, 0xE5EE, 0x891C, 0xFA5D, 0x891D, 0xE5FA, 0x891E, 0xE5F0, + 0x8925, 0xE5F1, 0x892A, 0xE5F2, 0x892B, 0xE5F3, 0x8936, 0xE5F7, 0x8938, 0xE5F8, 0x893B, 0xE5F6, 0x8941, 0xE5F4, 0x8943, 0xE5EF, + 0x8944, 0xE5F5, 0x894C, 0xE5F9, 0x894D, 0xE8B5, 0x8956, 0x89A6, 0x895E, 0xE5FC, 0x895F, 0x8BDD, 0x8960, 0xE5FB, 0x8964, 0xE641, + 0x8966, 0xE640, 0x896A, 0xE643, 0x896D, 0xE642, 0x896F, 0xE644, 0x8972, 0x8F50, 0x8974, 0xE645, 0x8977, 0xE646, 0x897E, 0xE647, + 0x897F, 0x90BC, 0x8981, 0x9776, 0x8983, 0xE648, 0x8986, 0x95A2, 0x8987, 0x9465, 0x8988, 0xE649, 0x898A, 0xE64A, 0x898B, 0x8CA9, + 0x898F, 0x8B4B, 0x8993, 0xE64B, 0x8996, 0x8E8B, 0x8997, 0x9460, 0x8998, 0xE64C, 0x899A, 0x8A6F, 0x89A1, 0xE64D, 0x89A6, 0xE64F, + 0x89A7, 0x9797, 0x89A9, 0xE64E, 0x89AA, 0x9065, 0x89AC, 0xE650, 0x89AF, 0xE651, 0x89B2, 0xE652, 0x89B3, 0x8ACF, 0x89BA, 0xE653, + 0x89BD, 0xE654, 0x89BF, 0xE655, 0x89C0, 0xE656, 0x89D2, 0x8A70, 0x89DA, 0xE657, 0x89DC, 0xE658, 0x89DD, 0xE659, 0x89E3, 0x89F0, + 0x89E6, 0x9047, 0x89E7, 0xE65A, 0x89F4, 0xE65B, 0x89F8, 0xE65C, 0x8A00, 0x8CBE, 0x8A02, 0x92F9, 0x8A03, 0xE65D, 0x8A08, 0x8C76, + 0x8A0A, 0x9075, 0x8A0C, 0xE660, 0x8A0E, 0x93A2, 0x8A10, 0xE65F, 0x8A12, 0xFBA3, 0x8A13, 0x8C50, 0x8A16, 0xE65E, 0x8A17, 0x91F5, + 0x8A18, 0x8B4C, 0x8A1B, 0xE661, 0x8A1D, 0xE662, 0x8A1F, 0x8FD7, 0x8A23, 0x8C8D, 0x8A25, 0xE663, 0x8A2A, 0x964B, 0x8A2D, 0x90DD, + 0x8A31, 0x8B96, 0x8A33, 0x96F3, 0x8A34, 0x9169, 0x8A36, 0xE664, 0x8A37, 0xFBA4, 0x8A3A, 0x9066, 0x8A3B, 0x9290, 0x8A3C, 0x8FD8, + 0x8A41, 0xE665, 0x8A46, 0xE668, 0x8A48, 0xE669, 0x8A50, 0x8DBC, 0x8A51, 0x91C0, 0x8A52, 0xE667, 0x8A54, 0x8FD9, 0x8A55, 0x955D, + 0x8A5B, 0xE666, 0x8A5E, 0x8E8C, 0x8A60, 0x8972, 0x8A62, 0xE66D, 0x8A63, 0x8C77, 0x8A66, 0x8E8E, 0x8A69, 0x8E8D, 0x8A6B, 0x986C, + 0x8A6C, 0xE66C, 0x8A6D, 0xE66B, 0x8A6E, 0x9146, 0x8A70, 0x8B6C, 0x8A71, 0x9862, 0x8A72, 0x8A59, 0x8A73, 0x8FDA, 0x8A79, 0xFBA5, + 0x8A7C, 0xE66A, 0x8A82, 0xE66F, 0x8A84, 0xE670, 0x8A85, 0xE66E, 0x8A87, 0x8CD6, 0x8A89, 0x975F, 0x8A8C, 0x8E8F, 0x8A8D, 0x9446, + 0x8A91, 0xE673, 0x8A93, 0x90BE, 0x8A95, 0x9261, 0x8A98, 0x9755, 0x8A9A, 0xE676, 0x8A9E, 0x8CEA, 0x8AA0, 0x90BD, 0x8AA1, 0xE672, + 0x8AA3, 0xE677, 0x8AA4, 0x8CEB, 0x8AA5, 0xE674, 0x8AA6, 0xE675, 0x8AA7, 0xFBA6, 0x8AA8, 0xE671, 0x8AAC, 0x90E0, 0x8AAD, 0x93C7, + 0x8AB0, 0x924E, 0x8AB2, 0x89DB, 0x8AB9, 0x94EE, 0x8ABC, 0x8B62, 0x8ABE, 0xFBA7, 0x8ABF, 0x92B2, 0x8AC2, 0xE67A, 0x8AC4, 0xE678, + 0x8AC7, 0x926B, 0x8ACB, 0x90BF, 0x8ACC, 0x8AD0, 0x8ACD, 0xE679, 0x8ACF, 0x907A, 0x8AD2, 0x97C8, 0x8AD6, 0x985F, 0x8ADA, 0xE67B, + 0x8ADB, 0xE687, 0x8ADC, 0x92B3, 0x8ADE, 0xE686, 0x8ADF, 0xFBA8, 0x8AE0, 0xE683, 0x8AE1, 0xE68B, 0x8AE2, 0xE684, 0x8AE4, 0xE680, + 0x8AE6, 0x92FA, 0x8AE7, 0xE67E, 0x8AEB, 0xE67C, 0x8AED, 0x9740, 0x8AEE, 0x8E90, 0x8AF1, 0xE681, 0x8AF3, 0xE67D, 0x8AF6, 0xFBAA, + 0x8AF7, 0xE685, 0x8AF8, 0x8F94, 0x8AFA, 0x8CBF, 0x8AFE, 0x91F8, 0x8B00, 0x9664, 0x8B01, 0x8979, 0x8B02, 0x88E0, 0x8B04, 0x93A3, + 0x8B07, 0xE689, 0x8B0C, 0xE688, 0x8B0E, 0x93E4, 0x8B10, 0xE68D, 0x8B14, 0xE682, 0x8B16, 0xE68C, 0x8B17, 0xE68E, 0x8B19, 0x8CAA, + 0x8B1A, 0xE68A, 0x8B1B, 0x8D75, 0x8B1D, 0x8ED3, 0x8B20, 0xE68F, 0x8B21, 0x9777, 0x8B26, 0xE692, 0x8B28, 0xE695, 0x8B2B, 0xE693, + 0x8B2C, 0x9554, 0x8B33, 0xE690, 0x8B39, 0x8BDE, 0x8B3E, 0xE694, 0x8B41, 0xE696, 0x8B49, 0xE69A, 0x8B4C, 0xE697, 0x8B4E, 0xE699, + 0x8B4F, 0xE698, 0x8B53, 0xFBAB, 0x8B56, 0xE69B, 0x8B58, 0x8EAF, 0x8B5A, 0xE69D, 0x8B5B, 0xE69C, 0x8B5C, 0x9588, 0x8B5F, 0xE69F, + 0x8B66, 0x8C78, 0x8B6B, 0xE69E, 0x8B6C, 0xE6A0, 0x8B6F, 0xE6A1, 0x8B70, 0x8B63, 0x8B71, 0xE3BF, 0x8B72, 0x8FF7, 0x8B74, 0xE6A2, + 0x8B77, 0x8CEC, 0x8B7D, 0xE6A3, 0x8B7F, 0xFBAC, 0x8B80, 0xE6A4, 0x8B83, 0x8E5D, 0x8B8A, 0x9DCC, 0x8B8C, 0xE6A5, 0x8B8E, 0xE6A6, + 0x8B90, 0x8F51, 0x8B92, 0xE6A7, 0x8B93, 0xE6A8, 0x8B96, 0xE6A9, 0x8B99, 0xE6AA, 0x8B9A, 0xE6AB, 0x8C37, 0x924A, 0x8C3A, 0xE6AC, + 0x8C3F, 0xE6AE, 0x8C41, 0xE6AD, 0x8C46, 0x93A4, 0x8C48, 0xE6AF, 0x8C4A, 0x964C, 0x8C4C, 0xE6B0, 0x8C4E, 0xE6B1, 0x8C50, 0xE6B2, + 0x8C55, 0xE6B3, 0x8C5A, 0x93D8, 0x8C61, 0x8FDB, 0x8C62, 0xE6B4, 0x8C6A, 0x8D8B, 0x8C6B, 0x98AC, 0x8C6C, 0xE6B5, 0x8C78, 0xE6B6, + 0x8C79, 0x955E, 0x8C7A, 0xE6B7, 0x8C7C, 0xE6BF, 0x8C82, 0xE6B8, 0x8C85, 0xE6BA, 0x8C89, 0xE6B9, 0x8C8A, 0xE6BB, 0x8C8C, 0x9665, + 0x8C8D, 0xE6BC, 0x8C8E, 0xE6BD, 0x8C94, 0xE6BE, 0x8C98, 0xE6C0, 0x8C9D, 0x8A4C, 0x8C9E, 0x92E5, 0x8CA0, 0x9589, 0x8CA1, 0x8DE0, + 0x8CA2, 0x8D76, 0x8CA7, 0x956E, 0x8CA8, 0x89DD, 0x8CA9, 0x94CC, 0x8CAA, 0xE6C3, 0x8CAB, 0x8AD1, 0x8CAC, 0x90D3, 0x8CAD, 0xE6C2, + 0x8CAE, 0xE6C7, 0x8CAF, 0x9299, 0x8CB0, 0x96E1, 0x8CB2, 0xE6C5, 0x8CB3, 0xE6C6, 0x8CB4, 0x8B4D, 0x8CB6, 0xE6C8, 0x8CB7, 0x9483, + 0x8CB8, 0x91DD, 0x8CBB, 0x94EF, 0x8CBC, 0x935C, 0x8CBD, 0xE6C4, 0x8CBF, 0x9666, 0x8CC0, 0x89EA, 0x8CC1, 0xE6CA, 0x8CC2, 0x9847, + 0x8CC3, 0x92C0, 0x8CC4, 0x9864, 0x8CC7, 0x8E91, 0x8CC8, 0xE6C9, 0x8CCA, 0x91AF, 0x8CCD, 0xE6DA, 0x8CCE, 0x9147, 0x8CD1, 0x93F6, + 0x8CD3, 0x956F, 0x8CDA, 0xE6CD, 0x8CDB, 0x8E5E, 0x8CDC, 0x8E92, 0x8CDE, 0x8FDC, 0x8CE0, 0x9485, 0x8CE2, 0x8CAB, 0x8CE3, 0xE6CC, + 0x8CE4, 0xE6CB, 0x8CE6, 0x958A, 0x8CEA, 0x8EBF, 0x8CED, 0x9371, 0x8CF0, 0xFBAD, 0x8CF4, 0xFBAE, 0x8CFA, 0xE6CF, 0x8CFB, 0xE6D0, + 0x8CFC, 0x8D77, 0x8CFD, 0xE6CE, 0x8D04, 0xE6D1, 0x8D05, 0xE6D2, 0x8D07, 0xE6D4, 0x8D08, 0x91A1, 0x8D0A, 0xE6D3, 0x8D0B, 0x8AE4, + 0x8D0D, 0xE6D6, 0x8D0F, 0xE6D5, 0x8D10, 0xE6D7, 0x8D12, 0xFBAF, 0x8D13, 0xE6D9, 0x8D14, 0xE6DB, 0x8D16, 0xE6DC, 0x8D64, 0x90D4, + 0x8D66, 0x8ECD, 0x8D67, 0xE6DD, 0x8D6B, 0x8A71, 0x8D6D, 0xE6DE, 0x8D70, 0x9196, 0x8D71, 0xE6DF, 0x8D73, 0xE6E0, 0x8D74, 0x958B, + 0x8D76, 0xFBB0, 0x8D77, 0x8B4E, 0x8D81, 0xE6E1, 0x8D85, 0x92B4, 0x8D8A, 0x897A, 0x8D99, 0xE6E2, 0x8DA3, 0x8EEF, 0x8DA8, 0x9096, + 0x8DB3, 0x91AB, 0x8DBA, 0xE6E5, 0x8DBE, 0xE6E4, 0x8DC2, 0xE6E3, 0x8DCB, 0xE6EB, 0x8DCC, 0xE6E9, 0x8DCF, 0xE6E6, 0x8DD6, 0xE6E8, + 0x8DDA, 0xE6E7, 0x8DDB, 0xE6EA, 0x8DDD, 0x8B97, 0x8DDF, 0xE6EE, 0x8DE1, 0x90D5, 0x8DE3, 0xE6EF, 0x8DE8, 0x8CD7, 0x8DEA, 0xE6EC, + 0x8DEB, 0xE6ED, 0x8DEF, 0x9848, 0x8DF3, 0x92B5, 0x8DF5, 0x9148, 0x8DFC, 0xE6F0, 0x8DFF, 0xE6F3, 0x8E08, 0xE6F1, 0x8E09, 0xE6F2, + 0x8E0A, 0x9778, 0x8E0F, 0x93A5, 0x8E10, 0xE6F6, 0x8E1D, 0xE6F4, 0x8E1E, 0xE6F5, 0x8E1F, 0xE6F7, 0x8E2A, 0xE748, 0x8E30, 0xE6FA, + 0x8E34, 0xE6FB, 0x8E35, 0xE6F9, 0x8E42, 0xE6F8, 0x8E44, 0x92FB, 0x8E47, 0xE740, 0x8E48, 0xE744, 0x8E49, 0xE741, 0x8E4A, 0xE6FC, + 0x8E4C, 0xE742, 0x8E50, 0xE743, 0x8E55, 0xE74A, 0x8E59, 0xE745, 0x8E5F, 0x90D6, 0x8E60, 0xE747, 0x8E63, 0xE749, 0x8E64, 0xE746, + 0x8E72, 0xE74C, 0x8E74, 0x8F52, 0x8E76, 0xE74B, 0x8E7C, 0xE74D, 0x8E81, 0xE74E, 0x8E84, 0xE751, 0x8E85, 0xE750, 0x8E87, 0xE74F, + 0x8E8A, 0xE753, 0x8E8B, 0xE752, 0x8E8D, 0x96F4, 0x8E91, 0xE755, 0x8E93, 0xE754, 0x8E94, 0xE756, 0x8E99, 0xE757, 0x8EA1, 0xE759, + 0x8EAA, 0xE758, 0x8EAB, 0x9067, 0x8EAC, 0xE75A, 0x8EAF, 0x8BEB, 0x8EB0, 0xE75B, 0x8EB1, 0xE75D, 0x8EBE, 0xE75E, 0x8EC5, 0xE75F, + 0x8EC6, 0xE75C, 0x8EC8, 0xE760, 0x8ECA, 0x8ED4, 0x8ECB, 0xE761, 0x8ECC, 0x8B4F, 0x8ECD, 0x8C52, 0x8ECF, 0xFBB2, 0x8ED2, 0x8CAC, + 0x8EDB, 0xE762, 0x8EDF, 0x93EE, 0x8EE2, 0x935D, 0x8EE3, 0xE763, 0x8EEB, 0xE766, 0x8EF8, 0x8EB2, 0x8EFB, 0xE765, 0x8EFC, 0xE764, + 0x8EFD, 0x8C79, 0x8EFE, 0xE767, 0x8F03, 0x8A72, 0x8F05, 0xE769, 0x8F09, 0x8DDA, 0x8F0A, 0xE768, 0x8F0C, 0xE771, 0x8F12, 0xE76B, + 0x8F13, 0xE76D, 0x8F14, 0x95E3, 0x8F15, 0xE76A, 0x8F19, 0xE76C, 0x8F1B, 0xE770, 0x8F1C, 0xE76E, 0x8F1D, 0x8B50, 0x8F1F, 0xE76F, + 0x8F26, 0xE772, 0x8F29, 0x9479, 0x8F2A, 0x97D6, 0x8F2F, 0x8F53, 0x8F33, 0xE773, 0x8F38, 0x9741, 0x8F39, 0xE775, 0x8F3B, 0xE774, + 0x8F3E, 0xE778, 0x8F3F, 0x9760, 0x8F42, 0xE777, 0x8F44, 0x8A8D, 0x8F45, 0xE776, 0x8F46, 0xE77B, 0x8F49, 0xE77A, 0x8F4C, 0xE779, + 0x8F4D, 0x9351, 0x8F4E, 0xE77C, 0x8F57, 0xE77D, 0x8F5C, 0xE77E, 0x8F5F, 0x8D8C, 0x8F61, 0x8C44, 0x8F62, 0xE780, 0x8F63, 0xE781, + 0x8F64, 0xE782, 0x8F9B, 0x9068, 0x8F9C, 0xE783, 0x8F9E, 0x8EAB, 0x8F9F, 0xE784, 0x8FA3, 0xE785, 0x8FA7, 0x999F, 0x8FA8, 0x999E, + 0x8FAD, 0xE786, 0x8FAE, 0xE390, 0x8FAF, 0xE787, 0x8FB0, 0x9243, 0x8FB1, 0x904A, 0x8FB2, 0x945F, 0x8FB7, 0xE788, 0x8FBA, 0x95D3, + 0x8FBB, 0x92D2, 0x8FBC, 0x8D9E, 0x8FBF, 0x9248, 0x8FC2, 0x8949, 0x8FC4, 0x9698, 0x8FC5, 0x9076, 0x8FCE, 0x8C7D, 0x8FD1, 0x8BDF, + 0x8FD4, 0x95D4, 0x8FDA, 0xE789, 0x8FE2, 0xE78B, 0x8FE5, 0xE78A, 0x8FE6, 0x89DE, 0x8FE9, 0x93F4, 0x8FEA, 0xE78C, 0x8FEB, 0x9497, + 0x8FED, 0x9352, 0x8FEF, 0xE78D, 0x8FF0, 0x8F71, 0x8FF4, 0xE78F, 0x8FF7, 0x96C0, 0x8FF8, 0xE79E, 0x8FF9, 0xE791, 0x8FFA, 0xE792, + 0x8FFD, 0x92C7, 0x9000, 0x91DE, 0x9001, 0x9197, 0x9003, 0x93A6, 0x9005, 0xE790, 0x9006, 0x8B74, 0x900B, 0xE799, 0x900D, 0xE796, + 0x900E, 0xE7A3, 0x900F, 0x93A7, 0x9010, 0x9280, 0x9011, 0xE793, 0x9013, 0x92FC, 0x9014, 0x9372, 0x9015, 0xE794, 0x9016, 0xE798, + 0x9017, 0x9080, 0x9019, 0x9487, 0x901A, 0x92CA, 0x901D, 0x90C0, 0x901E, 0xE797, 0x901F, 0x91AC, 0x9020, 0x91A2, 0x9021, 0xE795, + 0x9022, 0x88A7, 0x9023, 0x9841, 0x9027, 0xE79A, 0x902E, 0x91DF, 0x9031, 0x8F54, 0x9032, 0x9069, 0x9035, 0xE79C, 0x9036, 0xE79B, + 0x9038, 0x88ED, 0x9039, 0xE79D, 0x903C, 0x954E, 0x903E, 0xE7A5, 0x9041, 0x93D9, 0x9042, 0x908B, 0x9045, 0x9278, 0x9047, 0x8BF6, + 0x9049, 0xE7A4, 0x904A, 0x9756, 0x904B, 0x895E, 0x904D, 0x95D5, 0x904E, 0x89DF, 0x904F, 0xE79F, 0x9050, 0xE7A0, 0x9051, 0xE7A1, + 0x9052, 0xE7A2, 0x9053, 0x93B9, 0x9054, 0x9242, 0x9055, 0x88E1, 0x9056, 0xE7A6, 0x9058, 0xE7A7, 0x9059, 0xEAA1, 0x905C, 0x91BB, + 0x905E, 0xE7A8, 0x9060, 0x8993, 0x9061, 0x916B, 0x9063, 0x8CAD, 0x9065, 0x9779, 0x9067, 0xFBB5, 0x9068, 0xE7A9, 0x9069, 0x934B, + 0x906D, 0x9198, 0x906E, 0x8ED5, 0x906F, 0xE7AA, 0x9072, 0xE7AD, 0x9075, 0x8F85, 0x9076, 0xE7AB, 0x9077, 0x914A, 0x9078, 0x9149, + 0x907A, 0x88E2, 0x907C, 0x97C9, 0x907D, 0xE7AF, 0x907F, 0x94F0, 0x9080, 0xE7B1, 0x9081, 0xE7B0, 0x9082, 0xE7AE, 0x9083, 0xE284, + 0x9084, 0x8AD2, 0x9087, 0xE78E, 0x9089, 0xE7B3, 0x908A, 0xE7B2, 0x908F, 0xE7B4, 0x9091, 0x9757, 0x90A3, 0x93DF, 0x90A6, 0x964D, + 0x90A8, 0xE7B5, 0x90AA, 0x8ED7, 0x90AF, 0xE7B6, 0x90B1, 0xE7B7, 0x90B5, 0xE7B8, 0x90B8, 0x9340, 0x90C1, 0x88E8, 0x90CA, 0x8D78, + 0x90CE, 0x9859, 0x90DB, 0xE7BC, 0x90DE, 0xFBB6, 0x90E1, 0x8C53, 0x90E2, 0xE7B9, 0x90E4, 0xE7BA, 0x90E8, 0x9594, 0x90ED, 0x8A73, + 0x90F5, 0x9758, 0x90F7, 0x8BBD, 0x90FD, 0x9373, 0x9102, 0xE7BD, 0x9112, 0xE7BE, 0x9115, 0xFBB8, 0x9119, 0xE7BF, 0x9127, 0xFBB9, + 0x912D, 0x9341, 0x9130, 0xE7C1, 0x9132, 0xE7C0, 0x9149, 0x93D1, 0x914A, 0xE7C2, 0x914B, 0x8F55, 0x914C, 0x8EDE, 0x914D, 0x947A, + 0x914E, 0x9291, 0x9152, 0x8EF0, 0x9154, 0x908C, 0x9156, 0xE7C3, 0x9158, 0xE7C4, 0x9162, 0x907C, 0x9163, 0xE7C5, 0x9165, 0xE7C6, + 0x9169, 0xE7C7, 0x916A, 0x978F, 0x916C, 0x8F56, 0x9172, 0xE7C9, 0x9173, 0xE7C8, 0x9175, 0x8D79, 0x9177, 0x8D93, 0x9178, 0x8E5F, + 0x9182, 0xE7CC, 0x9187, 0x8F86, 0x9189, 0xE7CB, 0x918B, 0xE7CA, 0x918D, 0x91E7, 0x9190, 0x8CED, 0x9192, 0x90C1, 0x9197, 0x94AE, + 0x919C, 0x8F58, 0x91A2, 0xE7CD, 0x91A4, 0x8FDD, 0x91AA, 0xE7D0, 0x91AB, 0xE7CE, 0x91AF, 0xE7CF, 0x91B4, 0xE7D2, 0x91B5, 0xE7D1, + 0x91B8, 0x8FF8, 0x91BA, 0xE7D3, 0x91C0, 0xE7D4, 0x91C1, 0xE7D5, 0x91C6, 0x94CE, 0x91C7, 0x8DD1, 0x91C8, 0x8EDF, 0x91C9, 0xE7D6, + 0x91CB, 0xE7D7, 0x91CC, 0x97A2, 0x91CD, 0x8F64, 0x91CE, 0x96EC, 0x91CF, 0x97CA, 0x91D0, 0xE7D8, 0x91D1, 0x8BE0, 0x91D6, 0xE7D9, + 0x91D7, 0xFBBB, 0x91D8, 0x9342, 0x91DA, 0xFBBA, 0x91DB, 0xE7DC, 0x91DC, 0x8A98, 0x91DD, 0x906A, 0x91DE, 0xFBBC, 0x91DF, 0xE7DA, + 0x91E1, 0xE7DB, 0x91E3, 0x92DE, 0x91E4, 0xFBBF, 0x91E5, 0xFBC0, 0x91E6, 0x9674, 0x91E7, 0x8BFA, 0x91ED, 0xFBBD, 0x91EE, 0xFBBE, + 0x91F5, 0xE7DE, 0x91F6, 0xE7DF, 0x91FC, 0xE7DD, 0x91FF, 0xE7E1, 0x9206, 0xFBC1, 0x920A, 0xFBC3, 0x920D, 0x93DD, 0x920E, 0x8A62, + 0x9210, 0xFBC2, 0x9211, 0xE7E5, 0x9214, 0xE7E2, 0x9215, 0xE7E4, 0x921E, 0xE7E0, 0x9229, 0xE86E, 0x922C, 0xE7E3, 0x9234, 0x97E9, + 0x9237, 0x8CD8, 0x9239, 0xFBCA, 0x923A, 0xFBC4, 0x923C, 0xFBC6, 0x923F, 0xE7ED, 0x9240, 0xFBC5, 0x9244, 0x9353, 0x9245, 0xE7E8, + 0x9248, 0xE7EB, 0x9249, 0xE7E9, 0x924B, 0xE7EE, 0x924E, 0xFBC7, 0x9250, 0xE7EF, 0x9251, 0xFBC9, 0x9257, 0xE7E7, 0x9259, 0xFBC8, + 0x925A, 0xE7F4, 0x925B, 0x8994, 0x925E, 0xE7E6, 0x9262, 0x94AB, 0x9264, 0xE7EA, 0x9266, 0x8FDE, 0x9267, 0xFBCB, 0x9271, 0x8D7A, + 0x9277, 0xFBCD, 0x9278, 0xFBCE, 0x927E, 0x9667, 0x9280, 0x8BE2, 0x9283, 0x8F65, 0x9285, 0x93BA, 0x9288, 0xFA5F, 0x9291, 0x914C, + 0x9293, 0xE7F2, 0x9295, 0xE7EC, 0x9296, 0xE7F1, 0x9298, 0x96C1, 0x929A, 0x92B6, 0x929B, 0xE7F3, 0x929C, 0xE7F0, 0x92A7, 0xFBCC, + 0x92AD, 0x914B, 0x92B7, 0xE7F7, 0x92B9, 0xE7F6, 0x92CF, 0xE7F5, 0x92D0, 0xFBD2, 0x92D2, 0x964E, 0x92D3, 0xFBD6, 0x92D5, 0xFBD4, + 0x92D7, 0xFBD0, 0x92D9, 0xFBD1, 0x92E0, 0xFBD5, 0x92E4, 0x8F9B, 0x92E7, 0xFBCF, 0x92E9, 0xE7F8, 0x92EA, 0x95DD, 0x92ED, 0x8973, + 0x92F2, 0x9565, 0x92F3, 0x9292, 0x92F8, 0x8B98, 0x92F9, 0xFA65, 0x92FA, 0xE7FA, 0x92FB, 0xFBD9, 0x92FC, 0x8D7C, 0x92FF, 0xFBDC, + 0x9302, 0xFBDE, 0x9306, 0x8E4B, 0x930F, 0xE7F9, 0x9310, 0x908D, 0x9318, 0x908E, 0x9319, 0xE840, 0x931A, 0xE842, 0x931D, 0xFBDD, + 0x931E, 0xFBDB, 0x9320, 0x8FF9, 0x9321, 0xFBD8, 0x9322, 0xE841, 0x9323, 0xE843, 0x9325, 0xFBD7, 0x9326, 0x8BD1, 0x9328, 0x9564, + 0x932B, 0x8EE0, 0x932C, 0x9842, 0x932E, 0xE7FC, 0x932F, 0x8DF6, 0x9332, 0x985E, 0x9335, 0xE845, 0x933A, 0xE844, 0x933B, 0xE846, + 0x9344, 0xE7FB, 0x9348, 0xFA5E, 0x934B, 0x93E7, 0x934D, 0x9374, 0x9354, 0x92D5, 0x9356, 0xE84B, 0x9357, 0xFBE0, 0x935B, 0x9262, + 0x935C, 0xE847, 0x9360, 0xE848, 0x936C, 0x8C4C, 0x936E, 0xE84A, 0x9370, 0xFBDF, 0x9375, 0x8CAE, 0x937C, 0xE849, 0x937E, 0x8FDF, + 0x938C, 0x8A99, 0x9394, 0xE84F, 0x9396, 0x8DBD, 0x9397, 0x9199, 0x939A, 0x92C8, 0x93A4, 0xFBE1, 0x93A7, 0x8A5A, 0x93AC, 0xE84D, + 0x93AD, 0xE84E, 0x93AE, 0x92C1, 0x93B0, 0xE84C, 0x93B9, 0xE850, 0x93C3, 0xE856, 0x93C6, 0xFBE2, 0x93C8, 0xE859, 0x93D0, 0xE858, + 0x93D1, 0x934C, 0x93D6, 0xE851, 0x93D7, 0xE852, 0x93D8, 0xE855, 0x93DD, 0xE857, 0x93DE, 0xFBE3, 0x93E1, 0x8BBE, 0x93E4, 0xE85A, + 0x93E5, 0xE854, 0x93E8, 0xE853, 0x93F8, 0xFBE4, 0x9403, 0xE85E, 0x9407, 0xE85F, 0x9410, 0xE860, 0x9413, 0xE85D, 0x9414, 0xE85C, + 0x9418, 0x8FE0, 0x9419, 0x93A8, 0x941A, 0xE85B, 0x9421, 0xE864, 0x942B, 0xE862, 0x9431, 0xFBE5, 0x9435, 0xE863, 0x9436, 0xE861, + 0x9438, 0x91F6, 0x943A, 0xE865, 0x9441, 0xE866, 0x9444, 0xE868, 0x9445, 0xFBE6, 0x9448, 0xFBE7, 0x9451, 0x8AD3, 0x9452, 0xE867, + 0x9453, 0x96F8, 0x945A, 0xE873, 0x945B, 0xE869, 0x945E, 0xE86C, 0x9460, 0xE86A, 0x9462, 0xE86B, 0x946A, 0xE86D, 0x9470, 0xE86F, + 0x9475, 0xE870, 0x9477, 0xE871, 0x947C, 0xE874, 0x947D, 0xE872, 0x947E, 0xE875, 0x947F, 0xE877, 0x9481, 0xE876, 0x9577, 0x92B7, + 0x9580, 0x96E5, 0x9582, 0xE878, 0x9583, 0x914D, 0x9587, 0xE879, 0x9589, 0x95C2, 0x958A, 0xE87A, 0x958B, 0x8A4A, 0x958F, 0x895B, + 0x9591, 0x8AD5, 0x9592, 0xFBE8, 0x9593, 0x8AD4, 0x9594, 0xE87B, 0x9596, 0xE87C, 0x9598, 0xE87D, 0x9599, 0xE87E, 0x95A0, 0xE880, + 0x95A2, 0x8AD6, 0x95A3, 0x8A74, 0x95A4, 0x8D7D, 0x95A5, 0x94B4, 0x95A7, 0xE882, 0x95A8, 0xE881, 0x95AD, 0xE883, 0x95B2, 0x897B, + 0x95B9, 0xE886, 0x95BB, 0xE885, 0x95BC, 0xE884, 0x95BE, 0xE887, 0x95C3, 0xE88A, 0x95C7, 0x88C5, 0x95CA, 0xE888, 0x95CC, 0xE88C, + 0x95CD, 0xE88B, 0x95D4, 0xE88E, 0x95D5, 0xE88D, 0x95D6, 0xE88F, 0x95D8, 0x93AC, 0x95DC, 0xE890, 0x95E1, 0xE891, 0x95E2, 0xE893, + 0x95E5, 0xE892, 0x961C, 0x958C, 0x9621, 0xE894, 0x9628, 0xE895, 0x962A, 0x8DE3, 0x962E, 0xE896, 0x962F, 0xE897, 0x9632, 0x9668, + 0x963B, 0x916A, 0x963F, 0x88A2, 0x9640, 0x91C9, 0x9642, 0xE898, 0x9644, 0x958D, 0x964B, 0xE89B, 0x964C, 0xE899, 0x964D, 0x8D7E, + 0x964F, 0xE89A, 0x9650, 0x8CC0, 0x965B, 0x95C3, 0x965C, 0xE89D, 0x965D, 0xE89F, 0x965E, 0xE89E, 0x965F, 0xE8A0, 0x9662, 0x8940, + 0x9663, 0x9077, 0x9664, 0x8F9C, 0x9665, 0x8AD7, 0x9666, 0xE8A1, 0x966A, 0x9486, 0x966C, 0xE8A3, 0x9670, 0x8941, 0x9672, 0xE8A2, + 0x9673, 0x92C2, 0x9675, 0x97CB, 0x9676, 0x93A9, 0x9677, 0xE89C, 0x9678, 0x97A4, 0x967A, 0x8CAF, 0x967D, 0x977A, 0x9685, 0x8BF7, + 0x9686, 0x97B2, 0x9688, 0x8C47, 0x968A, 0x91E0, 0x968B, 0xE440, 0x968D, 0xE8A4, 0x968E, 0x8A4B, 0x968F, 0x908F, 0x9694, 0x8A75, + 0x9695, 0xE8A6, 0x9697, 0xE8A7, 0x9698, 0xE8A5, 0x9699, 0x8C84, 0x969B, 0x8DDB, 0x969C, 0x8FE1, 0x969D, 0xFBEB, 0x96A0, 0x8942, + 0x96A3, 0x97D7, 0x96A7, 0xE8A9, 0x96A8, 0xE7AC, 0x96AA, 0xE8A8, 0x96AF, 0xFBEC, 0x96B0, 0xE8AC, 0x96B1, 0xE8AA, 0x96B2, 0xE8AB, + 0x96B4, 0xE8AD, 0x96B6, 0xE8AE, 0x96B7, 0x97EA, 0x96B8, 0xE8AF, 0x96B9, 0xE8B0, 0x96BB, 0x90C7, 0x96BC, 0x94B9, 0x96C0, 0x909D, + 0x96C1, 0x8AE5, 0x96C4, 0x9759, 0x96C5, 0x89EB, 0x96C6, 0x8F57, 0x96C7, 0x8CD9, 0x96C9, 0xE8B3, 0x96CB, 0xE8B2, 0x96CC, 0x8E93, + 0x96CD, 0xE8B4, 0x96CE, 0xE8B1, 0x96D1, 0x8E47, 0x96D5, 0xE8B8, 0x96D6, 0xE5AB, 0x96D9, 0x99D4, 0x96DB, 0x9097, 0x96DC, 0xE8B6, + 0x96E2, 0x97A3, 0x96E3, 0x93EF, 0x96E8, 0x894A, 0x96EA, 0x90E1, 0x96EB, 0x8EB4, 0x96F0, 0x95B5, 0x96F2, 0x895F, 0x96F6, 0x97EB, + 0x96F7, 0x978B, 0x96F9, 0xE8B9, 0x96FB, 0x9364, 0x9700, 0x8EF9, 0x9704, 0xE8BA, 0x9706, 0xE8BB, 0x9707, 0x906B, 0x9708, 0xE8BC, + 0x970A, 0x97EC, 0x970D, 0xE8B7, 0x970E, 0xE8BE, 0x970F, 0xE8C0, 0x9711, 0xE8BF, 0x9713, 0xE8BD, 0x9716, 0xE8C1, 0x9719, 0xE8C2, + 0x971C, 0x919A, 0x971E, 0x89E0, 0x9724, 0xE8C3, 0x9727, 0x96B6, 0x972A, 0xE8C4, 0x9730, 0xE8C5, 0x9732, 0x9849, 0x9733, 0xFBED, + 0x9738, 0x9E50, 0x9739, 0xE8C6, 0x973B, 0xFBEE, 0x973D, 0xE8C7, 0x973E, 0xE8C8, 0x9742, 0xE8CC, 0x9743, 0xFBEF, 0x9744, 0xE8C9, + 0x9746, 0xE8CA, 0x9748, 0xE8CB, 0x9749, 0xE8CD, 0x974D, 0xFBF0, 0x974F, 0xFBF1, 0x9751, 0xFBF2, 0x9752, 0x90C2, 0x9755, 0xFBF3, + 0x9756, 0x96F5, 0x9759, 0x90C3, 0x975C, 0xE8CE, 0x975E, 0x94F1, 0x9760, 0xE8CF, 0x9761, 0xEA72, 0x9762, 0x96CA, 0x9764, 0xE8D0, + 0x9766, 0xE8D1, 0x9768, 0xE8D2, 0x9769, 0x8A76, 0x976B, 0xE8D4, 0x976D, 0x9078, 0x9771, 0xE8D5, 0x9774, 0x8C43, 0x9779, 0xE8D6, + 0x977A, 0xE8DA, 0x977C, 0xE8D8, 0x9781, 0xE8D9, 0x9784, 0x8A93, 0x9785, 0xE8D7, 0x9786, 0xE8DB, 0x978B, 0xE8DC, 0x978D, 0x88C6, + 0x978F, 0xE8DD, 0x9790, 0xE8DE, 0x9798, 0x8FE2, 0x979C, 0xE8DF, 0x97A0, 0x8B66, 0x97A3, 0xE8E2, 0x97A6, 0xE8E1, 0x97A8, 0xE8E0, + 0x97AB, 0xE691, 0x97AD, 0x95DA, 0x97B3, 0xE8E3, 0x97B4, 0xE8E4, 0x97C3, 0xE8E5, 0x97C6, 0xE8E6, 0x97C8, 0xE8E7, 0x97CB, 0xE8E8, + 0x97D3, 0x8AD8, 0x97DC, 0xE8E9, 0x97ED, 0xE8EA, 0x97EE, 0x9442, 0x97F2, 0xE8EC, 0x97F3, 0x89B9, 0x97F5, 0xE8EF, 0x97F6, 0xE8EE, + 0x97FB, 0x8943, 0x97FF, 0x8BBF, 0x9801, 0x95C5, 0x9802, 0x92B8, 0x9803, 0x8DA0, 0x9805, 0x8D80, 0x9806, 0x8F87, 0x9808, 0x907B, + 0x980C, 0xE8F1, 0x980F, 0xE8F0, 0x9810, 0x9761, 0x9811, 0x8AE6, 0x9812, 0x94D0, 0x9813, 0x93DA, 0x9817, 0x909C, 0x9818, 0x97CC, + 0x981A, 0x8C7A, 0x9821, 0xE8F4, 0x9824, 0xE8F3, 0x982C, 0x966A, 0x982D, 0x93AA, 0x9834, 0x896F, 0x9837, 0xE8F5, 0x9838, 0xE8F2, + 0x983B, 0x9570, 0x983C, 0x978A, 0x983D, 0xE8F6, 0x9846, 0xE8F7, 0x984B, 0xE8F9, 0x984C, 0x91E8, 0x984D, 0x8A7A, 0x984E, 0x8A7B, + 0x984F, 0xE8F8, 0x9854, 0x8AE7, 0x9855, 0x8CB0, 0x9857, 0xFBF4, 0x9858, 0x8AE8, 0x985B, 0x935E, 0x985E, 0x97DE, 0x9865, 0xFBF5, + 0x9867, 0x8CDA, 0x986B, 0xE8FA, 0x986F, 0xE8FB, 0x9870, 0xE8FC, 0x9871, 0xE940, 0x9873, 0xE942, 0x9874, 0xE941, 0x98A8, 0x9597, + 0x98AA, 0xE943, 0x98AF, 0xE944, 0x98B1, 0xE945, 0x98B6, 0xE946, 0x98C3, 0xE948, 0x98C4, 0xE947, 0x98C6, 0xE949, 0x98DB, 0x94F2, + 0x98DC, 0xE3CA, 0x98DF, 0x9048, 0x98E2, 0x8B51, 0x98E9, 0xE94A, 0x98EB, 0xE94B, 0x98ED, 0x99AA, 0x98EE, 0x9F5A, 0x98EF, 0x94D1, + 0x98F2, 0x88F9, 0x98F4, 0x88B9, 0x98FC, 0x8E94, 0x98FD, 0x964F, 0x98FE, 0x8FFC, 0x9903, 0xE94C, 0x9905, 0x96DD, 0x9909, 0xE94D, + 0x990A, 0x977B, 0x990C, 0x8961, 0x9910, 0x8E60, 0x9912, 0xE94E, 0x9913, 0x89EC, 0x9914, 0xE94F, 0x9918, 0xE950, 0x991D, 0xE952, + 0x991E, 0xE953, 0x9920, 0xE955, 0x9921, 0xE951, 0x9924, 0xE954, 0x9927, 0xFBF8, 0x9928, 0x8AD9, 0x992C, 0xE956, 0x992E, 0xE957, + 0x993D, 0xE958, 0x993E, 0xE959, 0x9942, 0xE95A, 0x9945, 0xE95C, 0x9949, 0xE95B, 0x994B, 0xE95E, 0x994C, 0xE961, 0x9950, 0xE95D, + 0x9951, 0xE95F, 0x9952, 0xE960, 0x9955, 0xE962, 0x9957, 0x8BC0, 0x9996, 0x8EF1, 0x9997, 0xE963, 0x9998, 0xE964, 0x9999, 0x8D81, + 0x999E, 0xFBFA, 0x99A5, 0xE965, 0x99A8, 0x8A5D, 0x99AC, 0x946E, 0x99AD, 0xE966, 0x99AE, 0xE967, 0x99B3, 0x9279, 0x99B4, 0x93E9, + 0x99BC, 0xE968, 0x99C1, 0x949D, 0x99C4, 0x91CA, 0x99C5, 0x8977, 0x99C6, 0x8BEC, 0x99C8, 0x8BED, 0x99D0, 0x9293, 0x99D1, 0xE96D, + 0x99D2, 0x8BEE, 0x99D5, 0x89ED, 0x99D8, 0xE96C, 0x99DB, 0xE96A, 0x99DD, 0xE96B, 0x99DF, 0xE969, 0x99E2, 0xE977, 0x99ED, 0xE96E, + 0x99EE, 0xE96F, 0x99F1, 0xE970, 0x99F2, 0xE971, 0x99F8, 0xE973, 0x99FB, 0xE972, 0x99FF, 0x8F78, 0x9A01, 0xE974, 0x9A05, 0xE976, + 0x9A0E, 0x8B52, 0x9A0F, 0xE975, 0x9A12, 0x919B, 0x9A13, 0x8CB1, 0x9A19, 0xE978, 0x9A28, 0x91CB, 0x9A2B, 0xE979, 0x9A30, 0x93AB, + 0x9A37, 0xE97A, 0x9A3E, 0xE980, 0x9A40, 0xE97D, 0x9A42, 0xE97C, 0x9A43, 0xE97E, 0x9A45, 0xE97B, 0x9A4D, 0xE982, 0x9A4E, 0xFBFB, + 0x9A55, 0xE981, 0x9A57, 0xE984, 0x9A5A, 0x8BC1, 0x9A5B, 0xE983, 0x9A5F, 0xE985, 0x9A62, 0xE986, 0x9A64, 0xE988, 0x9A65, 0xE987, + 0x9A69, 0xE989, 0x9A6A, 0xE98B, 0x9A6B, 0xE98A, 0x9AA8, 0x8D9C, 0x9AAD, 0xE98C, 0x9AB0, 0xE98D, 0x9AB8, 0x8A5B, 0x9ABC, 0xE98E, + 0x9AC0, 0xE98F, 0x9AC4, 0x9091, 0x9ACF, 0xE990, 0x9AD1, 0xE991, 0x9AD3, 0xE992, 0x9AD4, 0xE993, 0x9AD8, 0x8D82, 0x9AD9, 0xFBFC, + 0x9ADC, 0xFC40, 0x9ADE, 0xE994, 0x9ADF, 0xE995, 0x9AE2, 0xE996, 0x9AE3, 0xE997, 0x9AE6, 0xE998, 0x9AEA, 0x94AF, 0x9AEB, 0xE99A, + 0x9AED, 0x9545, 0x9AEE, 0xE99B, 0x9AEF, 0xE999, 0x9AF1, 0xE99D, 0x9AF4, 0xE99C, 0x9AF7, 0xE99E, 0x9AFB, 0xE99F, 0x9B06, 0xE9A0, + 0x9B18, 0xE9A1, 0x9B1A, 0xE9A2, 0x9B1F, 0xE9A3, 0x9B22, 0xE9A4, 0x9B23, 0xE9A5, 0x9B25, 0xE9A6, 0x9B27, 0xE9A7, 0x9B28, 0xE9A8, + 0x9B29, 0xE9A9, 0x9B2A, 0xE9AA, 0x9B2E, 0xE9AB, 0x9B2F, 0xE9AC, 0x9B31, 0x9F54, 0x9B32, 0xE9AD, 0x9B3B, 0xE2F6, 0x9B3C, 0x8B53, + 0x9B41, 0x8A40, 0x9B42, 0x8DB0, 0x9B43, 0xE9AF, 0x9B44, 0xE9AE, 0x9B45, 0x96A3, 0x9B4D, 0xE9B1, 0x9B4E, 0xE9B2, 0x9B4F, 0xE9B0, + 0x9B51, 0xE9B3, 0x9B54, 0x9682, 0x9B58, 0xE9B4, 0x9B5A, 0x8B9B, 0x9B6F, 0x9844, 0x9B72, 0xFC42, 0x9B74, 0xE9B5, 0x9B75, 0xFC41, + 0x9B83, 0xE9B7, 0x9B8E, 0x88BC, 0x9B8F, 0xFC43, 0x9B91, 0xE9B8, 0x9B92, 0x95A9, 0x9B93, 0xE9B6, 0x9B96, 0xE9B9, 0x9B97, 0xE9BA, + 0x9B9F, 0xE9BB, 0x9BA0, 0xE9BC, 0x9BA8, 0xE9BD, 0x9BAA, 0x968E, 0x9BAB, 0x8E4C, 0x9BAD, 0x8DF8, 0x9BAE, 0x914E, 0x9BB1, 0xFC44, + 0x9BB4, 0xE9BE, 0x9BB9, 0xE9C1, 0x9BBB, 0xFC45, 0x9BC0, 0xE9BF, 0x9BC6, 0xE9C2, 0x9BC9, 0x8CEF, 0x9BCA, 0xE9C0, 0x9BCF, 0xE9C3, + 0x9BD1, 0xE9C4, 0x9BD2, 0xE9C5, 0x9BD4, 0xE9C9, 0x9BD6, 0x8E49, 0x9BDB, 0x91E2, 0x9BE1, 0xE9CA, 0x9BE2, 0xE9C7, 0x9BE3, 0xE9C6, + 0x9BE4, 0xE9C8, 0x9BE8, 0x8C7E, 0x9BF0, 0xE9CE, 0x9BF1, 0xE9CD, 0x9BF2, 0xE9CC, 0x9BF5, 0x88B1, 0x9C00, 0xFC46, 0x9C04, 0xE9D8, + 0x9C06, 0xE9D4, 0x9C08, 0xE9D5, 0x9C09, 0xE9D1, 0x9C0A, 0xE9D7, 0x9C0C, 0xE9D3, 0x9C0D, 0x8A82, 0x9C10, 0x986B, 0x9C12, 0xE9D6, + 0x9C13, 0xE9D2, 0x9C14, 0xE9D0, 0x9C15, 0xE9CF, 0x9C1B, 0xE9DA, 0x9C21, 0xE9DD, 0x9C24, 0xE9DC, 0x9C25, 0xE9DB, 0x9C2D, 0x9568, + 0x9C2E, 0xE9D9, 0x9C2F, 0x88F1, 0x9C30, 0xE9DE, 0x9C32, 0xE9E0, 0x9C39, 0x8A8F, 0x9C3A, 0xE9CB, 0x9C3B, 0x8956, 0x9C3E, 0xE9E2, + 0x9C46, 0xE9E1, 0x9C47, 0xE9DF, 0x9C48, 0x924C, 0x9C52, 0x9690, 0x9C57, 0x97D8, 0x9C5A, 0xE9E3, 0x9C60, 0xE9E4, 0x9C67, 0xE9E5, + 0x9C76, 0xE9E6, 0x9C78, 0xE9E7, 0x9CE5, 0x92B9, 0x9CE7, 0xE9E8, 0x9CE9, 0x94B5, 0x9CEB, 0xE9ED, 0x9CEC, 0xE9E9, 0x9CF0, 0xE9EA, + 0x9CF3, 0x9650, 0x9CF4, 0x96C2, 0x9CF6, 0x93CE, 0x9D03, 0xE9EE, 0x9D06, 0xE9EF, 0x9D07, 0x93BC, 0x9D08, 0xE9EC, 0x9D09, 0xE9EB, + 0x9D0E, 0x89A8, 0x9D12, 0xE9F7, 0x9D15, 0xE9F6, 0x9D1B, 0x8995, 0x9D1F, 0xE9F4, 0x9D23, 0xE9F3, 0x9D26, 0xE9F1, 0x9D28, 0x8A9B, + 0x9D2A, 0xE9F0, 0x9D2B, 0x8EB0, 0x9D2C, 0x89A7, 0x9D3B, 0x8D83, 0x9D3E, 0xE9FA, 0x9D3F, 0xE9F9, 0x9D41, 0xE9F8, 0x9D44, 0xE9F5, + 0x9D46, 0xE9FB, 0x9D48, 0xE9FC, 0x9D50, 0xEA44, 0x9D51, 0xEA43, 0x9D59, 0xEA45, 0x9D5C, 0x894C, 0x9D5D, 0xEA40, 0x9D5E, 0xEA41, + 0x9D60, 0x8D94, 0x9D61, 0x96B7, 0x9D64, 0xEA42, 0x9D6B, 0xFC48, 0x9D6C, 0x9651, 0x9D6F, 0xEA4A, 0x9D70, 0xFC47, 0x9D72, 0xEA46, + 0x9D7A, 0xEA4B, 0x9D87, 0xEA48, 0x9D89, 0xEA47, 0x9D8F, 0x8C7B, 0x9D9A, 0xEA4C, 0x9DA4, 0xEA4D, 0x9DA9, 0xEA4E, 0x9DAB, 0xEA49, + 0x9DAF, 0xE9F2, 0x9DB2, 0xEA4F, 0x9DB4, 0x92DF, 0x9DB8, 0xEA53, 0x9DBA, 0xEA54, 0x9DBB, 0xEA52, 0x9DC1, 0xEA51, 0x9DC2, 0xEA57, + 0x9DC4, 0xEA50, 0x9DC6, 0xEA55, 0x9DCF, 0xEA56, 0x9DD3, 0xEA59, 0x9DD9, 0xEA58, 0x9DE6, 0xEA5B, 0x9DED, 0xEA5C, 0x9DEF, 0xEA5D, + 0x9DF2, 0x9868, 0x9DF8, 0xEA5A, 0x9DF9, 0x91E9, 0x9DFA, 0x8DEB, 0x9DFD, 0xEA5E, 0x9E19, 0xFC4A, 0x9E1A, 0xEA5F, 0x9E1B, 0xEA60, + 0x9E1E, 0xEA61, 0x9E75, 0xEA62, 0x9E78, 0x8CB2, 0x9E79, 0xEA63, 0x9E7D, 0xEA64, 0x9E7F, 0x8EAD, 0x9E81, 0xEA65, 0x9E88, 0xEA66, + 0x9E8B, 0xEA67, 0x9E8C, 0xEA68, 0x9E91, 0xEA6B, 0x9E92, 0xEA69, 0x9E93, 0x985B, 0x9E95, 0xEA6A, 0x9E97, 0x97ED, 0x9E9D, 0xEA6C, + 0x9E9F, 0x97D9, 0x9EA5, 0xEA6D, 0x9EA6, 0x949E, 0x9EA9, 0xEA6E, 0x9EAA, 0xEA70, 0x9EAD, 0xEA71, 0x9EB8, 0xEA6F, 0x9EB9, 0x8D8D, + 0x9EBA, 0x96CB, 0x9EBB, 0x9683, 0x9EBC, 0x9BF5, 0x9EBE, 0x9F80, 0x9EBF, 0x969B, 0x9EC4, 0x89A9, 0x9ECC, 0xEA73, 0x9ECD, 0x8B6F, + 0x9ECE, 0xEA74, 0x9ECF, 0xEA75, 0x9ED0, 0xEA76, 0x9ED1, 0xFC4B, 0x9ED2, 0x8D95, 0x9ED4, 0xEA77, 0x9ED8, 0xE0D2, 0x9ED9, 0x96D9, + 0x9EDB, 0x91E1, 0x9EDC, 0xEA78, 0x9EDD, 0xEA7A, 0x9EDE, 0xEA79, 0x9EE0, 0xEA7B, 0x9EE5, 0xEA7C, 0x9EE8, 0xEA7D, 0x9EEF, 0xEA7E, + 0x9EF4, 0xEA80, 0x9EF6, 0xEA81, 0x9EF7, 0xEA82, 0x9EF9, 0xEA83, 0x9EFB, 0xEA84, 0x9EFC, 0xEA85, 0x9EFD, 0xEA86, 0x9F07, 0xEA87, + 0x9F08, 0xEA88, 0x9F0E, 0x9343, 0x9F13, 0x8CDB, 0x9F15, 0xEA8A, 0x9F20, 0x916C, 0x9F21, 0xEA8B, 0x9F2C, 0xEA8C, 0x9F3B, 0x9540, + 0x9F3E, 0xEA8D, 0x9F4A, 0xEA8E, 0x9F4B, 0xE256, 0x9F4E, 0xE6D8, 0x9F4F, 0xE8EB, 0x9F52, 0xEA8F, 0x9F54, 0xEA90, 0x9F5F, 0xEA92, + 0x9F60, 0xEA93, 0x9F61, 0xEA94, 0x9F62, 0x97EE, 0x9F63, 0xEA91, 0x9F66, 0xEA95, 0x9F67, 0xEA96, 0x9F6A, 0xEA98, 0x9F6C, 0xEA97, + 0x9F72, 0xEA9A, 0x9F76, 0xEA9B, 0x9F77, 0xEA99, 0x9F8D, 0x97B4, 0x9F95, 0xEA9C, 0x9F9C, 0xEA9D, 0x9F9D, 0xE273, 0x9FA0, 0xEA9E, + 0xF929, 0xFAE0, 0xF9DC, 0xFBE9, 0xFA0E, 0xFA90, 0xFA0F, 0xFA9B, 0xFA10, 0xFA9C, 0xFA11, 0xFAB1, 0xFA12, 0xFAD8, 0xFA13, 0xFAE8, + 0xFA14, 0xFAEA, 0xFA15, 0xFB58, 0xFA16, 0xFB5E, 0xFA17, 0xFB75, 0xFA18, 0xFB7D, 0xFA19, 0xFB7E, 0xFA1A, 0xFB80, 0xFA1B, 0xFB82, + 0xFA1C, 0xFB86, 0xFA1D, 0xFB89, 0xFA1E, 0xFB92, 0xFA1F, 0xFB9D, 0xFA20, 0xFB9F, 0xFA21, 0xFBA0, 0xFA22, 0xFBA9, 0xFA23, 0xFBB1, + 0xFA24, 0xFBB3, 0xFA25, 0xFBB4, 0xFA26, 0xFBB7, 0xFA27, 0xFBD3, 0xFA28, 0xFBDA, 0xFA29, 0xFBEA, 0xFA2A, 0xFBF6, 0xFA2B, 0xFBF7, + 0xFA2C, 0xFBF9, 0xFA2D, 0xFC49, 0xFF01, 0x8149, 0xFF02, 0xFA57, 0xFF03, 0x8194, 0xFF04, 0x8190, 0xFF05, 0x8193, 0xFF06, 0x8195, + 0xFF07, 0xFA56, 0xFF08, 0x8169, 0xFF09, 0x816A, 0xFF0A, 0x8196, 0xFF0B, 0x817B, 0xFF0C, 0x8143, 0xFF0D, 0x817C, 0xFF0E, 0x8144, + 0xFF0F, 0x815E, 0xFF10, 0x824F, 0xFF11, 0x8250, 0xFF12, 0x8251, 0xFF13, 0x8252, 0xFF14, 0x8253, 0xFF15, 0x8254, 0xFF16, 0x8255, + 0xFF17, 0x8256, 0xFF18, 0x8257, 0xFF19, 0x8258, 0xFF1A, 0x8146, 0xFF1B, 0x8147, 0xFF1C, 0x8183, 0xFF1D, 0x8181, 0xFF1E, 0x8184, + 0xFF1F, 0x8148, 0xFF20, 0x8197, 0xFF21, 0x8260, 0xFF22, 0x8261, 0xFF23, 0x8262, 0xFF24, 0x8263, 0xFF25, 0x8264, 0xFF26, 0x8265, + 0xFF27, 0x8266, 0xFF28, 0x8267, 0xFF29, 0x8268, 0xFF2A, 0x8269, 0xFF2B, 0x826A, 0xFF2C, 0x826B, 0xFF2D, 0x826C, 0xFF2E, 0x826D, + 0xFF2F, 0x826E, 0xFF30, 0x826F, 0xFF31, 0x8270, 0xFF32, 0x8271, 0xFF33, 0x8272, 0xFF34, 0x8273, 0xFF35, 0x8274, 0xFF36, 0x8275, + 0xFF37, 0x8276, 0xFF38, 0x8277, 0xFF39, 0x8278, 0xFF3A, 0x8279, 0xFF3B, 0x816D, 0xFF3C, 0x815F, 0xFF3D, 0x816E, 0xFF3E, 0x814F, + 0xFF3F, 0x8151, 0xFF40, 0x814D, 0xFF41, 0x8281, 0xFF42, 0x8282, 0xFF43, 0x8283, 0xFF44, 0x8284, 0xFF45, 0x8285, 0xFF46, 0x8286, + 0xFF47, 0x8287, 0xFF48, 0x8288, 0xFF49, 0x8289, 0xFF4A, 0x828A, 0xFF4B, 0x828B, 0xFF4C, 0x828C, 0xFF4D, 0x828D, 0xFF4E, 0x828E, + 0xFF4F, 0x828F, 0xFF50, 0x8290, 0xFF51, 0x8291, 0xFF52, 0x8292, 0xFF53, 0x8293, 0xFF54, 0x8294, 0xFF55, 0x8295, 0xFF56, 0x8296, + 0xFF57, 0x8297, 0xFF58, 0x8298, 0xFF59, 0x8299, 0xFF5A, 0x829A, 0xFF5B, 0x816F, 0xFF5C, 0x8162, 0xFF5D, 0x8170, 0xFF5E, 0x8160, + 0xFF61, 0x00A1, 0xFF62, 0x00A2, 0xFF63, 0x00A3, 0xFF64, 0x00A4, 0xFF65, 0x00A5, 0xFF66, 0x00A6, 0xFF67, 0x00A7, 0xFF68, 0x00A8, + 0xFF69, 0x00A9, 0xFF6A, 0x00AA, 0xFF6B, 0x00AB, 0xFF6C, 0x00AC, 0xFF6D, 0x00AD, 0xFF6E, 0x00AE, 0xFF6F, 0x00AF, 0xFF70, 0x00B0, + 0xFF71, 0x00B1, 0xFF72, 0x00B2, 0xFF73, 0x00B3, 0xFF74, 0x00B4, 0xFF75, 0x00B5, 0xFF76, 0x00B6, 0xFF77, 0x00B7, 0xFF78, 0x00B8, + 0xFF79, 0x00B9, 0xFF7A, 0x00BA, 0xFF7B, 0x00BB, 0xFF7C, 0x00BC, 0xFF7D, 0x00BD, 0xFF7E, 0x00BE, 0xFF7F, 0x00BF, 0xFF80, 0x00C0, + 0xFF81, 0x00C1, 0xFF82, 0x00C2, 0xFF83, 0x00C3, 0xFF84, 0x00C4, 0xFF85, 0x00C5, 0xFF86, 0x00C6, 0xFF87, 0x00C7, 0xFF88, 0x00C8, + 0xFF89, 0x00C9, 0xFF8A, 0x00CA, 0xFF8B, 0x00CB, 0xFF8C, 0x00CC, 0xFF8D, 0x00CD, 0xFF8E, 0x00CE, 0xFF8F, 0x00CF, 0xFF90, 0x00D0, + 0xFF91, 0x00D1, 0xFF92, 0x00D2, 0xFF93, 0x00D3, 0xFF94, 0x00D4, 0xFF95, 0x00D5, 0xFF96, 0x00D6, 0xFF97, 0x00D7, 0xFF98, 0x00D8, + 0xFF99, 0x00D9, 0xFF9A, 0x00DA, 0xFF9B, 0x00DB, 0xFF9C, 0x00DC, 0xFF9D, 0x00DD, 0xFF9E, 0x00DE, 0xFF9F, 0x00DF, 0xFFE0, 0x8191, + 0xFFE1, 0x8192, 0xFFE2, 0x81CA, 0xFFE3, 0x8150, 0xFFE4, 0xFA55, 0xFFE5, 0x818F, 0, 0 +}; + +static const WCHAR oem2uni932[] = { /* Shift_JIS --> Unicode pairs */ + 0x00A1, 0xFF61, 0x00A2, 0xFF62, 0x00A3, 0xFF63, 0x00A4, 0xFF64, 0x00A5, 0xFF65, 0x00A6, 0xFF66, 0x00A7, 0xFF67, 0x00A8, 0xFF68, + 0x00A9, 0xFF69, 0x00AA, 0xFF6A, 0x00AB, 0xFF6B, 0x00AC, 0xFF6C, 0x00AD, 0xFF6D, 0x00AE, 0xFF6E, 0x00AF, 0xFF6F, 0x00B0, 0xFF70, + 0x00B1, 0xFF71, 0x00B2, 0xFF72, 0x00B3, 0xFF73, 0x00B4, 0xFF74, 0x00B5, 0xFF75, 0x00B6, 0xFF76, 0x00B7, 0xFF77, 0x00B8, 0xFF78, + 0x00B9, 0xFF79, 0x00BA, 0xFF7A, 0x00BB, 0xFF7B, 0x00BC, 0xFF7C, 0x00BD, 0xFF7D, 0x00BE, 0xFF7E, 0x00BF, 0xFF7F, 0x00C0, 0xFF80, + 0x00C1, 0xFF81, 0x00C2, 0xFF82, 0x00C3, 0xFF83, 0x00C4, 0xFF84, 0x00C5, 0xFF85, 0x00C6, 0xFF86, 0x00C7, 0xFF87, 0x00C8, 0xFF88, + 0x00C9, 0xFF89, 0x00CA, 0xFF8A, 0x00CB, 0xFF8B, 0x00CC, 0xFF8C, 0x00CD, 0xFF8D, 0x00CE, 0xFF8E, 0x00CF, 0xFF8F, 0x00D0, 0xFF90, + 0x00D1, 0xFF91, 0x00D2, 0xFF92, 0x00D3, 0xFF93, 0x00D4, 0xFF94, 0x00D5, 0xFF95, 0x00D6, 0xFF96, 0x00D7, 0xFF97, 0x00D8, 0xFF98, + 0x00D9, 0xFF99, 0x00DA, 0xFF9A, 0x00DB, 0xFF9B, 0x00DC, 0xFF9C, 0x00DD, 0xFF9D, 0x00DE, 0xFF9E, 0x00DF, 0xFF9F, 0x8140, 0x3000, + 0x8141, 0x3001, 0x8142, 0x3002, 0x8143, 0xFF0C, 0x8144, 0xFF0E, 0x8145, 0x30FB, 0x8146, 0xFF1A, 0x8147, 0xFF1B, 0x8148, 0xFF1F, + 0x8149, 0xFF01, 0x814A, 0x309B, 0x814B, 0x309C, 0x814C, 0x00B4, 0x814D, 0xFF40, 0x814E, 0x00A8, 0x814F, 0xFF3E, 0x8150, 0xFFE3, + 0x8151, 0xFF3F, 0x8152, 0x30FD, 0x8153, 0x30FE, 0x8154, 0x309D, 0x8155, 0x309E, 0x8156, 0x3003, 0x8157, 0x4EDD, 0x8158, 0x3005, + 0x8159, 0x3006, 0x815A, 0x3007, 0x815B, 0x30FC, 0x815C, 0x2015, 0x815D, 0x2010, 0x815E, 0xFF0F, 0x815F, 0xFF3C, 0x8160, 0xFF5E, + 0x8161, 0x2225, 0x8162, 0xFF5C, 0x8163, 0x2026, 0x8164, 0x2025, 0x8165, 0x2018, 0x8166, 0x2019, 0x8167, 0x201C, 0x8168, 0x201D, + 0x8169, 0xFF08, 0x816A, 0xFF09, 0x816B, 0x3014, 0x816C, 0x3015, 0x816D, 0xFF3B, 0x816E, 0xFF3D, 0x816F, 0xFF5B, 0x8170, 0xFF5D, + 0x8171, 0x3008, 0x8172, 0x3009, 0x8173, 0x300A, 0x8174, 0x300B, 0x8175, 0x300C, 0x8176, 0x300D, 0x8177, 0x300E, 0x8178, 0x300F, + 0x8179, 0x3010, 0x817A, 0x3011, 0x817B, 0xFF0B, 0x817C, 0xFF0D, 0x817D, 0x00B1, 0x817E, 0x00D7, 0x8180, 0x00F7, 0x8181, 0xFF1D, + 0x8182, 0x2260, 0x8183, 0xFF1C, 0x8184, 0xFF1E, 0x8185, 0x2266, 0x8186, 0x2267, 0x8187, 0x221E, 0x8188, 0x2234, 0x8189, 0x2642, + 0x818A, 0x2640, 0x818B, 0x00B0, 0x818C, 0x2032, 0x818D, 0x2033, 0x818E, 0x2103, 0x818F, 0xFFE5, 0x8190, 0xFF04, 0x8191, 0xFFE0, + 0x8192, 0xFFE1, 0x8193, 0xFF05, 0x8194, 0xFF03, 0x8195, 0xFF06, 0x8196, 0xFF0A, 0x8197, 0xFF20, 0x8198, 0x00A7, 0x8199, 0x2606, + 0x819A, 0x2605, 0x819B, 0x25CB, 0x819C, 0x25CF, 0x819D, 0x25CE, 0x819E, 0x25C7, 0x819F, 0x25C6, 0x81A0, 0x25A1, 0x81A1, 0x25A0, + 0x81A2, 0x25B3, 0x81A3, 0x25B2, 0x81A4, 0x25BD, 0x81A5, 0x25BC, 0x81A6, 0x203B, 0x81A7, 0x3012, 0x81A8, 0x2192, 0x81A9, 0x2190, + 0x81AA, 0x2191, 0x81AB, 0x2193, 0x81AC, 0x3013, 0x81B8, 0x2208, 0x81B9, 0x220B, 0x81BA, 0x2286, 0x81BB, 0x2287, 0x81BC, 0x2282, + 0x81BD, 0x2283, 0x81BE, 0x222A, 0x81BF, 0x2229, 0x81C8, 0x2227, 0x81C9, 0x2228, 0x81CA, 0xFFE2, 0x81CB, 0x21D2, 0x81CC, 0x21D4, + 0x81CD, 0x2200, 0x81CE, 0x2203, 0x81DA, 0x2220, 0x81DB, 0x22A5, 0x81DC, 0x2312, 0x81DD, 0x2202, 0x81DE, 0x2207, 0x81DF, 0x2261, + 0x81E0, 0x2252, 0x81E1, 0x226A, 0x81E2, 0x226B, 0x81E3, 0x221A, 0x81E4, 0x223D, 0x81E5, 0x221D, 0x81E6, 0x2235, 0x81E7, 0x222B, + 0x81E8, 0x222C, 0x81F0, 0x212B, 0x81F1, 0x2030, 0x81F2, 0x266F, 0x81F3, 0x266D, 0x81F4, 0x266A, 0x81F5, 0x2020, 0x81F6, 0x2021, + 0x81F7, 0x00B6, 0x81FC, 0x25EF, 0x824F, 0xFF10, 0x8250, 0xFF11, 0x8251, 0xFF12, 0x8252, 0xFF13, 0x8253, 0xFF14, 0x8254, 0xFF15, + 0x8255, 0xFF16, 0x8256, 0xFF17, 0x8257, 0xFF18, 0x8258, 0xFF19, 0x8260, 0xFF21, 0x8261, 0xFF22, 0x8262, 0xFF23, 0x8263, 0xFF24, + 0x8264, 0xFF25, 0x8265, 0xFF26, 0x8266, 0xFF27, 0x8267, 0xFF28, 0x8268, 0xFF29, 0x8269, 0xFF2A, 0x826A, 0xFF2B, 0x826B, 0xFF2C, + 0x826C, 0xFF2D, 0x826D, 0xFF2E, 0x826E, 0xFF2F, 0x826F, 0xFF30, 0x8270, 0xFF31, 0x8271, 0xFF32, 0x8272, 0xFF33, 0x8273, 0xFF34, + 0x8274, 0xFF35, 0x8275, 0xFF36, 0x8276, 0xFF37, 0x8277, 0xFF38, 0x8278, 0xFF39, 0x8279, 0xFF3A, 0x8281, 0xFF41, 0x8282, 0xFF42, + 0x8283, 0xFF43, 0x8284, 0xFF44, 0x8285, 0xFF45, 0x8286, 0xFF46, 0x8287, 0xFF47, 0x8288, 0xFF48, 0x8289, 0xFF49, 0x828A, 0xFF4A, + 0x828B, 0xFF4B, 0x828C, 0xFF4C, 0x828D, 0xFF4D, 0x828E, 0xFF4E, 0x828F, 0xFF4F, 0x8290, 0xFF50, 0x8291, 0xFF51, 0x8292, 0xFF52, + 0x8293, 0xFF53, 0x8294, 0xFF54, 0x8295, 0xFF55, 0x8296, 0xFF56, 0x8297, 0xFF57, 0x8298, 0xFF58, 0x8299, 0xFF59, 0x829A, 0xFF5A, + 0x829F, 0x3041, 0x82A0, 0x3042, 0x82A1, 0x3043, 0x82A2, 0x3044, 0x82A3, 0x3045, 0x82A4, 0x3046, 0x82A5, 0x3047, 0x82A6, 0x3048, + 0x82A7, 0x3049, 0x82A8, 0x304A, 0x82A9, 0x304B, 0x82AA, 0x304C, 0x82AB, 0x304D, 0x82AC, 0x304E, 0x82AD, 0x304F, 0x82AE, 0x3050, + 0x82AF, 0x3051, 0x82B0, 0x3052, 0x82B1, 0x3053, 0x82B2, 0x3054, 0x82B3, 0x3055, 0x82B4, 0x3056, 0x82B5, 0x3057, 0x82B6, 0x3058, + 0x82B7, 0x3059, 0x82B8, 0x305A, 0x82B9, 0x305B, 0x82BA, 0x305C, 0x82BB, 0x305D, 0x82BC, 0x305E, 0x82BD, 0x305F, 0x82BE, 0x3060, + 0x82BF, 0x3061, 0x82C0, 0x3062, 0x82C1, 0x3063, 0x82C2, 0x3064, 0x82C3, 0x3065, 0x82C4, 0x3066, 0x82C5, 0x3067, 0x82C6, 0x3068, + 0x82C7, 0x3069, 0x82C8, 0x306A, 0x82C9, 0x306B, 0x82CA, 0x306C, 0x82CB, 0x306D, 0x82CC, 0x306E, 0x82CD, 0x306F, 0x82CE, 0x3070, + 0x82CF, 0x3071, 0x82D0, 0x3072, 0x82D1, 0x3073, 0x82D2, 0x3074, 0x82D3, 0x3075, 0x82D4, 0x3076, 0x82D5, 0x3077, 0x82D6, 0x3078, + 0x82D7, 0x3079, 0x82D8, 0x307A, 0x82D9, 0x307B, 0x82DA, 0x307C, 0x82DB, 0x307D, 0x82DC, 0x307E, 0x82DD, 0x307F, 0x82DE, 0x3080, + 0x82DF, 0x3081, 0x82E0, 0x3082, 0x82E1, 0x3083, 0x82E2, 0x3084, 0x82E3, 0x3085, 0x82E4, 0x3086, 0x82E5, 0x3087, 0x82E6, 0x3088, + 0x82E7, 0x3089, 0x82E8, 0x308A, 0x82E9, 0x308B, 0x82EA, 0x308C, 0x82EB, 0x308D, 0x82EC, 0x308E, 0x82ED, 0x308F, 0x82EE, 0x3090, + 0x82EF, 0x3091, 0x82F0, 0x3092, 0x82F1, 0x3093, 0x8340, 0x30A1, 0x8341, 0x30A2, 0x8342, 0x30A3, 0x8343, 0x30A4, 0x8344, 0x30A5, + 0x8345, 0x30A6, 0x8346, 0x30A7, 0x8347, 0x30A8, 0x8348, 0x30A9, 0x8349, 0x30AA, 0x834A, 0x30AB, 0x834B, 0x30AC, 0x834C, 0x30AD, + 0x834D, 0x30AE, 0x834E, 0x30AF, 0x834F, 0x30B0, 0x8350, 0x30B1, 0x8351, 0x30B2, 0x8352, 0x30B3, 0x8353, 0x30B4, 0x8354, 0x30B5, + 0x8355, 0x30B6, 0x8356, 0x30B7, 0x8357, 0x30B8, 0x8358, 0x30B9, 0x8359, 0x30BA, 0x835A, 0x30BB, 0x835B, 0x30BC, 0x835C, 0x30BD, + 0x835D, 0x30BE, 0x835E, 0x30BF, 0x835F, 0x30C0, 0x8360, 0x30C1, 0x8361, 0x30C2, 0x8362, 0x30C3, 0x8363, 0x30C4, 0x8364, 0x30C5, + 0x8365, 0x30C6, 0x8366, 0x30C7, 0x8367, 0x30C8, 0x8368, 0x30C9, 0x8369, 0x30CA, 0x836A, 0x30CB, 0x836B, 0x30CC, 0x836C, 0x30CD, + 0x836D, 0x30CE, 0x836E, 0x30CF, 0x836F, 0x30D0, 0x8370, 0x30D1, 0x8371, 0x30D2, 0x8372, 0x30D3, 0x8373, 0x30D4, 0x8374, 0x30D5, + 0x8375, 0x30D6, 0x8376, 0x30D7, 0x8377, 0x30D8, 0x8378, 0x30D9, 0x8379, 0x30DA, 0x837A, 0x30DB, 0x837B, 0x30DC, 0x837C, 0x30DD, + 0x837D, 0x30DE, 0x837E, 0x30DF, 0x8380, 0x30E0, 0x8381, 0x30E1, 0x8382, 0x30E2, 0x8383, 0x30E3, 0x8384, 0x30E4, 0x8385, 0x30E5, + 0x8386, 0x30E6, 0x8387, 0x30E7, 0x8388, 0x30E8, 0x8389, 0x30E9, 0x838A, 0x30EA, 0x838B, 0x30EB, 0x838C, 0x30EC, 0x838D, 0x30ED, + 0x838E, 0x30EE, 0x838F, 0x30EF, 0x8390, 0x30F0, 0x8391, 0x30F1, 0x8392, 0x30F2, 0x8393, 0x30F3, 0x8394, 0x30F4, 0x8395, 0x30F5, + 0x8396, 0x30F6, 0x839F, 0x0391, 0x83A0, 0x0392, 0x83A1, 0x0393, 0x83A2, 0x0394, 0x83A3, 0x0395, 0x83A4, 0x0396, 0x83A5, 0x0397, + 0x83A6, 0x0398, 0x83A7, 0x0399, 0x83A8, 0x039A, 0x83A9, 0x039B, 0x83AA, 0x039C, 0x83AB, 0x039D, 0x83AC, 0x039E, 0x83AD, 0x039F, + 0x83AE, 0x03A0, 0x83AF, 0x03A1, 0x83B0, 0x03A3, 0x83B1, 0x03A4, 0x83B2, 0x03A5, 0x83B3, 0x03A6, 0x83B4, 0x03A7, 0x83B5, 0x03A8, + 0x83B6, 0x03A9, 0x83BF, 0x03B1, 0x83C0, 0x03B2, 0x83C1, 0x03B3, 0x83C2, 0x03B4, 0x83C3, 0x03B5, 0x83C4, 0x03B6, 0x83C5, 0x03B7, + 0x83C6, 0x03B8, 0x83C7, 0x03B9, 0x83C8, 0x03BA, 0x83C9, 0x03BB, 0x83CA, 0x03BC, 0x83CB, 0x03BD, 0x83CC, 0x03BE, 0x83CD, 0x03BF, + 0x83CE, 0x03C0, 0x83CF, 0x03C1, 0x83D0, 0x03C3, 0x83D1, 0x03C4, 0x83D2, 0x03C5, 0x83D3, 0x03C6, 0x83D4, 0x03C7, 0x83D5, 0x03C8, + 0x83D6, 0x03C9, 0x8440, 0x0410, 0x8441, 0x0411, 0x8442, 0x0412, 0x8443, 0x0413, 0x8444, 0x0414, 0x8445, 0x0415, 0x8446, 0x0401, + 0x8447, 0x0416, 0x8448, 0x0417, 0x8449, 0x0418, 0x844A, 0x0419, 0x844B, 0x041A, 0x844C, 0x041B, 0x844D, 0x041C, 0x844E, 0x041D, + 0x844F, 0x041E, 0x8450, 0x041F, 0x8451, 0x0420, 0x8452, 0x0421, 0x8453, 0x0422, 0x8454, 0x0423, 0x8455, 0x0424, 0x8456, 0x0425, + 0x8457, 0x0426, 0x8458, 0x0427, 0x8459, 0x0428, 0x845A, 0x0429, 0x845B, 0x042A, 0x845C, 0x042B, 0x845D, 0x042C, 0x845E, 0x042D, + 0x845F, 0x042E, 0x8460, 0x042F, 0x8470, 0x0430, 0x8471, 0x0431, 0x8472, 0x0432, 0x8473, 0x0433, 0x8474, 0x0434, 0x8475, 0x0435, + 0x8476, 0x0451, 0x8477, 0x0436, 0x8478, 0x0437, 0x8479, 0x0438, 0x847A, 0x0439, 0x847B, 0x043A, 0x847C, 0x043B, 0x847D, 0x043C, + 0x847E, 0x043D, 0x8480, 0x043E, 0x8481, 0x043F, 0x8482, 0x0440, 0x8483, 0x0441, 0x8484, 0x0442, 0x8485, 0x0443, 0x8486, 0x0444, + 0x8487, 0x0445, 0x8488, 0x0446, 0x8489, 0x0447, 0x848A, 0x0448, 0x848B, 0x0449, 0x848C, 0x044A, 0x848D, 0x044B, 0x848E, 0x044C, + 0x848F, 0x044D, 0x8490, 0x044E, 0x8491, 0x044F, 0x849F, 0x2500, 0x84A0, 0x2502, 0x84A1, 0x250C, 0x84A2, 0x2510, 0x84A3, 0x2518, + 0x84A4, 0x2514, 0x84A5, 0x251C, 0x84A6, 0x252C, 0x84A7, 0x2524, 0x84A8, 0x2534, 0x84A9, 0x253C, 0x84AA, 0x2501, 0x84AB, 0x2503, + 0x84AC, 0x250F, 0x84AD, 0x2513, 0x84AE, 0x251B, 0x84AF, 0x2517, 0x84B0, 0x2523, 0x84B1, 0x2533, 0x84B2, 0x252B, 0x84B3, 0x253B, + 0x84B4, 0x254B, 0x84B5, 0x2520, 0x84B6, 0x252F, 0x84B7, 0x2528, 0x84B8, 0x2537, 0x84B9, 0x253F, 0x84BA, 0x251D, 0x84BB, 0x2530, + 0x84BC, 0x2525, 0x84BD, 0x2538, 0x84BE, 0x2542, 0x8740, 0x2460, 0x8741, 0x2461, 0x8742, 0x2462, 0x8743, 0x2463, 0x8744, 0x2464, + 0x8745, 0x2465, 0x8746, 0x2466, 0x8747, 0x2467, 0x8748, 0x2468, 0x8749, 0x2469, 0x874A, 0x246A, 0x874B, 0x246B, 0x874C, 0x246C, + 0x874D, 0x246D, 0x874E, 0x246E, 0x874F, 0x246F, 0x8750, 0x2470, 0x8751, 0x2471, 0x8752, 0x2472, 0x8753, 0x2473, 0x8754, 0x2160, + 0x8755, 0x2161, 0x8756, 0x2162, 0x8757, 0x2163, 0x8758, 0x2164, 0x8759, 0x2165, 0x875A, 0x2166, 0x875B, 0x2167, 0x875C, 0x2168, + 0x875D, 0x2169, 0x875F, 0x3349, 0x8760, 0x3314, 0x8761, 0x3322, 0x8762, 0x334D, 0x8763, 0x3318, 0x8764, 0x3327, 0x8765, 0x3303, + 0x8766, 0x3336, 0x8767, 0x3351, 0x8768, 0x3357, 0x8769, 0x330D, 0x876A, 0x3326, 0x876B, 0x3323, 0x876C, 0x332B, 0x876D, 0x334A, + 0x876E, 0x333B, 0x876F, 0x339C, 0x8770, 0x339D, 0x8771, 0x339E, 0x8772, 0x338E, 0x8773, 0x338F, 0x8774, 0x33C4, 0x8775, 0x33A1, + 0x877E, 0x337B, 0x8780, 0x301D, 0x8781, 0x301F, 0x8782, 0x2116, 0x8783, 0x33CD, 0x8784, 0x2121, 0x8785, 0x32A4, 0x8786, 0x32A5, + 0x8787, 0x32A6, 0x8788, 0x32A7, 0x8789, 0x32A8, 0x878A, 0x3231, 0x878B, 0x3232, 0x878C, 0x3239, 0x878D, 0x337E, 0x878E, 0x337D, + 0x878F, 0x337C, 0x8793, 0x222E, 0x8794, 0x2211, 0x8798, 0x221F, 0x8799, 0x22BF, 0x889F, 0x4E9C, 0x88A0, 0x5516, 0x88A1, 0x5A03, + 0x88A2, 0x963F, 0x88A3, 0x54C0, 0x88A4, 0x611B, 0x88A5, 0x6328, 0x88A6, 0x59F6, 0x88A7, 0x9022, 0x88A8, 0x8475, 0x88A9, 0x831C, + 0x88AA, 0x7A50, 0x88AB, 0x60AA, 0x88AC, 0x63E1, 0x88AD, 0x6E25, 0x88AE, 0x65ED, 0x88AF, 0x8466, 0x88B0, 0x82A6, 0x88B1, 0x9BF5, + 0x88B2, 0x6893, 0x88B3, 0x5727, 0x88B4, 0x65A1, 0x88B5, 0x6271, 0x88B6, 0x5B9B, 0x88B7, 0x59D0, 0x88B8, 0x867B, 0x88B9, 0x98F4, + 0x88BA, 0x7D62, 0x88BB, 0x7DBE, 0x88BC, 0x9B8E, 0x88BD, 0x6216, 0x88BE, 0x7C9F, 0x88BF, 0x88B7, 0x88C0, 0x5B89, 0x88C1, 0x5EB5, + 0x88C2, 0x6309, 0x88C3, 0x6697, 0x88C4, 0x6848, 0x88C5, 0x95C7, 0x88C6, 0x978D, 0x88C7, 0x674F, 0x88C8, 0x4EE5, 0x88C9, 0x4F0A, + 0x88CA, 0x4F4D, 0x88CB, 0x4F9D, 0x88CC, 0x5049, 0x88CD, 0x56F2, 0x88CE, 0x5937, 0x88CF, 0x59D4, 0x88D0, 0x5A01, 0x88D1, 0x5C09, + 0x88D2, 0x60DF, 0x88D3, 0x610F, 0x88D4, 0x6170, 0x88D5, 0x6613, 0x88D6, 0x6905, 0x88D7, 0x70BA, 0x88D8, 0x754F, 0x88D9, 0x7570, + 0x88DA, 0x79FB, 0x88DB, 0x7DAD, 0x88DC, 0x7DEF, 0x88DD, 0x80C3, 0x88DE, 0x840E, 0x88DF, 0x8863, 0x88E0, 0x8B02, 0x88E1, 0x9055, + 0x88E2, 0x907A, 0x88E3, 0x533B, 0x88E4, 0x4E95, 0x88E5, 0x4EA5, 0x88E6, 0x57DF, 0x88E7, 0x80B2, 0x88E8, 0x90C1, 0x88E9, 0x78EF, + 0x88EA, 0x4E00, 0x88EB, 0x58F1, 0x88EC, 0x6EA2, 0x88ED, 0x9038, 0x88EE, 0x7A32, 0x88EF, 0x8328, 0x88F0, 0x828B, 0x88F1, 0x9C2F, + 0x88F2, 0x5141, 0x88F3, 0x5370, 0x88F4, 0x54BD, 0x88F5, 0x54E1, 0x88F6, 0x56E0, 0x88F7, 0x59FB, 0x88F8, 0x5F15, 0x88F9, 0x98F2, + 0x88FA, 0x6DEB, 0x88FB, 0x80E4, 0x88FC, 0x852D, 0x8940, 0x9662, 0x8941, 0x9670, 0x8942, 0x96A0, 0x8943, 0x97FB, 0x8944, 0x540B, + 0x8945, 0x53F3, 0x8946, 0x5B87, 0x8947, 0x70CF, 0x8948, 0x7FBD, 0x8949, 0x8FC2, 0x894A, 0x96E8, 0x894B, 0x536F, 0x894C, 0x9D5C, + 0x894D, 0x7ABA, 0x894E, 0x4E11, 0x894F, 0x7893, 0x8950, 0x81FC, 0x8951, 0x6E26, 0x8952, 0x5618, 0x8953, 0x5504, 0x8954, 0x6B1D, + 0x8955, 0x851A, 0x8956, 0x9C3B, 0x8957, 0x59E5, 0x8958, 0x53A9, 0x8959, 0x6D66, 0x895A, 0x74DC, 0x895B, 0x958F, 0x895C, 0x5642, + 0x895D, 0x4E91, 0x895E, 0x904B, 0x895F, 0x96F2, 0x8960, 0x834F, 0x8961, 0x990C, 0x8962, 0x53E1, 0x8963, 0x55B6, 0x8964, 0x5B30, + 0x8965, 0x5F71, 0x8966, 0x6620, 0x8967, 0x66F3, 0x8968, 0x6804, 0x8969, 0x6C38, 0x896A, 0x6CF3, 0x896B, 0x6D29, 0x896C, 0x745B, + 0x896D, 0x76C8, 0x896E, 0x7A4E, 0x896F, 0x9834, 0x8970, 0x82F1, 0x8971, 0x885B, 0x8972, 0x8A60, 0x8973, 0x92ED, 0x8974, 0x6DB2, + 0x8975, 0x75AB, 0x8976, 0x76CA, 0x8977, 0x99C5, 0x8978, 0x60A6, 0x8979, 0x8B01, 0x897A, 0x8D8A, 0x897B, 0x95B2, 0x897C, 0x698E, + 0x897D, 0x53AD, 0x897E, 0x5186, 0x8980, 0x5712, 0x8981, 0x5830, 0x8982, 0x5944, 0x8983, 0x5BB4, 0x8984, 0x5EF6, 0x8985, 0x6028, + 0x8986, 0x63A9, 0x8987, 0x63F4, 0x8988, 0x6CBF, 0x8989, 0x6F14, 0x898A, 0x708E, 0x898B, 0x7114, 0x898C, 0x7159, 0x898D, 0x71D5, + 0x898E, 0x733F, 0x898F, 0x7E01, 0x8990, 0x8276, 0x8991, 0x82D1, 0x8992, 0x8597, 0x8993, 0x9060, 0x8994, 0x925B, 0x8995, 0x9D1B, + 0x8996, 0x5869, 0x8997, 0x65BC, 0x8998, 0x6C5A, 0x8999, 0x7525, 0x899A, 0x51F9, 0x899B, 0x592E, 0x899C, 0x5965, 0x899D, 0x5F80, + 0x899E, 0x5FDC, 0x899F, 0x62BC, 0x89A0, 0x65FA, 0x89A1, 0x6A2A, 0x89A2, 0x6B27, 0x89A3, 0x6BB4, 0x89A4, 0x738B, 0x89A5, 0x7FC1, + 0x89A6, 0x8956, 0x89A7, 0x9D2C, 0x89A8, 0x9D0E, 0x89A9, 0x9EC4, 0x89AA, 0x5CA1, 0x89AB, 0x6C96, 0x89AC, 0x837B, 0x89AD, 0x5104, + 0x89AE, 0x5C4B, 0x89AF, 0x61B6, 0x89B0, 0x81C6, 0x89B1, 0x6876, 0x89B2, 0x7261, 0x89B3, 0x4E59, 0x89B4, 0x4FFA, 0x89B5, 0x5378, + 0x89B6, 0x6069, 0x89B7, 0x6E29, 0x89B8, 0x7A4F, 0x89B9, 0x97F3, 0x89BA, 0x4E0B, 0x89BB, 0x5316, 0x89BC, 0x4EEE, 0x89BD, 0x4F55, + 0x89BE, 0x4F3D, 0x89BF, 0x4FA1, 0x89C0, 0x4F73, 0x89C1, 0x52A0, 0x89C2, 0x53EF, 0x89C3, 0x5609, 0x89C4, 0x590F, 0x89C5, 0x5AC1, + 0x89C6, 0x5BB6, 0x89C7, 0x5BE1, 0x89C8, 0x79D1, 0x89C9, 0x6687, 0x89CA, 0x679C, 0x89CB, 0x67B6, 0x89CC, 0x6B4C, 0x89CD, 0x6CB3, + 0x89CE, 0x706B, 0x89CF, 0x73C2, 0x89D0, 0x798D, 0x89D1, 0x79BE, 0x89D2, 0x7A3C, 0x89D3, 0x7B87, 0x89D4, 0x82B1, 0x89D5, 0x82DB, + 0x89D6, 0x8304, 0x89D7, 0x8377, 0x89D8, 0x83EF, 0x89D9, 0x83D3, 0x89DA, 0x8766, 0x89DB, 0x8AB2, 0x89DC, 0x5629, 0x89DD, 0x8CA8, + 0x89DE, 0x8FE6, 0x89DF, 0x904E, 0x89E0, 0x971E, 0x89E1, 0x868A, 0x89E2, 0x4FC4, 0x89E3, 0x5CE8, 0x89E4, 0x6211, 0x89E5, 0x7259, + 0x89E6, 0x753B, 0x89E7, 0x81E5, 0x89E8, 0x82BD, 0x89E9, 0x86FE, 0x89EA, 0x8CC0, 0x89EB, 0x96C5, 0x89EC, 0x9913, 0x89ED, 0x99D5, + 0x89EE, 0x4ECB, 0x89EF, 0x4F1A, 0x89F0, 0x89E3, 0x89F1, 0x56DE, 0x89F2, 0x584A, 0x89F3, 0x58CA, 0x89F4, 0x5EFB, 0x89F5, 0x5FEB, + 0x89F6, 0x602A, 0x89F7, 0x6094, 0x89F8, 0x6062, 0x89F9, 0x61D0, 0x89FA, 0x6212, 0x89FB, 0x62D0, 0x89FC, 0x6539, 0x8A40, 0x9B41, + 0x8A41, 0x6666, 0x8A42, 0x68B0, 0x8A43, 0x6D77, 0x8A44, 0x7070, 0x8A45, 0x754C, 0x8A46, 0x7686, 0x8A47, 0x7D75, 0x8A48, 0x82A5, + 0x8A49, 0x87F9, 0x8A4A, 0x958B, 0x8A4B, 0x968E, 0x8A4C, 0x8C9D, 0x8A4D, 0x51F1, 0x8A4E, 0x52BE, 0x8A4F, 0x5916, 0x8A50, 0x54B3, + 0x8A51, 0x5BB3, 0x8A52, 0x5D16, 0x8A53, 0x6168, 0x8A54, 0x6982, 0x8A55, 0x6DAF, 0x8A56, 0x788D, 0x8A57, 0x84CB, 0x8A58, 0x8857, + 0x8A59, 0x8A72, 0x8A5A, 0x93A7, 0x8A5B, 0x9AB8, 0x8A5C, 0x6D6C, 0x8A5D, 0x99A8, 0x8A5E, 0x86D9, 0x8A5F, 0x57A3, 0x8A60, 0x67FF, + 0x8A61, 0x86CE, 0x8A62, 0x920E, 0x8A63, 0x5283, 0x8A64, 0x5687, 0x8A65, 0x5404, 0x8A66, 0x5ED3, 0x8A67, 0x62E1, 0x8A68, 0x64B9, + 0x8A69, 0x683C, 0x8A6A, 0x6838, 0x8A6B, 0x6BBB, 0x8A6C, 0x7372, 0x8A6D, 0x78BA, 0x8A6E, 0x7A6B, 0x8A6F, 0x899A, 0x8A70, 0x89D2, + 0x8A71, 0x8D6B, 0x8A72, 0x8F03, 0x8A73, 0x90ED, 0x8A74, 0x95A3, 0x8A75, 0x9694, 0x8A76, 0x9769, 0x8A77, 0x5B66, 0x8A78, 0x5CB3, + 0x8A79, 0x697D, 0x8A7A, 0x984D, 0x8A7B, 0x984E, 0x8A7C, 0x639B, 0x8A7D, 0x7B20, 0x8A7E, 0x6A2B, 0x8A80, 0x6A7F, 0x8A81, 0x68B6, + 0x8A82, 0x9C0D, 0x8A83, 0x6F5F, 0x8A84, 0x5272, 0x8A85, 0x559D, 0x8A86, 0x6070, 0x8A87, 0x62EC, 0x8A88, 0x6D3B, 0x8A89, 0x6E07, + 0x8A8A, 0x6ED1, 0x8A8B, 0x845B, 0x8A8C, 0x8910, 0x8A8D, 0x8F44, 0x8A8E, 0x4E14, 0x8A8F, 0x9C39, 0x8A90, 0x53F6, 0x8A91, 0x691B, + 0x8A92, 0x6A3A, 0x8A93, 0x9784, 0x8A94, 0x682A, 0x8A95, 0x515C, 0x8A96, 0x7AC3, 0x8A97, 0x84B2, 0x8A98, 0x91DC, 0x8A99, 0x938C, + 0x8A9A, 0x565B, 0x8A9B, 0x9D28, 0x8A9C, 0x6822, 0x8A9D, 0x8305, 0x8A9E, 0x8431, 0x8A9F, 0x7CA5, 0x8AA0, 0x5208, 0x8AA1, 0x82C5, + 0x8AA2, 0x74E6, 0x8AA3, 0x4E7E, 0x8AA4, 0x4F83, 0x8AA5, 0x51A0, 0x8AA6, 0x5BD2, 0x8AA7, 0x520A, 0x8AA8, 0x52D8, 0x8AA9, 0x52E7, + 0x8AAA, 0x5DFB, 0x8AAB, 0x559A, 0x8AAC, 0x582A, 0x8AAD, 0x59E6, 0x8AAE, 0x5B8C, 0x8AAF, 0x5B98, 0x8AB0, 0x5BDB, 0x8AB1, 0x5E72, + 0x8AB2, 0x5E79, 0x8AB3, 0x60A3, 0x8AB4, 0x611F, 0x8AB5, 0x6163, 0x8AB6, 0x61BE, 0x8AB7, 0x63DB, 0x8AB8, 0x6562, 0x8AB9, 0x67D1, + 0x8ABA, 0x6853, 0x8ABB, 0x68FA, 0x8ABC, 0x6B3E, 0x8ABD, 0x6B53, 0x8ABE, 0x6C57, 0x8ABF, 0x6F22, 0x8AC0, 0x6F97, 0x8AC1, 0x6F45, + 0x8AC2, 0x74B0, 0x8AC3, 0x7518, 0x8AC4, 0x76E3, 0x8AC5, 0x770B, 0x8AC6, 0x7AFF, 0x8AC7, 0x7BA1, 0x8AC8, 0x7C21, 0x8AC9, 0x7DE9, + 0x8ACA, 0x7F36, 0x8ACB, 0x7FF0, 0x8ACC, 0x809D, 0x8ACD, 0x8266, 0x8ACE, 0x839E, 0x8ACF, 0x89B3, 0x8AD0, 0x8ACC, 0x8AD1, 0x8CAB, + 0x8AD2, 0x9084, 0x8AD3, 0x9451, 0x8AD4, 0x9593, 0x8AD5, 0x9591, 0x8AD6, 0x95A2, 0x8AD7, 0x9665, 0x8AD8, 0x97D3, 0x8AD9, 0x9928, + 0x8ADA, 0x8218, 0x8ADB, 0x4E38, 0x8ADC, 0x542B, 0x8ADD, 0x5CB8, 0x8ADE, 0x5DCC, 0x8ADF, 0x73A9, 0x8AE0, 0x764C, 0x8AE1, 0x773C, + 0x8AE2, 0x5CA9, 0x8AE3, 0x7FEB, 0x8AE4, 0x8D0B, 0x8AE5, 0x96C1, 0x8AE6, 0x9811, 0x8AE7, 0x9854, 0x8AE8, 0x9858, 0x8AE9, 0x4F01, + 0x8AEA, 0x4F0E, 0x8AEB, 0x5371, 0x8AEC, 0x559C, 0x8AED, 0x5668, 0x8AEE, 0x57FA, 0x8AEF, 0x5947, 0x8AF0, 0x5B09, 0x8AF1, 0x5BC4, + 0x8AF2, 0x5C90, 0x8AF3, 0x5E0C, 0x8AF4, 0x5E7E, 0x8AF5, 0x5FCC, 0x8AF6, 0x63EE, 0x8AF7, 0x673A, 0x8AF8, 0x65D7, 0x8AF9, 0x65E2, + 0x8AFA, 0x671F, 0x8AFB, 0x68CB, 0x8AFC, 0x68C4, 0x8B40, 0x6A5F, 0x8B41, 0x5E30, 0x8B42, 0x6BC5, 0x8B43, 0x6C17, 0x8B44, 0x6C7D, + 0x8B45, 0x757F, 0x8B46, 0x7948, 0x8B47, 0x5B63, 0x8B48, 0x7A00, 0x8B49, 0x7D00, 0x8B4A, 0x5FBD, 0x8B4B, 0x898F, 0x8B4C, 0x8A18, + 0x8B4D, 0x8CB4, 0x8B4E, 0x8D77, 0x8B4F, 0x8ECC, 0x8B50, 0x8F1D, 0x8B51, 0x98E2, 0x8B52, 0x9A0E, 0x8B53, 0x9B3C, 0x8B54, 0x4E80, + 0x8B55, 0x507D, 0x8B56, 0x5100, 0x8B57, 0x5993, 0x8B58, 0x5B9C, 0x8B59, 0x622F, 0x8B5A, 0x6280, 0x8B5B, 0x64EC, 0x8B5C, 0x6B3A, + 0x8B5D, 0x72A0, 0x8B5E, 0x7591, 0x8B5F, 0x7947, 0x8B60, 0x7FA9, 0x8B61, 0x87FB, 0x8B62, 0x8ABC, 0x8B63, 0x8B70, 0x8B64, 0x63AC, + 0x8B65, 0x83CA, 0x8B66, 0x97A0, 0x8B67, 0x5409, 0x8B68, 0x5403, 0x8B69, 0x55AB, 0x8B6A, 0x6854, 0x8B6B, 0x6A58, 0x8B6C, 0x8A70, + 0x8B6D, 0x7827, 0x8B6E, 0x6775, 0x8B6F, 0x9ECD, 0x8B70, 0x5374, 0x8B71, 0x5BA2, 0x8B72, 0x811A, 0x8B73, 0x8650, 0x8B74, 0x9006, + 0x8B75, 0x4E18, 0x8B76, 0x4E45, 0x8B77, 0x4EC7, 0x8B78, 0x4F11, 0x8B79, 0x53CA, 0x8B7A, 0x5438, 0x8B7B, 0x5BAE, 0x8B7C, 0x5F13, + 0x8B7D, 0x6025, 0x8B7E, 0x6551, 0x8B80, 0x673D, 0x8B81, 0x6C42, 0x8B82, 0x6C72, 0x8B83, 0x6CE3, 0x8B84, 0x7078, 0x8B85, 0x7403, + 0x8B86, 0x7A76, 0x8B87, 0x7AAE, 0x8B88, 0x7B08, 0x8B89, 0x7D1A, 0x8B8A, 0x7CFE, 0x8B8B, 0x7D66, 0x8B8C, 0x65E7, 0x8B8D, 0x725B, + 0x8B8E, 0x53BB, 0x8B8F, 0x5C45, 0x8B90, 0x5DE8, 0x8B91, 0x62D2, 0x8B92, 0x62E0, 0x8B93, 0x6319, 0x8B94, 0x6E20, 0x8B95, 0x865A, + 0x8B96, 0x8A31, 0x8B97, 0x8DDD, 0x8B98, 0x92F8, 0x8B99, 0x6F01, 0x8B9A, 0x79A6, 0x8B9B, 0x9B5A, 0x8B9C, 0x4EA8, 0x8B9D, 0x4EAB, + 0x8B9E, 0x4EAC, 0x8B9F, 0x4F9B, 0x8BA0, 0x4FA0, 0x8BA1, 0x50D1, 0x8BA2, 0x5147, 0x8BA3, 0x7AF6, 0x8BA4, 0x5171, 0x8BA5, 0x51F6, + 0x8BA6, 0x5354, 0x8BA7, 0x5321, 0x8BA8, 0x537F, 0x8BA9, 0x53EB, 0x8BAA, 0x55AC, 0x8BAB, 0x5883, 0x8BAC, 0x5CE1, 0x8BAD, 0x5F37, + 0x8BAE, 0x5F4A, 0x8BAF, 0x602F, 0x8BB0, 0x6050, 0x8BB1, 0x606D, 0x8BB2, 0x631F, 0x8BB3, 0x6559, 0x8BB4, 0x6A4B, 0x8BB5, 0x6CC1, + 0x8BB6, 0x72C2, 0x8BB7, 0x72ED, 0x8BB8, 0x77EF, 0x8BB9, 0x80F8, 0x8BBA, 0x8105, 0x8BBB, 0x8208, 0x8BBC, 0x854E, 0x8BBD, 0x90F7, + 0x8BBE, 0x93E1, 0x8BBF, 0x97FF, 0x8BC0, 0x9957, 0x8BC1, 0x9A5A, 0x8BC2, 0x4EF0, 0x8BC3, 0x51DD, 0x8BC4, 0x5C2D, 0x8BC5, 0x6681, + 0x8BC6, 0x696D, 0x8BC7, 0x5C40, 0x8BC8, 0x66F2, 0x8BC9, 0x6975, 0x8BCA, 0x7389, 0x8BCB, 0x6850, 0x8BCC, 0x7C81, 0x8BCD, 0x50C5, + 0x8BCE, 0x52E4, 0x8BCF, 0x5747, 0x8BD0, 0x5DFE, 0x8BD1, 0x9326, 0x8BD2, 0x65A4, 0x8BD3, 0x6B23, 0x8BD4, 0x6B3D, 0x8BD5, 0x7434, + 0x8BD6, 0x7981, 0x8BD7, 0x79BD, 0x8BD8, 0x7B4B, 0x8BD9, 0x7DCA, 0x8BDA, 0x82B9, 0x8BDB, 0x83CC, 0x8BDC, 0x887F, 0x8BDD, 0x895F, + 0x8BDE, 0x8B39, 0x8BDF, 0x8FD1, 0x8BE0, 0x91D1, 0x8BE1, 0x541F, 0x8BE2, 0x9280, 0x8BE3, 0x4E5D, 0x8BE4, 0x5036, 0x8BE5, 0x53E5, + 0x8BE6, 0x533A, 0x8BE7, 0x72D7, 0x8BE8, 0x7396, 0x8BE9, 0x77E9, 0x8BEA, 0x82E6, 0x8BEB, 0x8EAF, 0x8BEC, 0x99C6, 0x8BED, 0x99C8, + 0x8BEE, 0x99D2, 0x8BEF, 0x5177, 0x8BF0, 0x611A, 0x8BF1, 0x865E, 0x8BF2, 0x55B0, 0x8BF3, 0x7A7A, 0x8BF4, 0x5076, 0x8BF5, 0x5BD3, + 0x8BF6, 0x9047, 0x8BF7, 0x9685, 0x8BF8, 0x4E32, 0x8BF9, 0x6ADB, 0x8BFA, 0x91E7, 0x8BFB, 0x5C51, 0x8BFC, 0x5C48, 0x8C40, 0x6398, + 0x8C41, 0x7A9F, 0x8C42, 0x6C93, 0x8C43, 0x9774, 0x8C44, 0x8F61, 0x8C45, 0x7AAA, 0x8C46, 0x718A, 0x8C47, 0x9688, 0x8C48, 0x7C82, + 0x8C49, 0x6817, 0x8C4A, 0x7E70, 0x8C4B, 0x6851, 0x8C4C, 0x936C, 0x8C4D, 0x52F2, 0x8C4E, 0x541B, 0x8C4F, 0x85AB, 0x8C50, 0x8A13, + 0x8C51, 0x7FA4, 0x8C52, 0x8ECD, 0x8C53, 0x90E1, 0x8C54, 0x5366, 0x8C55, 0x8888, 0x8C56, 0x7941, 0x8C57, 0x4FC2, 0x8C58, 0x50BE, + 0x8C59, 0x5211, 0x8C5A, 0x5144, 0x8C5B, 0x5553, 0x8C5C, 0x572D, 0x8C5D, 0x73EA, 0x8C5E, 0x578B, 0x8C5F, 0x5951, 0x8C60, 0x5F62, + 0x8C61, 0x5F84, 0x8C62, 0x6075, 0x8C63, 0x6176, 0x8C64, 0x6167, 0x8C65, 0x61A9, 0x8C66, 0x63B2, 0x8C67, 0x643A, 0x8C68, 0x656C, + 0x8C69, 0x666F, 0x8C6A, 0x6842, 0x8C6B, 0x6E13, 0x8C6C, 0x7566, 0x8C6D, 0x7A3D, 0x8C6E, 0x7CFB, 0x8C6F, 0x7D4C, 0x8C70, 0x7D99, + 0x8C71, 0x7E4B, 0x8C72, 0x7F6B, 0x8C73, 0x830E, 0x8C74, 0x834A, 0x8C75, 0x86CD, 0x8C76, 0x8A08, 0x8C77, 0x8A63, 0x8C78, 0x8B66, + 0x8C79, 0x8EFD, 0x8C7A, 0x981A, 0x8C7B, 0x9D8F, 0x8C7C, 0x82B8, 0x8C7D, 0x8FCE, 0x8C7E, 0x9BE8, 0x8C80, 0x5287, 0x8C81, 0x621F, + 0x8C82, 0x6483, 0x8C83, 0x6FC0, 0x8C84, 0x9699, 0x8C85, 0x6841, 0x8C86, 0x5091, 0x8C87, 0x6B20, 0x8C88, 0x6C7A, 0x8C89, 0x6F54, + 0x8C8A, 0x7A74, 0x8C8B, 0x7D50, 0x8C8C, 0x8840, 0x8C8D, 0x8A23, 0x8C8E, 0x6708, 0x8C8F, 0x4EF6, 0x8C90, 0x5039, 0x8C91, 0x5026, + 0x8C92, 0x5065, 0x8C93, 0x517C, 0x8C94, 0x5238, 0x8C95, 0x5263, 0x8C96, 0x55A7, 0x8C97, 0x570F, 0x8C98, 0x5805, 0x8C99, 0x5ACC, + 0x8C9A, 0x5EFA, 0x8C9B, 0x61B2, 0x8C9C, 0x61F8, 0x8C9D, 0x62F3, 0x8C9E, 0x6372, 0x8C9F, 0x691C, 0x8CA0, 0x6A29, 0x8CA1, 0x727D, + 0x8CA2, 0x72AC, 0x8CA3, 0x732E, 0x8CA4, 0x7814, 0x8CA5, 0x786F, 0x8CA6, 0x7D79, 0x8CA7, 0x770C, 0x8CA8, 0x80A9, 0x8CA9, 0x898B, + 0x8CAA, 0x8B19, 0x8CAB, 0x8CE2, 0x8CAC, 0x8ED2, 0x8CAD, 0x9063, 0x8CAE, 0x9375, 0x8CAF, 0x967A, 0x8CB0, 0x9855, 0x8CB1, 0x9A13, + 0x8CB2, 0x9E78, 0x8CB3, 0x5143, 0x8CB4, 0x539F, 0x8CB5, 0x53B3, 0x8CB6, 0x5E7B, 0x8CB7, 0x5F26, 0x8CB8, 0x6E1B, 0x8CB9, 0x6E90, + 0x8CBA, 0x7384, 0x8CBB, 0x73FE, 0x8CBC, 0x7D43, 0x8CBD, 0x8237, 0x8CBE, 0x8A00, 0x8CBF, 0x8AFA, 0x8CC0, 0x9650, 0x8CC1, 0x4E4E, + 0x8CC2, 0x500B, 0x8CC3, 0x53E4, 0x8CC4, 0x547C, 0x8CC5, 0x56FA, 0x8CC6, 0x59D1, 0x8CC7, 0x5B64, 0x8CC8, 0x5DF1, 0x8CC9, 0x5EAB, + 0x8CCA, 0x5F27, 0x8CCB, 0x6238, 0x8CCC, 0x6545, 0x8CCD, 0x67AF, 0x8CCE, 0x6E56, 0x8CCF, 0x72D0, 0x8CD0, 0x7CCA, 0x8CD1, 0x88B4, + 0x8CD2, 0x80A1, 0x8CD3, 0x80E1, 0x8CD4, 0x83F0, 0x8CD5, 0x864E, 0x8CD6, 0x8A87, 0x8CD7, 0x8DE8, 0x8CD8, 0x9237, 0x8CD9, 0x96C7, + 0x8CDA, 0x9867, 0x8CDB, 0x9F13, 0x8CDC, 0x4E94, 0x8CDD, 0x4E92, 0x8CDE, 0x4F0D, 0x8CDF, 0x5348, 0x8CE0, 0x5449, 0x8CE1, 0x543E, + 0x8CE2, 0x5A2F, 0x8CE3, 0x5F8C, 0x8CE4, 0x5FA1, 0x8CE5, 0x609F, 0x8CE6, 0x68A7, 0x8CE7, 0x6A8E, 0x8CE8, 0x745A, 0x8CE9, 0x7881, + 0x8CEA, 0x8A9E, 0x8CEB, 0x8AA4, 0x8CEC, 0x8B77, 0x8CED, 0x9190, 0x8CEE, 0x4E5E, 0x8CEF, 0x9BC9, 0x8CF0, 0x4EA4, 0x8CF1, 0x4F7C, + 0x8CF2, 0x4FAF, 0x8CF3, 0x5019, 0x8CF4, 0x5016, 0x8CF5, 0x5149, 0x8CF6, 0x516C, 0x8CF7, 0x529F, 0x8CF8, 0x52B9, 0x8CF9, 0x52FE, + 0x8CFA, 0x539A, 0x8CFB, 0x53E3, 0x8CFC, 0x5411, 0x8D40, 0x540E, 0x8D41, 0x5589, 0x8D42, 0x5751, 0x8D43, 0x57A2, 0x8D44, 0x597D, + 0x8D45, 0x5B54, 0x8D46, 0x5B5D, 0x8D47, 0x5B8F, 0x8D48, 0x5DE5, 0x8D49, 0x5DE7, 0x8D4A, 0x5DF7, 0x8D4B, 0x5E78, 0x8D4C, 0x5E83, + 0x8D4D, 0x5E9A, 0x8D4E, 0x5EB7, 0x8D4F, 0x5F18, 0x8D50, 0x6052, 0x8D51, 0x614C, 0x8D52, 0x6297, 0x8D53, 0x62D8, 0x8D54, 0x63A7, + 0x8D55, 0x653B, 0x8D56, 0x6602, 0x8D57, 0x6643, 0x8D58, 0x66F4, 0x8D59, 0x676D, 0x8D5A, 0x6821, 0x8D5B, 0x6897, 0x8D5C, 0x69CB, + 0x8D5D, 0x6C5F, 0x8D5E, 0x6D2A, 0x8D5F, 0x6D69, 0x8D60, 0x6E2F, 0x8D61, 0x6E9D, 0x8D62, 0x7532, 0x8D63, 0x7687, 0x8D64, 0x786C, + 0x8D65, 0x7A3F, 0x8D66, 0x7CE0, 0x8D67, 0x7D05, 0x8D68, 0x7D18, 0x8D69, 0x7D5E, 0x8D6A, 0x7DB1, 0x8D6B, 0x8015, 0x8D6C, 0x8003, + 0x8D6D, 0x80AF, 0x8D6E, 0x80B1, 0x8D6F, 0x8154, 0x8D70, 0x818F, 0x8D71, 0x822A, 0x8D72, 0x8352, 0x8D73, 0x884C, 0x8D74, 0x8861, + 0x8D75, 0x8B1B, 0x8D76, 0x8CA2, 0x8D77, 0x8CFC, 0x8D78, 0x90CA, 0x8D79, 0x9175, 0x8D7A, 0x9271, 0x8D7B, 0x783F, 0x8D7C, 0x92FC, + 0x8D7D, 0x95A4, 0x8D7E, 0x964D, 0x8D80, 0x9805, 0x8D81, 0x9999, 0x8D82, 0x9AD8, 0x8D83, 0x9D3B, 0x8D84, 0x525B, 0x8D85, 0x52AB, + 0x8D86, 0x53F7, 0x8D87, 0x5408, 0x8D88, 0x58D5, 0x8D89, 0x62F7, 0x8D8A, 0x6FE0, 0x8D8B, 0x8C6A, 0x8D8C, 0x8F5F, 0x8D8D, 0x9EB9, + 0x8D8E, 0x514B, 0x8D8F, 0x523B, 0x8D90, 0x544A, 0x8D91, 0x56FD, 0x8D92, 0x7A40, 0x8D93, 0x9177, 0x8D94, 0x9D60, 0x8D95, 0x9ED2, + 0x8D96, 0x7344, 0x8D97, 0x6F09, 0x8D98, 0x8170, 0x8D99, 0x7511, 0x8D9A, 0x5FFD, 0x8D9B, 0x60DA, 0x8D9C, 0x9AA8, 0x8D9D, 0x72DB, + 0x8D9E, 0x8FBC, 0x8D9F, 0x6B64, 0x8DA0, 0x9803, 0x8DA1, 0x4ECA, 0x8DA2, 0x56F0, 0x8DA3, 0x5764, 0x8DA4, 0x58BE, 0x8DA5, 0x5A5A, + 0x8DA6, 0x6068, 0x8DA7, 0x61C7, 0x8DA8, 0x660F, 0x8DA9, 0x6606, 0x8DAA, 0x6839, 0x8DAB, 0x68B1, 0x8DAC, 0x6DF7, 0x8DAD, 0x75D5, + 0x8DAE, 0x7D3A, 0x8DAF, 0x826E, 0x8DB0, 0x9B42, 0x8DB1, 0x4E9B, 0x8DB2, 0x4F50, 0x8DB3, 0x53C9, 0x8DB4, 0x5506, 0x8DB5, 0x5D6F, + 0x8DB6, 0x5DE6, 0x8DB7, 0x5DEE, 0x8DB8, 0x67FB, 0x8DB9, 0x6C99, 0x8DBA, 0x7473, 0x8DBB, 0x7802, 0x8DBC, 0x8A50, 0x8DBD, 0x9396, + 0x8DBE, 0x88DF, 0x8DBF, 0x5750, 0x8DC0, 0x5EA7, 0x8DC1, 0x632B, 0x8DC2, 0x50B5, 0x8DC3, 0x50AC, 0x8DC4, 0x518D, 0x8DC5, 0x6700, + 0x8DC6, 0x54C9, 0x8DC7, 0x585E, 0x8DC8, 0x59BB, 0x8DC9, 0x5BB0, 0x8DCA, 0x5F69, 0x8DCB, 0x624D, 0x8DCC, 0x63A1, 0x8DCD, 0x683D, + 0x8DCE, 0x6B73, 0x8DCF, 0x6E08, 0x8DD0, 0x707D, 0x8DD1, 0x91C7, 0x8DD2, 0x7280, 0x8DD3, 0x7815, 0x8DD4, 0x7826, 0x8DD5, 0x796D, + 0x8DD6, 0x658E, 0x8DD7, 0x7D30, 0x8DD8, 0x83DC, 0x8DD9, 0x88C1, 0x8DDA, 0x8F09, 0x8DDB, 0x969B, 0x8DDC, 0x5264, 0x8DDD, 0x5728, + 0x8DDE, 0x6750, 0x8DDF, 0x7F6A, 0x8DE0, 0x8CA1, 0x8DE1, 0x51B4, 0x8DE2, 0x5742, 0x8DE3, 0x962A, 0x8DE4, 0x583A, 0x8DE5, 0x698A, + 0x8DE6, 0x80B4, 0x8DE7, 0x54B2, 0x8DE8, 0x5D0E, 0x8DE9, 0x57FC, 0x8DEA, 0x7895, 0x8DEB, 0x9DFA, 0x8DEC, 0x4F5C, 0x8DED, 0x524A, + 0x8DEE, 0x548B, 0x8DEF, 0x643E, 0x8DF0, 0x6628, 0x8DF1, 0x6714, 0x8DF2, 0x67F5, 0x8DF3, 0x7A84, 0x8DF4, 0x7B56, 0x8DF5, 0x7D22, + 0x8DF6, 0x932F, 0x8DF7, 0x685C, 0x8DF8, 0x9BAD, 0x8DF9, 0x7B39, 0x8DFA, 0x5319, 0x8DFB, 0x518A, 0x8DFC, 0x5237, 0x8E40, 0x5BDF, + 0x8E41, 0x62F6, 0x8E42, 0x64AE, 0x8E43, 0x64E6, 0x8E44, 0x672D, 0x8E45, 0x6BBA, 0x8E46, 0x85A9, 0x8E47, 0x96D1, 0x8E48, 0x7690, + 0x8E49, 0x9BD6, 0x8E4A, 0x634C, 0x8E4B, 0x9306, 0x8E4C, 0x9BAB, 0x8E4D, 0x76BF, 0x8E4E, 0x6652, 0x8E4F, 0x4E09, 0x8E50, 0x5098, + 0x8E51, 0x53C2, 0x8E52, 0x5C71, 0x8E53, 0x60E8, 0x8E54, 0x6492, 0x8E55, 0x6563, 0x8E56, 0x685F, 0x8E57, 0x71E6, 0x8E58, 0x73CA, + 0x8E59, 0x7523, 0x8E5A, 0x7B97, 0x8E5B, 0x7E82, 0x8E5C, 0x8695, 0x8E5D, 0x8B83, 0x8E5E, 0x8CDB, 0x8E5F, 0x9178, 0x8E60, 0x9910, + 0x8E61, 0x65AC, 0x8E62, 0x66AB, 0x8E63, 0x6B8B, 0x8E64, 0x4ED5, 0x8E65, 0x4ED4, 0x8E66, 0x4F3A, 0x8E67, 0x4F7F, 0x8E68, 0x523A, + 0x8E69, 0x53F8, 0x8E6A, 0x53F2, 0x8E6B, 0x55E3, 0x8E6C, 0x56DB, 0x8E6D, 0x58EB, 0x8E6E, 0x59CB, 0x8E6F, 0x59C9, 0x8E70, 0x59FF, + 0x8E71, 0x5B50, 0x8E72, 0x5C4D, 0x8E73, 0x5E02, 0x8E74, 0x5E2B, 0x8E75, 0x5FD7, 0x8E76, 0x601D, 0x8E77, 0x6307, 0x8E78, 0x652F, + 0x8E79, 0x5B5C, 0x8E7A, 0x65AF, 0x8E7B, 0x65BD, 0x8E7C, 0x65E8, 0x8E7D, 0x679D, 0x8E7E, 0x6B62, 0x8E80, 0x6B7B, 0x8E81, 0x6C0F, + 0x8E82, 0x7345, 0x8E83, 0x7949, 0x8E84, 0x79C1, 0x8E85, 0x7CF8, 0x8E86, 0x7D19, 0x8E87, 0x7D2B, 0x8E88, 0x80A2, 0x8E89, 0x8102, + 0x8E8A, 0x81F3, 0x8E8B, 0x8996, 0x8E8C, 0x8A5E, 0x8E8D, 0x8A69, 0x8E8E, 0x8A66, 0x8E8F, 0x8A8C, 0x8E90, 0x8AEE, 0x8E91, 0x8CC7, + 0x8E92, 0x8CDC, 0x8E93, 0x96CC, 0x8E94, 0x98FC, 0x8E95, 0x6B6F, 0x8E96, 0x4E8B, 0x8E97, 0x4F3C, 0x8E98, 0x4F8D, 0x8E99, 0x5150, + 0x8E9A, 0x5B57, 0x8E9B, 0x5BFA, 0x8E9C, 0x6148, 0x8E9D, 0x6301, 0x8E9E, 0x6642, 0x8E9F, 0x6B21, 0x8EA0, 0x6ECB, 0x8EA1, 0x6CBB, + 0x8EA2, 0x723E, 0x8EA3, 0x74BD, 0x8EA4, 0x75D4, 0x8EA5, 0x78C1, 0x8EA6, 0x793A, 0x8EA7, 0x800C, 0x8EA8, 0x8033, 0x8EA9, 0x81EA, + 0x8EAA, 0x8494, 0x8EAB, 0x8F9E, 0x8EAC, 0x6C50, 0x8EAD, 0x9E7F, 0x8EAE, 0x5F0F, 0x8EAF, 0x8B58, 0x8EB0, 0x9D2B, 0x8EB1, 0x7AFA, + 0x8EB2, 0x8EF8, 0x8EB3, 0x5B8D, 0x8EB4, 0x96EB, 0x8EB5, 0x4E03, 0x8EB6, 0x53F1, 0x8EB7, 0x57F7, 0x8EB8, 0x5931, 0x8EB9, 0x5AC9, + 0x8EBA, 0x5BA4, 0x8EBB, 0x6089, 0x8EBC, 0x6E7F, 0x8EBD, 0x6F06, 0x8EBE, 0x75BE, 0x8EBF, 0x8CEA, 0x8EC0, 0x5B9F, 0x8EC1, 0x8500, + 0x8EC2, 0x7BE0, 0x8EC3, 0x5072, 0x8EC4, 0x67F4, 0x8EC5, 0x829D, 0x8EC6, 0x5C61, 0x8EC7, 0x854A, 0x8EC8, 0x7E1E, 0x8EC9, 0x820E, + 0x8ECA, 0x5199, 0x8ECB, 0x5C04, 0x8ECC, 0x6368, 0x8ECD, 0x8D66, 0x8ECE, 0x659C, 0x8ECF, 0x716E, 0x8ED0, 0x793E, 0x8ED1, 0x7D17, + 0x8ED2, 0x8005, 0x8ED3, 0x8B1D, 0x8ED4, 0x8ECA, 0x8ED5, 0x906E, 0x8ED6, 0x86C7, 0x8ED7, 0x90AA, 0x8ED8, 0x501F, 0x8ED9, 0x52FA, + 0x8EDA, 0x5C3A, 0x8EDB, 0x6753, 0x8EDC, 0x707C, 0x8EDD, 0x7235, 0x8EDE, 0x914C, 0x8EDF, 0x91C8, 0x8EE0, 0x932B, 0x8EE1, 0x82E5, + 0x8EE2, 0x5BC2, 0x8EE3, 0x5F31, 0x8EE4, 0x60F9, 0x8EE5, 0x4E3B, 0x8EE6, 0x53D6, 0x8EE7, 0x5B88, 0x8EE8, 0x624B, 0x8EE9, 0x6731, + 0x8EEA, 0x6B8A, 0x8EEB, 0x72E9, 0x8EEC, 0x73E0, 0x8EED, 0x7A2E, 0x8EEE, 0x816B, 0x8EEF, 0x8DA3, 0x8EF0, 0x9152, 0x8EF1, 0x9996, + 0x8EF2, 0x5112, 0x8EF3, 0x53D7, 0x8EF4, 0x546A, 0x8EF5, 0x5BFF, 0x8EF6, 0x6388, 0x8EF7, 0x6A39, 0x8EF8, 0x7DAC, 0x8EF9, 0x9700, + 0x8EFA, 0x56DA, 0x8EFB, 0x53CE, 0x8EFC, 0x5468, 0x8F40, 0x5B97, 0x8F41, 0x5C31, 0x8F42, 0x5DDE, 0x8F43, 0x4FEE, 0x8F44, 0x6101, + 0x8F45, 0x62FE, 0x8F46, 0x6D32, 0x8F47, 0x79C0, 0x8F48, 0x79CB, 0x8F49, 0x7D42, 0x8F4A, 0x7E4D, 0x8F4B, 0x7FD2, 0x8F4C, 0x81ED, + 0x8F4D, 0x821F, 0x8F4E, 0x8490, 0x8F4F, 0x8846, 0x8F50, 0x8972, 0x8F51, 0x8B90, 0x8F52, 0x8E74, 0x8F53, 0x8F2F, 0x8F54, 0x9031, + 0x8F55, 0x914B, 0x8F56, 0x916C, 0x8F57, 0x96C6, 0x8F58, 0x919C, 0x8F59, 0x4EC0, 0x8F5A, 0x4F4F, 0x8F5B, 0x5145, 0x8F5C, 0x5341, + 0x8F5D, 0x5F93, 0x8F5E, 0x620E, 0x8F5F, 0x67D4, 0x8F60, 0x6C41, 0x8F61, 0x6E0B, 0x8F62, 0x7363, 0x8F63, 0x7E26, 0x8F64, 0x91CD, + 0x8F65, 0x9283, 0x8F66, 0x53D4, 0x8F67, 0x5919, 0x8F68, 0x5BBF, 0x8F69, 0x6DD1, 0x8F6A, 0x795D, 0x8F6B, 0x7E2E, 0x8F6C, 0x7C9B, + 0x8F6D, 0x587E, 0x8F6E, 0x719F, 0x8F6F, 0x51FA, 0x8F70, 0x8853, 0x8F71, 0x8FF0, 0x8F72, 0x4FCA, 0x8F73, 0x5CFB, 0x8F74, 0x6625, + 0x8F75, 0x77AC, 0x8F76, 0x7AE3, 0x8F77, 0x821C, 0x8F78, 0x99FF, 0x8F79, 0x51C6, 0x8F7A, 0x5FAA, 0x8F7B, 0x65EC, 0x8F7C, 0x696F, + 0x8F7D, 0x6B89, 0x8F7E, 0x6DF3, 0x8F80, 0x6E96, 0x8F81, 0x6F64, 0x8F82, 0x76FE, 0x8F83, 0x7D14, 0x8F84, 0x5DE1, 0x8F85, 0x9075, + 0x8F86, 0x9187, 0x8F87, 0x9806, 0x8F88, 0x51E6, 0x8F89, 0x521D, 0x8F8A, 0x6240, 0x8F8B, 0x6691, 0x8F8C, 0x66D9, 0x8F8D, 0x6E1A, + 0x8F8E, 0x5EB6, 0x8F8F, 0x7DD2, 0x8F90, 0x7F72, 0x8F91, 0x66F8, 0x8F92, 0x85AF, 0x8F93, 0x85F7, 0x8F94, 0x8AF8, 0x8F95, 0x52A9, + 0x8F96, 0x53D9, 0x8F97, 0x5973, 0x8F98, 0x5E8F, 0x8F99, 0x5F90, 0x8F9A, 0x6055, 0x8F9B, 0x92E4, 0x8F9C, 0x9664, 0x8F9D, 0x50B7, + 0x8F9E, 0x511F, 0x8F9F, 0x52DD, 0x8FA0, 0x5320, 0x8FA1, 0x5347, 0x8FA2, 0x53EC, 0x8FA3, 0x54E8, 0x8FA4, 0x5546, 0x8FA5, 0x5531, + 0x8FA6, 0x5617, 0x8FA7, 0x5968, 0x8FA8, 0x59BE, 0x8FA9, 0x5A3C, 0x8FAA, 0x5BB5, 0x8FAB, 0x5C06, 0x8FAC, 0x5C0F, 0x8FAD, 0x5C11, + 0x8FAE, 0x5C1A, 0x8FAF, 0x5E84, 0x8FB0, 0x5E8A, 0x8FB1, 0x5EE0, 0x8FB2, 0x5F70, 0x8FB3, 0x627F, 0x8FB4, 0x6284, 0x8FB5, 0x62DB, + 0x8FB6, 0x638C, 0x8FB7, 0x6377, 0x8FB8, 0x6607, 0x8FB9, 0x660C, 0x8FBA, 0x662D, 0x8FBB, 0x6676, 0x8FBC, 0x677E, 0x8FBD, 0x68A2, + 0x8FBE, 0x6A1F, 0x8FBF, 0x6A35, 0x8FC0, 0x6CBC, 0x8FC1, 0x6D88, 0x8FC2, 0x6E09, 0x8FC3, 0x6E58, 0x8FC4, 0x713C, 0x8FC5, 0x7126, + 0x8FC6, 0x7167, 0x8FC7, 0x75C7, 0x8FC8, 0x7701, 0x8FC9, 0x785D, 0x8FCA, 0x7901, 0x8FCB, 0x7965, 0x8FCC, 0x79F0, 0x8FCD, 0x7AE0, + 0x8FCE, 0x7B11, 0x8FCF, 0x7CA7, 0x8FD0, 0x7D39, 0x8FD1, 0x8096, 0x8FD2, 0x83D6, 0x8FD3, 0x848B, 0x8FD4, 0x8549, 0x8FD5, 0x885D, + 0x8FD6, 0x88F3, 0x8FD7, 0x8A1F, 0x8FD8, 0x8A3C, 0x8FD9, 0x8A54, 0x8FDA, 0x8A73, 0x8FDB, 0x8C61, 0x8FDC, 0x8CDE, 0x8FDD, 0x91A4, + 0x8FDE, 0x9266, 0x8FDF, 0x937E, 0x8FE0, 0x9418, 0x8FE1, 0x969C, 0x8FE2, 0x9798, 0x8FE3, 0x4E0A, 0x8FE4, 0x4E08, 0x8FE5, 0x4E1E, + 0x8FE6, 0x4E57, 0x8FE7, 0x5197, 0x8FE8, 0x5270, 0x8FE9, 0x57CE, 0x8FEA, 0x5834, 0x8FEB, 0x58CC, 0x8FEC, 0x5B22, 0x8FED, 0x5E38, + 0x8FEE, 0x60C5, 0x8FEF, 0x64FE, 0x8FF0, 0x6761, 0x8FF1, 0x6756, 0x8FF2, 0x6D44, 0x8FF3, 0x72B6, 0x8FF4, 0x7573, 0x8FF5, 0x7A63, + 0x8FF6, 0x84B8, 0x8FF7, 0x8B72, 0x8FF8, 0x91B8, 0x8FF9, 0x9320, 0x8FFA, 0x5631, 0x8FFB, 0x57F4, 0x8FFC, 0x98FE, 0x9040, 0x62ED, + 0x9041, 0x690D, 0x9042, 0x6B96, 0x9043, 0x71ED, 0x9044, 0x7E54, 0x9045, 0x8077, 0x9046, 0x8272, 0x9047, 0x89E6, 0x9048, 0x98DF, + 0x9049, 0x8755, 0x904A, 0x8FB1, 0x904B, 0x5C3B, 0x904C, 0x4F38, 0x904D, 0x4FE1, 0x904E, 0x4FB5, 0x904F, 0x5507, 0x9050, 0x5A20, + 0x9051, 0x5BDD, 0x9052, 0x5BE9, 0x9053, 0x5FC3, 0x9054, 0x614E, 0x9055, 0x632F, 0x9056, 0x65B0, 0x9057, 0x664B, 0x9058, 0x68EE, + 0x9059, 0x699B, 0x905A, 0x6D78, 0x905B, 0x6DF1, 0x905C, 0x7533, 0x905D, 0x75B9, 0x905E, 0x771F, 0x905F, 0x795E, 0x9060, 0x79E6, + 0x9061, 0x7D33, 0x9062, 0x81E3, 0x9063, 0x82AF, 0x9064, 0x85AA, 0x9065, 0x89AA, 0x9066, 0x8A3A, 0x9067, 0x8EAB, 0x9068, 0x8F9B, + 0x9069, 0x9032, 0x906A, 0x91DD, 0x906B, 0x9707, 0x906C, 0x4EBA, 0x906D, 0x4EC1, 0x906E, 0x5203, 0x906F, 0x5875, 0x9070, 0x58EC, + 0x9071, 0x5C0B, 0x9072, 0x751A, 0x9073, 0x5C3D, 0x9074, 0x814E, 0x9075, 0x8A0A, 0x9076, 0x8FC5, 0x9077, 0x9663, 0x9078, 0x976D, + 0x9079, 0x7B25, 0x907A, 0x8ACF, 0x907B, 0x9808, 0x907C, 0x9162, 0x907D, 0x56F3, 0x907E, 0x53A8, 0x9080, 0x9017, 0x9081, 0x5439, + 0x9082, 0x5782, 0x9083, 0x5E25, 0x9084, 0x63A8, 0x9085, 0x6C34, 0x9086, 0x708A, 0x9087, 0x7761, 0x9088, 0x7C8B, 0x9089, 0x7FE0, + 0x908A, 0x8870, 0x908B, 0x9042, 0x908C, 0x9154, 0x908D, 0x9310, 0x908E, 0x9318, 0x908F, 0x968F, 0x9090, 0x745E, 0x9091, 0x9AC4, + 0x9092, 0x5D07, 0x9093, 0x5D69, 0x9094, 0x6570, 0x9095, 0x67A2, 0x9096, 0x8DA8, 0x9097, 0x96DB, 0x9098, 0x636E, 0x9099, 0x6749, + 0x909A, 0x6919, 0x909B, 0x83C5, 0x909C, 0x9817, 0x909D, 0x96C0, 0x909E, 0x88FE, 0x909F, 0x6F84, 0x90A0, 0x647A, 0x90A1, 0x5BF8, + 0x90A2, 0x4E16, 0x90A3, 0x702C, 0x90A4, 0x755D, 0x90A5, 0x662F, 0x90A6, 0x51C4, 0x90A7, 0x5236, 0x90A8, 0x52E2, 0x90A9, 0x59D3, + 0x90AA, 0x5F81, 0x90AB, 0x6027, 0x90AC, 0x6210, 0x90AD, 0x653F, 0x90AE, 0x6574, 0x90AF, 0x661F, 0x90B0, 0x6674, 0x90B1, 0x68F2, + 0x90B2, 0x6816, 0x90B3, 0x6B63, 0x90B4, 0x6E05, 0x90B5, 0x7272, 0x90B6, 0x751F, 0x90B7, 0x76DB, 0x90B8, 0x7CBE, 0x90B9, 0x8056, + 0x90BA, 0x58F0, 0x90BB, 0x88FD, 0x90BC, 0x897F, 0x90BD, 0x8AA0, 0x90BE, 0x8A93, 0x90BF, 0x8ACB, 0x90C0, 0x901D, 0x90C1, 0x9192, + 0x90C2, 0x9752, 0x90C3, 0x9759, 0x90C4, 0x6589, 0x90C5, 0x7A0E, 0x90C6, 0x8106, 0x90C7, 0x96BB, 0x90C8, 0x5E2D, 0x90C9, 0x60DC, + 0x90CA, 0x621A, 0x90CB, 0x65A5, 0x90CC, 0x6614, 0x90CD, 0x6790, 0x90CE, 0x77F3, 0x90CF, 0x7A4D, 0x90D0, 0x7C4D, 0x90D1, 0x7E3E, + 0x90D2, 0x810A, 0x90D3, 0x8CAC, 0x90D4, 0x8D64, 0x90D5, 0x8DE1, 0x90D6, 0x8E5F, 0x90D7, 0x78A9, 0x90D8, 0x5207, 0x90D9, 0x62D9, + 0x90DA, 0x63A5, 0x90DB, 0x6442, 0x90DC, 0x6298, 0x90DD, 0x8A2D, 0x90DE, 0x7A83, 0x90DF, 0x7BC0, 0x90E0, 0x8AAC, 0x90E1, 0x96EA, + 0x90E2, 0x7D76, 0x90E3, 0x820C, 0x90E4, 0x8749, 0x90E5, 0x4ED9, 0x90E6, 0x5148, 0x90E7, 0x5343, 0x90E8, 0x5360, 0x90E9, 0x5BA3, + 0x90EA, 0x5C02, 0x90EB, 0x5C16, 0x90EC, 0x5DDD, 0x90ED, 0x6226, 0x90EE, 0x6247, 0x90EF, 0x64B0, 0x90F0, 0x6813, 0x90F1, 0x6834, + 0x90F2, 0x6CC9, 0x90F3, 0x6D45, 0x90F4, 0x6D17, 0x90F5, 0x67D3, 0x90F6, 0x6F5C, 0x90F7, 0x714E, 0x90F8, 0x717D, 0x90F9, 0x65CB, + 0x90FA, 0x7A7F, 0x90FB, 0x7BAD, 0x90FC, 0x7DDA, 0x9140, 0x7E4A, 0x9141, 0x7FA8, 0x9142, 0x817A, 0x9143, 0x821B, 0x9144, 0x8239, + 0x9145, 0x85A6, 0x9146, 0x8A6E, 0x9147, 0x8CCE, 0x9148, 0x8DF5, 0x9149, 0x9078, 0x914A, 0x9077, 0x914B, 0x92AD, 0x914C, 0x9291, + 0x914D, 0x9583, 0x914E, 0x9BAE, 0x914F, 0x524D, 0x9150, 0x5584, 0x9151, 0x6F38, 0x9152, 0x7136, 0x9153, 0x5168, 0x9154, 0x7985, + 0x9155, 0x7E55, 0x9156, 0x81B3, 0x9157, 0x7CCE, 0x9158, 0x564C, 0x9159, 0x5851, 0x915A, 0x5CA8, 0x915B, 0x63AA, 0x915C, 0x66FE, + 0x915D, 0x66FD, 0x915E, 0x695A, 0x915F, 0x72D9, 0x9160, 0x758F, 0x9161, 0x758E, 0x9162, 0x790E, 0x9163, 0x7956, 0x9164, 0x79DF, + 0x9165, 0x7C97, 0x9166, 0x7D20, 0x9167, 0x7D44, 0x9168, 0x8607, 0x9169, 0x8A34, 0x916A, 0x963B, 0x916B, 0x9061, 0x916C, 0x9F20, + 0x916D, 0x50E7, 0x916E, 0x5275, 0x916F, 0x53CC, 0x9170, 0x53E2, 0x9171, 0x5009, 0x9172, 0x55AA, 0x9173, 0x58EE, 0x9174, 0x594F, + 0x9175, 0x723D, 0x9176, 0x5B8B, 0x9177, 0x5C64, 0x9178, 0x531D, 0x9179, 0x60E3, 0x917A, 0x60F3, 0x917B, 0x635C, 0x917C, 0x6383, + 0x917D, 0x633F, 0x917E, 0x63BB, 0x9180, 0x64CD, 0x9181, 0x65E9, 0x9182, 0x66F9, 0x9183, 0x5DE3, 0x9184, 0x69CD, 0x9185, 0x69FD, + 0x9186, 0x6F15, 0x9187, 0x71E5, 0x9188, 0x4E89, 0x9189, 0x75E9, 0x918A, 0x76F8, 0x918B, 0x7A93, 0x918C, 0x7CDF, 0x918D, 0x7DCF, + 0x918E, 0x7D9C, 0x918F, 0x8061, 0x9190, 0x8349, 0x9191, 0x8358, 0x9192, 0x846C, 0x9193, 0x84BC, 0x9194, 0x85FB, 0x9195, 0x88C5, + 0x9196, 0x8D70, 0x9197, 0x9001, 0x9198, 0x906D, 0x9199, 0x9397, 0x919A, 0x971C, 0x919B, 0x9A12, 0x919C, 0x50CF, 0x919D, 0x5897, + 0x919E, 0x618E, 0x919F, 0x81D3, 0x91A0, 0x8535, 0x91A1, 0x8D08, 0x91A2, 0x9020, 0x91A3, 0x4FC3, 0x91A4, 0x5074, 0x91A5, 0x5247, + 0x91A6, 0x5373, 0x91A7, 0x606F, 0x91A8, 0x6349, 0x91A9, 0x675F, 0x91AA, 0x6E2C, 0x91AB, 0x8DB3, 0x91AC, 0x901F, 0x91AD, 0x4FD7, + 0x91AE, 0x5C5E, 0x91AF, 0x8CCA, 0x91B0, 0x65CF, 0x91B1, 0x7D9A, 0x91B2, 0x5352, 0x91B3, 0x8896, 0x91B4, 0x5176, 0x91B5, 0x63C3, + 0x91B6, 0x5B58, 0x91B7, 0x5B6B, 0x91B8, 0x5C0A, 0x91B9, 0x640D, 0x91BA, 0x6751, 0x91BB, 0x905C, 0x91BC, 0x4ED6, 0x91BD, 0x591A, + 0x91BE, 0x592A, 0x91BF, 0x6C70, 0x91C0, 0x8A51, 0x91C1, 0x553E, 0x91C2, 0x5815, 0x91C3, 0x59A5, 0x91C4, 0x60F0, 0x91C5, 0x6253, + 0x91C6, 0x67C1, 0x91C7, 0x8235, 0x91C8, 0x6955, 0x91C9, 0x9640, 0x91CA, 0x99C4, 0x91CB, 0x9A28, 0x91CC, 0x4F53, 0x91CD, 0x5806, + 0x91CE, 0x5BFE, 0x91CF, 0x8010, 0x91D0, 0x5CB1, 0x91D1, 0x5E2F, 0x91D2, 0x5F85, 0x91D3, 0x6020, 0x91D4, 0x614B, 0x91D5, 0x6234, + 0x91D6, 0x66FF, 0x91D7, 0x6CF0, 0x91D8, 0x6EDE, 0x91D9, 0x80CE, 0x91DA, 0x817F, 0x91DB, 0x82D4, 0x91DC, 0x888B, 0x91DD, 0x8CB8, + 0x91DE, 0x9000, 0x91DF, 0x902E, 0x91E0, 0x968A, 0x91E1, 0x9EDB, 0x91E2, 0x9BDB, 0x91E3, 0x4EE3, 0x91E4, 0x53F0, 0x91E5, 0x5927, + 0x91E6, 0x7B2C, 0x91E7, 0x918D, 0x91E8, 0x984C, 0x91E9, 0x9DF9, 0x91EA, 0x6EDD, 0x91EB, 0x7027, 0x91EC, 0x5353, 0x91ED, 0x5544, + 0x91EE, 0x5B85, 0x91EF, 0x6258, 0x91F0, 0x629E, 0x91F1, 0x62D3, 0x91F2, 0x6CA2, 0x91F3, 0x6FEF, 0x91F4, 0x7422, 0x91F5, 0x8A17, + 0x91F6, 0x9438, 0x91F7, 0x6FC1, 0x91F8, 0x8AFE, 0x91F9, 0x8338, 0x91FA, 0x51E7, 0x91FB, 0x86F8, 0x91FC, 0x53EA, 0x9240, 0x53E9, + 0x9241, 0x4F46, 0x9242, 0x9054, 0x9243, 0x8FB0, 0x9244, 0x596A, 0x9245, 0x8131, 0x9246, 0x5DFD, 0x9247, 0x7AEA, 0x9248, 0x8FBF, + 0x9249, 0x68DA, 0x924A, 0x8C37, 0x924B, 0x72F8, 0x924C, 0x9C48, 0x924D, 0x6A3D, 0x924E, 0x8AB0, 0x924F, 0x4E39, 0x9250, 0x5358, + 0x9251, 0x5606, 0x9252, 0x5766, 0x9253, 0x62C5, 0x9254, 0x63A2, 0x9255, 0x65E6, 0x9256, 0x6B4E, 0x9257, 0x6DE1, 0x9258, 0x6E5B, + 0x9259, 0x70AD, 0x925A, 0x77ED, 0x925B, 0x7AEF, 0x925C, 0x7BAA, 0x925D, 0x7DBB, 0x925E, 0x803D, 0x925F, 0x80C6, 0x9260, 0x86CB, + 0x9261, 0x8A95, 0x9262, 0x935B, 0x9263, 0x56E3, 0x9264, 0x58C7, 0x9265, 0x5F3E, 0x9266, 0x65AD, 0x9267, 0x6696, 0x9268, 0x6A80, + 0x9269, 0x6BB5, 0x926A, 0x7537, 0x926B, 0x8AC7, 0x926C, 0x5024, 0x926D, 0x77E5, 0x926E, 0x5730, 0x926F, 0x5F1B, 0x9270, 0x6065, + 0x9271, 0x667A, 0x9272, 0x6C60, 0x9273, 0x75F4, 0x9274, 0x7A1A, 0x9275, 0x7F6E, 0x9276, 0x81F4, 0x9277, 0x8718, 0x9278, 0x9045, + 0x9279, 0x99B3, 0x927A, 0x7BC9, 0x927B, 0x755C, 0x927C, 0x7AF9, 0x927D, 0x7B51, 0x927E, 0x84C4, 0x9280, 0x9010, 0x9281, 0x79E9, + 0x9282, 0x7A92, 0x9283, 0x8336, 0x9284, 0x5AE1, 0x9285, 0x7740, 0x9286, 0x4E2D, 0x9287, 0x4EF2, 0x9288, 0x5B99, 0x9289, 0x5FE0, + 0x928A, 0x62BD, 0x928B, 0x663C, 0x928C, 0x67F1, 0x928D, 0x6CE8, 0x928E, 0x866B, 0x928F, 0x8877, 0x9290, 0x8A3B, 0x9291, 0x914E, + 0x9292, 0x92F3, 0x9293, 0x99D0, 0x9294, 0x6A17, 0x9295, 0x7026, 0x9296, 0x732A, 0x9297, 0x82E7, 0x9298, 0x8457, 0x9299, 0x8CAF, + 0x929A, 0x4E01, 0x929B, 0x5146, 0x929C, 0x51CB, 0x929D, 0x558B, 0x929E, 0x5BF5, 0x929F, 0x5E16, 0x92A0, 0x5E33, 0x92A1, 0x5E81, + 0x92A2, 0x5F14, 0x92A3, 0x5F35, 0x92A4, 0x5F6B, 0x92A5, 0x5FB4, 0x92A6, 0x61F2, 0x92A7, 0x6311, 0x92A8, 0x66A2, 0x92A9, 0x671D, + 0x92AA, 0x6F6E, 0x92AB, 0x7252, 0x92AC, 0x753A, 0x92AD, 0x773A, 0x92AE, 0x8074, 0x92AF, 0x8139, 0x92B0, 0x8178, 0x92B1, 0x8776, + 0x92B2, 0x8ABF, 0x92B3, 0x8ADC, 0x92B4, 0x8D85, 0x92B5, 0x8DF3, 0x92B6, 0x929A, 0x92B7, 0x9577, 0x92B8, 0x9802, 0x92B9, 0x9CE5, + 0x92BA, 0x52C5, 0x92BB, 0x6357, 0x92BC, 0x76F4, 0x92BD, 0x6715, 0x92BE, 0x6C88, 0x92BF, 0x73CD, 0x92C0, 0x8CC3, 0x92C1, 0x93AE, + 0x92C2, 0x9673, 0x92C3, 0x6D25, 0x92C4, 0x589C, 0x92C5, 0x690E, 0x92C6, 0x69CC, 0x92C7, 0x8FFD, 0x92C8, 0x939A, 0x92C9, 0x75DB, + 0x92CA, 0x901A, 0x92CB, 0x585A, 0x92CC, 0x6802, 0x92CD, 0x63B4, 0x92CE, 0x69FB, 0x92CF, 0x4F43, 0x92D0, 0x6F2C, 0x92D1, 0x67D8, + 0x92D2, 0x8FBB, 0x92D3, 0x8526, 0x92D4, 0x7DB4, 0x92D5, 0x9354, 0x92D6, 0x693F, 0x92D7, 0x6F70, 0x92D8, 0x576A, 0x92D9, 0x58F7, + 0x92DA, 0x5B2C, 0x92DB, 0x7D2C, 0x92DC, 0x722A, 0x92DD, 0x540A, 0x92DE, 0x91E3, 0x92DF, 0x9DB4, 0x92E0, 0x4EAD, 0x92E1, 0x4F4E, + 0x92E2, 0x505C, 0x92E3, 0x5075, 0x92E4, 0x5243, 0x92E5, 0x8C9E, 0x92E6, 0x5448, 0x92E7, 0x5824, 0x92E8, 0x5B9A, 0x92E9, 0x5E1D, + 0x92EA, 0x5E95, 0x92EB, 0x5EAD, 0x92EC, 0x5EF7, 0x92ED, 0x5F1F, 0x92EE, 0x608C, 0x92EF, 0x62B5, 0x92F0, 0x633A, 0x92F1, 0x63D0, + 0x92F2, 0x68AF, 0x92F3, 0x6C40, 0x92F4, 0x7887, 0x92F5, 0x798E, 0x92F6, 0x7A0B, 0x92F7, 0x7DE0, 0x92F8, 0x8247, 0x92F9, 0x8A02, + 0x92FA, 0x8AE6, 0x92FB, 0x8E44, 0x92FC, 0x9013, 0x9340, 0x90B8, 0x9341, 0x912D, 0x9342, 0x91D8, 0x9343, 0x9F0E, 0x9344, 0x6CE5, + 0x9345, 0x6458, 0x9346, 0x64E2, 0x9347, 0x6575, 0x9348, 0x6EF4, 0x9349, 0x7684, 0x934A, 0x7B1B, 0x934B, 0x9069, 0x934C, 0x93D1, + 0x934D, 0x6EBA, 0x934E, 0x54F2, 0x934F, 0x5FB9, 0x9350, 0x64A4, 0x9351, 0x8F4D, 0x9352, 0x8FED, 0x9353, 0x9244, 0x9354, 0x5178, + 0x9355, 0x586B, 0x9356, 0x5929, 0x9357, 0x5C55, 0x9358, 0x5E97, 0x9359, 0x6DFB, 0x935A, 0x7E8F, 0x935B, 0x751C, 0x935C, 0x8CBC, + 0x935D, 0x8EE2, 0x935E, 0x985B, 0x935F, 0x70B9, 0x9360, 0x4F1D, 0x9361, 0x6BBF, 0x9362, 0x6FB1, 0x9363, 0x7530, 0x9364, 0x96FB, + 0x9365, 0x514E, 0x9366, 0x5410, 0x9367, 0x5835, 0x9368, 0x5857, 0x9369, 0x59AC, 0x936A, 0x5C60, 0x936B, 0x5F92, 0x936C, 0x6597, + 0x936D, 0x675C, 0x936E, 0x6E21, 0x936F, 0x767B, 0x9370, 0x83DF, 0x9371, 0x8CED, 0x9372, 0x9014, 0x9373, 0x90FD, 0x9374, 0x934D, + 0x9375, 0x7825, 0x9376, 0x783A, 0x9377, 0x52AA, 0x9378, 0x5EA6, 0x9379, 0x571F, 0x937A, 0x5974, 0x937B, 0x6012, 0x937C, 0x5012, + 0x937D, 0x515A, 0x937E, 0x51AC, 0x9380, 0x51CD, 0x9381, 0x5200, 0x9382, 0x5510, 0x9383, 0x5854, 0x9384, 0x5858, 0x9385, 0x5957, + 0x9386, 0x5B95, 0x9387, 0x5CF6, 0x9388, 0x5D8B, 0x9389, 0x60BC, 0x938A, 0x6295, 0x938B, 0x642D, 0x938C, 0x6771, 0x938D, 0x6843, + 0x938E, 0x68BC, 0x938F, 0x68DF, 0x9390, 0x76D7, 0x9391, 0x6DD8, 0x9392, 0x6E6F, 0x9393, 0x6D9B, 0x9394, 0x706F, 0x9395, 0x71C8, + 0x9396, 0x5F53, 0x9397, 0x75D8, 0x9398, 0x7977, 0x9399, 0x7B49, 0x939A, 0x7B54, 0x939B, 0x7B52, 0x939C, 0x7CD6, 0x939D, 0x7D71, + 0x939E, 0x5230, 0x939F, 0x8463, 0x93A0, 0x8569, 0x93A1, 0x85E4, 0x93A2, 0x8A0E, 0x93A3, 0x8B04, 0x93A4, 0x8C46, 0x93A5, 0x8E0F, + 0x93A6, 0x9003, 0x93A7, 0x900F, 0x93A8, 0x9419, 0x93A9, 0x9676, 0x93AA, 0x982D, 0x93AB, 0x9A30, 0x93AC, 0x95D8, 0x93AD, 0x50CD, + 0x93AE, 0x52D5, 0x93AF, 0x540C, 0x93B0, 0x5802, 0x93B1, 0x5C0E, 0x93B2, 0x61A7, 0x93B3, 0x649E, 0x93B4, 0x6D1E, 0x93B5, 0x77B3, + 0x93B6, 0x7AE5, 0x93B7, 0x80F4, 0x93B8, 0x8404, 0x93B9, 0x9053, 0x93BA, 0x9285, 0x93BB, 0x5CE0, 0x93BC, 0x9D07, 0x93BD, 0x533F, + 0x93BE, 0x5F97, 0x93BF, 0x5FB3, 0x93C0, 0x6D9C, 0x93C1, 0x7279, 0x93C2, 0x7763, 0x93C3, 0x79BF, 0x93C4, 0x7BE4, 0x93C5, 0x6BD2, + 0x93C6, 0x72EC, 0x93C7, 0x8AAD, 0x93C8, 0x6803, 0x93C9, 0x6A61, 0x93CA, 0x51F8, 0x93CB, 0x7A81, 0x93CC, 0x6934, 0x93CD, 0x5C4A, + 0x93CE, 0x9CF6, 0x93CF, 0x82EB, 0x93D0, 0x5BC5, 0x93D1, 0x9149, 0x93D2, 0x701E, 0x93D3, 0x5678, 0x93D4, 0x5C6F, 0x93D5, 0x60C7, + 0x93D6, 0x6566, 0x93D7, 0x6C8C, 0x93D8, 0x8C5A, 0x93D9, 0x9041, 0x93DA, 0x9813, 0x93DB, 0x5451, 0x93DC, 0x66C7, 0x93DD, 0x920D, + 0x93DE, 0x5948, 0x93DF, 0x90A3, 0x93E0, 0x5185, 0x93E1, 0x4E4D, 0x93E2, 0x51EA, 0x93E3, 0x8599, 0x93E4, 0x8B0E, 0x93E5, 0x7058, + 0x93E6, 0x637A, 0x93E7, 0x934B, 0x93E8, 0x6962, 0x93E9, 0x99B4, 0x93EA, 0x7E04, 0x93EB, 0x7577, 0x93EC, 0x5357, 0x93ED, 0x6960, + 0x93EE, 0x8EDF, 0x93EF, 0x96E3, 0x93F0, 0x6C5D, 0x93F1, 0x4E8C, 0x93F2, 0x5C3C, 0x93F3, 0x5F10, 0x93F4, 0x8FE9, 0x93F5, 0x5302, + 0x93F6, 0x8CD1, 0x93F7, 0x8089, 0x93F8, 0x8679, 0x93F9, 0x5EFF, 0x93FA, 0x65E5, 0x93FB, 0x4E73, 0x93FC, 0x5165, 0x9440, 0x5982, + 0x9441, 0x5C3F, 0x9442, 0x97EE, 0x9443, 0x4EFB, 0x9444, 0x598A, 0x9445, 0x5FCD, 0x9446, 0x8A8D, 0x9447, 0x6FE1, 0x9448, 0x79B0, + 0x9449, 0x7962, 0x944A, 0x5BE7, 0x944B, 0x8471, 0x944C, 0x732B, 0x944D, 0x71B1, 0x944E, 0x5E74, 0x944F, 0x5FF5, 0x9450, 0x637B, + 0x9451, 0x649A, 0x9452, 0x71C3, 0x9453, 0x7C98, 0x9454, 0x4E43, 0x9455, 0x5EFC, 0x9456, 0x4E4B, 0x9457, 0x57DC, 0x9458, 0x56A2, + 0x9459, 0x60A9, 0x945A, 0x6FC3, 0x945B, 0x7D0D, 0x945C, 0x80FD, 0x945D, 0x8133, 0x945E, 0x81BF, 0x945F, 0x8FB2, 0x9460, 0x8997, + 0x9461, 0x86A4, 0x9462, 0x5DF4, 0x9463, 0x628A, 0x9464, 0x64AD, 0x9465, 0x8987, 0x9466, 0x6777, 0x9467, 0x6CE2, 0x9468, 0x6D3E, + 0x9469, 0x7436, 0x946A, 0x7834, 0x946B, 0x5A46, 0x946C, 0x7F75, 0x946D, 0x82AD, 0x946E, 0x99AC, 0x946F, 0x4FF3, 0x9470, 0x5EC3, + 0x9471, 0x62DD, 0x9472, 0x6392, 0x9473, 0x6557, 0x9474, 0x676F, 0x9475, 0x76C3, 0x9476, 0x724C, 0x9477, 0x80CC, 0x9478, 0x80BA, + 0x9479, 0x8F29, 0x947A, 0x914D, 0x947B, 0x500D, 0x947C, 0x57F9, 0x947D, 0x5A92, 0x947E, 0x6885, 0x9480, 0x6973, 0x9481, 0x7164, + 0x9482, 0x72FD, 0x9483, 0x8CB7, 0x9484, 0x58F2, 0x9485, 0x8CE0, 0x9486, 0x966A, 0x9487, 0x9019, 0x9488, 0x877F, 0x9489, 0x79E4, + 0x948A, 0x77E7, 0x948B, 0x8429, 0x948C, 0x4F2F, 0x948D, 0x5265, 0x948E, 0x535A, 0x948F, 0x62CD, 0x9490, 0x67CF, 0x9491, 0x6CCA, + 0x9492, 0x767D, 0x9493, 0x7B94, 0x9494, 0x7C95, 0x9495, 0x8236, 0x9496, 0x8584, 0x9497, 0x8FEB, 0x9498, 0x66DD, 0x9499, 0x6F20, + 0x949A, 0x7206, 0x949B, 0x7E1B, 0x949C, 0x83AB, 0x949D, 0x99C1, 0x949E, 0x9EA6, 0x949F, 0x51FD, 0x94A0, 0x7BB1, 0x94A1, 0x7872, + 0x94A2, 0x7BB8, 0x94A3, 0x8087, 0x94A4, 0x7B48, 0x94A5, 0x6AE8, 0x94A6, 0x5E61, 0x94A7, 0x808C, 0x94A8, 0x7551, 0x94A9, 0x7560, + 0x94AA, 0x516B, 0x94AB, 0x9262, 0x94AC, 0x6E8C, 0x94AD, 0x767A, 0x94AE, 0x9197, 0x94AF, 0x9AEA, 0x94B0, 0x4F10, 0x94B1, 0x7F70, + 0x94B2, 0x629C, 0x94B3, 0x7B4F, 0x94B4, 0x95A5, 0x94B5, 0x9CE9, 0x94B6, 0x567A, 0x94B7, 0x5859, 0x94B8, 0x86E4, 0x94B9, 0x96BC, + 0x94BA, 0x4F34, 0x94BB, 0x5224, 0x94BC, 0x534A, 0x94BD, 0x53CD, 0x94BE, 0x53DB, 0x94BF, 0x5E06, 0x94C0, 0x642C, 0x94C1, 0x6591, + 0x94C2, 0x677F, 0x94C3, 0x6C3E, 0x94C4, 0x6C4E, 0x94C5, 0x7248, 0x94C6, 0x72AF, 0x94C7, 0x73ED, 0x94C8, 0x7554, 0x94C9, 0x7E41, + 0x94CA, 0x822C, 0x94CB, 0x85E9, 0x94CC, 0x8CA9, 0x94CD, 0x7BC4, 0x94CE, 0x91C6, 0x94CF, 0x7169, 0x94D0, 0x9812, 0x94D1, 0x98EF, + 0x94D2, 0x633D, 0x94D3, 0x6669, 0x94D4, 0x756A, 0x94D5, 0x76E4, 0x94D6, 0x78D0, 0x94D7, 0x8543, 0x94D8, 0x86EE, 0x94D9, 0x532A, + 0x94DA, 0x5351, 0x94DB, 0x5426, 0x94DC, 0x5983, 0x94DD, 0x5E87, 0x94DE, 0x5F7C, 0x94DF, 0x60B2, 0x94E0, 0x6249, 0x94E1, 0x6279, + 0x94E2, 0x62AB, 0x94E3, 0x6590, 0x94E4, 0x6BD4, 0x94E5, 0x6CCC, 0x94E6, 0x75B2, 0x94E7, 0x76AE, 0x94E8, 0x7891, 0x94E9, 0x79D8, + 0x94EA, 0x7DCB, 0x94EB, 0x7F77, 0x94EC, 0x80A5, 0x94ED, 0x88AB, 0x94EE, 0x8AB9, 0x94EF, 0x8CBB, 0x94F0, 0x907F, 0x94F1, 0x975E, + 0x94F2, 0x98DB, 0x94F3, 0x6A0B, 0x94F4, 0x7C38, 0x94F5, 0x5099, 0x94F6, 0x5C3E, 0x94F7, 0x5FAE, 0x94F8, 0x6787, 0x94F9, 0x6BD8, + 0x94FA, 0x7435, 0x94FB, 0x7709, 0x94FC, 0x7F8E, 0x9540, 0x9F3B, 0x9541, 0x67CA, 0x9542, 0x7A17, 0x9543, 0x5339, 0x9544, 0x758B, + 0x9545, 0x9AED, 0x9546, 0x5F66, 0x9547, 0x819D, 0x9548, 0x83F1, 0x9549, 0x8098, 0x954A, 0x5F3C, 0x954B, 0x5FC5, 0x954C, 0x7562, + 0x954D, 0x7B46, 0x954E, 0x903C, 0x954F, 0x6867, 0x9550, 0x59EB, 0x9551, 0x5A9B, 0x9552, 0x7D10, 0x9553, 0x767E, 0x9554, 0x8B2C, + 0x9555, 0x4FF5, 0x9556, 0x5F6A, 0x9557, 0x6A19, 0x9558, 0x6C37, 0x9559, 0x6F02, 0x955A, 0x74E2, 0x955B, 0x7968, 0x955C, 0x8868, + 0x955D, 0x8A55, 0x955E, 0x8C79, 0x955F, 0x5EDF, 0x9560, 0x63CF, 0x9561, 0x75C5, 0x9562, 0x79D2, 0x9563, 0x82D7, 0x9564, 0x9328, + 0x9565, 0x92F2, 0x9566, 0x849C, 0x9567, 0x86ED, 0x9568, 0x9C2D, 0x9569, 0x54C1, 0x956A, 0x5F6C, 0x956B, 0x658C, 0x956C, 0x6D5C, + 0x956D, 0x7015, 0x956E, 0x8CA7, 0x956F, 0x8CD3, 0x9570, 0x983B, 0x9571, 0x654F, 0x9572, 0x74F6, 0x9573, 0x4E0D, 0x9574, 0x4ED8, + 0x9575, 0x57E0, 0x9576, 0x592B, 0x9577, 0x5A66, 0x9578, 0x5BCC, 0x9579, 0x51A8, 0x957A, 0x5E03, 0x957B, 0x5E9C, 0x957C, 0x6016, + 0x957D, 0x6276, 0x957E, 0x6577, 0x9580, 0x65A7, 0x9581, 0x666E, 0x9582, 0x6D6E, 0x9583, 0x7236, 0x9584, 0x7B26, 0x9585, 0x8150, + 0x9586, 0x819A, 0x9587, 0x8299, 0x9588, 0x8B5C, 0x9589, 0x8CA0, 0x958A, 0x8CE6, 0x958B, 0x8D74, 0x958C, 0x961C, 0x958D, 0x9644, + 0x958E, 0x4FAE, 0x958F, 0x64AB, 0x9590, 0x6B66, 0x9591, 0x821E, 0x9592, 0x8461, 0x9593, 0x856A, 0x9594, 0x90E8, 0x9595, 0x5C01, + 0x9596, 0x6953, 0x9597, 0x98A8, 0x9598, 0x847A, 0x9599, 0x8557, 0x959A, 0x4F0F, 0x959B, 0x526F, 0x959C, 0x5FA9, 0x959D, 0x5E45, + 0x959E, 0x670D, 0x959F, 0x798F, 0x95A0, 0x8179, 0x95A1, 0x8907, 0x95A2, 0x8986, 0x95A3, 0x6DF5, 0x95A4, 0x5F17, 0x95A5, 0x6255, + 0x95A6, 0x6CB8, 0x95A7, 0x4ECF, 0x95A8, 0x7269, 0x95A9, 0x9B92, 0x95AA, 0x5206, 0x95AB, 0x543B, 0x95AC, 0x5674, 0x95AD, 0x58B3, + 0x95AE, 0x61A4, 0x95AF, 0x626E, 0x95B0, 0x711A, 0x95B1, 0x596E, 0x95B2, 0x7C89, 0x95B3, 0x7CDE, 0x95B4, 0x7D1B, 0x95B5, 0x96F0, + 0x95B6, 0x6587, 0x95B7, 0x805E, 0x95B8, 0x4E19, 0x95B9, 0x4F75, 0x95BA, 0x5175, 0x95BB, 0x5840, 0x95BC, 0x5E63, 0x95BD, 0x5E73, + 0x95BE, 0x5F0A, 0x95BF, 0x67C4, 0x95C0, 0x4E26, 0x95C1, 0x853D, 0x95C2, 0x9589, 0x95C3, 0x965B, 0x95C4, 0x7C73, 0x95C5, 0x9801, + 0x95C6, 0x50FB, 0x95C7, 0x58C1, 0x95C8, 0x7656, 0x95C9, 0x78A7, 0x95CA, 0x5225, 0x95CB, 0x77A5, 0x95CC, 0x8511, 0x95CD, 0x7B86, + 0x95CE, 0x504F, 0x95CF, 0x5909, 0x95D0, 0x7247, 0x95D1, 0x7BC7, 0x95D2, 0x7DE8, 0x95D3, 0x8FBA, 0x95D4, 0x8FD4, 0x95D5, 0x904D, + 0x95D6, 0x4FBF, 0x95D7, 0x52C9, 0x95D8, 0x5A29, 0x95D9, 0x5F01, 0x95DA, 0x97AD, 0x95DB, 0x4FDD, 0x95DC, 0x8217, 0x95DD, 0x92EA, + 0x95DE, 0x5703, 0x95DF, 0x6355, 0x95E0, 0x6B69, 0x95E1, 0x752B, 0x95E2, 0x88DC, 0x95E3, 0x8F14, 0x95E4, 0x7A42, 0x95E5, 0x52DF, + 0x95E6, 0x5893, 0x95E7, 0x6155, 0x95E8, 0x620A, 0x95E9, 0x66AE, 0x95EA, 0x6BCD, 0x95EB, 0x7C3F, 0x95EC, 0x83E9, 0x95ED, 0x5023, + 0x95EE, 0x4FF8, 0x95EF, 0x5305, 0x95F0, 0x5446, 0x95F1, 0x5831, 0x95F2, 0x5949, 0x95F3, 0x5B9D, 0x95F4, 0x5CF0, 0x95F5, 0x5CEF, + 0x95F6, 0x5D29, 0x95F7, 0x5E96, 0x95F8, 0x62B1, 0x95F9, 0x6367, 0x95FA, 0x653E, 0x95FB, 0x65B9, 0x95FC, 0x670B, 0x9640, 0x6CD5, + 0x9641, 0x6CE1, 0x9642, 0x70F9, 0x9643, 0x7832, 0x9644, 0x7E2B, 0x9645, 0x80DE, 0x9646, 0x82B3, 0x9647, 0x840C, 0x9648, 0x84EC, + 0x9649, 0x8702, 0x964A, 0x8912, 0x964B, 0x8A2A, 0x964C, 0x8C4A, 0x964D, 0x90A6, 0x964E, 0x92D2, 0x964F, 0x98FD, 0x9650, 0x9CF3, + 0x9651, 0x9D6C, 0x9652, 0x4E4F, 0x9653, 0x4EA1, 0x9654, 0x508D, 0x9655, 0x5256, 0x9656, 0x574A, 0x9657, 0x59A8, 0x9658, 0x5E3D, + 0x9659, 0x5FD8, 0x965A, 0x5FD9, 0x965B, 0x623F, 0x965C, 0x66B4, 0x965D, 0x671B, 0x965E, 0x67D0, 0x965F, 0x68D2, 0x9660, 0x5192, + 0x9661, 0x7D21, 0x9662, 0x80AA, 0x9663, 0x81A8, 0x9664, 0x8B00, 0x9665, 0x8C8C, 0x9666, 0x8CBF, 0x9667, 0x927E, 0x9668, 0x9632, + 0x9669, 0x5420, 0x966A, 0x982C, 0x966B, 0x5317, 0x966C, 0x50D5, 0x966D, 0x535C, 0x966E, 0x58A8, 0x966F, 0x64B2, 0x9670, 0x6734, + 0x9671, 0x7267, 0x9672, 0x7766, 0x9673, 0x7A46, 0x9674, 0x91E6, 0x9675, 0x52C3, 0x9676, 0x6CA1, 0x9677, 0x6B86, 0x9678, 0x5800, + 0x9679, 0x5E4C, 0x967A, 0x5954, 0x967B, 0x672C, 0x967C, 0x7FFB, 0x967D, 0x51E1, 0x967E, 0x76C6, 0x9680, 0x6469, 0x9681, 0x78E8, + 0x9682, 0x9B54, 0x9683, 0x9EBB, 0x9684, 0x57CB, 0x9685, 0x59B9, 0x9686, 0x6627, 0x9687, 0x679A, 0x9688, 0x6BCE, 0x9689, 0x54E9, + 0x968A, 0x69D9, 0x968B, 0x5E55, 0x968C, 0x819C, 0x968D, 0x6795, 0x968E, 0x9BAA, 0x968F, 0x67FE, 0x9690, 0x9C52, 0x9691, 0x685D, + 0x9692, 0x4EA6, 0x9693, 0x4FE3, 0x9694, 0x53C8, 0x9695, 0x62B9, 0x9696, 0x672B, 0x9697, 0x6CAB, 0x9698, 0x8FC4, 0x9699, 0x4FAD, + 0x969A, 0x7E6D, 0x969B, 0x9EBF, 0x969C, 0x4E07, 0x969D, 0x6162, 0x969E, 0x6E80, 0x969F, 0x6F2B, 0x96A0, 0x8513, 0x96A1, 0x5473, + 0x96A2, 0x672A, 0x96A3, 0x9B45, 0x96A4, 0x5DF3, 0x96A5, 0x7B95, 0x96A6, 0x5CAC, 0x96A7, 0x5BC6, 0x96A8, 0x871C, 0x96A9, 0x6E4A, + 0x96AA, 0x84D1, 0x96AB, 0x7A14, 0x96AC, 0x8108, 0x96AD, 0x5999, 0x96AE, 0x7C8D, 0x96AF, 0x6C11, 0x96B0, 0x7720, 0x96B1, 0x52D9, + 0x96B2, 0x5922, 0x96B3, 0x7121, 0x96B4, 0x725F, 0x96B5, 0x77DB, 0x96B6, 0x9727, 0x96B7, 0x9D61, 0x96B8, 0x690B, 0x96B9, 0x5A7F, + 0x96BA, 0x5A18, 0x96BB, 0x51A5, 0x96BC, 0x540D, 0x96BD, 0x547D, 0x96BE, 0x660E, 0x96BF, 0x76DF, 0x96C0, 0x8FF7, 0x96C1, 0x9298, + 0x96C2, 0x9CF4, 0x96C3, 0x59EA, 0x96C4, 0x725D, 0x96C5, 0x6EC5, 0x96C6, 0x514D, 0x96C7, 0x68C9, 0x96C8, 0x7DBF, 0x96C9, 0x7DEC, + 0x96CA, 0x9762, 0x96CB, 0x9EBA, 0x96CC, 0x6478, 0x96CD, 0x6A21, 0x96CE, 0x8302, 0x96CF, 0x5984, 0x96D0, 0x5B5F, 0x96D1, 0x6BDB, + 0x96D2, 0x731B, 0x96D3, 0x76F2, 0x96D4, 0x7DB2, 0x96D5, 0x8017, 0x96D6, 0x8499, 0x96D7, 0x5132, 0x96D8, 0x6728, 0x96D9, 0x9ED9, + 0x96DA, 0x76EE, 0x96DB, 0x6762, 0x96DC, 0x52FF, 0x96DD, 0x9905, 0x96DE, 0x5C24, 0x96DF, 0x623B, 0x96E0, 0x7C7E, 0x96E1, 0x8CB0, + 0x96E2, 0x554F, 0x96E3, 0x60B6, 0x96E4, 0x7D0B, 0x96E5, 0x9580, 0x96E6, 0x5301, 0x96E7, 0x4E5F, 0x96E8, 0x51B6, 0x96E9, 0x591C, + 0x96EA, 0x723A, 0x96EB, 0x8036, 0x96EC, 0x91CE, 0x96ED, 0x5F25, 0x96EE, 0x77E2, 0x96EF, 0x5384, 0x96F0, 0x5F79, 0x96F1, 0x7D04, + 0x96F2, 0x85AC, 0x96F3, 0x8A33, 0x96F4, 0x8E8D, 0x96F5, 0x9756, 0x96F6, 0x67F3, 0x96F7, 0x85AE, 0x96F8, 0x9453, 0x96F9, 0x6109, + 0x96FA, 0x6108, 0x96FB, 0x6CB9, 0x96FC, 0x7652, 0x9740, 0x8AED, 0x9741, 0x8F38, 0x9742, 0x552F, 0x9743, 0x4F51, 0x9744, 0x512A, + 0x9745, 0x52C7, 0x9746, 0x53CB, 0x9747, 0x5BA5, 0x9748, 0x5E7D, 0x9749, 0x60A0, 0x974A, 0x6182, 0x974B, 0x63D6, 0x974C, 0x6709, + 0x974D, 0x67DA, 0x974E, 0x6E67, 0x974F, 0x6D8C, 0x9750, 0x7336, 0x9751, 0x7337, 0x9752, 0x7531, 0x9753, 0x7950, 0x9754, 0x88D5, + 0x9755, 0x8A98, 0x9756, 0x904A, 0x9757, 0x9091, 0x9758, 0x90F5, 0x9759, 0x96C4, 0x975A, 0x878D, 0x975B, 0x5915, 0x975C, 0x4E88, + 0x975D, 0x4F59, 0x975E, 0x4E0E, 0x975F, 0x8A89, 0x9760, 0x8F3F, 0x9761, 0x9810, 0x9762, 0x50AD, 0x9763, 0x5E7C, 0x9764, 0x5996, + 0x9765, 0x5BB9, 0x9766, 0x5EB8, 0x9767, 0x63DA, 0x9768, 0x63FA, 0x9769, 0x64C1, 0x976A, 0x66DC, 0x976B, 0x694A, 0x976C, 0x69D8, + 0x976D, 0x6D0B, 0x976E, 0x6EB6, 0x976F, 0x7194, 0x9770, 0x7528, 0x9771, 0x7AAF, 0x9772, 0x7F8A, 0x9773, 0x8000, 0x9774, 0x8449, + 0x9775, 0x84C9, 0x9776, 0x8981, 0x9777, 0x8B21, 0x9778, 0x8E0A, 0x9779, 0x9065, 0x977A, 0x967D, 0x977B, 0x990A, 0x977C, 0x617E, + 0x977D, 0x6291, 0x977E, 0x6B32, 0x9780, 0x6C83, 0x9781, 0x6D74, 0x9782, 0x7FCC, 0x9783, 0x7FFC, 0x9784, 0x6DC0, 0x9785, 0x7F85, + 0x9786, 0x87BA, 0x9787, 0x88F8, 0x9788, 0x6765, 0x9789, 0x83B1, 0x978A, 0x983C, 0x978B, 0x96F7, 0x978C, 0x6D1B, 0x978D, 0x7D61, + 0x978E, 0x843D, 0x978F, 0x916A, 0x9790, 0x4E71, 0x9791, 0x5375, 0x9792, 0x5D50, 0x9793, 0x6B04, 0x9794, 0x6FEB, 0x9795, 0x85CD, + 0x9796, 0x862D, 0x9797, 0x89A7, 0x9798, 0x5229, 0x9799, 0x540F, 0x979A, 0x5C65, 0x979B, 0x674E, 0x979C, 0x68A8, 0x979D, 0x7406, + 0x979E, 0x7483, 0x979F, 0x75E2, 0x97A0, 0x88CF, 0x97A1, 0x88E1, 0x97A2, 0x91CC, 0x97A3, 0x96E2, 0x97A4, 0x9678, 0x97A5, 0x5F8B, + 0x97A6, 0x7387, 0x97A7, 0x7ACB, 0x97A8, 0x844E, 0x97A9, 0x63A0, 0x97AA, 0x7565, 0x97AB, 0x5289, 0x97AC, 0x6D41, 0x97AD, 0x6E9C, + 0x97AE, 0x7409, 0x97AF, 0x7559, 0x97B0, 0x786B, 0x97B1, 0x7C92, 0x97B2, 0x9686, 0x97B3, 0x7ADC, 0x97B4, 0x9F8D, 0x97B5, 0x4FB6, + 0x97B6, 0x616E, 0x97B7, 0x65C5, 0x97B8, 0x865C, 0x97B9, 0x4E86, 0x97BA, 0x4EAE, 0x97BB, 0x50DA, 0x97BC, 0x4E21, 0x97BD, 0x51CC, + 0x97BE, 0x5BEE, 0x97BF, 0x6599, 0x97C0, 0x6881, 0x97C1, 0x6DBC, 0x97C2, 0x731F, 0x97C3, 0x7642, 0x97C4, 0x77AD, 0x97C5, 0x7A1C, + 0x97C6, 0x7CE7, 0x97C7, 0x826F, 0x97C8, 0x8AD2, 0x97C9, 0x907C, 0x97CA, 0x91CF, 0x97CB, 0x9675, 0x97CC, 0x9818, 0x97CD, 0x529B, + 0x97CE, 0x7DD1, 0x97CF, 0x502B, 0x97D0, 0x5398, 0x97D1, 0x6797, 0x97D2, 0x6DCB, 0x97D3, 0x71D0, 0x97D4, 0x7433, 0x97D5, 0x81E8, + 0x97D6, 0x8F2A, 0x97D7, 0x96A3, 0x97D8, 0x9C57, 0x97D9, 0x9E9F, 0x97DA, 0x7460, 0x97DB, 0x5841, 0x97DC, 0x6D99, 0x97DD, 0x7D2F, + 0x97DE, 0x985E, 0x97DF, 0x4EE4, 0x97E0, 0x4F36, 0x97E1, 0x4F8B, 0x97E2, 0x51B7, 0x97E3, 0x52B1, 0x97E4, 0x5DBA, 0x97E5, 0x601C, + 0x97E6, 0x73B2, 0x97E7, 0x793C, 0x97E8, 0x82D3, 0x97E9, 0x9234, 0x97EA, 0x96B7, 0x97EB, 0x96F6, 0x97EC, 0x970A, 0x97ED, 0x9E97, + 0x97EE, 0x9F62, 0x97EF, 0x66A6, 0x97F0, 0x6B74, 0x97F1, 0x5217, 0x97F2, 0x52A3, 0x97F3, 0x70C8, 0x97F4, 0x88C2, 0x97F5, 0x5EC9, + 0x97F6, 0x604B, 0x97F7, 0x6190, 0x97F8, 0x6F23, 0x97F9, 0x7149, 0x97FA, 0x7C3E, 0x97FB, 0x7DF4, 0x97FC, 0x806F, 0x9840, 0x84EE, + 0x9841, 0x9023, 0x9842, 0x932C, 0x9843, 0x5442, 0x9844, 0x9B6F, 0x9845, 0x6AD3, 0x9846, 0x7089, 0x9847, 0x8CC2, 0x9848, 0x8DEF, + 0x9849, 0x9732, 0x984A, 0x52B4, 0x984B, 0x5A41, 0x984C, 0x5ECA, 0x984D, 0x5F04, 0x984E, 0x6717, 0x984F, 0x697C, 0x9850, 0x6994, + 0x9851, 0x6D6A, 0x9852, 0x6F0F, 0x9853, 0x7262, 0x9854, 0x72FC, 0x9855, 0x7BED, 0x9856, 0x8001, 0x9857, 0x807E, 0x9858, 0x874B, + 0x9859, 0x90CE, 0x985A, 0x516D, 0x985B, 0x9E93, 0x985C, 0x7984, 0x985D, 0x808B, 0x985E, 0x9332, 0x985F, 0x8AD6, 0x9860, 0x502D, + 0x9861, 0x548C, 0x9862, 0x8A71, 0x9863, 0x6B6A, 0x9864, 0x8CC4, 0x9865, 0x8107, 0x9866, 0x60D1, 0x9867, 0x67A0, 0x9868, 0x9DF2, + 0x9869, 0x4E99, 0x986A, 0x4E98, 0x986B, 0x9C10, 0x986C, 0x8A6B, 0x986D, 0x85C1, 0x986E, 0x8568, 0x986F, 0x6900, 0x9870, 0x6E7E, + 0x9871, 0x7897, 0x9872, 0x8155, 0x989F, 0x5F0C, 0x98A0, 0x4E10, 0x98A1, 0x4E15, 0x98A2, 0x4E2A, 0x98A3, 0x4E31, 0x98A4, 0x4E36, + 0x98A5, 0x4E3C, 0x98A6, 0x4E3F, 0x98A7, 0x4E42, 0x98A8, 0x4E56, 0x98A9, 0x4E58, 0x98AA, 0x4E82, 0x98AB, 0x4E85, 0x98AC, 0x8C6B, + 0x98AD, 0x4E8A, 0x98AE, 0x8212, 0x98AF, 0x5F0D, 0x98B0, 0x4E8E, 0x98B1, 0x4E9E, 0x98B2, 0x4E9F, 0x98B3, 0x4EA0, 0x98B4, 0x4EA2, + 0x98B5, 0x4EB0, 0x98B6, 0x4EB3, 0x98B7, 0x4EB6, 0x98B8, 0x4ECE, 0x98B9, 0x4ECD, 0x98BA, 0x4EC4, 0x98BB, 0x4EC6, 0x98BC, 0x4EC2, + 0x98BD, 0x4ED7, 0x98BE, 0x4EDE, 0x98BF, 0x4EED, 0x98C0, 0x4EDF, 0x98C1, 0x4EF7, 0x98C2, 0x4F09, 0x98C3, 0x4F5A, 0x98C4, 0x4F30, + 0x98C5, 0x4F5B, 0x98C6, 0x4F5D, 0x98C7, 0x4F57, 0x98C8, 0x4F47, 0x98C9, 0x4F76, 0x98CA, 0x4F88, 0x98CB, 0x4F8F, 0x98CC, 0x4F98, + 0x98CD, 0x4F7B, 0x98CE, 0x4F69, 0x98CF, 0x4F70, 0x98D0, 0x4F91, 0x98D1, 0x4F6F, 0x98D2, 0x4F86, 0x98D3, 0x4F96, 0x98D4, 0x5118, + 0x98D5, 0x4FD4, 0x98D6, 0x4FDF, 0x98D7, 0x4FCE, 0x98D8, 0x4FD8, 0x98D9, 0x4FDB, 0x98DA, 0x4FD1, 0x98DB, 0x4FDA, 0x98DC, 0x4FD0, + 0x98DD, 0x4FE4, 0x98DE, 0x4FE5, 0x98DF, 0x501A, 0x98E0, 0x5028, 0x98E1, 0x5014, 0x98E2, 0x502A, 0x98E3, 0x5025, 0x98E4, 0x5005, + 0x98E5, 0x4F1C, 0x98E6, 0x4FF6, 0x98E7, 0x5021, 0x98E8, 0x5029, 0x98E9, 0x502C, 0x98EA, 0x4FFE, 0x98EB, 0x4FEF, 0x98EC, 0x5011, + 0x98ED, 0x5006, 0x98EE, 0x5043, 0x98EF, 0x5047, 0x98F0, 0x6703, 0x98F1, 0x5055, 0x98F2, 0x5050, 0x98F3, 0x5048, 0x98F4, 0x505A, + 0x98F5, 0x5056, 0x98F6, 0x506C, 0x98F7, 0x5078, 0x98F8, 0x5080, 0x98F9, 0x509A, 0x98FA, 0x5085, 0x98FB, 0x50B4, 0x98FC, 0x50B2, + 0x9940, 0x50C9, 0x9941, 0x50CA, 0x9942, 0x50B3, 0x9943, 0x50C2, 0x9944, 0x50D6, 0x9945, 0x50DE, 0x9946, 0x50E5, 0x9947, 0x50ED, + 0x9948, 0x50E3, 0x9949, 0x50EE, 0x994A, 0x50F9, 0x994B, 0x50F5, 0x994C, 0x5109, 0x994D, 0x5101, 0x994E, 0x5102, 0x994F, 0x5116, + 0x9950, 0x5115, 0x9951, 0x5114, 0x9952, 0x511A, 0x9953, 0x5121, 0x9954, 0x513A, 0x9955, 0x5137, 0x9956, 0x513C, 0x9957, 0x513B, + 0x9958, 0x513F, 0x9959, 0x5140, 0x995A, 0x5152, 0x995B, 0x514C, 0x995C, 0x5154, 0x995D, 0x5162, 0x995E, 0x7AF8, 0x995F, 0x5169, + 0x9960, 0x516A, 0x9961, 0x516E, 0x9962, 0x5180, 0x9963, 0x5182, 0x9964, 0x56D8, 0x9965, 0x518C, 0x9966, 0x5189, 0x9967, 0x518F, + 0x9968, 0x5191, 0x9969, 0x5193, 0x996A, 0x5195, 0x996B, 0x5196, 0x996C, 0x51A4, 0x996D, 0x51A6, 0x996E, 0x51A2, 0x996F, 0x51A9, + 0x9970, 0x51AA, 0x9971, 0x51AB, 0x9972, 0x51B3, 0x9973, 0x51B1, 0x9974, 0x51B2, 0x9975, 0x51B0, 0x9976, 0x51B5, 0x9977, 0x51BD, + 0x9978, 0x51C5, 0x9979, 0x51C9, 0x997A, 0x51DB, 0x997B, 0x51E0, 0x997C, 0x8655, 0x997D, 0x51E9, 0x997E, 0x51ED, 0x9980, 0x51F0, + 0x9981, 0x51F5, 0x9982, 0x51FE, 0x9983, 0x5204, 0x9984, 0x520B, 0x9985, 0x5214, 0x9986, 0x520E, 0x9987, 0x5227, 0x9988, 0x522A, + 0x9989, 0x522E, 0x998A, 0x5233, 0x998B, 0x5239, 0x998C, 0x524F, 0x998D, 0x5244, 0x998E, 0x524B, 0x998F, 0x524C, 0x9990, 0x525E, + 0x9991, 0x5254, 0x9992, 0x526A, 0x9993, 0x5274, 0x9994, 0x5269, 0x9995, 0x5273, 0x9996, 0x527F, 0x9997, 0x527D, 0x9998, 0x528D, + 0x9999, 0x5294, 0x999A, 0x5292, 0x999B, 0x5271, 0x999C, 0x5288, 0x999D, 0x5291, 0x999E, 0x8FA8, 0x999F, 0x8FA7, 0x99A0, 0x52AC, + 0x99A1, 0x52AD, 0x99A2, 0x52BC, 0x99A3, 0x52B5, 0x99A4, 0x52C1, 0x99A5, 0x52CD, 0x99A6, 0x52D7, 0x99A7, 0x52DE, 0x99A8, 0x52E3, + 0x99A9, 0x52E6, 0x99AA, 0x98ED, 0x99AB, 0x52E0, 0x99AC, 0x52F3, 0x99AD, 0x52F5, 0x99AE, 0x52F8, 0x99AF, 0x52F9, 0x99B0, 0x5306, + 0x99B1, 0x5308, 0x99B2, 0x7538, 0x99B3, 0x530D, 0x99B4, 0x5310, 0x99B5, 0x530F, 0x99B6, 0x5315, 0x99B7, 0x531A, 0x99B8, 0x5323, + 0x99B9, 0x532F, 0x99BA, 0x5331, 0x99BB, 0x5333, 0x99BC, 0x5338, 0x99BD, 0x5340, 0x99BE, 0x5346, 0x99BF, 0x5345, 0x99C0, 0x4E17, + 0x99C1, 0x5349, 0x99C2, 0x534D, 0x99C3, 0x51D6, 0x99C4, 0x535E, 0x99C5, 0x5369, 0x99C6, 0x536E, 0x99C7, 0x5918, 0x99C8, 0x537B, + 0x99C9, 0x5377, 0x99CA, 0x5382, 0x99CB, 0x5396, 0x99CC, 0x53A0, 0x99CD, 0x53A6, 0x99CE, 0x53A5, 0x99CF, 0x53AE, 0x99D0, 0x53B0, + 0x99D1, 0x53B6, 0x99D2, 0x53C3, 0x99D3, 0x7C12, 0x99D4, 0x96D9, 0x99D5, 0x53DF, 0x99D6, 0x66FC, 0x99D7, 0x71EE, 0x99D8, 0x53EE, + 0x99D9, 0x53E8, 0x99DA, 0x53ED, 0x99DB, 0x53FA, 0x99DC, 0x5401, 0x99DD, 0x543D, 0x99DE, 0x5440, 0x99DF, 0x542C, 0x99E0, 0x542D, + 0x99E1, 0x543C, 0x99E2, 0x542E, 0x99E3, 0x5436, 0x99E4, 0x5429, 0x99E5, 0x541D, 0x99E6, 0x544E, 0x99E7, 0x548F, 0x99E8, 0x5475, + 0x99E9, 0x548E, 0x99EA, 0x545F, 0x99EB, 0x5471, 0x99EC, 0x5477, 0x99ED, 0x5470, 0x99EE, 0x5492, 0x99EF, 0x547B, 0x99F0, 0x5480, + 0x99F1, 0x5476, 0x99F2, 0x5484, 0x99F3, 0x5490, 0x99F4, 0x5486, 0x99F5, 0x54C7, 0x99F6, 0x54A2, 0x99F7, 0x54B8, 0x99F8, 0x54A5, + 0x99F9, 0x54AC, 0x99FA, 0x54C4, 0x99FB, 0x54C8, 0x99FC, 0x54A8, 0x9A40, 0x54AB, 0x9A41, 0x54C2, 0x9A42, 0x54A4, 0x9A43, 0x54BE, + 0x9A44, 0x54BC, 0x9A45, 0x54D8, 0x9A46, 0x54E5, 0x9A47, 0x54E6, 0x9A48, 0x550F, 0x9A49, 0x5514, 0x9A4A, 0x54FD, 0x9A4B, 0x54EE, + 0x9A4C, 0x54ED, 0x9A4D, 0x54FA, 0x9A4E, 0x54E2, 0x9A4F, 0x5539, 0x9A50, 0x5540, 0x9A51, 0x5563, 0x9A52, 0x554C, 0x9A53, 0x552E, + 0x9A54, 0x555C, 0x9A55, 0x5545, 0x9A56, 0x5556, 0x9A57, 0x5557, 0x9A58, 0x5538, 0x9A59, 0x5533, 0x9A5A, 0x555D, 0x9A5B, 0x5599, + 0x9A5C, 0x5580, 0x9A5D, 0x54AF, 0x9A5E, 0x558A, 0x9A5F, 0x559F, 0x9A60, 0x557B, 0x9A61, 0x557E, 0x9A62, 0x5598, 0x9A63, 0x559E, + 0x9A64, 0x55AE, 0x9A65, 0x557C, 0x9A66, 0x5583, 0x9A67, 0x55A9, 0x9A68, 0x5587, 0x9A69, 0x55A8, 0x9A6A, 0x55DA, 0x9A6B, 0x55C5, + 0x9A6C, 0x55DF, 0x9A6D, 0x55C4, 0x9A6E, 0x55DC, 0x9A6F, 0x55E4, 0x9A70, 0x55D4, 0x9A71, 0x5614, 0x9A72, 0x55F7, 0x9A73, 0x5616, + 0x9A74, 0x55FE, 0x9A75, 0x55FD, 0x9A76, 0x561B, 0x9A77, 0x55F9, 0x9A78, 0x564E, 0x9A79, 0x5650, 0x9A7A, 0x71DF, 0x9A7B, 0x5634, + 0x9A7C, 0x5636, 0x9A7D, 0x5632, 0x9A7E, 0x5638, 0x9A80, 0x566B, 0x9A81, 0x5664, 0x9A82, 0x562F, 0x9A83, 0x566C, 0x9A84, 0x566A, + 0x9A85, 0x5686, 0x9A86, 0x5680, 0x9A87, 0x568A, 0x9A88, 0x56A0, 0x9A89, 0x5694, 0x9A8A, 0x568F, 0x9A8B, 0x56A5, 0x9A8C, 0x56AE, + 0x9A8D, 0x56B6, 0x9A8E, 0x56B4, 0x9A8F, 0x56C2, 0x9A90, 0x56BC, 0x9A91, 0x56C1, 0x9A92, 0x56C3, 0x9A93, 0x56C0, 0x9A94, 0x56C8, + 0x9A95, 0x56CE, 0x9A96, 0x56D1, 0x9A97, 0x56D3, 0x9A98, 0x56D7, 0x9A99, 0x56EE, 0x9A9A, 0x56F9, 0x9A9B, 0x5700, 0x9A9C, 0x56FF, + 0x9A9D, 0x5704, 0x9A9E, 0x5709, 0x9A9F, 0x5708, 0x9AA0, 0x570B, 0x9AA1, 0x570D, 0x9AA2, 0x5713, 0x9AA3, 0x5718, 0x9AA4, 0x5716, + 0x9AA5, 0x55C7, 0x9AA6, 0x571C, 0x9AA7, 0x5726, 0x9AA8, 0x5737, 0x9AA9, 0x5738, 0x9AAA, 0x574E, 0x9AAB, 0x573B, 0x9AAC, 0x5740, + 0x9AAD, 0x574F, 0x9AAE, 0x5769, 0x9AAF, 0x57C0, 0x9AB0, 0x5788, 0x9AB1, 0x5761, 0x9AB2, 0x577F, 0x9AB3, 0x5789, 0x9AB4, 0x5793, + 0x9AB5, 0x57A0, 0x9AB6, 0x57B3, 0x9AB7, 0x57A4, 0x9AB8, 0x57AA, 0x9AB9, 0x57B0, 0x9ABA, 0x57C3, 0x9ABB, 0x57C6, 0x9ABC, 0x57D4, + 0x9ABD, 0x57D2, 0x9ABE, 0x57D3, 0x9ABF, 0x580A, 0x9AC0, 0x57D6, 0x9AC1, 0x57E3, 0x9AC2, 0x580B, 0x9AC3, 0x5819, 0x9AC4, 0x581D, + 0x9AC5, 0x5872, 0x9AC6, 0x5821, 0x9AC7, 0x5862, 0x9AC8, 0x584B, 0x9AC9, 0x5870, 0x9ACA, 0x6BC0, 0x9ACB, 0x5852, 0x9ACC, 0x583D, + 0x9ACD, 0x5879, 0x9ACE, 0x5885, 0x9ACF, 0x58B9, 0x9AD0, 0x589F, 0x9AD1, 0x58AB, 0x9AD2, 0x58BA, 0x9AD3, 0x58DE, 0x9AD4, 0x58BB, + 0x9AD5, 0x58B8, 0x9AD6, 0x58AE, 0x9AD7, 0x58C5, 0x9AD8, 0x58D3, 0x9AD9, 0x58D1, 0x9ADA, 0x58D7, 0x9ADB, 0x58D9, 0x9ADC, 0x58D8, + 0x9ADD, 0x58E5, 0x9ADE, 0x58DC, 0x9ADF, 0x58E4, 0x9AE0, 0x58DF, 0x9AE1, 0x58EF, 0x9AE2, 0x58FA, 0x9AE3, 0x58F9, 0x9AE4, 0x58FB, + 0x9AE5, 0x58FC, 0x9AE6, 0x58FD, 0x9AE7, 0x5902, 0x9AE8, 0x590A, 0x9AE9, 0x5910, 0x9AEA, 0x591B, 0x9AEB, 0x68A6, 0x9AEC, 0x5925, + 0x9AED, 0x592C, 0x9AEE, 0x592D, 0x9AEF, 0x5932, 0x9AF0, 0x5938, 0x9AF1, 0x593E, 0x9AF2, 0x7AD2, 0x9AF3, 0x5955, 0x9AF4, 0x5950, + 0x9AF5, 0x594E, 0x9AF6, 0x595A, 0x9AF7, 0x5958, 0x9AF8, 0x5962, 0x9AF9, 0x5960, 0x9AFA, 0x5967, 0x9AFB, 0x596C, 0x9AFC, 0x5969, + 0x9B40, 0x5978, 0x9B41, 0x5981, 0x9B42, 0x599D, 0x9B43, 0x4F5E, 0x9B44, 0x4FAB, 0x9B45, 0x59A3, 0x9B46, 0x59B2, 0x9B47, 0x59C6, + 0x9B48, 0x59E8, 0x9B49, 0x59DC, 0x9B4A, 0x598D, 0x9B4B, 0x59D9, 0x9B4C, 0x59DA, 0x9B4D, 0x5A25, 0x9B4E, 0x5A1F, 0x9B4F, 0x5A11, + 0x9B50, 0x5A1C, 0x9B51, 0x5A09, 0x9B52, 0x5A1A, 0x9B53, 0x5A40, 0x9B54, 0x5A6C, 0x9B55, 0x5A49, 0x9B56, 0x5A35, 0x9B57, 0x5A36, + 0x9B58, 0x5A62, 0x9B59, 0x5A6A, 0x9B5A, 0x5A9A, 0x9B5B, 0x5ABC, 0x9B5C, 0x5ABE, 0x9B5D, 0x5ACB, 0x9B5E, 0x5AC2, 0x9B5F, 0x5ABD, + 0x9B60, 0x5AE3, 0x9B61, 0x5AD7, 0x9B62, 0x5AE6, 0x9B63, 0x5AE9, 0x9B64, 0x5AD6, 0x9B65, 0x5AFA, 0x9B66, 0x5AFB, 0x9B67, 0x5B0C, + 0x9B68, 0x5B0B, 0x9B69, 0x5B16, 0x9B6A, 0x5B32, 0x9B6B, 0x5AD0, 0x9B6C, 0x5B2A, 0x9B6D, 0x5B36, 0x9B6E, 0x5B3E, 0x9B6F, 0x5B43, + 0x9B70, 0x5B45, 0x9B71, 0x5B40, 0x9B72, 0x5B51, 0x9B73, 0x5B55, 0x9B74, 0x5B5A, 0x9B75, 0x5B5B, 0x9B76, 0x5B65, 0x9B77, 0x5B69, + 0x9B78, 0x5B70, 0x9B79, 0x5B73, 0x9B7A, 0x5B75, 0x9B7B, 0x5B78, 0x9B7C, 0x6588, 0x9B7D, 0x5B7A, 0x9B7E, 0x5B80, 0x9B80, 0x5B83, + 0x9B81, 0x5BA6, 0x9B82, 0x5BB8, 0x9B83, 0x5BC3, 0x9B84, 0x5BC7, 0x9B85, 0x5BC9, 0x9B86, 0x5BD4, 0x9B87, 0x5BD0, 0x9B88, 0x5BE4, + 0x9B89, 0x5BE6, 0x9B8A, 0x5BE2, 0x9B8B, 0x5BDE, 0x9B8C, 0x5BE5, 0x9B8D, 0x5BEB, 0x9B8E, 0x5BF0, 0x9B8F, 0x5BF6, 0x9B90, 0x5BF3, + 0x9B91, 0x5C05, 0x9B92, 0x5C07, 0x9B93, 0x5C08, 0x9B94, 0x5C0D, 0x9B95, 0x5C13, 0x9B96, 0x5C20, 0x9B97, 0x5C22, 0x9B98, 0x5C28, + 0x9B99, 0x5C38, 0x9B9A, 0x5C39, 0x9B9B, 0x5C41, 0x9B9C, 0x5C46, 0x9B9D, 0x5C4E, 0x9B9E, 0x5C53, 0x9B9F, 0x5C50, 0x9BA0, 0x5C4F, + 0x9BA1, 0x5B71, 0x9BA2, 0x5C6C, 0x9BA3, 0x5C6E, 0x9BA4, 0x4E62, 0x9BA5, 0x5C76, 0x9BA6, 0x5C79, 0x9BA7, 0x5C8C, 0x9BA8, 0x5C91, + 0x9BA9, 0x5C94, 0x9BAA, 0x599B, 0x9BAB, 0x5CAB, 0x9BAC, 0x5CBB, 0x9BAD, 0x5CB6, 0x9BAE, 0x5CBC, 0x9BAF, 0x5CB7, 0x9BB0, 0x5CC5, + 0x9BB1, 0x5CBE, 0x9BB2, 0x5CC7, 0x9BB3, 0x5CD9, 0x9BB4, 0x5CE9, 0x9BB5, 0x5CFD, 0x9BB6, 0x5CFA, 0x9BB7, 0x5CED, 0x9BB8, 0x5D8C, + 0x9BB9, 0x5CEA, 0x9BBA, 0x5D0B, 0x9BBB, 0x5D15, 0x9BBC, 0x5D17, 0x9BBD, 0x5D5C, 0x9BBE, 0x5D1F, 0x9BBF, 0x5D1B, 0x9BC0, 0x5D11, + 0x9BC1, 0x5D14, 0x9BC2, 0x5D22, 0x9BC3, 0x5D1A, 0x9BC4, 0x5D19, 0x9BC5, 0x5D18, 0x9BC6, 0x5D4C, 0x9BC7, 0x5D52, 0x9BC8, 0x5D4E, + 0x9BC9, 0x5D4B, 0x9BCA, 0x5D6C, 0x9BCB, 0x5D73, 0x9BCC, 0x5D76, 0x9BCD, 0x5D87, 0x9BCE, 0x5D84, 0x9BCF, 0x5D82, 0x9BD0, 0x5DA2, + 0x9BD1, 0x5D9D, 0x9BD2, 0x5DAC, 0x9BD3, 0x5DAE, 0x9BD4, 0x5DBD, 0x9BD5, 0x5D90, 0x9BD6, 0x5DB7, 0x9BD7, 0x5DBC, 0x9BD8, 0x5DC9, + 0x9BD9, 0x5DCD, 0x9BDA, 0x5DD3, 0x9BDB, 0x5DD2, 0x9BDC, 0x5DD6, 0x9BDD, 0x5DDB, 0x9BDE, 0x5DEB, 0x9BDF, 0x5DF2, 0x9BE0, 0x5DF5, + 0x9BE1, 0x5E0B, 0x9BE2, 0x5E1A, 0x9BE3, 0x5E19, 0x9BE4, 0x5E11, 0x9BE5, 0x5E1B, 0x9BE6, 0x5E36, 0x9BE7, 0x5E37, 0x9BE8, 0x5E44, + 0x9BE9, 0x5E43, 0x9BEA, 0x5E40, 0x9BEB, 0x5E4E, 0x9BEC, 0x5E57, 0x9BED, 0x5E54, 0x9BEE, 0x5E5F, 0x9BEF, 0x5E62, 0x9BF0, 0x5E64, + 0x9BF1, 0x5E47, 0x9BF2, 0x5E75, 0x9BF3, 0x5E76, 0x9BF4, 0x5E7A, 0x9BF5, 0x9EBC, 0x9BF6, 0x5E7F, 0x9BF7, 0x5EA0, 0x9BF8, 0x5EC1, + 0x9BF9, 0x5EC2, 0x9BFA, 0x5EC8, 0x9BFB, 0x5ED0, 0x9BFC, 0x5ECF, 0x9C40, 0x5ED6, 0x9C41, 0x5EE3, 0x9C42, 0x5EDD, 0x9C43, 0x5EDA, + 0x9C44, 0x5EDB, 0x9C45, 0x5EE2, 0x9C46, 0x5EE1, 0x9C47, 0x5EE8, 0x9C48, 0x5EE9, 0x9C49, 0x5EEC, 0x9C4A, 0x5EF1, 0x9C4B, 0x5EF3, + 0x9C4C, 0x5EF0, 0x9C4D, 0x5EF4, 0x9C4E, 0x5EF8, 0x9C4F, 0x5EFE, 0x9C50, 0x5F03, 0x9C51, 0x5F09, 0x9C52, 0x5F5D, 0x9C53, 0x5F5C, + 0x9C54, 0x5F0B, 0x9C55, 0x5F11, 0x9C56, 0x5F16, 0x9C57, 0x5F29, 0x9C58, 0x5F2D, 0x9C59, 0x5F38, 0x9C5A, 0x5F41, 0x9C5B, 0x5F48, + 0x9C5C, 0x5F4C, 0x9C5D, 0x5F4E, 0x9C5E, 0x5F2F, 0x9C5F, 0x5F51, 0x9C60, 0x5F56, 0x9C61, 0x5F57, 0x9C62, 0x5F59, 0x9C63, 0x5F61, + 0x9C64, 0x5F6D, 0x9C65, 0x5F73, 0x9C66, 0x5F77, 0x9C67, 0x5F83, 0x9C68, 0x5F82, 0x9C69, 0x5F7F, 0x9C6A, 0x5F8A, 0x9C6B, 0x5F88, + 0x9C6C, 0x5F91, 0x9C6D, 0x5F87, 0x9C6E, 0x5F9E, 0x9C6F, 0x5F99, 0x9C70, 0x5F98, 0x9C71, 0x5FA0, 0x9C72, 0x5FA8, 0x9C73, 0x5FAD, + 0x9C74, 0x5FBC, 0x9C75, 0x5FD6, 0x9C76, 0x5FFB, 0x9C77, 0x5FE4, 0x9C78, 0x5FF8, 0x9C79, 0x5FF1, 0x9C7A, 0x5FDD, 0x9C7B, 0x60B3, + 0x9C7C, 0x5FFF, 0x9C7D, 0x6021, 0x9C7E, 0x6060, 0x9C80, 0x6019, 0x9C81, 0x6010, 0x9C82, 0x6029, 0x9C83, 0x600E, 0x9C84, 0x6031, + 0x9C85, 0x601B, 0x9C86, 0x6015, 0x9C87, 0x602B, 0x9C88, 0x6026, 0x9C89, 0x600F, 0x9C8A, 0x603A, 0x9C8B, 0x605A, 0x9C8C, 0x6041, + 0x9C8D, 0x606A, 0x9C8E, 0x6077, 0x9C8F, 0x605F, 0x9C90, 0x604A, 0x9C91, 0x6046, 0x9C92, 0x604D, 0x9C93, 0x6063, 0x9C94, 0x6043, + 0x9C95, 0x6064, 0x9C96, 0x6042, 0x9C97, 0x606C, 0x9C98, 0x606B, 0x9C99, 0x6059, 0x9C9A, 0x6081, 0x9C9B, 0x608D, 0x9C9C, 0x60E7, + 0x9C9D, 0x6083, 0x9C9E, 0x609A, 0x9C9F, 0x6084, 0x9CA0, 0x609B, 0x9CA1, 0x6096, 0x9CA2, 0x6097, 0x9CA3, 0x6092, 0x9CA4, 0x60A7, + 0x9CA5, 0x608B, 0x9CA6, 0x60E1, 0x9CA7, 0x60B8, 0x9CA8, 0x60E0, 0x9CA9, 0x60D3, 0x9CAA, 0x60B4, 0x9CAB, 0x5FF0, 0x9CAC, 0x60BD, + 0x9CAD, 0x60C6, 0x9CAE, 0x60B5, 0x9CAF, 0x60D8, 0x9CB0, 0x614D, 0x9CB1, 0x6115, 0x9CB2, 0x6106, 0x9CB3, 0x60F6, 0x9CB4, 0x60F7, + 0x9CB5, 0x6100, 0x9CB6, 0x60F4, 0x9CB7, 0x60FA, 0x9CB8, 0x6103, 0x9CB9, 0x6121, 0x9CBA, 0x60FB, 0x9CBB, 0x60F1, 0x9CBC, 0x610D, + 0x9CBD, 0x610E, 0x9CBE, 0x6147, 0x9CBF, 0x613E, 0x9CC0, 0x6128, 0x9CC1, 0x6127, 0x9CC2, 0x614A, 0x9CC3, 0x613F, 0x9CC4, 0x613C, + 0x9CC5, 0x612C, 0x9CC6, 0x6134, 0x9CC7, 0x613D, 0x9CC8, 0x6142, 0x9CC9, 0x6144, 0x9CCA, 0x6173, 0x9CCB, 0x6177, 0x9CCC, 0x6158, + 0x9CCD, 0x6159, 0x9CCE, 0x615A, 0x9CCF, 0x616B, 0x9CD0, 0x6174, 0x9CD1, 0x616F, 0x9CD2, 0x6165, 0x9CD3, 0x6171, 0x9CD4, 0x615F, + 0x9CD5, 0x615D, 0x9CD6, 0x6153, 0x9CD7, 0x6175, 0x9CD8, 0x6199, 0x9CD9, 0x6196, 0x9CDA, 0x6187, 0x9CDB, 0x61AC, 0x9CDC, 0x6194, + 0x9CDD, 0x619A, 0x9CDE, 0x618A, 0x9CDF, 0x6191, 0x9CE0, 0x61AB, 0x9CE1, 0x61AE, 0x9CE2, 0x61CC, 0x9CE3, 0x61CA, 0x9CE4, 0x61C9, + 0x9CE5, 0x61F7, 0x9CE6, 0x61C8, 0x9CE7, 0x61C3, 0x9CE8, 0x61C6, 0x9CE9, 0x61BA, 0x9CEA, 0x61CB, 0x9CEB, 0x7F79, 0x9CEC, 0x61CD, + 0x9CED, 0x61E6, 0x9CEE, 0x61E3, 0x9CEF, 0x61F6, 0x9CF0, 0x61FA, 0x9CF1, 0x61F4, 0x9CF2, 0x61FF, 0x9CF3, 0x61FD, 0x9CF4, 0x61FC, + 0x9CF5, 0x61FE, 0x9CF6, 0x6200, 0x9CF7, 0x6208, 0x9CF8, 0x6209, 0x9CF9, 0x620D, 0x9CFA, 0x620C, 0x9CFB, 0x6214, 0x9CFC, 0x621B, + 0x9D40, 0x621E, 0x9D41, 0x6221, 0x9D42, 0x622A, 0x9D43, 0x622E, 0x9D44, 0x6230, 0x9D45, 0x6232, 0x9D46, 0x6233, 0x9D47, 0x6241, + 0x9D48, 0x624E, 0x9D49, 0x625E, 0x9D4A, 0x6263, 0x9D4B, 0x625B, 0x9D4C, 0x6260, 0x9D4D, 0x6268, 0x9D4E, 0x627C, 0x9D4F, 0x6282, + 0x9D50, 0x6289, 0x9D51, 0x627E, 0x9D52, 0x6292, 0x9D53, 0x6293, 0x9D54, 0x6296, 0x9D55, 0x62D4, 0x9D56, 0x6283, 0x9D57, 0x6294, + 0x9D58, 0x62D7, 0x9D59, 0x62D1, 0x9D5A, 0x62BB, 0x9D5B, 0x62CF, 0x9D5C, 0x62FF, 0x9D5D, 0x62C6, 0x9D5E, 0x64D4, 0x9D5F, 0x62C8, + 0x9D60, 0x62DC, 0x9D61, 0x62CC, 0x9D62, 0x62CA, 0x9D63, 0x62C2, 0x9D64, 0x62C7, 0x9D65, 0x629B, 0x9D66, 0x62C9, 0x9D67, 0x630C, + 0x9D68, 0x62EE, 0x9D69, 0x62F1, 0x9D6A, 0x6327, 0x9D6B, 0x6302, 0x9D6C, 0x6308, 0x9D6D, 0x62EF, 0x9D6E, 0x62F5, 0x9D6F, 0x6350, + 0x9D70, 0x633E, 0x9D71, 0x634D, 0x9D72, 0x641C, 0x9D73, 0x634F, 0x9D74, 0x6396, 0x9D75, 0x638E, 0x9D76, 0x6380, 0x9D77, 0x63AB, + 0x9D78, 0x6376, 0x9D79, 0x63A3, 0x9D7A, 0x638F, 0x9D7B, 0x6389, 0x9D7C, 0x639F, 0x9D7D, 0x63B5, 0x9D7E, 0x636B, 0x9D80, 0x6369, + 0x9D81, 0x63BE, 0x9D82, 0x63E9, 0x9D83, 0x63C0, 0x9D84, 0x63C6, 0x9D85, 0x63E3, 0x9D86, 0x63C9, 0x9D87, 0x63D2, 0x9D88, 0x63F6, + 0x9D89, 0x63C4, 0x9D8A, 0x6416, 0x9D8B, 0x6434, 0x9D8C, 0x6406, 0x9D8D, 0x6413, 0x9D8E, 0x6426, 0x9D8F, 0x6436, 0x9D90, 0x651D, + 0x9D91, 0x6417, 0x9D92, 0x6428, 0x9D93, 0x640F, 0x9D94, 0x6467, 0x9D95, 0x646F, 0x9D96, 0x6476, 0x9D97, 0x644E, 0x9D98, 0x652A, + 0x9D99, 0x6495, 0x9D9A, 0x6493, 0x9D9B, 0x64A5, 0x9D9C, 0x64A9, 0x9D9D, 0x6488, 0x9D9E, 0x64BC, 0x9D9F, 0x64DA, 0x9DA0, 0x64D2, + 0x9DA1, 0x64C5, 0x9DA2, 0x64C7, 0x9DA3, 0x64BB, 0x9DA4, 0x64D8, 0x9DA5, 0x64C2, 0x9DA6, 0x64F1, 0x9DA7, 0x64E7, 0x9DA8, 0x8209, + 0x9DA9, 0x64E0, 0x9DAA, 0x64E1, 0x9DAB, 0x62AC, 0x9DAC, 0x64E3, 0x9DAD, 0x64EF, 0x9DAE, 0x652C, 0x9DAF, 0x64F6, 0x9DB0, 0x64F4, + 0x9DB1, 0x64F2, 0x9DB2, 0x64FA, 0x9DB3, 0x6500, 0x9DB4, 0x64FD, 0x9DB5, 0x6518, 0x9DB6, 0x651C, 0x9DB7, 0x6505, 0x9DB8, 0x6524, + 0x9DB9, 0x6523, 0x9DBA, 0x652B, 0x9DBB, 0x6534, 0x9DBC, 0x6535, 0x9DBD, 0x6537, 0x9DBE, 0x6536, 0x9DBF, 0x6538, 0x9DC0, 0x754B, + 0x9DC1, 0x6548, 0x9DC2, 0x6556, 0x9DC3, 0x6555, 0x9DC4, 0x654D, 0x9DC5, 0x6558, 0x9DC6, 0x655E, 0x9DC7, 0x655D, 0x9DC8, 0x6572, + 0x9DC9, 0x6578, 0x9DCA, 0x6582, 0x9DCB, 0x6583, 0x9DCC, 0x8B8A, 0x9DCD, 0x659B, 0x9DCE, 0x659F, 0x9DCF, 0x65AB, 0x9DD0, 0x65B7, + 0x9DD1, 0x65C3, 0x9DD2, 0x65C6, 0x9DD3, 0x65C1, 0x9DD4, 0x65C4, 0x9DD5, 0x65CC, 0x9DD6, 0x65D2, 0x9DD7, 0x65DB, 0x9DD8, 0x65D9, + 0x9DD9, 0x65E0, 0x9DDA, 0x65E1, 0x9DDB, 0x65F1, 0x9DDC, 0x6772, 0x9DDD, 0x660A, 0x9DDE, 0x6603, 0x9DDF, 0x65FB, 0x9DE0, 0x6773, + 0x9DE1, 0x6635, 0x9DE2, 0x6636, 0x9DE3, 0x6634, 0x9DE4, 0x661C, 0x9DE5, 0x664F, 0x9DE6, 0x6644, 0x9DE7, 0x6649, 0x9DE8, 0x6641, + 0x9DE9, 0x665E, 0x9DEA, 0x665D, 0x9DEB, 0x6664, 0x9DEC, 0x6667, 0x9DED, 0x6668, 0x9DEE, 0x665F, 0x9DEF, 0x6662, 0x9DF0, 0x6670, + 0x9DF1, 0x6683, 0x9DF2, 0x6688, 0x9DF3, 0x668E, 0x9DF4, 0x6689, 0x9DF5, 0x6684, 0x9DF6, 0x6698, 0x9DF7, 0x669D, 0x9DF8, 0x66C1, + 0x9DF9, 0x66B9, 0x9DFA, 0x66C9, 0x9DFB, 0x66BE, 0x9DFC, 0x66BC, 0x9E40, 0x66C4, 0x9E41, 0x66B8, 0x9E42, 0x66D6, 0x9E43, 0x66DA, + 0x9E44, 0x66E0, 0x9E45, 0x663F, 0x9E46, 0x66E6, 0x9E47, 0x66E9, 0x9E48, 0x66F0, 0x9E49, 0x66F5, 0x9E4A, 0x66F7, 0x9E4B, 0x670F, + 0x9E4C, 0x6716, 0x9E4D, 0x671E, 0x9E4E, 0x6726, 0x9E4F, 0x6727, 0x9E50, 0x9738, 0x9E51, 0x672E, 0x9E52, 0x673F, 0x9E53, 0x6736, + 0x9E54, 0x6741, 0x9E55, 0x6738, 0x9E56, 0x6737, 0x9E57, 0x6746, 0x9E58, 0x675E, 0x9E59, 0x6760, 0x9E5A, 0x6759, 0x9E5B, 0x6763, + 0x9E5C, 0x6764, 0x9E5D, 0x6789, 0x9E5E, 0x6770, 0x9E5F, 0x67A9, 0x9E60, 0x677C, 0x9E61, 0x676A, 0x9E62, 0x678C, 0x9E63, 0x678B, + 0x9E64, 0x67A6, 0x9E65, 0x67A1, 0x9E66, 0x6785, 0x9E67, 0x67B7, 0x9E68, 0x67EF, 0x9E69, 0x67B4, 0x9E6A, 0x67EC, 0x9E6B, 0x67B3, + 0x9E6C, 0x67E9, 0x9E6D, 0x67B8, 0x9E6E, 0x67E4, 0x9E6F, 0x67DE, 0x9E70, 0x67DD, 0x9E71, 0x67E2, 0x9E72, 0x67EE, 0x9E73, 0x67B9, + 0x9E74, 0x67CE, 0x9E75, 0x67C6, 0x9E76, 0x67E7, 0x9E77, 0x6A9C, 0x9E78, 0x681E, 0x9E79, 0x6846, 0x9E7A, 0x6829, 0x9E7B, 0x6840, + 0x9E7C, 0x684D, 0x9E7D, 0x6832, 0x9E7E, 0x684E, 0x9E80, 0x68B3, 0x9E81, 0x682B, 0x9E82, 0x6859, 0x9E83, 0x6863, 0x9E84, 0x6877, + 0x9E85, 0x687F, 0x9E86, 0x689F, 0x9E87, 0x688F, 0x9E88, 0x68AD, 0x9E89, 0x6894, 0x9E8A, 0x689D, 0x9E8B, 0x689B, 0x9E8C, 0x6883, + 0x9E8D, 0x6AAE, 0x9E8E, 0x68B9, 0x9E8F, 0x6874, 0x9E90, 0x68B5, 0x9E91, 0x68A0, 0x9E92, 0x68BA, 0x9E93, 0x690F, 0x9E94, 0x688D, + 0x9E95, 0x687E, 0x9E96, 0x6901, 0x9E97, 0x68CA, 0x9E98, 0x6908, 0x9E99, 0x68D8, 0x9E9A, 0x6922, 0x9E9B, 0x6926, 0x9E9C, 0x68E1, + 0x9E9D, 0x690C, 0x9E9E, 0x68CD, 0x9E9F, 0x68D4, 0x9EA0, 0x68E7, 0x9EA1, 0x68D5, 0x9EA2, 0x6936, 0x9EA3, 0x6912, 0x9EA4, 0x6904, + 0x9EA5, 0x68D7, 0x9EA6, 0x68E3, 0x9EA7, 0x6925, 0x9EA8, 0x68F9, 0x9EA9, 0x68E0, 0x9EAA, 0x68EF, 0x9EAB, 0x6928, 0x9EAC, 0x692A, + 0x9EAD, 0x691A, 0x9EAE, 0x6923, 0x9EAF, 0x6921, 0x9EB0, 0x68C6, 0x9EB1, 0x6979, 0x9EB2, 0x6977, 0x9EB3, 0x695C, 0x9EB4, 0x6978, + 0x9EB5, 0x696B, 0x9EB6, 0x6954, 0x9EB7, 0x697E, 0x9EB8, 0x696E, 0x9EB9, 0x6939, 0x9EBA, 0x6974, 0x9EBB, 0x693D, 0x9EBC, 0x6959, + 0x9EBD, 0x6930, 0x9EBE, 0x6961, 0x9EBF, 0x695E, 0x9EC0, 0x695D, 0x9EC1, 0x6981, 0x9EC2, 0x696A, 0x9EC3, 0x69B2, 0x9EC4, 0x69AE, + 0x9EC5, 0x69D0, 0x9EC6, 0x69BF, 0x9EC7, 0x69C1, 0x9EC8, 0x69D3, 0x9EC9, 0x69BE, 0x9ECA, 0x69CE, 0x9ECB, 0x5BE8, 0x9ECC, 0x69CA, + 0x9ECD, 0x69DD, 0x9ECE, 0x69BB, 0x9ECF, 0x69C3, 0x9ED0, 0x69A7, 0x9ED1, 0x6A2E, 0x9ED2, 0x6991, 0x9ED3, 0x69A0, 0x9ED4, 0x699C, + 0x9ED5, 0x6995, 0x9ED6, 0x69B4, 0x9ED7, 0x69DE, 0x9ED8, 0x69E8, 0x9ED9, 0x6A02, 0x9EDA, 0x6A1B, 0x9EDB, 0x69FF, 0x9EDC, 0x6B0A, + 0x9EDD, 0x69F9, 0x9EDE, 0x69F2, 0x9EDF, 0x69E7, 0x9EE0, 0x6A05, 0x9EE1, 0x69B1, 0x9EE2, 0x6A1E, 0x9EE3, 0x69ED, 0x9EE4, 0x6A14, + 0x9EE5, 0x69EB, 0x9EE6, 0x6A0A, 0x9EE7, 0x6A12, 0x9EE8, 0x6AC1, 0x9EE9, 0x6A23, 0x9EEA, 0x6A13, 0x9EEB, 0x6A44, 0x9EEC, 0x6A0C, + 0x9EED, 0x6A72, 0x9EEE, 0x6A36, 0x9EEF, 0x6A78, 0x9EF0, 0x6A47, 0x9EF1, 0x6A62, 0x9EF2, 0x6A59, 0x9EF3, 0x6A66, 0x9EF4, 0x6A48, + 0x9EF5, 0x6A38, 0x9EF6, 0x6A22, 0x9EF7, 0x6A90, 0x9EF8, 0x6A8D, 0x9EF9, 0x6AA0, 0x9EFA, 0x6A84, 0x9EFB, 0x6AA2, 0x9EFC, 0x6AA3, + 0x9F40, 0x6A97, 0x9F41, 0x8617, 0x9F42, 0x6ABB, 0x9F43, 0x6AC3, 0x9F44, 0x6AC2, 0x9F45, 0x6AB8, 0x9F46, 0x6AB3, 0x9F47, 0x6AAC, + 0x9F48, 0x6ADE, 0x9F49, 0x6AD1, 0x9F4A, 0x6ADF, 0x9F4B, 0x6AAA, 0x9F4C, 0x6ADA, 0x9F4D, 0x6AEA, 0x9F4E, 0x6AFB, 0x9F4F, 0x6B05, + 0x9F50, 0x8616, 0x9F51, 0x6AFA, 0x9F52, 0x6B12, 0x9F53, 0x6B16, 0x9F54, 0x9B31, 0x9F55, 0x6B1F, 0x9F56, 0x6B38, 0x9F57, 0x6B37, + 0x9F58, 0x76DC, 0x9F59, 0x6B39, 0x9F5A, 0x98EE, 0x9F5B, 0x6B47, 0x9F5C, 0x6B43, 0x9F5D, 0x6B49, 0x9F5E, 0x6B50, 0x9F5F, 0x6B59, + 0x9F60, 0x6B54, 0x9F61, 0x6B5B, 0x9F62, 0x6B5F, 0x9F63, 0x6B61, 0x9F64, 0x6B78, 0x9F65, 0x6B79, 0x9F66, 0x6B7F, 0x9F67, 0x6B80, + 0x9F68, 0x6B84, 0x9F69, 0x6B83, 0x9F6A, 0x6B8D, 0x9F6B, 0x6B98, 0x9F6C, 0x6B95, 0x9F6D, 0x6B9E, 0x9F6E, 0x6BA4, 0x9F6F, 0x6BAA, + 0x9F70, 0x6BAB, 0x9F71, 0x6BAF, 0x9F72, 0x6BB2, 0x9F73, 0x6BB1, 0x9F74, 0x6BB3, 0x9F75, 0x6BB7, 0x9F76, 0x6BBC, 0x9F77, 0x6BC6, + 0x9F78, 0x6BCB, 0x9F79, 0x6BD3, 0x9F7A, 0x6BDF, 0x9F7B, 0x6BEC, 0x9F7C, 0x6BEB, 0x9F7D, 0x6BF3, 0x9F7E, 0x6BEF, 0x9F80, 0x9EBE, + 0x9F81, 0x6C08, 0x9F82, 0x6C13, 0x9F83, 0x6C14, 0x9F84, 0x6C1B, 0x9F85, 0x6C24, 0x9F86, 0x6C23, 0x9F87, 0x6C5E, 0x9F88, 0x6C55, + 0x9F89, 0x6C62, 0x9F8A, 0x6C6A, 0x9F8B, 0x6C82, 0x9F8C, 0x6C8D, 0x9F8D, 0x6C9A, 0x9F8E, 0x6C81, 0x9F8F, 0x6C9B, 0x9F90, 0x6C7E, + 0x9F91, 0x6C68, 0x9F92, 0x6C73, 0x9F93, 0x6C92, 0x9F94, 0x6C90, 0x9F95, 0x6CC4, 0x9F96, 0x6CF1, 0x9F97, 0x6CD3, 0x9F98, 0x6CBD, + 0x9F99, 0x6CD7, 0x9F9A, 0x6CC5, 0x9F9B, 0x6CDD, 0x9F9C, 0x6CAE, 0x9F9D, 0x6CB1, 0x9F9E, 0x6CBE, 0x9F9F, 0x6CBA, 0x9FA0, 0x6CDB, + 0x9FA1, 0x6CEF, 0x9FA2, 0x6CD9, 0x9FA3, 0x6CEA, 0x9FA4, 0x6D1F, 0x9FA5, 0x884D, 0x9FA6, 0x6D36, 0x9FA7, 0x6D2B, 0x9FA8, 0x6D3D, + 0x9FA9, 0x6D38, 0x9FAA, 0x6D19, 0x9FAB, 0x6D35, 0x9FAC, 0x6D33, 0x9FAD, 0x6D12, 0x9FAE, 0x6D0C, 0x9FAF, 0x6D63, 0x9FB0, 0x6D93, + 0x9FB1, 0x6D64, 0x9FB2, 0x6D5A, 0x9FB3, 0x6D79, 0x9FB4, 0x6D59, 0x9FB5, 0x6D8E, 0x9FB6, 0x6D95, 0x9FB7, 0x6FE4, 0x9FB8, 0x6D85, + 0x9FB9, 0x6DF9, 0x9FBA, 0x6E15, 0x9FBB, 0x6E0A, 0x9FBC, 0x6DB5, 0x9FBD, 0x6DC7, 0x9FBE, 0x6DE6, 0x9FBF, 0x6DB8, 0x9FC0, 0x6DC6, + 0x9FC1, 0x6DEC, 0x9FC2, 0x6DDE, 0x9FC3, 0x6DCC, 0x9FC4, 0x6DE8, 0x9FC5, 0x6DD2, 0x9FC6, 0x6DC5, 0x9FC7, 0x6DFA, 0x9FC8, 0x6DD9, + 0x9FC9, 0x6DE4, 0x9FCA, 0x6DD5, 0x9FCB, 0x6DEA, 0x9FCC, 0x6DEE, 0x9FCD, 0x6E2D, 0x9FCE, 0x6E6E, 0x9FCF, 0x6E2E, 0x9FD0, 0x6E19, + 0x9FD1, 0x6E72, 0x9FD2, 0x6E5F, 0x9FD3, 0x6E3E, 0x9FD4, 0x6E23, 0x9FD5, 0x6E6B, 0x9FD6, 0x6E2B, 0x9FD7, 0x6E76, 0x9FD8, 0x6E4D, + 0x9FD9, 0x6E1F, 0x9FDA, 0x6E43, 0x9FDB, 0x6E3A, 0x9FDC, 0x6E4E, 0x9FDD, 0x6E24, 0x9FDE, 0x6EFF, 0x9FDF, 0x6E1D, 0x9FE0, 0x6E38, + 0x9FE1, 0x6E82, 0x9FE2, 0x6EAA, 0x9FE3, 0x6E98, 0x9FE4, 0x6EC9, 0x9FE5, 0x6EB7, 0x9FE6, 0x6ED3, 0x9FE7, 0x6EBD, 0x9FE8, 0x6EAF, + 0x9FE9, 0x6EC4, 0x9FEA, 0x6EB2, 0x9FEB, 0x6ED4, 0x9FEC, 0x6ED5, 0x9FED, 0x6E8F, 0x9FEE, 0x6EA5, 0x9FEF, 0x6EC2, 0x9FF0, 0x6E9F, + 0x9FF1, 0x6F41, 0x9FF2, 0x6F11, 0x9FF3, 0x704C, 0x9FF4, 0x6EEC, 0x9FF5, 0x6EF8, 0x9FF6, 0x6EFE, 0x9FF7, 0x6F3F, 0x9FF8, 0x6EF2, + 0x9FF9, 0x6F31, 0x9FFA, 0x6EEF, 0x9FFB, 0x6F32, 0x9FFC, 0x6ECC, 0xE040, 0x6F3E, 0xE041, 0x6F13, 0xE042, 0x6EF7, 0xE043, 0x6F86, + 0xE044, 0x6F7A, 0xE045, 0x6F78, 0xE046, 0x6F81, 0xE047, 0x6F80, 0xE048, 0x6F6F, 0xE049, 0x6F5B, 0xE04A, 0x6FF3, 0xE04B, 0x6F6D, + 0xE04C, 0x6F82, 0xE04D, 0x6F7C, 0xE04E, 0x6F58, 0xE04F, 0x6F8E, 0xE050, 0x6F91, 0xE051, 0x6FC2, 0xE052, 0x6F66, 0xE053, 0x6FB3, + 0xE054, 0x6FA3, 0xE055, 0x6FA1, 0xE056, 0x6FA4, 0xE057, 0x6FB9, 0xE058, 0x6FC6, 0xE059, 0x6FAA, 0xE05A, 0x6FDF, 0xE05B, 0x6FD5, + 0xE05C, 0x6FEC, 0xE05D, 0x6FD4, 0xE05E, 0x6FD8, 0xE05F, 0x6FF1, 0xE060, 0x6FEE, 0xE061, 0x6FDB, 0xE062, 0x7009, 0xE063, 0x700B, + 0xE064, 0x6FFA, 0xE065, 0x7011, 0xE066, 0x7001, 0xE067, 0x700F, 0xE068, 0x6FFE, 0xE069, 0x701B, 0xE06A, 0x701A, 0xE06B, 0x6F74, + 0xE06C, 0x701D, 0xE06D, 0x7018, 0xE06E, 0x701F, 0xE06F, 0x7030, 0xE070, 0x703E, 0xE071, 0x7032, 0xE072, 0x7051, 0xE073, 0x7063, + 0xE074, 0x7099, 0xE075, 0x7092, 0xE076, 0x70AF, 0xE077, 0x70F1, 0xE078, 0x70AC, 0xE079, 0x70B8, 0xE07A, 0x70B3, 0xE07B, 0x70AE, + 0xE07C, 0x70DF, 0xE07D, 0x70CB, 0xE07E, 0x70DD, 0xE080, 0x70D9, 0xE081, 0x7109, 0xE082, 0x70FD, 0xE083, 0x711C, 0xE084, 0x7119, + 0xE085, 0x7165, 0xE086, 0x7155, 0xE087, 0x7188, 0xE088, 0x7166, 0xE089, 0x7162, 0xE08A, 0x714C, 0xE08B, 0x7156, 0xE08C, 0x716C, + 0xE08D, 0x718F, 0xE08E, 0x71FB, 0xE08F, 0x7184, 0xE090, 0x7195, 0xE091, 0x71A8, 0xE092, 0x71AC, 0xE093, 0x71D7, 0xE094, 0x71B9, + 0xE095, 0x71BE, 0xE096, 0x71D2, 0xE097, 0x71C9, 0xE098, 0x71D4, 0xE099, 0x71CE, 0xE09A, 0x71E0, 0xE09B, 0x71EC, 0xE09C, 0x71E7, + 0xE09D, 0x71F5, 0xE09E, 0x71FC, 0xE09F, 0x71F9, 0xE0A0, 0x71FF, 0xE0A1, 0x720D, 0xE0A2, 0x7210, 0xE0A3, 0x721B, 0xE0A4, 0x7228, + 0xE0A5, 0x722D, 0xE0A6, 0x722C, 0xE0A7, 0x7230, 0xE0A8, 0x7232, 0xE0A9, 0x723B, 0xE0AA, 0x723C, 0xE0AB, 0x723F, 0xE0AC, 0x7240, + 0xE0AD, 0x7246, 0xE0AE, 0x724B, 0xE0AF, 0x7258, 0xE0B0, 0x7274, 0xE0B1, 0x727E, 0xE0B2, 0x7282, 0xE0B3, 0x7281, 0xE0B4, 0x7287, + 0xE0B5, 0x7292, 0xE0B6, 0x7296, 0xE0B7, 0x72A2, 0xE0B8, 0x72A7, 0xE0B9, 0x72B9, 0xE0BA, 0x72B2, 0xE0BB, 0x72C3, 0xE0BC, 0x72C6, + 0xE0BD, 0x72C4, 0xE0BE, 0x72CE, 0xE0BF, 0x72D2, 0xE0C0, 0x72E2, 0xE0C1, 0x72E0, 0xE0C2, 0x72E1, 0xE0C3, 0x72F9, 0xE0C4, 0x72F7, + 0xE0C5, 0x500F, 0xE0C6, 0x7317, 0xE0C7, 0x730A, 0xE0C8, 0x731C, 0xE0C9, 0x7316, 0xE0CA, 0x731D, 0xE0CB, 0x7334, 0xE0CC, 0x732F, + 0xE0CD, 0x7329, 0xE0CE, 0x7325, 0xE0CF, 0x733E, 0xE0D0, 0x734E, 0xE0D1, 0x734F, 0xE0D2, 0x9ED8, 0xE0D3, 0x7357, 0xE0D4, 0x736A, + 0xE0D5, 0x7368, 0xE0D6, 0x7370, 0xE0D7, 0x7378, 0xE0D8, 0x7375, 0xE0D9, 0x737B, 0xE0DA, 0x737A, 0xE0DB, 0x73C8, 0xE0DC, 0x73B3, + 0xE0DD, 0x73CE, 0xE0DE, 0x73BB, 0xE0DF, 0x73C0, 0xE0E0, 0x73E5, 0xE0E1, 0x73EE, 0xE0E2, 0x73DE, 0xE0E3, 0x74A2, 0xE0E4, 0x7405, + 0xE0E5, 0x746F, 0xE0E6, 0x7425, 0xE0E7, 0x73F8, 0xE0E8, 0x7432, 0xE0E9, 0x743A, 0xE0EA, 0x7455, 0xE0EB, 0x743F, 0xE0EC, 0x745F, + 0xE0ED, 0x7459, 0xE0EE, 0x7441, 0xE0EF, 0x745C, 0xE0F0, 0x7469, 0xE0F1, 0x7470, 0xE0F2, 0x7463, 0xE0F3, 0x746A, 0xE0F4, 0x7476, + 0xE0F5, 0x747E, 0xE0F6, 0x748B, 0xE0F7, 0x749E, 0xE0F8, 0x74A7, 0xE0F9, 0x74CA, 0xE0FA, 0x74CF, 0xE0FB, 0x74D4, 0xE0FC, 0x73F1, + 0xE140, 0x74E0, 0xE141, 0x74E3, 0xE142, 0x74E7, 0xE143, 0x74E9, 0xE144, 0x74EE, 0xE145, 0x74F2, 0xE146, 0x74F0, 0xE147, 0x74F1, + 0xE148, 0x74F8, 0xE149, 0x74F7, 0xE14A, 0x7504, 0xE14B, 0x7503, 0xE14C, 0x7505, 0xE14D, 0x750C, 0xE14E, 0x750E, 0xE14F, 0x750D, + 0xE150, 0x7515, 0xE151, 0x7513, 0xE152, 0x751E, 0xE153, 0x7526, 0xE154, 0x752C, 0xE155, 0x753C, 0xE156, 0x7544, 0xE157, 0x754D, + 0xE158, 0x754A, 0xE159, 0x7549, 0xE15A, 0x755B, 0xE15B, 0x7546, 0xE15C, 0x755A, 0xE15D, 0x7569, 0xE15E, 0x7564, 0xE15F, 0x7567, + 0xE160, 0x756B, 0xE161, 0x756D, 0xE162, 0x7578, 0xE163, 0x7576, 0xE164, 0x7586, 0xE165, 0x7587, 0xE166, 0x7574, 0xE167, 0x758A, + 0xE168, 0x7589, 0xE169, 0x7582, 0xE16A, 0x7594, 0xE16B, 0x759A, 0xE16C, 0x759D, 0xE16D, 0x75A5, 0xE16E, 0x75A3, 0xE16F, 0x75C2, + 0xE170, 0x75B3, 0xE171, 0x75C3, 0xE172, 0x75B5, 0xE173, 0x75BD, 0xE174, 0x75B8, 0xE175, 0x75BC, 0xE176, 0x75B1, 0xE177, 0x75CD, + 0xE178, 0x75CA, 0xE179, 0x75D2, 0xE17A, 0x75D9, 0xE17B, 0x75E3, 0xE17C, 0x75DE, 0xE17D, 0x75FE, 0xE17E, 0x75FF, 0xE180, 0x75FC, + 0xE181, 0x7601, 0xE182, 0x75F0, 0xE183, 0x75FA, 0xE184, 0x75F2, 0xE185, 0x75F3, 0xE186, 0x760B, 0xE187, 0x760D, 0xE188, 0x7609, + 0xE189, 0x761F, 0xE18A, 0x7627, 0xE18B, 0x7620, 0xE18C, 0x7621, 0xE18D, 0x7622, 0xE18E, 0x7624, 0xE18F, 0x7634, 0xE190, 0x7630, + 0xE191, 0x763B, 0xE192, 0x7647, 0xE193, 0x7648, 0xE194, 0x7646, 0xE195, 0x765C, 0xE196, 0x7658, 0xE197, 0x7661, 0xE198, 0x7662, + 0xE199, 0x7668, 0xE19A, 0x7669, 0xE19B, 0x766A, 0xE19C, 0x7667, 0xE19D, 0x766C, 0xE19E, 0x7670, 0xE19F, 0x7672, 0xE1A0, 0x7676, + 0xE1A1, 0x7678, 0xE1A2, 0x767C, 0xE1A3, 0x7680, 0xE1A4, 0x7683, 0xE1A5, 0x7688, 0xE1A6, 0x768B, 0xE1A7, 0x768E, 0xE1A8, 0x7696, + 0xE1A9, 0x7693, 0xE1AA, 0x7699, 0xE1AB, 0x769A, 0xE1AC, 0x76B0, 0xE1AD, 0x76B4, 0xE1AE, 0x76B8, 0xE1AF, 0x76B9, 0xE1B0, 0x76BA, + 0xE1B1, 0x76C2, 0xE1B2, 0x76CD, 0xE1B3, 0x76D6, 0xE1B4, 0x76D2, 0xE1B5, 0x76DE, 0xE1B6, 0x76E1, 0xE1B7, 0x76E5, 0xE1B8, 0x76E7, + 0xE1B9, 0x76EA, 0xE1BA, 0x862F, 0xE1BB, 0x76FB, 0xE1BC, 0x7708, 0xE1BD, 0x7707, 0xE1BE, 0x7704, 0xE1BF, 0x7729, 0xE1C0, 0x7724, + 0xE1C1, 0x771E, 0xE1C2, 0x7725, 0xE1C3, 0x7726, 0xE1C4, 0x771B, 0xE1C5, 0x7737, 0xE1C6, 0x7738, 0xE1C7, 0x7747, 0xE1C8, 0x775A, + 0xE1C9, 0x7768, 0xE1CA, 0x776B, 0xE1CB, 0x775B, 0xE1CC, 0x7765, 0xE1CD, 0x777F, 0xE1CE, 0x777E, 0xE1CF, 0x7779, 0xE1D0, 0x778E, + 0xE1D1, 0x778B, 0xE1D2, 0x7791, 0xE1D3, 0x77A0, 0xE1D4, 0x779E, 0xE1D5, 0x77B0, 0xE1D6, 0x77B6, 0xE1D7, 0x77B9, 0xE1D8, 0x77BF, + 0xE1D9, 0x77BC, 0xE1DA, 0x77BD, 0xE1DB, 0x77BB, 0xE1DC, 0x77C7, 0xE1DD, 0x77CD, 0xE1DE, 0x77D7, 0xE1DF, 0x77DA, 0xE1E0, 0x77DC, + 0xE1E1, 0x77E3, 0xE1E2, 0x77EE, 0xE1E3, 0x77FC, 0xE1E4, 0x780C, 0xE1E5, 0x7812, 0xE1E6, 0x7926, 0xE1E7, 0x7820, 0xE1E8, 0x792A, + 0xE1E9, 0x7845, 0xE1EA, 0x788E, 0xE1EB, 0x7874, 0xE1EC, 0x7886, 0xE1ED, 0x787C, 0xE1EE, 0x789A, 0xE1EF, 0x788C, 0xE1F0, 0x78A3, + 0xE1F1, 0x78B5, 0xE1F2, 0x78AA, 0xE1F3, 0x78AF, 0xE1F4, 0x78D1, 0xE1F5, 0x78C6, 0xE1F6, 0x78CB, 0xE1F7, 0x78D4, 0xE1F8, 0x78BE, + 0xE1F9, 0x78BC, 0xE1FA, 0x78C5, 0xE1FB, 0x78CA, 0xE1FC, 0x78EC, 0xE240, 0x78E7, 0xE241, 0x78DA, 0xE242, 0x78FD, 0xE243, 0x78F4, + 0xE244, 0x7907, 0xE245, 0x7912, 0xE246, 0x7911, 0xE247, 0x7919, 0xE248, 0x792C, 0xE249, 0x792B, 0xE24A, 0x7940, 0xE24B, 0x7960, + 0xE24C, 0x7957, 0xE24D, 0x795F, 0xE24E, 0x795A, 0xE24F, 0x7955, 0xE250, 0x7953, 0xE251, 0x797A, 0xE252, 0x797F, 0xE253, 0x798A, + 0xE254, 0x799D, 0xE255, 0x79A7, 0xE256, 0x9F4B, 0xE257, 0x79AA, 0xE258, 0x79AE, 0xE259, 0x79B3, 0xE25A, 0x79B9, 0xE25B, 0x79BA, + 0xE25C, 0x79C9, 0xE25D, 0x79D5, 0xE25E, 0x79E7, 0xE25F, 0x79EC, 0xE260, 0x79E1, 0xE261, 0x79E3, 0xE262, 0x7A08, 0xE263, 0x7A0D, + 0xE264, 0x7A18, 0xE265, 0x7A19, 0xE266, 0x7A20, 0xE267, 0x7A1F, 0xE268, 0x7980, 0xE269, 0x7A31, 0xE26A, 0x7A3B, 0xE26B, 0x7A3E, + 0xE26C, 0x7A37, 0xE26D, 0x7A43, 0xE26E, 0x7A57, 0xE26F, 0x7A49, 0xE270, 0x7A61, 0xE271, 0x7A62, 0xE272, 0x7A69, 0xE273, 0x9F9D, + 0xE274, 0x7A70, 0xE275, 0x7A79, 0xE276, 0x7A7D, 0xE277, 0x7A88, 0xE278, 0x7A97, 0xE279, 0x7A95, 0xE27A, 0x7A98, 0xE27B, 0x7A96, + 0xE27C, 0x7AA9, 0xE27D, 0x7AC8, 0xE27E, 0x7AB0, 0xE280, 0x7AB6, 0xE281, 0x7AC5, 0xE282, 0x7AC4, 0xE283, 0x7ABF, 0xE284, 0x9083, + 0xE285, 0x7AC7, 0xE286, 0x7ACA, 0xE287, 0x7ACD, 0xE288, 0x7ACF, 0xE289, 0x7AD5, 0xE28A, 0x7AD3, 0xE28B, 0x7AD9, 0xE28C, 0x7ADA, + 0xE28D, 0x7ADD, 0xE28E, 0x7AE1, 0xE28F, 0x7AE2, 0xE290, 0x7AE6, 0xE291, 0x7AED, 0xE292, 0x7AF0, 0xE293, 0x7B02, 0xE294, 0x7B0F, + 0xE295, 0x7B0A, 0xE296, 0x7B06, 0xE297, 0x7B33, 0xE298, 0x7B18, 0xE299, 0x7B19, 0xE29A, 0x7B1E, 0xE29B, 0x7B35, 0xE29C, 0x7B28, + 0xE29D, 0x7B36, 0xE29E, 0x7B50, 0xE29F, 0x7B7A, 0xE2A0, 0x7B04, 0xE2A1, 0x7B4D, 0xE2A2, 0x7B0B, 0xE2A3, 0x7B4C, 0xE2A4, 0x7B45, + 0xE2A5, 0x7B75, 0xE2A6, 0x7B65, 0xE2A7, 0x7B74, 0xE2A8, 0x7B67, 0xE2A9, 0x7B70, 0xE2AA, 0x7B71, 0xE2AB, 0x7B6C, 0xE2AC, 0x7B6E, + 0xE2AD, 0x7B9D, 0xE2AE, 0x7B98, 0xE2AF, 0x7B9F, 0xE2B0, 0x7B8D, 0xE2B1, 0x7B9C, 0xE2B2, 0x7B9A, 0xE2B3, 0x7B8B, 0xE2B4, 0x7B92, + 0xE2B5, 0x7B8F, 0xE2B6, 0x7B5D, 0xE2B7, 0x7B99, 0xE2B8, 0x7BCB, 0xE2B9, 0x7BC1, 0xE2BA, 0x7BCC, 0xE2BB, 0x7BCF, 0xE2BC, 0x7BB4, + 0xE2BD, 0x7BC6, 0xE2BE, 0x7BDD, 0xE2BF, 0x7BE9, 0xE2C0, 0x7C11, 0xE2C1, 0x7C14, 0xE2C2, 0x7BE6, 0xE2C3, 0x7BE5, 0xE2C4, 0x7C60, + 0xE2C5, 0x7C00, 0xE2C6, 0x7C07, 0xE2C7, 0x7C13, 0xE2C8, 0x7BF3, 0xE2C9, 0x7BF7, 0xE2CA, 0x7C17, 0xE2CB, 0x7C0D, 0xE2CC, 0x7BF6, + 0xE2CD, 0x7C23, 0xE2CE, 0x7C27, 0xE2CF, 0x7C2A, 0xE2D0, 0x7C1F, 0xE2D1, 0x7C37, 0xE2D2, 0x7C2B, 0xE2D3, 0x7C3D, 0xE2D4, 0x7C4C, + 0xE2D5, 0x7C43, 0xE2D6, 0x7C54, 0xE2D7, 0x7C4F, 0xE2D8, 0x7C40, 0xE2D9, 0x7C50, 0xE2DA, 0x7C58, 0xE2DB, 0x7C5F, 0xE2DC, 0x7C64, + 0xE2DD, 0x7C56, 0xE2DE, 0x7C65, 0xE2DF, 0x7C6C, 0xE2E0, 0x7C75, 0xE2E1, 0x7C83, 0xE2E2, 0x7C90, 0xE2E3, 0x7CA4, 0xE2E4, 0x7CAD, + 0xE2E5, 0x7CA2, 0xE2E6, 0x7CAB, 0xE2E7, 0x7CA1, 0xE2E8, 0x7CA8, 0xE2E9, 0x7CB3, 0xE2EA, 0x7CB2, 0xE2EB, 0x7CB1, 0xE2EC, 0x7CAE, + 0xE2ED, 0x7CB9, 0xE2EE, 0x7CBD, 0xE2EF, 0x7CC0, 0xE2F0, 0x7CC5, 0xE2F1, 0x7CC2, 0xE2F2, 0x7CD8, 0xE2F3, 0x7CD2, 0xE2F4, 0x7CDC, + 0xE2F5, 0x7CE2, 0xE2F6, 0x9B3B, 0xE2F7, 0x7CEF, 0xE2F8, 0x7CF2, 0xE2F9, 0x7CF4, 0xE2FA, 0x7CF6, 0xE2FB, 0x7CFA, 0xE2FC, 0x7D06, + 0xE340, 0x7D02, 0xE341, 0x7D1C, 0xE342, 0x7D15, 0xE343, 0x7D0A, 0xE344, 0x7D45, 0xE345, 0x7D4B, 0xE346, 0x7D2E, 0xE347, 0x7D32, + 0xE348, 0x7D3F, 0xE349, 0x7D35, 0xE34A, 0x7D46, 0xE34B, 0x7D73, 0xE34C, 0x7D56, 0xE34D, 0x7D4E, 0xE34E, 0x7D72, 0xE34F, 0x7D68, + 0xE350, 0x7D6E, 0xE351, 0x7D4F, 0xE352, 0x7D63, 0xE353, 0x7D93, 0xE354, 0x7D89, 0xE355, 0x7D5B, 0xE356, 0x7D8F, 0xE357, 0x7D7D, + 0xE358, 0x7D9B, 0xE359, 0x7DBA, 0xE35A, 0x7DAE, 0xE35B, 0x7DA3, 0xE35C, 0x7DB5, 0xE35D, 0x7DC7, 0xE35E, 0x7DBD, 0xE35F, 0x7DAB, + 0xE360, 0x7E3D, 0xE361, 0x7DA2, 0xE362, 0x7DAF, 0xE363, 0x7DDC, 0xE364, 0x7DB8, 0xE365, 0x7D9F, 0xE366, 0x7DB0, 0xE367, 0x7DD8, + 0xE368, 0x7DDD, 0xE369, 0x7DE4, 0xE36A, 0x7DDE, 0xE36B, 0x7DFB, 0xE36C, 0x7DF2, 0xE36D, 0x7DE1, 0xE36E, 0x7E05, 0xE36F, 0x7E0A, + 0xE370, 0x7E23, 0xE371, 0x7E21, 0xE372, 0x7E12, 0xE373, 0x7E31, 0xE374, 0x7E1F, 0xE375, 0x7E09, 0xE376, 0x7E0B, 0xE377, 0x7E22, + 0xE378, 0x7E46, 0xE379, 0x7E66, 0xE37A, 0x7E3B, 0xE37B, 0x7E35, 0xE37C, 0x7E39, 0xE37D, 0x7E43, 0xE37E, 0x7E37, 0xE380, 0x7E32, + 0xE381, 0x7E3A, 0xE382, 0x7E67, 0xE383, 0x7E5D, 0xE384, 0x7E56, 0xE385, 0x7E5E, 0xE386, 0x7E59, 0xE387, 0x7E5A, 0xE388, 0x7E79, + 0xE389, 0x7E6A, 0xE38A, 0x7E69, 0xE38B, 0x7E7C, 0xE38C, 0x7E7B, 0xE38D, 0x7E83, 0xE38E, 0x7DD5, 0xE38F, 0x7E7D, 0xE390, 0x8FAE, + 0xE391, 0x7E7F, 0xE392, 0x7E88, 0xE393, 0x7E89, 0xE394, 0x7E8C, 0xE395, 0x7E92, 0xE396, 0x7E90, 0xE397, 0x7E93, 0xE398, 0x7E94, + 0xE399, 0x7E96, 0xE39A, 0x7E8E, 0xE39B, 0x7E9B, 0xE39C, 0x7E9C, 0xE39D, 0x7F38, 0xE39E, 0x7F3A, 0xE39F, 0x7F45, 0xE3A0, 0x7F4C, + 0xE3A1, 0x7F4D, 0xE3A2, 0x7F4E, 0xE3A3, 0x7F50, 0xE3A4, 0x7F51, 0xE3A5, 0x7F55, 0xE3A6, 0x7F54, 0xE3A7, 0x7F58, 0xE3A8, 0x7F5F, + 0xE3A9, 0x7F60, 0xE3AA, 0x7F68, 0xE3AB, 0x7F69, 0xE3AC, 0x7F67, 0xE3AD, 0x7F78, 0xE3AE, 0x7F82, 0xE3AF, 0x7F86, 0xE3B0, 0x7F83, + 0xE3B1, 0x7F88, 0xE3B2, 0x7F87, 0xE3B3, 0x7F8C, 0xE3B4, 0x7F94, 0xE3B5, 0x7F9E, 0xE3B6, 0x7F9D, 0xE3B7, 0x7F9A, 0xE3B8, 0x7FA3, + 0xE3B9, 0x7FAF, 0xE3BA, 0x7FB2, 0xE3BB, 0x7FB9, 0xE3BC, 0x7FAE, 0xE3BD, 0x7FB6, 0xE3BE, 0x7FB8, 0xE3BF, 0x8B71, 0xE3C0, 0x7FC5, + 0xE3C1, 0x7FC6, 0xE3C2, 0x7FCA, 0xE3C3, 0x7FD5, 0xE3C4, 0x7FD4, 0xE3C5, 0x7FE1, 0xE3C6, 0x7FE6, 0xE3C7, 0x7FE9, 0xE3C8, 0x7FF3, + 0xE3C9, 0x7FF9, 0xE3CA, 0x98DC, 0xE3CB, 0x8006, 0xE3CC, 0x8004, 0xE3CD, 0x800B, 0xE3CE, 0x8012, 0xE3CF, 0x8018, 0xE3D0, 0x8019, + 0xE3D1, 0x801C, 0xE3D2, 0x8021, 0xE3D3, 0x8028, 0xE3D4, 0x803F, 0xE3D5, 0x803B, 0xE3D6, 0x804A, 0xE3D7, 0x8046, 0xE3D8, 0x8052, + 0xE3D9, 0x8058, 0xE3DA, 0x805A, 0xE3DB, 0x805F, 0xE3DC, 0x8062, 0xE3DD, 0x8068, 0xE3DE, 0x8073, 0xE3DF, 0x8072, 0xE3E0, 0x8070, + 0xE3E1, 0x8076, 0xE3E2, 0x8079, 0xE3E3, 0x807D, 0xE3E4, 0x807F, 0xE3E5, 0x8084, 0xE3E6, 0x8086, 0xE3E7, 0x8085, 0xE3E8, 0x809B, + 0xE3E9, 0x8093, 0xE3EA, 0x809A, 0xE3EB, 0x80AD, 0xE3EC, 0x5190, 0xE3ED, 0x80AC, 0xE3EE, 0x80DB, 0xE3EF, 0x80E5, 0xE3F0, 0x80D9, + 0xE3F1, 0x80DD, 0xE3F2, 0x80C4, 0xE3F3, 0x80DA, 0xE3F4, 0x80D6, 0xE3F5, 0x8109, 0xE3F6, 0x80EF, 0xE3F7, 0x80F1, 0xE3F8, 0x811B, + 0xE3F9, 0x8129, 0xE3FA, 0x8123, 0xE3FB, 0x812F, 0xE3FC, 0x814B, 0xE440, 0x968B, 0xE441, 0x8146, 0xE442, 0x813E, 0xE443, 0x8153, + 0xE444, 0x8151, 0xE445, 0x80FC, 0xE446, 0x8171, 0xE447, 0x816E, 0xE448, 0x8165, 0xE449, 0x8166, 0xE44A, 0x8174, 0xE44B, 0x8183, + 0xE44C, 0x8188, 0xE44D, 0x818A, 0xE44E, 0x8180, 0xE44F, 0x8182, 0xE450, 0x81A0, 0xE451, 0x8195, 0xE452, 0x81A4, 0xE453, 0x81A3, + 0xE454, 0x815F, 0xE455, 0x8193, 0xE456, 0x81A9, 0xE457, 0x81B0, 0xE458, 0x81B5, 0xE459, 0x81BE, 0xE45A, 0x81B8, 0xE45B, 0x81BD, + 0xE45C, 0x81C0, 0xE45D, 0x81C2, 0xE45E, 0x81BA, 0xE45F, 0x81C9, 0xE460, 0x81CD, 0xE461, 0x81D1, 0xE462, 0x81D9, 0xE463, 0x81D8, + 0xE464, 0x81C8, 0xE465, 0x81DA, 0xE466, 0x81DF, 0xE467, 0x81E0, 0xE468, 0x81E7, 0xE469, 0x81FA, 0xE46A, 0x81FB, 0xE46B, 0x81FE, + 0xE46C, 0x8201, 0xE46D, 0x8202, 0xE46E, 0x8205, 0xE46F, 0x8207, 0xE470, 0x820A, 0xE471, 0x820D, 0xE472, 0x8210, 0xE473, 0x8216, + 0xE474, 0x8229, 0xE475, 0x822B, 0xE476, 0x8238, 0xE477, 0x8233, 0xE478, 0x8240, 0xE479, 0x8259, 0xE47A, 0x8258, 0xE47B, 0x825D, + 0xE47C, 0x825A, 0xE47D, 0x825F, 0xE47E, 0x8264, 0xE480, 0x8262, 0xE481, 0x8268, 0xE482, 0x826A, 0xE483, 0x826B, 0xE484, 0x822E, + 0xE485, 0x8271, 0xE486, 0x8277, 0xE487, 0x8278, 0xE488, 0x827E, 0xE489, 0x828D, 0xE48A, 0x8292, 0xE48B, 0x82AB, 0xE48C, 0x829F, + 0xE48D, 0x82BB, 0xE48E, 0x82AC, 0xE48F, 0x82E1, 0xE490, 0x82E3, 0xE491, 0x82DF, 0xE492, 0x82D2, 0xE493, 0x82F4, 0xE494, 0x82F3, + 0xE495, 0x82FA, 0xE496, 0x8393, 0xE497, 0x8303, 0xE498, 0x82FB, 0xE499, 0x82F9, 0xE49A, 0x82DE, 0xE49B, 0x8306, 0xE49C, 0x82DC, + 0xE49D, 0x8309, 0xE49E, 0x82D9, 0xE49F, 0x8335, 0xE4A0, 0x8334, 0xE4A1, 0x8316, 0xE4A2, 0x8332, 0xE4A3, 0x8331, 0xE4A4, 0x8340, + 0xE4A5, 0x8339, 0xE4A6, 0x8350, 0xE4A7, 0x8345, 0xE4A8, 0x832F, 0xE4A9, 0x832B, 0xE4AA, 0x8317, 0xE4AB, 0x8318, 0xE4AC, 0x8385, + 0xE4AD, 0x839A, 0xE4AE, 0x83AA, 0xE4AF, 0x839F, 0xE4B0, 0x83A2, 0xE4B1, 0x8396, 0xE4B2, 0x8323, 0xE4B3, 0x838E, 0xE4B4, 0x8387, + 0xE4B5, 0x838A, 0xE4B6, 0x837C, 0xE4B7, 0x83B5, 0xE4B8, 0x8373, 0xE4B9, 0x8375, 0xE4BA, 0x83A0, 0xE4BB, 0x8389, 0xE4BC, 0x83A8, + 0xE4BD, 0x83F4, 0xE4BE, 0x8413, 0xE4BF, 0x83EB, 0xE4C0, 0x83CE, 0xE4C1, 0x83FD, 0xE4C2, 0x8403, 0xE4C3, 0x83D8, 0xE4C4, 0x840B, + 0xE4C5, 0x83C1, 0xE4C6, 0x83F7, 0xE4C7, 0x8407, 0xE4C8, 0x83E0, 0xE4C9, 0x83F2, 0xE4CA, 0x840D, 0xE4CB, 0x8422, 0xE4CC, 0x8420, + 0xE4CD, 0x83BD, 0xE4CE, 0x8438, 0xE4CF, 0x8506, 0xE4D0, 0x83FB, 0xE4D1, 0x846D, 0xE4D2, 0x842A, 0xE4D3, 0x843C, 0xE4D4, 0x855A, + 0xE4D5, 0x8484, 0xE4D6, 0x8477, 0xE4D7, 0x846B, 0xE4D8, 0x84AD, 0xE4D9, 0x846E, 0xE4DA, 0x8482, 0xE4DB, 0x8469, 0xE4DC, 0x8446, + 0xE4DD, 0x842C, 0xE4DE, 0x846F, 0xE4DF, 0x8479, 0xE4E0, 0x8435, 0xE4E1, 0x84CA, 0xE4E2, 0x8462, 0xE4E3, 0x84B9, 0xE4E4, 0x84BF, + 0xE4E5, 0x849F, 0xE4E6, 0x84D9, 0xE4E7, 0x84CD, 0xE4E8, 0x84BB, 0xE4E9, 0x84DA, 0xE4EA, 0x84D0, 0xE4EB, 0x84C1, 0xE4EC, 0x84C6, + 0xE4ED, 0x84D6, 0xE4EE, 0x84A1, 0xE4EF, 0x8521, 0xE4F0, 0x84FF, 0xE4F1, 0x84F4, 0xE4F2, 0x8517, 0xE4F3, 0x8518, 0xE4F4, 0x852C, + 0xE4F5, 0x851F, 0xE4F6, 0x8515, 0xE4F7, 0x8514, 0xE4F8, 0x84FC, 0xE4F9, 0x8540, 0xE4FA, 0x8563, 0xE4FB, 0x8558, 0xE4FC, 0x8548, + 0xE540, 0x8541, 0xE541, 0x8602, 0xE542, 0x854B, 0xE543, 0x8555, 0xE544, 0x8580, 0xE545, 0x85A4, 0xE546, 0x8588, 0xE547, 0x8591, + 0xE548, 0x858A, 0xE549, 0x85A8, 0xE54A, 0x856D, 0xE54B, 0x8594, 0xE54C, 0x859B, 0xE54D, 0x85EA, 0xE54E, 0x8587, 0xE54F, 0x859C, + 0xE550, 0x8577, 0xE551, 0x857E, 0xE552, 0x8590, 0xE553, 0x85C9, 0xE554, 0x85BA, 0xE555, 0x85CF, 0xE556, 0x85B9, 0xE557, 0x85D0, + 0xE558, 0x85D5, 0xE559, 0x85DD, 0xE55A, 0x85E5, 0xE55B, 0x85DC, 0xE55C, 0x85F9, 0xE55D, 0x860A, 0xE55E, 0x8613, 0xE55F, 0x860B, + 0xE560, 0x85FE, 0xE561, 0x85FA, 0xE562, 0x8606, 0xE563, 0x8622, 0xE564, 0x861A, 0xE565, 0x8630, 0xE566, 0x863F, 0xE567, 0x864D, + 0xE568, 0x4E55, 0xE569, 0x8654, 0xE56A, 0x865F, 0xE56B, 0x8667, 0xE56C, 0x8671, 0xE56D, 0x8693, 0xE56E, 0x86A3, 0xE56F, 0x86A9, + 0xE570, 0x86AA, 0xE571, 0x868B, 0xE572, 0x868C, 0xE573, 0x86B6, 0xE574, 0x86AF, 0xE575, 0x86C4, 0xE576, 0x86C6, 0xE577, 0x86B0, + 0xE578, 0x86C9, 0xE579, 0x8823, 0xE57A, 0x86AB, 0xE57B, 0x86D4, 0xE57C, 0x86DE, 0xE57D, 0x86E9, 0xE57E, 0x86EC, 0xE580, 0x86DF, + 0xE581, 0x86DB, 0xE582, 0x86EF, 0xE583, 0x8712, 0xE584, 0x8706, 0xE585, 0x8708, 0xE586, 0x8700, 0xE587, 0x8703, 0xE588, 0x86FB, + 0xE589, 0x8711, 0xE58A, 0x8709, 0xE58B, 0x870D, 0xE58C, 0x86F9, 0xE58D, 0x870A, 0xE58E, 0x8734, 0xE58F, 0x873F, 0xE590, 0x8737, + 0xE591, 0x873B, 0xE592, 0x8725, 0xE593, 0x8729, 0xE594, 0x871A, 0xE595, 0x8760, 0xE596, 0x875F, 0xE597, 0x8778, 0xE598, 0x874C, + 0xE599, 0x874E, 0xE59A, 0x8774, 0xE59B, 0x8757, 0xE59C, 0x8768, 0xE59D, 0x876E, 0xE59E, 0x8759, 0xE59F, 0x8753, 0xE5A0, 0x8763, + 0xE5A1, 0x876A, 0xE5A2, 0x8805, 0xE5A3, 0x87A2, 0xE5A4, 0x879F, 0xE5A5, 0x8782, 0xE5A6, 0x87AF, 0xE5A7, 0x87CB, 0xE5A8, 0x87BD, + 0xE5A9, 0x87C0, 0xE5AA, 0x87D0, 0xE5AB, 0x96D6, 0xE5AC, 0x87AB, 0xE5AD, 0x87C4, 0xE5AE, 0x87B3, 0xE5AF, 0x87C7, 0xE5B0, 0x87C6, + 0xE5B1, 0x87BB, 0xE5B2, 0x87EF, 0xE5B3, 0x87F2, 0xE5B4, 0x87E0, 0xE5B5, 0x880F, 0xE5B6, 0x880D, 0xE5B7, 0x87FE, 0xE5B8, 0x87F6, + 0xE5B9, 0x87F7, 0xE5BA, 0x880E, 0xE5BB, 0x87D2, 0xE5BC, 0x8811, 0xE5BD, 0x8816, 0xE5BE, 0x8815, 0xE5BF, 0x8822, 0xE5C0, 0x8821, + 0xE5C1, 0x8831, 0xE5C2, 0x8836, 0xE5C3, 0x8839, 0xE5C4, 0x8827, 0xE5C5, 0x883B, 0xE5C6, 0x8844, 0xE5C7, 0x8842, 0xE5C8, 0x8852, + 0xE5C9, 0x8859, 0xE5CA, 0x885E, 0xE5CB, 0x8862, 0xE5CC, 0x886B, 0xE5CD, 0x8881, 0xE5CE, 0x887E, 0xE5CF, 0x889E, 0xE5D0, 0x8875, + 0xE5D1, 0x887D, 0xE5D2, 0x88B5, 0xE5D3, 0x8872, 0xE5D4, 0x8882, 0xE5D5, 0x8897, 0xE5D6, 0x8892, 0xE5D7, 0x88AE, 0xE5D8, 0x8899, + 0xE5D9, 0x88A2, 0xE5DA, 0x888D, 0xE5DB, 0x88A4, 0xE5DC, 0x88B0, 0xE5DD, 0x88BF, 0xE5DE, 0x88B1, 0xE5DF, 0x88C3, 0xE5E0, 0x88C4, + 0xE5E1, 0x88D4, 0xE5E2, 0x88D8, 0xE5E3, 0x88D9, 0xE5E4, 0x88DD, 0xE5E5, 0x88F9, 0xE5E6, 0x8902, 0xE5E7, 0x88FC, 0xE5E8, 0x88F4, + 0xE5E9, 0x88E8, 0xE5EA, 0x88F2, 0xE5EB, 0x8904, 0xE5EC, 0x890C, 0xE5ED, 0x890A, 0xE5EE, 0x8913, 0xE5EF, 0x8943, 0xE5F0, 0x891E, + 0xE5F1, 0x8925, 0xE5F2, 0x892A, 0xE5F3, 0x892B, 0xE5F4, 0x8941, 0xE5F5, 0x8944, 0xE5F6, 0x893B, 0xE5F7, 0x8936, 0xE5F8, 0x8938, + 0xE5F9, 0x894C, 0xE5FA, 0x891D, 0xE5FB, 0x8960, 0xE5FC, 0x895E, 0xE640, 0x8966, 0xE641, 0x8964, 0xE642, 0x896D, 0xE643, 0x896A, + 0xE644, 0x896F, 0xE645, 0x8974, 0xE646, 0x8977, 0xE647, 0x897E, 0xE648, 0x8983, 0xE649, 0x8988, 0xE64A, 0x898A, 0xE64B, 0x8993, + 0xE64C, 0x8998, 0xE64D, 0x89A1, 0xE64E, 0x89A9, 0xE64F, 0x89A6, 0xE650, 0x89AC, 0xE651, 0x89AF, 0xE652, 0x89B2, 0xE653, 0x89BA, + 0xE654, 0x89BD, 0xE655, 0x89BF, 0xE656, 0x89C0, 0xE657, 0x89DA, 0xE658, 0x89DC, 0xE659, 0x89DD, 0xE65A, 0x89E7, 0xE65B, 0x89F4, + 0xE65C, 0x89F8, 0xE65D, 0x8A03, 0xE65E, 0x8A16, 0xE65F, 0x8A10, 0xE660, 0x8A0C, 0xE661, 0x8A1B, 0xE662, 0x8A1D, 0xE663, 0x8A25, + 0xE664, 0x8A36, 0xE665, 0x8A41, 0xE666, 0x8A5B, 0xE667, 0x8A52, 0xE668, 0x8A46, 0xE669, 0x8A48, 0xE66A, 0x8A7C, 0xE66B, 0x8A6D, + 0xE66C, 0x8A6C, 0xE66D, 0x8A62, 0xE66E, 0x8A85, 0xE66F, 0x8A82, 0xE670, 0x8A84, 0xE671, 0x8AA8, 0xE672, 0x8AA1, 0xE673, 0x8A91, + 0xE674, 0x8AA5, 0xE675, 0x8AA6, 0xE676, 0x8A9A, 0xE677, 0x8AA3, 0xE678, 0x8AC4, 0xE679, 0x8ACD, 0xE67A, 0x8AC2, 0xE67B, 0x8ADA, + 0xE67C, 0x8AEB, 0xE67D, 0x8AF3, 0xE67E, 0x8AE7, 0xE680, 0x8AE4, 0xE681, 0x8AF1, 0xE682, 0x8B14, 0xE683, 0x8AE0, 0xE684, 0x8AE2, + 0xE685, 0x8AF7, 0xE686, 0x8ADE, 0xE687, 0x8ADB, 0xE688, 0x8B0C, 0xE689, 0x8B07, 0xE68A, 0x8B1A, 0xE68B, 0x8AE1, 0xE68C, 0x8B16, + 0xE68D, 0x8B10, 0xE68E, 0x8B17, 0xE68F, 0x8B20, 0xE690, 0x8B33, 0xE691, 0x97AB, 0xE692, 0x8B26, 0xE693, 0x8B2B, 0xE694, 0x8B3E, + 0xE695, 0x8B28, 0xE696, 0x8B41, 0xE697, 0x8B4C, 0xE698, 0x8B4F, 0xE699, 0x8B4E, 0xE69A, 0x8B49, 0xE69B, 0x8B56, 0xE69C, 0x8B5B, + 0xE69D, 0x8B5A, 0xE69E, 0x8B6B, 0xE69F, 0x8B5F, 0xE6A0, 0x8B6C, 0xE6A1, 0x8B6F, 0xE6A2, 0x8B74, 0xE6A3, 0x8B7D, 0xE6A4, 0x8B80, + 0xE6A5, 0x8B8C, 0xE6A6, 0x8B8E, 0xE6A7, 0x8B92, 0xE6A8, 0x8B93, 0xE6A9, 0x8B96, 0xE6AA, 0x8B99, 0xE6AB, 0x8B9A, 0xE6AC, 0x8C3A, + 0xE6AD, 0x8C41, 0xE6AE, 0x8C3F, 0xE6AF, 0x8C48, 0xE6B0, 0x8C4C, 0xE6B1, 0x8C4E, 0xE6B2, 0x8C50, 0xE6B3, 0x8C55, 0xE6B4, 0x8C62, + 0xE6B5, 0x8C6C, 0xE6B6, 0x8C78, 0xE6B7, 0x8C7A, 0xE6B8, 0x8C82, 0xE6B9, 0x8C89, 0xE6BA, 0x8C85, 0xE6BB, 0x8C8A, 0xE6BC, 0x8C8D, + 0xE6BD, 0x8C8E, 0xE6BE, 0x8C94, 0xE6BF, 0x8C7C, 0xE6C0, 0x8C98, 0xE6C1, 0x621D, 0xE6C2, 0x8CAD, 0xE6C3, 0x8CAA, 0xE6C4, 0x8CBD, + 0xE6C5, 0x8CB2, 0xE6C6, 0x8CB3, 0xE6C7, 0x8CAE, 0xE6C8, 0x8CB6, 0xE6C9, 0x8CC8, 0xE6CA, 0x8CC1, 0xE6CB, 0x8CE4, 0xE6CC, 0x8CE3, + 0xE6CD, 0x8CDA, 0xE6CE, 0x8CFD, 0xE6CF, 0x8CFA, 0xE6D0, 0x8CFB, 0xE6D1, 0x8D04, 0xE6D2, 0x8D05, 0xE6D3, 0x8D0A, 0xE6D4, 0x8D07, + 0xE6D5, 0x8D0F, 0xE6D6, 0x8D0D, 0xE6D7, 0x8D10, 0xE6D8, 0x9F4E, 0xE6D9, 0x8D13, 0xE6DA, 0x8CCD, 0xE6DB, 0x8D14, 0xE6DC, 0x8D16, + 0xE6DD, 0x8D67, 0xE6DE, 0x8D6D, 0xE6DF, 0x8D71, 0xE6E0, 0x8D73, 0xE6E1, 0x8D81, 0xE6E2, 0x8D99, 0xE6E3, 0x8DC2, 0xE6E4, 0x8DBE, + 0xE6E5, 0x8DBA, 0xE6E6, 0x8DCF, 0xE6E7, 0x8DDA, 0xE6E8, 0x8DD6, 0xE6E9, 0x8DCC, 0xE6EA, 0x8DDB, 0xE6EB, 0x8DCB, 0xE6EC, 0x8DEA, + 0xE6ED, 0x8DEB, 0xE6EE, 0x8DDF, 0xE6EF, 0x8DE3, 0xE6F0, 0x8DFC, 0xE6F1, 0x8E08, 0xE6F2, 0x8E09, 0xE6F3, 0x8DFF, 0xE6F4, 0x8E1D, + 0xE6F5, 0x8E1E, 0xE6F6, 0x8E10, 0xE6F7, 0x8E1F, 0xE6F8, 0x8E42, 0xE6F9, 0x8E35, 0xE6FA, 0x8E30, 0xE6FB, 0x8E34, 0xE6FC, 0x8E4A, + 0xE740, 0x8E47, 0xE741, 0x8E49, 0xE742, 0x8E4C, 0xE743, 0x8E50, 0xE744, 0x8E48, 0xE745, 0x8E59, 0xE746, 0x8E64, 0xE747, 0x8E60, + 0xE748, 0x8E2A, 0xE749, 0x8E63, 0xE74A, 0x8E55, 0xE74B, 0x8E76, 0xE74C, 0x8E72, 0xE74D, 0x8E7C, 0xE74E, 0x8E81, 0xE74F, 0x8E87, + 0xE750, 0x8E85, 0xE751, 0x8E84, 0xE752, 0x8E8B, 0xE753, 0x8E8A, 0xE754, 0x8E93, 0xE755, 0x8E91, 0xE756, 0x8E94, 0xE757, 0x8E99, + 0xE758, 0x8EAA, 0xE759, 0x8EA1, 0xE75A, 0x8EAC, 0xE75B, 0x8EB0, 0xE75C, 0x8EC6, 0xE75D, 0x8EB1, 0xE75E, 0x8EBE, 0xE75F, 0x8EC5, + 0xE760, 0x8EC8, 0xE761, 0x8ECB, 0xE762, 0x8EDB, 0xE763, 0x8EE3, 0xE764, 0x8EFC, 0xE765, 0x8EFB, 0xE766, 0x8EEB, 0xE767, 0x8EFE, + 0xE768, 0x8F0A, 0xE769, 0x8F05, 0xE76A, 0x8F15, 0xE76B, 0x8F12, 0xE76C, 0x8F19, 0xE76D, 0x8F13, 0xE76E, 0x8F1C, 0xE76F, 0x8F1F, + 0xE770, 0x8F1B, 0xE771, 0x8F0C, 0xE772, 0x8F26, 0xE773, 0x8F33, 0xE774, 0x8F3B, 0xE775, 0x8F39, 0xE776, 0x8F45, 0xE777, 0x8F42, + 0xE778, 0x8F3E, 0xE779, 0x8F4C, 0xE77A, 0x8F49, 0xE77B, 0x8F46, 0xE77C, 0x8F4E, 0xE77D, 0x8F57, 0xE77E, 0x8F5C, 0xE780, 0x8F62, + 0xE781, 0x8F63, 0xE782, 0x8F64, 0xE783, 0x8F9C, 0xE784, 0x8F9F, 0xE785, 0x8FA3, 0xE786, 0x8FAD, 0xE787, 0x8FAF, 0xE788, 0x8FB7, + 0xE789, 0x8FDA, 0xE78A, 0x8FE5, 0xE78B, 0x8FE2, 0xE78C, 0x8FEA, 0xE78D, 0x8FEF, 0xE78E, 0x9087, 0xE78F, 0x8FF4, 0xE790, 0x9005, + 0xE791, 0x8FF9, 0xE792, 0x8FFA, 0xE793, 0x9011, 0xE794, 0x9015, 0xE795, 0x9021, 0xE796, 0x900D, 0xE797, 0x901E, 0xE798, 0x9016, + 0xE799, 0x900B, 0xE79A, 0x9027, 0xE79B, 0x9036, 0xE79C, 0x9035, 0xE79D, 0x9039, 0xE79E, 0x8FF8, 0xE79F, 0x904F, 0xE7A0, 0x9050, + 0xE7A1, 0x9051, 0xE7A2, 0x9052, 0xE7A3, 0x900E, 0xE7A4, 0x9049, 0xE7A5, 0x903E, 0xE7A6, 0x9056, 0xE7A7, 0x9058, 0xE7A8, 0x905E, + 0xE7A9, 0x9068, 0xE7AA, 0x906F, 0xE7AB, 0x9076, 0xE7AC, 0x96A8, 0xE7AD, 0x9072, 0xE7AE, 0x9082, 0xE7AF, 0x907D, 0xE7B0, 0x9081, + 0xE7B1, 0x9080, 0xE7B2, 0x908A, 0xE7B3, 0x9089, 0xE7B4, 0x908F, 0xE7B5, 0x90A8, 0xE7B6, 0x90AF, 0xE7B7, 0x90B1, 0xE7B8, 0x90B5, + 0xE7B9, 0x90E2, 0xE7BA, 0x90E4, 0xE7BB, 0x6248, 0xE7BC, 0x90DB, 0xE7BD, 0x9102, 0xE7BE, 0x9112, 0xE7BF, 0x9119, 0xE7C0, 0x9132, + 0xE7C1, 0x9130, 0xE7C2, 0x914A, 0xE7C3, 0x9156, 0xE7C4, 0x9158, 0xE7C5, 0x9163, 0xE7C6, 0x9165, 0xE7C7, 0x9169, 0xE7C8, 0x9173, + 0xE7C9, 0x9172, 0xE7CA, 0x918B, 0xE7CB, 0x9189, 0xE7CC, 0x9182, 0xE7CD, 0x91A2, 0xE7CE, 0x91AB, 0xE7CF, 0x91AF, 0xE7D0, 0x91AA, + 0xE7D1, 0x91B5, 0xE7D2, 0x91B4, 0xE7D3, 0x91BA, 0xE7D4, 0x91C0, 0xE7D5, 0x91C1, 0xE7D6, 0x91C9, 0xE7D7, 0x91CB, 0xE7D8, 0x91D0, + 0xE7D9, 0x91D6, 0xE7DA, 0x91DF, 0xE7DB, 0x91E1, 0xE7DC, 0x91DB, 0xE7DD, 0x91FC, 0xE7DE, 0x91F5, 0xE7DF, 0x91F6, 0xE7E0, 0x921E, + 0xE7E1, 0x91FF, 0xE7E2, 0x9214, 0xE7E3, 0x922C, 0xE7E4, 0x9215, 0xE7E5, 0x9211, 0xE7E6, 0x925E, 0xE7E7, 0x9257, 0xE7E8, 0x9245, + 0xE7E9, 0x9249, 0xE7EA, 0x9264, 0xE7EB, 0x9248, 0xE7EC, 0x9295, 0xE7ED, 0x923F, 0xE7EE, 0x924B, 0xE7EF, 0x9250, 0xE7F0, 0x929C, + 0xE7F1, 0x9296, 0xE7F2, 0x9293, 0xE7F3, 0x929B, 0xE7F4, 0x925A, 0xE7F5, 0x92CF, 0xE7F6, 0x92B9, 0xE7F7, 0x92B7, 0xE7F8, 0x92E9, + 0xE7F9, 0x930F, 0xE7FA, 0x92FA, 0xE7FB, 0x9344, 0xE7FC, 0x932E, 0xE840, 0x9319, 0xE841, 0x9322, 0xE842, 0x931A, 0xE843, 0x9323, + 0xE844, 0x933A, 0xE845, 0x9335, 0xE846, 0x933B, 0xE847, 0x935C, 0xE848, 0x9360, 0xE849, 0x937C, 0xE84A, 0x936E, 0xE84B, 0x9356, + 0xE84C, 0x93B0, 0xE84D, 0x93AC, 0xE84E, 0x93AD, 0xE84F, 0x9394, 0xE850, 0x93B9, 0xE851, 0x93D6, 0xE852, 0x93D7, 0xE853, 0x93E8, + 0xE854, 0x93E5, 0xE855, 0x93D8, 0xE856, 0x93C3, 0xE857, 0x93DD, 0xE858, 0x93D0, 0xE859, 0x93C8, 0xE85A, 0x93E4, 0xE85B, 0x941A, + 0xE85C, 0x9414, 0xE85D, 0x9413, 0xE85E, 0x9403, 0xE85F, 0x9407, 0xE860, 0x9410, 0xE861, 0x9436, 0xE862, 0x942B, 0xE863, 0x9435, + 0xE864, 0x9421, 0xE865, 0x943A, 0xE866, 0x9441, 0xE867, 0x9452, 0xE868, 0x9444, 0xE869, 0x945B, 0xE86A, 0x9460, 0xE86B, 0x9462, + 0xE86C, 0x945E, 0xE86D, 0x946A, 0xE86E, 0x9229, 0xE86F, 0x9470, 0xE870, 0x9475, 0xE871, 0x9477, 0xE872, 0x947D, 0xE873, 0x945A, + 0xE874, 0x947C, 0xE875, 0x947E, 0xE876, 0x9481, 0xE877, 0x947F, 0xE878, 0x9582, 0xE879, 0x9587, 0xE87A, 0x958A, 0xE87B, 0x9594, + 0xE87C, 0x9596, 0xE87D, 0x9598, 0xE87E, 0x9599, 0xE880, 0x95A0, 0xE881, 0x95A8, 0xE882, 0x95A7, 0xE883, 0x95AD, 0xE884, 0x95BC, + 0xE885, 0x95BB, 0xE886, 0x95B9, 0xE887, 0x95BE, 0xE888, 0x95CA, 0xE889, 0x6FF6, 0xE88A, 0x95C3, 0xE88B, 0x95CD, 0xE88C, 0x95CC, + 0xE88D, 0x95D5, 0xE88E, 0x95D4, 0xE88F, 0x95D6, 0xE890, 0x95DC, 0xE891, 0x95E1, 0xE892, 0x95E5, 0xE893, 0x95E2, 0xE894, 0x9621, + 0xE895, 0x9628, 0xE896, 0x962E, 0xE897, 0x962F, 0xE898, 0x9642, 0xE899, 0x964C, 0xE89A, 0x964F, 0xE89B, 0x964B, 0xE89C, 0x9677, + 0xE89D, 0x965C, 0xE89E, 0x965E, 0xE89F, 0x965D, 0xE8A0, 0x965F, 0xE8A1, 0x9666, 0xE8A2, 0x9672, 0xE8A3, 0x966C, 0xE8A4, 0x968D, + 0xE8A5, 0x9698, 0xE8A6, 0x9695, 0xE8A7, 0x9697, 0xE8A8, 0x96AA, 0xE8A9, 0x96A7, 0xE8AA, 0x96B1, 0xE8AB, 0x96B2, 0xE8AC, 0x96B0, + 0xE8AD, 0x96B4, 0xE8AE, 0x96B6, 0xE8AF, 0x96B8, 0xE8B0, 0x96B9, 0xE8B1, 0x96CE, 0xE8B2, 0x96CB, 0xE8B3, 0x96C9, 0xE8B4, 0x96CD, + 0xE8B5, 0x894D, 0xE8B6, 0x96DC, 0xE8B7, 0x970D, 0xE8B8, 0x96D5, 0xE8B9, 0x96F9, 0xE8BA, 0x9704, 0xE8BB, 0x9706, 0xE8BC, 0x9708, + 0xE8BD, 0x9713, 0xE8BE, 0x970E, 0xE8BF, 0x9711, 0xE8C0, 0x970F, 0xE8C1, 0x9716, 0xE8C2, 0x9719, 0xE8C3, 0x9724, 0xE8C4, 0x972A, + 0xE8C5, 0x9730, 0xE8C6, 0x9739, 0xE8C7, 0x973D, 0xE8C8, 0x973E, 0xE8C9, 0x9744, 0xE8CA, 0x9746, 0xE8CB, 0x9748, 0xE8CC, 0x9742, + 0xE8CD, 0x9749, 0xE8CE, 0x975C, 0xE8CF, 0x9760, 0xE8D0, 0x9764, 0xE8D1, 0x9766, 0xE8D2, 0x9768, 0xE8D3, 0x52D2, 0xE8D4, 0x976B, + 0xE8D5, 0x9771, 0xE8D6, 0x9779, 0xE8D7, 0x9785, 0xE8D8, 0x977C, 0xE8D9, 0x9781, 0xE8DA, 0x977A, 0xE8DB, 0x9786, 0xE8DC, 0x978B, + 0xE8DD, 0x978F, 0xE8DE, 0x9790, 0xE8DF, 0x979C, 0xE8E0, 0x97A8, 0xE8E1, 0x97A6, 0xE8E2, 0x97A3, 0xE8E3, 0x97B3, 0xE8E4, 0x97B4, + 0xE8E5, 0x97C3, 0xE8E6, 0x97C6, 0xE8E7, 0x97C8, 0xE8E8, 0x97CB, 0xE8E9, 0x97DC, 0xE8EA, 0x97ED, 0xE8EB, 0x9F4F, 0xE8EC, 0x97F2, + 0xE8ED, 0x7ADF, 0xE8EE, 0x97F6, 0xE8EF, 0x97F5, 0xE8F0, 0x980F, 0xE8F1, 0x980C, 0xE8F2, 0x9838, 0xE8F3, 0x9824, 0xE8F4, 0x9821, + 0xE8F5, 0x9837, 0xE8F6, 0x983D, 0xE8F7, 0x9846, 0xE8F8, 0x984F, 0xE8F9, 0x984B, 0xE8FA, 0x986B, 0xE8FB, 0x986F, 0xE8FC, 0x9870, + 0xE940, 0x9871, 0xE941, 0x9874, 0xE942, 0x9873, 0xE943, 0x98AA, 0xE944, 0x98AF, 0xE945, 0x98B1, 0xE946, 0x98B6, 0xE947, 0x98C4, + 0xE948, 0x98C3, 0xE949, 0x98C6, 0xE94A, 0x98E9, 0xE94B, 0x98EB, 0xE94C, 0x9903, 0xE94D, 0x9909, 0xE94E, 0x9912, 0xE94F, 0x9914, + 0xE950, 0x9918, 0xE951, 0x9921, 0xE952, 0x991D, 0xE953, 0x991E, 0xE954, 0x9924, 0xE955, 0x9920, 0xE956, 0x992C, 0xE957, 0x992E, + 0xE958, 0x993D, 0xE959, 0x993E, 0xE95A, 0x9942, 0xE95B, 0x9949, 0xE95C, 0x9945, 0xE95D, 0x9950, 0xE95E, 0x994B, 0xE95F, 0x9951, + 0xE960, 0x9952, 0xE961, 0x994C, 0xE962, 0x9955, 0xE963, 0x9997, 0xE964, 0x9998, 0xE965, 0x99A5, 0xE966, 0x99AD, 0xE967, 0x99AE, + 0xE968, 0x99BC, 0xE969, 0x99DF, 0xE96A, 0x99DB, 0xE96B, 0x99DD, 0xE96C, 0x99D8, 0xE96D, 0x99D1, 0xE96E, 0x99ED, 0xE96F, 0x99EE, + 0xE970, 0x99F1, 0xE971, 0x99F2, 0xE972, 0x99FB, 0xE973, 0x99F8, 0xE974, 0x9A01, 0xE975, 0x9A0F, 0xE976, 0x9A05, 0xE977, 0x99E2, + 0xE978, 0x9A19, 0xE979, 0x9A2B, 0xE97A, 0x9A37, 0xE97B, 0x9A45, 0xE97C, 0x9A42, 0xE97D, 0x9A40, 0xE97E, 0x9A43, 0xE980, 0x9A3E, + 0xE981, 0x9A55, 0xE982, 0x9A4D, 0xE983, 0x9A5B, 0xE984, 0x9A57, 0xE985, 0x9A5F, 0xE986, 0x9A62, 0xE987, 0x9A65, 0xE988, 0x9A64, + 0xE989, 0x9A69, 0xE98A, 0x9A6B, 0xE98B, 0x9A6A, 0xE98C, 0x9AAD, 0xE98D, 0x9AB0, 0xE98E, 0x9ABC, 0xE98F, 0x9AC0, 0xE990, 0x9ACF, + 0xE991, 0x9AD1, 0xE992, 0x9AD3, 0xE993, 0x9AD4, 0xE994, 0x9ADE, 0xE995, 0x9ADF, 0xE996, 0x9AE2, 0xE997, 0x9AE3, 0xE998, 0x9AE6, + 0xE999, 0x9AEF, 0xE99A, 0x9AEB, 0xE99B, 0x9AEE, 0xE99C, 0x9AF4, 0xE99D, 0x9AF1, 0xE99E, 0x9AF7, 0xE99F, 0x9AFB, 0xE9A0, 0x9B06, + 0xE9A1, 0x9B18, 0xE9A2, 0x9B1A, 0xE9A3, 0x9B1F, 0xE9A4, 0x9B22, 0xE9A5, 0x9B23, 0xE9A6, 0x9B25, 0xE9A7, 0x9B27, 0xE9A8, 0x9B28, + 0xE9A9, 0x9B29, 0xE9AA, 0x9B2A, 0xE9AB, 0x9B2E, 0xE9AC, 0x9B2F, 0xE9AD, 0x9B32, 0xE9AE, 0x9B44, 0xE9AF, 0x9B43, 0xE9B0, 0x9B4F, + 0xE9B1, 0x9B4D, 0xE9B2, 0x9B4E, 0xE9B3, 0x9B51, 0xE9B4, 0x9B58, 0xE9B5, 0x9B74, 0xE9B6, 0x9B93, 0xE9B7, 0x9B83, 0xE9B8, 0x9B91, + 0xE9B9, 0x9B96, 0xE9BA, 0x9B97, 0xE9BB, 0x9B9F, 0xE9BC, 0x9BA0, 0xE9BD, 0x9BA8, 0xE9BE, 0x9BB4, 0xE9BF, 0x9BC0, 0xE9C0, 0x9BCA, + 0xE9C1, 0x9BB9, 0xE9C2, 0x9BC6, 0xE9C3, 0x9BCF, 0xE9C4, 0x9BD1, 0xE9C5, 0x9BD2, 0xE9C6, 0x9BE3, 0xE9C7, 0x9BE2, 0xE9C8, 0x9BE4, + 0xE9C9, 0x9BD4, 0xE9CA, 0x9BE1, 0xE9CB, 0x9C3A, 0xE9CC, 0x9BF2, 0xE9CD, 0x9BF1, 0xE9CE, 0x9BF0, 0xE9CF, 0x9C15, 0xE9D0, 0x9C14, + 0xE9D1, 0x9C09, 0xE9D2, 0x9C13, 0xE9D3, 0x9C0C, 0xE9D4, 0x9C06, 0xE9D5, 0x9C08, 0xE9D6, 0x9C12, 0xE9D7, 0x9C0A, 0xE9D8, 0x9C04, + 0xE9D9, 0x9C2E, 0xE9DA, 0x9C1B, 0xE9DB, 0x9C25, 0xE9DC, 0x9C24, 0xE9DD, 0x9C21, 0xE9DE, 0x9C30, 0xE9DF, 0x9C47, 0xE9E0, 0x9C32, + 0xE9E1, 0x9C46, 0xE9E2, 0x9C3E, 0xE9E3, 0x9C5A, 0xE9E4, 0x9C60, 0xE9E5, 0x9C67, 0xE9E6, 0x9C76, 0xE9E7, 0x9C78, 0xE9E8, 0x9CE7, + 0xE9E9, 0x9CEC, 0xE9EA, 0x9CF0, 0xE9EB, 0x9D09, 0xE9EC, 0x9D08, 0xE9ED, 0x9CEB, 0xE9EE, 0x9D03, 0xE9EF, 0x9D06, 0xE9F0, 0x9D2A, + 0xE9F1, 0x9D26, 0xE9F2, 0x9DAF, 0xE9F3, 0x9D23, 0xE9F4, 0x9D1F, 0xE9F5, 0x9D44, 0xE9F6, 0x9D15, 0xE9F7, 0x9D12, 0xE9F8, 0x9D41, + 0xE9F9, 0x9D3F, 0xE9FA, 0x9D3E, 0xE9FB, 0x9D46, 0xE9FC, 0x9D48, 0xEA40, 0x9D5D, 0xEA41, 0x9D5E, 0xEA42, 0x9D64, 0xEA43, 0x9D51, + 0xEA44, 0x9D50, 0xEA45, 0x9D59, 0xEA46, 0x9D72, 0xEA47, 0x9D89, 0xEA48, 0x9D87, 0xEA49, 0x9DAB, 0xEA4A, 0x9D6F, 0xEA4B, 0x9D7A, + 0xEA4C, 0x9D9A, 0xEA4D, 0x9DA4, 0xEA4E, 0x9DA9, 0xEA4F, 0x9DB2, 0xEA50, 0x9DC4, 0xEA51, 0x9DC1, 0xEA52, 0x9DBB, 0xEA53, 0x9DB8, + 0xEA54, 0x9DBA, 0xEA55, 0x9DC6, 0xEA56, 0x9DCF, 0xEA57, 0x9DC2, 0xEA58, 0x9DD9, 0xEA59, 0x9DD3, 0xEA5A, 0x9DF8, 0xEA5B, 0x9DE6, + 0xEA5C, 0x9DED, 0xEA5D, 0x9DEF, 0xEA5E, 0x9DFD, 0xEA5F, 0x9E1A, 0xEA60, 0x9E1B, 0xEA61, 0x9E1E, 0xEA62, 0x9E75, 0xEA63, 0x9E79, + 0xEA64, 0x9E7D, 0xEA65, 0x9E81, 0xEA66, 0x9E88, 0xEA67, 0x9E8B, 0xEA68, 0x9E8C, 0xEA69, 0x9E92, 0xEA6A, 0x9E95, 0xEA6B, 0x9E91, + 0xEA6C, 0x9E9D, 0xEA6D, 0x9EA5, 0xEA6E, 0x9EA9, 0xEA6F, 0x9EB8, 0xEA70, 0x9EAA, 0xEA71, 0x9EAD, 0xEA72, 0x9761, 0xEA73, 0x9ECC, + 0xEA74, 0x9ECE, 0xEA75, 0x9ECF, 0xEA76, 0x9ED0, 0xEA77, 0x9ED4, 0xEA78, 0x9EDC, 0xEA79, 0x9EDE, 0xEA7A, 0x9EDD, 0xEA7B, 0x9EE0, + 0xEA7C, 0x9EE5, 0xEA7D, 0x9EE8, 0xEA7E, 0x9EEF, 0xEA80, 0x9EF4, 0xEA81, 0x9EF6, 0xEA82, 0x9EF7, 0xEA83, 0x9EF9, 0xEA84, 0x9EFB, + 0xEA85, 0x9EFC, 0xEA86, 0x9EFD, 0xEA87, 0x9F07, 0xEA88, 0x9F08, 0xEA89, 0x76B7, 0xEA8A, 0x9F15, 0xEA8B, 0x9F21, 0xEA8C, 0x9F2C, + 0xEA8D, 0x9F3E, 0xEA8E, 0x9F4A, 0xEA8F, 0x9F52, 0xEA90, 0x9F54, 0xEA91, 0x9F63, 0xEA92, 0x9F5F, 0xEA93, 0x9F60, 0xEA94, 0x9F61, + 0xEA95, 0x9F66, 0xEA96, 0x9F67, 0xEA97, 0x9F6C, 0xEA98, 0x9F6A, 0xEA99, 0x9F77, 0xEA9A, 0x9F72, 0xEA9B, 0x9F76, 0xEA9C, 0x9F95, + 0xEA9D, 0x9F9C, 0xEA9E, 0x9FA0, 0xEA9F, 0x582F, 0xEAA0, 0x69C7, 0xEAA1, 0x9059, 0xEAA2, 0x7464, 0xEAA3, 0x51DC, 0xEAA4, 0x7199, + 0xFA40, 0x2170, 0xFA41, 0x2171, 0xFA42, 0x2172, 0xFA43, 0x2173, 0xFA44, 0x2174, 0xFA45, 0x2175, 0xFA46, 0x2176, 0xFA47, 0x2177, + 0xFA48, 0x2178, 0xFA49, 0x2179, 0xFA55, 0xFFE4, 0xFA56, 0xFF07, 0xFA57, 0xFF02, 0xFA5C, 0x7E8A, 0xFA5D, 0x891C, 0xFA5E, 0x9348, + 0xFA5F, 0x9288, 0xFA60, 0x84DC, 0xFA61, 0x4FC9, 0xFA62, 0x70BB, 0xFA63, 0x6631, 0xFA64, 0x68C8, 0xFA65, 0x92F9, 0xFA66, 0x66FB, + 0xFA67, 0x5F45, 0xFA68, 0x4E28, 0xFA69, 0x4EE1, 0xFA6A, 0x4EFC, 0xFA6B, 0x4F00, 0xFA6C, 0x4F03, 0xFA6D, 0x4F39, 0xFA6E, 0x4F56, + 0xFA6F, 0x4F92, 0xFA70, 0x4F8A, 0xFA71, 0x4F9A, 0xFA72, 0x4F94, 0xFA73, 0x4FCD, 0xFA74, 0x5040, 0xFA75, 0x5022, 0xFA76, 0x4FFF, + 0xFA77, 0x501E, 0xFA78, 0x5046, 0xFA79, 0x5070, 0xFA7A, 0x5042, 0xFA7B, 0x5094, 0xFA7C, 0x50F4, 0xFA7D, 0x50D8, 0xFA7E, 0x514A, + 0xFA80, 0x5164, 0xFA81, 0x519D, 0xFA82, 0x51BE, 0xFA83, 0x51EC, 0xFA84, 0x5215, 0xFA85, 0x529C, 0xFA86, 0x52A6, 0xFA87, 0x52C0, + 0xFA88, 0x52DB, 0xFA89, 0x5300, 0xFA8A, 0x5307, 0xFA8B, 0x5324, 0xFA8C, 0x5372, 0xFA8D, 0x5393, 0xFA8E, 0x53B2, 0xFA8F, 0x53DD, + 0xFA90, 0xFA0E, 0xFA91, 0x549C, 0xFA92, 0x548A, 0xFA93, 0x54A9, 0xFA94, 0x54FF, 0xFA95, 0x5586, 0xFA96, 0x5759, 0xFA97, 0x5765, + 0xFA98, 0x57AC, 0xFA99, 0x57C8, 0xFA9A, 0x57C7, 0xFA9B, 0xFA0F, 0xFA9C, 0xFA10, 0xFA9D, 0x589E, 0xFA9E, 0x58B2, 0xFA9F, 0x590B, + 0xFAA0, 0x5953, 0xFAA1, 0x595B, 0xFAA2, 0x595D, 0xFAA3, 0x5963, 0xFAA4, 0x59A4, 0xFAA5, 0x59BA, 0xFAA6, 0x5B56, 0xFAA7, 0x5BC0, + 0xFAA8, 0x752F, 0xFAA9, 0x5BD8, 0xFAAA, 0x5BEC, 0xFAAB, 0x5C1E, 0xFAAC, 0x5CA6, 0xFAAD, 0x5CBA, 0xFAAE, 0x5CF5, 0xFAAF, 0x5D27, + 0xFAB0, 0x5D53, 0xFAB1, 0xFA11, 0xFAB2, 0x5D42, 0xFAB3, 0x5D6D, 0xFAB4, 0x5DB8, 0xFAB5, 0x5DB9, 0xFAB6, 0x5DD0, 0xFAB7, 0x5F21, + 0xFAB8, 0x5F34, 0xFAB9, 0x5F67, 0xFABA, 0x5FB7, 0xFABB, 0x5FDE, 0xFABC, 0x605D, 0xFABD, 0x6085, 0xFABE, 0x608A, 0xFABF, 0x60DE, + 0xFAC0, 0x60D5, 0xFAC1, 0x6120, 0xFAC2, 0x60F2, 0xFAC3, 0x6111, 0xFAC4, 0x6137, 0xFAC5, 0x6130, 0xFAC6, 0x6198, 0xFAC7, 0x6213, + 0xFAC8, 0x62A6, 0xFAC9, 0x63F5, 0xFACA, 0x6460, 0xFACB, 0x649D, 0xFACC, 0x64CE, 0xFACD, 0x654E, 0xFACE, 0x6600, 0xFACF, 0x6615, + 0xFAD0, 0x663B, 0xFAD1, 0x6609, 0xFAD2, 0x662E, 0xFAD3, 0x661E, 0xFAD4, 0x6624, 0xFAD5, 0x6665, 0xFAD6, 0x6657, 0xFAD7, 0x6659, + 0xFAD8, 0xFA12, 0xFAD9, 0x6673, 0xFADA, 0x6699, 0xFADB, 0x66A0, 0xFADC, 0x66B2, 0xFADD, 0x66BF, 0xFADE, 0x66FA, 0xFADF, 0x670E, + 0xFAE0, 0xF929, 0xFAE1, 0x6766, 0xFAE2, 0x67BB, 0xFAE3, 0x6852, 0xFAE4, 0x67C0, 0xFAE5, 0x6801, 0xFAE6, 0x6844, 0xFAE7, 0x68CF, + 0xFAE8, 0xFA13, 0xFAE9, 0x6968, 0xFAEA, 0xFA14, 0xFAEB, 0x6998, 0xFAEC, 0x69E2, 0xFAED, 0x6A30, 0xFAEE, 0x6A6B, 0xFAEF, 0x6A46, + 0xFAF0, 0x6A73, 0xFAF1, 0x6A7E, 0xFAF2, 0x6AE2, 0xFAF3, 0x6AE4, 0xFAF4, 0x6BD6, 0xFAF5, 0x6C3F, 0xFAF6, 0x6C5C, 0xFAF7, 0x6C86, + 0xFAF8, 0x6C6F, 0xFAF9, 0x6CDA, 0xFAFA, 0x6D04, 0xFAFB, 0x6D87, 0xFAFC, 0x6D6F, 0xFB40, 0x6D96, 0xFB41, 0x6DAC, 0xFB42, 0x6DCF, + 0xFB43, 0x6DF8, 0xFB44, 0x6DF2, 0xFB45, 0x6DFC, 0xFB46, 0x6E39, 0xFB47, 0x6E5C, 0xFB48, 0x6E27, 0xFB49, 0x6E3C, 0xFB4A, 0x6EBF, + 0xFB4B, 0x6F88, 0xFB4C, 0x6FB5, 0xFB4D, 0x6FF5, 0xFB4E, 0x7005, 0xFB4F, 0x7007, 0xFB50, 0x7028, 0xFB51, 0x7085, 0xFB52, 0x70AB, + 0xFB53, 0x710F, 0xFB54, 0x7104, 0xFB55, 0x715C, 0xFB56, 0x7146, 0xFB57, 0x7147, 0xFB58, 0xFA15, 0xFB59, 0x71C1, 0xFB5A, 0x71FE, + 0xFB5B, 0x72B1, 0xFB5C, 0x72BE, 0xFB5D, 0x7324, 0xFB5E, 0xFA16, 0xFB5F, 0x7377, 0xFB60, 0x73BD, 0xFB61, 0x73C9, 0xFB62, 0x73D6, + 0xFB63, 0x73E3, 0xFB64, 0x73D2, 0xFB65, 0x7407, 0xFB66, 0x73F5, 0xFB67, 0x7426, 0xFB68, 0x742A, 0xFB69, 0x7429, 0xFB6A, 0x742E, + 0xFB6B, 0x7462, 0xFB6C, 0x7489, 0xFB6D, 0x749F, 0xFB6E, 0x7501, 0xFB6F, 0x756F, 0xFB70, 0x7682, 0xFB71, 0x769C, 0xFB72, 0x769E, + 0xFB73, 0x769B, 0xFB74, 0x76A6, 0xFB75, 0xFA17, 0xFB76, 0x7746, 0xFB77, 0x52AF, 0xFB78, 0x7821, 0xFB79, 0x784E, 0xFB7A, 0x7864, + 0xFB7B, 0x787A, 0xFB7C, 0x7930, 0xFB7D, 0xFA18, 0xFB7E, 0xFA19, 0xFB80, 0xFA1A, 0xFB81, 0x7994, 0xFB82, 0xFA1B, 0xFB83, 0x799B, + 0xFB84, 0x7AD1, 0xFB85, 0x7AE7, 0xFB86, 0xFA1C, 0xFB87, 0x7AEB, 0xFB88, 0x7B9E, 0xFB89, 0xFA1D, 0xFB8A, 0x7D48, 0xFB8B, 0x7D5C, + 0xFB8C, 0x7DB7, 0xFB8D, 0x7DA0, 0xFB8E, 0x7DD6, 0xFB8F, 0x7E52, 0xFB90, 0x7F47, 0xFB91, 0x7FA1, 0xFB92, 0xFA1E, 0xFB93, 0x8301, + 0xFB94, 0x8362, 0xFB95, 0x837F, 0xFB96, 0x83C7, 0xFB97, 0x83F6, 0xFB98, 0x8448, 0xFB99, 0x84B4, 0xFB9A, 0x8553, 0xFB9B, 0x8559, + 0xFB9C, 0x856B, 0xFB9D, 0xFA1F, 0xFB9E, 0x85B0, 0xFB9F, 0xFA20, 0xFBA0, 0xFA21, 0xFBA1, 0x8807, 0xFBA2, 0x88F5, 0xFBA3, 0x8A12, + 0xFBA4, 0x8A37, 0xFBA5, 0x8A79, 0xFBA6, 0x8AA7, 0xFBA7, 0x8ABE, 0xFBA8, 0x8ADF, 0xFBA9, 0xFA22, 0xFBAA, 0x8AF6, 0xFBAB, 0x8B53, + 0xFBAC, 0x8B7F, 0xFBAD, 0x8CF0, 0xFBAE, 0x8CF4, 0xFBAF, 0x8D12, 0xFBB0, 0x8D76, 0xFBB1, 0xFA23, 0xFBB2, 0x8ECF, 0xFBB3, 0xFA24, + 0xFBB4, 0xFA25, 0xFBB5, 0x9067, 0xFBB6, 0x90DE, 0xFBB7, 0xFA26, 0xFBB8, 0x9115, 0xFBB9, 0x9127, 0xFBBA, 0x91DA, 0xFBBB, 0x91D7, + 0xFBBC, 0x91DE, 0xFBBD, 0x91ED, 0xFBBE, 0x91EE, 0xFBBF, 0x91E4, 0xFBC0, 0x91E5, 0xFBC1, 0x9206, 0xFBC2, 0x9210, 0xFBC3, 0x920A, + 0xFBC4, 0x923A, 0xFBC5, 0x9240, 0xFBC6, 0x923C, 0xFBC7, 0x924E, 0xFBC8, 0x9259, 0xFBC9, 0x9251, 0xFBCA, 0x9239, 0xFBCB, 0x9267, + 0xFBCC, 0x92A7, 0xFBCD, 0x9277, 0xFBCE, 0x9278, 0xFBCF, 0x92E7, 0xFBD0, 0x92D7, 0xFBD1, 0x92D9, 0xFBD2, 0x92D0, 0xFBD3, 0xFA27, + 0xFBD4, 0x92D5, 0xFBD5, 0x92E0, 0xFBD6, 0x92D3, 0xFBD7, 0x9325, 0xFBD8, 0x9321, 0xFBD9, 0x92FB, 0xFBDA, 0xFA28, 0xFBDB, 0x931E, + 0xFBDC, 0x92FF, 0xFBDD, 0x931D, 0xFBDE, 0x9302, 0xFBDF, 0x9370, 0xFBE0, 0x9357, 0xFBE1, 0x93A4, 0xFBE2, 0x93C6, 0xFBE3, 0x93DE, + 0xFBE4, 0x93F8, 0xFBE5, 0x9431, 0xFBE6, 0x9445, 0xFBE7, 0x9448, 0xFBE8, 0x9592, 0xFBE9, 0xF9DC, 0xFBEA, 0xFA29, 0xFBEB, 0x969D, + 0xFBEC, 0x96AF, 0xFBED, 0x9733, 0xFBEE, 0x973B, 0xFBEF, 0x9743, 0xFBF0, 0x974D, 0xFBF1, 0x974F, 0xFBF2, 0x9751, 0xFBF3, 0x9755, + 0xFBF4, 0x9857, 0xFBF5, 0x9865, 0xFBF6, 0xFA2A, 0xFBF7, 0xFA2B, 0xFBF8, 0x9927, 0xFBF9, 0xFA2C, 0xFBFA, 0x999E, 0xFBFB, 0x9A4E, + 0xFBFC, 0x9AD9, 0xFC40, 0x9ADC, 0xFC41, 0x9B75, 0xFC42, 0x9B72, 0xFC43, 0x9B8F, 0xFC44, 0x9BB1, 0xFC45, 0x9BBB, 0xFC46, 0x9C00, + 0xFC47, 0x9D70, 0xFC48, 0x9D6B, 0xFC49, 0xFA2D, 0xFC4A, 0x9E19, 0xFC4B, 0x9ED1, 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 936 || FF_CODE_PAGE == 0 /* Simplified Chinese */ +static const WCHAR uni2oem936[] = { /* Unicode --> GBK pairs */ + 0x00A4, 0xA1E8, 0x00A7, 0xA1EC, 0x00A8, 0xA1A7, 0x00B0, 0xA1E3, 0x00B1, 0xA1C0, 0x00B7, 0xA1A4, 0x00D7, 0xA1C1, 0x00E0, 0xA8A4, + 0x00E1, 0xA8A2, 0x00E8, 0xA8A8, 0x00E9, 0xA8A6, 0x00EA, 0xA8BA, 0x00EC, 0xA8AC, 0x00ED, 0xA8AA, 0x00F2, 0xA8B0, 0x00F3, 0xA8AE, + 0x00F7, 0xA1C2, 0x00F9, 0xA8B4, 0x00FA, 0xA8B2, 0x00FC, 0xA8B9, 0x0101, 0xA8A1, 0x0113, 0xA8A5, 0x011B, 0xA8A7, 0x012B, 0xA8A9, + 0x0144, 0xA8BD, 0x0148, 0xA8BE, 0x014D, 0xA8AD, 0x016B, 0xA8B1, 0x01CE, 0xA8A3, 0x01D0, 0xA8AB, 0x01D2, 0xA8AF, 0x01D4, 0xA8B3, + 0x01D6, 0xA8B5, 0x01D8, 0xA8B6, 0x01DA, 0xA8B7, 0x01DC, 0xA8B8, 0x0251, 0xA8BB, 0x0261, 0xA8C0, 0x02C7, 0xA1A6, 0x02C9, 0xA1A5, + 0x02CA, 0xA840, 0x02CB, 0xA841, 0x02D9, 0xA842, 0x0391, 0xA6A1, 0x0392, 0xA6A2, 0x0393, 0xA6A3, 0x0394, 0xA6A4, 0x0395, 0xA6A5, + 0x0396, 0xA6A6, 0x0397, 0xA6A7, 0x0398, 0xA6A8, 0x0399, 0xA6A9, 0x039A, 0xA6AA, 0x039B, 0xA6AB, 0x039C, 0xA6AC, 0x039D, 0xA6AD, + 0x039E, 0xA6AE, 0x039F, 0xA6AF, 0x03A0, 0xA6B0, 0x03A1, 0xA6B1, 0x03A3, 0xA6B2, 0x03A4, 0xA6B3, 0x03A5, 0xA6B4, 0x03A6, 0xA6B5, + 0x03A7, 0xA6B6, 0x03A8, 0xA6B7, 0x03A9, 0xA6B8, 0x03B1, 0xA6C1, 0x03B2, 0xA6C2, 0x03B3, 0xA6C3, 0x03B4, 0xA6C4, 0x03B5, 0xA6C5, + 0x03B6, 0xA6C6, 0x03B7, 0xA6C7, 0x03B8, 0xA6C8, 0x03B9, 0xA6C9, 0x03BA, 0xA6CA, 0x03BB, 0xA6CB, 0x03BC, 0xA6CC, 0x03BD, 0xA6CD, + 0x03BE, 0xA6CE, 0x03BF, 0xA6CF, 0x03C0, 0xA6D0, 0x03C1, 0xA6D1, 0x03C3, 0xA6D2, 0x03C4, 0xA6D3, 0x03C5, 0xA6D4, 0x03C6, 0xA6D5, + 0x03C7, 0xA6D6, 0x03C8, 0xA6D7, 0x03C9, 0xA6D8, 0x0401, 0xA7A7, 0x0410, 0xA7A1, 0x0411, 0xA7A2, 0x0412, 0xA7A3, 0x0413, 0xA7A4, + 0x0414, 0xA7A5, 0x0415, 0xA7A6, 0x0416, 0xA7A8, 0x0417, 0xA7A9, 0x0418, 0xA7AA, 0x0419, 0xA7AB, 0x041A, 0xA7AC, 0x041B, 0xA7AD, + 0x041C, 0xA7AE, 0x041D, 0xA7AF, 0x041E, 0xA7B0, 0x041F, 0xA7B1, 0x0420, 0xA7B2, 0x0421, 0xA7B3, 0x0422, 0xA7B4, 0x0423, 0xA7B5, + 0x0424, 0xA7B6, 0x0425, 0xA7B7, 0x0426, 0xA7B8, 0x0427, 0xA7B9, 0x0428, 0xA7BA, 0x0429, 0xA7BB, 0x042A, 0xA7BC, 0x042B, 0xA7BD, + 0x042C, 0xA7BE, 0x042D, 0xA7BF, 0x042E, 0xA7C0, 0x042F, 0xA7C1, 0x0430, 0xA7D1, 0x0431, 0xA7D2, 0x0432, 0xA7D3, 0x0433, 0xA7D4, + 0x0434, 0xA7D5, 0x0435, 0xA7D6, 0x0436, 0xA7D8, 0x0437, 0xA7D9, 0x0438, 0xA7DA, 0x0439, 0xA7DB, 0x043A, 0xA7DC, 0x043B, 0xA7DD, + 0x043C, 0xA7DE, 0x043D, 0xA7DF, 0x043E, 0xA7E0, 0x043F, 0xA7E1, 0x0440, 0xA7E2, 0x0441, 0xA7E3, 0x0442, 0xA7E4, 0x0443, 0xA7E5, + 0x0444, 0xA7E6, 0x0445, 0xA7E7, 0x0446, 0xA7E8, 0x0447, 0xA7E9, 0x0448, 0xA7EA, 0x0449, 0xA7EB, 0x044A, 0xA7EC, 0x044B, 0xA7ED, + 0x044C, 0xA7EE, 0x044D, 0xA7EF, 0x044E, 0xA7F0, 0x044F, 0xA7F1, 0x0451, 0xA7D7, 0x2010, 0xA95C, 0x2013, 0xA843, 0x2014, 0xA1AA, + 0x2015, 0xA844, 0x2016, 0xA1AC, 0x2018, 0xA1AE, 0x2019, 0xA1AF, 0x201C, 0xA1B0, 0x201D, 0xA1B1, 0x2025, 0xA845, 0x2026, 0xA1AD, + 0x2030, 0xA1EB, 0x2032, 0xA1E4, 0x2033, 0xA1E5, 0x2035, 0xA846, 0x203B, 0xA1F9, 0x20AC, 0x0080, 0x2103, 0xA1E6, 0x2105, 0xA847, + 0x2109, 0xA848, 0x2116, 0xA1ED, 0x2121, 0xA959, 0x2160, 0xA2F1, 0x2161, 0xA2F2, 0x2162, 0xA2F3, 0x2163, 0xA2F4, 0x2164, 0xA2F5, + 0x2165, 0xA2F6, 0x2166, 0xA2F7, 0x2167, 0xA2F8, 0x2168, 0xA2F9, 0x2169, 0xA2FA, 0x216A, 0xA2FB, 0x216B, 0xA2FC, 0x2170, 0xA2A1, + 0x2171, 0xA2A2, 0x2172, 0xA2A3, 0x2173, 0xA2A4, 0x2174, 0xA2A5, 0x2175, 0xA2A6, 0x2176, 0xA2A7, 0x2177, 0xA2A8, 0x2178, 0xA2A9, + 0x2179, 0xA2AA, 0x2190, 0xA1FB, 0x2191, 0xA1FC, 0x2192, 0xA1FA, 0x2193, 0xA1FD, 0x2196, 0xA849, 0x2197, 0xA84A, 0x2198, 0xA84B, + 0x2199, 0xA84C, 0x2208, 0xA1CA, 0x220F, 0xA1C7, 0x2211, 0xA1C6, 0x2215, 0xA84D, 0x221A, 0xA1CC, 0x221D, 0xA1D8, 0x221E, 0xA1DE, + 0x221F, 0xA84E, 0x2220, 0xA1CF, 0x2223, 0xA84F, 0x2225, 0xA1CE, 0x2227, 0xA1C4, 0x2228, 0xA1C5, 0x2229, 0xA1C9, 0x222A, 0xA1C8, + 0x222B, 0xA1D2, 0x222E, 0xA1D3, 0x2234, 0xA1E0, 0x2235, 0xA1DF, 0x2236, 0xA1C3, 0x2237, 0xA1CB, 0x223D, 0xA1D7, 0x2248, 0xA1D6, + 0x224C, 0xA1D5, 0x2252, 0xA850, 0x2260, 0xA1D9, 0x2261, 0xA1D4, 0x2264, 0xA1DC, 0x2265, 0xA1DD, 0x2266, 0xA851, 0x2267, 0xA852, + 0x226E, 0xA1DA, 0x226F, 0xA1DB, 0x2295, 0xA892, 0x2299, 0xA1D1, 0x22A5, 0xA1CD, 0x22BF, 0xA853, 0x2312, 0xA1D0, 0x2460, 0xA2D9, + 0x2461, 0xA2DA, 0x2462, 0xA2DB, 0x2463, 0xA2DC, 0x2464, 0xA2DD, 0x2465, 0xA2DE, 0x2466, 0xA2DF, 0x2467, 0xA2E0, 0x2468, 0xA2E1, + 0x2469, 0xA2E2, 0x2474, 0xA2C5, 0x2475, 0xA2C6, 0x2476, 0xA2C7, 0x2477, 0xA2C8, 0x2478, 0xA2C9, 0x2479, 0xA2CA, 0x247A, 0xA2CB, + 0x247B, 0xA2CC, 0x247C, 0xA2CD, 0x247D, 0xA2CE, 0x247E, 0xA2CF, 0x247F, 0xA2D0, 0x2480, 0xA2D1, 0x2481, 0xA2D2, 0x2482, 0xA2D3, + 0x2483, 0xA2D4, 0x2484, 0xA2D5, 0x2485, 0xA2D6, 0x2486, 0xA2D7, 0x2487, 0xA2D8, 0x2488, 0xA2B1, 0x2489, 0xA2B2, 0x248A, 0xA2B3, + 0x248B, 0xA2B4, 0x248C, 0xA2B5, 0x248D, 0xA2B6, 0x248E, 0xA2B7, 0x248F, 0xA2B8, 0x2490, 0xA2B9, 0x2491, 0xA2BA, 0x2492, 0xA2BB, + 0x2493, 0xA2BC, 0x2494, 0xA2BD, 0x2495, 0xA2BE, 0x2496, 0xA2BF, 0x2497, 0xA2C0, 0x2498, 0xA2C1, 0x2499, 0xA2C2, 0x249A, 0xA2C3, + 0x249B, 0xA2C4, 0x2500, 0xA9A4, 0x2501, 0xA9A5, 0x2502, 0xA9A6, 0x2503, 0xA9A7, 0x2504, 0xA9A8, 0x2505, 0xA9A9, 0x2506, 0xA9AA, + 0x2507, 0xA9AB, 0x2508, 0xA9AC, 0x2509, 0xA9AD, 0x250A, 0xA9AE, 0x250B, 0xA9AF, 0x250C, 0xA9B0, 0x250D, 0xA9B1, 0x250E, 0xA9B2, + 0x250F, 0xA9B3, 0x2510, 0xA9B4, 0x2511, 0xA9B5, 0x2512, 0xA9B6, 0x2513, 0xA9B7, 0x2514, 0xA9B8, 0x2515, 0xA9B9, 0x2516, 0xA9BA, + 0x2517, 0xA9BB, 0x2518, 0xA9BC, 0x2519, 0xA9BD, 0x251A, 0xA9BE, 0x251B, 0xA9BF, 0x251C, 0xA9C0, 0x251D, 0xA9C1, 0x251E, 0xA9C2, + 0x251F, 0xA9C3, 0x2520, 0xA9C4, 0x2521, 0xA9C5, 0x2522, 0xA9C6, 0x2523, 0xA9C7, 0x2524, 0xA9C8, 0x2525, 0xA9C9, 0x2526, 0xA9CA, + 0x2527, 0xA9CB, 0x2528, 0xA9CC, 0x2529, 0xA9CD, 0x252A, 0xA9CE, 0x252B, 0xA9CF, 0x252C, 0xA9D0, 0x252D, 0xA9D1, 0x252E, 0xA9D2, + 0x252F, 0xA9D3, 0x2530, 0xA9D4, 0x2531, 0xA9D5, 0x2532, 0xA9D6, 0x2533, 0xA9D7, 0x2534, 0xA9D8, 0x2535, 0xA9D9, 0x2536, 0xA9DA, + 0x2537, 0xA9DB, 0x2538, 0xA9DC, 0x2539, 0xA9DD, 0x253A, 0xA9DE, 0x253B, 0xA9DF, 0x253C, 0xA9E0, 0x253D, 0xA9E1, 0x253E, 0xA9E2, + 0x253F, 0xA9E3, 0x2540, 0xA9E4, 0x2541, 0xA9E5, 0x2542, 0xA9E6, 0x2543, 0xA9E7, 0x2544, 0xA9E8, 0x2545, 0xA9E9, 0x2546, 0xA9EA, + 0x2547, 0xA9EB, 0x2548, 0xA9EC, 0x2549, 0xA9ED, 0x254A, 0xA9EE, 0x254B, 0xA9EF, 0x2550, 0xA854, 0x2551, 0xA855, 0x2552, 0xA856, + 0x2553, 0xA857, 0x2554, 0xA858, 0x2555, 0xA859, 0x2556, 0xA85A, 0x2557, 0xA85B, 0x2558, 0xA85C, 0x2559, 0xA85D, 0x255A, 0xA85E, + 0x255B, 0xA85F, 0x255C, 0xA860, 0x255D, 0xA861, 0x255E, 0xA862, 0x255F, 0xA863, 0x2560, 0xA864, 0x2561, 0xA865, 0x2562, 0xA866, + 0x2563, 0xA867, 0x2564, 0xA868, 0x2565, 0xA869, 0x2566, 0xA86A, 0x2567, 0xA86B, 0x2568, 0xA86C, 0x2569, 0xA86D, 0x256A, 0xA86E, + 0x256B, 0xA86F, 0x256C, 0xA870, 0x256D, 0xA871, 0x256E, 0xA872, 0x256F, 0xA873, 0x2570, 0xA874, 0x2571, 0xA875, 0x2572, 0xA876, + 0x2573, 0xA877, 0x2581, 0xA878, 0x2582, 0xA879, 0x2583, 0xA87A, 0x2584, 0xA87B, 0x2585, 0xA87C, 0x2586, 0xA87D, 0x2587, 0xA87E, + 0x2588, 0xA880, 0x2589, 0xA881, 0x258A, 0xA882, 0x258B, 0xA883, 0x258C, 0xA884, 0x258D, 0xA885, 0x258E, 0xA886, 0x258F, 0xA887, + 0x2593, 0xA888, 0x2594, 0xA889, 0x2595, 0xA88A, 0x25A0, 0xA1F6, 0x25A1, 0xA1F5, 0x25B2, 0xA1F8, 0x25B3, 0xA1F7, 0x25BC, 0xA88B, + 0x25BD, 0xA88C, 0x25C6, 0xA1F4, 0x25C7, 0xA1F3, 0x25CB, 0xA1F0, 0x25CE, 0xA1F2, 0x25CF, 0xA1F1, 0x25E2, 0xA88D, 0x25E3, 0xA88E, + 0x25E4, 0xA88F, 0x25E5, 0xA890, 0x2605, 0xA1EF, 0x2606, 0xA1EE, 0x2609, 0xA891, 0x2640, 0xA1E2, 0x2642, 0xA1E1, 0x3000, 0xA1A1, + 0x3001, 0xA1A2, 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3005, 0xA1A9, 0x3006, 0xA965, 0x3007, 0xA996, 0x3008, 0xA1B4, 0x3009, 0xA1B5, + 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9, 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BE, 0x3011, 0xA1BF, + 0x3012, 0xA893, 0x3013, 0xA1FE, 0x3014, 0xA1B2, 0x3015, 0xA1B3, 0x3016, 0xA1BC, 0x3017, 0xA1BD, 0x301D, 0xA894, 0x301E, 0xA895, + 0x3021, 0xA940, 0x3022, 0xA941, 0x3023, 0xA942, 0x3024, 0xA943, 0x3025, 0xA944, 0x3026, 0xA945, 0x3027, 0xA946, 0x3028, 0xA947, + 0x3029, 0xA948, 0x3041, 0xA4A1, 0x3042, 0xA4A2, 0x3043, 0xA4A3, 0x3044, 0xA4A4, 0x3045, 0xA4A5, 0x3046, 0xA4A6, 0x3047, 0xA4A7, + 0x3048, 0xA4A8, 0x3049, 0xA4A9, 0x304A, 0xA4AA, 0x304B, 0xA4AB, 0x304C, 0xA4AC, 0x304D, 0xA4AD, 0x304E, 0xA4AE, 0x304F, 0xA4AF, + 0x3050, 0xA4B0, 0x3051, 0xA4B1, 0x3052, 0xA4B2, 0x3053, 0xA4B3, 0x3054, 0xA4B4, 0x3055, 0xA4B5, 0x3056, 0xA4B6, 0x3057, 0xA4B7, + 0x3058, 0xA4B8, 0x3059, 0xA4B9, 0x305A, 0xA4BA, 0x305B, 0xA4BB, 0x305C, 0xA4BC, 0x305D, 0xA4BD, 0x305E, 0xA4BE, 0x305F, 0xA4BF, + 0x3060, 0xA4C0, 0x3061, 0xA4C1, 0x3062, 0xA4C2, 0x3063, 0xA4C3, 0x3064, 0xA4C4, 0x3065, 0xA4C5, 0x3066, 0xA4C6, 0x3067, 0xA4C7, + 0x3068, 0xA4C8, 0x3069, 0xA4C9, 0x306A, 0xA4CA, 0x306B, 0xA4CB, 0x306C, 0xA4CC, 0x306D, 0xA4CD, 0x306E, 0xA4CE, 0x306F, 0xA4CF, + 0x3070, 0xA4D0, 0x3071, 0xA4D1, 0x3072, 0xA4D2, 0x3073, 0xA4D3, 0x3074, 0xA4D4, 0x3075, 0xA4D5, 0x3076, 0xA4D6, 0x3077, 0xA4D7, + 0x3078, 0xA4D8, 0x3079, 0xA4D9, 0x307A, 0xA4DA, 0x307B, 0xA4DB, 0x307C, 0xA4DC, 0x307D, 0xA4DD, 0x307E, 0xA4DE, 0x307F, 0xA4DF, + 0x3080, 0xA4E0, 0x3081, 0xA4E1, 0x3082, 0xA4E2, 0x3083, 0xA4E3, 0x3084, 0xA4E4, 0x3085, 0xA4E5, 0x3086, 0xA4E6, 0x3087, 0xA4E7, + 0x3088, 0xA4E8, 0x3089, 0xA4E9, 0x308A, 0xA4EA, 0x308B, 0xA4EB, 0x308C, 0xA4EC, 0x308D, 0xA4ED, 0x308E, 0xA4EE, 0x308F, 0xA4EF, + 0x3090, 0xA4F0, 0x3091, 0xA4F1, 0x3092, 0xA4F2, 0x3093, 0xA4F3, 0x309B, 0xA961, 0x309C, 0xA962, 0x309D, 0xA966, 0x309E, 0xA967, + 0x30A1, 0xA5A1, 0x30A2, 0xA5A2, 0x30A3, 0xA5A3, 0x30A4, 0xA5A4, 0x30A5, 0xA5A5, 0x30A6, 0xA5A6, 0x30A7, 0xA5A7, 0x30A8, 0xA5A8, + 0x30A9, 0xA5A9, 0x30AA, 0xA5AA, 0x30AB, 0xA5AB, 0x30AC, 0xA5AC, 0x30AD, 0xA5AD, 0x30AE, 0xA5AE, 0x30AF, 0xA5AF, 0x30B0, 0xA5B0, + 0x30B1, 0xA5B1, 0x30B2, 0xA5B2, 0x30B3, 0xA5B3, 0x30B4, 0xA5B4, 0x30B5, 0xA5B5, 0x30B6, 0xA5B6, 0x30B7, 0xA5B7, 0x30B8, 0xA5B8, + 0x30B9, 0xA5B9, 0x30BA, 0xA5BA, 0x30BB, 0xA5BB, 0x30BC, 0xA5BC, 0x30BD, 0xA5BD, 0x30BE, 0xA5BE, 0x30BF, 0xA5BF, 0x30C0, 0xA5C0, + 0x30C1, 0xA5C1, 0x30C2, 0xA5C2, 0x30C3, 0xA5C3, 0x30C4, 0xA5C4, 0x30C5, 0xA5C5, 0x30C6, 0xA5C6, 0x30C7, 0xA5C7, 0x30C8, 0xA5C8, + 0x30C9, 0xA5C9, 0x30CA, 0xA5CA, 0x30CB, 0xA5CB, 0x30CC, 0xA5CC, 0x30CD, 0xA5CD, 0x30CE, 0xA5CE, 0x30CF, 0xA5CF, 0x30D0, 0xA5D0, + 0x30D1, 0xA5D1, 0x30D2, 0xA5D2, 0x30D3, 0xA5D3, 0x30D4, 0xA5D4, 0x30D5, 0xA5D5, 0x30D6, 0xA5D6, 0x30D7, 0xA5D7, 0x30D8, 0xA5D8, + 0x30D9, 0xA5D9, 0x30DA, 0xA5DA, 0x30DB, 0xA5DB, 0x30DC, 0xA5DC, 0x30DD, 0xA5DD, 0x30DE, 0xA5DE, 0x30DF, 0xA5DF, 0x30E0, 0xA5E0, + 0x30E1, 0xA5E1, 0x30E2, 0xA5E2, 0x30E3, 0xA5E3, 0x30E4, 0xA5E4, 0x30E5, 0xA5E5, 0x30E6, 0xA5E6, 0x30E7, 0xA5E7, 0x30E8, 0xA5E8, + 0x30E9, 0xA5E9, 0x30EA, 0xA5EA, 0x30EB, 0xA5EB, 0x30EC, 0xA5EC, 0x30ED, 0xA5ED, 0x30EE, 0xA5EE, 0x30EF, 0xA5EF, 0x30F0, 0xA5F0, + 0x30F1, 0xA5F1, 0x30F2, 0xA5F2, 0x30F3, 0xA5F3, 0x30F4, 0xA5F4, 0x30F5, 0xA5F5, 0x30F6, 0xA5F6, 0x30FC, 0xA960, 0x30FD, 0xA963, + 0x30FE, 0xA964, 0x3105, 0xA8C5, 0x3106, 0xA8C6, 0x3107, 0xA8C7, 0x3108, 0xA8C8, 0x3109, 0xA8C9, 0x310A, 0xA8CA, 0x310B, 0xA8CB, + 0x310C, 0xA8CC, 0x310D, 0xA8CD, 0x310E, 0xA8CE, 0x310F, 0xA8CF, 0x3110, 0xA8D0, 0x3111, 0xA8D1, 0x3112, 0xA8D2, 0x3113, 0xA8D3, + 0x3114, 0xA8D4, 0x3115, 0xA8D5, 0x3116, 0xA8D6, 0x3117, 0xA8D7, 0x3118, 0xA8D8, 0x3119, 0xA8D9, 0x311A, 0xA8DA, 0x311B, 0xA8DB, + 0x311C, 0xA8DC, 0x311D, 0xA8DD, 0x311E, 0xA8DE, 0x311F, 0xA8DF, 0x3120, 0xA8E0, 0x3121, 0xA8E1, 0x3122, 0xA8E2, 0x3123, 0xA8E3, + 0x3124, 0xA8E4, 0x3125, 0xA8E5, 0x3126, 0xA8E6, 0x3127, 0xA8E7, 0x3128, 0xA8E8, 0x3129, 0xA8E9, 0x3220, 0xA2E5, 0x3221, 0xA2E6, + 0x3222, 0xA2E7, 0x3223, 0xA2E8, 0x3224, 0xA2E9, 0x3225, 0xA2EA, 0x3226, 0xA2EB, 0x3227, 0xA2EC, 0x3228, 0xA2ED, 0x3229, 0xA2EE, + 0x3231, 0xA95A, 0x32A3, 0xA949, 0x338E, 0xA94A, 0x338F, 0xA94B, 0x339C, 0xA94C, 0x339D, 0xA94D, 0x339E, 0xA94E, 0x33A1, 0xA94F, + 0x33C4, 0xA950, 0x33CE, 0xA951, 0x33D1, 0xA952, 0x33D2, 0xA953, 0x33D5, 0xA954, 0x4E00, 0xD2BB, 0x4E01, 0xB6A1, 0x4E02, 0x8140, + 0x4E03, 0xC6DF, 0x4E04, 0x8141, 0x4E05, 0x8142, 0x4E06, 0x8143, 0x4E07, 0xCDF2, 0x4E08, 0xD5C9, 0x4E09, 0xC8FD, 0x4E0A, 0xC9CF, + 0x4E0B, 0xCFC2, 0x4E0C, 0xD8A2, 0x4E0D, 0xB2BB, 0x4E0E, 0xD3EB, 0x4E0F, 0x8144, 0x4E10, 0xD8A4, 0x4E11, 0xB3F3, 0x4E12, 0x8145, + 0x4E13, 0xD7A8, 0x4E14, 0xC7D2, 0x4E15, 0xD8A7, 0x4E16, 0xCAC0, 0x4E17, 0x8146, 0x4E18, 0xC7F0, 0x4E19, 0xB1FB, 0x4E1A, 0xD2B5, + 0x4E1B, 0xB4D4, 0x4E1C, 0xB6AB, 0x4E1D, 0xCBBF, 0x4E1E, 0xD8A9, 0x4E1F, 0x8147, 0x4E20, 0x8148, 0x4E21, 0x8149, 0x4E22, 0xB6AA, + 0x4E23, 0x814A, 0x4E24, 0xC1BD, 0x4E25, 0xD1CF, 0x4E26, 0x814B, 0x4E27, 0xC9A5, 0x4E28, 0xD8AD, 0x4E29, 0x814C, 0x4E2A, 0xB8F6, + 0x4E2B, 0xD1BE, 0x4E2C, 0xE3DC, 0x4E2D, 0xD6D0, 0x4E2E, 0x814D, 0x4E2F, 0x814E, 0x4E30, 0xB7E1, 0x4E31, 0x814F, 0x4E32, 0xB4AE, + 0x4E33, 0x8150, 0x4E34, 0xC1D9, 0x4E35, 0x8151, 0x4E36, 0xD8BC, 0x4E37, 0x8152, 0x4E38, 0xCDE8, 0x4E39, 0xB5A4, 0x4E3A, 0xCEAA, + 0x4E3B, 0xD6F7, 0x4E3C, 0x8153, 0x4E3D, 0xC0F6, 0x4E3E, 0xBED9, 0x4E3F, 0xD8AF, 0x4E40, 0x8154, 0x4E41, 0x8155, 0x4E42, 0x8156, + 0x4E43, 0xC4CB, 0x4E44, 0x8157, 0x4E45, 0xBEC3, 0x4E46, 0x8158, 0x4E47, 0xD8B1, 0x4E48, 0xC3B4, 0x4E49, 0xD2E5, 0x4E4A, 0x8159, + 0x4E4B, 0xD6AE, 0x4E4C, 0xCEDA, 0x4E4D, 0xD5A7, 0x4E4E, 0xBAF5, 0x4E4F, 0xB7A6, 0x4E50, 0xC0D6, 0x4E51, 0x815A, 0x4E52, 0xC6B9, + 0x4E53, 0xC5D2, 0x4E54, 0xC7C7, 0x4E55, 0x815B, 0x4E56, 0xB9D4, 0x4E57, 0x815C, 0x4E58, 0xB3CB, 0x4E59, 0xD2D2, 0x4E5A, 0x815D, + 0x4E5B, 0x815E, 0x4E5C, 0xD8BF, 0x4E5D, 0xBEC5, 0x4E5E, 0xC6F2, 0x4E5F, 0xD2B2, 0x4E60, 0xCFB0, 0x4E61, 0xCFE7, 0x4E62, 0x815F, + 0x4E63, 0x8160, 0x4E64, 0x8161, 0x4E65, 0x8162, 0x4E66, 0xCAE9, 0x4E67, 0x8163, 0x4E68, 0x8164, 0x4E69, 0xD8C0, 0x4E6A, 0x8165, + 0x4E6B, 0x8166, 0x4E6C, 0x8167, 0x4E6D, 0x8168, 0x4E6E, 0x8169, 0x4E6F, 0x816A, 0x4E70, 0xC2F2, 0x4E71, 0xC2D2, 0x4E72, 0x816B, + 0x4E73, 0xC8E9, 0x4E74, 0x816C, 0x4E75, 0x816D, 0x4E76, 0x816E, 0x4E77, 0x816F, 0x4E78, 0x8170, 0x4E79, 0x8171, 0x4E7A, 0x8172, + 0x4E7B, 0x8173, 0x4E7C, 0x8174, 0x4E7D, 0x8175, 0x4E7E, 0xC7AC, 0x4E7F, 0x8176, 0x4E80, 0x8177, 0x4E81, 0x8178, 0x4E82, 0x8179, + 0x4E83, 0x817A, 0x4E84, 0x817B, 0x4E85, 0x817C, 0x4E86, 0xC1CB, 0x4E87, 0x817D, 0x4E88, 0xD3E8, 0x4E89, 0xD5F9, 0x4E8A, 0x817E, + 0x4E8B, 0xCAC2, 0x4E8C, 0xB6FE, 0x4E8D, 0xD8A1, 0x4E8E, 0xD3DA, 0x4E8F, 0xBFF7, 0x4E90, 0x8180, 0x4E91, 0xD4C6, 0x4E92, 0xBBA5, + 0x4E93, 0xD8C1, 0x4E94, 0xCEE5, 0x4E95, 0xBEAE, 0x4E96, 0x8181, 0x4E97, 0x8182, 0x4E98, 0xD8A8, 0x4E99, 0x8183, 0x4E9A, 0xD1C7, + 0x4E9B, 0xD0A9, 0x4E9C, 0x8184, 0x4E9D, 0x8185, 0x4E9E, 0x8186, 0x4E9F, 0xD8BD, 0x4EA0, 0xD9EF, 0x4EA1, 0xCDF6, 0x4EA2, 0xBFBA, + 0x4EA3, 0x8187, 0x4EA4, 0xBDBB, 0x4EA5, 0xBAA5, 0x4EA6, 0xD2E0, 0x4EA7, 0xB2FA, 0x4EA8, 0xBAE0, 0x4EA9, 0xC4B6, 0x4EAA, 0x8188, + 0x4EAB, 0xCFED, 0x4EAC, 0xBEA9, 0x4EAD, 0xCDA4, 0x4EAE, 0xC1C1, 0x4EAF, 0x8189, 0x4EB0, 0x818A, 0x4EB1, 0x818B, 0x4EB2, 0xC7D7, + 0x4EB3, 0xD9F1, 0x4EB4, 0x818C, 0x4EB5, 0xD9F4, 0x4EB6, 0x818D, 0x4EB7, 0x818E, 0x4EB8, 0x818F, 0x4EB9, 0x8190, 0x4EBA, 0xC8CB, + 0x4EBB, 0xD8E9, 0x4EBC, 0x8191, 0x4EBD, 0x8192, 0x4EBE, 0x8193, 0x4EBF, 0xD2DA, 0x4EC0, 0xCAB2, 0x4EC1, 0xC8CA, 0x4EC2, 0xD8EC, + 0x4EC3, 0xD8EA, 0x4EC4, 0xD8C6, 0x4EC5, 0xBDF6, 0x4EC6, 0xC6CD, 0x4EC7, 0xB3F0, 0x4EC8, 0x8194, 0x4EC9, 0xD8EB, 0x4ECA, 0xBDF1, + 0x4ECB, 0xBDE9, 0x4ECC, 0x8195, 0x4ECD, 0xC8D4, 0x4ECE, 0xB4D3, 0x4ECF, 0x8196, 0x4ED0, 0x8197, 0x4ED1, 0xC2D8, 0x4ED2, 0x8198, + 0x4ED3, 0xB2D6, 0x4ED4, 0xD7D0, 0x4ED5, 0xCACB, 0x4ED6, 0xCBFB, 0x4ED7, 0xD5CC, 0x4ED8, 0xB8B6, 0x4ED9, 0xCFC9, 0x4EDA, 0x8199, + 0x4EDB, 0x819A, 0x4EDC, 0x819B, 0x4EDD, 0xD9DA, 0x4EDE, 0xD8F0, 0x4EDF, 0xC7AA, 0x4EE0, 0x819C, 0x4EE1, 0xD8EE, 0x4EE2, 0x819D, + 0x4EE3, 0xB4FA, 0x4EE4, 0xC1EE, 0x4EE5, 0xD2D4, 0x4EE6, 0x819E, 0x4EE7, 0x819F, 0x4EE8, 0xD8ED, 0x4EE9, 0x81A0, 0x4EEA, 0xD2C7, + 0x4EEB, 0xD8EF, 0x4EEC, 0xC3C7, 0x4EED, 0x81A1, 0x4EEE, 0x81A2, 0x4EEF, 0x81A3, 0x4EF0, 0xD1F6, 0x4EF1, 0x81A4, 0x4EF2, 0xD6D9, + 0x4EF3, 0xD8F2, 0x4EF4, 0x81A5, 0x4EF5, 0xD8F5, 0x4EF6, 0xBCFE, 0x4EF7, 0xBCDB, 0x4EF8, 0x81A6, 0x4EF9, 0x81A7, 0x4EFA, 0x81A8, + 0x4EFB, 0xC8CE, 0x4EFC, 0x81A9, 0x4EFD, 0xB7DD, 0x4EFE, 0x81AA, 0x4EFF, 0xB7C2, 0x4F00, 0x81AB, 0x4F01, 0xC6F3, 0x4F02, 0x81AC, + 0x4F03, 0x81AD, 0x4F04, 0x81AE, 0x4F05, 0x81AF, 0x4F06, 0x81B0, 0x4F07, 0x81B1, 0x4F08, 0x81B2, 0x4F09, 0xD8F8, 0x4F0A, 0xD2C1, + 0x4F0B, 0x81B3, 0x4F0C, 0x81B4, 0x4F0D, 0xCEE9, 0x4F0E, 0xBCBF, 0x4F0F, 0xB7FC, 0x4F10, 0xB7A5, 0x4F11, 0xD0DD, 0x4F12, 0x81B5, + 0x4F13, 0x81B6, 0x4F14, 0x81B7, 0x4F15, 0x81B8, 0x4F16, 0x81B9, 0x4F17, 0xD6DA, 0x4F18, 0xD3C5, 0x4F19, 0xBBEF, 0x4F1A, 0xBBE1, + 0x4F1B, 0xD8F1, 0x4F1C, 0x81BA, 0x4F1D, 0x81BB, 0x4F1E, 0xC9A1, 0x4F1F, 0xCEB0, 0x4F20, 0xB4AB, 0x4F21, 0x81BC, 0x4F22, 0xD8F3, + 0x4F23, 0x81BD, 0x4F24, 0xC9CB, 0x4F25, 0xD8F6, 0x4F26, 0xC2D7, 0x4F27, 0xD8F7, 0x4F28, 0x81BE, 0x4F29, 0x81BF, 0x4F2A, 0xCEB1, + 0x4F2B, 0xD8F9, 0x4F2C, 0x81C0, 0x4F2D, 0x81C1, 0x4F2E, 0x81C2, 0x4F2F, 0xB2AE, 0x4F30, 0xB9C0, 0x4F31, 0x81C3, 0x4F32, 0xD9A3, + 0x4F33, 0x81C4, 0x4F34, 0xB0E9, 0x4F35, 0x81C5, 0x4F36, 0xC1E6, 0x4F37, 0x81C6, 0x4F38, 0xC9EC, 0x4F39, 0x81C7, 0x4F3A, 0xCBC5, + 0x4F3B, 0x81C8, 0x4F3C, 0xCBC6, 0x4F3D, 0xD9A4, 0x4F3E, 0x81C9, 0x4F3F, 0x81CA, 0x4F40, 0x81CB, 0x4F41, 0x81CC, 0x4F42, 0x81CD, + 0x4F43, 0xB5E8, 0x4F44, 0x81CE, 0x4F45, 0x81CF, 0x4F46, 0xB5AB, 0x4F47, 0x81D0, 0x4F48, 0x81D1, 0x4F49, 0x81D2, 0x4F4A, 0x81D3, + 0x4F4B, 0x81D4, 0x4F4C, 0x81D5, 0x4F4D, 0xCEBB, 0x4F4E, 0xB5CD, 0x4F4F, 0xD7A1, 0x4F50, 0xD7F4, 0x4F51, 0xD3D3, 0x4F52, 0x81D6, + 0x4F53, 0xCCE5, 0x4F54, 0x81D7, 0x4F55, 0xBACE, 0x4F56, 0x81D8, 0x4F57, 0xD9A2, 0x4F58, 0xD9DC, 0x4F59, 0xD3E0, 0x4F5A, 0xD8FD, + 0x4F5B, 0xB7F0, 0x4F5C, 0xD7F7, 0x4F5D, 0xD8FE, 0x4F5E, 0xD8FA, 0x4F5F, 0xD9A1, 0x4F60, 0xC4E3, 0x4F61, 0x81D9, 0x4F62, 0x81DA, + 0x4F63, 0xD3B6, 0x4F64, 0xD8F4, 0x4F65, 0xD9DD, 0x4F66, 0x81DB, 0x4F67, 0xD8FB, 0x4F68, 0x81DC, 0x4F69, 0xC5E5, 0x4F6A, 0x81DD, + 0x4F6B, 0x81DE, 0x4F6C, 0xC0D0, 0x4F6D, 0x81DF, 0x4F6E, 0x81E0, 0x4F6F, 0xD1F0, 0x4F70, 0xB0DB, 0x4F71, 0x81E1, 0x4F72, 0x81E2, + 0x4F73, 0xBCD1, 0x4F74, 0xD9A6, 0x4F75, 0x81E3, 0x4F76, 0xD9A5, 0x4F77, 0x81E4, 0x4F78, 0x81E5, 0x4F79, 0x81E6, 0x4F7A, 0x81E7, + 0x4F7B, 0xD9AC, 0x4F7C, 0xD9AE, 0x4F7D, 0x81E8, 0x4F7E, 0xD9AB, 0x4F7F, 0xCAB9, 0x4F80, 0x81E9, 0x4F81, 0x81EA, 0x4F82, 0x81EB, + 0x4F83, 0xD9A9, 0x4F84, 0xD6B6, 0x4F85, 0x81EC, 0x4F86, 0x81ED, 0x4F87, 0x81EE, 0x4F88, 0xB3DE, 0x4F89, 0xD9A8, 0x4F8A, 0x81EF, + 0x4F8B, 0xC0FD, 0x4F8C, 0x81F0, 0x4F8D, 0xCACC, 0x4F8E, 0x81F1, 0x4F8F, 0xD9AA, 0x4F90, 0x81F2, 0x4F91, 0xD9A7, 0x4F92, 0x81F3, + 0x4F93, 0x81F4, 0x4F94, 0xD9B0, 0x4F95, 0x81F5, 0x4F96, 0x81F6, 0x4F97, 0xB6B1, 0x4F98, 0x81F7, 0x4F99, 0x81F8, 0x4F9A, 0x81F9, + 0x4F9B, 0xB9A9, 0x4F9C, 0x81FA, 0x4F9D, 0xD2C0, 0x4F9E, 0x81FB, 0x4F9F, 0x81FC, 0x4FA0, 0xCFC0, 0x4FA1, 0x81FD, 0x4FA2, 0x81FE, + 0x4FA3, 0xC2C2, 0x4FA4, 0x8240, 0x4FA5, 0xBDC4, 0x4FA6, 0xD5EC, 0x4FA7, 0xB2E0, 0x4FA8, 0xC7C8, 0x4FA9, 0xBFEB, 0x4FAA, 0xD9AD, + 0x4FAB, 0x8241, 0x4FAC, 0xD9AF, 0x4FAD, 0x8242, 0x4FAE, 0xCEEA, 0x4FAF, 0xBAEE, 0x4FB0, 0x8243, 0x4FB1, 0x8244, 0x4FB2, 0x8245, + 0x4FB3, 0x8246, 0x4FB4, 0x8247, 0x4FB5, 0xC7D6, 0x4FB6, 0x8248, 0x4FB7, 0x8249, 0x4FB8, 0x824A, 0x4FB9, 0x824B, 0x4FBA, 0x824C, + 0x4FBB, 0x824D, 0x4FBC, 0x824E, 0x4FBD, 0x824F, 0x4FBE, 0x8250, 0x4FBF, 0xB1E3, 0x4FC0, 0x8251, 0x4FC1, 0x8252, 0x4FC2, 0x8253, + 0x4FC3, 0xB4D9, 0x4FC4, 0xB6ED, 0x4FC5, 0xD9B4, 0x4FC6, 0x8254, 0x4FC7, 0x8255, 0x4FC8, 0x8256, 0x4FC9, 0x8257, 0x4FCA, 0xBFA1, + 0x4FCB, 0x8258, 0x4FCC, 0x8259, 0x4FCD, 0x825A, 0x4FCE, 0xD9DE, 0x4FCF, 0xC7CE, 0x4FD0, 0xC0FE, 0x4FD1, 0xD9B8, 0x4FD2, 0x825B, + 0x4FD3, 0x825C, 0x4FD4, 0x825D, 0x4FD5, 0x825E, 0x4FD6, 0x825F, 0x4FD7, 0xCBD7, 0x4FD8, 0xB7FD, 0x4FD9, 0x8260, 0x4FDA, 0xD9B5, + 0x4FDB, 0x8261, 0x4FDC, 0xD9B7, 0x4FDD, 0xB1A3, 0x4FDE, 0xD3E1, 0x4FDF, 0xD9B9, 0x4FE0, 0x8262, 0x4FE1, 0xD0C5, 0x4FE2, 0x8263, + 0x4FE3, 0xD9B6, 0x4FE4, 0x8264, 0x4FE5, 0x8265, 0x4FE6, 0xD9B1, 0x4FE7, 0x8266, 0x4FE8, 0xD9B2, 0x4FE9, 0xC1A9, 0x4FEA, 0xD9B3, + 0x4FEB, 0x8267, 0x4FEC, 0x8268, 0x4FED, 0xBCF3, 0x4FEE, 0xD0DE, 0x4FEF, 0xB8A9, 0x4FF0, 0x8269, 0x4FF1, 0xBEE3, 0x4FF2, 0x826A, + 0x4FF3, 0xD9BD, 0x4FF4, 0x826B, 0x4FF5, 0x826C, 0x4FF6, 0x826D, 0x4FF7, 0x826E, 0x4FF8, 0xD9BA, 0x4FF9, 0x826F, 0x4FFA, 0xB0B3, + 0x4FFB, 0x8270, 0x4FFC, 0x8271, 0x4FFD, 0x8272, 0x4FFE, 0xD9C2, 0x4FFF, 0x8273, 0x5000, 0x8274, 0x5001, 0x8275, 0x5002, 0x8276, + 0x5003, 0x8277, 0x5004, 0x8278, 0x5005, 0x8279, 0x5006, 0x827A, 0x5007, 0x827B, 0x5008, 0x827C, 0x5009, 0x827D, 0x500A, 0x827E, + 0x500B, 0x8280, 0x500C, 0xD9C4, 0x500D, 0xB1B6, 0x500E, 0x8281, 0x500F, 0xD9BF, 0x5010, 0x8282, 0x5011, 0x8283, 0x5012, 0xB5B9, + 0x5013, 0x8284, 0x5014, 0xBEF3, 0x5015, 0x8285, 0x5016, 0x8286, 0x5017, 0x8287, 0x5018, 0xCCC8, 0x5019, 0xBAF2, 0x501A, 0xD2D0, + 0x501B, 0x8288, 0x501C, 0xD9C3, 0x501D, 0x8289, 0x501E, 0x828A, 0x501F, 0xBDE8, 0x5020, 0x828B, 0x5021, 0xB3AB, 0x5022, 0x828C, + 0x5023, 0x828D, 0x5024, 0x828E, 0x5025, 0xD9C5, 0x5026, 0xBEEB, 0x5027, 0x828F, 0x5028, 0xD9C6, 0x5029, 0xD9BB, 0x502A, 0xC4DF, + 0x502B, 0x8290, 0x502C, 0xD9BE, 0x502D, 0xD9C1, 0x502E, 0xD9C0, 0x502F, 0x8291, 0x5030, 0x8292, 0x5031, 0x8293, 0x5032, 0x8294, + 0x5033, 0x8295, 0x5034, 0x8296, 0x5035, 0x8297, 0x5036, 0x8298, 0x5037, 0x8299, 0x5038, 0x829A, 0x5039, 0x829B, 0x503A, 0xD5AE, + 0x503B, 0x829C, 0x503C, 0xD6B5, 0x503D, 0x829D, 0x503E, 0xC7E3, 0x503F, 0x829E, 0x5040, 0x829F, 0x5041, 0x82A0, 0x5042, 0x82A1, + 0x5043, 0xD9C8, 0x5044, 0x82A2, 0x5045, 0x82A3, 0x5046, 0x82A4, 0x5047, 0xBCD9, 0x5048, 0xD9CA, 0x5049, 0x82A5, 0x504A, 0x82A6, + 0x504B, 0x82A7, 0x504C, 0xD9BC, 0x504D, 0x82A8, 0x504E, 0xD9CB, 0x504F, 0xC6AB, 0x5050, 0x82A9, 0x5051, 0x82AA, 0x5052, 0x82AB, + 0x5053, 0x82AC, 0x5054, 0x82AD, 0x5055, 0xD9C9, 0x5056, 0x82AE, 0x5057, 0x82AF, 0x5058, 0x82B0, 0x5059, 0x82B1, 0x505A, 0xD7F6, + 0x505B, 0x82B2, 0x505C, 0xCDA3, 0x505D, 0x82B3, 0x505E, 0x82B4, 0x505F, 0x82B5, 0x5060, 0x82B6, 0x5061, 0x82B7, 0x5062, 0x82B8, + 0x5063, 0x82B9, 0x5064, 0x82BA, 0x5065, 0xBDA1, 0x5066, 0x82BB, 0x5067, 0x82BC, 0x5068, 0x82BD, 0x5069, 0x82BE, 0x506A, 0x82BF, + 0x506B, 0x82C0, 0x506C, 0xD9CC, 0x506D, 0x82C1, 0x506E, 0x82C2, 0x506F, 0x82C3, 0x5070, 0x82C4, 0x5071, 0x82C5, 0x5072, 0x82C6, + 0x5073, 0x82C7, 0x5074, 0x82C8, 0x5075, 0x82C9, 0x5076, 0xC5BC, 0x5077, 0xCDB5, 0x5078, 0x82CA, 0x5079, 0x82CB, 0x507A, 0x82CC, + 0x507B, 0xD9CD, 0x507C, 0x82CD, 0x507D, 0x82CE, 0x507E, 0xD9C7, 0x507F, 0xB3A5, 0x5080, 0xBFFE, 0x5081, 0x82CF, 0x5082, 0x82D0, + 0x5083, 0x82D1, 0x5084, 0x82D2, 0x5085, 0xB8B5, 0x5086, 0x82D3, 0x5087, 0x82D4, 0x5088, 0xC0FC, 0x5089, 0x82D5, 0x508A, 0x82D6, + 0x508B, 0x82D7, 0x508C, 0x82D8, 0x508D, 0xB0F8, 0x508E, 0x82D9, 0x508F, 0x82DA, 0x5090, 0x82DB, 0x5091, 0x82DC, 0x5092, 0x82DD, + 0x5093, 0x82DE, 0x5094, 0x82DF, 0x5095, 0x82E0, 0x5096, 0x82E1, 0x5097, 0x82E2, 0x5098, 0x82E3, 0x5099, 0x82E4, 0x509A, 0x82E5, + 0x509B, 0x82E6, 0x509C, 0x82E7, 0x509D, 0x82E8, 0x509E, 0x82E9, 0x509F, 0x82EA, 0x50A0, 0x82EB, 0x50A1, 0x82EC, 0x50A2, 0x82ED, + 0x50A3, 0xB4F6, 0x50A4, 0x82EE, 0x50A5, 0xD9CE, 0x50A6, 0x82EF, 0x50A7, 0xD9CF, 0x50A8, 0xB4A2, 0x50A9, 0xD9D0, 0x50AA, 0x82F0, + 0x50AB, 0x82F1, 0x50AC, 0xB4DF, 0x50AD, 0x82F2, 0x50AE, 0x82F3, 0x50AF, 0x82F4, 0x50B0, 0x82F5, 0x50B1, 0x82F6, 0x50B2, 0xB0C1, + 0x50B3, 0x82F7, 0x50B4, 0x82F8, 0x50B5, 0x82F9, 0x50B6, 0x82FA, 0x50B7, 0x82FB, 0x50B8, 0x82FC, 0x50B9, 0x82FD, 0x50BA, 0xD9D1, + 0x50BB, 0xC9B5, 0x50BC, 0x82FE, 0x50BD, 0x8340, 0x50BE, 0x8341, 0x50BF, 0x8342, 0x50C0, 0x8343, 0x50C1, 0x8344, 0x50C2, 0x8345, + 0x50C3, 0x8346, 0x50C4, 0x8347, 0x50C5, 0x8348, 0x50C6, 0x8349, 0x50C7, 0x834A, 0x50C8, 0x834B, 0x50C9, 0x834C, 0x50CA, 0x834D, + 0x50CB, 0x834E, 0x50CC, 0x834F, 0x50CD, 0x8350, 0x50CE, 0x8351, 0x50CF, 0xCFF1, 0x50D0, 0x8352, 0x50D1, 0x8353, 0x50D2, 0x8354, + 0x50D3, 0x8355, 0x50D4, 0x8356, 0x50D5, 0x8357, 0x50D6, 0xD9D2, 0x50D7, 0x8358, 0x50D8, 0x8359, 0x50D9, 0x835A, 0x50DA, 0xC1C5, + 0x50DB, 0x835B, 0x50DC, 0x835C, 0x50DD, 0x835D, 0x50DE, 0x835E, 0x50DF, 0x835F, 0x50E0, 0x8360, 0x50E1, 0x8361, 0x50E2, 0x8362, + 0x50E3, 0x8363, 0x50E4, 0x8364, 0x50E5, 0x8365, 0x50E6, 0xD9D6, 0x50E7, 0xC9AE, 0x50E8, 0x8366, 0x50E9, 0x8367, 0x50EA, 0x8368, + 0x50EB, 0x8369, 0x50EC, 0xD9D5, 0x50ED, 0xD9D4, 0x50EE, 0xD9D7, 0x50EF, 0x836A, 0x50F0, 0x836B, 0x50F1, 0x836C, 0x50F2, 0x836D, + 0x50F3, 0xCBDB, 0x50F4, 0x836E, 0x50F5, 0xBDA9, 0x50F6, 0x836F, 0x50F7, 0x8370, 0x50F8, 0x8371, 0x50F9, 0x8372, 0x50FA, 0x8373, + 0x50FB, 0xC6A7, 0x50FC, 0x8374, 0x50FD, 0x8375, 0x50FE, 0x8376, 0x50FF, 0x8377, 0x5100, 0x8378, 0x5101, 0x8379, 0x5102, 0x837A, + 0x5103, 0x837B, 0x5104, 0x837C, 0x5105, 0x837D, 0x5106, 0xD9D3, 0x5107, 0xD9D8, 0x5108, 0x837E, 0x5109, 0x8380, 0x510A, 0x8381, + 0x510B, 0xD9D9, 0x510C, 0x8382, 0x510D, 0x8383, 0x510E, 0x8384, 0x510F, 0x8385, 0x5110, 0x8386, 0x5111, 0x8387, 0x5112, 0xC8E5, + 0x5113, 0x8388, 0x5114, 0x8389, 0x5115, 0x838A, 0x5116, 0x838B, 0x5117, 0x838C, 0x5118, 0x838D, 0x5119, 0x838E, 0x511A, 0x838F, + 0x511B, 0x8390, 0x511C, 0x8391, 0x511D, 0x8392, 0x511E, 0x8393, 0x511F, 0x8394, 0x5120, 0x8395, 0x5121, 0xC0DC, 0x5122, 0x8396, + 0x5123, 0x8397, 0x5124, 0x8398, 0x5125, 0x8399, 0x5126, 0x839A, 0x5127, 0x839B, 0x5128, 0x839C, 0x5129, 0x839D, 0x512A, 0x839E, + 0x512B, 0x839F, 0x512C, 0x83A0, 0x512D, 0x83A1, 0x512E, 0x83A2, 0x512F, 0x83A3, 0x5130, 0x83A4, 0x5131, 0x83A5, 0x5132, 0x83A6, + 0x5133, 0x83A7, 0x5134, 0x83A8, 0x5135, 0x83A9, 0x5136, 0x83AA, 0x5137, 0x83AB, 0x5138, 0x83AC, 0x5139, 0x83AD, 0x513A, 0x83AE, + 0x513B, 0x83AF, 0x513C, 0x83B0, 0x513D, 0x83B1, 0x513E, 0x83B2, 0x513F, 0xB6F9, 0x5140, 0xD8A3, 0x5141, 0xD4CA, 0x5142, 0x83B3, + 0x5143, 0xD4AA, 0x5144, 0xD0D6, 0x5145, 0xB3E4, 0x5146, 0xD5D7, 0x5147, 0x83B4, 0x5148, 0xCFC8, 0x5149, 0xB9E2, 0x514A, 0x83B5, + 0x514B, 0xBFCB, 0x514C, 0x83B6, 0x514D, 0xC3E2, 0x514E, 0x83B7, 0x514F, 0x83B8, 0x5150, 0x83B9, 0x5151, 0xB6D2, 0x5152, 0x83BA, + 0x5153, 0x83BB, 0x5154, 0xCDC3, 0x5155, 0xD9EE, 0x5156, 0xD9F0, 0x5157, 0x83BC, 0x5158, 0x83BD, 0x5159, 0x83BE, 0x515A, 0xB5B3, + 0x515B, 0x83BF, 0x515C, 0xB6B5, 0x515D, 0x83C0, 0x515E, 0x83C1, 0x515F, 0x83C2, 0x5160, 0x83C3, 0x5161, 0x83C4, 0x5162, 0xBEA4, + 0x5163, 0x83C5, 0x5164, 0x83C6, 0x5165, 0xC8EB, 0x5166, 0x83C7, 0x5167, 0x83C8, 0x5168, 0xC8AB, 0x5169, 0x83C9, 0x516A, 0x83CA, + 0x516B, 0xB0CB, 0x516C, 0xB9AB, 0x516D, 0xC1F9, 0x516E, 0xD9E2, 0x516F, 0x83CB, 0x5170, 0xC0BC, 0x5171, 0xB9B2, 0x5172, 0x83CC, + 0x5173, 0xB9D8, 0x5174, 0xD0CB, 0x5175, 0xB1F8, 0x5176, 0xC6E4, 0x5177, 0xBEDF, 0x5178, 0xB5E4, 0x5179, 0xD7C8, 0x517A, 0x83CD, + 0x517B, 0xD1F8, 0x517C, 0xBCE6, 0x517D, 0xCADE, 0x517E, 0x83CE, 0x517F, 0x83CF, 0x5180, 0xBCBD, 0x5181, 0xD9E6, 0x5182, 0xD8E7, + 0x5183, 0x83D0, 0x5184, 0x83D1, 0x5185, 0xC4DA, 0x5186, 0x83D2, 0x5187, 0x83D3, 0x5188, 0xB8D4, 0x5189, 0xC8BD, 0x518A, 0x83D4, + 0x518B, 0x83D5, 0x518C, 0xB2E1, 0x518D, 0xD4D9, 0x518E, 0x83D6, 0x518F, 0x83D7, 0x5190, 0x83D8, 0x5191, 0x83D9, 0x5192, 0xC3B0, + 0x5193, 0x83DA, 0x5194, 0x83DB, 0x5195, 0xC3E1, 0x5196, 0xDAA2, 0x5197, 0xC8DF, 0x5198, 0x83DC, 0x5199, 0xD0B4, 0x519A, 0x83DD, + 0x519B, 0xBEFC, 0x519C, 0xC5A9, 0x519D, 0x83DE, 0x519E, 0x83DF, 0x519F, 0x83E0, 0x51A0, 0xB9DA, 0x51A1, 0x83E1, 0x51A2, 0xDAA3, + 0x51A3, 0x83E2, 0x51A4, 0xD4A9, 0x51A5, 0xDAA4, 0x51A6, 0x83E3, 0x51A7, 0x83E4, 0x51A8, 0x83E5, 0x51A9, 0x83E6, 0x51AA, 0x83E7, + 0x51AB, 0xD9FB, 0x51AC, 0xB6AC, 0x51AD, 0x83E8, 0x51AE, 0x83E9, 0x51AF, 0xB7EB, 0x51B0, 0xB1F9, 0x51B1, 0xD9FC, 0x51B2, 0xB3E5, + 0x51B3, 0xBEF6, 0x51B4, 0x83EA, 0x51B5, 0xBFF6, 0x51B6, 0xD2B1, 0x51B7, 0xC0E4, 0x51B8, 0x83EB, 0x51B9, 0x83EC, 0x51BA, 0x83ED, + 0x51BB, 0xB6B3, 0x51BC, 0xD9FE, 0x51BD, 0xD9FD, 0x51BE, 0x83EE, 0x51BF, 0x83EF, 0x51C0, 0xBEBB, 0x51C1, 0x83F0, 0x51C2, 0x83F1, + 0x51C3, 0x83F2, 0x51C4, 0xC6E0, 0x51C5, 0x83F3, 0x51C6, 0xD7BC, 0x51C7, 0xDAA1, 0x51C8, 0x83F4, 0x51C9, 0xC1B9, 0x51CA, 0x83F5, + 0x51CB, 0xB5F2, 0x51CC, 0xC1E8, 0x51CD, 0x83F6, 0x51CE, 0x83F7, 0x51CF, 0xBCF5, 0x51D0, 0x83F8, 0x51D1, 0xB4D5, 0x51D2, 0x83F9, + 0x51D3, 0x83FA, 0x51D4, 0x83FB, 0x51D5, 0x83FC, 0x51D6, 0x83FD, 0x51D7, 0x83FE, 0x51D8, 0x8440, 0x51D9, 0x8441, 0x51DA, 0x8442, + 0x51DB, 0xC1DD, 0x51DC, 0x8443, 0x51DD, 0xC4FD, 0x51DE, 0x8444, 0x51DF, 0x8445, 0x51E0, 0xBCB8, 0x51E1, 0xB7B2, 0x51E2, 0x8446, + 0x51E3, 0x8447, 0x51E4, 0xB7EF, 0x51E5, 0x8448, 0x51E6, 0x8449, 0x51E7, 0x844A, 0x51E8, 0x844B, 0x51E9, 0x844C, 0x51EA, 0x844D, + 0x51EB, 0xD9EC, 0x51EC, 0x844E, 0x51ED, 0xC6BE, 0x51EE, 0x844F, 0x51EF, 0xBFAD, 0x51F0, 0xBBCB, 0x51F1, 0x8450, 0x51F2, 0x8451, + 0x51F3, 0xB5CA, 0x51F4, 0x8452, 0x51F5, 0xDBC9, 0x51F6, 0xD0D7, 0x51F7, 0x8453, 0x51F8, 0xCDB9, 0x51F9, 0xB0BC, 0x51FA, 0xB3F6, + 0x51FB, 0xBBF7, 0x51FC, 0xDBCA, 0x51FD, 0xBAAF, 0x51FE, 0x8454, 0x51FF, 0xD4E4, 0x5200, 0xB5B6, 0x5201, 0xB5F3, 0x5202, 0xD8D6, + 0x5203, 0xC8D0, 0x5204, 0x8455, 0x5205, 0x8456, 0x5206, 0xB7D6, 0x5207, 0xC7D0, 0x5208, 0xD8D7, 0x5209, 0x8457, 0x520A, 0xBFAF, + 0x520B, 0x8458, 0x520C, 0x8459, 0x520D, 0xDBBB, 0x520E, 0xD8D8, 0x520F, 0x845A, 0x5210, 0x845B, 0x5211, 0xD0CC, 0x5212, 0xBBAE, + 0x5213, 0x845C, 0x5214, 0x845D, 0x5215, 0x845E, 0x5216, 0xEBBE, 0x5217, 0xC1D0, 0x5218, 0xC1F5, 0x5219, 0xD4F2, 0x521A, 0xB8D5, + 0x521B, 0xB4B4, 0x521C, 0x845F, 0x521D, 0xB3F5, 0x521E, 0x8460, 0x521F, 0x8461, 0x5220, 0xC9BE, 0x5221, 0x8462, 0x5222, 0x8463, + 0x5223, 0x8464, 0x5224, 0xC5D0, 0x5225, 0x8465, 0x5226, 0x8466, 0x5227, 0x8467, 0x5228, 0xC5D9, 0x5229, 0xC0FB, 0x522A, 0x8468, + 0x522B, 0xB1F0, 0x522C, 0x8469, 0x522D, 0xD8D9, 0x522E, 0xB9CE, 0x522F, 0x846A, 0x5230, 0xB5BD, 0x5231, 0x846B, 0x5232, 0x846C, + 0x5233, 0xD8DA, 0x5234, 0x846D, 0x5235, 0x846E, 0x5236, 0xD6C6, 0x5237, 0xCBA2, 0x5238, 0xC8AF, 0x5239, 0xC9B2, 0x523A, 0xB4CC, + 0x523B, 0xBFCC, 0x523C, 0x846F, 0x523D, 0xB9F4, 0x523E, 0x8470, 0x523F, 0xD8DB, 0x5240, 0xD8DC, 0x5241, 0xB6E7, 0x5242, 0xBCC1, + 0x5243, 0xCCEA, 0x5244, 0x8471, 0x5245, 0x8472, 0x5246, 0x8473, 0x5247, 0x8474, 0x5248, 0x8475, 0x5249, 0x8476, 0x524A, 0xCFF7, + 0x524B, 0x8477, 0x524C, 0xD8DD, 0x524D, 0xC7B0, 0x524E, 0x8478, 0x524F, 0x8479, 0x5250, 0xB9D0, 0x5251, 0xBDA3, 0x5252, 0x847A, + 0x5253, 0x847B, 0x5254, 0xCCDE, 0x5255, 0x847C, 0x5256, 0xC6CA, 0x5257, 0x847D, 0x5258, 0x847E, 0x5259, 0x8480, 0x525A, 0x8481, + 0x525B, 0x8482, 0x525C, 0xD8E0, 0x525D, 0x8483, 0x525E, 0xD8DE, 0x525F, 0x8484, 0x5260, 0x8485, 0x5261, 0xD8DF, 0x5262, 0x8486, + 0x5263, 0x8487, 0x5264, 0x8488, 0x5265, 0xB0FE, 0x5266, 0x8489, 0x5267, 0xBEE7, 0x5268, 0x848A, 0x5269, 0xCAA3, 0x526A, 0xBCF4, + 0x526B, 0x848B, 0x526C, 0x848C, 0x526D, 0x848D, 0x526E, 0x848E, 0x526F, 0xB8B1, 0x5270, 0x848F, 0x5271, 0x8490, 0x5272, 0xB8EE, + 0x5273, 0x8491, 0x5274, 0x8492, 0x5275, 0x8493, 0x5276, 0x8494, 0x5277, 0x8495, 0x5278, 0x8496, 0x5279, 0x8497, 0x527A, 0x8498, + 0x527B, 0x8499, 0x527C, 0x849A, 0x527D, 0xD8E2, 0x527E, 0x849B, 0x527F, 0xBDCB, 0x5280, 0x849C, 0x5281, 0xD8E4, 0x5282, 0xD8E3, + 0x5283, 0x849D, 0x5284, 0x849E, 0x5285, 0x849F, 0x5286, 0x84A0, 0x5287, 0x84A1, 0x5288, 0xC5FC, 0x5289, 0x84A2, 0x528A, 0x84A3, + 0x528B, 0x84A4, 0x528C, 0x84A5, 0x528D, 0x84A6, 0x528E, 0x84A7, 0x528F, 0x84A8, 0x5290, 0xD8E5, 0x5291, 0x84A9, 0x5292, 0x84AA, + 0x5293, 0xD8E6, 0x5294, 0x84AB, 0x5295, 0x84AC, 0x5296, 0x84AD, 0x5297, 0x84AE, 0x5298, 0x84AF, 0x5299, 0x84B0, 0x529A, 0x84B1, + 0x529B, 0xC1A6, 0x529C, 0x84B2, 0x529D, 0xC8B0, 0x529E, 0xB0EC, 0x529F, 0xB9A6, 0x52A0, 0xBCD3, 0x52A1, 0xCEF1, 0x52A2, 0xDBBD, + 0x52A3, 0xC1D3, 0x52A4, 0x84B3, 0x52A5, 0x84B4, 0x52A6, 0x84B5, 0x52A7, 0x84B6, 0x52A8, 0xB6AF, 0x52A9, 0xD6FA, 0x52AA, 0xC5AC, + 0x52AB, 0xBDD9, 0x52AC, 0xDBBE, 0x52AD, 0xDBBF, 0x52AE, 0x84B7, 0x52AF, 0x84B8, 0x52B0, 0x84B9, 0x52B1, 0xC0F8, 0x52B2, 0xBEA2, + 0x52B3, 0xC0CD, 0x52B4, 0x84BA, 0x52B5, 0x84BB, 0x52B6, 0x84BC, 0x52B7, 0x84BD, 0x52B8, 0x84BE, 0x52B9, 0x84BF, 0x52BA, 0x84C0, + 0x52BB, 0x84C1, 0x52BC, 0x84C2, 0x52BD, 0x84C3, 0x52BE, 0xDBC0, 0x52BF, 0xCAC6, 0x52C0, 0x84C4, 0x52C1, 0x84C5, 0x52C2, 0x84C6, + 0x52C3, 0xB2AA, 0x52C4, 0x84C7, 0x52C5, 0x84C8, 0x52C6, 0x84C9, 0x52C7, 0xD3C2, 0x52C8, 0x84CA, 0x52C9, 0xC3E3, 0x52CA, 0x84CB, + 0x52CB, 0xD1AB, 0x52CC, 0x84CC, 0x52CD, 0x84CD, 0x52CE, 0x84CE, 0x52CF, 0x84CF, 0x52D0, 0xDBC2, 0x52D1, 0x84D0, 0x52D2, 0xC0D5, + 0x52D3, 0x84D1, 0x52D4, 0x84D2, 0x52D5, 0x84D3, 0x52D6, 0xDBC3, 0x52D7, 0x84D4, 0x52D8, 0xBFB1, 0x52D9, 0x84D5, 0x52DA, 0x84D6, + 0x52DB, 0x84D7, 0x52DC, 0x84D8, 0x52DD, 0x84D9, 0x52DE, 0x84DA, 0x52DF, 0xC4BC, 0x52E0, 0x84DB, 0x52E1, 0x84DC, 0x52E2, 0x84DD, + 0x52E3, 0x84DE, 0x52E4, 0xC7DA, 0x52E5, 0x84DF, 0x52E6, 0x84E0, 0x52E7, 0x84E1, 0x52E8, 0x84E2, 0x52E9, 0x84E3, 0x52EA, 0x84E4, + 0x52EB, 0x84E5, 0x52EC, 0x84E6, 0x52ED, 0x84E7, 0x52EE, 0x84E8, 0x52EF, 0x84E9, 0x52F0, 0xDBC4, 0x52F1, 0x84EA, 0x52F2, 0x84EB, + 0x52F3, 0x84EC, 0x52F4, 0x84ED, 0x52F5, 0x84EE, 0x52F6, 0x84EF, 0x52F7, 0x84F0, 0x52F8, 0x84F1, 0x52F9, 0xD9E8, 0x52FA, 0xC9D7, + 0x52FB, 0x84F2, 0x52FC, 0x84F3, 0x52FD, 0x84F4, 0x52FE, 0xB9B4, 0x52FF, 0xCEF0, 0x5300, 0xD4C8, 0x5301, 0x84F5, 0x5302, 0x84F6, + 0x5303, 0x84F7, 0x5304, 0x84F8, 0x5305, 0xB0FC, 0x5306, 0xB4D2, 0x5307, 0x84F9, 0x5308, 0xD0D9, 0x5309, 0x84FA, 0x530A, 0x84FB, + 0x530B, 0x84FC, 0x530C, 0x84FD, 0x530D, 0xD9E9, 0x530E, 0x84FE, 0x530F, 0xDECB, 0x5310, 0xD9EB, 0x5311, 0x8540, 0x5312, 0x8541, + 0x5313, 0x8542, 0x5314, 0x8543, 0x5315, 0xD8B0, 0x5316, 0xBBAF, 0x5317, 0xB1B1, 0x5318, 0x8544, 0x5319, 0xB3D7, 0x531A, 0xD8CE, + 0x531B, 0x8545, 0x531C, 0x8546, 0x531D, 0xD4D1, 0x531E, 0x8547, 0x531F, 0x8548, 0x5320, 0xBDB3, 0x5321, 0xBFEF, 0x5322, 0x8549, + 0x5323, 0xCFBB, 0x5324, 0x854A, 0x5325, 0x854B, 0x5326, 0xD8D0, 0x5327, 0x854C, 0x5328, 0x854D, 0x5329, 0x854E, 0x532A, 0xB7CB, + 0x532B, 0x854F, 0x532C, 0x8550, 0x532D, 0x8551, 0x532E, 0xD8D1, 0x532F, 0x8552, 0x5330, 0x8553, 0x5331, 0x8554, 0x5332, 0x8555, + 0x5333, 0x8556, 0x5334, 0x8557, 0x5335, 0x8558, 0x5336, 0x8559, 0x5337, 0x855A, 0x5338, 0x855B, 0x5339, 0xC6A5, 0x533A, 0xC7F8, + 0x533B, 0xD2BD, 0x533C, 0x855C, 0x533D, 0x855D, 0x533E, 0xD8D2, 0x533F, 0xC4E4, 0x5340, 0x855E, 0x5341, 0xCAAE, 0x5342, 0x855F, + 0x5343, 0xC7A7, 0x5344, 0x8560, 0x5345, 0xD8A6, 0x5346, 0x8561, 0x5347, 0xC9FD, 0x5348, 0xCEE7, 0x5349, 0xBBDC, 0x534A, 0xB0EB, + 0x534B, 0x8562, 0x534C, 0x8563, 0x534D, 0x8564, 0x534E, 0xBBAA, 0x534F, 0xD0AD, 0x5350, 0x8565, 0x5351, 0xB1B0, 0x5352, 0xD7E4, + 0x5353, 0xD7BF, 0x5354, 0x8566, 0x5355, 0xB5A5, 0x5356, 0xC2F4, 0x5357, 0xC4CF, 0x5358, 0x8567, 0x5359, 0x8568, 0x535A, 0xB2A9, + 0x535B, 0x8569, 0x535C, 0xB2B7, 0x535D, 0x856A, 0x535E, 0xB1E5, 0x535F, 0xDFB2, 0x5360, 0xD5BC, 0x5361, 0xBFA8, 0x5362, 0xC2AC, + 0x5363, 0xD8D5, 0x5364, 0xC2B1, 0x5365, 0x856B, 0x5366, 0xD8D4, 0x5367, 0xCED4, 0x5368, 0x856C, 0x5369, 0xDAE0, 0x536A, 0x856D, + 0x536B, 0xCEC0, 0x536C, 0x856E, 0x536D, 0x856F, 0x536E, 0xD8B4, 0x536F, 0xC3AE, 0x5370, 0xD3A1, 0x5371, 0xCEA3, 0x5372, 0x8570, + 0x5373, 0xBCB4, 0x5374, 0xC8B4, 0x5375, 0xC2D1, 0x5376, 0x8571, 0x5377, 0xBEED, 0x5378, 0xD0B6, 0x5379, 0x8572, 0x537A, 0xDAE1, + 0x537B, 0x8573, 0x537C, 0x8574, 0x537D, 0x8575, 0x537E, 0x8576, 0x537F, 0xC7E4, 0x5380, 0x8577, 0x5381, 0x8578, 0x5382, 0xB3A7, + 0x5383, 0x8579, 0x5384, 0xB6F2, 0x5385, 0xCCFC, 0x5386, 0xC0FA, 0x5387, 0x857A, 0x5388, 0x857B, 0x5389, 0xC0F7, 0x538A, 0x857C, + 0x538B, 0xD1B9, 0x538C, 0xD1E1, 0x538D, 0xD8C7, 0x538E, 0x857D, 0x538F, 0x857E, 0x5390, 0x8580, 0x5391, 0x8581, 0x5392, 0x8582, + 0x5393, 0x8583, 0x5394, 0x8584, 0x5395, 0xB2DE, 0x5396, 0x8585, 0x5397, 0x8586, 0x5398, 0xC0E5, 0x5399, 0x8587, 0x539A, 0xBAF1, + 0x539B, 0x8588, 0x539C, 0x8589, 0x539D, 0xD8C8, 0x539E, 0x858A, 0x539F, 0xD4AD, 0x53A0, 0x858B, 0x53A1, 0x858C, 0x53A2, 0xCFE1, + 0x53A3, 0xD8C9, 0x53A4, 0x858D, 0x53A5, 0xD8CA, 0x53A6, 0xCFC3, 0x53A7, 0x858E, 0x53A8, 0xB3F8, 0x53A9, 0xBEC7, 0x53AA, 0x858F, + 0x53AB, 0x8590, 0x53AC, 0x8591, 0x53AD, 0x8592, 0x53AE, 0xD8CB, 0x53AF, 0x8593, 0x53B0, 0x8594, 0x53B1, 0x8595, 0x53B2, 0x8596, + 0x53B3, 0x8597, 0x53B4, 0x8598, 0x53B5, 0x8599, 0x53B6, 0xDBCC, 0x53B7, 0x859A, 0x53B8, 0x859B, 0x53B9, 0x859C, 0x53BA, 0x859D, + 0x53BB, 0xC8A5, 0x53BC, 0x859E, 0x53BD, 0x859F, 0x53BE, 0x85A0, 0x53BF, 0xCFD8, 0x53C0, 0x85A1, 0x53C1, 0xC8FE, 0x53C2, 0xB2CE, + 0x53C3, 0x85A2, 0x53C4, 0x85A3, 0x53C5, 0x85A4, 0x53C6, 0x85A5, 0x53C7, 0x85A6, 0x53C8, 0xD3D6, 0x53C9, 0xB2E6, 0x53CA, 0xBCB0, + 0x53CB, 0xD3D1, 0x53CC, 0xCBAB, 0x53CD, 0xB7B4, 0x53CE, 0x85A7, 0x53CF, 0x85A8, 0x53D0, 0x85A9, 0x53D1, 0xB7A2, 0x53D2, 0x85AA, + 0x53D3, 0x85AB, 0x53D4, 0xCAE5, 0x53D5, 0x85AC, 0x53D6, 0xC8A1, 0x53D7, 0xCADC, 0x53D8, 0xB1E4, 0x53D9, 0xD0F0, 0x53DA, 0x85AD, + 0x53DB, 0xC5D1, 0x53DC, 0x85AE, 0x53DD, 0x85AF, 0x53DE, 0x85B0, 0x53DF, 0xDBC5, 0x53E0, 0xB5FE, 0x53E1, 0x85B1, 0x53E2, 0x85B2, + 0x53E3, 0xBFDA, 0x53E4, 0xB9C5, 0x53E5, 0xBEE4, 0x53E6, 0xC1ED, 0x53E7, 0x85B3, 0x53E8, 0xDFB6, 0x53E9, 0xDFB5, 0x53EA, 0xD6BB, + 0x53EB, 0xBDD0, 0x53EC, 0xD5D9, 0x53ED, 0xB0C8, 0x53EE, 0xB6A3, 0x53EF, 0xBFC9, 0x53F0, 0xCCA8, 0x53F1, 0xDFB3, 0x53F2, 0xCAB7, + 0x53F3, 0xD3D2, 0x53F4, 0x85B4, 0x53F5, 0xD8CF, 0x53F6, 0xD2B6, 0x53F7, 0xBAC5, 0x53F8, 0xCBBE, 0x53F9, 0xCCBE, 0x53FA, 0x85B5, + 0x53FB, 0xDFB7, 0x53FC, 0xB5F0, 0x53FD, 0xDFB4, 0x53FE, 0x85B6, 0x53FF, 0x85B7, 0x5400, 0x85B8, 0x5401, 0xD3F5, 0x5402, 0x85B9, + 0x5403, 0xB3D4, 0x5404, 0xB8F7, 0x5405, 0x85BA, 0x5406, 0xDFBA, 0x5407, 0x85BB, 0x5408, 0xBACF, 0x5409, 0xBCAA, 0x540A, 0xB5F5, + 0x540B, 0x85BC, 0x540C, 0xCDAC, 0x540D, 0xC3FB, 0x540E, 0xBAF3, 0x540F, 0xC0F4, 0x5410, 0xCDC2, 0x5411, 0xCFF2, 0x5412, 0xDFB8, + 0x5413, 0xCFC5, 0x5414, 0x85BD, 0x5415, 0xC2C0, 0x5416, 0xDFB9, 0x5417, 0xC2F0, 0x5418, 0x85BE, 0x5419, 0x85BF, 0x541A, 0x85C0, + 0x541B, 0xBEFD, 0x541C, 0x85C1, 0x541D, 0xC1DF, 0x541E, 0xCDCC, 0x541F, 0xD2F7, 0x5420, 0xB7CD, 0x5421, 0xDFC1, 0x5422, 0x85C2, + 0x5423, 0xDFC4, 0x5424, 0x85C3, 0x5425, 0x85C4, 0x5426, 0xB7F1, 0x5427, 0xB0C9, 0x5428, 0xB6D6, 0x5429, 0xB7D4, 0x542A, 0x85C5, + 0x542B, 0xBAAC, 0x542C, 0xCCFD, 0x542D, 0xBFD4, 0x542E, 0xCBB1, 0x542F, 0xC6F4, 0x5430, 0x85C6, 0x5431, 0xD6A8, 0x5432, 0xDFC5, + 0x5433, 0x85C7, 0x5434, 0xCEE2, 0x5435, 0xB3B3, 0x5436, 0x85C8, 0x5437, 0x85C9, 0x5438, 0xCEFC, 0x5439, 0xB4B5, 0x543A, 0x85CA, + 0x543B, 0xCEC7, 0x543C, 0xBAF0, 0x543D, 0x85CB, 0x543E, 0xCEE1, 0x543F, 0x85CC, 0x5440, 0xD1BD, 0x5441, 0x85CD, 0x5442, 0x85CE, + 0x5443, 0xDFC0, 0x5444, 0x85CF, 0x5445, 0x85D0, 0x5446, 0xB4F4, 0x5447, 0x85D1, 0x5448, 0xB3CA, 0x5449, 0x85D2, 0x544A, 0xB8E6, + 0x544B, 0xDFBB, 0x544C, 0x85D3, 0x544D, 0x85D4, 0x544E, 0x85D5, 0x544F, 0x85D6, 0x5450, 0xC4C5, 0x5451, 0x85D7, 0x5452, 0xDFBC, + 0x5453, 0xDFBD, 0x5454, 0xDFBE, 0x5455, 0xC5BB, 0x5456, 0xDFBF, 0x5457, 0xDFC2, 0x5458, 0xD4B1, 0x5459, 0xDFC3, 0x545A, 0x85D8, + 0x545B, 0xC7BA, 0x545C, 0xCED8, 0x545D, 0x85D9, 0x545E, 0x85DA, 0x545F, 0x85DB, 0x5460, 0x85DC, 0x5461, 0x85DD, 0x5462, 0xC4D8, + 0x5463, 0x85DE, 0x5464, 0xDFCA, 0x5465, 0x85DF, 0x5466, 0xDFCF, 0x5467, 0x85E0, 0x5468, 0xD6DC, 0x5469, 0x85E1, 0x546A, 0x85E2, + 0x546B, 0x85E3, 0x546C, 0x85E4, 0x546D, 0x85E5, 0x546E, 0x85E6, 0x546F, 0x85E7, 0x5470, 0x85E8, 0x5471, 0xDFC9, 0x5472, 0xDFDA, + 0x5473, 0xCEB6, 0x5474, 0x85E9, 0x5475, 0xBAC7, 0x5476, 0xDFCE, 0x5477, 0xDFC8, 0x5478, 0xC5DE, 0x5479, 0x85EA, 0x547A, 0x85EB, + 0x547B, 0xC9EB, 0x547C, 0xBAF4, 0x547D, 0xC3FC, 0x547E, 0x85EC, 0x547F, 0x85ED, 0x5480, 0xBED7, 0x5481, 0x85EE, 0x5482, 0xDFC6, + 0x5483, 0x85EF, 0x5484, 0xDFCD, 0x5485, 0x85F0, 0x5486, 0xC5D8, 0x5487, 0x85F1, 0x5488, 0x85F2, 0x5489, 0x85F3, 0x548A, 0x85F4, + 0x548B, 0xD5A6, 0x548C, 0xBACD, 0x548D, 0x85F5, 0x548E, 0xBECC, 0x548F, 0xD3BD, 0x5490, 0xB8C0, 0x5491, 0x85F6, 0x5492, 0xD6E4, + 0x5493, 0x85F7, 0x5494, 0xDFC7, 0x5495, 0xB9BE, 0x5496, 0xBFA7, 0x5497, 0x85F8, 0x5498, 0x85F9, 0x5499, 0xC1FC, 0x549A, 0xDFCB, + 0x549B, 0xDFCC, 0x549C, 0x85FA, 0x549D, 0xDFD0, 0x549E, 0x85FB, 0x549F, 0x85FC, 0x54A0, 0x85FD, 0x54A1, 0x85FE, 0x54A2, 0x8640, + 0x54A3, 0xDFDB, 0x54A4, 0xDFE5, 0x54A5, 0x8641, 0x54A6, 0xDFD7, 0x54A7, 0xDFD6, 0x54A8, 0xD7C9, 0x54A9, 0xDFE3, 0x54AA, 0xDFE4, + 0x54AB, 0xE5EB, 0x54AC, 0xD2A7, 0x54AD, 0xDFD2, 0x54AE, 0x8642, 0x54AF, 0xBFA9, 0x54B0, 0x8643, 0x54B1, 0xD4DB, 0x54B2, 0x8644, + 0x54B3, 0xBFC8, 0x54B4, 0xDFD4, 0x54B5, 0x8645, 0x54B6, 0x8646, 0x54B7, 0x8647, 0x54B8, 0xCFCC, 0x54B9, 0x8648, 0x54BA, 0x8649, + 0x54BB, 0xDFDD, 0x54BC, 0x864A, 0x54BD, 0xD1CA, 0x54BE, 0x864B, 0x54BF, 0xDFDE, 0x54C0, 0xB0A7, 0x54C1, 0xC6B7, 0x54C2, 0xDFD3, + 0x54C3, 0x864C, 0x54C4, 0xBAE5, 0x54C5, 0x864D, 0x54C6, 0xB6DF, 0x54C7, 0xCDDB, 0x54C8, 0xB9FE, 0x54C9, 0xD4D5, 0x54CA, 0x864E, + 0x54CB, 0x864F, 0x54CC, 0xDFDF, 0x54CD, 0xCFEC, 0x54CE, 0xB0A5, 0x54CF, 0xDFE7, 0x54D0, 0xDFD1, 0x54D1, 0xD1C6, 0x54D2, 0xDFD5, + 0x54D3, 0xDFD8, 0x54D4, 0xDFD9, 0x54D5, 0xDFDC, 0x54D6, 0x8650, 0x54D7, 0xBBA9, 0x54D8, 0x8651, 0x54D9, 0xDFE0, 0x54DA, 0xDFE1, + 0x54DB, 0x8652, 0x54DC, 0xDFE2, 0x54DD, 0xDFE6, 0x54DE, 0xDFE8, 0x54DF, 0xD3B4, 0x54E0, 0x8653, 0x54E1, 0x8654, 0x54E2, 0x8655, + 0x54E3, 0x8656, 0x54E4, 0x8657, 0x54E5, 0xB8E7, 0x54E6, 0xC5B6, 0x54E7, 0xDFEA, 0x54E8, 0xC9DA, 0x54E9, 0xC1A8, 0x54EA, 0xC4C4, + 0x54EB, 0x8658, 0x54EC, 0x8659, 0x54ED, 0xBFDE, 0x54EE, 0xCFF8, 0x54EF, 0x865A, 0x54F0, 0x865B, 0x54F1, 0x865C, 0x54F2, 0xD5DC, + 0x54F3, 0xDFEE, 0x54F4, 0x865D, 0x54F5, 0x865E, 0x54F6, 0x865F, 0x54F7, 0x8660, 0x54F8, 0x8661, 0x54F9, 0x8662, 0x54FA, 0xB2B8, + 0x54FB, 0x8663, 0x54FC, 0xBADF, 0x54FD, 0xDFEC, 0x54FE, 0x8664, 0x54FF, 0xDBC1, 0x5500, 0x8665, 0x5501, 0xD1E4, 0x5502, 0x8666, + 0x5503, 0x8667, 0x5504, 0x8668, 0x5505, 0x8669, 0x5506, 0xCBF4, 0x5507, 0xB4BD, 0x5508, 0x866A, 0x5509, 0xB0A6, 0x550A, 0x866B, + 0x550B, 0x866C, 0x550C, 0x866D, 0x550D, 0x866E, 0x550E, 0x866F, 0x550F, 0xDFF1, 0x5510, 0xCCC6, 0x5511, 0xDFF2, 0x5512, 0x8670, + 0x5513, 0x8671, 0x5514, 0xDFED, 0x5515, 0x8672, 0x5516, 0x8673, 0x5517, 0x8674, 0x5518, 0x8675, 0x5519, 0x8676, 0x551A, 0x8677, + 0x551B, 0xDFE9, 0x551C, 0x8678, 0x551D, 0x8679, 0x551E, 0x867A, 0x551F, 0x867B, 0x5520, 0xDFEB, 0x5521, 0x867C, 0x5522, 0xDFEF, + 0x5523, 0xDFF0, 0x5524, 0xBBBD, 0x5525, 0x867D, 0x5526, 0x867E, 0x5527, 0xDFF3, 0x5528, 0x8680, 0x5529, 0x8681, 0x552A, 0xDFF4, + 0x552B, 0x8682, 0x552C, 0xBBA3, 0x552D, 0x8683, 0x552E, 0xCADB, 0x552F, 0xCEA8, 0x5530, 0xE0A7, 0x5531, 0xB3AA, 0x5532, 0x8684, + 0x5533, 0xE0A6, 0x5534, 0x8685, 0x5535, 0x8686, 0x5536, 0x8687, 0x5537, 0xE0A1, 0x5538, 0x8688, 0x5539, 0x8689, 0x553A, 0x868A, + 0x553B, 0x868B, 0x553C, 0xDFFE, 0x553D, 0x868C, 0x553E, 0xCDD9, 0x553F, 0xDFFC, 0x5540, 0x868D, 0x5541, 0xDFFA, 0x5542, 0x868E, + 0x5543, 0xBFD0, 0x5544, 0xD7C4, 0x5545, 0x868F, 0x5546, 0xC9CC, 0x5547, 0x8690, 0x5548, 0x8691, 0x5549, 0xDFF8, 0x554A, 0xB0A1, + 0x554B, 0x8692, 0x554C, 0x8693, 0x554D, 0x8694, 0x554E, 0x8695, 0x554F, 0x8696, 0x5550, 0xDFFD, 0x5551, 0x8697, 0x5552, 0x8698, + 0x5553, 0x8699, 0x5554, 0x869A, 0x5555, 0xDFFB, 0x5556, 0xE0A2, 0x5557, 0x869B, 0x5558, 0x869C, 0x5559, 0x869D, 0x555A, 0x869E, + 0x555B, 0x869F, 0x555C, 0xE0A8, 0x555D, 0x86A0, 0x555E, 0x86A1, 0x555F, 0x86A2, 0x5560, 0x86A3, 0x5561, 0xB7C8, 0x5562, 0x86A4, + 0x5563, 0x86A5, 0x5564, 0xC6A1, 0x5565, 0xC9B6, 0x5566, 0xC0B2, 0x5567, 0xDFF5, 0x5568, 0x86A6, 0x5569, 0x86A7, 0x556A, 0xC5BE, + 0x556B, 0x86A8, 0x556C, 0xD8C4, 0x556D, 0xDFF9, 0x556E, 0xC4F6, 0x556F, 0x86A9, 0x5570, 0x86AA, 0x5571, 0x86AB, 0x5572, 0x86AC, + 0x5573, 0x86AD, 0x5574, 0x86AE, 0x5575, 0xE0A3, 0x5576, 0xE0A4, 0x5577, 0xE0A5, 0x5578, 0xD0A5, 0x5579, 0x86AF, 0x557A, 0x86B0, + 0x557B, 0xE0B4, 0x557C, 0xCCE4, 0x557D, 0x86B1, 0x557E, 0xE0B1, 0x557F, 0x86B2, 0x5580, 0xBFA6, 0x5581, 0xE0AF, 0x5582, 0xCEB9, + 0x5583, 0xE0AB, 0x5584, 0xC9C6, 0x5585, 0x86B3, 0x5586, 0x86B4, 0x5587, 0xC0AE, 0x5588, 0xE0AE, 0x5589, 0xBAED, 0x558A, 0xBAB0, + 0x558B, 0xE0A9, 0x558C, 0x86B5, 0x558D, 0x86B6, 0x558E, 0x86B7, 0x558F, 0xDFF6, 0x5590, 0x86B8, 0x5591, 0xE0B3, 0x5592, 0x86B9, + 0x5593, 0x86BA, 0x5594, 0xE0B8, 0x5595, 0x86BB, 0x5596, 0x86BC, 0x5597, 0x86BD, 0x5598, 0xB4AD, 0x5599, 0xE0B9, 0x559A, 0x86BE, + 0x559B, 0x86BF, 0x559C, 0xCFB2, 0x559D, 0xBAC8, 0x559E, 0x86C0, 0x559F, 0xE0B0, 0x55A0, 0x86C1, 0x55A1, 0x86C2, 0x55A2, 0x86C3, + 0x55A3, 0x86C4, 0x55A4, 0x86C5, 0x55A5, 0x86C6, 0x55A6, 0x86C7, 0x55A7, 0xD0FA, 0x55A8, 0x86C8, 0x55A9, 0x86C9, 0x55AA, 0x86CA, + 0x55AB, 0x86CB, 0x55AC, 0x86CC, 0x55AD, 0x86CD, 0x55AE, 0x86CE, 0x55AF, 0x86CF, 0x55B0, 0x86D0, 0x55B1, 0xE0AC, 0x55B2, 0x86D1, + 0x55B3, 0xD4FB, 0x55B4, 0x86D2, 0x55B5, 0xDFF7, 0x55B6, 0x86D3, 0x55B7, 0xC5E7, 0x55B8, 0x86D4, 0x55B9, 0xE0AD, 0x55BA, 0x86D5, + 0x55BB, 0xD3F7, 0x55BC, 0x86D6, 0x55BD, 0xE0B6, 0x55BE, 0xE0B7, 0x55BF, 0x86D7, 0x55C0, 0x86D8, 0x55C1, 0x86D9, 0x55C2, 0x86DA, + 0x55C3, 0x86DB, 0x55C4, 0xE0C4, 0x55C5, 0xD0E1, 0x55C6, 0x86DC, 0x55C7, 0x86DD, 0x55C8, 0x86DE, 0x55C9, 0xE0BC, 0x55CA, 0x86DF, + 0x55CB, 0x86E0, 0x55CC, 0xE0C9, 0x55CD, 0xE0CA, 0x55CE, 0x86E1, 0x55CF, 0x86E2, 0x55D0, 0x86E3, 0x55D1, 0xE0BE, 0x55D2, 0xE0AA, + 0x55D3, 0xC9A4, 0x55D4, 0xE0C1, 0x55D5, 0x86E4, 0x55D6, 0xE0B2, 0x55D7, 0x86E5, 0x55D8, 0x86E6, 0x55D9, 0x86E7, 0x55DA, 0x86E8, + 0x55DB, 0x86E9, 0x55DC, 0xCAC8, 0x55DD, 0xE0C3, 0x55DE, 0x86EA, 0x55DF, 0xE0B5, 0x55E0, 0x86EB, 0x55E1, 0xCECB, 0x55E2, 0x86EC, + 0x55E3, 0xCBC3, 0x55E4, 0xE0CD, 0x55E5, 0xE0C6, 0x55E6, 0xE0C2, 0x55E7, 0x86ED, 0x55E8, 0xE0CB, 0x55E9, 0x86EE, 0x55EA, 0xE0BA, + 0x55EB, 0xE0BF, 0x55EC, 0xE0C0, 0x55ED, 0x86EF, 0x55EE, 0x86F0, 0x55EF, 0xE0C5, 0x55F0, 0x86F1, 0x55F1, 0x86F2, 0x55F2, 0xE0C7, + 0x55F3, 0xE0C8, 0x55F4, 0x86F3, 0x55F5, 0xE0CC, 0x55F6, 0x86F4, 0x55F7, 0xE0BB, 0x55F8, 0x86F5, 0x55F9, 0x86F6, 0x55FA, 0x86F7, + 0x55FB, 0x86F8, 0x55FC, 0x86F9, 0x55FD, 0xCBD4, 0x55FE, 0xE0D5, 0x55FF, 0x86FA, 0x5600, 0xE0D6, 0x5601, 0xE0D2, 0x5602, 0x86FB, + 0x5603, 0x86FC, 0x5604, 0x86FD, 0x5605, 0x86FE, 0x5606, 0x8740, 0x5607, 0x8741, 0x5608, 0xE0D0, 0x5609, 0xBCCE, 0x560A, 0x8742, + 0x560B, 0x8743, 0x560C, 0xE0D1, 0x560D, 0x8744, 0x560E, 0xB8C2, 0x560F, 0xD8C5, 0x5610, 0x8745, 0x5611, 0x8746, 0x5612, 0x8747, + 0x5613, 0x8748, 0x5614, 0x8749, 0x5615, 0x874A, 0x5616, 0x874B, 0x5617, 0x874C, 0x5618, 0xD0EA, 0x5619, 0x874D, 0x561A, 0x874E, + 0x561B, 0xC2EF, 0x561C, 0x874F, 0x561D, 0x8750, 0x561E, 0xE0CF, 0x561F, 0xE0BD, 0x5620, 0x8751, 0x5621, 0x8752, 0x5622, 0x8753, + 0x5623, 0xE0D4, 0x5624, 0xE0D3, 0x5625, 0x8754, 0x5626, 0x8755, 0x5627, 0xE0D7, 0x5628, 0x8756, 0x5629, 0x8757, 0x562A, 0x8758, + 0x562B, 0x8759, 0x562C, 0xE0DC, 0x562D, 0xE0D8, 0x562E, 0x875A, 0x562F, 0x875B, 0x5630, 0x875C, 0x5631, 0xD6F6, 0x5632, 0xB3B0, + 0x5633, 0x875D, 0x5634, 0xD7EC, 0x5635, 0x875E, 0x5636, 0xCBBB, 0x5637, 0x875F, 0x5638, 0x8760, 0x5639, 0xE0DA, 0x563A, 0x8761, + 0x563B, 0xCEFB, 0x563C, 0x8762, 0x563D, 0x8763, 0x563E, 0x8764, 0x563F, 0xBAD9, 0x5640, 0x8765, 0x5641, 0x8766, 0x5642, 0x8767, + 0x5643, 0x8768, 0x5644, 0x8769, 0x5645, 0x876A, 0x5646, 0x876B, 0x5647, 0x876C, 0x5648, 0x876D, 0x5649, 0x876E, 0x564A, 0x876F, + 0x564B, 0x8770, 0x564C, 0xE0E1, 0x564D, 0xE0DD, 0x564E, 0xD2AD, 0x564F, 0x8771, 0x5650, 0x8772, 0x5651, 0x8773, 0x5652, 0x8774, + 0x5653, 0x8775, 0x5654, 0xE0E2, 0x5655, 0x8776, 0x5656, 0x8777, 0x5657, 0xE0DB, 0x5658, 0xE0D9, 0x5659, 0xE0DF, 0x565A, 0x8778, + 0x565B, 0x8779, 0x565C, 0xE0E0, 0x565D, 0x877A, 0x565E, 0x877B, 0x565F, 0x877C, 0x5660, 0x877D, 0x5661, 0x877E, 0x5662, 0xE0DE, + 0x5663, 0x8780, 0x5664, 0xE0E4, 0x5665, 0x8781, 0x5666, 0x8782, 0x5667, 0x8783, 0x5668, 0xC6F7, 0x5669, 0xD8AC, 0x566A, 0xD4EB, + 0x566B, 0xE0E6, 0x566C, 0xCAC9, 0x566D, 0x8784, 0x566E, 0x8785, 0x566F, 0x8786, 0x5670, 0x8787, 0x5671, 0xE0E5, 0x5672, 0x8788, + 0x5673, 0x8789, 0x5674, 0x878A, 0x5675, 0x878B, 0x5676, 0xB8C1, 0x5677, 0x878C, 0x5678, 0x878D, 0x5679, 0x878E, 0x567A, 0x878F, + 0x567B, 0xE0E7, 0x567C, 0xE0E8, 0x567D, 0x8790, 0x567E, 0x8791, 0x567F, 0x8792, 0x5680, 0x8793, 0x5681, 0x8794, 0x5682, 0x8795, + 0x5683, 0x8796, 0x5684, 0x8797, 0x5685, 0xE0E9, 0x5686, 0xE0E3, 0x5687, 0x8798, 0x5688, 0x8799, 0x5689, 0x879A, 0x568A, 0x879B, + 0x568B, 0x879C, 0x568C, 0x879D, 0x568D, 0x879E, 0x568E, 0xBABF, 0x568F, 0xCCE7, 0x5690, 0x879F, 0x5691, 0x87A0, 0x5692, 0x87A1, + 0x5693, 0xE0EA, 0x5694, 0x87A2, 0x5695, 0x87A3, 0x5696, 0x87A4, 0x5697, 0x87A5, 0x5698, 0x87A6, 0x5699, 0x87A7, 0x569A, 0x87A8, + 0x569B, 0x87A9, 0x569C, 0x87AA, 0x569D, 0x87AB, 0x569E, 0x87AC, 0x569F, 0x87AD, 0x56A0, 0x87AE, 0x56A1, 0x87AF, 0x56A2, 0x87B0, + 0x56A3, 0xCFF9, 0x56A4, 0x87B1, 0x56A5, 0x87B2, 0x56A6, 0x87B3, 0x56A7, 0x87B4, 0x56A8, 0x87B5, 0x56A9, 0x87B6, 0x56AA, 0x87B7, + 0x56AB, 0x87B8, 0x56AC, 0x87B9, 0x56AD, 0x87BA, 0x56AE, 0x87BB, 0x56AF, 0xE0EB, 0x56B0, 0x87BC, 0x56B1, 0x87BD, 0x56B2, 0x87BE, + 0x56B3, 0x87BF, 0x56B4, 0x87C0, 0x56B5, 0x87C1, 0x56B6, 0x87C2, 0x56B7, 0xC8C2, 0x56B8, 0x87C3, 0x56B9, 0x87C4, 0x56BA, 0x87C5, + 0x56BB, 0x87C6, 0x56BC, 0xBDC0, 0x56BD, 0x87C7, 0x56BE, 0x87C8, 0x56BF, 0x87C9, 0x56C0, 0x87CA, 0x56C1, 0x87CB, 0x56C2, 0x87CC, + 0x56C3, 0x87CD, 0x56C4, 0x87CE, 0x56C5, 0x87CF, 0x56C6, 0x87D0, 0x56C7, 0x87D1, 0x56C8, 0x87D2, 0x56C9, 0x87D3, 0x56CA, 0xC4D2, + 0x56CB, 0x87D4, 0x56CC, 0x87D5, 0x56CD, 0x87D6, 0x56CE, 0x87D7, 0x56CF, 0x87D8, 0x56D0, 0x87D9, 0x56D1, 0x87DA, 0x56D2, 0x87DB, + 0x56D3, 0x87DC, 0x56D4, 0xE0EC, 0x56D5, 0x87DD, 0x56D6, 0x87DE, 0x56D7, 0xE0ED, 0x56D8, 0x87DF, 0x56D9, 0x87E0, 0x56DA, 0xC7F4, + 0x56DB, 0xCBC4, 0x56DC, 0x87E1, 0x56DD, 0xE0EE, 0x56DE, 0xBBD8, 0x56DF, 0xD8B6, 0x56E0, 0xD2F2, 0x56E1, 0xE0EF, 0x56E2, 0xCDC5, + 0x56E3, 0x87E2, 0x56E4, 0xB6DA, 0x56E5, 0x87E3, 0x56E6, 0x87E4, 0x56E7, 0x87E5, 0x56E8, 0x87E6, 0x56E9, 0x87E7, 0x56EA, 0x87E8, + 0x56EB, 0xE0F1, 0x56EC, 0x87E9, 0x56ED, 0xD4B0, 0x56EE, 0x87EA, 0x56EF, 0x87EB, 0x56F0, 0xC0A7, 0x56F1, 0xB4D1, 0x56F2, 0x87EC, + 0x56F3, 0x87ED, 0x56F4, 0xCEA7, 0x56F5, 0xE0F0, 0x56F6, 0x87EE, 0x56F7, 0x87EF, 0x56F8, 0x87F0, 0x56F9, 0xE0F2, 0x56FA, 0xB9CC, + 0x56FB, 0x87F1, 0x56FC, 0x87F2, 0x56FD, 0xB9FA, 0x56FE, 0xCDBC, 0x56FF, 0xE0F3, 0x5700, 0x87F3, 0x5701, 0x87F4, 0x5702, 0x87F5, + 0x5703, 0xC6D4, 0x5704, 0xE0F4, 0x5705, 0x87F6, 0x5706, 0xD4B2, 0x5707, 0x87F7, 0x5708, 0xC8A6, 0x5709, 0xE0F6, 0x570A, 0xE0F5, + 0x570B, 0x87F8, 0x570C, 0x87F9, 0x570D, 0x87FA, 0x570E, 0x87FB, 0x570F, 0x87FC, 0x5710, 0x87FD, 0x5711, 0x87FE, 0x5712, 0x8840, + 0x5713, 0x8841, 0x5714, 0x8842, 0x5715, 0x8843, 0x5716, 0x8844, 0x5717, 0x8845, 0x5718, 0x8846, 0x5719, 0x8847, 0x571A, 0x8848, + 0x571B, 0x8849, 0x571C, 0xE0F7, 0x571D, 0x884A, 0x571E, 0x884B, 0x571F, 0xCDC1, 0x5720, 0x884C, 0x5721, 0x884D, 0x5722, 0x884E, + 0x5723, 0xCAA5, 0x5724, 0x884F, 0x5725, 0x8850, 0x5726, 0x8851, 0x5727, 0x8852, 0x5728, 0xD4DA, 0x5729, 0xDBD7, 0x572A, 0xDBD9, + 0x572B, 0x8853, 0x572C, 0xDBD8, 0x572D, 0xB9E7, 0x572E, 0xDBDC, 0x572F, 0xDBDD, 0x5730, 0xB5D8, 0x5731, 0x8854, 0x5732, 0x8855, + 0x5733, 0xDBDA, 0x5734, 0x8856, 0x5735, 0x8857, 0x5736, 0x8858, 0x5737, 0x8859, 0x5738, 0x885A, 0x5739, 0xDBDB, 0x573A, 0xB3A1, + 0x573B, 0xDBDF, 0x573C, 0x885B, 0x573D, 0x885C, 0x573E, 0xBBF8, 0x573F, 0x885D, 0x5740, 0xD6B7, 0x5741, 0x885E, 0x5742, 0xDBE0, + 0x5743, 0x885F, 0x5744, 0x8860, 0x5745, 0x8861, 0x5746, 0x8862, 0x5747, 0xBEF9, 0x5748, 0x8863, 0x5749, 0x8864, 0x574A, 0xB7BB, + 0x574B, 0x8865, 0x574C, 0xDBD0, 0x574D, 0xCCAE, 0x574E, 0xBFB2, 0x574F, 0xBBB5, 0x5750, 0xD7F8, 0x5751, 0xBFD3, 0x5752, 0x8866, + 0x5753, 0x8867, 0x5754, 0x8868, 0x5755, 0x8869, 0x5756, 0x886A, 0x5757, 0xBFE9, 0x5758, 0x886B, 0x5759, 0x886C, 0x575A, 0xBCE1, + 0x575B, 0xCCB3, 0x575C, 0xDBDE, 0x575D, 0xB0D3, 0x575E, 0xCEEB, 0x575F, 0xB7D8, 0x5760, 0xD7B9, 0x5761, 0xC6C2, 0x5762, 0x886D, + 0x5763, 0x886E, 0x5764, 0xC0A4, 0x5765, 0x886F, 0x5766, 0xCCB9, 0x5767, 0x8870, 0x5768, 0xDBE7, 0x5769, 0xDBE1, 0x576A, 0xC6BA, + 0x576B, 0xDBE3, 0x576C, 0x8871, 0x576D, 0xDBE8, 0x576E, 0x8872, 0x576F, 0xC5F7, 0x5770, 0x8873, 0x5771, 0x8874, 0x5772, 0x8875, + 0x5773, 0xDBEA, 0x5774, 0x8876, 0x5775, 0x8877, 0x5776, 0xDBE9, 0x5777, 0xBFC0, 0x5778, 0x8878, 0x5779, 0x8879, 0x577A, 0x887A, + 0x577B, 0xDBE6, 0x577C, 0xDBE5, 0x577D, 0x887B, 0x577E, 0x887C, 0x577F, 0x887D, 0x5780, 0x887E, 0x5781, 0x8880, 0x5782, 0xB4B9, + 0x5783, 0xC0AC, 0x5784, 0xC2A2, 0x5785, 0xDBE2, 0x5786, 0xDBE4, 0x5787, 0x8881, 0x5788, 0x8882, 0x5789, 0x8883, 0x578A, 0x8884, + 0x578B, 0xD0CD, 0x578C, 0xDBED, 0x578D, 0x8885, 0x578E, 0x8886, 0x578F, 0x8887, 0x5790, 0x8888, 0x5791, 0x8889, 0x5792, 0xC0DD, + 0x5793, 0xDBF2, 0x5794, 0x888A, 0x5795, 0x888B, 0x5796, 0x888C, 0x5797, 0x888D, 0x5798, 0x888E, 0x5799, 0x888F, 0x579A, 0x8890, + 0x579B, 0xB6E2, 0x579C, 0x8891, 0x579D, 0x8892, 0x579E, 0x8893, 0x579F, 0x8894, 0x57A0, 0xDBF3, 0x57A1, 0xDBD2, 0x57A2, 0xB9B8, + 0x57A3, 0xD4AB, 0x57A4, 0xDBEC, 0x57A5, 0x8895, 0x57A6, 0xBFD1, 0x57A7, 0xDBF0, 0x57A8, 0x8896, 0x57A9, 0xDBD1, 0x57AA, 0x8897, + 0x57AB, 0xB5E6, 0x57AC, 0x8898, 0x57AD, 0xDBEB, 0x57AE, 0xBFE5, 0x57AF, 0x8899, 0x57B0, 0x889A, 0x57B1, 0x889B, 0x57B2, 0xDBEE, + 0x57B3, 0x889C, 0x57B4, 0xDBF1, 0x57B5, 0x889D, 0x57B6, 0x889E, 0x57B7, 0x889F, 0x57B8, 0xDBF9, 0x57B9, 0x88A0, 0x57BA, 0x88A1, + 0x57BB, 0x88A2, 0x57BC, 0x88A3, 0x57BD, 0x88A4, 0x57BE, 0x88A5, 0x57BF, 0x88A6, 0x57C0, 0x88A7, 0x57C1, 0x88A8, 0x57C2, 0xB9A1, + 0x57C3, 0xB0A3, 0x57C4, 0x88A9, 0x57C5, 0x88AA, 0x57C6, 0x88AB, 0x57C7, 0x88AC, 0x57C8, 0x88AD, 0x57C9, 0x88AE, 0x57CA, 0x88AF, + 0x57CB, 0xC2F1, 0x57CC, 0x88B0, 0x57CD, 0x88B1, 0x57CE, 0xB3C7, 0x57CF, 0xDBEF, 0x57D0, 0x88B2, 0x57D1, 0x88B3, 0x57D2, 0xDBF8, + 0x57D3, 0x88B4, 0x57D4, 0xC6D2, 0x57D5, 0xDBF4, 0x57D6, 0x88B5, 0x57D7, 0x88B6, 0x57D8, 0xDBF5, 0x57D9, 0xDBF7, 0x57DA, 0xDBF6, + 0x57DB, 0x88B7, 0x57DC, 0x88B8, 0x57DD, 0xDBFE, 0x57DE, 0x88B9, 0x57DF, 0xD3F2, 0x57E0, 0xB2BA, 0x57E1, 0x88BA, 0x57E2, 0x88BB, + 0x57E3, 0x88BC, 0x57E4, 0xDBFD, 0x57E5, 0x88BD, 0x57E6, 0x88BE, 0x57E7, 0x88BF, 0x57E8, 0x88C0, 0x57E9, 0x88C1, 0x57EA, 0x88C2, + 0x57EB, 0x88C3, 0x57EC, 0x88C4, 0x57ED, 0xDCA4, 0x57EE, 0x88C5, 0x57EF, 0xDBFB, 0x57F0, 0x88C6, 0x57F1, 0x88C7, 0x57F2, 0x88C8, + 0x57F3, 0x88C9, 0x57F4, 0xDBFA, 0x57F5, 0x88CA, 0x57F6, 0x88CB, 0x57F7, 0x88CC, 0x57F8, 0xDBFC, 0x57F9, 0xC5E0, 0x57FA, 0xBBF9, + 0x57FB, 0x88CD, 0x57FC, 0x88CE, 0x57FD, 0xDCA3, 0x57FE, 0x88CF, 0x57FF, 0x88D0, 0x5800, 0xDCA5, 0x5801, 0x88D1, 0x5802, 0xCCC3, + 0x5803, 0x88D2, 0x5804, 0x88D3, 0x5805, 0x88D4, 0x5806, 0xB6D1, 0x5807, 0xDDC0, 0x5808, 0x88D5, 0x5809, 0x88D6, 0x580A, 0x88D7, + 0x580B, 0xDCA1, 0x580C, 0x88D8, 0x580D, 0xDCA2, 0x580E, 0x88D9, 0x580F, 0x88DA, 0x5810, 0x88DB, 0x5811, 0xC7B5, 0x5812, 0x88DC, + 0x5813, 0x88DD, 0x5814, 0x88DE, 0x5815, 0xB6E9, 0x5816, 0x88DF, 0x5817, 0x88E0, 0x5818, 0x88E1, 0x5819, 0xDCA7, 0x581A, 0x88E2, + 0x581B, 0x88E3, 0x581C, 0x88E4, 0x581D, 0x88E5, 0x581E, 0xDCA6, 0x581F, 0x88E6, 0x5820, 0xDCA9, 0x5821, 0xB1A4, 0x5822, 0x88E7, + 0x5823, 0x88E8, 0x5824, 0xB5CC, 0x5825, 0x88E9, 0x5826, 0x88EA, 0x5827, 0x88EB, 0x5828, 0x88EC, 0x5829, 0x88ED, 0x582A, 0xBFB0, + 0x582B, 0x88EE, 0x582C, 0x88EF, 0x582D, 0x88F0, 0x582E, 0x88F1, 0x582F, 0x88F2, 0x5830, 0xD1DF, 0x5831, 0x88F3, 0x5832, 0x88F4, + 0x5833, 0x88F5, 0x5834, 0x88F6, 0x5835, 0xB6C2, 0x5836, 0x88F7, 0x5837, 0x88F8, 0x5838, 0x88F9, 0x5839, 0x88FA, 0x583A, 0x88FB, + 0x583B, 0x88FC, 0x583C, 0x88FD, 0x583D, 0x88FE, 0x583E, 0x8940, 0x583F, 0x8941, 0x5840, 0x8942, 0x5841, 0x8943, 0x5842, 0x8944, + 0x5843, 0x8945, 0x5844, 0xDCA8, 0x5845, 0x8946, 0x5846, 0x8947, 0x5847, 0x8948, 0x5848, 0x8949, 0x5849, 0x894A, 0x584A, 0x894B, + 0x584B, 0x894C, 0x584C, 0xCBFA, 0x584D, 0xEBF3, 0x584E, 0x894D, 0x584F, 0x894E, 0x5850, 0x894F, 0x5851, 0xCBDC, 0x5852, 0x8950, + 0x5853, 0x8951, 0x5854, 0xCBFE, 0x5855, 0x8952, 0x5856, 0x8953, 0x5857, 0x8954, 0x5858, 0xCCC1, 0x5859, 0x8955, 0x585A, 0x8956, + 0x585B, 0x8957, 0x585C, 0x8958, 0x585D, 0x8959, 0x585E, 0xC8FB, 0x585F, 0x895A, 0x5860, 0x895B, 0x5861, 0x895C, 0x5862, 0x895D, + 0x5863, 0x895E, 0x5864, 0x895F, 0x5865, 0xDCAA, 0x5866, 0x8960, 0x5867, 0x8961, 0x5868, 0x8962, 0x5869, 0x8963, 0x586A, 0x8964, + 0x586B, 0xCCEE, 0x586C, 0xDCAB, 0x586D, 0x8965, 0x586E, 0x8966, 0x586F, 0x8967, 0x5870, 0x8968, 0x5871, 0x8969, 0x5872, 0x896A, + 0x5873, 0x896B, 0x5874, 0x896C, 0x5875, 0x896D, 0x5876, 0x896E, 0x5877, 0x896F, 0x5878, 0x8970, 0x5879, 0x8971, 0x587A, 0x8972, + 0x587B, 0x8973, 0x587C, 0x8974, 0x587D, 0x8975, 0x587E, 0xDBD3, 0x587F, 0x8976, 0x5880, 0xDCAF, 0x5881, 0xDCAC, 0x5882, 0x8977, + 0x5883, 0xBEB3, 0x5884, 0x8978, 0x5885, 0xCAFB, 0x5886, 0x8979, 0x5887, 0x897A, 0x5888, 0x897B, 0x5889, 0xDCAD, 0x588A, 0x897C, + 0x588B, 0x897D, 0x588C, 0x897E, 0x588D, 0x8980, 0x588E, 0x8981, 0x588F, 0x8982, 0x5890, 0x8983, 0x5891, 0x8984, 0x5892, 0xC9CA, + 0x5893, 0xC4B9, 0x5894, 0x8985, 0x5895, 0x8986, 0x5896, 0x8987, 0x5897, 0x8988, 0x5898, 0x8989, 0x5899, 0xC7BD, 0x589A, 0xDCAE, + 0x589B, 0x898A, 0x589C, 0x898B, 0x589D, 0x898C, 0x589E, 0xD4F6, 0x589F, 0xD0E6, 0x58A0, 0x898D, 0x58A1, 0x898E, 0x58A2, 0x898F, + 0x58A3, 0x8990, 0x58A4, 0x8991, 0x58A5, 0x8992, 0x58A6, 0x8993, 0x58A7, 0x8994, 0x58A8, 0xC4AB, 0x58A9, 0xB6D5, 0x58AA, 0x8995, + 0x58AB, 0x8996, 0x58AC, 0x8997, 0x58AD, 0x8998, 0x58AE, 0x8999, 0x58AF, 0x899A, 0x58B0, 0x899B, 0x58B1, 0x899C, 0x58B2, 0x899D, + 0x58B3, 0x899E, 0x58B4, 0x899F, 0x58B5, 0x89A0, 0x58B6, 0x89A1, 0x58B7, 0x89A2, 0x58B8, 0x89A3, 0x58B9, 0x89A4, 0x58BA, 0x89A5, + 0x58BB, 0x89A6, 0x58BC, 0xDBD4, 0x58BD, 0x89A7, 0x58BE, 0x89A8, 0x58BF, 0x89A9, 0x58C0, 0x89AA, 0x58C1, 0xB1DA, 0x58C2, 0x89AB, + 0x58C3, 0x89AC, 0x58C4, 0x89AD, 0x58C5, 0xDBD5, 0x58C6, 0x89AE, 0x58C7, 0x89AF, 0x58C8, 0x89B0, 0x58C9, 0x89B1, 0x58CA, 0x89B2, + 0x58CB, 0x89B3, 0x58CC, 0x89B4, 0x58CD, 0x89B5, 0x58CE, 0x89B6, 0x58CF, 0x89B7, 0x58D0, 0x89B8, 0x58D1, 0xDBD6, 0x58D2, 0x89B9, + 0x58D3, 0x89BA, 0x58D4, 0x89BB, 0x58D5, 0xBABE, 0x58D6, 0x89BC, 0x58D7, 0x89BD, 0x58D8, 0x89BE, 0x58D9, 0x89BF, 0x58DA, 0x89C0, + 0x58DB, 0x89C1, 0x58DC, 0x89C2, 0x58DD, 0x89C3, 0x58DE, 0x89C4, 0x58DF, 0x89C5, 0x58E0, 0x89C6, 0x58E1, 0x89C7, 0x58E2, 0x89C8, + 0x58E3, 0x89C9, 0x58E4, 0xC8C0, 0x58E5, 0x89CA, 0x58E6, 0x89CB, 0x58E7, 0x89CC, 0x58E8, 0x89CD, 0x58E9, 0x89CE, 0x58EA, 0x89CF, + 0x58EB, 0xCABF, 0x58EC, 0xC8C9, 0x58ED, 0x89D0, 0x58EE, 0xD7B3, 0x58EF, 0x89D1, 0x58F0, 0xC9F9, 0x58F1, 0x89D2, 0x58F2, 0x89D3, + 0x58F3, 0xBFC7, 0x58F4, 0x89D4, 0x58F5, 0x89D5, 0x58F6, 0xBAF8, 0x58F7, 0x89D6, 0x58F8, 0x89D7, 0x58F9, 0xD2BC, 0x58FA, 0x89D8, + 0x58FB, 0x89D9, 0x58FC, 0x89DA, 0x58FD, 0x89DB, 0x58FE, 0x89DC, 0x58FF, 0x89DD, 0x5900, 0x89DE, 0x5901, 0x89DF, 0x5902, 0xE2BA, + 0x5903, 0x89E0, 0x5904, 0xB4A6, 0x5905, 0x89E1, 0x5906, 0x89E2, 0x5907, 0xB1B8, 0x5908, 0x89E3, 0x5909, 0x89E4, 0x590A, 0x89E5, + 0x590B, 0x89E6, 0x590C, 0x89E7, 0x590D, 0xB8B4, 0x590E, 0x89E8, 0x590F, 0xCFC4, 0x5910, 0x89E9, 0x5911, 0x89EA, 0x5912, 0x89EB, + 0x5913, 0x89EC, 0x5914, 0xD9E7, 0x5915, 0xCFA6, 0x5916, 0xCDE2, 0x5917, 0x89ED, 0x5918, 0x89EE, 0x5919, 0xD9ED, 0x591A, 0xB6E0, + 0x591B, 0x89EF, 0x591C, 0xD2B9, 0x591D, 0x89F0, 0x591E, 0x89F1, 0x591F, 0xB9BB, 0x5920, 0x89F2, 0x5921, 0x89F3, 0x5922, 0x89F4, + 0x5923, 0x89F5, 0x5924, 0xE2B9, 0x5925, 0xE2B7, 0x5926, 0x89F6, 0x5927, 0xB4F3, 0x5928, 0x89F7, 0x5929, 0xCCEC, 0x592A, 0xCCAB, + 0x592B, 0xB7F2, 0x592C, 0x89F8, 0x592D, 0xD8B2, 0x592E, 0xD1EB, 0x592F, 0xBABB, 0x5930, 0x89F9, 0x5931, 0xCAA7, 0x5932, 0x89FA, + 0x5933, 0x89FB, 0x5934, 0xCDB7, 0x5935, 0x89FC, 0x5936, 0x89FD, 0x5937, 0xD2C4, 0x5938, 0xBFE4, 0x5939, 0xBCD0, 0x593A, 0xB6E1, + 0x593B, 0x89FE, 0x593C, 0xDEC5, 0x593D, 0x8A40, 0x593E, 0x8A41, 0x593F, 0x8A42, 0x5940, 0x8A43, 0x5941, 0xDEC6, 0x5942, 0xDBBC, + 0x5943, 0x8A44, 0x5944, 0xD1D9, 0x5945, 0x8A45, 0x5946, 0x8A46, 0x5947, 0xC6E6, 0x5948, 0xC4CE, 0x5949, 0xB7EE, 0x594A, 0x8A47, + 0x594B, 0xB7DC, 0x594C, 0x8A48, 0x594D, 0x8A49, 0x594E, 0xBFFC, 0x594F, 0xD7E0, 0x5950, 0x8A4A, 0x5951, 0xC6F5, 0x5952, 0x8A4B, + 0x5953, 0x8A4C, 0x5954, 0xB1BC, 0x5955, 0xDEC8, 0x5956, 0xBDB1, 0x5957, 0xCCD7, 0x5958, 0xDECA, 0x5959, 0x8A4D, 0x595A, 0xDEC9, + 0x595B, 0x8A4E, 0x595C, 0x8A4F, 0x595D, 0x8A50, 0x595E, 0x8A51, 0x595F, 0x8A52, 0x5960, 0xB5EC, 0x5961, 0x8A53, 0x5962, 0xC9DD, + 0x5963, 0x8A54, 0x5964, 0x8A55, 0x5965, 0xB0C2, 0x5966, 0x8A56, 0x5967, 0x8A57, 0x5968, 0x8A58, 0x5969, 0x8A59, 0x596A, 0x8A5A, + 0x596B, 0x8A5B, 0x596C, 0x8A5C, 0x596D, 0x8A5D, 0x596E, 0x8A5E, 0x596F, 0x8A5F, 0x5970, 0x8A60, 0x5971, 0x8A61, 0x5972, 0x8A62, + 0x5973, 0xC5AE, 0x5974, 0xC5AB, 0x5975, 0x8A63, 0x5976, 0xC4CC, 0x5977, 0x8A64, 0x5978, 0xBCE9, 0x5979, 0xCBFD, 0x597A, 0x8A65, + 0x597B, 0x8A66, 0x597C, 0x8A67, 0x597D, 0xBAC3, 0x597E, 0x8A68, 0x597F, 0x8A69, 0x5980, 0x8A6A, 0x5981, 0xE5F9, 0x5982, 0xC8E7, + 0x5983, 0xE5FA, 0x5984, 0xCDFD, 0x5985, 0x8A6B, 0x5986, 0xD7B1, 0x5987, 0xB8BE, 0x5988, 0xC2E8, 0x5989, 0x8A6C, 0x598A, 0xC8D1, + 0x598B, 0x8A6D, 0x598C, 0x8A6E, 0x598D, 0xE5FB, 0x598E, 0x8A6F, 0x598F, 0x8A70, 0x5990, 0x8A71, 0x5991, 0x8A72, 0x5992, 0xB6CA, + 0x5993, 0xBCCB, 0x5994, 0x8A73, 0x5995, 0x8A74, 0x5996, 0xD1FD, 0x5997, 0xE6A1, 0x5998, 0x8A75, 0x5999, 0xC3EE, 0x599A, 0x8A76, + 0x599B, 0x8A77, 0x599C, 0x8A78, 0x599D, 0x8A79, 0x599E, 0xE6A4, 0x599F, 0x8A7A, 0x59A0, 0x8A7B, 0x59A1, 0x8A7C, 0x59A2, 0x8A7D, + 0x59A3, 0xE5FE, 0x59A4, 0xE6A5, 0x59A5, 0xCDD7, 0x59A6, 0x8A7E, 0x59A7, 0x8A80, 0x59A8, 0xB7C1, 0x59A9, 0xE5FC, 0x59AA, 0xE5FD, + 0x59AB, 0xE6A3, 0x59AC, 0x8A81, 0x59AD, 0x8A82, 0x59AE, 0xC4DD, 0x59AF, 0xE6A8, 0x59B0, 0x8A83, 0x59B1, 0x8A84, 0x59B2, 0xE6A7, + 0x59B3, 0x8A85, 0x59B4, 0x8A86, 0x59B5, 0x8A87, 0x59B6, 0x8A88, 0x59B7, 0x8A89, 0x59B8, 0x8A8A, 0x59B9, 0xC3C3, 0x59BA, 0x8A8B, + 0x59BB, 0xC6DE, 0x59BC, 0x8A8C, 0x59BD, 0x8A8D, 0x59BE, 0xE6AA, 0x59BF, 0x8A8E, 0x59C0, 0x8A8F, 0x59C1, 0x8A90, 0x59C2, 0x8A91, + 0x59C3, 0x8A92, 0x59C4, 0x8A93, 0x59C5, 0x8A94, 0x59C6, 0xC4B7, 0x59C7, 0x8A95, 0x59C8, 0x8A96, 0x59C9, 0x8A97, 0x59CA, 0xE6A2, + 0x59CB, 0xCABC, 0x59CC, 0x8A98, 0x59CD, 0x8A99, 0x59CE, 0x8A9A, 0x59CF, 0x8A9B, 0x59D0, 0xBDE3, 0x59D1, 0xB9C3, 0x59D2, 0xE6A6, + 0x59D3, 0xD0D5, 0x59D4, 0xCEAF, 0x59D5, 0x8A9C, 0x59D6, 0x8A9D, 0x59D7, 0xE6A9, 0x59D8, 0xE6B0, 0x59D9, 0x8A9E, 0x59DA, 0xD2A6, + 0x59DB, 0x8A9F, 0x59DC, 0xBDAA, 0x59DD, 0xE6AD, 0x59DE, 0x8AA0, 0x59DF, 0x8AA1, 0x59E0, 0x8AA2, 0x59E1, 0x8AA3, 0x59E2, 0x8AA4, + 0x59E3, 0xE6AF, 0x59E4, 0x8AA5, 0x59E5, 0xC0D1, 0x59E6, 0x8AA6, 0x59E7, 0x8AA7, 0x59E8, 0xD2CC, 0x59E9, 0x8AA8, 0x59EA, 0x8AA9, + 0x59EB, 0x8AAA, 0x59EC, 0xBCA7, 0x59ED, 0x8AAB, 0x59EE, 0x8AAC, 0x59EF, 0x8AAD, 0x59F0, 0x8AAE, 0x59F1, 0x8AAF, 0x59F2, 0x8AB0, + 0x59F3, 0x8AB1, 0x59F4, 0x8AB2, 0x59F5, 0x8AB3, 0x59F6, 0x8AB4, 0x59F7, 0x8AB5, 0x59F8, 0x8AB6, 0x59F9, 0xE6B1, 0x59FA, 0x8AB7, + 0x59FB, 0xD2F6, 0x59FC, 0x8AB8, 0x59FD, 0x8AB9, 0x59FE, 0x8ABA, 0x59FF, 0xD7CB, 0x5A00, 0x8ABB, 0x5A01, 0xCDFE, 0x5A02, 0x8ABC, + 0x5A03, 0xCDDE, 0x5A04, 0xC2A6, 0x5A05, 0xE6AB, 0x5A06, 0xE6AC, 0x5A07, 0xBDBF, 0x5A08, 0xE6AE, 0x5A09, 0xE6B3, 0x5A0A, 0x8ABD, + 0x5A0B, 0x8ABE, 0x5A0C, 0xE6B2, 0x5A0D, 0x8ABF, 0x5A0E, 0x8AC0, 0x5A0F, 0x8AC1, 0x5A10, 0x8AC2, 0x5A11, 0xE6B6, 0x5A12, 0x8AC3, + 0x5A13, 0xE6B8, 0x5A14, 0x8AC4, 0x5A15, 0x8AC5, 0x5A16, 0x8AC6, 0x5A17, 0x8AC7, 0x5A18, 0xC4EF, 0x5A19, 0x8AC8, 0x5A1A, 0x8AC9, + 0x5A1B, 0x8ACA, 0x5A1C, 0xC4C8, 0x5A1D, 0x8ACB, 0x5A1E, 0x8ACC, 0x5A1F, 0xBEEA, 0x5A20, 0xC9EF, 0x5A21, 0x8ACD, 0x5A22, 0x8ACE, + 0x5A23, 0xE6B7, 0x5A24, 0x8ACF, 0x5A25, 0xB6F0, 0x5A26, 0x8AD0, 0x5A27, 0x8AD1, 0x5A28, 0x8AD2, 0x5A29, 0xC3E4, 0x5A2A, 0x8AD3, + 0x5A2B, 0x8AD4, 0x5A2C, 0x8AD5, 0x5A2D, 0x8AD6, 0x5A2E, 0x8AD7, 0x5A2F, 0x8AD8, 0x5A30, 0x8AD9, 0x5A31, 0xD3E9, 0x5A32, 0xE6B4, + 0x5A33, 0x8ADA, 0x5A34, 0xE6B5, 0x5A35, 0x8ADB, 0x5A36, 0xC8A2, 0x5A37, 0x8ADC, 0x5A38, 0x8ADD, 0x5A39, 0x8ADE, 0x5A3A, 0x8ADF, + 0x5A3B, 0x8AE0, 0x5A3C, 0xE6BD, 0x5A3D, 0x8AE1, 0x5A3E, 0x8AE2, 0x5A3F, 0x8AE3, 0x5A40, 0xE6B9, 0x5A41, 0x8AE4, 0x5A42, 0x8AE5, + 0x5A43, 0x8AE6, 0x5A44, 0x8AE7, 0x5A45, 0x8AE8, 0x5A46, 0xC6C5, 0x5A47, 0x8AE9, 0x5A48, 0x8AEA, 0x5A49, 0xCDF1, 0x5A4A, 0xE6BB, + 0x5A4B, 0x8AEB, 0x5A4C, 0x8AEC, 0x5A4D, 0x8AED, 0x5A4E, 0x8AEE, 0x5A4F, 0x8AEF, 0x5A50, 0x8AF0, 0x5A51, 0x8AF1, 0x5A52, 0x8AF2, + 0x5A53, 0x8AF3, 0x5A54, 0x8AF4, 0x5A55, 0xE6BC, 0x5A56, 0x8AF5, 0x5A57, 0x8AF6, 0x5A58, 0x8AF7, 0x5A59, 0x8AF8, 0x5A5A, 0xBBE9, + 0x5A5B, 0x8AF9, 0x5A5C, 0x8AFA, 0x5A5D, 0x8AFB, 0x5A5E, 0x8AFC, 0x5A5F, 0x8AFD, 0x5A60, 0x8AFE, 0x5A61, 0x8B40, 0x5A62, 0xE6BE, + 0x5A63, 0x8B41, 0x5A64, 0x8B42, 0x5A65, 0x8B43, 0x5A66, 0x8B44, 0x5A67, 0xE6BA, 0x5A68, 0x8B45, 0x5A69, 0x8B46, 0x5A6A, 0xC0B7, + 0x5A6B, 0x8B47, 0x5A6C, 0x8B48, 0x5A6D, 0x8B49, 0x5A6E, 0x8B4A, 0x5A6F, 0x8B4B, 0x5A70, 0x8B4C, 0x5A71, 0x8B4D, 0x5A72, 0x8B4E, + 0x5A73, 0x8B4F, 0x5A74, 0xD3A4, 0x5A75, 0xE6BF, 0x5A76, 0xC9F4, 0x5A77, 0xE6C3, 0x5A78, 0x8B50, 0x5A79, 0x8B51, 0x5A7A, 0xE6C4, + 0x5A7B, 0x8B52, 0x5A7C, 0x8B53, 0x5A7D, 0x8B54, 0x5A7E, 0x8B55, 0x5A7F, 0xD0F6, 0x5A80, 0x8B56, 0x5A81, 0x8B57, 0x5A82, 0x8B58, + 0x5A83, 0x8B59, 0x5A84, 0x8B5A, 0x5A85, 0x8B5B, 0x5A86, 0x8B5C, 0x5A87, 0x8B5D, 0x5A88, 0x8B5E, 0x5A89, 0x8B5F, 0x5A8A, 0x8B60, + 0x5A8B, 0x8B61, 0x5A8C, 0x8B62, 0x5A8D, 0x8B63, 0x5A8E, 0x8B64, 0x5A8F, 0x8B65, 0x5A90, 0x8B66, 0x5A91, 0x8B67, 0x5A92, 0xC3BD, + 0x5A93, 0x8B68, 0x5A94, 0x8B69, 0x5A95, 0x8B6A, 0x5A96, 0x8B6B, 0x5A97, 0x8B6C, 0x5A98, 0x8B6D, 0x5A99, 0x8B6E, 0x5A9A, 0xC3C4, + 0x5A9B, 0xE6C2, 0x5A9C, 0x8B6F, 0x5A9D, 0x8B70, 0x5A9E, 0x8B71, 0x5A9F, 0x8B72, 0x5AA0, 0x8B73, 0x5AA1, 0x8B74, 0x5AA2, 0x8B75, + 0x5AA3, 0x8B76, 0x5AA4, 0x8B77, 0x5AA5, 0x8B78, 0x5AA6, 0x8B79, 0x5AA7, 0x8B7A, 0x5AA8, 0x8B7B, 0x5AA9, 0x8B7C, 0x5AAA, 0xE6C1, + 0x5AAB, 0x8B7D, 0x5AAC, 0x8B7E, 0x5AAD, 0x8B80, 0x5AAE, 0x8B81, 0x5AAF, 0x8B82, 0x5AB0, 0x8B83, 0x5AB1, 0x8B84, 0x5AB2, 0xE6C7, + 0x5AB3, 0xCFB1, 0x5AB4, 0x8B85, 0x5AB5, 0xEBF4, 0x5AB6, 0x8B86, 0x5AB7, 0x8B87, 0x5AB8, 0xE6CA, 0x5AB9, 0x8B88, 0x5ABA, 0x8B89, + 0x5ABB, 0x8B8A, 0x5ABC, 0x8B8B, 0x5ABD, 0x8B8C, 0x5ABE, 0xE6C5, 0x5ABF, 0x8B8D, 0x5AC0, 0x8B8E, 0x5AC1, 0xBCDE, 0x5AC2, 0xC9A9, + 0x5AC3, 0x8B8F, 0x5AC4, 0x8B90, 0x5AC5, 0x8B91, 0x5AC6, 0x8B92, 0x5AC7, 0x8B93, 0x5AC8, 0x8B94, 0x5AC9, 0xBCB5, 0x5ACA, 0x8B95, + 0x5ACB, 0x8B96, 0x5ACC, 0xCFD3, 0x5ACD, 0x8B97, 0x5ACE, 0x8B98, 0x5ACF, 0x8B99, 0x5AD0, 0x8B9A, 0x5AD1, 0x8B9B, 0x5AD2, 0xE6C8, + 0x5AD3, 0x8B9C, 0x5AD4, 0xE6C9, 0x5AD5, 0x8B9D, 0x5AD6, 0xE6CE, 0x5AD7, 0x8B9E, 0x5AD8, 0xE6D0, 0x5AD9, 0x8B9F, 0x5ADA, 0x8BA0, + 0x5ADB, 0x8BA1, 0x5ADC, 0xE6D1, 0x5ADD, 0x8BA2, 0x5ADE, 0x8BA3, 0x5ADF, 0x8BA4, 0x5AE0, 0xE6CB, 0x5AE1, 0xB5D5, 0x5AE2, 0x8BA5, + 0x5AE3, 0xE6CC, 0x5AE4, 0x8BA6, 0x5AE5, 0x8BA7, 0x5AE6, 0xE6CF, 0x5AE7, 0x8BA8, 0x5AE8, 0x8BA9, 0x5AE9, 0xC4DB, 0x5AEA, 0x8BAA, + 0x5AEB, 0xE6C6, 0x5AEC, 0x8BAB, 0x5AED, 0x8BAC, 0x5AEE, 0x8BAD, 0x5AEF, 0x8BAE, 0x5AF0, 0x8BAF, 0x5AF1, 0xE6CD, 0x5AF2, 0x8BB0, + 0x5AF3, 0x8BB1, 0x5AF4, 0x8BB2, 0x5AF5, 0x8BB3, 0x5AF6, 0x8BB4, 0x5AF7, 0x8BB5, 0x5AF8, 0x8BB6, 0x5AF9, 0x8BB7, 0x5AFA, 0x8BB8, + 0x5AFB, 0x8BB9, 0x5AFC, 0x8BBA, 0x5AFD, 0x8BBB, 0x5AFE, 0x8BBC, 0x5AFF, 0x8BBD, 0x5B00, 0x8BBE, 0x5B01, 0x8BBF, 0x5B02, 0x8BC0, + 0x5B03, 0x8BC1, 0x5B04, 0x8BC2, 0x5B05, 0x8BC3, 0x5B06, 0x8BC4, 0x5B07, 0x8BC5, 0x5B08, 0x8BC6, 0x5B09, 0xE6D2, 0x5B0A, 0x8BC7, + 0x5B0B, 0x8BC8, 0x5B0C, 0x8BC9, 0x5B0D, 0x8BCA, 0x5B0E, 0x8BCB, 0x5B0F, 0x8BCC, 0x5B10, 0x8BCD, 0x5B11, 0x8BCE, 0x5B12, 0x8BCF, + 0x5B13, 0x8BD0, 0x5B14, 0x8BD1, 0x5B15, 0x8BD2, 0x5B16, 0xE6D4, 0x5B17, 0xE6D3, 0x5B18, 0x8BD3, 0x5B19, 0x8BD4, 0x5B1A, 0x8BD5, + 0x5B1B, 0x8BD6, 0x5B1C, 0x8BD7, 0x5B1D, 0x8BD8, 0x5B1E, 0x8BD9, 0x5B1F, 0x8BDA, 0x5B20, 0x8BDB, 0x5B21, 0x8BDC, 0x5B22, 0x8BDD, + 0x5B23, 0x8BDE, 0x5B24, 0x8BDF, 0x5B25, 0x8BE0, 0x5B26, 0x8BE1, 0x5B27, 0x8BE2, 0x5B28, 0x8BE3, 0x5B29, 0x8BE4, 0x5B2A, 0x8BE5, + 0x5B2B, 0x8BE6, 0x5B2C, 0x8BE7, 0x5B2D, 0x8BE8, 0x5B2E, 0x8BE9, 0x5B2F, 0x8BEA, 0x5B30, 0x8BEB, 0x5B31, 0x8BEC, 0x5B32, 0xE6D5, + 0x5B33, 0x8BED, 0x5B34, 0xD9F8, 0x5B35, 0x8BEE, 0x5B36, 0x8BEF, 0x5B37, 0xE6D6, 0x5B38, 0x8BF0, 0x5B39, 0x8BF1, 0x5B3A, 0x8BF2, + 0x5B3B, 0x8BF3, 0x5B3C, 0x8BF4, 0x5B3D, 0x8BF5, 0x5B3E, 0x8BF6, 0x5B3F, 0x8BF7, 0x5B40, 0xE6D7, 0x5B41, 0x8BF8, 0x5B42, 0x8BF9, + 0x5B43, 0x8BFA, 0x5B44, 0x8BFB, 0x5B45, 0x8BFC, 0x5B46, 0x8BFD, 0x5B47, 0x8BFE, 0x5B48, 0x8C40, 0x5B49, 0x8C41, 0x5B4A, 0x8C42, + 0x5B4B, 0x8C43, 0x5B4C, 0x8C44, 0x5B4D, 0x8C45, 0x5B4E, 0x8C46, 0x5B4F, 0x8C47, 0x5B50, 0xD7D3, 0x5B51, 0xE6DD, 0x5B52, 0x8C48, + 0x5B53, 0xE6DE, 0x5B54, 0xBFD7, 0x5B55, 0xD4D0, 0x5B56, 0x8C49, 0x5B57, 0xD7D6, 0x5B58, 0xB4E6, 0x5B59, 0xCBEF, 0x5B5A, 0xE6DA, + 0x5B5B, 0xD8C3, 0x5B5C, 0xD7CE, 0x5B5D, 0xD0A2, 0x5B5E, 0x8C4A, 0x5B5F, 0xC3CF, 0x5B60, 0x8C4B, 0x5B61, 0x8C4C, 0x5B62, 0xE6DF, + 0x5B63, 0xBCBE, 0x5B64, 0xB9C2, 0x5B65, 0xE6DB, 0x5B66, 0xD1A7, 0x5B67, 0x8C4D, 0x5B68, 0x8C4E, 0x5B69, 0xBAA2, 0x5B6A, 0xC2CF, + 0x5B6B, 0x8C4F, 0x5B6C, 0xD8AB, 0x5B6D, 0x8C50, 0x5B6E, 0x8C51, 0x5B6F, 0x8C52, 0x5B70, 0xCAEB, 0x5B71, 0xE5EE, 0x5B72, 0x8C53, + 0x5B73, 0xE6DC, 0x5B74, 0x8C54, 0x5B75, 0xB7F5, 0x5B76, 0x8C55, 0x5B77, 0x8C56, 0x5B78, 0x8C57, 0x5B79, 0x8C58, 0x5B7A, 0xC8E6, + 0x5B7B, 0x8C59, 0x5B7C, 0x8C5A, 0x5B7D, 0xC4F5, 0x5B7E, 0x8C5B, 0x5B7F, 0x8C5C, 0x5B80, 0xE5B2, 0x5B81, 0xC4FE, 0x5B82, 0x8C5D, + 0x5B83, 0xCBFC, 0x5B84, 0xE5B3, 0x5B85, 0xD5AC, 0x5B86, 0x8C5E, 0x5B87, 0xD3EE, 0x5B88, 0xCAD8, 0x5B89, 0xB0B2, 0x5B8A, 0x8C5F, + 0x5B8B, 0xCBCE, 0x5B8C, 0xCDEA, 0x5B8D, 0x8C60, 0x5B8E, 0x8C61, 0x5B8F, 0xBAEA, 0x5B90, 0x8C62, 0x5B91, 0x8C63, 0x5B92, 0x8C64, + 0x5B93, 0xE5B5, 0x5B94, 0x8C65, 0x5B95, 0xE5B4, 0x5B96, 0x8C66, 0x5B97, 0xD7DA, 0x5B98, 0xB9D9, 0x5B99, 0xD6E6, 0x5B9A, 0xB6A8, + 0x5B9B, 0xCDF0, 0x5B9C, 0xD2CB, 0x5B9D, 0xB1A6, 0x5B9E, 0xCAB5, 0x5B9F, 0x8C67, 0x5BA0, 0xB3E8, 0x5BA1, 0xC9F3, 0x5BA2, 0xBFCD, + 0x5BA3, 0xD0FB, 0x5BA4, 0xCAD2, 0x5BA5, 0xE5B6, 0x5BA6, 0xBBC2, 0x5BA7, 0x8C68, 0x5BA8, 0x8C69, 0x5BA9, 0x8C6A, 0x5BAA, 0xCFDC, + 0x5BAB, 0xB9AC, 0x5BAC, 0x8C6B, 0x5BAD, 0x8C6C, 0x5BAE, 0x8C6D, 0x5BAF, 0x8C6E, 0x5BB0, 0xD4D7, 0x5BB1, 0x8C6F, 0x5BB2, 0x8C70, + 0x5BB3, 0xBAA6, 0x5BB4, 0xD1E7, 0x5BB5, 0xCFFC, 0x5BB6, 0xBCD2, 0x5BB7, 0x8C71, 0x5BB8, 0xE5B7, 0x5BB9, 0xC8DD, 0x5BBA, 0x8C72, + 0x5BBB, 0x8C73, 0x5BBC, 0x8C74, 0x5BBD, 0xBFED, 0x5BBE, 0xB1F6, 0x5BBF, 0xCBDE, 0x5BC0, 0x8C75, 0x5BC1, 0x8C76, 0x5BC2, 0xBCC5, + 0x5BC3, 0x8C77, 0x5BC4, 0xBCC4, 0x5BC5, 0xD2FA, 0x5BC6, 0xC3DC, 0x5BC7, 0xBFDC, 0x5BC8, 0x8C78, 0x5BC9, 0x8C79, 0x5BCA, 0x8C7A, + 0x5BCB, 0x8C7B, 0x5BCC, 0xB8BB, 0x5BCD, 0x8C7C, 0x5BCE, 0x8C7D, 0x5BCF, 0x8C7E, 0x5BD0, 0xC3C2, 0x5BD1, 0x8C80, 0x5BD2, 0xBAAE, + 0x5BD3, 0xD4A2, 0x5BD4, 0x8C81, 0x5BD5, 0x8C82, 0x5BD6, 0x8C83, 0x5BD7, 0x8C84, 0x5BD8, 0x8C85, 0x5BD9, 0x8C86, 0x5BDA, 0x8C87, + 0x5BDB, 0x8C88, 0x5BDC, 0x8C89, 0x5BDD, 0xC7DE, 0x5BDE, 0xC4AF, 0x5BDF, 0xB2EC, 0x5BE0, 0x8C8A, 0x5BE1, 0xB9D1, 0x5BE2, 0x8C8B, + 0x5BE3, 0x8C8C, 0x5BE4, 0xE5BB, 0x5BE5, 0xC1C8, 0x5BE6, 0x8C8D, 0x5BE7, 0x8C8E, 0x5BE8, 0xD5AF, 0x5BE9, 0x8C8F, 0x5BEA, 0x8C90, + 0x5BEB, 0x8C91, 0x5BEC, 0x8C92, 0x5BED, 0x8C93, 0x5BEE, 0xE5BC, 0x5BEF, 0x8C94, 0x5BF0, 0xE5BE, 0x5BF1, 0x8C95, 0x5BF2, 0x8C96, + 0x5BF3, 0x8C97, 0x5BF4, 0x8C98, 0x5BF5, 0x8C99, 0x5BF6, 0x8C9A, 0x5BF7, 0x8C9B, 0x5BF8, 0xB4E7, 0x5BF9, 0xB6D4, 0x5BFA, 0xCBC2, + 0x5BFB, 0xD1B0, 0x5BFC, 0xB5BC, 0x5BFD, 0x8C9C, 0x5BFE, 0x8C9D, 0x5BFF, 0xCAD9, 0x5C00, 0x8C9E, 0x5C01, 0xB7E2, 0x5C02, 0x8C9F, + 0x5C03, 0x8CA0, 0x5C04, 0xC9E4, 0x5C05, 0x8CA1, 0x5C06, 0xBDAB, 0x5C07, 0x8CA2, 0x5C08, 0x8CA3, 0x5C09, 0xCEBE, 0x5C0A, 0xD7F0, + 0x5C0B, 0x8CA4, 0x5C0C, 0x8CA5, 0x5C0D, 0x8CA6, 0x5C0E, 0x8CA7, 0x5C0F, 0xD0A1, 0x5C10, 0x8CA8, 0x5C11, 0xC9D9, 0x5C12, 0x8CA9, + 0x5C13, 0x8CAA, 0x5C14, 0xB6FB, 0x5C15, 0xE6D8, 0x5C16, 0xBCE2, 0x5C17, 0x8CAB, 0x5C18, 0xB3BE, 0x5C19, 0x8CAC, 0x5C1A, 0xC9D0, + 0x5C1B, 0x8CAD, 0x5C1C, 0xE6D9, 0x5C1D, 0xB3A2, 0x5C1E, 0x8CAE, 0x5C1F, 0x8CAF, 0x5C20, 0x8CB0, 0x5C21, 0x8CB1, 0x5C22, 0xDECC, + 0x5C23, 0x8CB2, 0x5C24, 0xD3C8, 0x5C25, 0xDECD, 0x5C26, 0x8CB3, 0x5C27, 0xD2A2, 0x5C28, 0x8CB4, 0x5C29, 0x8CB5, 0x5C2A, 0x8CB6, + 0x5C2B, 0x8CB7, 0x5C2C, 0xDECE, 0x5C2D, 0x8CB8, 0x5C2E, 0x8CB9, 0x5C2F, 0x8CBA, 0x5C30, 0x8CBB, 0x5C31, 0xBECD, 0x5C32, 0x8CBC, + 0x5C33, 0x8CBD, 0x5C34, 0xDECF, 0x5C35, 0x8CBE, 0x5C36, 0x8CBF, 0x5C37, 0x8CC0, 0x5C38, 0xCAAC, 0x5C39, 0xD2FC, 0x5C3A, 0xB3DF, + 0x5C3B, 0xE5EA, 0x5C3C, 0xC4E1, 0x5C3D, 0xBEA1, 0x5C3E, 0xCEB2, 0x5C3F, 0xC4F2, 0x5C40, 0xBED6, 0x5C41, 0xC6A8, 0x5C42, 0xB2E3, + 0x5C43, 0x8CC1, 0x5C44, 0x8CC2, 0x5C45, 0xBED3, 0x5C46, 0x8CC3, 0x5C47, 0x8CC4, 0x5C48, 0xC7FC, 0x5C49, 0xCCEB, 0x5C4A, 0xBDEC, + 0x5C4B, 0xCEDD, 0x5C4C, 0x8CC5, 0x5C4D, 0x8CC6, 0x5C4E, 0xCABA, 0x5C4F, 0xC6C1, 0x5C50, 0xE5EC, 0x5C51, 0xD0BC, 0x5C52, 0x8CC7, + 0x5C53, 0x8CC8, 0x5C54, 0x8CC9, 0x5C55, 0xD5B9, 0x5C56, 0x8CCA, 0x5C57, 0x8CCB, 0x5C58, 0x8CCC, 0x5C59, 0xE5ED, 0x5C5A, 0x8CCD, + 0x5C5B, 0x8CCE, 0x5C5C, 0x8CCF, 0x5C5D, 0x8CD0, 0x5C5E, 0xCAF4, 0x5C5F, 0x8CD1, 0x5C60, 0xCDC0, 0x5C61, 0xC2C5, 0x5C62, 0x8CD2, + 0x5C63, 0xE5EF, 0x5C64, 0x8CD3, 0x5C65, 0xC2C4, 0x5C66, 0xE5F0, 0x5C67, 0x8CD4, 0x5C68, 0x8CD5, 0x5C69, 0x8CD6, 0x5C6A, 0x8CD7, + 0x5C6B, 0x8CD8, 0x5C6C, 0x8CD9, 0x5C6D, 0x8CDA, 0x5C6E, 0xE5F8, 0x5C6F, 0xCDCD, 0x5C70, 0x8CDB, 0x5C71, 0xC9BD, 0x5C72, 0x8CDC, + 0x5C73, 0x8CDD, 0x5C74, 0x8CDE, 0x5C75, 0x8CDF, 0x5C76, 0x8CE0, 0x5C77, 0x8CE1, 0x5C78, 0x8CE2, 0x5C79, 0xD2D9, 0x5C7A, 0xE1A8, + 0x5C7B, 0x8CE3, 0x5C7C, 0x8CE4, 0x5C7D, 0x8CE5, 0x5C7E, 0x8CE6, 0x5C7F, 0xD3EC, 0x5C80, 0x8CE7, 0x5C81, 0xCBEA, 0x5C82, 0xC6F1, + 0x5C83, 0x8CE8, 0x5C84, 0x8CE9, 0x5C85, 0x8CEA, 0x5C86, 0x8CEB, 0x5C87, 0x8CEC, 0x5C88, 0xE1AC, 0x5C89, 0x8CED, 0x5C8A, 0x8CEE, + 0x5C8B, 0x8CEF, 0x5C8C, 0xE1A7, 0x5C8D, 0xE1A9, 0x5C8E, 0x8CF0, 0x5C8F, 0x8CF1, 0x5C90, 0xE1AA, 0x5C91, 0xE1AF, 0x5C92, 0x8CF2, + 0x5C93, 0x8CF3, 0x5C94, 0xB2ED, 0x5C95, 0x8CF4, 0x5C96, 0xE1AB, 0x5C97, 0xB8DA, 0x5C98, 0xE1AD, 0x5C99, 0xE1AE, 0x5C9A, 0xE1B0, + 0x5C9B, 0xB5BA, 0x5C9C, 0xE1B1, 0x5C9D, 0x8CF5, 0x5C9E, 0x8CF6, 0x5C9F, 0x8CF7, 0x5CA0, 0x8CF8, 0x5CA1, 0x8CF9, 0x5CA2, 0xE1B3, + 0x5CA3, 0xE1B8, 0x5CA4, 0x8CFA, 0x5CA5, 0x8CFB, 0x5CA6, 0x8CFC, 0x5CA7, 0x8CFD, 0x5CA8, 0x8CFE, 0x5CA9, 0xD1D2, 0x5CAA, 0x8D40, + 0x5CAB, 0xE1B6, 0x5CAC, 0xE1B5, 0x5CAD, 0xC1EB, 0x5CAE, 0x8D41, 0x5CAF, 0x8D42, 0x5CB0, 0x8D43, 0x5CB1, 0xE1B7, 0x5CB2, 0x8D44, + 0x5CB3, 0xD4C0, 0x5CB4, 0x8D45, 0x5CB5, 0xE1B2, 0x5CB6, 0x8D46, 0x5CB7, 0xE1BA, 0x5CB8, 0xB0B6, 0x5CB9, 0x8D47, 0x5CBA, 0x8D48, + 0x5CBB, 0x8D49, 0x5CBC, 0x8D4A, 0x5CBD, 0xE1B4, 0x5CBE, 0x8D4B, 0x5CBF, 0xBFF9, 0x5CC0, 0x8D4C, 0x5CC1, 0xE1B9, 0x5CC2, 0x8D4D, + 0x5CC3, 0x8D4E, 0x5CC4, 0xE1BB, 0x5CC5, 0x8D4F, 0x5CC6, 0x8D50, 0x5CC7, 0x8D51, 0x5CC8, 0x8D52, 0x5CC9, 0x8D53, 0x5CCA, 0x8D54, + 0x5CCB, 0xE1BE, 0x5CCC, 0x8D55, 0x5CCD, 0x8D56, 0x5CCE, 0x8D57, 0x5CCF, 0x8D58, 0x5CD0, 0x8D59, 0x5CD1, 0x8D5A, 0x5CD2, 0xE1BC, + 0x5CD3, 0x8D5B, 0x5CD4, 0x8D5C, 0x5CD5, 0x8D5D, 0x5CD6, 0x8D5E, 0x5CD7, 0x8D5F, 0x5CD8, 0x8D60, 0x5CD9, 0xD6C5, 0x5CDA, 0x8D61, + 0x5CDB, 0x8D62, 0x5CDC, 0x8D63, 0x5CDD, 0x8D64, 0x5CDE, 0x8D65, 0x5CDF, 0x8D66, 0x5CE0, 0x8D67, 0x5CE1, 0xCFBF, 0x5CE2, 0x8D68, + 0x5CE3, 0x8D69, 0x5CE4, 0xE1BD, 0x5CE5, 0xE1BF, 0x5CE6, 0xC2CD, 0x5CE7, 0x8D6A, 0x5CE8, 0xB6EB, 0x5CE9, 0x8D6B, 0x5CEA, 0xD3F8, + 0x5CEB, 0x8D6C, 0x5CEC, 0x8D6D, 0x5CED, 0xC7CD, 0x5CEE, 0x8D6E, 0x5CEF, 0x8D6F, 0x5CF0, 0xB7E5, 0x5CF1, 0x8D70, 0x5CF2, 0x8D71, + 0x5CF3, 0x8D72, 0x5CF4, 0x8D73, 0x5CF5, 0x8D74, 0x5CF6, 0x8D75, 0x5CF7, 0x8D76, 0x5CF8, 0x8D77, 0x5CF9, 0x8D78, 0x5CFA, 0x8D79, + 0x5CFB, 0xBEFE, 0x5CFC, 0x8D7A, 0x5CFD, 0x8D7B, 0x5CFE, 0x8D7C, 0x5CFF, 0x8D7D, 0x5D00, 0x8D7E, 0x5D01, 0x8D80, 0x5D02, 0xE1C0, + 0x5D03, 0xE1C1, 0x5D04, 0x8D81, 0x5D05, 0x8D82, 0x5D06, 0xE1C7, 0x5D07, 0xB3E7, 0x5D08, 0x8D83, 0x5D09, 0x8D84, 0x5D0A, 0x8D85, + 0x5D0B, 0x8D86, 0x5D0C, 0x8D87, 0x5D0D, 0x8D88, 0x5D0E, 0xC6E9, 0x5D0F, 0x8D89, 0x5D10, 0x8D8A, 0x5D11, 0x8D8B, 0x5D12, 0x8D8C, + 0x5D13, 0x8D8D, 0x5D14, 0xB4DE, 0x5D15, 0x8D8E, 0x5D16, 0xD1C2, 0x5D17, 0x8D8F, 0x5D18, 0x8D90, 0x5D19, 0x8D91, 0x5D1A, 0x8D92, + 0x5D1B, 0xE1C8, 0x5D1C, 0x8D93, 0x5D1D, 0x8D94, 0x5D1E, 0xE1C6, 0x5D1F, 0x8D95, 0x5D20, 0x8D96, 0x5D21, 0x8D97, 0x5D22, 0x8D98, + 0x5D23, 0x8D99, 0x5D24, 0xE1C5, 0x5D25, 0x8D9A, 0x5D26, 0xE1C3, 0x5D27, 0xE1C2, 0x5D28, 0x8D9B, 0x5D29, 0xB1C0, 0x5D2A, 0x8D9C, + 0x5D2B, 0x8D9D, 0x5D2C, 0x8D9E, 0x5D2D, 0xD5B8, 0x5D2E, 0xE1C4, 0x5D2F, 0x8D9F, 0x5D30, 0x8DA0, 0x5D31, 0x8DA1, 0x5D32, 0x8DA2, + 0x5D33, 0x8DA3, 0x5D34, 0xE1CB, 0x5D35, 0x8DA4, 0x5D36, 0x8DA5, 0x5D37, 0x8DA6, 0x5D38, 0x8DA7, 0x5D39, 0x8DA8, 0x5D3A, 0x8DA9, + 0x5D3B, 0x8DAA, 0x5D3C, 0x8DAB, 0x5D3D, 0xE1CC, 0x5D3E, 0xE1CA, 0x5D3F, 0x8DAC, 0x5D40, 0x8DAD, 0x5D41, 0x8DAE, 0x5D42, 0x8DAF, + 0x5D43, 0x8DB0, 0x5D44, 0x8DB1, 0x5D45, 0x8DB2, 0x5D46, 0x8DB3, 0x5D47, 0xEFFA, 0x5D48, 0x8DB4, 0x5D49, 0x8DB5, 0x5D4A, 0xE1D3, + 0x5D4B, 0xE1D2, 0x5D4C, 0xC7B6, 0x5D4D, 0x8DB6, 0x5D4E, 0x8DB7, 0x5D4F, 0x8DB8, 0x5D50, 0x8DB9, 0x5D51, 0x8DBA, 0x5D52, 0x8DBB, + 0x5D53, 0x8DBC, 0x5D54, 0x8DBD, 0x5D55, 0x8DBE, 0x5D56, 0x8DBF, 0x5D57, 0x8DC0, 0x5D58, 0xE1C9, 0x5D59, 0x8DC1, 0x5D5A, 0x8DC2, + 0x5D5B, 0xE1CE, 0x5D5C, 0x8DC3, 0x5D5D, 0xE1D0, 0x5D5E, 0x8DC4, 0x5D5F, 0x8DC5, 0x5D60, 0x8DC6, 0x5D61, 0x8DC7, 0x5D62, 0x8DC8, + 0x5D63, 0x8DC9, 0x5D64, 0x8DCA, 0x5D65, 0x8DCB, 0x5D66, 0x8DCC, 0x5D67, 0x8DCD, 0x5D68, 0x8DCE, 0x5D69, 0xE1D4, 0x5D6A, 0x8DCF, + 0x5D6B, 0xE1D1, 0x5D6C, 0xE1CD, 0x5D6D, 0x8DD0, 0x5D6E, 0x8DD1, 0x5D6F, 0xE1CF, 0x5D70, 0x8DD2, 0x5D71, 0x8DD3, 0x5D72, 0x8DD4, + 0x5D73, 0x8DD5, 0x5D74, 0xE1D5, 0x5D75, 0x8DD6, 0x5D76, 0x8DD7, 0x5D77, 0x8DD8, 0x5D78, 0x8DD9, 0x5D79, 0x8DDA, 0x5D7A, 0x8DDB, + 0x5D7B, 0x8DDC, 0x5D7C, 0x8DDD, 0x5D7D, 0x8DDE, 0x5D7E, 0x8DDF, 0x5D7F, 0x8DE0, 0x5D80, 0x8DE1, 0x5D81, 0x8DE2, 0x5D82, 0xE1D6, + 0x5D83, 0x8DE3, 0x5D84, 0x8DE4, 0x5D85, 0x8DE5, 0x5D86, 0x8DE6, 0x5D87, 0x8DE7, 0x5D88, 0x8DE8, 0x5D89, 0x8DE9, 0x5D8A, 0x8DEA, + 0x5D8B, 0x8DEB, 0x5D8C, 0x8DEC, 0x5D8D, 0x8DED, 0x5D8E, 0x8DEE, 0x5D8F, 0x8DEF, 0x5D90, 0x8DF0, 0x5D91, 0x8DF1, 0x5D92, 0x8DF2, + 0x5D93, 0x8DF3, 0x5D94, 0x8DF4, 0x5D95, 0x8DF5, 0x5D96, 0x8DF6, 0x5D97, 0x8DF7, 0x5D98, 0x8DF8, 0x5D99, 0xE1D7, 0x5D9A, 0x8DF9, + 0x5D9B, 0x8DFA, 0x5D9C, 0x8DFB, 0x5D9D, 0xE1D8, 0x5D9E, 0x8DFC, 0x5D9F, 0x8DFD, 0x5DA0, 0x8DFE, 0x5DA1, 0x8E40, 0x5DA2, 0x8E41, + 0x5DA3, 0x8E42, 0x5DA4, 0x8E43, 0x5DA5, 0x8E44, 0x5DA6, 0x8E45, 0x5DA7, 0x8E46, 0x5DA8, 0x8E47, 0x5DA9, 0x8E48, 0x5DAA, 0x8E49, + 0x5DAB, 0x8E4A, 0x5DAC, 0x8E4B, 0x5DAD, 0x8E4C, 0x5DAE, 0x8E4D, 0x5DAF, 0x8E4E, 0x5DB0, 0x8E4F, 0x5DB1, 0x8E50, 0x5DB2, 0x8E51, + 0x5DB3, 0x8E52, 0x5DB4, 0x8E53, 0x5DB5, 0x8E54, 0x5DB6, 0x8E55, 0x5DB7, 0xE1DA, 0x5DB8, 0x8E56, 0x5DB9, 0x8E57, 0x5DBA, 0x8E58, + 0x5DBB, 0x8E59, 0x5DBC, 0x8E5A, 0x5DBD, 0x8E5B, 0x5DBE, 0x8E5C, 0x5DBF, 0x8E5D, 0x5DC0, 0x8E5E, 0x5DC1, 0x8E5F, 0x5DC2, 0x8E60, + 0x5DC3, 0x8E61, 0x5DC4, 0x8E62, 0x5DC5, 0xE1DB, 0x5DC6, 0x8E63, 0x5DC7, 0x8E64, 0x5DC8, 0x8E65, 0x5DC9, 0x8E66, 0x5DCA, 0x8E67, + 0x5DCB, 0x8E68, 0x5DCC, 0x8E69, 0x5DCD, 0xCEA1, 0x5DCE, 0x8E6A, 0x5DCF, 0x8E6B, 0x5DD0, 0x8E6C, 0x5DD1, 0x8E6D, 0x5DD2, 0x8E6E, + 0x5DD3, 0x8E6F, 0x5DD4, 0x8E70, 0x5DD5, 0x8E71, 0x5DD6, 0x8E72, 0x5DD7, 0x8E73, 0x5DD8, 0x8E74, 0x5DD9, 0x8E75, 0x5DDA, 0x8E76, + 0x5DDB, 0xE7DD, 0x5DDC, 0x8E77, 0x5DDD, 0xB4A8, 0x5DDE, 0xD6DD, 0x5DDF, 0x8E78, 0x5DE0, 0x8E79, 0x5DE1, 0xD1B2, 0x5DE2, 0xB3B2, + 0x5DE3, 0x8E7A, 0x5DE4, 0x8E7B, 0x5DE5, 0xB9A4, 0x5DE6, 0xD7F3, 0x5DE7, 0xC7C9, 0x5DE8, 0xBEDE, 0x5DE9, 0xB9AE, 0x5DEA, 0x8E7C, + 0x5DEB, 0xCED7, 0x5DEC, 0x8E7D, 0x5DED, 0x8E7E, 0x5DEE, 0xB2EE, 0x5DEF, 0xDBCF, 0x5DF0, 0x8E80, 0x5DF1, 0xBCBA, 0x5DF2, 0xD2D1, + 0x5DF3, 0xCBC8, 0x5DF4, 0xB0CD, 0x5DF5, 0x8E81, 0x5DF6, 0x8E82, 0x5DF7, 0xCFEF, 0x5DF8, 0x8E83, 0x5DF9, 0x8E84, 0x5DFA, 0x8E85, + 0x5DFB, 0x8E86, 0x5DFC, 0x8E87, 0x5DFD, 0xD9E3, 0x5DFE, 0xBDED, 0x5DFF, 0x8E88, 0x5E00, 0x8E89, 0x5E01, 0xB1D2, 0x5E02, 0xCAD0, + 0x5E03, 0xB2BC, 0x5E04, 0x8E8A, 0x5E05, 0xCBA7, 0x5E06, 0xB7AB, 0x5E07, 0x8E8B, 0x5E08, 0xCAA6, 0x5E09, 0x8E8C, 0x5E0A, 0x8E8D, + 0x5E0B, 0x8E8E, 0x5E0C, 0xCFA3, 0x5E0D, 0x8E8F, 0x5E0E, 0x8E90, 0x5E0F, 0xE0F8, 0x5E10, 0xD5CA, 0x5E11, 0xE0FB, 0x5E12, 0x8E91, + 0x5E13, 0x8E92, 0x5E14, 0xE0FA, 0x5E15, 0xC5C1, 0x5E16, 0xCCFB, 0x5E17, 0x8E93, 0x5E18, 0xC1B1, 0x5E19, 0xE0F9, 0x5E1A, 0xD6E3, + 0x5E1B, 0xB2AF, 0x5E1C, 0xD6C4, 0x5E1D, 0xB5DB, 0x5E1E, 0x8E94, 0x5E1F, 0x8E95, 0x5E20, 0x8E96, 0x5E21, 0x8E97, 0x5E22, 0x8E98, + 0x5E23, 0x8E99, 0x5E24, 0x8E9A, 0x5E25, 0x8E9B, 0x5E26, 0xB4F8, 0x5E27, 0xD6A1, 0x5E28, 0x8E9C, 0x5E29, 0x8E9D, 0x5E2A, 0x8E9E, + 0x5E2B, 0x8E9F, 0x5E2C, 0x8EA0, 0x5E2D, 0xCFAF, 0x5E2E, 0xB0EF, 0x5E2F, 0x8EA1, 0x5E30, 0x8EA2, 0x5E31, 0xE0FC, 0x5E32, 0x8EA3, + 0x5E33, 0x8EA4, 0x5E34, 0x8EA5, 0x5E35, 0x8EA6, 0x5E36, 0x8EA7, 0x5E37, 0xE1A1, 0x5E38, 0xB3A3, 0x5E39, 0x8EA8, 0x5E3A, 0x8EA9, + 0x5E3B, 0xE0FD, 0x5E3C, 0xE0FE, 0x5E3D, 0xC3B1, 0x5E3E, 0x8EAA, 0x5E3F, 0x8EAB, 0x5E40, 0x8EAC, 0x5E41, 0x8EAD, 0x5E42, 0xC3DD, + 0x5E43, 0x8EAE, 0x5E44, 0xE1A2, 0x5E45, 0xB7F9, 0x5E46, 0x8EAF, 0x5E47, 0x8EB0, 0x5E48, 0x8EB1, 0x5E49, 0x8EB2, 0x5E4A, 0x8EB3, + 0x5E4B, 0x8EB4, 0x5E4C, 0xBBCF, 0x5E4D, 0x8EB5, 0x5E4E, 0x8EB6, 0x5E4F, 0x8EB7, 0x5E50, 0x8EB8, 0x5E51, 0x8EB9, 0x5E52, 0x8EBA, + 0x5E53, 0x8EBB, 0x5E54, 0xE1A3, 0x5E55, 0xC4BB, 0x5E56, 0x8EBC, 0x5E57, 0x8EBD, 0x5E58, 0x8EBE, 0x5E59, 0x8EBF, 0x5E5A, 0x8EC0, + 0x5E5B, 0xE1A4, 0x5E5C, 0x8EC1, 0x5E5D, 0x8EC2, 0x5E5E, 0xE1A5, 0x5E5F, 0x8EC3, 0x5E60, 0x8EC4, 0x5E61, 0xE1A6, 0x5E62, 0xB4B1, + 0x5E63, 0x8EC5, 0x5E64, 0x8EC6, 0x5E65, 0x8EC7, 0x5E66, 0x8EC8, 0x5E67, 0x8EC9, 0x5E68, 0x8ECA, 0x5E69, 0x8ECB, 0x5E6A, 0x8ECC, + 0x5E6B, 0x8ECD, 0x5E6C, 0x8ECE, 0x5E6D, 0x8ECF, 0x5E6E, 0x8ED0, 0x5E6F, 0x8ED1, 0x5E70, 0x8ED2, 0x5E71, 0x8ED3, 0x5E72, 0xB8C9, + 0x5E73, 0xC6BD, 0x5E74, 0xC4EA, 0x5E75, 0x8ED4, 0x5E76, 0xB2A2, 0x5E77, 0x8ED5, 0x5E78, 0xD0D2, 0x5E79, 0x8ED6, 0x5E7A, 0xE7DB, + 0x5E7B, 0xBBC3, 0x5E7C, 0xD3D7, 0x5E7D, 0xD3C4, 0x5E7E, 0x8ED7, 0x5E7F, 0xB9E3, 0x5E80, 0xE2CF, 0x5E81, 0x8ED8, 0x5E82, 0x8ED9, + 0x5E83, 0x8EDA, 0x5E84, 0xD7AF, 0x5E85, 0x8EDB, 0x5E86, 0xC7EC, 0x5E87, 0xB1D3, 0x5E88, 0x8EDC, 0x5E89, 0x8EDD, 0x5E8A, 0xB4B2, + 0x5E8B, 0xE2D1, 0x5E8C, 0x8EDE, 0x5E8D, 0x8EDF, 0x5E8E, 0x8EE0, 0x5E8F, 0xD0F2, 0x5E90, 0xC2AE, 0x5E91, 0xE2D0, 0x5E92, 0x8EE1, + 0x5E93, 0xBFE2, 0x5E94, 0xD3A6, 0x5E95, 0xB5D7, 0x5E96, 0xE2D2, 0x5E97, 0xB5EA, 0x5E98, 0x8EE2, 0x5E99, 0xC3ED, 0x5E9A, 0xB8FD, + 0x5E9B, 0x8EE3, 0x5E9C, 0xB8AE, 0x5E9D, 0x8EE4, 0x5E9E, 0xC5D3, 0x5E9F, 0xB7CF, 0x5EA0, 0xE2D4, 0x5EA1, 0x8EE5, 0x5EA2, 0x8EE6, + 0x5EA3, 0x8EE7, 0x5EA4, 0x8EE8, 0x5EA5, 0xE2D3, 0x5EA6, 0xB6C8, 0x5EA7, 0xD7F9, 0x5EA8, 0x8EE9, 0x5EA9, 0x8EEA, 0x5EAA, 0x8EEB, + 0x5EAB, 0x8EEC, 0x5EAC, 0x8EED, 0x5EAD, 0xCDA5, 0x5EAE, 0x8EEE, 0x5EAF, 0x8EEF, 0x5EB0, 0x8EF0, 0x5EB1, 0x8EF1, 0x5EB2, 0x8EF2, + 0x5EB3, 0xE2D8, 0x5EB4, 0x8EF3, 0x5EB5, 0xE2D6, 0x5EB6, 0xCAFC, 0x5EB7, 0xBFB5, 0x5EB8, 0xD3B9, 0x5EB9, 0xE2D5, 0x5EBA, 0x8EF4, + 0x5EBB, 0x8EF5, 0x5EBC, 0x8EF6, 0x5EBD, 0x8EF7, 0x5EBE, 0xE2D7, 0x5EBF, 0x8EF8, 0x5EC0, 0x8EF9, 0x5EC1, 0x8EFA, 0x5EC2, 0x8EFB, + 0x5EC3, 0x8EFC, 0x5EC4, 0x8EFD, 0x5EC5, 0x8EFE, 0x5EC6, 0x8F40, 0x5EC7, 0x8F41, 0x5EC8, 0x8F42, 0x5EC9, 0xC1AE, 0x5ECA, 0xC0C8, + 0x5ECB, 0x8F43, 0x5ECC, 0x8F44, 0x5ECD, 0x8F45, 0x5ECE, 0x8F46, 0x5ECF, 0x8F47, 0x5ED0, 0x8F48, 0x5ED1, 0xE2DB, 0x5ED2, 0xE2DA, + 0x5ED3, 0xC0AA, 0x5ED4, 0x8F49, 0x5ED5, 0x8F4A, 0x5ED6, 0xC1CE, 0x5ED7, 0x8F4B, 0x5ED8, 0x8F4C, 0x5ED9, 0x8F4D, 0x5EDA, 0x8F4E, + 0x5EDB, 0xE2DC, 0x5EDC, 0x8F4F, 0x5EDD, 0x8F50, 0x5EDE, 0x8F51, 0x5EDF, 0x8F52, 0x5EE0, 0x8F53, 0x5EE1, 0x8F54, 0x5EE2, 0x8F55, + 0x5EE3, 0x8F56, 0x5EE4, 0x8F57, 0x5EE5, 0x8F58, 0x5EE6, 0x8F59, 0x5EE7, 0x8F5A, 0x5EE8, 0xE2DD, 0x5EE9, 0x8F5B, 0x5EEA, 0xE2DE, + 0x5EEB, 0x8F5C, 0x5EEC, 0x8F5D, 0x5EED, 0x8F5E, 0x5EEE, 0x8F5F, 0x5EEF, 0x8F60, 0x5EF0, 0x8F61, 0x5EF1, 0x8F62, 0x5EF2, 0x8F63, + 0x5EF3, 0x8F64, 0x5EF4, 0xDBC8, 0x5EF5, 0x8F65, 0x5EF6, 0xD1D3, 0x5EF7, 0xCDA2, 0x5EF8, 0x8F66, 0x5EF9, 0x8F67, 0x5EFA, 0xBDA8, + 0x5EFB, 0x8F68, 0x5EFC, 0x8F69, 0x5EFD, 0x8F6A, 0x5EFE, 0xDEC3, 0x5EFF, 0xD8A5, 0x5F00, 0xBFAA, 0x5F01, 0xDBCD, 0x5F02, 0xD2EC, + 0x5F03, 0xC6FA, 0x5F04, 0xC5AA, 0x5F05, 0x8F6B, 0x5F06, 0x8F6C, 0x5F07, 0x8F6D, 0x5F08, 0xDEC4, 0x5F09, 0x8F6E, 0x5F0A, 0xB1D7, + 0x5F0B, 0xDFAE, 0x5F0C, 0x8F6F, 0x5F0D, 0x8F70, 0x5F0E, 0x8F71, 0x5F0F, 0xCABD, 0x5F10, 0x8F72, 0x5F11, 0xDFB1, 0x5F12, 0x8F73, + 0x5F13, 0xB9AD, 0x5F14, 0x8F74, 0x5F15, 0xD2FD, 0x5F16, 0x8F75, 0x5F17, 0xB8A5, 0x5F18, 0xBAEB, 0x5F19, 0x8F76, 0x5F1A, 0x8F77, + 0x5F1B, 0xB3DA, 0x5F1C, 0x8F78, 0x5F1D, 0x8F79, 0x5F1E, 0x8F7A, 0x5F1F, 0xB5DC, 0x5F20, 0xD5C5, 0x5F21, 0x8F7B, 0x5F22, 0x8F7C, + 0x5F23, 0x8F7D, 0x5F24, 0x8F7E, 0x5F25, 0xC3D6, 0x5F26, 0xCFD2, 0x5F27, 0xBBA1, 0x5F28, 0x8F80, 0x5F29, 0xE5F3, 0x5F2A, 0xE5F2, + 0x5F2B, 0x8F81, 0x5F2C, 0x8F82, 0x5F2D, 0xE5F4, 0x5F2E, 0x8F83, 0x5F2F, 0xCDE4, 0x5F30, 0x8F84, 0x5F31, 0xC8F5, 0x5F32, 0x8F85, + 0x5F33, 0x8F86, 0x5F34, 0x8F87, 0x5F35, 0x8F88, 0x5F36, 0x8F89, 0x5F37, 0x8F8A, 0x5F38, 0x8F8B, 0x5F39, 0xB5AF, 0x5F3A, 0xC7BF, + 0x5F3B, 0x8F8C, 0x5F3C, 0xE5F6, 0x5F3D, 0x8F8D, 0x5F3E, 0x8F8E, 0x5F3F, 0x8F8F, 0x5F40, 0xECB0, 0x5F41, 0x8F90, 0x5F42, 0x8F91, + 0x5F43, 0x8F92, 0x5F44, 0x8F93, 0x5F45, 0x8F94, 0x5F46, 0x8F95, 0x5F47, 0x8F96, 0x5F48, 0x8F97, 0x5F49, 0x8F98, 0x5F4A, 0x8F99, + 0x5F4B, 0x8F9A, 0x5F4C, 0x8F9B, 0x5F4D, 0x8F9C, 0x5F4E, 0x8F9D, 0x5F4F, 0x8F9E, 0x5F50, 0xE5E6, 0x5F51, 0x8F9F, 0x5F52, 0xB9E9, + 0x5F53, 0xB5B1, 0x5F54, 0x8FA0, 0x5F55, 0xC2BC, 0x5F56, 0xE5E8, 0x5F57, 0xE5E7, 0x5F58, 0xE5E9, 0x5F59, 0x8FA1, 0x5F5A, 0x8FA2, + 0x5F5B, 0x8FA3, 0x5F5C, 0x8FA4, 0x5F5D, 0xD2CD, 0x5F5E, 0x8FA5, 0x5F5F, 0x8FA6, 0x5F60, 0x8FA7, 0x5F61, 0xE1EA, 0x5F62, 0xD0CE, + 0x5F63, 0x8FA8, 0x5F64, 0xCDAE, 0x5F65, 0x8FA9, 0x5F66, 0xD1E5, 0x5F67, 0x8FAA, 0x5F68, 0x8FAB, 0x5F69, 0xB2CA, 0x5F6A, 0xB1EB, + 0x5F6B, 0x8FAC, 0x5F6C, 0xB1F2, 0x5F6D, 0xC5ED, 0x5F6E, 0x8FAD, 0x5F6F, 0x8FAE, 0x5F70, 0xD5C3, 0x5F71, 0xD3B0, 0x5F72, 0x8FAF, + 0x5F73, 0xE1DC, 0x5F74, 0x8FB0, 0x5F75, 0x8FB1, 0x5F76, 0x8FB2, 0x5F77, 0xE1DD, 0x5F78, 0x8FB3, 0x5F79, 0xD2DB, 0x5F7A, 0x8FB4, + 0x5F7B, 0xB3B9, 0x5F7C, 0xB1CB, 0x5F7D, 0x8FB5, 0x5F7E, 0x8FB6, 0x5F7F, 0x8FB7, 0x5F80, 0xCDF9, 0x5F81, 0xD5F7, 0x5F82, 0xE1DE, + 0x5F83, 0x8FB8, 0x5F84, 0xBEB6, 0x5F85, 0xB4FD, 0x5F86, 0x8FB9, 0x5F87, 0xE1DF, 0x5F88, 0xBADC, 0x5F89, 0xE1E0, 0x5F8A, 0xBBB2, + 0x5F8B, 0xC2C9, 0x5F8C, 0xE1E1, 0x5F8D, 0x8FBA, 0x5F8E, 0x8FBB, 0x5F8F, 0x8FBC, 0x5F90, 0xD0EC, 0x5F91, 0x8FBD, 0x5F92, 0xCDBD, + 0x5F93, 0x8FBE, 0x5F94, 0x8FBF, 0x5F95, 0xE1E2, 0x5F96, 0x8FC0, 0x5F97, 0xB5C3, 0x5F98, 0xC5C7, 0x5F99, 0xE1E3, 0x5F9A, 0x8FC1, + 0x5F9B, 0x8FC2, 0x5F9C, 0xE1E4, 0x5F9D, 0x8FC3, 0x5F9E, 0x8FC4, 0x5F9F, 0x8FC5, 0x5FA0, 0x8FC6, 0x5FA1, 0xD3F9, 0x5FA2, 0x8FC7, + 0x5FA3, 0x8FC8, 0x5FA4, 0x8FC9, 0x5FA5, 0x8FCA, 0x5FA6, 0x8FCB, 0x5FA7, 0x8FCC, 0x5FA8, 0xE1E5, 0x5FA9, 0x8FCD, 0x5FAA, 0xD1AD, + 0x5FAB, 0x8FCE, 0x5FAC, 0x8FCF, 0x5FAD, 0xE1E6, 0x5FAE, 0xCEA2, 0x5FAF, 0x8FD0, 0x5FB0, 0x8FD1, 0x5FB1, 0x8FD2, 0x5FB2, 0x8FD3, + 0x5FB3, 0x8FD4, 0x5FB4, 0x8FD5, 0x5FB5, 0xE1E7, 0x5FB6, 0x8FD6, 0x5FB7, 0xB5C2, 0x5FB8, 0x8FD7, 0x5FB9, 0x8FD8, 0x5FBA, 0x8FD9, + 0x5FBB, 0x8FDA, 0x5FBC, 0xE1E8, 0x5FBD, 0xBBD5, 0x5FBE, 0x8FDB, 0x5FBF, 0x8FDC, 0x5FC0, 0x8FDD, 0x5FC1, 0x8FDE, 0x5FC2, 0x8FDF, + 0x5FC3, 0xD0C4, 0x5FC4, 0xE2E0, 0x5FC5, 0xB1D8, 0x5FC6, 0xD2E4, 0x5FC7, 0x8FE0, 0x5FC8, 0x8FE1, 0x5FC9, 0xE2E1, 0x5FCA, 0x8FE2, + 0x5FCB, 0x8FE3, 0x5FCC, 0xBCC9, 0x5FCD, 0xC8CC, 0x5FCE, 0x8FE4, 0x5FCF, 0xE2E3, 0x5FD0, 0xECFE, 0x5FD1, 0xECFD, 0x5FD2, 0xDFAF, + 0x5FD3, 0x8FE5, 0x5FD4, 0x8FE6, 0x5FD5, 0x8FE7, 0x5FD6, 0xE2E2, 0x5FD7, 0xD6BE, 0x5FD8, 0xCDFC, 0x5FD9, 0xC3A6, 0x5FDA, 0x8FE8, + 0x5FDB, 0x8FE9, 0x5FDC, 0x8FEA, 0x5FDD, 0xE3C3, 0x5FDE, 0x8FEB, 0x5FDF, 0x8FEC, 0x5FE0, 0xD6D2, 0x5FE1, 0xE2E7, 0x5FE2, 0x8FED, + 0x5FE3, 0x8FEE, 0x5FE4, 0xE2E8, 0x5FE5, 0x8FEF, 0x5FE6, 0x8FF0, 0x5FE7, 0xD3C7, 0x5FE8, 0x8FF1, 0x5FE9, 0x8FF2, 0x5FEA, 0xE2EC, + 0x5FEB, 0xBFEC, 0x5FEC, 0x8FF3, 0x5FED, 0xE2ED, 0x5FEE, 0xE2E5, 0x5FEF, 0x8FF4, 0x5FF0, 0x8FF5, 0x5FF1, 0xB3C0, 0x5FF2, 0x8FF6, + 0x5FF3, 0x8FF7, 0x5FF4, 0x8FF8, 0x5FF5, 0xC4EE, 0x5FF6, 0x8FF9, 0x5FF7, 0x8FFA, 0x5FF8, 0xE2EE, 0x5FF9, 0x8FFB, 0x5FFA, 0x8FFC, + 0x5FFB, 0xD0C3, 0x5FFC, 0x8FFD, 0x5FFD, 0xBAF6, 0x5FFE, 0xE2E9, 0x5FFF, 0xB7DE, 0x6000, 0xBBB3, 0x6001, 0xCCAC, 0x6002, 0xCBCB, + 0x6003, 0xE2E4, 0x6004, 0xE2E6, 0x6005, 0xE2EA, 0x6006, 0xE2EB, 0x6007, 0x8FFE, 0x6008, 0x9040, 0x6009, 0x9041, 0x600A, 0xE2F7, + 0x600B, 0x9042, 0x600C, 0x9043, 0x600D, 0xE2F4, 0x600E, 0xD4F5, 0x600F, 0xE2F3, 0x6010, 0x9044, 0x6011, 0x9045, 0x6012, 0xC5AD, + 0x6013, 0x9046, 0x6014, 0xD5FA, 0x6015, 0xC5C2, 0x6016, 0xB2C0, 0x6017, 0x9047, 0x6018, 0x9048, 0x6019, 0xE2EF, 0x601A, 0x9049, + 0x601B, 0xE2F2, 0x601C, 0xC1AF, 0x601D, 0xCBBC, 0x601E, 0x904A, 0x601F, 0x904B, 0x6020, 0xB5A1, 0x6021, 0xE2F9, 0x6022, 0x904C, + 0x6023, 0x904D, 0x6024, 0x904E, 0x6025, 0xBCB1, 0x6026, 0xE2F1, 0x6027, 0xD0D4, 0x6028, 0xD4B9, 0x6029, 0xE2F5, 0x602A, 0xB9D6, + 0x602B, 0xE2F6, 0x602C, 0x904F, 0x602D, 0x9050, 0x602E, 0x9051, 0x602F, 0xC7D3, 0x6030, 0x9052, 0x6031, 0x9053, 0x6032, 0x9054, + 0x6033, 0x9055, 0x6034, 0x9056, 0x6035, 0xE2F0, 0x6036, 0x9057, 0x6037, 0x9058, 0x6038, 0x9059, 0x6039, 0x905A, 0x603A, 0x905B, + 0x603B, 0xD7DC, 0x603C, 0xEDA1, 0x603D, 0x905C, 0x603E, 0x905D, 0x603F, 0xE2F8, 0x6040, 0x905E, 0x6041, 0xEDA5, 0x6042, 0xE2FE, + 0x6043, 0xCAD1, 0x6044, 0x905F, 0x6045, 0x9060, 0x6046, 0x9061, 0x6047, 0x9062, 0x6048, 0x9063, 0x6049, 0x9064, 0x604A, 0x9065, + 0x604B, 0xC1B5, 0x604C, 0x9066, 0x604D, 0xBBD0, 0x604E, 0x9067, 0x604F, 0x9068, 0x6050, 0xBFD6, 0x6051, 0x9069, 0x6052, 0xBAE3, + 0x6053, 0x906A, 0x6054, 0x906B, 0x6055, 0xCBA1, 0x6056, 0x906C, 0x6057, 0x906D, 0x6058, 0x906E, 0x6059, 0xEDA6, 0x605A, 0xEDA3, + 0x605B, 0x906F, 0x605C, 0x9070, 0x605D, 0xEDA2, 0x605E, 0x9071, 0x605F, 0x9072, 0x6060, 0x9073, 0x6061, 0x9074, 0x6062, 0xBBD6, + 0x6063, 0xEDA7, 0x6064, 0xD0F4, 0x6065, 0x9075, 0x6066, 0x9076, 0x6067, 0xEDA4, 0x6068, 0xBADE, 0x6069, 0xB6F7, 0x606A, 0xE3A1, + 0x606B, 0xB6B2, 0x606C, 0xCCF1, 0x606D, 0xB9A7, 0x606E, 0x9077, 0x606F, 0xCFA2, 0x6070, 0xC7A1, 0x6071, 0x9078, 0x6072, 0x9079, + 0x6073, 0xBFD2, 0x6074, 0x907A, 0x6075, 0x907B, 0x6076, 0xB6F1, 0x6077, 0x907C, 0x6078, 0xE2FA, 0x6079, 0xE2FB, 0x607A, 0xE2FD, + 0x607B, 0xE2FC, 0x607C, 0xC4D5, 0x607D, 0xE3A2, 0x607E, 0x907D, 0x607F, 0xD3C1, 0x6080, 0x907E, 0x6081, 0x9080, 0x6082, 0x9081, + 0x6083, 0xE3A7, 0x6084, 0xC7C4, 0x6085, 0x9082, 0x6086, 0x9083, 0x6087, 0x9084, 0x6088, 0x9085, 0x6089, 0xCFA4, 0x608A, 0x9086, + 0x608B, 0x9087, 0x608C, 0xE3A9, 0x608D, 0xBAB7, 0x608E, 0x9088, 0x608F, 0x9089, 0x6090, 0x908A, 0x6091, 0x908B, 0x6092, 0xE3A8, + 0x6093, 0x908C, 0x6094, 0xBBDA, 0x6095, 0x908D, 0x6096, 0xE3A3, 0x6097, 0x908E, 0x6098, 0x908F, 0x6099, 0x9090, 0x609A, 0xE3A4, + 0x609B, 0xE3AA, 0x609C, 0x9091, 0x609D, 0xE3A6, 0x609E, 0x9092, 0x609F, 0xCEF2, 0x60A0, 0xD3C6, 0x60A1, 0x9093, 0x60A2, 0x9094, + 0x60A3, 0xBBBC, 0x60A4, 0x9095, 0x60A5, 0x9096, 0x60A6, 0xD4C3, 0x60A7, 0x9097, 0x60A8, 0xC4FA, 0x60A9, 0x9098, 0x60AA, 0x9099, + 0x60AB, 0xEDA8, 0x60AC, 0xD0FC, 0x60AD, 0xE3A5, 0x60AE, 0x909A, 0x60AF, 0xC3F5, 0x60B0, 0x909B, 0x60B1, 0xE3AD, 0x60B2, 0xB1AF, + 0x60B3, 0x909C, 0x60B4, 0xE3B2, 0x60B5, 0x909D, 0x60B6, 0x909E, 0x60B7, 0x909F, 0x60B8, 0xBCC2, 0x60B9, 0x90A0, 0x60BA, 0x90A1, + 0x60BB, 0xE3AC, 0x60BC, 0xB5BF, 0x60BD, 0x90A2, 0x60BE, 0x90A3, 0x60BF, 0x90A4, 0x60C0, 0x90A5, 0x60C1, 0x90A6, 0x60C2, 0x90A7, + 0x60C3, 0x90A8, 0x60C4, 0x90A9, 0x60C5, 0xC7E9, 0x60C6, 0xE3B0, 0x60C7, 0x90AA, 0x60C8, 0x90AB, 0x60C9, 0x90AC, 0x60CA, 0xBEAA, + 0x60CB, 0xCDEF, 0x60CC, 0x90AD, 0x60CD, 0x90AE, 0x60CE, 0x90AF, 0x60CF, 0x90B0, 0x60D0, 0x90B1, 0x60D1, 0xBBF3, 0x60D2, 0x90B2, + 0x60D3, 0x90B3, 0x60D4, 0x90B4, 0x60D5, 0xCCE8, 0x60D6, 0x90B5, 0x60D7, 0x90B6, 0x60D8, 0xE3AF, 0x60D9, 0x90B7, 0x60DA, 0xE3B1, + 0x60DB, 0x90B8, 0x60DC, 0xCFA7, 0x60DD, 0xE3AE, 0x60DE, 0x90B9, 0x60DF, 0xCEA9, 0x60E0, 0xBBDD, 0x60E1, 0x90BA, 0x60E2, 0x90BB, + 0x60E3, 0x90BC, 0x60E4, 0x90BD, 0x60E5, 0x90BE, 0x60E6, 0xB5EB, 0x60E7, 0xBEE5, 0x60E8, 0xB2D2, 0x60E9, 0xB3CD, 0x60EA, 0x90BF, + 0x60EB, 0xB1B9, 0x60EC, 0xE3AB, 0x60ED, 0xB2D1, 0x60EE, 0xB5AC, 0x60EF, 0xB9DF, 0x60F0, 0xB6E8, 0x60F1, 0x90C0, 0x60F2, 0x90C1, + 0x60F3, 0xCFEB, 0x60F4, 0xE3B7, 0x60F5, 0x90C2, 0x60F6, 0xBBCC, 0x60F7, 0x90C3, 0x60F8, 0x90C4, 0x60F9, 0xC8C7, 0x60FA, 0xD0CA, + 0x60FB, 0x90C5, 0x60FC, 0x90C6, 0x60FD, 0x90C7, 0x60FE, 0x90C8, 0x60FF, 0x90C9, 0x6100, 0xE3B8, 0x6101, 0xB3EE, 0x6102, 0x90CA, + 0x6103, 0x90CB, 0x6104, 0x90CC, 0x6105, 0x90CD, 0x6106, 0xEDA9, 0x6107, 0x90CE, 0x6108, 0xD3FA, 0x6109, 0xD3E4, 0x610A, 0x90CF, + 0x610B, 0x90D0, 0x610C, 0x90D1, 0x610D, 0xEDAA, 0x610E, 0xE3B9, 0x610F, 0xD2E2, 0x6110, 0x90D2, 0x6111, 0x90D3, 0x6112, 0x90D4, + 0x6113, 0x90D5, 0x6114, 0x90D6, 0x6115, 0xE3B5, 0x6116, 0x90D7, 0x6117, 0x90D8, 0x6118, 0x90D9, 0x6119, 0x90DA, 0x611A, 0xD3DE, + 0x611B, 0x90DB, 0x611C, 0x90DC, 0x611D, 0x90DD, 0x611E, 0x90DE, 0x611F, 0xB8D0, 0x6120, 0xE3B3, 0x6121, 0x90DF, 0x6122, 0x90E0, + 0x6123, 0xE3B6, 0x6124, 0xB7DF, 0x6125, 0x90E1, 0x6126, 0xE3B4, 0x6127, 0xC0A2, 0x6128, 0x90E2, 0x6129, 0x90E3, 0x612A, 0x90E4, + 0x612B, 0xE3BA, 0x612C, 0x90E5, 0x612D, 0x90E6, 0x612E, 0x90E7, 0x612F, 0x90E8, 0x6130, 0x90E9, 0x6131, 0x90EA, 0x6132, 0x90EB, + 0x6133, 0x90EC, 0x6134, 0x90ED, 0x6135, 0x90EE, 0x6136, 0x90EF, 0x6137, 0x90F0, 0x6138, 0x90F1, 0x6139, 0x90F2, 0x613A, 0x90F3, + 0x613B, 0x90F4, 0x613C, 0x90F5, 0x613D, 0x90F6, 0x613E, 0x90F7, 0x613F, 0xD4B8, 0x6140, 0x90F8, 0x6141, 0x90F9, 0x6142, 0x90FA, + 0x6143, 0x90FB, 0x6144, 0x90FC, 0x6145, 0x90FD, 0x6146, 0x90FE, 0x6147, 0x9140, 0x6148, 0xB4C8, 0x6149, 0x9141, 0x614A, 0xE3BB, + 0x614B, 0x9142, 0x614C, 0xBBC5, 0x614D, 0x9143, 0x614E, 0xC9F7, 0x614F, 0x9144, 0x6150, 0x9145, 0x6151, 0xC9E5, 0x6152, 0x9146, + 0x6153, 0x9147, 0x6154, 0x9148, 0x6155, 0xC4BD, 0x6156, 0x9149, 0x6157, 0x914A, 0x6158, 0x914B, 0x6159, 0x914C, 0x615A, 0x914D, + 0x615B, 0x914E, 0x615C, 0x914F, 0x615D, 0xEDAB, 0x615E, 0x9150, 0x615F, 0x9151, 0x6160, 0x9152, 0x6161, 0x9153, 0x6162, 0xC2FD, + 0x6163, 0x9154, 0x6164, 0x9155, 0x6165, 0x9156, 0x6166, 0x9157, 0x6167, 0xBBDB, 0x6168, 0xBFAE, 0x6169, 0x9158, 0x616A, 0x9159, + 0x616B, 0x915A, 0x616C, 0x915B, 0x616D, 0x915C, 0x616E, 0x915D, 0x616F, 0x915E, 0x6170, 0xCEBF, 0x6171, 0x915F, 0x6172, 0x9160, + 0x6173, 0x9161, 0x6174, 0x9162, 0x6175, 0xE3BC, 0x6176, 0x9163, 0x6177, 0xBFB6, 0x6178, 0x9164, 0x6179, 0x9165, 0x617A, 0x9166, + 0x617B, 0x9167, 0x617C, 0x9168, 0x617D, 0x9169, 0x617E, 0x916A, 0x617F, 0x916B, 0x6180, 0x916C, 0x6181, 0x916D, 0x6182, 0x916E, + 0x6183, 0x916F, 0x6184, 0x9170, 0x6185, 0x9171, 0x6186, 0x9172, 0x6187, 0x9173, 0x6188, 0x9174, 0x6189, 0x9175, 0x618A, 0x9176, + 0x618B, 0xB1EF, 0x618C, 0x9177, 0x618D, 0x9178, 0x618E, 0xD4F7, 0x618F, 0x9179, 0x6190, 0x917A, 0x6191, 0x917B, 0x6192, 0x917C, + 0x6193, 0x917D, 0x6194, 0xE3BE, 0x6195, 0x917E, 0x6196, 0x9180, 0x6197, 0x9181, 0x6198, 0x9182, 0x6199, 0x9183, 0x619A, 0x9184, + 0x619B, 0x9185, 0x619C, 0x9186, 0x619D, 0xEDAD, 0x619E, 0x9187, 0x619F, 0x9188, 0x61A0, 0x9189, 0x61A1, 0x918A, 0x61A2, 0x918B, + 0x61A3, 0x918C, 0x61A4, 0x918D, 0x61A5, 0x918E, 0x61A6, 0x918F, 0x61A7, 0xE3BF, 0x61A8, 0xBAA9, 0x61A9, 0xEDAC, 0x61AA, 0x9190, + 0x61AB, 0x9191, 0x61AC, 0xE3BD, 0x61AD, 0x9192, 0x61AE, 0x9193, 0x61AF, 0x9194, 0x61B0, 0x9195, 0x61B1, 0x9196, 0x61B2, 0x9197, + 0x61B3, 0x9198, 0x61B4, 0x9199, 0x61B5, 0x919A, 0x61B6, 0x919B, 0x61B7, 0xE3C0, 0x61B8, 0x919C, 0x61B9, 0x919D, 0x61BA, 0x919E, + 0x61BB, 0x919F, 0x61BC, 0x91A0, 0x61BD, 0x91A1, 0x61BE, 0xBAB6, 0x61BF, 0x91A2, 0x61C0, 0x91A3, 0x61C1, 0x91A4, 0x61C2, 0xB6AE, + 0x61C3, 0x91A5, 0x61C4, 0x91A6, 0x61C5, 0x91A7, 0x61C6, 0x91A8, 0x61C7, 0x91A9, 0x61C8, 0xD0B8, 0x61C9, 0x91AA, 0x61CA, 0xB0C3, + 0x61CB, 0xEDAE, 0x61CC, 0x91AB, 0x61CD, 0x91AC, 0x61CE, 0x91AD, 0x61CF, 0x91AE, 0x61D0, 0x91AF, 0x61D1, 0xEDAF, 0x61D2, 0xC0C1, + 0x61D3, 0x91B0, 0x61D4, 0xE3C1, 0x61D5, 0x91B1, 0x61D6, 0x91B2, 0x61D7, 0x91B3, 0x61D8, 0x91B4, 0x61D9, 0x91B5, 0x61DA, 0x91B6, + 0x61DB, 0x91B7, 0x61DC, 0x91B8, 0x61DD, 0x91B9, 0x61DE, 0x91BA, 0x61DF, 0x91BB, 0x61E0, 0x91BC, 0x61E1, 0x91BD, 0x61E2, 0x91BE, + 0x61E3, 0x91BF, 0x61E4, 0x91C0, 0x61E5, 0x91C1, 0x61E6, 0xC5B3, 0x61E7, 0x91C2, 0x61E8, 0x91C3, 0x61E9, 0x91C4, 0x61EA, 0x91C5, + 0x61EB, 0x91C6, 0x61EC, 0x91C7, 0x61ED, 0x91C8, 0x61EE, 0x91C9, 0x61EF, 0x91CA, 0x61F0, 0x91CB, 0x61F1, 0x91CC, 0x61F2, 0x91CD, + 0x61F3, 0x91CE, 0x61F4, 0x91CF, 0x61F5, 0xE3C2, 0x61F6, 0x91D0, 0x61F7, 0x91D1, 0x61F8, 0x91D2, 0x61F9, 0x91D3, 0x61FA, 0x91D4, + 0x61FB, 0x91D5, 0x61FC, 0x91D6, 0x61FD, 0x91D7, 0x61FE, 0x91D8, 0x61FF, 0xDCB2, 0x6200, 0x91D9, 0x6201, 0x91DA, 0x6202, 0x91DB, + 0x6203, 0x91DC, 0x6204, 0x91DD, 0x6205, 0x91DE, 0x6206, 0xEDB0, 0x6207, 0x91DF, 0x6208, 0xB8EA, 0x6209, 0x91E0, 0x620A, 0xCEEC, + 0x620B, 0xEAA7, 0x620C, 0xD0E7, 0x620D, 0xCAF9, 0x620E, 0xC8D6, 0x620F, 0xCFB7, 0x6210, 0xB3C9, 0x6211, 0xCED2, 0x6212, 0xBDE4, + 0x6213, 0x91E1, 0x6214, 0x91E2, 0x6215, 0xE3DE, 0x6216, 0xBBF2, 0x6217, 0xEAA8, 0x6218, 0xD5BD, 0x6219, 0x91E3, 0x621A, 0xC6DD, + 0x621B, 0xEAA9, 0x621C, 0x91E4, 0x621D, 0x91E5, 0x621E, 0x91E6, 0x621F, 0xEAAA, 0x6220, 0x91E7, 0x6221, 0xEAAC, 0x6222, 0xEAAB, + 0x6223, 0x91E8, 0x6224, 0xEAAE, 0x6225, 0xEAAD, 0x6226, 0x91E9, 0x6227, 0x91EA, 0x6228, 0x91EB, 0x6229, 0x91EC, 0x622A, 0xBDD8, + 0x622B, 0x91ED, 0x622C, 0xEAAF, 0x622D, 0x91EE, 0x622E, 0xC2BE, 0x622F, 0x91EF, 0x6230, 0x91F0, 0x6231, 0x91F1, 0x6232, 0x91F2, + 0x6233, 0xB4C1, 0x6234, 0xB4F7, 0x6235, 0x91F3, 0x6236, 0x91F4, 0x6237, 0xBBA7, 0x6238, 0x91F5, 0x6239, 0x91F6, 0x623A, 0x91F7, + 0x623B, 0x91F8, 0x623C, 0x91F9, 0x623D, 0xECE6, 0x623E, 0xECE5, 0x623F, 0xB7BF, 0x6240, 0xCBF9, 0x6241, 0xB1E2, 0x6242, 0x91FA, + 0x6243, 0xECE7, 0x6244, 0x91FB, 0x6245, 0x91FC, 0x6246, 0x91FD, 0x6247, 0xC9C8, 0x6248, 0xECE8, 0x6249, 0xECE9, 0x624A, 0x91FE, + 0x624B, 0xCAD6, 0x624C, 0xDED0, 0x624D, 0xB2C5, 0x624E, 0xD4FA, 0x624F, 0x9240, 0x6250, 0x9241, 0x6251, 0xC6CB, 0x6252, 0xB0C7, + 0x6253, 0xB4F2, 0x6254, 0xC8D3, 0x6255, 0x9242, 0x6256, 0x9243, 0x6257, 0x9244, 0x6258, 0xCDD0, 0x6259, 0x9245, 0x625A, 0x9246, + 0x625B, 0xBFB8, 0x625C, 0x9247, 0x625D, 0x9248, 0x625E, 0x9249, 0x625F, 0x924A, 0x6260, 0x924B, 0x6261, 0x924C, 0x6262, 0x924D, + 0x6263, 0xBFDB, 0x6264, 0x924E, 0x6265, 0x924F, 0x6266, 0xC7A4, 0x6267, 0xD6B4, 0x6268, 0x9250, 0x6269, 0xC0A9, 0x626A, 0xDED1, + 0x626B, 0xC9A8, 0x626C, 0xD1EF, 0x626D, 0xC5A4, 0x626E, 0xB0E7, 0x626F, 0xB3B6, 0x6270, 0xC8C5, 0x6271, 0x9251, 0x6272, 0x9252, + 0x6273, 0xB0E2, 0x6274, 0x9253, 0x6275, 0x9254, 0x6276, 0xB7F6, 0x6277, 0x9255, 0x6278, 0x9256, 0x6279, 0xC5FA, 0x627A, 0x9257, + 0x627B, 0x9258, 0x627C, 0xB6F3, 0x627D, 0x9259, 0x627E, 0xD5D2, 0x627F, 0xB3D0, 0x6280, 0xBCBC, 0x6281, 0x925A, 0x6282, 0x925B, + 0x6283, 0x925C, 0x6284, 0xB3AD, 0x6285, 0x925D, 0x6286, 0x925E, 0x6287, 0x925F, 0x6288, 0x9260, 0x6289, 0xBEF1, 0x628A, 0xB0D1, + 0x628B, 0x9261, 0x628C, 0x9262, 0x628D, 0x9263, 0x628E, 0x9264, 0x628F, 0x9265, 0x6290, 0x9266, 0x6291, 0xD2D6, 0x6292, 0xCAE3, + 0x6293, 0xD7A5, 0x6294, 0x9267, 0x6295, 0xCDB6, 0x6296, 0xB6B6, 0x6297, 0xBFB9, 0x6298, 0xD5DB, 0x6299, 0x9268, 0x629A, 0xB8A7, + 0x629B, 0xC5D7, 0x629C, 0x9269, 0x629D, 0x926A, 0x629E, 0x926B, 0x629F, 0xDED2, 0x62A0, 0xBFD9, 0x62A1, 0xC2D5, 0x62A2, 0xC7C0, + 0x62A3, 0x926C, 0x62A4, 0xBBA4, 0x62A5, 0xB1A8, 0x62A6, 0x926D, 0x62A7, 0x926E, 0x62A8, 0xC5EA, 0x62A9, 0x926F, 0x62AA, 0x9270, + 0x62AB, 0xC5FB, 0x62AC, 0xCCA7, 0x62AD, 0x9271, 0x62AE, 0x9272, 0x62AF, 0x9273, 0x62B0, 0x9274, 0x62B1, 0xB1A7, 0x62B2, 0x9275, + 0x62B3, 0x9276, 0x62B4, 0x9277, 0x62B5, 0xB5D6, 0x62B6, 0x9278, 0x62B7, 0x9279, 0x62B8, 0x927A, 0x62B9, 0xC4A8, 0x62BA, 0x927B, + 0x62BB, 0xDED3, 0x62BC, 0xD1BA, 0x62BD, 0xB3E9, 0x62BE, 0x927C, 0x62BF, 0xC3F2, 0x62C0, 0x927D, 0x62C1, 0x927E, 0x62C2, 0xB7F7, + 0x62C3, 0x9280, 0x62C4, 0xD6F4, 0x62C5, 0xB5A3, 0x62C6, 0xB2F0, 0x62C7, 0xC4B4, 0x62C8, 0xC4E9, 0x62C9, 0xC0AD, 0x62CA, 0xDED4, + 0x62CB, 0x9281, 0x62CC, 0xB0E8, 0x62CD, 0xC5C4, 0x62CE, 0xC1E0, 0x62CF, 0x9282, 0x62D0, 0xB9D5, 0x62D1, 0x9283, 0x62D2, 0xBEDC, + 0x62D3, 0xCDD8, 0x62D4, 0xB0CE, 0x62D5, 0x9284, 0x62D6, 0xCDCF, 0x62D7, 0xDED6, 0x62D8, 0xBED0, 0x62D9, 0xD7BE, 0x62DA, 0xDED5, + 0x62DB, 0xD5D0, 0x62DC, 0xB0DD, 0x62DD, 0x9285, 0x62DE, 0x9286, 0x62DF, 0xC4E2, 0x62E0, 0x9287, 0x62E1, 0x9288, 0x62E2, 0xC2A3, + 0x62E3, 0xBCF0, 0x62E4, 0x9289, 0x62E5, 0xD3B5, 0x62E6, 0xC0B9, 0x62E7, 0xC5A1, 0x62E8, 0xB2A6, 0x62E9, 0xD4F1, 0x62EA, 0x928A, + 0x62EB, 0x928B, 0x62EC, 0xC0A8, 0x62ED, 0xCAC3, 0x62EE, 0xDED7, 0x62EF, 0xD5FC, 0x62F0, 0x928C, 0x62F1, 0xB9B0, 0x62F2, 0x928D, + 0x62F3, 0xC8AD, 0x62F4, 0xCBA9, 0x62F5, 0x928E, 0x62F6, 0xDED9, 0x62F7, 0xBFBD, 0x62F8, 0x928F, 0x62F9, 0x9290, 0x62FA, 0x9291, + 0x62FB, 0x9292, 0x62FC, 0xC6B4, 0x62FD, 0xD7A7, 0x62FE, 0xCAB0, 0x62FF, 0xC4C3, 0x6300, 0x9293, 0x6301, 0xB3D6, 0x6302, 0xB9D2, + 0x6303, 0x9294, 0x6304, 0x9295, 0x6305, 0x9296, 0x6306, 0x9297, 0x6307, 0xD6B8, 0x6308, 0xEAFC, 0x6309, 0xB0B4, 0x630A, 0x9298, + 0x630B, 0x9299, 0x630C, 0x929A, 0x630D, 0x929B, 0x630E, 0xBFE6, 0x630F, 0x929C, 0x6310, 0x929D, 0x6311, 0xCCF4, 0x6312, 0x929E, + 0x6313, 0x929F, 0x6314, 0x92A0, 0x6315, 0x92A1, 0x6316, 0xCDDA, 0x6317, 0x92A2, 0x6318, 0x92A3, 0x6319, 0x92A4, 0x631A, 0xD6BF, + 0x631B, 0xC2CE, 0x631C, 0x92A5, 0x631D, 0xCECE, 0x631E, 0xCCA2, 0x631F, 0xD0AE, 0x6320, 0xC4D3, 0x6321, 0xB5B2, 0x6322, 0xDED8, + 0x6323, 0xD5F5, 0x6324, 0xBCB7, 0x6325, 0xBBD3, 0x6326, 0x92A6, 0x6327, 0x92A7, 0x6328, 0xB0A4, 0x6329, 0x92A8, 0x632A, 0xC5B2, + 0x632B, 0xB4EC, 0x632C, 0x92A9, 0x632D, 0x92AA, 0x632E, 0x92AB, 0x632F, 0xD5F1, 0x6330, 0x92AC, 0x6331, 0x92AD, 0x6332, 0xEAFD, + 0x6333, 0x92AE, 0x6334, 0x92AF, 0x6335, 0x92B0, 0x6336, 0x92B1, 0x6337, 0x92B2, 0x6338, 0x92B3, 0x6339, 0xDEDA, 0x633A, 0xCDA6, + 0x633B, 0x92B4, 0x633C, 0x92B5, 0x633D, 0xCDEC, 0x633E, 0x92B6, 0x633F, 0x92B7, 0x6340, 0x92B8, 0x6341, 0x92B9, 0x6342, 0xCEE6, + 0x6343, 0xDEDC, 0x6344, 0x92BA, 0x6345, 0xCDB1, 0x6346, 0xC0A6, 0x6347, 0x92BB, 0x6348, 0x92BC, 0x6349, 0xD7BD, 0x634A, 0x92BD, + 0x634B, 0xDEDB, 0x634C, 0xB0C6, 0x634D, 0xBAB4, 0x634E, 0xC9D3, 0x634F, 0xC4F3, 0x6350, 0xBEE8, 0x6351, 0x92BE, 0x6352, 0x92BF, + 0x6353, 0x92C0, 0x6354, 0x92C1, 0x6355, 0xB2B6, 0x6356, 0x92C2, 0x6357, 0x92C3, 0x6358, 0x92C4, 0x6359, 0x92C5, 0x635A, 0x92C6, + 0x635B, 0x92C7, 0x635C, 0x92C8, 0x635D, 0x92C9, 0x635E, 0xC0CC, 0x635F, 0xCBF0, 0x6360, 0x92CA, 0x6361, 0xBCF1, 0x6362, 0xBBBB, + 0x6363, 0xB5B7, 0x6364, 0x92CB, 0x6365, 0x92CC, 0x6366, 0x92CD, 0x6367, 0xC5F5, 0x6368, 0x92CE, 0x6369, 0xDEE6, 0x636A, 0x92CF, + 0x636B, 0x92D0, 0x636C, 0x92D1, 0x636D, 0xDEE3, 0x636E, 0xBEDD, 0x636F, 0x92D2, 0x6370, 0x92D3, 0x6371, 0xDEDF, 0x6372, 0x92D4, + 0x6373, 0x92D5, 0x6374, 0x92D6, 0x6375, 0x92D7, 0x6376, 0xB4B7, 0x6377, 0xBDDD, 0x6378, 0x92D8, 0x6379, 0x92D9, 0x637A, 0xDEE0, + 0x637B, 0xC4ED, 0x637C, 0x92DA, 0x637D, 0x92DB, 0x637E, 0x92DC, 0x637F, 0x92DD, 0x6380, 0xCFC6, 0x6381, 0x92DE, 0x6382, 0xB5E0, + 0x6383, 0x92DF, 0x6384, 0x92E0, 0x6385, 0x92E1, 0x6386, 0x92E2, 0x6387, 0xB6DE, 0x6388, 0xCADA, 0x6389, 0xB5F4, 0x638A, 0xDEE5, + 0x638B, 0x92E3, 0x638C, 0xD5C6, 0x638D, 0x92E4, 0x638E, 0xDEE1, 0x638F, 0xCCCD, 0x6390, 0xC6FE, 0x6391, 0x92E5, 0x6392, 0xC5C5, + 0x6393, 0x92E6, 0x6394, 0x92E7, 0x6395, 0x92E8, 0x6396, 0xD2B4, 0x6397, 0x92E9, 0x6398, 0xBEF2, 0x6399, 0x92EA, 0x639A, 0x92EB, + 0x639B, 0x92EC, 0x639C, 0x92ED, 0x639D, 0x92EE, 0x639E, 0x92EF, 0x639F, 0x92F0, 0x63A0, 0xC2D3, 0x63A1, 0x92F1, 0x63A2, 0xCCBD, + 0x63A3, 0xB3B8, 0x63A4, 0x92F2, 0x63A5, 0xBDD3, 0x63A6, 0x92F3, 0x63A7, 0xBFD8, 0x63A8, 0xCDC6, 0x63A9, 0xD1DA, 0x63AA, 0xB4EB, + 0x63AB, 0x92F4, 0x63AC, 0xDEE4, 0x63AD, 0xDEDD, 0x63AE, 0xDEE7, 0x63AF, 0x92F5, 0x63B0, 0xEAFE, 0x63B1, 0x92F6, 0x63B2, 0x92F7, + 0x63B3, 0xC2B0, 0x63B4, 0xDEE2, 0x63B5, 0x92F8, 0x63B6, 0x92F9, 0x63B7, 0xD6C0, 0x63B8, 0xB5A7, 0x63B9, 0x92FA, 0x63BA, 0xB2F4, + 0x63BB, 0x92FB, 0x63BC, 0xDEE8, 0x63BD, 0x92FC, 0x63BE, 0xDEF2, 0x63BF, 0x92FD, 0x63C0, 0x92FE, 0x63C1, 0x9340, 0x63C2, 0x9341, + 0x63C3, 0x9342, 0x63C4, 0xDEED, 0x63C5, 0x9343, 0x63C6, 0xDEF1, 0x63C7, 0x9344, 0x63C8, 0x9345, 0x63C9, 0xC8E0, 0x63CA, 0x9346, + 0x63CB, 0x9347, 0x63CC, 0x9348, 0x63CD, 0xD7E1, 0x63CE, 0xDEEF, 0x63CF, 0xC3E8, 0x63D0, 0xCCE1, 0x63D1, 0x9349, 0x63D2, 0xB2E5, + 0x63D3, 0x934A, 0x63D4, 0x934B, 0x63D5, 0x934C, 0x63D6, 0xD2BE, 0x63D7, 0x934D, 0x63D8, 0x934E, 0x63D9, 0x934F, 0x63DA, 0x9350, + 0x63DB, 0x9351, 0x63DC, 0x9352, 0x63DD, 0x9353, 0x63DE, 0xDEEE, 0x63DF, 0x9354, 0x63E0, 0xDEEB, 0x63E1, 0xCED5, 0x63E2, 0x9355, + 0x63E3, 0xB4A7, 0x63E4, 0x9356, 0x63E5, 0x9357, 0x63E6, 0x9358, 0x63E7, 0x9359, 0x63E8, 0x935A, 0x63E9, 0xBFAB, 0x63EA, 0xBEBE, + 0x63EB, 0x935B, 0x63EC, 0x935C, 0x63ED, 0xBDD2, 0x63EE, 0x935D, 0x63EF, 0x935E, 0x63F0, 0x935F, 0x63F1, 0x9360, 0x63F2, 0xDEE9, + 0x63F3, 0x9361, 0x63F4, 0xD4AE, 0x63F5, 0x9362, 0x63F6, 0xDEDE, 0x63F7, 0x9363, 0x63F8, 0xDEEA, 0x63F9, 0x9364, 0x63FA, 0x9365, + 0x63FB, 0x9366, 0x63FC, 0x9367, 0x63FD, 0xC0BF, 0x63FE, 0x9368, 0x63FF, 0xDEEC, 0x6400, 0xB2F3, 0x6401, 0xB8E9, 0x6402, 0xC2A7, + 0x6403, 0x9369, 0x6404, 0x936A, 0x6405, 0xBDC1, 0x6406, 0x936B, 0x6407, 0x936C, 0x6408, 0x936D, 0x6409, 0x936E, 0x640A, 0x936F, + 0x640B, 0xDEF5, 0x640C, 0xDEF8, 0x640D, 0x9370, 0x640E, 0x9371, 0x640F, 0xB2AB, 0x6410, 0xB4A4, 0x6411, 0x9372, 0x6412, 0x9373, + 0x6413, 0xB4EA, 0x6414, 0xC9A6, 0x6415, 0x9374, 0x6416, 0x9375, 0x6417, 0x9376, 0x6418, 0x9377, 0x6419, 0x9378, 0x641A, 0x9379, + 0x641B, 0xDEF6, 0x641C, 0xCBD1, 0x641D, 0x937A, 0x641E, 0xB8E3, 0x641F, 0x937B, 0x6420, 0xDEF7, 0x6421, 0xDEFA, 0x6422, 0x937C, + 0x6423, 0x937D, 0x6424, 0x937E, 0x6425, 0x9380, 0x6426, 0xDEF9, 0x6427, 0x9381, 0x6428, 0x9382, 0x6429, 0x9383, 0x642A, 0xCCC2, + 0x642B, 0x9384, 0x642C, 0xB0E1, 0x642D, 0xB4EE, 0x642E, 0x9385, 0x642F, 0x9386, 0x6430, 0x9387, 0x6431, 0x9388, 0x6432, 0x9389, + 0x6433, 0x938A, 0x6434, 0xE5BA, 0x6435, 0x938B, 0x6436, 0x938C, 0x6437, 0x938D, 0x6438, 0x938E, 0x6439, 0x938F, 0x643A, 0xD0AF, + 0x643B, 0x9390, 0x643C, 0x9391, 0x643D, 0xB2EB, 0x643E, 0x9392, 0x643F, 0xEBA1, 0x6440, 0x9393, 0x6441, 0xDEF4, 0x6442, 0x9394, + 0x6443, 0x9395, 0x6444, 0xC9E3, 0x6445, 0xDEF3, 0x6446, 0xB0DA, 0x6447, 0xD2A1, 0x6448, 0xB1F7, 0x6449, 0x9396, 0x644A, 0xCCAF, + 0x644B, 0x9397, 0x644C, 0x9398, 0x644D, 0x9399, 0x644E, 0x939A, 0x644F, 0x939B, 0x6450, 0x939C, 0x6451, 0x939D, 0x6452, 0xDEF0, + 0x6453, 0x939E, 0x6454, 0xCBA4, 0x6455, 0x939F, 0x6456, 0x93A0, 0x6457, 0x93A1, 0x6458, 0xD5AA, 0x6459, 0x93A2, 0x645A, 0x93A3, + 0x645B, 0x93A4, 0x645C, 0x93A5, 0x645D, 0x93A6, 0x645E, 0xDEFB, 0x645F, 0x93A7, 0x6460, 0x93A8, 0x6461, 0x93A9, 0x6462, 0x93AA, + 0x6463, 0x93AB, 0x6464, 0x93AC, 0x6465, 0x93AD, 0x6466, 0x93AE, 0x6467, 0xB4DD, 0x6468, 0x93AF, 0x6469, 0xC4A6, 0x646A, 0x93B0, + 0x646B, 0x93B1, 0x646C, 0x93B2, 0x646D, 0xDEFD, 0x646E, 0x93B3, 0x646F, 0x93B4, 0x6470, 0x93B5, 0x6471, 0x93B6, 0x6472, 0x93B7, + 0x6473, 0x93B8, 0x6474, 0x93B9, 0x6475, 0x93BA, 0x6476, 0x93BB, 0x6477, 0x93BC, 0x6478, 0xC3FE, 0x6479, 0xC4A1, 0x647A, 0xDFA1, + 0x647B, 0x93BD, 0x647C, 0x93BE, 0x647D, 0x93BF, 0x647E, 0x93C0, 0x647F, 0x93C1, 0x6480, 0x93C2, 0x6481, 0x93C3, 0x6482, 0xC1CC, + 0x6483, 0x93C4, 0x6484, 0xDEFC, 0x6485, 0xBEEF, 0x6486, 0x93C5, 0x6487, 0xC6B2, 0x6488, 0x93C6, 0x6489, 0x93C7, 0x648A, 0x93C8, + 0x648B, 0x93C9, 0x648C, 0x93CA, 0x648D, 0x93CB, 0x648E, 0x93CC, 0x648F, 0x93CD, 0x6490, 0x93CE, 0x6491, 0xB3C5, 0x6492, 0xC8F6, + 0x6493, 0x93CF, 0x6494, 0x93D0, 0x6495, 0xCBBA, 0x6496, 0xDEFE, 0x6497, 0x93D1, 0x6498, 0x93D2, 0x6499, 0xDFA4, 0x649A, 0x93D3, + 0x649B, 0x93D4, 0x649C, 0x93D5, 0x649D, 0x93D6, 0x649E, 0xD7B2, 0x649F, 0x93D7, 0x64A0, 0x93D8, 0x64A1, 0x93D9, 0x64A2, 0x93DA, + 0x64A3, 0x93DB, 0x64A4, 0xB3B7, 0x64A5, 0x93DC, 0x64A6, 0x93DD, 0x64A7, 0x93DE, 0x64A8, 0x93DF, 0x64A9, 0xC1C3, 0x64AA, 0x93E0, + 0x64AB, 0x93E1, 0x64AC, 0xC7CB, 0x64AD, 0xB2A5, 0x64AE, 0xB4E9, 0x64AF, 0x93E2, 0x64B0, 0xD7AB, 0x64B1, 0x93E3, 0x64B2, 0x93E4, + 0x64B3, 0x93E5, 0x64B4, 0x93E6, 0x64B5, 0xC4EC, 0x64B6, 0x93E7, 0x64B7, 0xDFA2, 0x64B8, 0xDFA3, 0x64B9, 0x93E8, 0x64BA, 0xDFA5, + 0x64BB, 0x93E9, 0x64BC, 0xBAB3, 0x64BD, 0x93EA, 0x64BE, 0x93EB, 0x64BF, 0x93EC, 0x64C0, 0xDFA6, 0x64C1, 0x93ED, 0x64C2, 0xC0DE, + 0x64C3, 0x93EE, 0x64C4, 0x93EF, 0x64C5, 0xC9C3, 0x64C6, 0x93F0, 0x64C7, 0x93F1, 0x64C8, 0x93F2, 0x64C9, 0x93F3, 0x64CA, 0x93F4, + 0x64CB, 0x93F5, 0x64CC, 0x93F6, 0x64CD, 0xB2D9, 0x64CE, 0xC7E6, 0x64CF, 0x93F7, 0x64D0, 0xDFA7, 0x64D1, 0x93F8, 0x64D2, 0xC7DC, + 0x64D3, 0x93F9, 0x64D4, 0x93FA, 0x64D5, 0x93FB, 0x64D6, 0x93FC, 0x64D7, 0xDFA8, 0x64D8, 0xEBA2, 0x64D9, 0x93FD, 0x64DA, 0x93FE, + 0x64DB, 0x9440, 0x64DC, 0x9441, 0x64DD, 0x9442, 0x64DE, 0xCBD3, 0x64DF, 0x9443, 0x64E0, 0x9444, 0x64E1, 0x9445, 0x64E2, 0xDFAA, + 0x64E3, 0x9446, 0x64E4, 0xDFA9, 0x64E5, 0x9447, 0x64E6, 0xB2C1, 0x64E7, 0x9448, 0x64E8, 0x9449, 0x64E9, 0x944A, 0x64EA, 0x944B, + 0x64EB, 0x944C, 0x64EC, 0x944D, 0x64ED, 0x944E, 0x64EE, 0x944F, 0x64EF, 0x9450, 0x64F0, 0x9451, 0x64F1, 0x9452, 0x64F2, 0x9453, + 0x64F3, 0x9454, 0x64F4, 0x9455, 0x64F5, 0x9456, 0x64F6, 0x9457, 0x64F7, 0x9458, 0x64F8, 0x9459, 0x64F9, 0x945A, 0x64FA, 0x945B, + 0x64FB, 0x945C, 0x64FC, 0x945D, 0x64FD, 0x945E, 0x64FE, 0x945F, 0x64FF, 0x9460, 0x6500, 0xC5CA, 0x6501, 0x9461, 0x6502, 0x9462, + 0x6503, 0x9463, 0x6504, 0x9464, 0x6505, 0x9465, 0x6506, 0x9466, 0x6507, 0x9467, 0x6508, 0x9468, 0x6509, 0xDFAB, 0x650A, 0x9469, + 0x650B, 0x946A, 0x650C, 0x946B, 0x650D, 0x946C, 0x650E, 0x946D, 0x650F, 0x946E, 0x6510, 0x946F, 0x6511, 0x9470, 0x6512, 0xD4DC, + 0x6513, 0x9471, 0x6514, 0x9472, 0x6515, 0x9473, 0x6516, 0x9474, 0x6517, 0x9475, 0x6518, 0xC8C1, 0x6519, 0x9476, 0x651A, 0x9477, + 0x651B, 0x9478, 0x651C, 0x9479, 0x651D, 0x947A, 0x651E, 0x947B, 0x651F, 0x947C, 0x6520, 0x947D, 0x6521, 0x947E, 0x6522, 0x9480, + 0x6523, 0x9481, 0x6524, 0x9482, 0x6525, 0xDFAC, 0x6526, 0x9483, 0x6527, 0x9484, 0x6528, 0x9485, 0x6529, 0x9486, 0x652A, 0x9487, + 0x652B, 0xBEF0, 0x652C, 0x9488, 0x652D, 0x9489, 0x652E, 0xDFAD, 0x652F, 0xD6A7, 0x6530, 0x948A, 0x6531, 0x948B, 0x6532, 0x948C, + 0x6533, 0x948D, 0x6534, 0xEAB7, 0x6535, 0xEBB6, 0x6536, 0xCAD5, 0x6537, 0x948E, 0x6538, 0xD8FC, 0x6539, 0xB8C4, 0x653A, 0x948F, + 0x653B, 0xB9A5, 0x653C, 0x9490, 0x653D, 0x9491, 0x653E, 0xB7C5, 0x653F, 0xD5FE, 0x6540, 0x9492, 0x6541, 0x9493, 0x6542, 0x9494, + 0x6543, 0x9495, 0x6544, 0x9496, 0x6545, 0xB9CA, 0x6546, 0x9497, 0x6547, 0x9498, 0x6548, 0xD0A7, 0x6549, 0xF4CD, 0x654A, 0x9499, + 0x654B, 0x949A, 0x654C, 0xB5D0, 0x654D, 0x949B, 0x654E, 0x949C, 0x654F, 0xC3F4, 0x6550, 0x949D, 0x6551, 0xBEC8, 0x6552, 0x949E, + 0x6553, 0x949F, 0x6554, 0x94A0, 0x6555, 0xEBB7, 0x6556, 0xB0BD, 0x6557, 0x94A1, 0x6558, 0x94A2, 0x6559, 0xBDCC, 0x655A, 0x94A3, + 0x655B, 0xC1B2, 0x655C, 0x94A4, 0x655D, 0xB1D6, 0x655E, 0xB3A8, 0x655F, 0x94A5, 0x6560, 0x94A6, 0x6561, 0x94A7, 0x6562, 0xB8D2, + 0x6563, 0xC9A2, 0x6564, 0x94A8, 0x6565, 0x94A9, 0x6566, 0xB6D8, 0x6567, 0x94AA, 0x6568, 0x94AB, 0x6569, 0x94AC, 0x656A, 0x94AD, + 0x656B, 0xEBB8, 0x656C, 0xBEB4, 0x656D, 0x94AE, 0x656E, 0x94AF, 0x656F, 0x94B0, 0x6570, 0xCAFD, 0x6571, 0x94B1, 0x6572, 0xC7C3, + 0x6573, 0x94B2, 0x6574, 0xD5FB, 0x6575, 0x94B3, 0x6576, 0x94B4, 0x6577, 0xB7F3, 0x6578, 0x94B5, 0x6579, 0x94B6, 0x657A, 0x94B7, + 0x657B, 0x94B8, 0x657C, 0x94B9, 0x657D, 0x94BA, 0x657E, 0x94BB, 0x657F, 0x94BC, 0x6580, 0x94BD, 0x6581, 0x94BE, 0x6582, 0x94BF, + 0x6583, 0x94C0, 0x6584, 0x94C1, 0x6585, 0x94C2, 0x6586, 0x94C3, 0x6587, 0xCEC4, 0x6588, 0x94C4, 0x6589, 0x94C5, 0x658A, 0x94C6, + 0x658B, 0xD5AB, 0x658C, 0xB1F3, 0x658D, 0x94C7, 0x658E, 0x94C8, 0x658F, 0x94C9, 0x6590, 0xECB3, 0x6591, 0xB0DF, 0x6592, 0x94CA, + 0x6593, 0xECB5, 0x6594, 0x94CB, 0x6595, 0x94CC, 0x6596, 0x94CD, 0x6597, 0xB6B7, 0x6598, 0x94CE, 0x6599, 0xC1CF, 0x659A, 0x94CF, + 0x659B, 0xF5FA, 0x659C, 0xD0B1, 0x659D, 0x94D0, 0x659E, 0x94D1, 0x659F, 0xD5E5, 0x65A0, 0x94D2, 0x65A1, 0xCED3, 0x65A2, 0x94D3, + 0x65A3, 0x94D4, 0x65A4, 0xBDEF, 0x65A5, 0xB3E2, 0x65A6, 0x94D5, 0x65A7, 0xB8AB, 0x65A8, 0x94D6, 0x65A9, 0xD5B6, 0x65AA, 0x94D7, + 0x65AB, 0xEDBD, 0x65AC, 0x94D8, 0x65AD, 0xB6CF, 0x65AE, 0x94D9, 0x65AF, 0xCBB9, 0x65B0, 0xD0C2, 0x65B1, 0x94DA, 0x65B2, 0x94DB, + 0x65B3, 0x94DC, 0x65B4, 0x94DD, 0x65B5, 0x94DE, 0x65B6, 0x94DF, 0x65B7, 0x94E0, 0x65B8, 0x94E1, 0x65B9, 0xB7BD, 0x65BA, 0x94E2, + 0x65BB, 0x94E3, 0x65BC, 0xECB6, 0x65BD, 0xCAA9, 0x65BE, 0x94E4, 0x65BF, 0x94E5, 0x65C0, 0x94E6, 0x65C1, 0xC5D4, 0x65C2, 0x94E7, + 0x65C3, 0xECB9, 0x65C4, 0xECB8, 0x65C5, 0xC2C3, 0x65C6, 0xECB7, 0x65C7, 0x94E8, 0x65C8, 0x94E9, 0x65C9, 0x94EA, 0x65CA, 0x94EB, + 0x65CB, 0xD0FD, 0x65CC, 0xECBA, 0x65CD, 0x94EC, 0x65CE, 0xECBB, 0x65CF, 0xD7E5, 0x65D0, 0x94ED, 0x65D1, 0x94EE, 0x65D2, 0xECBC, + 0x65D3, 0x94EF, 0x65D4, 0x94F0, 0x65D5, 0x94F1, 0x65D6, 0xECBD, 0x65D7, 0xC6EC, 0x65D8, 0x94F2, 0x65D9, 0x94F3, 0x65DA, 0x94F4, + 0x65DB, 0x94F5, 0x65DC, 0x94F6, 0x65DD, 0x94F7, 0x65DE, 0x94F8, 0x65DF, 0x94F9, 0x65E0, 0xCEDE, 0x65E1, 0x94FA, 0x65E2, 0xBCC8, + 0x65E3, 0x94FB, 0x65E4, 0x94FC, 0x65E5, 0xC8D5, 0x65E6, 0xB5A9, 0x65E7, 0xBEC9, 0x65E8, 0xD6BC, 0x65E9, 0xD4E7, 0x65EA, 0x94FD, + 0x65EB, 0x94FE, 0x65EC, 0xD1AE, 0x65ED, 0xD0F1, 0x65EE, 0xEAB8, 0x65EF, 0xEAB9, 0x65F0, 0xEABA, 0x65F1, 0xBAB5, 0x65F2, 0x9540, + 0x65F3, 0x9541, 0x65F4, 0x9542, 0x65F5, 0x9543, 0x65F6, 0xCAB1, 0x65F7, 0xBFF5, 0x65F8, 0x9544, 0x65F9, 0x9545, 0x65FA, 0xCDFA, + 0x65FB, 0x9546, 0x65FC, 0x9547, 0x65FD, 0x9548, 0x65FE, 0x9549, 0x65FF, 0x954A, 0x6600, 0xEAC0, 0x6601, 0x954B, 0x6602, 0xB0BA, + 0x6603, 0xEABE, 0x6604, 0x954C, 0x6605, 0x954D, 0x6606, 0xC0A5, 0x6607, 0x954E, 0x6608, 0x954F, 0x6609, 0x9550, 0x660A, 0xEABB, + 0x660B, 0x9551, 0x660C, 0xB2FD, 0x660D, 0x9552, 0x660E, 0xC3F7, 0x660F, 0xBBE8, 0x6610, 0x9553, 0x6611, 0x9554, 0x6612, 0x9555, + 0x6613, 0xD2D7, 0x6614, 0xCEF4, 0x6615, 0xEABF, 0x6616, 0x9556, 0x6617, 0x9557, 0x6618, 0x9558, 0x6619, 0xEABC, 0x661A, 0x9559, + 0x661B, 0x955A, 0x661C, 0x955B, 0x661D, 0xEAC3, 0x661E, 0x955C, 0x661F, 0xD0C7, 0x6620, 0xD3B3, 0x6621, 0x955D, 0x6622, 0x955E, + 0x6623, 0x955F, 0x6624, 0x9560, 0x6625, 0xB4BA, 0x6626, 0x9561, 0x6627, 0xC3C1, 0x6628, 0xD7F2, 0x6629, 0x9562, 0x662A, 0x9563, + 0x662B, 0x9564, 0x662C, 0x9565, 0x662D, 0xD5D1, 0x662E, 0x9566, 0x662F, 0xCAC7, 0x6630, 0x9567, 0x6631, 0xEAC5, 0x6632, 0x9568, + 0x6633, 0x9569, 0x6634, 0xEAC4, 0x6635, 0xEAC7, 0x6636, 0xEAC6, 0x6637, 0x956A, 0x6638, 0x956B, 0x6639, 0x956C, 0x663A, 0x956D, + 0x663B, 0x956E, 0x663C, 0xD6E7, 0x663D, 0x956F, 0x663E, 0xCFD4, 0x663F, 0x9570, 0x6640, 0x9571, 0x6641, 0xEACB, 0x6642, 0x9572, + 0x6643, 0xBBCE, 0x6644, 0x9573, 0x6645, 0x9574, 0x6646, 0x9575, 0x6647, 0x9576, 0x6648, 0x9577, 0x6649, 0x9578, 0x664A, 0x9579, + 0x664B, 0xBDFA, 0x664C, 0xC9CE, 0x664D, 0x957A, 0x664E, 0x957B, 0x664F, 0xEACC, 0x6650, 0x957C, 0x6651, 0x957D, 0x6652, 0xC9B9, + 0x6653, 0xCFFE, 0x6654, 0xEACA, 0x6655, 0xD4CE, 0x6656, 0xEACD, 0x6657, 0xEACF, 0x6658, 0x957E, 0x6659, 0x9580, 0x665A, 0xCDED, + 0x665B, 0x9581, 0x665C, 0x9582, 0x665D, 0x9583, 0x665E, 0x9584, 0x665F, 0xEAC9, 0x6660, 0x9585, 0x6661, 0xEACE, 0x6662, 0x9586, + 0x6663, 0x9587, 0x6664, 0xCEEE, 0x6665, 0x9588, 0x6666, 0xBBDE, 0x6667, 0x9589, 0x6668, 0xB3BF, 0x6669, 0x958A, 0x666A, 0x958B, + 0x666B, 0x958C, 0x666C, 0x958D, 0x666D, 0x958E, 0x666E, 0xC6D5, 0x666F, 0xBEB0, 0x6670, 0xCEFA, 0x6671, 0x958F, 0x6672, 0x9590, + 0x6673, 0x9591, 0x6674, 0xC7E7, 0x6675, 0x9592, 0x6676, 0xBEA7, 0x6677, 0xEAD0, 0x6678, 0x9593, 0x6679, 0x9594, 0x667A, 0xD6C7, + 0x667B, 0x9595, 0x667C, 0x9596, 0x667D, 0x9597, 0x667E, 0xC1C0, 0x667F, 0x9598, 0x6680, 0x9599, 0x6681, 0x959A, 0x6682, 0xD4DD, + 0x6683, 0x959B, 0x6684, 0xEAD1, 0x6685, 0x959C, 0x6686, 0x959D, 0x6687, 0xCFBE, 0x6688, 0x959E, 0x6689, 0x959F, 0x668A, 0x95A0, + 0x668B, 0x95A1, 0x668C, 0xEAD2, 0x668D, 0x95A2, 0x668E, 0x95A3, 0x668F, 0x95A4, 0x6690, 0x95A5, 0x6691, 0xCAEE, 0x6692, 0x95A6, + 0x6693, 0x95A7, 0x6694, 0x95A8, 0x6695, 0x95A9, 0x6696, 0xC5AF, 0x6697, 0xB0B5, 0x6698, 0x95AA, 0x6699, 0x95AB, 0x669A, 0x95AC, + 0x669B, 0x95AD, 0x669C, 0x95AE, 0x669D, 0xEAD4, 0x669E, 0x95AF, 0x669F, 0x95B0, 0x66A0, 0x95B1, 0x66A1, 0x95B2, 0x66A2, 0x95B3, + 0x66A3, 0x95B4, 0x66A4, 0x95B5, 0x66A5, 0x95B6, 0x66A6, 0x95B7, 0x66A7, 0xEAD3, 0x66A8, 0xF4DF, 0x66A9, 0x95B8, 0x66AA, 0x95B9, + 0x66AB, 0x95BA, 0x66AC, 0x95BB, 0x66AD, 0x95BC, 0x66AE, 0xC4BA, 0x66AF, 0x95BD, 0x66B0, 0x95BE, 0x66B1, 0x95BF, 0x66B2, 0x95C0, + 0x66B3, 0x95C1, 0x66B4, 0xB1A9, 0x66B5, 0x95C2, 0x66B6, 0x95C3, 0x66B7, 0x95C4, 0x66B8, 0x95C5, 0x66B9, 0xE5DF, 0x66BA, 0x95C6, + 0x66BB, 0x95C7, 0x66BC, 0x95C8, 0x66BD, 0x95C9, 0x66BE, 0xEAD5, 0x66BF, 0x95CA, 0x66C0, 0x95CB, 0x66C1, 0x95CC, 0x66C2, 0x95CD, + 0x66C3, 0x95CE, 0x66C4, 0x95CF, 0x66C5, 0x95D0, 0x66C6, 0x95D1, 0x66C7, 0x95D2, 0x66C8, 0x95D3, 0x66C9, 0x95D4, 0x66CA, 0x95D5, + 0x66CB, 0x95D6, 0x66CC, 0x95D7, 0x66CD, 0x95D8, 0x66CE, 0x95D9, 0x66CF, 0x95DA, 0x66D0, 0x95DB, 0x66D1, 0x95DC, 0x66D2, 0x95DD, + 0x66D3, 0x95DE, 0x66D4, 0x95DF, 0x66D5, 0x95E0, 0x66D6, 0x95E1, 0x66D7, 0x95E2, 0x66D8, 0x95E3, 0x66D9, 0xCAEF, 0x66DA, 0x95E4, + 0x66DB, 0xEAD6, 0x66DC, 0xEAD7, 0x66DD, 0xC6D8, 0x66DE, 0x95E5, 0x66DF, 0x95E6, 0x66E0, 0x95E7, 0x66E1, 0x95E8, 0x66E2, 0x95E9, + 0x66E3, 0x95EA, 0x66E4, 0x95EB, 0x66E5, 0x95EC, 0x66E6, 0xEAD8, 0x66E7, 0x95ED, 0x66E8, 0x95EE, 0x66E9, 0xEAD9, 0x66EA, 0x95EF, + 0x66EB, 0x95F0, 0x66EC, 0x95F1, 0x66ED, 0x95F2, 0x66EE, 0x95F3, 0x66EF, 0x95F4, 0x66F0, 0xD4BB, 0x66F1, 0x95F5, 0x66F2, 0xC7FA, + 0x66F3, 0xD2B7, 0x66F4, 0xB8FC, 0x66F5, 0x95F6, 0x66F6, 0x95F7, 0x66F7, 0xEAC2, 0x66F8, 0x95F8, 0x66F9, 0xB2DC, 0x66FA, 0x95F9, + 0x66FB, 0x95FA, 0x66FC, 0xC2FC, 0x66FD, 0x95FB, 0x66FE, 0xD4F8, 0x66FF, 0xCCE6, 0x6700, 0xD7EE, 0x6701, 0x95FC, 0x6702, 0x95FD, + 0x6703, 0x95FE, 0x6704, 0x9640, 0x6705, 0x9641, 0x6706, 0x9642, 0x6707, 0x9643, 0x6708, 0xD4C2, 0x6709, 0xD3D0, 0x670A, 0xEBC3, + 0x670B, 0xC5F3, 0x670C, 0x9644, 0x670D, 0xB7FE, 0x670E, 0x9645, 0x670F, 0x9646, 0x6710, 0xEBD4, 0x6711, 0x9647, 0x6712, 0x9648, + 0x6713, 0x9649, 0x6714, 0xCBB7, 0x6715, 0xEBDE, 0x6716, 0x964A, 0x6717, 0xC0CA, 0x6718, 0x964B, 0x6719, 0x964C, 0x671A, 0x964D, + 0x671B, 0xCDFB, 0x671C, 0x964E, 0x671D, 0xB3AF, 0x671E, 0x964F, 0x671F, 0xC6DA, 0x6720, 0x9650, 0x6721, 0x9651, 0x6722, 0x9652, + 0x6723, 0x9653, 0x6724, 0x9654, 0x6725, 0x9655, 0x6726, 0xEBFC, 0x6727, 0x9656, 0x6728, 0xC4BE, 0x6729, 0x9657, 0x672A, 0xCEB4, + 0x672B, 0xC4A9, 0x672C, 0xB1BE, 0x672D, 0xD4FD, 0x672E, 0x9658, 0x672F, 0xCAF5, 0x6730, 0x9659, 0x6731, 0xD6EC, 0x6732, 0x965A, + 0x6733, 0x965B, 0x6734, 0xC6D3, 0x6735, 0xB6E4, 0x6736, 0x965C, 0x6737, 0x965D, 0x6738, 0x965E, 0x6739, 0x965F, 0x673A, 0xBBFA, + 0x673B, 0x9660, 0x673C, 0x9661, 0x673D, 0xD0E0, 0x673E, 0x9662, 0x673F, 0x9663, 0x6740, 0xC9B1, 0x6741, 0x9664, 0x6742, 0xD4D3, + 0x6743, 0xC8A8, 0x6744, 0x9665, 0x6745, 0x9666, 0x6746, 0xB8CB, 0x6747, 0x9667, 0x6748, 0xE8BE, 0x6749, 0xC9BC, 0x674A, 0x9668, + 0x674B, 0x9669, 0x674C, 0xE8BB, 0x674D, 0x966A, 0x674E, 0xC0EE, 0x674F, 0xD0D3, 0x6750, 0xB2C4, 0x6751, 0xB4E5, 0x6752, 0x966B, + 0x6753, 0xE8BC, 0x6754, 0x966C, 0x6755, 0x966D, 0x6756, 0xD5C8, 0x6757, 0x966E, 0x6758, 0x966F, 0x6759, 0x9670, 0x675A, 0x9671, + 0x675B, 0x9672, 0x675C, 0xB6C5, 0x675D, 0x9673, 0x675E, 0xE8BD, 0x675F, 0xCAF8, 0x6760, 0xB8DC, 0x6761, 0xCCF5, 0x6762, 0x9674, + 0x6763, 0x9675, 0x6764, 0x9676, 0x6765, 0xC0B4, 0x6766, 0x9677, 0x6767, 0x9678, 0x6768, 0xD1EE, 0x6769, 0xE8BF, 0x676A, 0xE8C2, + 0x676B, 0x9679, 0x676C, 0x967A, 0x676D, 0xBABC, 0x676E, 0x967B, 0x676F, 0xB1AD, 0x6770, 0xBDDC, 0x6771, 0x967C, 0x6772, 0xEABD, + 0x6773, 0xE8C3, 0x6774, 0x967D, 0x6775, 0xE8C6, 0x6776, 0x967E, 0x6777, 0xE8CB, 0x6778, 0x9680, 0x6779, 0x9681, 0x677A, 0x9682, + 0x677B, 0x9683, 0x677C, 0xE8CC, 0x677D, 0x9684, 0x677E, 0xCBC9, 0x677F, 0xB0E5, 0x6780, 0x9685, 0x6781, 0xBCAB, 0x6782, 0x9686, + 0x6783, 0x9687, 0x6784, 0xB9B9, 0x6785, 0x9688, 0x6786, 0x9689, 0x6787, 0xE8C1, 0x6788, 0x968A, 0x6789, 0xCDF7, 0x678A, 0x968B, + 0x678B, 0xE8CA, 0x678C, 0x968C, 0x678D, 0x968D, 0x678E, 0x968E, 0x678F, 0x968F, 0x6790, 0xCEF6, 0x6791, 0x9690, 0x6792, 0x9691, + 0x6793, 0x9692, 0x6794, 0x9693, 0x6795, 0xD5ED, 0x6796, 0x9694, 0x6797, 0xC1D6, 0x6798, 0xE8C4, 0x6799, 0x9695, 0x679A, 0xC3B6, + 0x679B, 0x9696, 0x679C, 0xB9FB, 0x679D, 0xD6A6, 0x679E, 0xE8C8, 0x679F, 0x9697, 0x67A0, 0x9698, 0x67A1, 0x9699, 0x67A2, 0xCAE0, + 0x67A3, 0xD4E6, 0x67A4, 0x969A, 0x67A5, 0xE8C0, 0x67A6, 0x969B, 0x67A7, 0xE8C5, 0x67A8, 0xE8C7, 0x67A9, 0x969C, 0x67AA, 0xC7B9, + 0x67AB, 0xB7E3, 0x67AC, 0x969D, 0x67AD, 0xE8C9, 0x67AE, 0x969E, 0x67AF, 0xBFDD, 0x67B0, 0xE8D2, 0x67B1, 0x969F, 0x67B2, 0x96A0, + 0x67B3, 0xE8D7, 0x67B4, 0x96A1, 0x67B5, 0xE8D5, 0x67B6, 0xBCDC, 0x67B7, 0xBCCF, 0x67B8, 0xE8DB, 0x67B9, 0x96A2, 0x67BA, 0x96A3, + 0x67BB, 0x96A4, 0x67BC, 0x96A5, 0x67BD, 0x96A6, 0x67BE, 0x96A7, 0x67BF, 0x96A8, 0x67C0, 0x96A9, 0x67C1, 0xE8DE, 0x67C2, 0x96AA, + 0x67C3, 0xE8DA, 0x67C4, 0xB1FA, 0x67C5, 0x96AB, 0x67C6, 0x96AC, 0x67C7, 0x96AD, 0x67C8, 0x96AE, 0x67C9, 0x96AF, 0x67CA, 0x96B0, + 0x67CB, 0x96B1, 0x67CC, 0x96B2, 0x67CD, 0x96B3, 0x67CE, 0x96B4, 0x67CF, 0xB0D8, 0x67D0, 0xC4B3, 0x67D1, 0xB8CC, 0x67D2, 0xC6E2, + 0x67D3, 0xC8BE, 0x67D4, 0xC8E1, 0x67D5, 0x96B5, 0x67D6, 0x96B6, 0x67D7, 0x96B7, 0x67D8, 0xE8CF, 0x67D9, 0xE8D4, 0x67DA, 0xE8D6, + 0x67DB, 0x96B8, 0x67DC, 0xB9F1, 0x67DD, 0xE8D8, 0x67DE, 0xD7F5, 0x67DF, 0x96B9, 0x67E0, 0xC4FB, 0x67E1, 0x96BA, 0x67E2, 0xE8DC, + 0x67E3, 0x96BB, 0x67E4, 0x96BC, 0x67E5, 0xB2E9, 0x67E6, 0x96BD, 0x67E7, 0x96BE, 0x67E8, 0x96BF, 0x67E9, 0xE8D1, 0x67EA, 0x96C0, + 0x67EB, 0x96C1, 0x67EC, 0xBCED, 0x67ED, 0x96C2, 0x67EE, 0x96C3, 0x67EF, 0xBFC2, 0x67F0, 0xE8CD, 0x67F1, 0xD6F9, 0x67F2, 0x96C4, + 0x67F3, 0xC1F8, 0x67F4, 0xB2F1, 0x67F5, 0x96C5, 0x67F6, 0x96C6, 0x67F7, 0x96C7, 0x67F8, 0x96C8, 0x67F9, 0x96C9, 0x67FA, 0x96CA, + 0x67FB, 0x96CB, 0x67FC, 0x96CC, 0x67FD, 0xE8DF, 0x67FE, 0x96CD, 0x67FF, 0xCAC1, 0x6800, 0xE8D9, 0x6801, 0x96CE, 0x6802, 0x96CF, + 0x6803, 0x96D0, 0x6804, 0x96D1, 0x6805, 0xD5A4, 0x6806, 0x96D2, 0x6807, 0xB1EA, 0x6808, 0xD5BB, 0x6809, 0xE8CE, 0x680A, 0xE8D0, + 0x680B, 0xB6B0, 0x680C, 0xE8D3, 0x680D, 0x96D3, 0x680E, 0xE8DD, 0x680F, 0xC0B8, 0x6810, 0x96D4, 0x6811, 0xCAF7, 0x6812, 0x96D5, + 0x6813, 0xCBA8, 0x6814, 0x96D6, 0x6815, 0x96D7, 0x6816, 0xC6DC, 0x6817, 0xC0F5, 0x6818, 0x96D8, 0x6819, 0x96D9, 0x681A, 0x96DA, + 0x681B, 0x96DB, 0x681C, 0x96DC, 0x681D, 0xE8E9, 0x681E, 0x96DD, 0x681F, 0x96DE, 0x6820, 0x96DF, 0x6821, 0xD0A3, 0x6822, 0x96E0, + 0x6823, 0x96E1, 0x6824, 0x96E2, 0x6825, 0x96E3, 0x6826, 0x96E4, 0x6827, 0x96E5, 0x6828, 0x96E6, 0x6829, 0xE8F2, 0x682A, 0xD6EA, + 0x682B, 0x96E7, 0x682C, 0x96E8, 0x682D, 0x96E9, 0x682E, 0x96EA, 0x682F, 0x96EB, 0x6830, 0x96EC, 0x6831, 0x96ED, 0x6832, 0xE8E0, + 0x6833, 0xE8E1, 0x6834, 0x96EE, 0x6835, 0x96EF, 0x6836, 0x96F0, 0x6837, 0xD1F9, 0x6838, 0xBACB, 0x6839, 0xB8F9, 0x683A, 0x96F1, + 0x683B, 0x96F2, 0x683C, 0xB8F1, 0x683D, 0xD4D4, 0x683E, 0xE8EF, 0x683F, 0x96F3, 0x6840, 0xE8EE, 0x6841, 0xE8EC, 0x6842, 0xB9F0, + 0x6843, 0xCCD2, 0x6844, 0xE8E6, 0x6845, 0xCEA6, 0x6846, 0xBFF2, 0x6847, 0x96F4, 0x6848, 0xB0B8, 0x6849, 0xE8F1, 0x684A, 0xE8F0, + 0x684B, 0x96F5, 0x684C, 0xD7C0, 0x684D, 0x96F6, 0x684E, 0xE8E4, 0x684F, 0x96F7, 0x6850, 0xCDA9, 0x6851, 0xC9A3, 0x6852, 0x96F8, + 0x6853, 0xBBB8, 0x6854, 0xBDDB, 0x6855, 0xE8EA, 0x6856, 0x96F9, 0x6857, 0x96FA, 0x6858, 0x96FB, 0x6859, 0x96FC, 0x685A, 0x96FD, + 0x685B, 0x96FE, 0x685C, 0x9740, 0x685D, 0x9741, 0x685E, 0x9742, 0x685F, 0x9743, 0x6860, 0xE8E2, 0x6861, 0xE8E3, 0x6862, 0xE8E5, + 0x6863, 0xB5B5, 0x6864, 0xE8E7, 0x6865, 0xC7C5, 0x6866, 0xE8EB, 0x6867, 0xE8ED, 0x6868, 0xBDB0, 0x6869, 0xD7AE, 0x686A, 0x9744, + 0x686B, 0xE8F8, 0x686C, 0x9745, 0x686D, 0x9746, 0x686E, 0x9747, 0x686F, 0x9748, 0x6870, 0x9749, 0x6871, 0x974A, 0x6872, 0x974B, + 0x6873, 0x974C, 0x6874, 0xE8F5, 0x6875, 0x974D, 0x6876, 0xCDB0, 0x6877, 0xE8F6, 0x6878, 0x974E, 0x6879, 0x974F, 0x687A, 0x9750, + 0x687B, 0x9751, 0x687C, 0x9752, 0x687D, 0x9753, 0x687E, 0x9754, 0x687F, 0x9755, 0x6880, 0x9756, 0x6881, 0xC1BA, 0x6882, 0x9757, + 0x6883, 0xE8E8, 0x6884, 0x9758, 0x6885, 0xC3B7, 0x6886, 0xB0F0, 0x6887, 0x9759, 0x6888, 0x975A, 0x6889, 0x975B, 0x688A, 0x975C, + 0x688B, 0x975D, 0x688C, 0x975E, 0x688D, 0x975F, 0x688E, 0x9760, 0x688F, 0xE8F4, 0x6890, 0x9761, 0x6891, 0x9762, 0x6892, 0x9763, + 0x6893, 0xE8F7, 0x6894, 0x9764, 0x6895, 0x9765, 0x6896, 0x9766, 0x6897, 0xB9A3, 0x6898, 0x9767, 0x6899, 0x9768, 0x689A, 0x9769, + 0x689B, 0x976A, 0x689C, 0x976B, 0x689D, 0x976C, 0x689E, 0x976D, 0x689F, 0x976E, 0x68A0, 0x976F, 0x68A1, 0x9770, 0x68A2, 0xC9D2, + 0x68A3, 0x9771, 0x68A4, 0x9772, 0x68A5, 0x9773, 0x68A6, 0xC3CE, 0x68A7, 0xCEE0, 0x68A8, 0xC0E6, 0x68A9, 0x9774, 0x68AA, 0x9775, + 0x68AB, 0x9776, 0x68AC, 0x9777, 0x68AD, 0xCBF3, 0x68AE, 0x9778, 0x68AF, 0xCCDD, 0x68B0, 0xD0B5, 0x68B1, 0x9779, 0x68B2, 0x977A, + 0x68B3, 0xCAE1, 0x68B4, 0x977B, 0x68B5, 0xE8F3, 0x68B6, 0x977C, 0x68B7, 0x977D, 0x68B8, 0x977E, 0x68B9, 0x9780, 0x68BA, 0x9781, + 0x68BB, 0x9782, 0x68BC, 0x9783, 0x68BD, 0x9784, 0x68BE, 0x9785, 0x68BF, 0x9786, 0x68C0, 0xBCEC, 0x68C1, 0x9787, 0x68C2, 0xE8F9, + 0x68C3, 0x9788, 0x68C4, 0x9789, 0x68C5, 0x978A, 0x68C6, 0x978B, 0x68C7, 0x978C, 0x68C8, 0x978D, 0x68C9, 0xC3DE, 0x68CA, 0x978E, + 0x68CB, 0xC6E5, 0x68CC, 0x978F, 0x68CD, 0xB9F7, 0x68CE, 0x9790, 0x68CF, 0x9791, 0x68D0, 0x9792, 0x68D1, 0x9793, 0x68D2, 0xB0F4, + 0x68D3, 0x9794, 0x68D4, 0x9795, 0x68D5, 0xD7D8, 0x68D6, 0x9796, 0x68D7, 0x9797, 0x68D8, 0xBCAC, 0x68D9, 0x9798, 0x68DA, 0xC5EF, + 0x68DB, 0x9799, 0x68DC, 0x979A, 0x68DD, 0x979B, 0x68DE, 0x979C, 0x68DF, 0x979D, 0x68E0, 0xCCC4, 0x68E1, 0x979E, 0x68E2, 0x979F, + 0x68E3, 0xE9A6, 0x68E4, 0x97A0, 0x68E5, 0x97A1, 0x68E6, 0x97A2, 0x68E7, 0x97A3, 0x68E8, 0x97A4, 0x68E9, 0x97A5, 0x68EA, 0x97A6, + 0x68EB, 0x97A7, 0x68EC, 0x97A8, 0x68ED, 0x97A9, 0x68EE, 0xC9AD, 0x68EF, 0x97AA, 0x68F0, 0xE9A2, 0x68F1, 0xC0E2, 0x68F2, 0x97AB, + 0x68F3, 0x97AC, 0x68F4, 0x97AD, 0x68F5, 0xBFC3, 0x68F6, 0x97AE, 0x68F7, 0x97AF, 0x68F8, 0x97B0, 0x68F9, 0xE8FE, 0x68FA, 0xB9D7, + 0x68FB, 0x97B1, 0x68FC, 0xE8FB, 0x68FD, 0x97B2, 0x68FE, 0x97B3, 0x68FF, 0x97B4, 0x6900, 0x97B5, 0x6901, 0xE9A4, 0x6902, 0x97B6, + 0x6903, 0x97B7, 0x6904, 0x97B8, 0x6905, 0xD2CE, 0x6906, 0x97B9, 0x6907, 0x97BA, 0x6908, 0x97BB, 0x6909, 0x97BC, 0x690A, 0x97BD, + 0x690B, 0xE9A3, 0x690C, 0x97BE, 0x690D, 0xD6B2, 0x690E, 0xD7B5, 0x690F, 0x97BF, 0x6910, 0xE9A7, 0x6911, 0x97C0, 0x6912, 0xBDB7, + 0x6913, 0x97C1, 0x6914, 0x97C2, 0x6915, 0x97C3, 0x6916, 0x97C4, 0x6917, 0x97C5, 0x6918, 0x97C6, 0x6919, 0x97C7, 0x691A, 0x97C8, + 0x691B, 0x97C9, 0x691C, 0x97CA, 0x691D, 0x97CB, 0x691E, 0x97CC, 0x691F, 0xE8FC, 0x6920, 0xE8FD, 0x6921, 0x97CD, 0x6922, 0x97CE, + 0x6923, 0x97CF, 0x6924, 0xE9A1, 0x6925, 0x97D0, 0x6926, 0x97D1, 0x6927, 0x97D2, 0x6928, 0x97D3, 0x6929, 0x97D4, 0x692A, 0x97D5, + 0x692B, 0x97D6, 0x692C, 0x97D7, 0x692D, 0xCDD6, 0x692E, 0x97D8, 0x692F, 0x97D9, 0x6930, 0xD2AC, 0x6931, 0x97DA, 0x6932, 0x97DB, + 0x6933, 0x97DC, 0x6934, 0xE9B2, 0x6935, 0x97DD, 0x6936, 0x97DE, 0x6937, 0x97DF, 0x6938, 0x97E0, 0x6939, 0xE9A9, 0x693A, 0x97E1, + 0x693B, 0x97E2, 0x693C, 0x97E3, 0x693D, 0xB4AA, 0x693E, 0x97E4, 0x693F, 0xB4BB, 0x6940, 0x97E5, 0x6941, 0x97E6, 0x6942, 0xE9AB, + 0x6943, 0x97E7, 0x6944, 0x97E8, 0x6945, 0x97E9, 0x6946, 0x97EA, 0x6947, 0x97EB, 0x6948, 0x97EC, 0x6949, 0x97ED, 0x694A, 0x97EE, + 0x694B, 0x97EF, 0x694C, 0x97F0, 0x694D, 0x97F1, 0x694E, 0x97F2, 0x694F, 0x97F3, 0x6950, 0x97F4, 0x6951, 0x97F5, 0x6952, 0x97F6, + 0x6953, 0x97F7, 0x6954, 0xD0A8, 0x6955, 0x97F8, 0x6956, 0x97F9, 0x6957, 0xE9A5, 0x6958, 0x97FA, 0x6959, 0x97FB, 0x695A, 0xB3FE, + 0x695B, 0x97FC, 0x695C, 0x97FD, 0x695D, 0xE9AC, 0x695E, 0xC0E3, 0x695F, 0x97FE, 0x6960, 0xE9AA, 0x6961, 0x9840, 0x6962, 0x9841, + 0x6963, 0xE9B9, 0x6964, 0x9842, 0x6965, 0x9843, 0x6966, 0xE9B8, 0x6967, 0x9844, 0x6968, 0x9845, 0x6969, 0x9846, 0x696A, 0x9847, + 0x696B, 0xE9AE, 0x696C, 0x9848, 0x696D, 0x9849, 0x696E, 0xE8FA, 0x696F, 0x984A, 0x6970, 0x984B, 0x6971, 0xE9A8, 0x6972, 0x984C, + 0x6973, 0x984D, 0x6974, 0x984E, 0x6975, 0x984F, 0x6976, 0x9850, 0x6977, 0xBFAC, 0x6978, 0xE9B1, 0x6979, 0xE9BA, 0x697A, 0x9851, + 0x697B, 0x9852, 0x697C, 0xC2A5, 0x697D, 0x9853, 0x697E, 0x9854, 0x697F, 0x9855, 0x6980, 0xE9AF, 0x6981, 0x9856, 0x6982, 0xB8C5, + 0x6983, 0x9857, 0x6984, 0xE9AD, 0x6985, 0x9858, 0x6986, 0xD3DC, 0x6987, 0xE9B4, 0x6988, 0xE9B5, 0x6989, 0xE9B7, 0x698A, 0x9859, + 0x698B, 0x985A, 0x698C, 0x985B, 0x698D, 0xE9C7, 0x698E, 0x985C, 0x698F, 0x985D, 0x6990, 0x985E, 0x6991, 0x985F, 0x6992, 0x9860, + 0x6993, 0x9861, 0x6994, 0xC0C6, 0x6995, 0xE9C5, 0x6996, 0x9862, 0x6997, 0x9863, 0x6998, 0xE9B0, 0x6999, 0x9864, 0x699A, 0x9865, + 0x699B, 0xE9BB, 0x699C, 0xB0F1, 0x699D, 0x9866, 0x699E, 0x9867, 0x699F, 0x9868, 0x69A0, 0x9869, 0x69A1, 0x986A, 0x69A2, 0x986B, + 0x69A3, 0x986C, 0x69A4, 0x986D, 0x69A5, 0x986E, 0x69A6, 0x986F, 0x69A7, 0xE9BC, 0x69A8, 0xD5A5, 0x69A9, 0x9870, 0x69AA, 0x9871, + 0x69AB, 0xE9BE, 0x69AC, 0x9872, 0x69AD, 0xE9BF, 0x69AE, 0x9873, 0x69AF, 0x9874, 0x69B0, 0x9875, 0x69B1, 0xE9C1, 0x69B2, 0x9876, + 0x69B3, 0x9877, 0x69B4, 0xC1F1, 0x69B5, 0x9878, 0x69B6, 0x9879, 0x69B7, 0xC8B6, 0x69B8, 0x987A, 0x69B9, 0x987B, 0x69BA, 0x987C, + 0x69BB, 0xE9BD, 0x69BC, 0x987D, 0x69BD, 0x987E, 0x69BE, 0x9880, 0x69BF, 0x9881, 0x69C0, 0x9882, 0x69C1, 0xE9C2, 0x69C2, 0x9883, + 0x69C3, 0x9884, 0x69C4, 0x9885, 0x69C5, 0x9886, 0x69C6, 0x9887, 0x69C7, 0x9888, 0x69C8, 0x9889, 0x69C9, 0x988A, 0x69CA, 0xE9C3, + 0x69CB, 0x988B, 0x69CC, 0xE9B3, 0x69CD, 0x988C, 0x69CE, 0xE9B6, 0x69CF, 0x988D, 0x69D0, 0xBBB1, 0x69D1, 0x988E, 0x69D2, 0x988F, + 0x69D3, 0x9890, 0x69D4, 0xE9C0, 0x69D5, 0x9891, 0x69D6, 0x9892, 0x69D7, 0x9893, 0x69D8, 0x9894, 0x69D9, 0x9895, 0x69DA, 0x9896, + 0x69DB, 0xBCF7, 0x69DC, 0x9897, 0x69DD, 0x9898, 0x69DE, 0x9899, 0x69DF, 0xE9C4, 0x69E0, 0xE9C6, 0x69E1, 0x989A, 0x69E2, 0x989B, + 0x69E3, 0x989C, 0x69E4, 0x989D, 0x69E5, 0x989E, 0x69E6, 0x989F, 0x69E7, 0x98A0, 0x69E8, 0x98A1, 0x69E9, 0x98A2, 0x69EA, 0x98A3, + 0x69EB, 0x98A4, 0x69EC, 0x98A5, 0x69ED, 0xE9CA, 0x69EE, 0x98A6, 0x69EF, 0x98A7, 0x69F0, 0x98A8, 0x69F1, 0x98A9, 0x69F2, 0xE9CE, + 0x69F3, 0x98AA, 0x69F4, 0x98AB, 0x69F5, 0x98AC, 0x69F6, 0x98AD, 0x69F7, 0x98AE, 0x69F8, 0x98AF, 0x69F9, 0x98B0, 0x69FA, 0x98B1, + 0x69FB, 0x98B2, 0x69FC, 0x98B3, 0x69FD, 0xB2DB, 0x69FE, 0x98B4, 0x69FF, 0xE9C8, 0x6A00, 0x98B5, 0x6A01, 0x98B6, 0x6A02, 0x98B7, + 0x6A03, 0x98B8, 0x6A04, 0x98B9, 0x6A05, 0x98BA, 0x6A06, 0x98BB, 0x6A07, 0x98BC, 0x6A08, 0x98BD, 0x6A09, 0x98BE, 0x6A0A, 0xB7AE, + 0x6A0B, 0x98BF, 0x6A0C, 0x98C0, 0x6A0D, 0x98C1, 0x6A0E, 0x98C2, 0x6A0F, 0x98C3, 0x6A10, 0x98C4, 0x6A11, 0x98C5, 0x6A12, 0x98C6, + 0x6A13, 0x98C7, 0x6A14, 0x98C8, 0x6A15, 0x98C9, 0x6A16, 0x98CA, 0x6A17, 0xE9CB, 0x6A18, 0xE9CC, 0x6A19, 0x98CB, 0x6A1A, 0x98CC, + 0x6A1B, 0x98CD, 0x6A1C, 0x98CE, 0x6A1D, 0x98CF, 0x6A1E, 0x98D0, 0x6A1F, 0xD5C1, 0x6A20, 0x98D1, 0x6A21, 0xC4A3, 0x6A22, 0x98D2, + 0x6A23, 0x98D3, 0x6A24, 0x98D4, 0x6A25, 0x98D5, 0x6A26, 0x98D6, 0x6A27, 0x98D7, 0x6A28, 0xE9D8, 0x6A29, 0x98D8, 0x6A2A, 0xBAE1, + 0x6A2B, 0x98D9, 0x6A2C, 0x98DA, 0x6A2D, 0x98DB, 0x6A2E, 0x98DC, 0x6A2F, 0xE9C9, 0x6A30, 0x98DD, 0x6A31, 0xD3A3, 0x6A32, 0x98DE, + 0x6A33, 0x98DF, 0x6A34, 0x98E0, 0x6A35, 0xE9D4, 0x6A36, 0x98E1, 0x6A37, 0x98E2, 0x6A38, 0x98E3, 0x6A39, 0x98E4, 0x6A3A, 0x98E5, + 0x6A3B, 0x98E6, 0x6A3C, 0x98E7, 0x6A3D, 0xE9D7, 0x6A3E, 0xE9D0, 0x6A3F, 0x98E8, 0x6A40, 0x98E9, 0x6A41, 0x98EA, 0x6A42, 0x98EB, + 0x6A43, 0x98EC, 0x6A44, 0xE9CF, 0x6A45, 0x98ED, 0x6A46, 0x98EE, 0x6A47, 0xC7C1, 0x6A48, 0x98EF, 0x6A49, 0x98F0, 0x6A4A, 0x98F1, + 0x6A4B, 0x98F2, 0x6A4C, 0x98F3, 0x6A4D, 0x98F4, 0x6A4E, 0x98F5, 0x6A4F, 0x98F6, 0x6A50, 0xE9D2, 0x6A51, 0x98F7, 0x6A52, 0x98F8, + 0x6A53, 0x98F9, 0x6A54, 0x98FA, 0x6A55, 0x98FB, 0x6A56, 0x98FC, 0x6A57, 0x98FD, 0x6A58, 0xE9D9, 0x6A59, 0xB3C8, 0x6A5A, 0x98FE, + 0x6A5B, 0xE9D3, 0x6A5C, 0x9940, 0x6A5D, 0x9941, 0x6A5E, 0x9942, 0x6A5F, 0x9943, 0x6A60, 0x9944, 0x6A61, 0xCFF0, 0x6A62, 0x9945, + 0x6A63, 0x9946, 0x6A64, 0x9947, 0x6A65, 0xE9CD, 0x6A66, 0x9948, 0x6A67, 0x9949, 0x6A68, 0x994A, 0x6A69, 0x994B, 0x6A6A, 0x994C, + 0x6A6B, 0x994D, 0x6A6C, 0x994E, 0x6A6D, 0x994F, 0x6A6E, 0x9950, 0x6A6F, 0x9951, 0x6A70, 0x9952, 0x6A71, 0xB3F7, 0x6A72, 0x9953, + 0x6A73, 0x9954, 0x6A74, 0x9955, 0x6A75, 0x9956, 0x6A76, 0x9957, 0x6A77, 0x9958, 0x6A78, 0x9959, 0x6A79, 0xE9D6, 0x6A7A, 0x995A, + 0x6A7B, 0x995B, 0x6A7C, 0xE9DA, 0x6A7D, 0x995C, 0x6A7E, 0x995D, 0x6A7F, 0x995E, 0x6A80, 0xCCB4, 0x6A81, 0x995F, 0x6A82, 0x9960, + 0x6A83, 0x9961, 0x6A84, 0xCFAD, 0x6A85, 0x9962, 0x6A86, 0x9963, 0x6A87, 0x9964, 0x6A88, 0x9965, 0x6A89, 0x9966, 0x6A8A, 0x9967, + 0x6A8B, 0x9968, 0x6A8C, 0x9969, 0x6A8D, 0x996A, 0x6A8E, 0xE9D5, 0x6A8F, 0x996B, 0x6A90, 0xE9DC, 0x6A91, 0xE9DB, 0x6A92, 0x996C, + 0x6A93, 0x996D, 0x6A94, 0x996E, 0x6A95, 0x996F, 0x6A96, 0x9970, 0x6A97, 0xE9DE, 0x6A98, 0x9971, 0x6A99, 0x9972, 0x6A9A, 0x9973, + 0x6A9B, 0x9974, 0x6A9C, 0x9975, 0x6A9D, 0x9976, 0x6A9E, 0x9977, 0x6A9F, 0x9978, 0x6AA0, 0xE9D1, 0x6AA1, 0x9979, 0x6AA2, 0x997A, + 0x6AA3, 0x997B, 0x6AA4, 0x997C, 0x6AA5, 0x997D, 0x6AA6, 0x997E, 0x6AA7, 0x9980, 0x6AA8, 0x9981, 0x6AA9, 0xE9DD, 0x6AAA, 0x9982, + 0x6AAB, 0xE9DF, 0x6AAC, 0xC3CA, 0x6AAD, 0x9983, 0x6AAE, 0x9984, 0x6AAF, 0x9985, 0x6AB0, 0x9986, 0x6AB1, 0x9987, 0x6AB2, 0x9988, + 0x6AB3, 0x9989, 0x6AB4, 0x998A, 0x6AB5, 0x998B, 0x6AB6, 0x998C, 0x6AB7, 0x998D, 0x6AB8, 0x998E, 0x6AB9, 0x998F, 0x6ABA, 0x9990, + 0x6ABB, 0x9991, 0x6ABC, 0x9992, 0x6ABD, 0x9993, 0x6ABE, 0x9994, 0x6ABF, 0x9995, 0x6AC0, 0x9996, 0x6AC1, 0x9997, 0x6AC2, 0x9998, + 0x6AC3, 0x9999, 0x6AC4, 0x999A, 0x6AC5, 0x999B, 0x6AC6, 0x999C, 0x6AC7, 0x999D, 0x6AC8, 0x999E, 0x6AC9, 0x999F, 0x6ACA, 0x99A0, + 0x6ACB, 0x99A1, 0x6ACC, 0x99A2, 0x6ACD, 0x99A3, 0x6ACE, 0x99A4, 0x6ACF, 0x99A5, 0x6AD0, 0x99A6, 0x6AD1, 0x99A7, 0x6AD2, 0x99A8, + 0x6AD3, 0x99A9, 0x6AD4, 0x99AA, 0x6AD5, 0x99AB, 0x6AD6, 0x99AC, 0x6AD7, 0x99AD, 0x6AD8, 0x99AE, 0x6AD9, 0x99AF, 0x6ADA, 0x99B0, + 0x6ADB, 0x99B1, 0x6ADC, 0x99B2, 0x6ADD, 0x99B3, 0x6ADE, 0x99B4, 0x6ADF, 0x99B5, 0x6AE0, 0x99B6, 0x6AE1, 0x99B7, 0x6AE2, 0x99B8, + 0x6AE3, 0x99B9, 0x6AE4, 0x99BA, 0x6AE5, 0x99BB, 0x6AE6, 0x99BC, 0x6AE7, 0x99BD, 0x6AE8, 0x99BE, 0x6AE9, 0x99BF, 0x6AEA, 0x99C0, + 0x6AEB, 0x99C1, 0x6AEC, 0x99C2, 0x6AED, 0x99C3, 0x6AEE, 0x99C4, 0x6AEF, 0x99C5, 0x6AF0, 0x99C6, 0x6AF1, 0x99C7, 0x6AF2, 0x99C8, + 0x6AF3, 0x99C9, 0x6AF4, 0x99CA, 0x6AF5, 0x99CB, 0x6AF6, 0x99CC, 0x6AF7, 0x99CD, 0x6AF8, 0x99CE, 0x6AF9, 0x99CF, 0x6AFA, 0x99D0, + 0x6AFB, 0x99D1, 0x6AFC, 0x99D2, 0x6AFD, 0x99D3, 0x6AFE, 0x99D4, 0x6AFF, 0x99D5, 0x6B00, 0x99D6, 0x6B01, 0x99D7, 0x6B02, 0x99D8, + 0x6B03, 0x99D9, 0x6B04, 0x99DA, 0x6B05, 0x99DB, 0x6B06, 0x99DC, 0x6B07, 0x99DD, 0x6B08, 0x99DE, 0x6B09, 0x99DF, 0x6B0A, 0x99E0, + 0x6B0B, 0x99E1, 0x6B0C, 0x99E2, 0x6B0D, 0x99E3, 0x6B0E, 0x99E4, 0x6B0F, 0x99E5, 0x6B10, 0x99E6, 0x6B11, 0x99E7, 0x6B12, 0x99E8, + 0x6B13, 0x99E9, 0x6B14, 0x99EA, 0x6B15, 0x99EB, 0x6B16, 0x99EC, 0x6B17, 0x99ED, 0x6B18, 0x99EE, 0x6B19, 0x99EF, 0x6B1A, 0x99F0, + 0x6B1B, 0x99F1, 0x6B1C, 0x99F2, 0x6B1D, 0x99F3, 0x6B1E, 0x99F4, 0x6B1F, 0x99F5, 0x6B20, 0xC7B7, 0x6B21, 0xB4CE, 0x6B22, 0xBBB6, + 0x6B23, 0xD0C0, 0x6B24, 0xECA3, 0x6B25, 0x99F6, 0x6B26, 0x99F7, 0x6B27, 0xC5B7, 0x6B28, 0x99F8, 0x6B29, 0x99F9, 0x6B2A, 0x99FA, + 0x6B2B, 0x99FB, 0x6B2C, 0x99FC, 0x6B2D, 0x99FD, 0x6B2E, 0x99FE, 0x6B2F, 0x9A40, 0x6B30, 0x9A41, 0x6B31, 0x9A42, 0x6B32, 0xD3FB, + 0x6B33, 0x9A43, 0x6B34, 0x9A44, 0x6B35, 0x9A45, 0x6B36, 0x9A46, 0x6B37, 0xECA4, 0x6B38, 0x9A47, 0x6B39, 0xECA5, 0x6B3A, 0xC6DB, + 0x6B3B, 0x9A48, 0x6B3C, 0x9A49, 0x6B3D, 0x9A4A, 0x6B3E, 0xBFEE, 0x6B3F, 0x9A4B, 0x6B40, 0x9A4C, 0x6B41, 0x9A4D, 0x6B42, 0x9A4E, + 0x6B43, 0xECA6, 0x6B44, 0x9A4F, 0x6B45, 0x9A50, 0x6B46, 0xECA7, 0x6B47, 0xD0AA, 0x6B48, 0x9A51, 0x6B49, 0xC7B8, 0x6B4A, 0x9A52, + 0x6B4B, 0x9A53, 0x6B4C, 0xB8E8, 0x6B4D, 0x9A54, 0x6B4E, 0x9A55, 0x6B4F, 0x9A56, 0x6B50, 0x9A57, 0x6B51, 0x9A58, 0x6B52, 0x9A59, + 0x6B53, 0x9A5A, 0x6B54, 0x9A5B, 0x6B55, 0x9A5C, 0x6B56, 0x9A5D, 0x6B57, 0x9A5E, 0x6B58, 0x9A5F, 0x6B59, 0xECA8, 0x6B5A, 0x9A60, + 0x6B5B, 0x9A61, 0x6B5C, 0x9A62, 0x6B5D, 0x9A63, 0x6B5E, 0x9A64, 0x6B5F, 0x9A65, 0x6B60, 0x9A66, 0x6B61, 0x9A67, 0x6B62, 0xD6B9, + 0x6B63, 0xD5FD, 0x6B64, 0xB4CB, 0x6B65, 0xB2BD, 0x6B66, 0xCEE4, 0x6B67, 0xC6E7, 0x6B68, 0x9A68, 0x6B69, 0x9A69, 0x6B6A, 0xCDE1, + 0x6B6B, 0x9A6A, 0x6B6C, 0x9A6B, 0x6B6D, 0x9A6C, 0x6B6E, 0x9A6D, 0x6B6F, 0x9A6E, 0x6B70, 0x9A6F, 0x6B71, 0x9A70, 0x6B72, 0x9A71, + 0x6B73, 0x9A72, 0x6B74, 0x9A73, 0x6B75, 0x9A74, 0x6B76, 0x9A75, 0x6B77, 0x9A76, 0x6B78, 0x9A77, 0x6B79, 0xB4F5, 0x6B7A, 0x9A78, + 0x6B7B, 0xCBC0, 0x6B7C, 0xBCDF, 0x6B7D, 0x9A79, 0x6B7E, 0x9A7A, 0x6B7F, 0x9A7B, 0x6B80, 0x9A7C, 0x6B81, 0xE9E2, 0x6B82, 0xE9E3, + 0x6B83, 0xD1EA, 0x6B84, 0xE9E5, 0x6B85, 0x9A7D, 0x6B86, 0xB4F9, 0x6B87, 0xE9E4, 0x6B88, 0x9A7E, 0x6B89, 0xD1B3, 0x6B8A, 0xCAE2, + 0x6B8B, 0xB2D0, 0x6B8C, 0x9A80, 0x6B8D, 0xE9E8, 0x6B8E, 0x9A81, 0x6B8F, 0x9A82, 0x6B90, 0x9A83, 0x6B91, 0x9A84, 0x6B92, 0xE9E6, + 0x6B93, 0xE9E7, 0x6B94, 0x9A85, 0x6B95, 0x9A86, 0x6B96, 0xD6B3, 0x6B97, 0x9A87, 0x6B98, 0x9A88, 0x6B99, 0x9A89, 0x6B9A, 0xE9E9, + 0x6B9B, 0xE9EA, 0x6B9C, 0x9A8A, 0x6B9D, 0x9A8B, 0x6B9E, 0x9A8C, 0x6B9F, 0x9A8D, 0x6BA0, 0x9A8E, 0x6BA1, 0xE9EB, 0x6BA2, 0x9A8F, + 0x6BA3, 0x9A90, 0x6BA4, 0x9A91, 0x6BA5, 0x9A92, 0x6BA6, 0x9A93, 0x6BA7, 0x9A94, 0x6BA8, 0x9A95, 0x6BA9, 0x9A96, 0x6BAA, 0xE9EC, + 0x6BAB, 0x9A97, 0x6BAC, 0x9A98, 0x6BAD, 0x9A99, 0x6BAE, 0x9A9A, 0x6BAF, 0x9A9B, 0x6BB0, 0x9A9C, 0x6BB1, 0x9A9D, 0x6BB2, 0x9A9E, + 0x6BB3, 0xECAF, 0x6BB4, 0xC5B9, 0x6BB5, 0xB6CE, 0x6BB6, 0x9A9F, 0x6BB7, 0xD2F3, 0x6BB8, 0x9AA0, 0x6BB9, 0x9AA1, 0x6BBA, 0x9AA2, + 0x6BBB, 0x9AA3, 0x6BBC, 0x9AA4, 0x6BBD, 0x9AA5, 0x6BBE, 0x9AA6, 0x6BBF, 0xB5EE, 0x6BC0, 0x9AA7, 0x6BC1, 0xBBD9, 0x6BC2, 0xECB1, + 0x6BC3, 0x9AA8, 0x6BC4, 0x9AA9, 0x6BC5, 0xD2E3, 0x6BC6, 0x9AAA, 0x6BC7, 0x9AAB, 0x6BC8, 0x9AAC, 0x6BC9, 0x9AAD, 0x6BCA, 0x9AAE, + 0x6BCB, 0xCEE3, 0x6BCC, 0x9AAF, 0x6BCD, 0xC4B8, 0x6BCE, 0x9AB0, 0x6BCF, 0xC3BF, 0x6BD0, 0x9AB1, 0x6BD1, 0x9AB2, 0x6BD2, 0xB6BE, + 0x6BD3, 0xD8B9, 0x6BD4, 0xB1C8, 0x6BD5, 0xB1CF, 0x6BD6, 0xB1D1, 0x6BD7, 0xC5FE, 0x6BD8, 0x9AB3, 0x6BD9, 0xB1D0, 0x6BDA, 0x9AB4, + 0x6BDB, 0xC3AB, 0x6BDC, 0x9AB5, 0x6BDD, 0x9AB6, 0x6BDE, 0x9AB7, 0x6BDF, 0x9AB8, 0x6BE0, 0x9AB9, 0x6BE1, 0xD5B1, 0x6BE2, 0x9ABA, + 0x6BE3, 0x9ABB, 0x6BE4, 0x9ABC, 0x6BE5, 0x9ABD, 0x6BE6, 0x9ABE, 0x6BE7, 0x9ABF, 0x6BE8, 0x9AC0, 0x6BE9, 0x9AC1, 0x6BEA, 0xEBA4, + 0x6BEB, 0xBAC1, 0x6BEC, 0x9AC2, 0x6BED, 0x9AC3, 0x6BEE, 0x9AC4, 0x6BEF, 0xCCBA, 0x6BF0, 0x9AC5, 0x6BF1, 0x9AC6, 0x6BF2, 0x9AC7, + 0x6BF3, 0xEBA5, 0x6BF4, 0x9AC8, 0x6BF5, 0xEBA7, 0x6BF6, 0x9AC9, 0x6BF7, 0x9ACA, 0x6BF8, 0x9ACB, 0x6BF9, 0xEBA8, 0x6BFA, 0x9ACC, + 0x6BFB, 0x9ACD, 0x6BFC, 0x9ACE, 0x6BFD, 0xEBA6, 0x6BFE, 0x9ACF, 0x6BFF, 0x9AD0, 0x6C00, 0x9AD1, 0x6C01, 0x9AD2, 0x6C02, 0x9AD3, + 0x6C03, 0x9AD4, 0x6C04, 0x9AD5, 0x6C05, 0xEBA9, 0x6C06, 0xEBAB, 0x6C07, 0xEBAA, 0x6C08, 0x9AD6, 0x6C09, 0x9AD7, 0x6C0A, 0x9AD8, + 0x6C0B, 0x9AD9, 0x6C0C, 0x9ADA, 0x6C0D, 0xEBAC, 0x6C0E, 0x9ADB, 0x6C0F, 0xCACF, 0x6C10, 0xD8B5, 0x6C11, 0xC3F1, 0x6C12, 0x9ADC, + 0x6C13, 0xC3A5, 0x6C14, 0xC6F8, 0x6C15, 0xEBAD, 0x6C16, 0xC4CA, 0x6C17, 0x9ADD, 0x6C18, 0xEBAE, 0x6C19, 0xEBAF, 0x6C1A, 0xEBB0, + 0x6C1B, 0xB7D5, 0x6C1C, 0x9ADE, 0x6C1D, 0x9ADF, 0x6C1E, 0x9AE0, 0x6C1F, 0xB7FA, 0x6C20, 0x9AE1, 0x6C21, 0xEBB1, 0x6C22, 0xC7E2, + 0x6C23, 0x9AE2, 0x6C24, 0xEBB3, 0x6C25, 0x9AE3, 0x6C26, 0xBAA4, 0x6C27, 0xD1F5, 0x6C28, 0xB0B1, 0x6C29, 0xEBB2, 0x6C2A, 0xEBB4, + 0x6C2B, 0x9AE4, 0x6C2C, 0x9AE5, 0x6C2D, 0x9AE6, 0x6C2E, 0xB5AA, 0x6C2F, 0xC2C8, 0x6C30, 0xC7E8, 0x6C31, 0x9AE7, 0x6C32, 0xEBB5, + 0x6C33, 0x9AE8, 0x6C34, 0xCBAE, 0x6C35, 0xE3DF, 0x6C36, 0x9AE9, 0x6C37, 0x9AEA, 0x6C38, 0xD3C0, 0x6C39, 0x9AEB, 0x6C3A, 0x9AEC, + 0x6C3B, 0x9AED, 0x6C3C, 0x9AEE, 0x6C3D, 0xD9DB, 0x6C3E, 0x9AEF, 0x6C3F, 0x9AF0, 0x6C40, 0xCDA1, 0x6C41, 0xD6AD, 0x6C42, 0xC7F3, + 0x6C43, 0x9AF1, 0x6C44, 0x9AF2, 0x6C45, 0x9AF3, 0x6C46, 0xD9E0, 0x6C47, 0xBBE3, 0x6C48, 0x9AF4, 0x6C49, 0xBABA, 0x6C4A, 0xE3E2, + 0x6C4B, 0x9AF5, 0x6C4C, 0x9AF6, 0x6C4D, 0x9AF7, 0x6C4E, 0x9AF8, 0x6C4F, 0x9AF9, 0x6C50, 0xCFAB, 0x6C51, 0x9AFA, 0x6C52, 0x9AFB, + 0x6C53, 0x9AFC, 0x6C54, 0xE3E0, 0x6C55, 0xC9C7, 0x6C56, 0x9AFD, 0x6C57, 0xBAB9, 0x6C58, 0x9AFE, 0x6C59, 0x9B40, 0x6C5A, 0x9B41, + 0x6C5B, 0xD1B4, 0x6C5C, 0xE3E1, 0x6C5D, 0xC8EA, 0x6C5E, 0xB9AF, 0x6C5F, 0xBDAD, 0x6C60, 0xB3D8, 0x6C61, 0xCEDB, 0x6C62, 0x9B42, + 0x6C63, 0x9B43, 0x6C64, 0xCCC0, 0x6C65, 0x9B44, 0x6C66, 0x9B45, 0x6C67, 0x9B46, 0x6C68, 0xE3E8, 0x6C69, 0xE3E9, 0x6C6A, 0xCDF4, + 0x6C6B, 0x9B47, 0x6C6C, 0x9B48, 0x6C6D, 0x9B49, 0x6C6E, 0x9B4A, 0x6C6F, 0x9B4B, 0x6C70, 0xCCAD, 0x6C71, 0x9B4C, 0x6C72, 0xBCB3, + 0x6C73, 0x9B4D, 0x6C74, 0xE3EA, 0x6C75, 0x9B4E, 0x6C76, 0xE3EB, 0x6C77, 0x9B4F, 0x6C78, 0x9B50, 0x6C79, 0xD0DA, 0x6C7A, 0x9B51, + 0x6C7B, 0x9B52, 0x6C7C, 0x9B53, 0x6C7D, 0xC6FB, 0x6C7E, 0xB7DA, 0x6C7F, 0x9B54, 0x6C80, 0x9B55, 0x6C81, 0xC7DF, 0x6C82, 0xD2CA, + 0x6C83, 0xCED6, 0x6C84, 0x9B56, 0x6C85, 0xE3E4, 0x6C86, 0xE3EC, 0x6C87, 0x9B57, 0x6C88, 0xC9F2, 0x6C89, 0xB3C1, 0x6C8A, 0x9B58, + 0x6C8B, 0x9B59, 0x6C8C, 0xE3E7, 0x6C8D, 0x9B5A, 0x6C8E, 0x9B5B, 0x6C8F, 0xC6E3, 0x6C90, 0xE3E5, 0x6C91, 0x9B5C, 0x6C92, 0x9B5D, + 0x6C93, 0xEDB3, 0x6C94, 0xE3E6, 0x6C95, 0x9B5E, 0x6C96, 0x9B5F, 0x6C97, 0x9B60, 0x6C98, 0x9B61, 0x6C99, 0xC9B3, 0x6C9A, 0x9B62, + 0x6C9B, 0xC5E6, 0x6C9C, 0x9B63, 0x6C9D, 0x9B64, 0x6C9E, 0x9B65, 0x6C9F, 0xB9B5, 0x6CA0, 0x9B66, 0x6CA1, 0xC3BB, 0x6CA2, 0x9B67, + 0x6CA3, 0xE3E3, 0x6CA4, 0xC5BD, 0x6CA5, 0xC1A4, 0x6CA6, 0xC2D9, 0x6CA7, 0xB2D7, 0x6CA8, 0x9B68, 0x6CA9, 0xE3ED, 0x6CAA, 0xBBA6, + 0x6CAB, 0xC4AD, 0x6CAC, 0x9B69, 0x6CAD, 0xE3F0, 0x6CAE, 0xBEDA, 0x6CAF, 0x9B6A, 0x6CB0, 0x9B6B, 0x6CB1, 0xE3FB, 0x6CB2, 0xE3F5, + 0x6CB3, 0xBAD3, 0x6CB4, 0x9B6C, 0x6CB5, 0x9B6D, 0x6CB6, 0x9B6E, 0x6CB7, 0x9B6F, 0x6CB8, 0xB7D0, 0x6CB9, 0xD3CD, 0x6CBA, 0x9B70, + 0x6CBB, 0xD6CE, 0x6CBC, 0xD5D3, 0x6CBD, 0xB9C1, 0x6CBE, 0xD5B4, 0x6CBF, 0xD1D8, 0x6CC0, 0x9B71, 0x6CC1, 0x9B72, 0x6CC2, 0x9B73, + 0x6CC3, 0x9B74, 0x6CC4, 0xD0B9, 0x6CC5, 0xC7F6, 0x6CC6, 0x9B75, 0x6CC7, 0x9B76, 0x6CC8, 0x9B77, 0x6CC9, 0xC8AA, 0x6CCA, 0xB2B4, + 0x6CCB, 0x9B78, 0x6CCC, 0xC3DA, 0x6CCD, 0x9B79, 0x6CCE, 0x9B7A, 0x6CCF, 0x9B7B, 0x6CD0, 0xE3EE, 0x6CD1, 0x9B7C, 0x6CD2, 0x9B7D, + 0x6CD3, 0xE3FC, 0x6CD4, 0xE3EF, 0x6CD5, 0xB7A8, 0x6CD6, 0xE3F7, 0x6CD7, 0xE3F4, 0x6CD8, 0x9B7E, 0x6CD9, 0x9B80, 0x6CDA, 0x9B81, + 0x6CDB, 0xB7BA, 0x6CDC, 0x9B82, 0x6CDD, 0x9B83, 0x6CDE, 0xC5A2, 0x6CDF, 0x9B84, 0x6CE0, 0xE3F6, 0x6CE1, 0xC5DD, 0x6CE2, 0xB2A8, + 0x6CE3, 0xC6FC, 0x6CE4, 0x9B85, 0x6CE5, 0xC4E0, 0x6CE6, 0x9B86, 0x6CE7, 0x9B87, 0x6CE8, 0xD7A2, 0x6CE9, 0x9B88, 0x6CEA, 0xC0E1, + 0x6CEB, 0xE3F9, 0x6CEC, 0x9B89, 0x6CED, 0x9B8A, 0x6CEE, 0xE3FA, 0x6CEF, 0xE3FD, 0x6CF0, 0xCCA9, 0x6CF1, 0xE3F3, 0x6CF2, 0x9B8B, + 0x6CF3, 0xD3BE, 0x6CF4, 0x9B8C, 0x6CF5, 0xB1C3, 0x6CF6, 0xEDB4, 0x6CF7, 0xE3F1, 0x6CF8, 0xE3F2, 0x6CF9, 0x9B8D, 0x6CFA, 0xE3F8, + 0x6CFB, 0xD0BA, 0x6CFC, 0xC6C3, 0x6CFD, 0xD4F3, 0x6CFE, 0xE3FE, 0x6CFF, 0x9B8E, 0x6D00, 0x9B8F, 0x6D01, 0xBDE0, 0x6D02, 0x9B90, + 0x6D03, 0x9B91, 0x6D04, 0xE4A7, 0x6D05, 0x9B92, 0x6D06, 0x9B93, 0x6D07, 0xE4A6, 0x6D08, 0x9B94, 0x6D09, 0x9B95, 0x6D0A, 0x9B96, + 0x6D0B, 0xD1F3, 0x6D0C, 0xE4A3, 0x6D0D, 0x9B97, 0x6D0E, 0xE4A9, 0x6D0F, 0x9B98, 0x6D10, 0x9B99, 0x6D11, 0x9B9A, 0x6D12, 0xC8F7, + 0x6D13, 0x9B9B, 0x6D14, 0x9B9C, 0x6D15, 0x9B9D, 0x6D16, 0x9B9E, 0x6D17, 0xCFB4, 0x6D18, 0x9B9F, 0x6D19, 0xE4A8, 0x6D1A, 0xE4AE, + 0x6D1B, 0xC2E5, 0x6D1C, 0x9BA0, 0x6D1D, 0x9BA1, 0x6D1E, 0xB6B4, 0x6D1F, 0x9BA2, 0x6D20, 0x9BA3, 0x6D21, 0x9BA4, 0x6D22, 0x9BA5, + 0x6D23, 0x9BA6, 0x6D24, 0x9BA7, 0x6D25, 0xBDF2, 0x6D26, 0x9BA8, 0x6D27, 0xE4A2, 0x6D28, 0x9BA9, 0x6D29, 0x9BAA, 0x6D2A, 0xBAE9, + 0x6D2B, 0xE4AA, 0x6D2C, 0x9BAB, 0x6D2D, 0x9BAC, 0x6D2E, 0xE4AC, 0x6D2F, 0x9BAD, 0x6D30, 0x9BAE, 0x6D31, 0xB6FD, 0x6D32, 0xD6DE, + 0x6D33, 0xE4B2, 0x6D34, 0x9BAF, 0x6D35, 0xE4AD, 0x6D36, 0x9BB0, 0x6D37, 0x9BB1, 0x6D38, 0x9BB2, 0x6D39, 0xE4A1, 0x6D3A, 0x9BB3, + 0x6D3B, 0xBBEE, 0x6D3C, 0xCDDD, 0x6D3D, 0xC7A2, 0x6D3E, 0xC5C9, 0x6D3F, 0x9BB4, 0x6D40, 0x9BB5, 0x6D41, 0xC1F7, 0x6D42, 0x9BB6, + 0x6D43, 0xE4A4, 0x6D44, 0x9BB7, 0x6D45, 0xC7B3, 0x6D46, 0xBDAC, 0x6D47, 0xBDBD, 0x6D48, 0xE4A5, 0x6D49, 0x9BB8, 0x6D4A, 0xD7C7, + 0x6D4B, 0xB2E2, 0x6D4C, 0x9BB9, 0x6D4D, 0xE4AB, 0x6D4E, 0xBCC3, 0x6D4F, 0xE4AF, 0x6D50, 0x9BBA, 0x6D51, 0xBBEB, 0x6D52, 0xE4B0, + 0x6D53, 0xC5A8, 0x6D54, 0xE4B1, 0x6D55, 0x9BBB, 0x6D56, 0x9BBC, 0x6D57, 0x9BBD, 0x6D58, 0x9BBE, 0x6D59, 0xD5E3, 0x6D5A, 0xBFA3, + 0x6D5B, 0x9BBF, 0x6D5C, 0xE4BA, 0x6D5D, 0x9BC0, 0x6D5E, 0xE4B7, 0x6D5F, 0x9BC1, 0x6D60, 0xE4BB, 0x6D61, 0x9BC2, 0x6D62, 0x9BC3, + 0x6D63, 0xE4BD, 0x6D64, 0x9BC4, 0x6D65, 0x9BC5, 0x6D66, 0xC6D6, 0x6D67, 0x9BC6, 0x6D68, 0x9BC7, 0x6D69, 0xBAC6, 0x6D6A, 0xC0CB, + 0x6D6B, 0x9BC8, 0x6D6C, 0x9BC9, 0x6D6D, 0x9BCA, 0x6D6E, 0xB8A1, 0x6D6F, 0xE4B4, 0x6D70, 0x9BCB, 0x6D71, 0x9BCC, 0x6D72, 0x9BCD, + 0x6D73, 0x9BCE, 0x6D74, 0xD4A1, 0x6D75, 0x9BCF, 0x6D76, 0x9BD0, 0x6D77, 0xBAA3, 0x6D78, 0xBDFE, 0x6D79, 0x9BD1, 0x6D7A, 0x9BD2, + 0x6D7B, 0x9BD3, 0x6D7C, 0xE4BC, 0x6D7D, 0x9BD4, 0x6D7E, 0x9BD5, 0x6D7F, 0x9BD6, 0x6D80, 0x9BD7, 0x6D81, 0x9BD8, 0x6D82, 0xCDBF, + 0x6D83, 0x9BD9, 0x6D84, 0x9BDA, 0x6D85, 0xC4F9, 0x6D86, 0x9BDB, 0x6D87, 0x9BDC, 0x6D88, 0xCFFB, 0x6D89, 0xC9E6, 0x6D8A, 0x9BDD, + 0x6D8B, 0x9BDE, 0x6D8C, 0xD3BF, 0x6D8D, 0x9BDF, 0x6D8E, 0xCFD1, 0x6D8F, 0x9BE0, 0x6D90, 0x9BE1, 0x6D91, 0xE4B3, 0x6D92, 0x9BE2, + 0x6D93, 0xE4B8, 0x6D94, 0xE4B9, 0x6D95, 0xCCE9, 0x6D96, 0x9BE3, 0x6D97, 0x9BE4, 0x6D98, 0x9BE5, 0x6D99, 0x9BE6, 0x6D9A, 0x9BE7, + 0x6D9B, 0xCCCE, 0x6D9C, 0x9BE8, 0x6D9D, 0xC0D4, 0x6D9E, 0xE4B5, 0x6D9F, 0xC1B0, 0x6DA0, 0xE4B6, 0x6DA1, 0xCED0, 0x6DA2, 0x9BE9, + 0x6DA3, 0xBBC1, 0x6DA4, 0xB5D3, 0x6DA5, 0x9BEA, 0x6DA6, 0xC8F3, 0x6DA7, 0xBDA7, 0x6DA8, 0xD5C7, 0x6DA9, 0xC9AC, 0x6DAA, 0xB8A2, + 0x6DAB, 0xE4CA, 0x6DAC, 0x9BEB, 0x6DAD, 0x9BEC, 0x6DAE, 0xE4CC, 0x6DAF, 0xD1C4, 0x6DB0, 0x9BED, 0x6DB1, 0x9BEE, 0x6DB2, 0xD2BA, + 0x6DB3, 0x9BEF, 0x6DB4, 0x9BF0, 0x6DB5, 0xBAAD, 0x6DB6, 0x9BF1, 0x6DB7, 0x9BF2, 0x6DB8, 0xBAD4, 0x6DB9, 0x9BF3, 0x6DBA, 0x9BF4, + 0x6DBB, 0x9BF5, 0x6DBC, 0x9BF6, 0x6DBD, 0x9BF7, 0x6DBE, 0x9BF8, 0x6DBF, 0xE4C3, 0x6DC0, 0xB5ED, 0x6DC1, 0x9BF9, 0x6DC2, 0x9BFA, + 0x6DC3, 0x9BFB, 0x6DC4, 0xD7CD, 0x6DC5, 0xE4C0, 0x6DC6, 0xCFFD, 0x6DC7, 0xE4BF, 0x6DC8, 0x9BFC, 0x6DC9, 0x9BFD, 0x6DCA, 0x9BFE, + 0x6DCB, 0xC1DC, 0x6DCC, 0xCCCA, 0x6DCD, 0x9C40, 0x6DCE, 0x9C41, 0x6DCF, 0x9C42, 0x6DD0, 0x9C43, 0x6DD1, 0xCAE7, 0x6DD2, 0x9C44, + 0x6DD3, 0x9C45, 0x6DD4, 0x9C46, 0x6DD5, 0x9C47, 0x6DD6, 0xC4D7, 0x6DD7, 0x9C48, 0x6DD8, 0xCCD4, 0x6DD9, 0xE4C8, 0x6DDA, 0x9C49, + 0x6DDB, 0x9C4A, 0x6DDC, 0x9C4B, 0x6DDD, 0xE4C7, 0x6DDE, 0xE4C1, 0x6DDF, 0x9C4C, 0x6DE0, 0xE4C4, 0x6DE1, 0xB5AD, 0x6DE2, 0x9C4D, + 0x6DE3, 0x9C4E, 0x6DE4, 0xD3D9, 0x6DE5, 0x9C4F, 0x6DE6, 0xE4C6, 0x6DE7, 0x9C50, 0x6DE8, 0x9C51, 0x6DE9, 0x9C52, 0x6DEA, 0x9C53, + 0x6DEB, 0xD2F9, 0x6DEC, 0xB4E3, 0x6DED, 0x9C54, 0x6DEE, 0xBBB4, 0x6DEF, 0x9C55, 0x6DF0, 0x9C56, 0x6DF1, 0xC9EE, 0x6DF2, 0x9C57, + 0x6DF3, 0xB4BE, 0x6DF4, 0x9C58, 0x6DF5, 0x9C59, 0x6DF6, 0x9C5A, 0x6DF7, 0xBBEC, 0x6DF8, 0x9C5B, 0x6DF9, 0xD1CD, 0x6DFA, 0x9C5C, + 0x6DFB, 0xCCED, 0x6DFC, 0xEDB5, 0x6DFD, 0x9C5D, 0x6DFE, 0x9C5E, 0x6DFF, 0x9C5F, 0x6E00, 0x9C60, 0x6E01, 0x9C61, 0x6E02, 0x9C62, + 0x6E03, 0x9C63, 0x6E04, 0x9C64, 0x6E05, 0xC7E5, 0x6E06, 0x9C65, 0x6E07, 0x9C66, 0x6E08, 0x9C67, 0x6E09, 0x9C68, 0x6E0A, 0xD4A8, + 0x6E0B, 0x9C69, 0x6E0C, 0xE4CB, 0x6E0D, 0xD7D5, 0x6E0E, 0xE4C2, 0x6E0F, 0x9C6A, 0x6E10, 0xBDA5, 0x6E11, 0xE4C5, 0x6E12, 0x9C6B, + 0x6E13, 0x9C6C, 0x6E14, 0xD3E6, 0x6E15, 0x9C6D, 0x6E16, 0xE4C9, 0x6E17, 0xC9F8, 0x6E18, 0x9C6E, 0x6E19, 0x9C6F, 0x6E1A, 0xE4BE, + 0x6E1B, 0x9C70, 0x6E1C, 0x9C71, 0x6E1D, 0xD3E5, 0x6E1E, 0x9C72, 0x6E1F, 0x9C73, 0x6E20, 0xC7FE, 0x6E21, 0xB6C9, 0x6E22, 0x9C74, + 0x6E23, 0xD4FC, 0x6E24, 0xB2B3, 0x6E25, 0xE4D7, 0x6E26, 0x9C75, 0x6E27, 0x9C76, 0x6E28, 0x9C77, 0x6E29, 0xCEC2, 0x6E2A, 0x9C78, + 0x6E2B, 0xE4CD, 0x6E2C, 0x9C79, 0x6E2D, 0xCEBC, 0x6E2E, 0x9C7A, 0x6E2F, 0xB8DB, 0x6E30, 0x9C7B, 0x6E31, 0x9C7C, 0x6E32, 0xE4D6, + 0x6E33, 0x9C7D, 0x6E34, 0xBFCA, 0x6E35, 0x9C7E, 0x6E36, 0x9C80, 0x6E37, 0x9C81, 0x6E38, 0xD3CE, 0x6E39, 0x9C82, 0x6E3A, 0xC3EC, + 0x6E3B, 0x9C83, 0x6E3C, 0x9C84, 0x6E3D, 0x9C85, 0x6E3E, 0x9C86, 0x6E3F, 0x9C87, 0x6E40, 0x9C88, 0x6E41, 0x9C89, 0x6E42, 0x9C8A, + 0x6E43, 0xC5C8, 0x6E44, 0xE4D8, 0x6E45, 0x9C8B, 0x6E46, 0x9C8C, 0x6E47, 0x9C8D, 0x6E48, 0x9C8E, 0x6E49, 0x9C8F, 0x6E4A, 0x9C90, + 0x6E4B, 0x9C91, 0x6E4C, 0x9C92, 0x6E4D, 0xCDC4, 0x6E4E, 0xE4CF, 0x6E4F, 0x9C93, 0x6E50, 0x9C94, 0x6E51, 0x9C95, 0x6E52, 0x9C96, + 0x6E53, 0xE4D4, 0x6E54, 0xE4D5, 0x6E55, 0x9C97, 0x6E56, 0xBAFE, 0x6E57, 0x9C98, 0x6E58, 0xCFE6, 0x6E59, 0x9C99, 0x6E5A, 0x9C9A, + 0x6E5B, 0xD5BF, 0x6E5C, 0x9C9B, 0x6E5D, 0x9C9C, 0x6E5E, 0x9C9D, 0x6E5F, 0xE4D2, 0x6E60, 0x9C9E, 0x6E61, 0x9C9F, 0x6E62, 0x9CA0, + 0x6E63, 0x9CA1, 0x6E64, 0x9CA2, 0x6E65, 0x9CA3, 0x6E66, 0x9CA4, 0x6E67, 0x9CA5, 0x6E68, 0x9CA6, 0x6E69, 0x9CA7, 0x6E6A, 0x9CA8, + 0x6E6B, 0xE4D0, 0x6E6C, 0x9CA9, 0x6E6D, 0x9CAA, 0x6E6E, 0xE4CE, 0x6E6F, 0x9CAB, 0x6E70, 0x9CAC, 0x6E71, 0x9CAD, 0x6E72, 0x9CAE, + 0x6E73, 0x9CAF, 0x6E74, 0x9CB0, 0x6E75, 0x9CB1, 0x6E76, 0x9CB2, 0x6E77, 0x9CB3, 0x6E78, 0x9CB4, 0x6E79, 0x9CB5, 0x6E7A, 0x9CB6, + 0x6E7B, 0x9CB7, 0x6E7C, 0x9CB8, 0x6E7D, 0x9CB9, 0x6E7E, 0xCDE5, 0x6E7F, 0xCAAA, 0x6E80, 0x9CBA, 0x6E81, 0x9CBB, 0x6E82, 0x9CBC, + 0x6E83, 0xC0A3, 0x6E84, 0x9CBD, 0x6E85, 0xBDA6, 0x6E86, 0xE4D3, 0x6E87, 0x9CBE, 0x6E88, 0x9CBF, 0x6E89, 0xB8C8, 0x6E8A, 0x9CC0, + 0x6E8B, 0x9CC1, 0x6E8C, 0x9CC2, 0x6E8D, 0x9CC3, 0x6E8E, 0x9CC4, 0x6E8F, 0xE4E7, 0x6E90, 0xD4B4, 0x6E91, 0x9CC5, 0x6E92, 0x9CC6, + 0x6E93, 0x9CC7, 0x6E94, 0x9CC8, 0x6E95, 0x9CC9, 0x6E96, 0x9CCA, 0x6E97, 0x9CCB, 0x6E98, 0xE4DB, 0x6E99, 0x9CCC, 0x6E9A, 0x9CCD, + 0x6E9B, 0x9CCE, 0x6E9C, 0xC1EF, 0x6E9D, 0x9CCF, 0x6E9E, 0x9CD0, 0x6E9F, 0xE4E9, 0x6EA0, 0x9CD1, 0x6EA1, 0x9CD2, 0x6EA2, 0xD2E7, + 0x6EA3, 0x9CD3, 0x6EA4, 0x9CD4, 0x6EA5, 0xE4DF, 0x6EA6, 0x9CD5, 0x6EA7, 0xE4E0, 0x6EA8, 0x9CD6, 0x6EA9, 0x9CD7, 0x6EAA, 0xCFAA, + 0x6EAB, 0x9CD8, 0x6EAC, 0x9CD9, 0x6EAD, 0x9CDA, 0x6EAE, 0x9CDB, 0x6EAF, 0xCBDD, 0x6EB0, 0x9CDC, 0x6EB1, 0xE4DA, 0x6EB2, 0xE4D1, + 0x6EB3, 0x9CDD, 0x6EB4, 0xE4E5, 0x6EB5, 0x9CDE, 0x6EB6, 0xC8DC, 0x6EB7, 0xE4E3, 0x6EB8, 0x9CDF, 0x6EB9, 0x9CE0, 0x6EBA, 0xC4E7, + 0x6EBB, 0xE4E2, 0x6EBC, 0x9CE1, 0x6EBD, 0xE4E1, 0x6EBE, 0x9CE2, 0x6EBF, 0x9CE3, 0x6EC0, 0x9CE4, 0x6EC1, 0xB3FC, 0x6EC2, 0xE4E8, + 0x6EC3, 0x9CE5, 0x6EC4, 0x9CE6, 0x6EC5, 0x9CE7, 0x6EC6, 0x9CE8, 0x6EC7, 0xB5E1, 0x6EC8, 0x9CE9, 0x6EC9, 0x9CEA, 0x6ECA, 0x9CEB, + 0x6ECB, 0xD7CC, 0x6ECC, 0x9CEC, 0x6ECD, 0x9CED, 0x6ECE, 0x9CEE, 0x6ECF, 0xE4E6, 0x6ED0, 0x9CEF, 0x6ED1, 0xBBAC, 0x6ED2, 0x9CF0, + 0x6ED3, 0xD7D2, 0x6ED4, 0xCCCF, 0x6ED5, 0xEBF8, 0x6ED6, 0x9CF1, 0x6ED7, 0xE4E4, 0x6ED8, 0x9CF2, 0x6ED9, 0x9CF3, 0x6EDA, 0xB9F6, + 0x6EDB, 0x9CF4, 0x6EDC, 0x9CF5, 0x6EDD, 0x9CF6, 0x6EDE, 0xD6CD, 0x6EDF, 0xE4D9, 0x6EE0, 0xE4DC, 0x6EE1, 0xC2FA, 0x6EE2, 0xE4DE, + 0x6EE3, 0x9CF7, 0x6EE4, 0xC2CB, 0x6EE5, 0xC0C4, 0x6EE6, 0xC2D0, 0x6EE7, 0x9CF8, 0x6EE8, 0xB1F5, 0x6EE9, 0xCCB2, 0x6EEA, 0x9CF9, + 0x6EEB, 0x9CFA, 0x6EEC, 0x9CFB, 0x6EED, 0x9CFC, 0x6EEE, 0x9CFD, 0x6EEF, 0x9CFE, 0x6EF0, 0x9D40, 0x6EF1, 0x9D41, 0x6EF2, 0x9D42, + 0x6EF3, 0x9D43, 0x6EF4, 0xB5CE, 0x6EF5, 0x9D44, 0x6EF6, 0x9D45, 0x6EF7, 0x9D46, 0x6EF8, 0x9D47, 0x6EF9, 0xE4EF, 0x6EFA, 0x9D48, + 0x6EFB, 0x9D49, 0x6EFC, 0x9D4A, 0x6EFD, 0x9D4B, 0x6EFE, 0x9D4C, 0x6EFF, 0x9D4D, 0x6F00, 0x9D4E, 0x6F01, 0x9D4F, 0x6F02, 0xC6AF, + 0x6F03, 0x9D50, 0x6F04, 0x9D51, 0x6F05, 0x9D52, 0x6F06, 0xC6E1, 0x6F07, 0x9D53, 0x6F08, 0x9D54, 0x6F09, 0xE4F5, 0x6F0A, 0x9D55, + 0x6F0B, 0x9D56, 0x6F0C, 0x9D57, 0x6F0D, 0x9D58, 0x6F0E, 0x9D59, 0x6F0F, 0xC2A9, 0x6F10, 0x9D5A, 0x6F11, 0x9D5B, 0x6F12, 0x9D5C, + 0x6F13, 0xC0EC, 0x6F14, 0xD1DD, 0x6F15, 0xE4EE, 0x6F16, 0x9D5D, 0x6F17, 0x9D5E, 0x6F18, 0x9D5F, 0x6F19, 0x9D60, 0x6F1A, 0x9D61, + 0x6F1B, 0x9D62, 0x6F1C, 0x9D63, 0x6F1D, 0x9D64, 0x6F1E, 0x9D65, 0x6F1F, 0x9D66, 0x6F20, 0xC4AE, 0x6F21, 0x9D67, 0x6F22, 0x9D68, + 0x6F23, 0x9D69, 0x6F24, 0xE4ED, 0x6F25, 0x9D6A, 0x6F26, 0x9D6B, 0x6F27, 0x9D6C, 0x6F28, 0x9D6D, 0x6F29, 0xE4F6, 0x6F2A, 0xE4F4, + 0x6F2B, 0xC2FE, 0x6F2C, 0x9D6E, 0x6F2D, 0xE4DD, 0x6F2E, 0x9D6F, 0x6F2F, 0xE4F0, 0x6F30, 0x9D70, 0x6F31, 0xCAFE, 0x6F32, 0x9D71, + 0x6F33, 0xD5C4, 0x6F34, 0x9D72, 0x6F35, 0x9D73, 0x6F36, 0xE4F1, 0x6F37, 0x9D74, 0x6F38, 0x9D75, 0x6F39, 0x9D76, 0x6F3A, 0x9D77, + 0x6F3B, 0x9D78, 0x6F3C, 0x9D79, 0x6F3D, 0x9D7A, 0x6F3E, 0xD1FA, 0x6F3F, 0x9D7B, 0x6F40, 0x9D7C, 0x6F41, 0x9D7D, 0x6F42, 0x9D7E, + 0x6F43, 0x9D80, 0x6F44, 0x9D81, 0x6F45, 0x9D82, 0x6F46, 0xE4EB, 0x6F47, 0xE4EC, 0x6F48, 0x9D83, 0x6F49, 0x9D84, 0x6F4A, 0x9D85, + 0x6F4B, 0xE4F2, 0x6F4C, 0x9D86, 0x6F4D, 0xCEAB, 0x6F4E, 0x9D87, 0x6F4F, 0x9D88, 0x6F50, 0x9D89, 0x6F51, 0x9D8A, 0x6F52, 0x9D8B, + 0x6F53, 0x9D8C, 0x6F54, 0x9D8D, 0x6F55, 0x9D8E, 0x6F56, 0x9D8F, 0x6F57, 0x9D90, 0x6F58, 0xC5CB, 0x6F59, 0x9D91, 0x6F5A, 0x9D92, + 0x6F5B, 0x9D93, 0x6F5C, 0xC7B1, 0x6F5D, 0x9D94, 0x6F5E, 0xC2BA, 0x6F5F, 0x9D95, 0x6F60, 0x9D96, 0x6F61, 0x9D97, 0x6F62, 0xE4EA, + 0x6F63, 0x9D98, 0x6F64, 0x9D99, 0x6F65, 0x9D9A, 0x6F66, 0xC1CA, 0x6F67, 0x9D9B, 0x6F68, 0x9D9C, 0x6F69, 0x9D9D, 0x6F6A, 0x9D9E, + 0x6F6B, 0x9D9F, 0x6F6C, 0x9DA0, 0x6F6D, 0xCCB6, 0x6F6E, 0xB3B1, 0x6F6F, 0x9DA1, 0x6F70, 0x9DA2, 0x6F71, 0x9DA3, 0x6F72, 0xE4FB, + 0x6F73, 0x9DA4, 0x6F74, 0xE4F3, 0x6F75, 0x9DA5, 0x6F76, 0x9DA6, 0x6F77, 0x9DA7, 0x6F78, 0xE4FA, 0x6F79, 0x9DA8, 0x6F7A, 0xE4FD, + 0x6F7B, 0x9DA9, 0x6F7C, 0xE4FC, 0x6F7D, 0x9DAA, 0x6F7E, 0x9DAB, 0x6F7F, 0x9DAC, 0x6F80, 0x9DAD, 0x6F81, 0x9DAE, 0x6F82, 0x9DAF, + 0x6F83, 0x9DB0, 0x6F84, 0xB3CE, 0x6F85, 0x9DB1, 0x6F86, 0x9DB2, 0x6F87, 0x9DB3, 0x6F88, 0xB3BA, 0x6F89, 0xE4F7, 0x6F8A, 0x9DB4, + 0x6F8B, 0x9DB5, 0x6F8C, 0xE4F9, 0x6F8D, 0xE4F8, 0x6F8E, 0xC5EC, 0x6F8F, 0x9DB6, 0x6F90, 0x9DB7, 0x6F91, 0x9DB8, 0x6F92, 0x9DB9, + 0x6F93, 0x9DBA, 0x6F94, 0x9DBB, 0x6F95, 0x9DBC, 0x6F96, 0x9DBD, 0x6F97, 0x9DBE, 0x6F98, 0x9DBF, 0x6F99, 0x9DC0, 0x6F9A, 0x9DC1, + 0x6F9B, 0x9DC2, 0x6F9C, 0xC0BD, 0x6F9D, 0x9DC3, 0x6F9E, 0x9DC4, 0x6F9F, 0x9DC5, 0x6FA0, 0x9DC6, 0x6FA1, 0xD4E8, 0x6FA2, 0x9DC7, + 0x6FA3, 0x9DC8, 0x6FA4, 0x9DC9, 0x6FA5, 0x9DCA, 0x6FA6, 0x9DCB, 0x6FA7, 0xE5A2, 0x6FA8, 0x9DCC, 0x6FA9, 0x9DCD, 0x6FAA, 0x9DCE, + 0x6FAB, 0x9DCF, 0x6FAC, 0x9DD0, 0x6FAD, 0x9DD1, 0x6FAE, 0x9DD2, 0x6FAF, 0x9DD3, 0x6FB0, 0x9DD4, 0x6FB1, 0x9DD5, 0x6FB2, 0x9DD6, + 0x6FB3, 0xB0C4, 0x6FB4, 0x9DD7, 0x6FB5, 0x9DD8, 0x6FB6, 0xE5A4, 0x6FB7, 0x9DD9, 0x6FB8, 0x9DDA, 0x6FB9, 0xE5A3, 0x6FBA, 0x9DDB, + 0x6FBB, 0x9DDC, 0x6FBC, 0x9DDD, 0x6FBD, 0x9DDE, 0x6FBE, 0x9DDF, 0x6FBF, 0x9DE0, 0x6FC0, 0xBCA4, 0x6FC1, 0x9DE1, 0x6FC2, 0xE5A5, + 0x6FC3, 0x9DE2, 0x6FC4, 0x9DE3, 0x6FC5, 0x9DE4, 0x6FC6, 0x9DE5, 0x6FC7, 0x9DE6, 0x6FC8, 0x9DE7, 0x6FC9, 0xE5A1, 0x6FCA, 0x9DE8, + 0x6FCB, 0x9DE9, 0x6FCC, 0x9DEA, 0x6FCD, 0x9DEB, 0x6FCE, 0x9DEC, 0x6FCF, 0x9DED, 0x6FD0, 0x9DEE, 0x6FD1, 0xE4FE, 0x6FD2, 0xB1F4, + 0x6FD3, 0x9DEF, 0x6FD4, 0x9DF0, 0x6FD5, 0x9DF1, 0x6FD6, 0x9DF2, 0x6FD7, 0x9DF3, 0x6FD8, 0x9DF4, 0x6FD9, 0x9DF5, 0x6FDA, 0x9DF6, + 0x6FDB, 0x9DF7, 0x6FDC, 0x9DF8, 0x6FDD, 0x9DF9, 0x6FDE, 0xE5A8, 0x6FDF, 0x9DFA, 0x6FE0, 0xE5A9, 0x6FE1, 0xE5A6, 0x6FE2, 0x9DFB, + 0x6FE3, 0x9DFC, 0x6FE4, 0x9DFD, 0x6FE5, 0x9DFE, 0x6FE6, 0x9E40, 0x6FE7, 0x9E41, 0x6FE8, 0x9E42, 0x6FE9, 0x9E43, 0x6FEA, 0x9E44, + 0x6FEB, 0x9E45, 0x6FEC, 0x9E46, 0x6FED, 0x9E47, 0x6FEE, 0xE5A7, 0x6FEF, 0xE5AA, 0x6FF0, 0x9E48, 0x6FF1, 0x9E49, 0x6FF2, 0x9E4A, + 0x6FF3, 0x9E4B, 0x6FF4, 0x9E4C, 0x6FF5, 0x9E4D, 0x6FF6, 0x9E4E, 0x6FF7, 0x9E4F, 0x6FF8, 0x9E50, 0x6FF9, 0x9E51, 0x6FFA, 0x9E52, + 0x6FFB, 0x9E53, 0x6FFC, 0x9E54, 0x6FFD, 0x9E55, 0x6FFE, 0x9E56, 0x6FFF, 0x9E57, 0x7000, 0x9E58, 0x7001, 0x9E59, 0x7002, 0x9E5A, + 0x7003, 0x9E5B, 0x7004, 0x9E5C, 0x7005, 0x9E5D, 0x7006, 0x9E5E, 0x7007, 0x9E5F, 0x7008, 0x9E60, 0x7009, 0x9E61, 0x700A, 0x9E62, + 0x700B, 0x9E63, 0x700C, 0x9E64, 0x700D, 0x9E65, 0x700E, 0x9E66, 0x700F, 0x9E67, 0x7010, 0x9E68, 0x7011, 0xC6D9, 0x7012, 0x9E69, + 0x7013, 0x9E6A, 0x7014, 0x9E6B, 0x7015, 0x9E6C, 0x7016, 0x9E6D, 0x7017, 0x9E6E, 0x7018, 0x9E6F, 0x7019, 0x9E70, 0x701A, 0xE5AB, + 0x701B, 0xE5AD, 0x701C, 0x9E71, 0x701D, 0x9E72, 0x701E, 0x9E73, 0x701F, 0x9E74, 0x7020, 0x9E75, 0x7021, 0x9E76, 0x7022, 0x9E77, + 0x7023, 0xE5AC, 0x7024, 0x9E78, 0x7025, 0x9E79, 0x7026, 0x9E7A, 0x7027, 0x9E7B, 0x7028, 0x9E7C, 0x7029, 0x9E7D, 0x702A, 0x9E7E, + 0x702B, 0x9E80, 0x702C, 0x9E81, 0x702D, 0x9E82, 0x702E, 0x9E83, 0x702F, 0x9E84, 0x7030, 0x9E85, 0x7031, 0x9E86, 0x7032, 0x9E87, + 0x7033, 0x9E88, 0x7034, 0x9E89, 0x7035, 0xE5AF, 0x7036, 0x9E8A, 0x7037, 0x9E8B, 0x7038, 0x9E8C, 0x7039, 0xE5AE, 0x703A, 0x9E8D, + 0x703B, 0x9E8E, 0x703C, 0x9E8F, 0x703D, 0x9E90, 0x703E, 0x9E91, 0x703F, 0x9E92, 0x7040, 0x9E93, 0x7041, 0x9E94, 0x7042, 0x9E95, + 0x7043, 0x9E96, 0x7044, 0x9E97, 0x7045, 0x9E98, 0x7046, 0x9E99, 0x7047, 0x9E9A, 0x7048, 0x9E9B, 0x7049, 0x9E9C, 0x704A, 0x9E9D, + 0x704B, 0x9E9E, 0x704C, 0xB9E0, 0x704D, 0x9E9F, 0x704E, 0x9EA0, 0x704F, 0xE5B0, 0x7050, 0x9EA1, 0x7051, 0x9EA2, 0x7052, 0x9EA3, + 0x7053, 0x9EA4, 0x7054, 0x9EA5, 0x7055, 0x9EA6, 0x7056, 0x9EA7, 0x7057, 0x9EA8, 0x7058, 0x9EA9, 0x7059, 0x9EAA, 0x705A, 0x9EAB, + 0x705B, 0x9EAC, 0x705C, 0x9EAD, 0x705D, 0x9EAE, 0x705E, 0xE5B1, 0x705F, 0x9EAF, 0x7060, 0x9EB0, 0x7061, 0x9EB1, 0x7062, 0x9EB2, + 0x7063, 0x9EB3, 0x7064, 0x9EB4, 0x7065, 0x9EB5, 0x7066, 0x9EB6, 0x7067, 0x9EB7, 0x7068, 0x9EB8, 0x7069, 0x9EB9, 0x706A, 0x9EBA, + 0x706B, 0xBBF0, 0x706C, 0xECE1, 0x706D, 0xC3F0, 0x706E, 0x9EBB, 0x706F, 0xB5C6, 0x7070, 0xBBD2, 0x7071, 0x9EBC, 0x7072, 0x9EBD, + 0x7073, 0x9EBE, 0x7074, 0x9EBF, 0x7075, 0xC1E9, 0x7076, 0xD4EE, 0x7077, 0x9EC0, 0x7078, 0xBEC4, 0x7079, 0x9EC1, 0x707A, 0x9EC2, + 0x707B, 0x9EC3, 0x707C, 0xD7C6, 0x707D, 0x9EC4, 0x707E, 0xD4D6, 0x707F, 0xB2D3, 0x7080, 0xECBE, 0x7081, 0x9EC5, 0x7082, 0x9EC6, + 0x7083, 0x9EC7, 0x7084, 0x9EC8, 0x7085, 0xEAC1, 0x7086, 0x9EC9, 0x7087, 0x9ECA, 0x7088, 0x9ECB, 0x7089, 0xC2AF, 0x708A, 0xB4B6, + 0x708B, 0x9ECC, 0x708C, 0x9ECD, 0x708D, 0x9ECE, 0x708E, 0xD1D7, 0x708F, 0x9ECF, 0x7090, 0x9ED0, 0x7091, 0x9ED1, 0x7092, 0xB3B4, + 0x7093, 0x9ED2, 0x7094, 0xC8B2, 0x7095, 0xBFBB, 0x7096, 0xECC0, 0x7097, 0x9ED3, 0x7098, 0x9ED4, 0x7099, 0xD6CB, 0x709A, 0x9ED5, + 0x709B, 0x9ED6, 0x709C, 0xECBF, 0x709D, 0xECC1, 0x709E, 0x9ED7, 0x709F, 0x9ED8, 0x70A0, 0x9ED9, 0x70A1, 0x9EDA, 0x70A2, 0x9EDB, + 0x70A3, 0x9EDC, 0x70A4, 0x9EDD, 0x70A5, 0x9EDE, 0x70A6, 0x9EDF, 0x70A7, 0x9EE0, 0x70A8, 0x9EE1, 0x70A9, 0x9EE2, 0x70AA, 0x9EE3, + 0x70AB, 0xECC5, 0x70AC, 0xBEE6, 0x70AD, 0xCCBF, 0x70AE, 0xC5DA, 0x70AF, 0xBEBC, 0x70B0, 0x9EE4, 0x70B1, 0xECC6, 0x70B2, 0x9EE5, + 0x70B3, 0xB1FE, 0x70B4, 0x9EE6, 0x70B5, 0x9EE7, 0x70B6, 0x9EE8, 0x70B7, 0xECC4, 0x70B8, 0xD5A8, 0x70B9, 0xB5E3, 0x70BA, 0x9EE9, + 0x70BB, 0xECC2, 0x70BC, 0xC1B6, 0x70BD, 0xB3E3, 0x70BE, 0x9EEA, 0x70BF, 0x9EEB, 0x70C0, 0xECC3, 0x70C1, 0xCBB8, 0x70C2, 0xC0C3, + 0x70C3, 0xCCFE, 0x70C4, 0x9EEC, 0x70C5, 0x9EED, 0x70C6, 0x9EEE, 0x70C7, 0x9EEF, 0x70C8, 0xC1D2, 0x70C9, 0x9EF0, 0x70CA, 0xECC8, + 0x70CB, 0x9EF1, 0x70CC, 0x9EF2, 0x70CD, 0x9EF3, 0x70CE, 0x9EF4, 0x70CF, 0x9EF5, 0x70D0, 0x9EF6, 0x70D1, 0x9EF7, 0x70D2, 0x9EF8, + 0x70D3, 0x9EF9, 0x70D4, 0x9EFA, 0x70D5, 0x9EFB, 0x70D6, 0x9EFC, 0x70D7, 0x9EFD, 0x70D8, 0xBAE6, 0x70D9, 0xC0D3, 0x70DA, 0x9EFE, + 0x70DB, 0xD6F2, 0x70DC, 0x9F40, 0x70DD, 0x9F41, 0x70DE, 0x9F42, 0x70DF, 0xD1CC, 0x70E0, 0x9F43, 0x70E1, 0x9F44, 0x70E2, 0x9F45, + 0x70E3, 0x9F46, 0x70E4, 0xBFBE, 0x70E5, 0x9F47, 0x70E6, 0xB7B3, 0x70E7, 0xC9D5, 0x70E8, 0xECC7, 0x70E9, 0xBBE2, 0x70EA, 0x9F48, + 0x70EB, 0xCCCC, 0x70EC, 0xBDFD, 0x70ED, 0xC8C8, 0x70EE, 0x9F49, 0x70EF, 0xCFA9, 0x70F0, 0x9F4A, 0x70F1, 0x9F4B, 0x70F2, 0x9F4C, + 0x70F3, 0x9F4D, 0x70F4, 0x9F4E, 0x70F5, 0x9F4F, 0x70F6, 0x9F50, 0x70F7, 0xCDE9, 0x70F8, 0x9F51, 0x70F9, 0xC5EB, 0x70FA, 0x9F52, + 0x70FB, 0x9F53, 0x70FC, 0x9F54, 0x70FD, 0xB7E9, 0x70FE, 0x9F55, 0x70FF, 0x9F56, 0x7100, 0x9F57, 0x7101, 0x9F58, 0x7102, 0x9F59, + 0x7103, 0x9F5A, 0x7104, 0x9F5B, 0x7105, 0x9F5C, 0x7106, 0x9F5D, 0x7107, 0x9F5E, 0x7108, 0x9F5F, 0x7109, 0xD1C9, 0x710A, 0xBAB8, + 0x710B, 0x9F60, 0x710C, 0x9F61, 0x710D, 0x9F62, 0x710E, 0x9F63, 0x710F, 0x9F64, 0x7110, 0xECC9, 0x7111, 0x9F65, 0x7112, 0x9F66, + 0x7113, 0xECCA, 0x7114, 0x9F67, 0x7115, 0xBBC0, 0x7116, 0xECCB, 0x7117, 0x9F68, 0x7118, 0xECE2, 0x7119, 0xB1BA, 0x711A, 0xB7D9, + 0x711B, 0x9F69, 0x711C, 0x9F6A, 0x711D, 0x9F6B, 0x711E, 0x9F6C, 0x711F, 0x9F6D, 0x7120, 0x9F6E, 0x7121, 0x9F6F, 0x7122, 0x9F70, + 0x7123, 0x9F71, 0x7124, 0x9F72, 0x7125, 0x9F73, 0x7126, 0xBDB9, 0x7127, 0x9F74, 0x7128, 0x9F75, 0x7129, 0x9F76, 0x712A, 0x9F77, + 0x712B, 0x9F78, 0x712C, 0x9F79, 0x712D, 0x9F7A, 0x712E, 0x9F7B, 0x712F, 0xECCC, 0x7130, 0xD1E6, 0x7131, 0xECCD, 0x7132, 0x9F7C, + 0x7133, 0x9F7D, 0x7134, 0x9F7E, 0x7135, 0x9F80, 0x7136, 0xC8BB, 0x7137, 0x9F81, 0x7138, 0x9F82, 0x7139, 0x9F83, 0x713A, 0x9F84, + 0x713B, 0x9F85, 0x713C, 0x9F86, 0x713D, 0x9F87, 0x713E, 0x9F88, 0x713F, 0x9F89, 0x7140, 0x9F8A, 0x7141, 0x9F8B, 0x7142, 0x9F8C, + 0x7143, 0x9F8D, 0x7144, 0x9F8E, 0x7145, 0xECD1, 0x7146, 0x9F8F, 0x7147, 0x9F90, 0x7148, 0x9F91, 0x7149, 0x9F92, 0x714A, 0xECD3, + 0x714B, 0x9F93, 0x714C, 0xBBCD, 0x714D, 0x9F94, 0x714E, 0xBCE5, 0x714F, 0x9F95, 0x7150, 0x9F96, 0x7151, 0x9F97, 0x7152, 0x9F98, + 0x7153, 0x9F99, 0x7154, 0x9F9A, 0x7155, 0x9F9B, 0x7156, 0x9F9C, 0x7157, 0x9F9D, 0x7158, 0x9F9E, 0x7159, 0x9F9F, 0x715A, 0x9FA0, + 0x715B, 0x9FA1, 0x715C, 0xECCF, 0x715D, 0x9FA2, 0x715E, 0xC9B7, 0x715F, 0x9FA3, 0x7160, 0x9FA4, 0x7161, 0x9FA5, 0x7162, 0x9FA6, + 0x7163, 0x9FA7, 0x7164, 0xC3BA, 0x7165, 0x9FA8, 0x7166, 0xECE3, 0x7167, 0xD5D5, 0x7168, 0xECD0, 0x7169, 0x9FA9, 0x716A, 0x9FAA, + 0x716B, 0x9FAB, 0x716C, 0x9FAC, 0x716D, 0x9FAD, 0x716E, 0xD6F3, 0x716F, 0x9FAE, 0x7170, 0x9FAF, 0x7171, 0x9FB0, 0x7172, 0xECD2, + 0x7173, 0xECCE, 0x7174, 0x9FB1, 0x7175, 0x9FB2, 0x7176, 0x9FB3, 0x7177, 0x9FB4, 0x7178, 0xECD4, 0x7179, 0x9FB5, 0x717A, 0xECD5, + 0x717B, 0x9FB6, 0x717C, 0x9FB7, 0x717D, 0xC9BF, 0x717E, 0x9FB8, 0x717F, 0x9FB9, 0x7180, 0x9FBA, 0x7181, 0x9FBB, 0x7182, 0x9FBC, + 0x7183, 0x9FBD, 0x7184, 0xCFA8, 0x7185, 0x9FBE, 0x7186, 0x9FBF, 0x7187, 0x9FC0, 0x7188, 0x9FC1, 0x7189, 0x9FC2, 0x718A, 0xD0DC, + 0x718B, 0x9FC3, 0x718C, 0x9FC4, 0x718D, 0x9FC5, 0x718E, 0x9FC6, 0x718F, 0xD1AC, 0x7190, 0x9FC7, 0x7191, 0x9FC8, 0x7192, 0x9FC9, + 0x7193, 0x9FCA, 0x7194, 0xC8DB, 0x7195, 0x9FCB, 0x7196, 0x9FCC, 0x7197, 0x9FCD, 0x7198, 0xECD6, 0x7199, 0xCEF5, 0x719A, 0x9FCE, + 0x719B, 0x9FCF, 0x719C, 0x9FD0, 0x719D, 0x9FD1, 0x719E, 0x9FD2, 0x719F, 0xCAEC, 0x71A0, 0xECDA, 0x71A1, 0x9FD3, 0x71A2, 0x9FD4, + 0x71A3, 0x9FD5, 0x71A4, 0x9FD6, 0x71A5, 0x9FD7, 0x71A6, 0x9FD8, 0x71A7, 0x9FD9, 0x71A8, 0xECD9, 0x71A9, 0x9FDA, 0x71AA, 0x9FDB, + 0x71AB, 0x9FDC, 0x71AC, 0xB0BE, 0x71AD, 0x9FDD, 0x71AE, 0x9FDE, 0x71AF, 0x9FDF, 0x71B0, 0x9FE0, 0x71B1, 0x9FE1, 0x71B2, 0x9FE2, + 0x71B3, 0xECD7, 0x71B4, 0x9FE3, 0x71B5, 0xECD8, 0x71B6, 0x9FE4, 0x71B7, 0x9FE5, 0x71B8, 0x9FE6, 0x71B9, 0xECE4, 0x71BA, 0x9FE7, + 0x71BB, 0x9FE8, 0x71BC, 0x9FE9, 0x71BD, 0x9FEA, 0x71BE, 0x9FEB, 0x71BF, 0x9FEC, 0x71C0, 0x9FED, 0x71C1, 0x9FEE, 0x71C2, 0x9FEF, + 0x71C3, 0xC8BC, 0x71C4, 0x9FF0, 0x71C5, 0x9FF1, 0x71C6, 0x9FF2, 0x71C7, 0x9FF3, 0x71C8, 0x9FF4, 0x71C9, 0x9FF5, 0x71CA, 0x9FF6, + 0x71CB, 0x9FF7, 0x71CC, 0x9FF8, 0x71CD, 0x9FF9, 0x71CE, 0xC1C7, 0x71CF, 0x9FFA, 0x71D0, 0x9FFB, 0x71D1, 0x9FFC, 0x71D2, 0x9FFD, + 0x71D3, 0x9FFE, 0x71D4, 0xECDC, 0x71D5, 0xD1E0, 0x71D6, 0xA040, 0x71D7, 0xA041, 0x71D8, 0xA042, 0x71D9, 0xA043, 0x71DA, 0xA044, + 0x71DB, 0xA045, 0x71DC, 0xA046, 0x71DD, 0xA047, 0x71DE, 0xA048, 0x71DF, 0xA049, 0x71E0, 0xECDB, 0x71E1, 0xA04A, 0x71E2, 0xA04B, + 0x71E3, 0xA04C, 0x71E4, 0xA04D, 0x71E5, 0xD4EF, 0x71E6, 0xA04E, 0x71E7, 0xECDD, 0x71E8, 0xA04F, 0x71E9, 0xA050, 0x71EA, 0xA051, + 0x71EB, 0xA052, 0x71EC, 0xA053, 0x71ED, 0xA054, 0x71EE, 0xDBC6, 0x71EF, 0xA055, 0x71F0, 0xA056, 0x71F1, 0xA057, 0x71F2, 0xA058, + 0x71F3, 0xA059, 0x71F4, 0xA05A, 0x71F5, 0xA05B, 0x71F6, 0xA05C, 0x71F7, 0xA05D, 0x71F8, 0xA05E, 0x71F9, 0xECDE, 0x71FA, 0xA05F, + 0x71FB, 0xA060, 0x71FC, 0xA061, 0x71FD, 0xA062, 0x71FE, 0xA063, 0x71FF, 0xA064, 0x7200, 0xA065, 0x7201, 0xA066, 0x7202, 0xA067, + 0x7203, 0xA068, 0x7204, 0xA069, 0x7205, 0xA06A, 0x7206, 0xB1AC, 0x7207, 0xA06B, 0x7208, 0xA06C, 0x7209, 0xA06D, 0x720A, 0xA06E, + 0x720B, 0xA06F, 0x720C, 0xA070, 0x720D, 0xA071, 0x720E, 0xA072, 0x720F, 0xA073, 0x7210, 0xA074, 0x7211, 0xA075, 0x7212, 0xA076, + 0x7213, 0xA077, 0x7214, 0xA078, 0x7215, 0xA079, 0x7216, 0xA07A, 0x7217, 0xA07B, 0x7218, 0xA07C, 0x7219, 0xA07D, 0x721A, 0xA07E, + 0x721B, 0xA080, 0x721C, 0xA081, 0x721D, 0xECDF, 0x721E, 0xA082, 0x721F, 0xA083, 0x7220, 0xA084, 0x7221, 0xA085, 0x7222, 0xA086, + 0x7223, 0xA087, 0x7224, 0xA088, 0x7225, 0xA089, 0x7226, 0xA08A, 0x7227, 0xA08B, 0x7228, 0xECE0, 0x7229, 0xA08C, 0x722A, 0xD7A6, + 0x722B, 0xA08D, 0x722C, 0xC5C0, 0x722D, 0xA08E, 0x722E, 0xA08F, 0x722F, 0xA090, 0x7230, 0xEBBC, 0x7231, 0xB0AE, 0x7232, 0xA091, + 0x7233, 0xA092, 0x7234, 0xA093, 0x7235, 0xBEF4, 0x7236, 0xB8B8, 0x7237, 0xD2AF, 0x7238, 0xB0D6, 0x7239, 0xB5F9, 0x723A, 0xA094, + 0x723B, 0xD8B3, 0x723C, 0xA095, 0x723D, 0xCBAC, 0x723E, 0xA096, 0x723F, 0xE3DD, 0x7240, 0xA097, 0x7241, 0xA098, 0x7242, 0xA099, + 0x7243, 0xA09A, 0x7244, 0xA09B, 0x7245, 0xA09C, 0x7246, 0xA09D, 0x7247, 0xC6AC, 0x7248, 0xB0E6, 0x7249, 0xA09E, 0x724A, 0xA09F, + 0x724B, 0xA0A0, 0x724C, 0xC5C6, 0x724D, 0xEBB9, 0x724E, 0xA0A1, 0x724F, 0xA0A2, 0x7250, 0xA0A3, 0x7251, 0xA0A4, 0x7252, 0xEBBA, + 0x7253, 0xA0A5, 0x7254, 0xA0A6, 0x7255, 0xA0A7, 0x7256, 0xEBBB, 0x7257, 0xA0A8, 0x7258, 0xA0A9, 0x7259, 0xD1C0, 0x725A, 0xA0AA, + 0x725B, 0xC5A3, 0x725C, 0xA0AB, 0x725D, 0xEAF2, 0x725E, 0xA0AC, 0x725F, 0xC4B2, 0x7260, 0xA0AD, 0x7261, 0xC4B5, 0x7262, 0xC0CE, + 0x7263, 0xA0AE, 0x7264, 0xA0AF, 0x7265, 0xA0B0, 0x7266, 0xEAF3, 0x7267, 0xC4C1, 0x7268, 0xA0B1, 0x7269, 0xCEEF, 0x726A, 0xA0B2, + 0x726B, 0xA0B3, 0x726C, 0xA0B4, 0x726D, 0xA0B5, 0x726E, 0xEAF0, 0x726F, 0xEAF4, 0x7270, 0xA0B6, 0x7271, 0xA0B7, 0x7272, 0xC9FC, + 0x7273, 0xA0B8, 0x7274, 0xA0B9, 0x7275, 0xC7A3, 0x7276, 0xA0BA, 0x7277, 0xA0BB, 0x7278, 0xA0BC, 0x7279, 0xCCD8, 0x727A, 0xCEFE, + 0x727B, 0xA0BD, 0x727C, 0xA0BE, 0x727D, 0xA0BF, 0x727E, 0xEAF5, 0x727F, 0xEAF6, 0x7280, 0xCFAC, 0x7281, 0xC0E7, 0x7282, 0xA0C0, + 0x7283, 0xA0C1, 0x7284, 0xEAF7, 0x7285, 0xA0C2, 0x7286, 0xA0C3, 0x7287, 0xA0C4, 0x7288, 0xA0C5, 0x7289, 0xA0C6, 0x728A, 0xB6BF, + 0x728B, 0xEAF8, 0x728C, 0xA0C7, 0x728D, 0xEAF9, 0x728E, 0xA0C8, 0x728F, 0xEAFA, 0x7290, 0xA0C9, 0x7291, 0xA0CA, 0x7292, 0xEAFB, + 0x7293, 0xA0CB, 0x7294, 0xA0CC, 0x7295, 0xA0CD, 0x7296, 0xA0CE, 0x7297, 0xA0CF, 0x7298, 0xA0D0, 0x7299, 0xA0D1, 0x729A, 0xA0D2, + 0x729B, 0xA0D3, 0x729C, 0xA0D4, 0x729D, 0xA0D5, 0x729E, 0xA0D6, 0x729F, 0xEAF1, 0x72A0, 0xA0D7, 0x72A1, 0xA0D8, 0x72A2, 0xA0D9, + 0x72A3, 0xA0DA, 0x72A4, 0xA0DB, 0x72A5, 0xA0DC, 0x72A6, 0xA0DD, 0x72A7, 0xA0DE, 0x72A8, 0xA0DF, 0x72A9, 0xA0E0, 0x72AA, 0xA0E1, + 0x72AB, 0xA0E2, 0x72AC, 0xC8AE, 0x72AD, 0xE1EB, 0x72AE, 0xA0E3, 0x72AF, 0xB7B8, 0x72B0, 0xE1EC, 0x72B1, 0xA0E4, 0x72B2, 0xA0E5, + 0x72B3, 0xA0E6, 0x72B4, 0xE1ED, 0x72B5, 0xA0E7, 0x72B6, 0xD7B4, 0x72B7, 0xE1EE, 0x72B8, 0xE1EF, 0x72B9, 0xD3CC, 0x72BA, 0xA0E8, + 0x72BB, 0xA0E9, 0x72BC, 0xA0EA, 0x72BD, 0xA0EB, 0x72BE, 0xA0EC, 0x72BF, 0xA0ED, 0x72C0, 0xA0EE, 0x72C1, 0xE1F1, 0x72C2, 0xBFF1, + 0x72C3, 0xE1F0, 0x72C4, 0xB5D2, 0x72C5, 0xA0EF, 0x72C6, 0xA0F0, 0x72C7, 0xA0F1, 0x72C8, 0xB1B7, 0x72C9, 0xA0F2, 0x72CA, 0xA0F3, + 0x72CB, 0xA0F4, 0x72CC, 0xA0F5, 0x72CD, 0xE1F3, 0x72CE, 0xE1F2, 0x72CF, 0xA0F6, 0x72D0, 0xBAFC, 0x72D1, 0xA0F7, 0x72D2, 0xE1F4, + 0x72D3, 0xA0F8, 0x72D4, 0xA0F9, 0x72D5, 0xA0FA, 0x72D6, 0xA0FB, 0x72D7, 0xB9B7, 0x72D8, 0xA0FC, 0x72D9, 0xBED1, 0x72DA, 0xA0FD, + 0x72DB, 0xA0FE, 0x72DC, 0xAA40, 0x72DD, 0xAA41, 0x72DE, 0xC4FC, 0x72DF, 0xAA42, 0x72E0, 0xBADD, 0x72E1, 0xBDC6, 0x72E2, 0xAA43, + 0x72E3, 0xAA44, 0x72E4, 0xAA45, 0x72E5, 0xAA46, 0x72E6, 0xAA47, 0x72E7, 0xAA48, 0x72E8, 0xE1F5, 0x72E9, 0xE1F7, 0x72EA, 0xAA49, + 0x72EB, 0xAA4A, 0x72EC, 0xB6C0, 0x72ED, 0xCFC1, 0x72EE, 0xCAA8, 0x72EF, 0xE1F6, 0x72F0, 0xD5F8, 0x72F1, 0xD3FC, 0x72F2, 0xE1F8, + 0x72F3, 0xE1FC, 0x72F4, 0xE1F9, 0x72F5, 0xAA4B, 0x72F6, 0xAA4C, 0x72F7, 0xE1FA, 0x72F8, 0xC0EA, 0x72F9, 0xAA4D, 0x72FA, 0xE1FE, + 0x72FB, 0xE2A1, 0x72FC, 0xC0C7, 0x72FD, 0xAA4E, 0x72FE, 0xAA4F, 0x72FF, 0xAA50, 0x7300, 0xAA51, 0x7301, 0xE1FB, 0x7302, 0xAA52, + 0x7303, 0xE1FD, 0x7304, 0xAA53, 0x7305, 0xAA54, 0x7306, 0xAA55, 0x7307, 0xAA56, 0x7308, 0xAA57, 0x7309, 0xAA58, 0x730A, 0xE2A5, + 0x730B, 0xAA59, 0x730C, 0xAA5A, 0x730D, 0xAA5B, 0x730E, 0xC1D4, 0x730F, 0xAA5C, 0x7310, 0xAA5D, 0x7311, 0xAA5E, 0x7312, 0xAA5F, + 0x7313, 0xE2A3, 0x7314, 0xAA60, 0x7315, 0xE2A8, 0x7316, 0xB2FE, 0x7317, 0xE2A2, 0x7318, 0xAA61, 0x7319, 0xAA62, 0x731A, 0xAA63, + 0x731B, 0xC3CD, 0x731C, 0xB2C2, 0x731D, 0xE2A7, 0x731E, 0xE2A6, 0x731F, 0xAA64, 0x7320, 0xAA65, 0x7321, 0xE2A4, 0x7322, 0xE2A9, + 0x7323, 0xAA66, 0x7324, 0xAA67, 0x7325, 0xE2AB, 0x7326, 0xAA68, 0x7327, 0xAA69, 0x7328, 0xAA6A, 0x7329, 0xD0C9, 0x732A, 0xD6ED, + 0x732B, 0xC3A8, 0x732C, 0xE2AC, 0x732D, 0xAA6B, 0x732E, 0xCFD7, 0x732F, 0xAA6C, 0x7330, 0xAA6D, 0x7331, 0xE2AE, 0x7332, 0xAA6E, + 0x7333, 0xAA6F, 0x7334, 0xBAEF, 0x7335, 0xAA70, 0x7336, 0xAA71, 0x7337, 0xE9E0, 0x7338, 0xE2AD, 0x7339, 0xE2AA, 0x733A, 0xAA72, + 0x733B, 0xAA73, 0x733C, 0xAA74, 0x733D, 0xAA75, 0x733E, 0xBBAB, 0x733F, 0xD4B3, 0x7340, 0xAA76, 0x7341, 0xAA77, 0x7342, 0xAA78, + 0x7343, 0xAA79, 0x7344, 0xAA7A, 0x7345, 0xAA7B, 0x7346, 0xAA7C, 0x7347, 0xAA7D, 0x7348, 0xAA7E, 0x7349, 0xAA80, 0x734A, 0xAA81, + 0x734B, 0xAA82, 0x734C, 0xAA83, 0x734D, 0xE2B0, 0x734E, 0xAA84, 0x734F, 0xAA85, 0x7350, 0xE2AF, 0x7351, 0xAA86, 0x7352, 0xE9E1, + 0x7353, 0xAA87, 0x7354, 0xAA88, 0x7355, 0xAA89, 0x7356, 0xAA8A, 0x7357, 0xE2B1, 0x7358, 0xAA8B, 0x7359, 0xAA8C, 0x735A, 0xAA8D, + 0x735B, 0xAA8E, 0x735C, 0xAA8F, 0x735D, 0xAA90, 0x735E, 0xAA91, 0x735F, 0xAA92, 0x7360, 0xE2B2, 0x7361, 0xAA93, 0x7362, 0xAA94, + 0x7363, 0xAA95, 0x7364, 0xAA96, 0x7365, 0xAA97, 0x7366, 0xAA98, 0x7367, 0xAA99, 0x7368, 0xAA9A, 0x7369, 0xAA9B, 0x736A, 0xAA9C, + 0x736B, 0xAA9D, 0x736C, 0xE2B3, 0x736D, 0xCCA1, 0x736E, 0xAA9E, 0x736F, 0xE2B4, 0x7370, 0xAA9F, 0x7371, 0xAAA0, 0x7372, 0xAB40, + 0x7373, 0xAB41, 0x7374, 0xAB42, 0x7375, 0xAB43, 0x7376, 0xAB44, 0x7377, 0xAB45, 0x7378, 0xAB46, 0x7379, 0xAB47, 0x737A, 0xAB48, + 0x737B, 0xAB49, 0x737C, 0xAB4A, 0x737D, 0xAB4B, 0x737E, 0xE2B5, 0x737F, 0xAB4C, 0x7380, 0xAB4D, 0x7381, 0xAB4E, 0x7382, 0xAB4F, + 0x7383, 0xAB50, 0x7384, 0xD0FE, 0x7385, 0xAB51, 0x7386, 0xAB52, 0x7387, 0xC2CA, 0x7388, 0xAB53, 0x7389, 0xD3F1, 0x738A, 0xAB54, + 0x738B, 0xCDF5, 0x738C, 0xAB55, 0x738D, 0xAB56, 0x738E, 0xE7E0, 0x738F, 0xAB57, 0x7390, 0xAB58, 0x7391, 0xE7E1, 0x7392, 0xAB59, + 0x7393, 0xAB5A, 0x7394, 0xAB5B, 0x7395, 0xAB5C, 0x7396, 0xBEC1, 0x7397, 0xAB5D, 0x7398, 0xAB5E, 0x7399, 0xAB5F, 0x739A, 0xAB60, + 0x739B, 0xC2EA, 0x739C, 0xAB61, 0x739D, 0xAB62, 0x739E, 0xAB63, 0x739F, 0xE7E4, 0x73A0, 0xAB64, 0x73A1, 0xAB65, 0x73A2, 0xE7E3, + 0x73A3, 0xAB66, 0x73A4, 0xAB67, 0x73A5, 0xAB68, 0x73A6, 0xAB69, 0x73A7, 0xAB6A, 0x73A8, 0xAB6B, 0x73A9, 0xCDE6, 0x73AA, 0xAB6C, + 0x73AB, 0xC3B5, 0x73AC, 0xAB6D, 0x73AD, 0xAB6E, 0x73AE, 0xE7E2, 0x73AF, 0xBBB7, 0x73B0, 0xCFD6, 0x73B1, 0xAB6F, 0x73B2, 0xC1E1, + 0x73B3, 0xE7E9, 0x73B4, 0xAB70, 0x73B5, 0xAB71, 0x73B6, 0xAB72, 0x73B7, 0xE7E8, 0x73B8, 0xAB73, 0x73B9, 0xAB74, 0x73BA, 0xE7F4, + 0x73BB, 0xB2A3, 0x73BC, 0xAB75, 0x73BD, 0xAB76, 0x73BE, 0xAB77, 0x73BF, 0xAB78, 0x73C0, 0xE7EA, 0x73C1, 0xAB79, 0x73C2, 0xE7E6, + 0x73C3, 0xAB7A, 0x73C4, 0xAB7B, 0x73C5, 0xAB7C, 0x73C6, 0xAB7D, 0x73C7, 0xAB7E, 0x73C8, 0xE7EC, 0x73C9, 0xE7EB, 0x73CA, 0xC9BA, + 0x73CB, 0xAB80, 0x73CC, 0xAB81, 0x73CD, 0xD5E4, 0x73CE, 0xAB82, 0x73CF, 0xE7E5, 0x73D0, 0xB7A9, 0x73D1, 0xE7E7, 0x73D2, 0xAB83, + 0x73D3, 0xAB84, 0x73D4, 0xAB85, 0x73D5, 0xAB86, 0x73D6, 0xAB87, 0x73D7, 0xAB88, 0x73D8, 0xAB89, 0x73D9, 0xE7EE, 0x73DA, 0xAB8A, + 0x73DB, 0xAB8B, 0x73DC, 0xAB8C, 0x73DD, 0xAB8D, 0x73DE, 0xE7F3, 0x73DF, 0xAB8E, 0x73E0, 0xD6E9, 0x73E1, 0xAB8F, 0x73E2, 0xAB90, + 0x73E3, 0xAB91, 0x73E4, 0xAB92, 0x73E5, 0xE7ED, 0x73E6, 0xAB93, 0x73E7, 0xE7F2, 0x73E8, 0xAB94, 0x73E9, 0xE7F1, 0x73EA, 0xAB95, + 0x73EB, 0xAB96, 0x73EC, 0xAB97, 0x73ED, 0xB0E0, 0x73EE, 0xAB98, 0x73EF, 0xAB99, 0x73F0, 0xAB9A, 0x73F1, 0xAB9B, 0x73F2, 0xE7F5, + 0x73F3, 0xAB9C, 0x73F4, 0xAB9D, 0x73F5, 0xAB9E, 0x73F6, 0xAB9F, 0x73F7, 0xABA0, 0x73F8, 0xAC40, 0x73F9, 0xAC41, 0x73FA, 0xAC42, + 0x73FB, 0xAC43, 0x73FC, 0xAC44, 0x73FD, 0xAC45, 0x73FE, 0xAC46, 0x73FF, 0xAC47, 0x7400, 0xAC48, 0x7401, 0xAC49, 0x7402, 0xAC4A, + 0x7403, 0xC7F2, 0x7404, 0xAC4B, 0x7405, 0xC0C5, 0x7406, 0xC0ED, 0x7407, 0xAC4C, 0x7408, 0xAC4D, 0x7409, 0xC1F0, 0x740A, 0xE7F0, + 0x740B, 0xAC4E, 0x740C, 0xAC4F, 0x740D, 0xAC50, 0x740E, 0xAC51, 0x740F, 0xE7F6, 0x7410, 0xCBF6, 0x7411, 0xAC52, 0x7412, 0xAC53, + 0x7413, 0xAC54, 0x7414, 0xAC55, 0x7415, 0xAC56, 0x7416, 0xAC57, 0x7417, 0xAC58, 0x7418, 0xAC59, 0x7419, 0xAC5A, 0x741A, 0xE8A2, + 0x741B, 0xE8A1, 0x741C, 0xAC5B, 0x741D, 0xAC5C, 0x741E, 0xAC5D, 0x741F, 0xAC5E, 0x7420, 0xAC5F, 0x7421, 0xAC60, 0x7422, 0xD7C1, + 0x7423, 0xAC61, 0x7424, 0xAC62, 0x7425, 0xE7FA, 0x7426, 0xE7F9, 0x7427, 0xAC63, 0x7428, 0xE7FB, 0x7429, 0xAC64, 0x742A, 0xE7F7, + 0x742B, 0xAC65, 0x742C, 0xE7FE, 0x742D, 0xAC66, 0x742E, 0xE7FD, 0x742F, 0xAC67, 0x7430, 0xE7FC, 0x7431, 0xAC68, 0x7432, 0xAC69, + 0x7433, 0xC1D5, 0x7434, 0xC7D9, 0x7435, 0xC5FD, 0x7436, 0xC5C3, 0x7437, 0xAC6A, 0x7438, 0xAC6B, 0x7439, 0xAC6C, 0x743A, 0xAC6D, + 0x743B, 0xAC6E, 0x743C, 0xC7ED, 0x743D, 0xAC6F, 0x743E, 0xAC70, 0x743F, 0xAC71, 0x7440, 0xAC72, 0x7441, 0xE8A3, 0x7442, 0xAC73, + 0x7443, 0xAC74, 0x7444, 0xAC75, 0x7445, 0xAC76, 0x7446, 0xAC77, 0x7447, 0xAC78, 0x7448, 0xAC79, 0x7449, 0xAC7A, 0x744A, 0xAC7B, + 0x744B, 0xAC7C, 0x744C, 0xAC7D, 0x744D, 0xAC7E, 0x744E, 0xAC80, 0x744F, 0xAC81, 0x7450, 0xAC82, 0x7451, 0xAC83, 0x7452, 0xAC84, + 0x7453, 0xAC85, 0x7454, 0xAC86, 0x7455, 0xE8A6, 0x7456, 0xAC87, 0x7457, 0xE8A5, 0x7458, 0xAC88, 0x7459, 0xE8A7, 0x745A, 0xBAF7, + 0x745B, 0xE7F8, 0x745C, 0xE8A4, 0x745D, 0xAC89, 0x745E, 0xC8F0, 0x745F, 0xC9AA, 0x7460, 0xAC8A, 0x7461, 0xAC8B, 0x7462, 0xAC8C, + 0x7463, 0xAC8D, 0x7464, 0xAC8E, 0x7465, 0xAC8F, 0x7466, 0xAC90, 0x7467, 0xAC91, 0x7468, 0xAC92, 0x7469, 0xAC93, 0x746A, 0xAC94, + 0x746B, 0xAC95, 0x746C, 0xAC96, 0x746D, 0xE8A9, 0x746E, 0xAC97, 0x746F, 0xAC98, 0x7470, 0xB9E5, 0x7471, 0xAC99, 0x7472, 0xAC9A, + 0x7473, 0xAC9B, 0x7474, 0xAC9C, 0x7475, 0xAC9D, 0x7476, 0xD1FE, 0x7477, 0xE8A8, 0x7478, 0xAC9E, 0x7479, 0xAC9F, 0x747A, 0xACA0, + 0x747B, 0xAD40, 0x747C, 0xAD41, 0x747D, 0xAD42, 0x747E, 0xE8AA, 0x747F, 0xAD43, 0x7480, 0xE8AD, 0x7481, 0xE8AE, 0x7482, 0xAD44, + 0x7483, 0xC1A7, 0x7484, 0xAD45, 0x7485, 0xAD46, 0x7486, 0xAD47, 0x7487, 0xE8AF, 0x7488, 0xAD48, 0x7489, 0xAD49, 0x748A, 0xAD4A, + 0x748B, 0xE8B0, 0x748C, 0xAD4B, 0x748D, 0xAD4C, 0x748E, 0xE8AC, 0x748F, 0xAD4D, 0x7490, 0xE8B4, 0x7491, 0xAD4E, 0x7492, 0xAD4F, + 0x7493, 0xAD50, 0x7494, 0xAD51, 0x7495, 0xAD52, 0x7496, 0xAD53, 0x7497, 0xAD54, 0x7498, 0xAD55, 0x7499, 0xAD56, 0x749A, 0xAD57, + 0x749B, 0xAD58, 0x749C, 0xE8AB, 0x749D, 0xAD59, 0x749E, 0xE8B1, 0x749F, 0xAD5A, 0x74A0, 0xAD5B, 0x74A1, 0xAD5C, 0x74A2, 0xAD5D, + 0x74A3, 0xAD5E, 0x74A4, 0xAD5F, 0x74A5, 0xAD60, 0x74A6, 0xAD61, 0x74A7, 0xE8B5, 0x74A8, 0xE8B2, 0x74A9, 0xE8B3, 0x74AA, 0xAD62, + 0x74AB, 0xAD63, 0x74AC, 0xAD64, 0x74AD, 0xAD65, 0x74AE, 0xAD66, 0x74AF, 0xAD67, 0x74B0, 0xAD68, 0x74B1, 0xAD69, 0x74B2, 0xAD6A, + 0x74B3, 0xAD6B, 0x74B4, 0xAD6C, 0x74B5, 0xAD6D, 0x74B6, 0xAD6E, 0x74B7, 0xAD6F, 0x74B8, 0xAD70, 0x74B9, 0xAD71, 0x74BA, 0xE8B7, + 0x74BB, 0xAD72, 0x74BC, 0xAD73, 0x74BD, 0xAD74, 0x74BE, 0xAD75, 0x74BF, 0xAD76, 0x74C0, 0xAD77, 0x74C1, 0xAD78, 0x74C2, 0xAD79, + 0x74C3, 0xAD7A, 0x74C4, 0xAD7B, 0x74C5, 0xAD7C, 0x74C6, 0xAD7D, 0x74C7, 0xAD7E, 0x74C8, 0xAD80, 0x74C9, 0xAD81, 0x74CA, 0xAD82, + 0x74CB, 0xAD83, 0x74CC, 0xAD84, 0x74CD, 0xAD85, 0x74CE, 0xAD86, 0x74CF, 0xAD87, 0x74D0, 0xAD88, 0x74D1, 0xAD89, 0x74D2, 0xE8B6, + 0x74D3, 0xAD8A, 0x74D4, 0xAD8B, 0x74D5, 0xAD8C, 0x74D6, 0xAD8D, 0x74D7, 0xAD8E, 0x74D8, 0xAD8F, 0x74D9, 0xAD90, 0x74DA, 0xAD91, + 0x74DB, 0xAD92, 0x74DC, 0xB9CF, 0x74DD, 0xAD93, 0x74DE, 0xF0AC, 0x74DF, 0xAD94, 0x74E0, 0xF0AD, 0x74E1, 0xAD95, 0x74E2, 0xC6B0, + 0x74E3, 0xB0EA, 0x74E4, 0xC8BF, 0x74E5, 0xAD96, 0x74E6, 0xCDDF, 0x74E7, 0xAD97, 0x74E8, 0xAD98, 0x74E9, 0xAD99, 0x74EA, 0xAD9A, + 0x74EB, 0xAD9B, 0x74EC, 0xAD9C, 0x74ED, 0xAD9D, 0x74EE, 0xCECD, 0x74EF, 0xEAB1, 0x74F0, 0xAD9E, 0x74F1, 0xAD9F, 0x74F2, 0xADA0, + 0x74F3, 0xAE40, 0x74F4, 0xEAB2, 0x74F5, 0xAE41, 0x74F6, 0xC6BF, 0x74F7, 0xB4C9, 0x74F8, 0xAE42, 0x74F9, 0xAE43, 0x74FA, 0xAE44, + 0x74FB, 0xAE45, 0x74FC, 0xAE46, 0x74FD, 0xAE47, 0x74FE, 0xAE48, 0x74FF, 0xEAB3, 0x7500, 0xAE49, 0x7501, 0xAE4A, 0x7502, 0xAE4B, + 0x7503, 0xAE4C, 0x7504, 0xD5E7, 0x7505, 0xAE4D, 0x7506, 0xAE4E, 0x7507, 0xAE4F, 0x7508, 0xAE50, 0x7509, 0xAE51, 0x750A, 0xAE52, + 0x750B, 0xAE53, 0x750C, 0xAE54, 0x750D, 0xDDF9, 0x750E, 0xAE55, 0x750F, 0xEAB4, 0x7510, 0xAE56, 0x7511, 0xEAB5, 0x7512, 0xAE57, + 0x7513, 0xEAB6, 0x7514, 0xAE58, 0x7515, 0xAE59, 0x7516, 0xAE5A, 0x7517, 0xAE5B, 0x7518, 0xB8CA, 0x7519, 0xDFB0, 0x751A, 0xC9F5, + 0x751B, 0xAE5C, 0x751C, 0xCCF0, 0x751D, 0xAE5D, 0x751E, 0xAE5E, 0x751F, 0xC9FA, 0x7520, 0xAE5F, 0x7521, 0xAE60, 0x7522, 0xAE61, + 0x7523, 0xAE62, 0x7524, 0xAE63, 0x7525, 0xC9FB, 0x7526, 0xAE64, 0x7527, 0xAE65, 0x7528, 0xD3C3, 0x7529, 0xCBA6, 0x752A, 0xAE66, + 0x752B, 0xB8A6, 0x752C, 0xF0AE, 0x752D, 0xB1C2, 0x752E, 0xAE67, 0x752F, 0xE5B8, 0x7530, 0xCCEF, 0x7531, 0xD3C9, 0x7532, 0xBCD7, + 0x7533, 0xC9EA, 0x7534, 0xAE68, 0x7535, 0xB5E7, 0x7536, 0xAE69, 0x7537, 0xC4D0, 0x7538, 0xB5E9, 0x7539, 0xAE6A, 0x753A, 0xEEAE, + 0x753B, 0xBBAD, 0x753C, 0xAE6B, 0x753D, 0xAE6C, 0x753E, 0xE7DE, 0x753F, 0xAE6D, 0x7540, 0xEEAF, 0x7541, 0xAE6E, 0x7542, 0xAE6F, + 0x7543, 0xAE70, 0x7544, 0xAE71, 0x7545, 0xB3A9, 0x7546, 0xAE72, 0x7547, 0xAE73, 0x7548, 0xEEB2, 0x7549, 0xAE74, 0x754A, 0xAE75, + 0x754B, 0xEEB1, 0x754C, 0xBDE7, 0x754D, 0xAE76, 0x754E, 0xEEB0, 0x754F, 0xCEB7, 0x7550, 0xAE77, 0x7551, 0xAE78, 0x7552, 0xAE79, + 0x7553, 0xAE7A, 0x7554, 0xC5CF, 0x7555, 0xAE7B, 0x7556, 0xAE7C, 0x7557, 0xAE7D, 0x7558, 0xAE7E, 0x7559, 0xC1F4, 0x755A, 0xDBCE, + 0x755B, 0xEEB3, 0x755C, 0xD0F3, 0x755D, 0xAE80, 0x755E, 0xAE81, 0x755F, 0xAE82, 0x7560, 0xAE83, 0x7561, 0xAE84, 0x7562, 0xAE85, + 0x7563, 0xAE86, 0x7564, 0xAE87, 0x7565, 0xC2D4, 0x7566, 0xC6E8, 0x7567, 0xAE88, 0x7568, 0xAE89, 0x7569, 0xAE8A, 0x756A, 0xB7AC, + 0x756B, 0xAE8B, 0x756C, 0xAE8C, 0x756D, 0xAE8D, 0x756E, 0xAE8E, 0x756F, 0xAE8F, 0x7570, 0xAE90, 0x7571, 0xAE91, 0x7572, 0xEEB4, + 0x7573, 0xAE92, 0x7574, 0xB3EB, 0x7575, 0xAE93, 0x7576, 0xAE94, 0x7577, 0xAE95, 0x7578, 0xBBFB, 0x7579, 0xEEB5, 0x757A, 0xAE96, + 0x757B, 0xAE97, 0x757C, 0xAE98, 0x757D, 0xAE99, 0x757E, 0xAE9A, 0x757F, 0xE7DC, 0x7580, 0xAE9B, 0x7581, 0xAE9C, 0x7582, 0xAE9D, + 0x7583, 0xEEB6, 0x7584, 0xAE9E, 0x7585, 0xAE9F, 0x7586, 0xBDAE, 0x7587, 0xAEA0, 0x7588, 0xAF40, 0x7589, 0xAF41, 0x758A, 0xAF42, + 0x758B, 0xF1E2, 0x758C, 0xAF43, 0x758D, 0xAF44, 0x758E, 0xAF45, 0x758F, 0xCAE8, 0x7590, 0xAF46, 0x7591, 0xD2C9, 0x7592, 0xF0DA, + 0x7593, 0xAF47, 0x7594, 0xF0DB, 0x7595, 0xAF48, 0x7596, 0xF0DC, 0x7597, 0xC1C6, 0x7598, 0xAF49, 0x7599, 0xB8ED, 0x759A, 0xBECE, + 0x759B, 0xAF4A, 0x759C, 0xAF4B, 0x759D, 0xF0DE, 0x759E, 0xAF4C, 0x759F, 0xC5B1, 0x75A0, 0xF0DD, 0x75A1, 0xD1F1, 0x75A2, 0xAF4D, + 0x75A3, 0xF0E0, 0x75A4, 0xB0CC, 0x75A5, 0xBDEA, 0x75A6, 0xAF4E, 0x75A7, 0xAF4F, 0x75A8, 0xAF50, 0x75A9, 0xAF51, 0x75AA, 0xAF52, + 0x75AB, 0xD2DF, 0x75AC, 0xF0DF, 0x75AD, 0xAF53, 0x75AE, 0xB4AF, 0x75AF, 0xB7E8, 0x75B0, 0xF0E6, 0x75B1, 0xF0E5, 0x75B2, 0xC6A3, + 0x75B3, 0xF0E1, 0x75B4, 0xF0E2, 0x75B5, 0xB4C3, 0x75B6, 0xAF54, 0x75B7, 0xAF55, 0x75B8, 0xF0E3, 0x75B9, 0xD5EE, 0x75BA, 0xAF56, + 0x75BB, 0xAF57, 0x75BC, 0xCCDB, 0x75BD, 0xBED2, 0x75BE, 0xBCB2, 0x75BF, 0xAF58, 0x75C0, 0xAF59, 0x75C1, 0xAF5A, 0x75C2, 0xF0E8, + 0x75C3, 0xF0E7, 0x75C4, 0xF0E4, 0x75C5, 0xB2A1, 0x75C6, 0xAF5B, 0x75C7, 0xD6A2, 0x75C8, 0xD3B8, 0x75C9, 0xBEB7, 0x75CA, 0xC8AC, + 0x75CB, 0xAF5C, 0x75CC, 0xAF5D, 0x75CD, 0xF0EA, 0x75CE, 0xAF5E, 0x75CF, 0xAF5F, 0x75D0, 0xAF60, 0x75D1, 0xAF61, 0x75D2, 0xD1F7, + 0x75D3, 0xAF62, 0x75D4, 0xD6CC, 0x75D5, 0xBADB, 0x75D6, 0xF0E9, 0x75D7, 0xAF63, 0x75D8, 0xB6BB, 0x75D9, 0xAF64, 0x75DA, 0xAF65, + 0x75DB, 0xCDB4, 0x75DC, 0xAF66, 0x75DD, 0xAF67, 0x75DE, 0xC6A6, 0x75DF, 0xAF68, 0x75E0, 0xAF69, 0x75E1, 0xAF6A, 0x75E2, 0xC1A1, + 0x75E3, 0xF0EB, 0x75E4, 0xF0EE, 0x75E5, 0xAF6B, 0x75E6, 0xF0ED, 0x75E7, 0xF0F0, 0x75E8, 0xF0EC, 0x75E9, 0xAF6C, 0x75EA, 0xBBBE, + 0x75EB, 0xF0EF, 0x75EC, 0xAF6D, 0x75ED, 0xAF6E, 0x75EE, 0xAF6F, 0x75EF, 0xAF70, 0x75F0, 0xCCB5, 0x75F1, 0xF0F2, 0x75F2, 0xAF71, + 0x75F3, 0xAF72, 0x75F4, 0xB3D5, 0x75F5, 0xAF73, 0x75F6, 0xAF74, 0x75F7, 0xAF75, 0x75F8, 0xAF76, 0x75F9, 0xB1D4, 0x75FA, 0xAF77, + 0x75FB, 0xAF78, 0x75FC, 0xF0F3, 0x75FD, 0xAF79, 0x75FE, 0xAF7A, 0x75FF, 0xF0F4, 0x7600, 0xF0F6, 0x7601, 0xB4E1, 0x7602, 0xAF7B, + 0x7603, 0xF0F1, 0x7604, 0xAF7C, 0x7605, 0xF0F7, 0x7606, 0xAF7D, 0x7607, 0xAF7E, 0x7608, 0xAF80, 0x7609, 0xAF81, 0x760A, 0xF0FA, + 0x760B, 0xAF82, 0x760C, 0xF0F8, 0x760D, 0xAF83, 0x760E, 0xAF84, 0x760F, 0xAF85, 0x7610, 0xF0F5, 0x7611, 0xAF86, 0x7612, 0xAF87, + 0x7613, 0xAF88, 0x7614, 0xAF89, 0x7615, 0xF0FD, 0x7616, 0xAF8A, 0x7617, 0xF0F9, 0x7618, 0xF0FC, 0x7619, 0xF0FE, 0x761A, 0xAF8B, + 0x761B, 0xF1A1, 0x761C, 0xAF8C, 0x761D, 0xAF8D, 0x761E, 0xAF8E, 0x761F, 0xCEC1, 0x7620, 0xF1A4, 0x7621, 0xAF8F, 0x7622, 0xF1A3, + 0x7623, 0xAF90, 0x7624, 0xC1F6, 0x7625, 0xF0FB, 0x7626, 0xCADD, 0x7627, 0xAF91, 0x7628, 0xAF92, 0x7629, 0xB4F1, 0x762A, 0xB1F1, + 0x762B, 0xCCB1, 0x762C, 0xAF93, 0x762D, 0xF1A6, 0x762E, 0xAF94, 0x762F, 0xAF95, 0x7630, 0xF1A7, 0x7631, 0xAF96, 0x7632, 0xAF97, + 0x7633, 0xF1AC, 0x7634, 0xD5CE, 0x7635, 0xF1A9, 0x7636, 0xAF98, 0x7637, 0xAF99, 0x7638, 0xC8B3, 0x7639, 0xAF9A, 0x763A, 0xAF9B, + 0x763B, 0xAF9C, 0x763C, 0xF1A2, 0x763D, 0xAF9D, 0x763E, 0xF1AB, 0x763F, 0xF1A8, 0x7640, 0xF1A5, 0x7641, 0xAF9E, 0x7642, 0xAF9F, + 0x7643, 0xF1AA, 0x7644, 0xAFA0, 0x7645, 0xB040, 0x7646, 0xB041, 0x7647, 0xB042, 0x7648, 0xB043, 0x7649, 0xB044, 0x764A, 0xB045, + 0x764B, 0xB046, 0x764C, 0xB0A9, 0x764D, 0xF1AD, 0x764E, 0xB047, 0x764F, 0xB048, 0x7650, 0xB049, 0x7651, 0xB04A, 0x7652, 0xB04B, + 0x7653, 0xB04C, 0x7654, 0xF1AF, 0x7655, 0xB04D, 0x7656, 0xF1B1, 0x7657, 0xB04E, 0x7658, 0xB04F, 0x7659, 0xB050, 0x765A, 0xB051, + 0x765B, 0xB052, 0x765C, 0xF1B0, 0x765D, 0xB053, 0x765E, 0xF1AE, 0x765F, 0xB054, 0x7660, 0xB055, 0x7661, 0xB056, 0x7662, 0xB057, + 0x7663, 0xD1A2, 0x7664, 0xB058, 0x7665, 0xB059, 0x7666, 0xB05A, 0x7667, 0xB05B, 0x7668, 0xB05C, 0x7669, 0xB05D, 0x766A, 0xB05E, + 0x766B, 0xF1B2, 0x766C, 0xB05F, 0x766D, 0xB060, 0x766E, 0xB061, 0x766F, 0xF1B3, 0x7670, 0xB062, 0x7671, 0xB063, 0x7672, 0xB064, + 0x7673, 0xB065, 0x7674, 0xB066, 0x7675, 0xB067, 0x7676, 0xB068, 0x7677, 0xB069, 0x7678, 0xB9EF, 0x7679, 0xB06A, 0x767A, 0xB06B, + 0x767B, 0xB5C7, 0x767C, 0xB06C, 0x767D, 0xB0D7, 0x767E, 0xB0D9, 0x767F, 0xB06D, 0x7680, 0xB06E, 0x7681, 0xB06F, 0x7682, 0xD4ED, + 0x7683, 0xB070, 0x7684, 0xB5C4, 0x7685, 0xB071, 0x7686, 0xBDD4, 0x7687, 0xBBCA, 0x7688, 0xF0A7, 0x7689, 0xB072, 0x768A, 0xB073, + 0x768B, 0xB8DE, 0x768C, 0xB074, 0x768D, 0xB075, 0x768E, 0xF0A8, 0x768F, 0xB076, 0x7690, 0xB077, 0x7691, 0xB0A8, 0x7692, 0xB078, + 0x7693, 0xF0A9, 0x7694, 0xB079, 0x7695, 0xB07A, 0x7696, 0xCDEE, 0x7697, 0xB07B, 0x7698, 0xB07C, 0x7699, 0xF0AA, 0x769A, 0xB07D, + 0x769B, 0xB07E, 0x769C, 0xB080, 0x769D, 0xB081, 0x769E, 0xB082, 0x769F, 0xB083, 0x76A0, 0xB084, 0x76A1, 0xB085, 0x76A2, 0xB086, + 0x76A3, 0xB087, 0x76A4, 0xF0AB, 0x76A5, 0xB088, 0x76A6, 0xB089, 0x76A7, 0xB08A, 0x76A8, 0xB08B, 0x76A9, 0xB08C, 0x76AA, 0xB08D, + 0x76AB, 0xB08E, 0x76AC, 0xB08F, 0x76AD, 0xB090, 0x76AE, 0xC6A4, 0x76AF, 0xB091, 0x76B0, 0xB092, 0x76B1, 0xD6E5, 0x76B2, 0xF1E4, + 0x76B3, 0xB093, 0x76B4, 0xF1E5, 0x76B5, 0xB094, 0x76B6, 0xB095, 0x76B7, 0xB096, 0x76B8, 0xB097, 0x76B9, 0xB098, 0x76BA, 0xB099, + 0x76BB, 0xB09A, 0x76BC, 0xB09B, 0x76BD, 0xB09C, 0x76BE, 0xB09D, 0x76BF, 0xC3F3, 0x76C0, 0xB09E, 0x76C1, 0xB09F, 0x76C2, 0xD3DB, + 0x76C3, 0xB0A0, 0x76C4, 0xB140, 0x76C5, 0xD6D1, 0x76C6, 0xC5E8, 0x76C7, 0xB141, 0x76C8, 0xD3AF, 0x76C9, 0xB142, 0x76CA, 0xD2E6, + 0x76CB, 0xB143, 0x76CC, 0xB144, 0x76CD, 0xEEC1, 0x76CE, 0xB0BB, 0x76CF, 0xD5B5, 0x76D0, 0xD1CE, 0x76D1, 0xBCE0, 0x76D2, 0xBAD0, + 0x76D3, 0xB145, 0x76D4, 0xBFF8, 0x76D5, 0xB146, 0x76D6, 0xB8C7, 0x76D7, 0xB5C1, 0x76D8, 0xC5CC, 0x76D9, 0xB147, 0x76DA, 0xB148, + 0x76DB, 0xCAA2, 0x76DC, 0xB149, 0x76DD, 0xB14A, 0x76DE, 0xB14B, 0x76DF, 0xC3CB, 0x76E0, 0xB14C, 0x76E1, 0xB14D, 0x76E2, 0xB14E, + 0x76E3, 0xB14F, 0x76E4, 0xB150, 0x76E5, 0xEEC2, 0x76E6, 0xB151, 0x76E7, 0xB152, 0x76E8, 0xB153, 0x76E9, 0xB154, 0x76EA, 0xB155, + 0x76EB, 0xB156, 0x76EC, 0xB157, 0x76ED, 0xB158, 0x76EE, 0xC4BF, 0x76EF, 0xB6A2, 0x76F0, 0xB159, 0x76F1, 0xEDEC, 0x76F2, 0xC3A4, + 0x76F3, 0xB15A, 0x76F4, 0xD6B1, 0x76F5, 0xB15B, 0x76F6, 0xB15C, 0x76F7, 0xB15D, 0x76F8, 0xCFE0, 0x76F9, 0xEDEF, 0x76FA, 0xB15E, + 0x76FB, 0xB15F, 0x76FC, 0xC5CE, 0x76FD, 0xB160, 0x76FE, 0xB6DC, 0x76FF, 0xB161, 0x7700, 0xB162, 0x7701, 0xCAA1, 0x7702, 0xB163, + 0x7703, 0xB164, 0x7704, 0xEDED, 0x7705, 0xB165, 0x7706, 0xB166, 0x7707, 0xEDF0, 0x7708, 0xEDF1, 0x7709, 0xC3BC, 0x770A, 0xB167, + 0x770B, 0xBFB4, 0x770C, 0xB168, 0x770D, 0xEDEE, 0x770E, 0xB169, 0x770F, 0xB16A, 0x7710, 0xB16B, 0x7711, 0xB16C, 0x7712, 0xB16D, + 0x7713, 0xB16E, 0x7714, 0xB16F, 0x7715, 0xB170, 0x7716, 0xB171, 0x7717, 0xB172, 0x7718, 0xB173, 0x7719, 0xEDF4, 0x771A, 0xEDF2, + 0x771B, 0xB174, 0x771C, 0xB175, 0x771D, 0xB176, 0x771E, 0xB177, 0x771F, 0xD5E6, 0x7720, 0xC3DF, 0x7721, 0xB178, 0x7722, 0xEDF3, + 0x7723, 0xB179, 0x7724, 0xB17A, 0x7725, 0xB17B, 0x7726, 0xEDF6, 0x7727, 0xB17C, 0x7728, 0xD5A3, 0x7729, 0xD1A3, 0x772A, 0xB17D, + 0x772B, 0xB17E, 0x772C, 0xB180, 0x772D, 0xEDF5, 0x772E, 0xB181, 0x772F, 0xC3D0, 0x7730, 0xB182, 0x7731, 0xB183, 0x7732, 0xB184, + 0x7733, 0xB185, 0x7734, 0xB186, 0x7735, 0xEDF7, 0x7736, 0xBFF4, 0x7737, 0xBEEC, 0x7738, 0xEDF8, 0x7739, 0xB187, 0x773A, 0xCCF7, + 0x773B, 0xB188, 0x773C, 0xD1DB, 0x773D, 0xB189, 0x773E, 0xB18A, 0x773F, 0xB18B, 0x7740, 0xD7C5, 0x7741, 0xD5F6, 0x7742, 0xB18C, + 0x7743, 0xEDFC, 0x7744, 0xB18D, 0x7745, 0xB18E, 0x7746, 0xB18F, 0x7747, 0xEDFB, 0x7748, 0xB190, 0x7749, 0xB191, 0x774A, 0xB192, + 0x774B, 0xB193, 0x774C, 0xB194, 0x774D, 0xB195, 0x774E, 0xB196, 0x774F, 0xB197, 0x7750, 0xEDF9, 0x7751, 0xEDFA, 0x7752, 0xB198, + 0x7753, 0xB199, 0x7754, 0xB19A, 0x7755, 0xB19B, 0x7756, 0xB19C, 0x7757, 0xB19D, 0x7758, 0xB19E, 0x7759, 0xB19F, 0x775A, 0xEDFD, + 0x775B, 0xBEA6, 0x775C, 0xB1A0, 0x775D, 0xB240, 0x775E, 0xB241, 0x775F, 0xB242, 0x7760, 0xB243, 0x7761, 0xCBAF, 0x7762, 0xEEA1, + 0x7763, 0xB6BD, 0x7764, 0xB244, 0x7765, 0xEEA2, 0x7766, 0xC4C0, 0x7767, 0xB245, 0x7768, 0xEDFE, 0x7769, 0xB246, 0x776A, 0xB247, + 0x776B, 0xBDDE, 0x776C, 0xB2C7, 0x776D, 0xB248, 0x776E, 0xB249, 0x776F, 0xB24A, 0x7770, 0xB24B, 0x7771, 0xB24C, 0x7772, 0xB24D, + 0x7773, 0xB24E, 0x7774, 0xB24F, 0x7775, 0xB250, 0x7776, 0xB251, 0x7777, 0xB252, 0x7778, 0xB253, 0x7779, 0xB6C3, 0x777A, 0xB254, + 0x777B, 0xB255, 0x777C, 0xB256, 0x777D, 0xEEA5, 0x777E, 0xD8BA, 0x777F, 0xEEA3, 0x7780, 0xEEA6, 0x7781, 0xB257, 0x7782, 0xB258, + 0x7783, 0xB259, 0x7784, 0xC3E9, 0x7785, 0xB3F2, 0x7786, 0xB25A, 0x7787, 0xB25B, 0x7788, 0xB25C, 0x7789, 0xB25D, 0x778A, 0xB25E, + 0x778B, 0xB25F, 0x778C, 0xEEA7, 0x778D, 0xEEA4, 0x778E, 0xCFB9, 0x778F, 0xB260, 0x7790, 0xB261, 0x7791, 0xEEA8, 0x7792, 0xC2F7, + 0x7793, 0xB262, 0x7794, 0xB263, 0x7795, 0xB264, 0x7796, 0xB265, 0x7797, 0xB266, 0x7798, 0xB267, 0x7799, 0xB268, 0x779A, 0xB269, + 0x779B, 0xB26A, 0x779C, 0xB26B, 0x779D, 0xB26C, 0x779E, 0xB26D, 0x779F, 0xEEA9, 0x77A0, 0xEEAA, 0x77A1, 0xB26E, 0x77A2, 0xDEAB, + 0x77A3, 0xB26F, 0x77A4, 0xB270, 0x77A5, 0xC6B3, 0x77A6, 0xB271, 0x77A7, 0xC7C6, 0x77A8, 0xB272, 0x77A9, 0xD6F5, 0x77AA, 0xB5C9, + 0x77AB, 0xB273, 0x77AC, 0xCBB2, 0x77AD, 0xB274, 0x77AE, 0xB275, 0x77AF, 0xB276, 0x77B0, 0xEEAB, 0x77B1, 0xB277, 0x77B2, 0xB278, + 0x77B3, 0xCDAB, 0x77B4, 0xB279, 0x77B5, 0xEEAC, 0x77B6, 0xB27A, 0x77B7, 0xB27B, 0x77B8, 0xB27C, 0x77B9, 0xB27D, 0x77BA, 0xB27E, + 0x77BB, 0xD5B0, 0x77BC, 0xB280, 0x77BD, 0xEEAD, 0x77BE, 0xB281, 0x77BF, 0xF6C4, 0x77C0, 0xB282, 0x77C1, 0xB283, 0x77C2, 0xB284, + 0x77C3, 0xB285, 0x77C4, 0xB286, 0x77C5, 0xB287, 0x77C6, 0xB288, 0x77C7, 0xB289, 0x77C8, 0xB28A, 0x77C9, 0xB28B, 0x77CA, 0xB28C, + 0x77CB, 0xB28D, 0x77CC, 0xB28E, 0x77CD, 0xDBC7, 0x77CE, 0xB28F, 0x77CF, 0xB290, 0x77D0, 0xB291, 0x77D1, 0xB292, 0x77D2, 0xB293, + 0x77D3, 0xB294, 0x77D4, 0xB295, 0x77D5, 0xB296, 0x77D6, 0xB297, 0x77D7, 0xB4A3, 0x77D8, 0xB298, 0x77D9, 0xB299, 0x77DA, 0xB29A, + 0x77DB, 0xC3AC, 0x77DC, 0xF1E6, 0x77DD, 0xB29B, 0x77DE, 0xB29C, 0x77DF, 0xB29D, 0x77E0, 0xB29E, 0x77E1, 0xB29F, 0x77E2, 0xCAB8, + 0x77E3, 0xD2D3, 0x77E4, 0xB2A0, 0x77E5, 0xD6AA, 0x77E6, 0xB340, 0x77E7, 0xEFF2, 0x77E8, 0xB341, 0x77E9, 0xBED8, 0x77EA, 0xB342, + 0x77EB, 0xBDC3, 0x77EC, 0xEFF3, 0x77ED, 0xB6CC, 0x77EE, 0xB0AB, 0x77EF, 0xB343, 0x77F0, 0xB344, 0x77F1, 0xB345, 0x77F2, 0xB346, + 0x77F3, 0xCAAF, 0x77F4, 0xB347, 0x77F5, 0xB348, 0x77F6, 0xEDB6, 0x77F7, 0xB349, 0x77F8, 0xEDB7, 0x77F9, 0xB34A, 0x77FA, 0xB34B, + 0x77FB, 0xB34C, 0x77FC, 0xB34D, 0x77FD, 0xCEF9, 0x77FE, 0xB7AF, 0x77FF, 0xBFF3, 0x7800, 0xEDB8, 0x7801, 0xC2EB, 0x7802, 0xC9B0, + 0x7803, 0xB34E, 0x7804, 0xB34F, 0x7805, 0xB350, 0x7806, 0xB351, 0x7807, 0xB352, 0x7808, 0xB353, 0x7809, 0xEDB9, 0x780A, 0xB354, + 0x780B, 0xB355, 0x780C, 0xC6F6, 0x780D, 0xBFB3, 0x780E, 0xB356, 0x780F, 0xB357, 0x7810, 0xB358, 0x7811, 0xEDBC, 0x7812, 0xC5F8, + 0x7813, 0xB359, 0x7814, 0xD1D0, 0x7815, 0xB35A, 0x7816, 0xD7A9, 0x7817, 0xEDBA, 0x7818, 0xEDBB, 0x7819, 0xB35B, 0x781A, 0xD1E2, + 0x781B, 0xB35C, 0x781C, 0xEDBF, 0x781D, 0xEDC0, 0x781E, 0xB35D, 0x781F, 0xEDC4, 0x7820, 0xB35E, 0x7821, 0xB35F, 0x7822, 0xB360, + 0x7823, 0xEDC8, 0x7824, 0xB361, 0x7825, 0xEDC6, 0x7826, 0xEDCE, 0x7827, 0xD5E8, 0x7828, 0xB362, 0x7829, 0xEDC9, 0x782A, 0xB363, + 0x782B, 0xB364, 0x782C, 0xEDC7, 0x782D, 0xEDBE, 0x782E, 0xB365, 0x782F, 0xB366, 0x7830, 0xC5E9, 0x7831, 0xB367, 0x7832, 0xB368, + 0x7833, 0xB369, 0x7834, 0xC6C6, 0x7835, 0xB36A, 0x7836, 0xB36B, 0x7837, 0xC9E9, 0x7838, 0xD4D2, 0x7839, 0xEDC1, 0x783A, 0xEDC2, + 0x783B, 0xEDC3, 0x783C, 0xEDC5, 0x783D, 0xB36C, 0x783E, 0xC0F9, 0x783F, 0xB36D, 0x7840, 0xB4A1, 0x7841, 0xB36E, 0x7842, 0xB36F, + 0x7843, 0xB370, 0x7844, 0xB371, 0x7845, 0xB9E8, 0x7846, 0xB372, 0x7847, 0xEDD0, 0x7848, 0xB373, 0x7849, 0xB374, 0x784A, 0xB375, + 0x784B, 0xB376, 0x784C, 0xEDD1, 0x784D, 0xB377, 0x784E, 0xEDCA, 0x784F, 0xB378, 0x7850, 0xEDCF, 0x7851, 0xB379, 0x7852, 0xCEF8, + 0x7853, 0xB37A, 0x7854, 0xB37B, 0x7855, 0xCBB6, 0x7856, 0xEDCC, 0x7857, 0xEDCD, 0x7858, 0xB37C, 0x7859, 0xB37D, 0x785A, 0xB37E, + 0x785B, 0xB380, 0x785C, 0xB381, 0x785D, 0xCFF5, 0x785E, 0xB382, 0x785F, 0xB383, 0x7860, 0xB384, 0x7861, 0xB385, 0x7862, 0xB386, + 0x7863, 0xB387, 0x7864, 0xB388, 0x7865, 0xB389, 0x7866, 0xB38A, 0x7867, 0xB38B, 0x7868, 0xB38C, 0x7869, 0xB38D, 0x786A, 0xEDD2, + 0x786B, 0xC1F2, 0x786C, 0xD3B2, 0x786D, 0xEDCB, 0x786E, 0xC8B7, 0x786F, 0xB38E, 0x7870, 0xB38F, 0x7871, 0xB390, 0x7872, 0xB391, + 0x7873, 0xB392, 0x7874, 0xB393, 0x7875, 0xB394, 0x7876, 0xB395, 0x7877, 0xBCEF, 0x7878, 0xB396, 0x7879, 0xB397, 0x787A, 0xB398, + 0x787B, 0xB399, 0x787C, 0xC5F0, 0x787D, 0xB39A, 0x787E, 0xB39B, 0x787F, 0xB39C, 0x7880, 0xB39D, 0x7881, 0xB39E, 0x7882, 0xB39F, + 0x7883, 0xB3A0, 0x7884, 0xB440, 0x7885, 0xB441, 0x7886, 0xB442, 0x7887, 0xEDD6, 0x7888, 0xB443, 0x7889, 0xB5EF, 0x788A, 0xB444, + 0x788B, 0xB445, 0x788C, 0xC2B5, 0x788D, 0xB0AD, 0x788E, 0xCBE9, 0x788F, 0xB446, 0x7890, 0xB447, 0x7891, 0xB1AE, 0x7892, 0xB448, + 0x7893, 0xEDD4, 0x7894, 0xB449, 0x7895, 0xB44A, 0x7896, 0xB44B, 0x7897, 0xCDEB, 0x7898, 0xB5E2, 0x7899, 0xB44C, 0x789A, 0xEDD5, + 0x789B, 0xEDD3, 0x789C, 0xEDD7, 0x789D, 0xB44D, 0x789E, 0xB44E, 0x789F, 0xB5FA, 0x78A0, 0xB44F, 0x78A1, 0xEDD8, 0x78A2, 0xB450, + 0x78A3, 0xEDD9, 0x78A4, 0xB451, 0x78A5, 0xEDDC, 0x78A6, 0xB452, 0x78A7, 0xB1CC, 0x78A8, 0xB453, 0x78A9, 0xB454, 0x78AA, 0xB455, + 0x78AB, 0xB456, 0x78AC, 0xB457, 0x78AD, 0xB458, 0x78AE, 0xB459, 0x78AF, 0xB45A, 0x78B0, 0xC5F6, 0x78B1, 0xBCEE, 0x78B2, 0xEDDA, + 0x78B3, 0xCCBC, 0x78B4, 0xB2EA, 0x78B5, 0xB45B, 0x78B6, 0xB45C, 0x78B7, 0xB45D, 0x78B8, 0xB45E, 0x78B9, 0xEDDB, 0x78BA, 0xB45F, + 0x78BB, 0xB460, 0x78BC, 0xB461, 0x78BD, 0xB462, 0x78BE, 0xC4EB, 0x78BF, 0xB463, 0x78C0, 0xB464, 0x78C1, 0xB4C5, 0x78C2, 0xB465, + 0x78C3, 0xB466, 0x78C4, 0xB467, 0x78C5, 0xB0F5, 0x78C6, 0xB468, 0x78C7, 0xB469, 0x78C8, 0xB46A, 0x78C9, 0xEDDF, 0x78CA, 0xC0DA, + 0x78CB, 0xB4E8, 0x78CC, 0xB46B, 0x78CD, 0xB46C, 0x78CE, 0xB46D, 0x78CF, 0xB46E, 0x78D0, 0xC5CD, 0x78D1, 0xB46F, 0x78D2, 0xB470, + 0x78D3, 0xB471, 0x78D4, 0xEDDD, 0x78D5, 0xBFC4, 0x78D6, 0xB472, 0x78D7, 0xB473, 0x78D8, 0xB474, 0x78D9, 0xEDDE, 0x78DA, 0xB475, + 0x78DB, 0xB476, 0x78DC, 0xB477, 0x78DD, 0xB478, 0x78DE, 0xB479, 0x78DF, 0xB47A, 0x78E0, 0xB47B, 0x78E1, 0xB47C, 0x78E2, 0xB47D, + 0x78E3, 0xB47E, 0x78E4, 0xB480, 0x78E5, 0xB481, 0x78E6, 0xB482, 0x78E7, 0xB483, 0x78E8, 0xC4A5, 0x78E9, 0xB484, 0x78EA, 0xB485, + 0x78EB, 0xB486, 0x78EC, 0xEDE0, 0x78ED, 0xB487, 0x78EE, 0xB488, 0x78EF, 0xB489, 0x78F0, 0xB48A, 0x78F1, 0xB48B, 0x78F2, 0xEDE1, + 0x78F3, 0xB48C, 0x78F4, 0xEDE3, 0x78F5, 0xB48D, 0x78F6, 0xB48E, 0x78F7, 0xC1D7, 0x78F8, 0xB48F, 0x78F9, 0xB490, 0x78FA, 0xBBC7, + 0x78FB, 0xB491, 0x78FC, 0xB492, 0x78FD, 0xB493, 0x78FE, 0xB494, 0x78FF, 0xB495, 0x7900, 0xB496, 0x7901, 0xBDB8, 0x7902, 0xB497, + 0x7903, 0xB498, 0x7904, 0xB499, 0x7905, 0xEDE2, 0x7906, 0xB49A, 0x7907, 0xB49B, 0x7908, 0xB49C, 0x7909, 0xB49D, 0x790A, 0xB49E, + 0x790B, 0xB49F, 0x790C, 0xB4A0, 0x790D, 0xB540, 0x790E, 0xB541, 0x790F, 0xB542, 0x7910, 0xB543, 0x7911, 0xB544, 0x7912, 0xB545, + 0x7913, 0xEDE4, 0x7914, 0xB546, 0x7915, 0xB547, 0x7916, 0xB548, 0x7917, 0xB549, 0x7918, 0xB54A, 0x7919, 0xB54B, 0x791A, 0xB54C, + 0x791B, 0xB54D, 0x791C, 0xB54E, 0x791D, 0xB54F, 0x791E, 0xEDE6, 0x791F, 0xB550, 0x7920, 0xB551, 0x7921, 0xB552, 0x7922, 0xB553, + 0x7923, 0xB554, 0x7924, 0xEDE5, 0x7925, 0xB555, 0x7926, 0xB556, 0x7927, 0xB557, 0x7928, 0xB558, 0x7929, 0xB559, 0x792A, 0xB55A, + 0x792B, 0xB55B, 0x792C, 0xB55C, 0x792D, 0xB55D, 0x792E, 0xB55E, 0x792F, 0xB55F, 0x7930, 0xB560, 0x7931, 0xB561, 0x7932, 0xB562, + 0x7933, 0xB563, 0x7934, 0xEDE7, 0x7935, 0xB564, 0x7936, 0xB565, 0x7937, 0xB566, 0x7938, 0xB567, 0x7939, 0xB568, 0x793A, 0xCABE, + 0x793B, 0xECEA, 0x793C, 0xC0F1, 0x793D, 0xB569, 0x793E, 0xC9E7, 0x793F, 0xB56A, 0x7940, 0xECEB, 0x7941, 0xC6EE, 0x7942, 0xB56B, + 0x7943, 0xB56C, 0x7944, 0xB56D, 0x7945, 0xB56E, 0x7946, 0xECEC, 0x7947, 0xB56F, 0x7948, 0xC6ED, 0x7949, 0xECED, 0x794A, 0xB570, + 0x794B, 0xB571, 0x794C, 0xB572, 0x794D, 0xB573, 0x794E, 0xB574, 0x794F, 0xB575, 0x7950, 0xB576, 0x7951, 0xB577, 0x7952, 0xB578, + 0x7953, 0xECF0, 0x7954, 0xB579, 0x7955, 0xB57A, 0x7956, 0xD7E6, 0x7957, 0xECF3, 0x7958, 0xB57B, 0x7959, 0xB57C, 0x795A, 0xECF1, + 0x795B, 0xECEE, 0x795C, 0xECEF, 0x795D, 0xD7A3, 0x795E, 0xC9F1, 0x795F, 0xCBEE, 0x7960, 0xECF4, 0x7961, 0xB57D, 0x7962, 0xECF2, + 0x7963, 0xB57E, 0x7964, 0xB580, 0x7965, 0xCFE9, 0x7966, 0xB581, 0x7967, 0xECF6, 0x7968, 0xC6B1, 0x7969, 0xB582, 0x796A, 0xB583, + 0x796B, 0xB584, 0x796C, 0xB585, 0x796D, 0xBCC0, 0x796E, 0xB586, 0x796F, 0xECF5, 0x7970, 0xB587, 0x7971, 0xB588, 0x7972, 0xB589, + 0x7973, 0xB58A, 0x7974, 0xB58B, 0x7975, 0xB58C, 0x7976, 0xB58D, 0x7977, 0xB5BB, 0x7978, 0xBBF6, 0x7979, 0xB58E, 0x797A, 0xECF7, + 0x797B, 0xB58F, 0x797C, 0xB590, 0x797D, 0xB591, 0x797E, 0xB592, 0x797F, 0xB593, 0x7980, 0xD9F7, 0x7981, 0xBDFB, 0x7982, 0xB594, + 0x7983, 0xB595, 0x7984, 0xC2BB, 0x7985, 0xECF8, 0x7986, 0xB596, 0x7987, 0xB597, 0x7988, 0xB598, 0x7989, 0xB599, 0x798A, 0xECF9, + 0x798B, 0xB59A, 0x798C, 0xB59B, 0x798D, 0xB59C, 0x798E, 0xB59D, 0x798F, 0xB8A3, 0x7990, 0xB59E, 0x7991, 0xB59F, 0x7992, 0xB5A0, + 0x7993, 0xB640, 0x7994, 0xB641, 0x7995, 0xB642, 0x7996, 0xB643, 0x7997, 0xB644, 0x7998, 0xB645, 0x7999, 0xB646, 0x799A, 0xECFA, + 0x799B, 0xB647, 0x799C, 0xB648, 0x799D, 0xB649, 0x799E, 0xB64A, 0x799F, 0xB64B, 0x79A0, 0xB64C, 0x79A1, 0xB64D, 0x79A2, 0xB64E, + 0x79A3, 0xB64F, 0x79A4, 0xB650, 0x79A5, 0xB651, 0x79A6, 0xB652, 0x79A7, 0xECFB, 0x79A8, 0xB653, 0x79A9, 0xB654, 0x79AA, 0xB655, + 0x79AB, 0xB656, 0x79AC, 0xB657, 0x79AD, 0xB658, 0x79AE, 0xB659, 0x79AF, 0xB65A, 0x79B0, 0xB65B, 0x79B1, 0xB65C, 0x79B2, 0xB65D, + 0x79B3, 0xECFC, 0x79B4, 0xB65E, 0x79B5, 0xB65F, 0x79B6, 0xB660, 0x79B7, 0xB661, 0x79B8, 0xB662, 0x79B9, 0xD3ED, 0x79BA, 0xD8AE, + 0x79BB, 0xC0EB, 0x79BC, 0xB663, 0x79BD, 0xC7DD, 0x79BE, 0xBACC, 0x79BF, 0xB664, 0x79C0, 0xD0E3, 0x79C1, 0xCBBD, 0x79C2, 0xB665, + 0x79C3, 0xCDBA, 0x79C4, 0xB666, 0x79C5, 0xB667, 0x79C6, 0xB8D1, 0x79C7, 0xB668, 0x79C8, 0xB669, 0x79C9, 0xB1FC, 0x79CA, 0xB66A, + 0x79CB, 0xC7EF, 0x79CC, 0xB66B, 0x79CD, 0xD6D6, 0x79CE, 0xB66C, 0x79CF, 0xB66D, 0x79D0, 0xB66E, 0x79D1, 0xBFC6, 0x79D2, 0xC3EB, + 0x79D3, 0xB66F, 0x79D4, 0xB670, 0x79D5, 0xEFF5, 0x79D6, 0xB671, 0x79D7, 0xB672, 0x79D8, 0xC3D8, 0x79D9, 0xB673, 0x79DA, 0xB674, + 0x79DB, 0xB675, 0x79DC, 0xB676, 0x79DD, 0xB677, 0x79DE, 0xB678, 0x79DF, 0xD7E2, 0x79E0, 0xB679, 0x79E1, 0xB67A, 0x79E2, 0xB67B, + 0x79E3, 0xEFF7, 0x79E4, 0xB3D3, 0x79E5, 0xB67C, 0x79E6, 0xC7D8, 0x79E7, 0xD1ED, 0x79E8, 0xB67D, 0x79E9, 0xD6C8, 0x79EA, 0xB67E, + 0x79EB, 0xEFF8, 0x79EC, 0xB680, 0x79ED, 0xEFF6, 0x79EE, 0xB681, 0x79EF, 0xBBFD, 0x79F0, 0xB3C6, 0x79F1, 0xB682, 0x79F2, 0xB683, + 0x79F3, 0xB684, 0x79F4, 0xB685, 0x79F5, 0xB686, 0x79F6, 0xB687, 0x79F7, 0xB688, 0x79F8, 0xBDD5, 0x79F9, 0xB689, 0x79FA, 0xB68A, + 0x79FB, 0xD2C6, 0x79FC, 0xB68B, 0x79FD, 0xBBE0, 0x79FE, 0xB68C, 0x79FF, 0xB68D, 0x7A00, 0xCFA1, 0x7A01, 0xB68E, 0x7A02, 0xEFFC, + 0x7A03, 0xEFFB, 0x7A04, 0xB68F, 0x7A05, 0xB690, 0x7A06, 0xEFF9, 0x7A07, 0xB691, 0x7A08, 0xB692, 0x7A09, 0xB693, 0x7A0A, 0xB694, + 0x7A0B, 0xB3CC, 0x7A0C, 0xB695, 0x7A0D, 0xC9D4, 0x7A0E, 0xCBB0, 0x7A0F, 0xB696, 0x7A10, 0xB697, 0x7A11, 0xB698, 0x7A12, 0xB699, + 0x7A13, 0xB69A, 0x7A14, 0xEFFE, 0x7A15, 0xB69B, 0x7A16, 0xB69C, 0x7A17, 0xB0DE, 0x7A18, 0xB69D, 0x7A19, 0xB69E, 0x7A1A, 0xD6C9, + 0x7A1B, 0xB69F, 0x7A1C, 0xB6A0, 0x7A1D, 0xB740, 0x7A1E, 0xEFFD, 0x7A1F, 0xB741, 0x7A20, 0xB3ED, 0x7A21, 0xB742, 0x7A22, 0xB743, + 0x7A23, 0xF6D5, 0x7A24, 0xB744, 0x7A25, 0xB745, 0x7A26, 0xB746, 0x7A27, 0xB747, 0x7A28, 0xB748, 0x7A29, 0xB749, 0x7A2A, 0xB74A, + 0x7A2B, 0xB74B, 0x7A2C, 0xB74C, 0x7A2D, 0xB74D, 0x7A2E, 0xB74E, 0x7A2F, 0xB74F, 0x7A30, 0xB750, 0x7A31, 0xB751, 0x7A32, 0xB752, + 0x7A33, 0xCEC8, 0x7A34, 0xB753, 0x7A35, 0xB754, 0x7A36, 0xB755, 0x7A37, 0xF0A2, 0x7A38, 0xB756, 0x7A39, 0xF0A1, 0x7A3A, 0xB757, + 0x7A3B, 0xB5BE, 0x7A3C, 0xBCDA, 0x7A3D, 0xBBFC, 0x7A3E, 0xB758, 0x7A3F, 0xB8E5, 0x7A40, 0xB759, 0x7A41, 0xB75A, 0x7A42, 0xB75B, + 0x7A43, 0xB75C, 0x7A44, 0xB75D, 0x7A45, 0xB75E, 0x7A46, 0xC4C2, 0x7A47, 0xB75F, 0x7A48, 0xB760, 0x7A49, 0xB761, 0x7A4A, 0xB762, + 0x7A4B, 0xB763, 0x7A4C, 0xB764, 0x7A4D, 0xB765, 0x7A4E, 0xB766, 0x7A4F, 0xB767, 0x7A50, 0xB768, 0x7A51, 0xF0A3, 0x7A52, 0xB769, + 0x7A53, 0xB76A, 0x7A54, 0xB76B, 0x7A55, 0xB76C, 0x7A56, 0xB76D, 0x7A57, 0xCBEB, 0x7A58, 0xB76E, 0x7A59, 0xB76F, 0x7A5A, 0xB770, + 0x7A5B, 0xB771, 0x7A5C, 0xB772, 0x7A5D, 0xB773, 0x7A5E, 0xB774, 0x7A5F, 0xB775, 0x7A60, 0xB776, 0x7A61, 0xB777, 0x7A62, 0xB778, + 0x7A63, 0xB779, 0x7A64, 0xB77A, 0x7A65, 0xB77B, 0x7A66, 0xB77C, 0x7A67, 0xB77D, 0x7A68, 0xB77E, 0x7A69, 0xB780, 0x7A6A, 0xB781, + 0x7A6B, 0xB782, 0x7A6C, 0xB783, 0x7A6D, 0xB784, 0x7A6E, 0xB785, 0x7A6F, 0xB786, 0x7A70, 0xF0A6, 0x7A71, 0xB787, 0x7A72, 0xB788, + 0x7A73, 0xB789, 0x7A74, 0xD1A8, 0x7A75, 0xB78A, 0x7A76, 0xBEBF, 0x7A77, 0xC7EE, 0x7A78, 0xF1B6, 0x7A79, 0xF1B7, 0x7A7A, 0xBFD5, + 0x7A7B, 0xB78B, 0x7A7C, 0xB78C, 0x7A7D, 0xB78D, 0x7A7E, 0xB78E, 0x7A7F, 0xB4A9, 0x7A80, 0xF1B8, 0x7A81, 0xCDBB, 0x7A82, 0xB78F, + 0x7A83, 0xC7D4, 0x7A84, 0xD5AD, 0x7A85, 0xB790, 0x7A86, 0xF1B9, 0x7A87, 0xB791, 0x7A88, 0xF1BA, 0x7A89, 0xB792, 0x7A8A, 0xB793, + 0x7A8B, 0xB794, 0x7A8C, 0xB795, 0x7A8D, 0xC7CF, 0x7A8E, 0xB796, 0x7A8F, 0xB797, 0x7A90, 0xB798, 0x7A91, 0xD2A4, 0x7A92, 0xD6CF, + 0x7A93, 0xB799, 0x7A94, 0xB79A, 0x7A95, 0xF1BB, 0x7A96, 0xBDD1, 0x7A97, 0xB4B0, 0x7A98, 0xBEBD, 0x7A99, 0xB79B, 0x7A9A, 0xB79C, + 0x7A9B, 0xB79D, 0x7A9C, 0xB4DC, 0x7A9D, 0xCED1, 0x7A9E, 0xB79E, 0x7A9F, 0xBFDF, 0x7AA0, 0xF1BD, 0x7AA1, 0xB79F, 0x7AA2, 0xB7A0, + 0x7AA3, 0xB840, 0x7AA4, 0xB841, 0x7AA5, 0xBFFA, 0x7AA6, 0xF1BC, 0x7AA7, 0xB842, 0x7AA8, 0xF1BF, 0x7AA9, 0xB843, 0x7AAA, 0xB844, + 0x7AAB, 0xB845, 0x7AAC, 0xF1BE, 0x7AAD, 0xF1C0, 0x7AAE, 0xB846, 0x7AAF, 0xB847, 0x7AB0, 0xB848, 0x7AB1, 0xB849, 0x7AB2, 0xB84A, + 0x7AB3, 0xF1C1, 0x7AB4, 0xB84B, 0x7AB5, 0xB84C, 0x7AB6, 0xB84D, 0x7AB7, 0xB84E, 0x7AB8, 0xB84F, 0x7AB9, 0xB850, 0x7ABA, 0xB851, + 0x7ABB, 0xB852, 0x7ABC, 0xB853, 0x7ABD, 0xB854, 0x7ABE, 0xB855, 0x7ABF, 0xC1FE, 0x7AC0, 0xB856, 0x7AC1, 0xB857, 0x7AC2, 0xB858, + 0x7AC3, 0xB859, 0x7AC4, 0xB85A, 0x7AC5, 0xB85B, 0x7AC6, 0xB85C, 0x7AC7, 0xB85D, 0x7AC8, 0xB85E, 0x7AC9, 0xB85F, 0x7ACA, 0xB860, + 0x7ACB, 0xC1A2, 0x7ACC, 0xB861, 0x7ACD, 0xB862, 0x7ACE, 0xB863, 0x7ACF, 0xB864, 0x7AD0, 0xB865, 0x7AD1, 0xB866, 0x7AD2, 0xB867, + 0x7AD3, 0xB868, 0x7AD4, 0xB869, 0x7AD5, 0xB86A, 0x7AD6, 0xCAFA, 0x7AD7, 0xB86B, 0x7AD8, 0xB86C, 0x7AD9, 0xD5BE, 0x7ADA, 0xB86D, + 0x7ADB, 0xB86E, 0x7ADC, 0xB86F, 0x7ADD, 0xB870, 0x7ADE, 0xBEBA, 0x7ADF, 0xBEB9, 0x7AE0, 0xD5C2, 0x7AE1, 0xB871, 0x7AE2, 0xB872, + 0x7AE3, 0xBFA2, 0x7AE4, 0xB873, 0x7AE5, 0xCDAF, 0x7AE6, 0xF1B5, 0x7AE7, 0xB874, 0x7AE8, 0xB875, 0x7AE9, 0xB876, 0x7AEA, 0xB877, + 0x7AEB, 0xB878, 0x7AEC, 0xB879, 0x7AED, 0xBDDF, 0x7AEE, 0xB87A, 0x7AEF, 0xB6CB, 0x7AF0, 0xB87B, 0x7AF1, 0xB87C, 0x7AF2, 0xB87D, + 0x7AF3, 0xB87E, 0x7AF4, 0xB880, 0x7AF5, 0xB881, 0x7AF6, 0xB882, 0x7AF7, 0xB883, 0x7AF8, 0xB884, 0x7AF9, 0xD6F1, 0x7AFA, 0xF3C3, + 0x7AFB, 0xB885, 0x7AFC, 0xB886, 0x7AFD, 0xF3C4, 0x7AFE, 0xB887, 0x7AFF, 0xB8CD, 0x7B00, 0xB888, 0x7B01, 0xB889, 0x7B02, 0xB88A, + 0x7B03, 0xF3C6, 0x7B04, 0xF3C7, 0x7B05, 0xB88B, 0x7B06, 0xB0CA, 0x7B07, 0xB88C, 0x7B08, 0xF3C5, 0x7B09, 0xB88D, 0x7B0A, 0xF3C9, + 0x7B0B, 0xCBF1, 0x7B0C, 0xB88E, 0x7B0D, 0xB88F, 0x7B0E, 0xB890, 0x7B0F, 0xF3CB, 0x7B10, 0xB891, 0x7B11, 0xD0A6, 0x7B12, 0xB892, + 0x7B13, 0xB893, 0x7B14, 0xB1CA, 0x7B15, 0xF3C8, 0x7B16, 0xB894, 0x7B17, 0xB895, 0x7B18, 0xB896, 0x7B19, 0xF3CF, 0x7B1A, 0xB897, + 0x7B1B, 0xB5D1, 0x7B1C, 0xB898, 0x7B1D, 0xB899, 0x7B1E, 0xF3D7, 0x7B1F, 0xB89A, 0x7B20, 0xF3D2, 0x7B21, 0xB89B, 0x7B22, 0xB89C, + 0x7B23, 0xB89D, 0x7B24, 0xF3D4, 0x7B25, 0xF3D3, 0x7B26, 0xB7FB, 0x7B27, 0xB89E, 0x7B28, 0xB1BF, 0x7B29, 0xB89F, 0x7B2A, 0xF3CE, + 0x7B2B, 0xF3CA, 0x7B2C, 0xB5DA, 0x7B2D, 0xB8A0, 0x7B2E, 0xF3D0, 0x7B2F, 0xB940, 0x7B30, 0xB941, 0x7B31, 0xF3D1, 0x7B32, 0xB942, + 0x7B33, 0xF3D5, 0x7B34, 0xB943, 0x7B35, 0xB944, 0x7B36, 0xB945, 0x7B37, 0xB946, 0x7B38, 0xF3CD, 0x7B39, 0xB947, 0x7B3A, 0xBCE3, + 0x7B3B, 0xB948, 0x7B3C, 0xC1FD, 0x7B3D, 0xB949, 0x7B3E, 0xF3D6, 0x7B3F, 0xB94A, 0x7B40, 0xB94B, 0x7B41, 0xB94C, 0x7B42, 0xB94D, + 0x7B43, 0xB94E, 0x7B44, 0xB94F, 0x7B45, 0xF3DA, 0x7B46, 0xB950, 0x7B47, 0xF3CC, 0x7B48, 0xB951, 0x7B49, 0xB5C8, 0x7B4A, 0xB952, + 0x7B4B, 0xBDEE, 0x7B4C, 0xF3DC, 0x7B4D, 0xB953, 0x7B4E, 0xB954, 0x7B4F, 0xB7A4, 0x7B50, 0xBFF0, 0x7B51, 0xD6FE, 0x7B52, 0xCDB2, + 0x7B53, 0xB955, 0x7B54, 0xB4F0, 0x7B55, 0xB956, 0x7B56, 0xB2DF, 0x7B57, 0xB957, 0x7B58, 0xF3D8, 0x7B59, 0xB958, 0x7B5A, 0xF3D9, + 0x7B5B, 0xC9B8, 0x7B5C, 0xB959, 0x7B5D, 0xF3DD, 0x7B5E, 0xB95A, 0x7B5F, 0xB95B, 0x7B60, 0xF3DE, 0x7B61, 0xB95C, 0x7B62, 0xF3E1, + 0x7B63, 0xB95D, 0x7B64, 0xB95E, 0x7B65, 0xB95F, 0x7B66, 0xB960, 0x7B67, 0xB961, 0x7B68, 0xB962, 0x7B69, 0xB963, 0x7B6A, 0xB964, + 0x7B6B, 0xB965, 0x7B6C, 0xB966, 0x7B6D, 0xB967, 0x7B6E, 0xF3DF, 0x7B6F, 0xB968, 0x7B70, 0xB969, 0x7B71, 0xF3E3, 0x7B72, 0xF3E2, + 0x7B73, 0xB96A, 0x7B74, 0xB96B, 0x7B75, 0xF3DB, 0x7B76, 0xB96C, 0x7B77, 0xBFEA, 0x7B78, 0xB96D, 0x7B79, 0xB3EF, 0x7B7A, 0xB96E, + 0x7B7B, 0xF3E0, 0x7B7C, 0xB96F, 0x7B7D, 0xB970, 0x7B7E, 0xC7A9, 0x7B7F, 0xB971, 0x7B80, 0xBCF2, 0x7B81, 0xB972, 0x7B82, 0xB973, + 0x7B83, 0xB974, 0x7B84, 0xB975, 0x7B85, 0xF3EB, 0x7B86, 0xB976, 0x7B87, 0xB977, 0x7B88, 0xB978, 0x7B89, 0xB979, 0x7B8A, 0xB97A, + 0x7B8B, 0xB97B, 0x7B8C, 0xB97C, 0x7B8D, 0xB9BF, 0x7B8E, 0xB97D, 0x7B8F, 0xB97E, 0x7B90, 0xF3E4, 0x7B91, 0xB980, 0x7B92, 0xB981, + 0x7B93, 0xB982, 0x7B94, 0xB2AD, 0x7B95, 0xBBFE, 0x7B96, 0xB983, 0x7B97, 0xCBE3, 0x7B98, 0xB984, 0x7B99, 0xB985, 0x7B9A, 0xB986, + 0x7B9B, 0xB987, 0x7B9C, 0xF3ED, 0x7B9D, 0xF3E9, 0x7B9E, 0xB988, 0x7B9F, 0xB989, 0x7BA0, 0xB98A, 0x7BA1, 0xB9DC, 0x7BA2, 0xF3EE, + 0x7BA3, 0xB98B, 0x7BA4, 0xB98C, 0x7BA5, 0xB98D, 0x7BA6, 0xF3E5, 0x7BA7, 0xF3E6, 0x7BA8, 0xF3EA, 0x7BA9, 0xC2E1, 0x7BAA, 0xF3EC, + 0x7BAB, 0xF3EF, 0x7BAC, 0xF3E8, 0x7BAD, 0xBCFD, 0x7BAE, 0xB98E, 0x7BAF, 0xB98F, 0x7BB0, 0xB990, 0x7BB1, 0xCFE4, 0x7BB2, 0xB991, + 0x7BB3, 0xB992, 0x7BB4, 0xF3F0, 0x7BB5, 0xB993, 0x7BB6, 0xB994, 0x7BB7, 0xB995, 0x7BB8, 0xF3E7, 0x7BB9, 0xB996, 0x7BBA, 0xB997, + 0x7BBB, 0xB998, 0x7BBC, 0xB999, 0x7BBD, 0xB99A, 0x7BBE, 0xB99B, 0x7BBF, 0xB99C, 0x7BC0, 0xB99D, 0x7BC1, 0xF3F2, 0x7BC2, 0xB99E, + 0x7BC3, 0xB99F, 0x7BC4, 0xB9A0, 0x7BC5, 0xBA40, 0x7BC6, 0xD7AD, 0x7BC7, 0xC6AA, 0x7BC8, 0xBA41, 0x7BC9, 0xBA42, 0x7BCA, 0xBA43, + 0x7BCB, 0xBA44, 0x7BCC, 0xF3F3, 0x7BCD, 0xBA45, 0x7BCE, 0xBA46, 0x7BCF, 0xBA47, 0x7BD0, 0xBA48, 0x7BD1, 0xF3F1, 0x7BD2, 0xBA49, + 0x7BD3, 0xC2A8, 0x7BD4, 0xBA4A, 0x7BD5, 0xBA4B, 0x7BD6, 0xBA4C, 0x7BD7, 0xBA4D, 0x7BD8, 0xBA4E, 0x7BD9, 0xB8DD, 0x7BDA, 0xF3F5, + 0x7BDB, 0xBA4F, 0x7BDC, 0xBA50, 0x7BDD, 0xF3F4, 0x7BDE, 0xBA51, 0x7BDF, 0xBA52, 0x7BE0, 0xBA53, 0x7BE1, 0xB4DB, 0x7BE2, 0xBA54, + 0x7BE3, 0xBA55, 0x7BE4, 0xBA56, 0x7BE5, 0xF3F6, 0x7BE6, 0xF3F7, 0x7BE7, 0xBA57, 0x7BE8, 0xBA58, 0x7BE9, 0xBA59, 0x7BEA, 0xF3F8, + 0x7BEB, 0xBA5A, 0x7BEC, 0xBA5B, 0x7BED, 0xBA5C, 0x7BEE, 0xC0BA, 0x7BEF, 0xBA5D, 0x7BF0, 0xBA5E, 0x7BF1, 0xC0E9, 0x7BF2, 0xBA5F, + 0x7BF3, 0xBA60, 0x7BF4, 0xBA61, 0x7BF5, 0xBA62, 0x7BF6, 0xBA63, 0x7BF7, 0xC5F1, 0x7BF8, 0xBA64, 0x7BF9, 0xBA65, 0x7BFA, 0xBA66, + 0x7BFB, 0xBA67, 0x7BFC, 0xF3FB, 0x7BFD, 0xBA68, 0x7BFE, 0xF3FA, 0x7BFF, 0xBA69, 0x7C00, 0xBA6A, 0x7C01, 0xBA6B, 0x7C02, 0xBA6C, + 0x7C03, 0xBA6D, 0x7C04, 0xBA6E, 0x7C05, 0xBA6F, 0x7C06, 0xBA70, 0x7C07, 0xB4D8, 0x7C08, 0xBA71, 0x7C09, 0xBA72, 0x7C0A, 0xBA73, + 0x7C0B, 0xF3FE, 0x7C0C, 0xF3F9, 0x7C0D, 0xBA74, 0x7C0E, 0xBA75, 0x7C0F, 0xF3FC, 0x7C10, 0xBA76, 0x7C11, 0xBA77, 0x7C12, 0xBA78, + 0x7C13, 0xBA79, 0x7C14, 0xBA7A, 0x7C15, 0xBA7B, 0x7C16, 0xF3FD, 0x7C17, 0xBA7C, 0x7C18, 0xBA7D, 0x7C19, 0xBA7E, 0x7C1A, 0xBA80, + 0x7C1B, 0xBA81, 0x7C1C, 0xBA82, 0x7C1D, 0xBA83, 0x7C1E, 0xBA84, 0x7C1F, 0xF4A1, 0x7C20, 0xBA85, 0x7C21, 0xBA86, 0x7C22, 0xBA87, + 0x7C23, 0xBA88, 0x7C24, 0xBA89, 0x7C25, 0xBA8A, 0x7C26, 0xF4A3, 0x7C27, 0xBBC9, 0x7C28, 0xBA8B, 0x7C29, 0xBA8C, 0x7C2A, 0xF4A2, + 0x7C2B, 0xBA8D, 0x7C2C, 0xBA8E, 0x7C2D, 0xBA8F, 0x7C2E, 0xBA90, 0x7C2F, 0xBA91, 0x7C30, 0xBA92, 0x7C31, 0xBA93, 0x7C32, 0xBA94, + 0x7C33, 0xBA95, 0x7C34, 0xBA96, 0x7C35, 0xBA97, 0x7C36, 0xBA98, 0x7C37, 0xBA99, 0x7C38, 0xF4A4, 0x7C39, 0xBA9A, 0x7C3A, 0xBA9B, + 0x7C3B, 0xBA9C, 0x7C3C, 0xBA9D, 0x7C3D, 0xBA9E, 0x7C3E, 0xBA9F, 0x7C3F, 0xB2BE, 0x7C40, 0xF4A6, 0x7C41, 0xF4A5, 0x7C42, 0xBAA0, + 0x7C43, 0xBB40, 0x7C44, 0xBB41, 0x7C45, 0xBB42, 0x7C46, 0xBB43, 0x7C47, 0xBB44, 0x7C48, 0xBB45, 0x7C49, 0xBB46, 0x7C4A, 0xBB47, + 0x7C4B, 0xBB48, 0x7C4C, 0xBB49, 0x7C4D, 0xBCAE, 0x7C4E, 0xBB4A, 0x7C4F, 0xBB4B, 0x7C50, 0xBB4C, 0x7C51, 0xBB4D, 0x7C52, 0xBB4E, + 0x7C53, 0xBB4F, 0x7C54, 0xBB50, 0x7C55, 0xBB51, 0x7C56, 0xBB52, 0x7C57, 0xBB53, 0x7C58, 0xBB54, 0x7C59, 0xBB55, 0x7C5A, 0xBB56, + 0x7C5B, 0xBB57, 0x7C5C, 0xBB58, 0x7C5D, 0xBB59, 0x7C5E, 0xBB5A, 0x7C5F, 0xBB5B, 0x7C60, 0xBB5C, 0x7C61, 0xBB5D, 0x7C62, 0xBB5E, + 0x7C63, 0xBB5F, 0x7C64, 0xBB60, 0x7C65, 0xBB61, 0x7C66, 0xBB62, 0x7C67, 0xBB63, 0x7C68, 0xBB64, 0x7C69, 0xBB65, 0x7C6A, 0xBB66, + 0x7C6B, 0xBB67, 0x7C6C, 0xBB68, 0x7C6D, 0xBB69, 0x7C6E, 0xBB6A, 0x7C6F, 0xBB6B, 0x7C70, 0xBB6C, 0x7C71, 0xBB6D, 0x7C72, 0xBB6E, + 0x7C73, 0xC3D7, 0x7C74, 0xD9E1, 0x7C75, 0xBB6F, 0x7C76, 0xBB70, 0x7C77, 0xBB71, 0x7C78, 0xBB72, 0x7C79, 0xBB73, 0x7C7A, 0xBB74, + 0x7C7B, 0xC0E0, 0x7C7C, 0xF4CC, 0x7C7D, 0xD7D1, 0x7C7E, 0xBB75, 0x7C7F, 0xBB76, 0x7C80, 0xBB77, 0x7C81, 0xBB78, 0x7C82, 0xBB79, + 0x7C83, 0xBB7A, 0x7C84, 0xBB7B, 0x7C85, 0xBB7C, 0x7C86, 0xBB7D, 0x7C87, 0xBB7E, 0x7C88, 0xBB80, 0x7C89, 0xB7DB, 0x7C8A, 0xBB81, + 0x7C8B, 0xBB82, 0x7C8C, 0xBB83, 0x7C8D, 0xBB84, 0x7C8E, 0xBB85, 0x7C8F, 0xBB86, 0x7C90, 0xBB87, 0x7C91, 0xF4CE, 0x7C92, 0xC1A3, + 0x7C93, 0xBB88, 0x7C94, 0xBB89, 0x7C95, 0xC6C9, 0x7C96, 0xBB8A, 0x7C97, 0xB4D6, 0x7C98, 0xD5B3, 0x7C99, 0xBB8B, 0x7C9A, 0xBB8C, + 0x7C9B, 0xBB8D, 0x7C9C, 0xF4D0, 0x7C9D, 0xF4CF, 0x7C9E, 0xF4D1, 0x7C9F, 0xCBDA, 0x7CA0, 0xBB8E, 0x7CA1, 0xBB8F, 0x7CA2, 0xF4D2, + 0x7CA3, 0xBB90, 0x7CA4, 0xD4C1, 0x7CA5, 0xD6E0, 0x7CA6, 0xBB91, 0x7CA7, 0xBB92, 0x7CA8, 0xBB93, 0x7CA9, 0xBB94, 0x7CAA, 0xB7E0, + 0x7CAB, 0xBB95, 0x7CAC, 0xBB96, 0x7CAD, 0xBB97, 0x7CAE, 0xC1B8, 0x7CAF, 0xBB98, 0x7CB0, 0xBB99, 0x7CB1, 0xC1BB, 0x7CB2, 0xF4D3, + 0x7CB3, 0xBEAC, 0x7CB4, 0xBB9A, 0x7CB5, 0xBB9B, 0x7CB6, 0xBB9C, 0x7CB7, 0xBB9D, 0x7CB8, 0xBB9E, 0x7CB9, 0xB4E2, 0x7CBA, 0xBB9F, + 0x7CBB, 0xBBA0, 0x7CBC, 0xF4D4, 0x7CBD, 0xF4D5, 0x7CBE, 0xBEAB, 0x7CBF, 0xBC40, 0x7CC0, 0xBC41, 0x7CC1, 0xF4D6, 0x7CC2, 0xBC42, + 0x7CC3, 0xBC43, 0x7CC4, 0xBC44, 0x7CC5, 0xF4DB, 0x7CC6, 0xBC45, 0x7CC7, 0xF4D7, 0x7CC8, 0xF4DA, 0x7CC9, 0xBC46, 0x7CCA, 0xBAFD, + 0x7CCB, 0xBC47, 0x7CCC, 0xF4D8, 0x7CCD, 0xF4D9, 0x7CCE, 0xBC48, 0x7CCF, 0xBC49, 0x7CD0, 0xBC4A, 0x7CD1, 0xBC4B, 0x7CD2, 0xBC4C, + 0x7CD3, 0xBC4D, 0x7CD4, 0xBC4E, 0x7CD5, 0xB8E2, 0x7CD6, 0xCCC7, 0x7CD7, 0xF4DC, 0x7CD8, 0xBC4F, 0x7CD9, 0xB2DA, 0x7CDA, 0xBC50, + 0x7CDB, 0xBC51, 0x7CDC, 0xC3D3, 0x7CDD, 0xBC52, 0x7CDE, 0xBC53, 0x7CDF, 0xD4E3, 0x7CE0, 0xBFB7, 0x7CE1, 0xBC54, 0x7CE2, 0xBC55, + 0x7CE3, 0xBC56, 0x7CE4, 0xBC57, 0x7CE5, 0xBC58, 0x7CE6, 0xBC59, 0x7CE7, 0xBC5A, 0x7CE8, 0xF4DD, 0x7CE9, 0xBC5B, 0x7CEA, 0xBC5C, + 0x7CEB, 0xBC5D, 0x7CEC, 0xBC5E, 0x7CED, 0xBC5F, 0x7CEE, 0xBC60, 0x7CEF, 0xC5B4, 0x7CF0, 0xBC61, 0x7CF1, 0xBC62, 0x7CF2, 0xBC63, + 0x7CF3, 0xBC64, 0x7CF4, 0xBC65, 0x7CF5, 0xBC66, 0x7CF6, 0xBC67, 0x7CF7, 0xBC68, 0x7CF8, 0xF4E9, 0x7CF9, 0xBC69, 0x7CFA, 0xBC6A, + 0x7CFB, 0xCFB5, 0x7CFC, 0xBC6B, 0x7CFD, 0xBC6C, 0x7CFE, 0xBC6D, 0x7CFF, 0xBC6E, 0x7D00, 0xBC6F, 0x7D01, 0xBC70, 0x7D02, 0xBC71, + 0x7D03, 0xBC72, 0x7D04, 0xBC73, 0x7D05, 0xBC74, 0x7D06, 0xBC75, 0x7D07, 0xBC76, 0x7D08, 0xBC77, 0x7D09, 0xBC78, 0x7D0A, 0xCEC9, + 0x7D0B, 0xBC79, 0x7D0C, 0xBC7A, 0x7D0D, 0xBC7B, 0x7D0E, 0xBC7C, 0x7D0F, 0xBC7D, 0x7D10, 0xBC7E, 0x7D11, 0xBC80, 0x7D12, 0xBC81, + 0x7D13, 0xBC82, 0x7D14, 0xBC83, 0x7D15, 0xBC84, 0x7D16, 0xBC85, 0x7D17, 0xBC86, 0x7D18, 0xBC87, 0x7D19, 0xBC88, 0x7D1A, 0xBC89, + 0x7D1B, 0xBC8A, 0x7D1C, 0xBC8B, 0x7D1D, 0xBC8C, 0x7D1E, 0xBC8D, 0x7D1F, 0xBC8E, 0x7D20, 0xCBD8, 0x7D21, 0xBC8F, 0x7D22, 0xCBF7, + 0x7D23, 0xBC90, 0x7D24, 0xBC91, 0x7D25, 0xBC92, 0x7D26, 0xBC93, 0x7D27, 0xBDF4, 0x7D28, 0xBC94, 0x7D29, 0xBC95, 0x7D2A, 0xBC96, + 0x7D2B, 0xD7CF, 0x7D2C, 0xBC97, 0x7D2D, 0xBC98, 0x7D2E, 0xBC99, 0x7D2F, 0xC0DB, 0x7D30, 0xBC9A, 0x7D31, 0xBC9B, 0x7D32, 0xBC9C, + 0x7D33, 0xBC9D, 0x7D34, 0xBC9E, 0x7D35, 0xBC9F, 0x7D36, 0xBCA0, 0x7D37, 0xBD40, 0x7D38, 0xBD41, 0x7D39, 0xBD42, 0x7D3A, 0xBD43, + 0x7D3B, 0xBD44, 0x7D3C, 0xBD45, 0x7D3D, 0xBD46, 0x7D3E, 0xBD47, 0x7D3F, 0xBD48, 0x7D40, 0xBD49, 0x7D41, 0xBD4A, 0x7D42, 0xBD4B, + 0x7D43, 0xBD4C, 0x7D44, 0xBD4D, 0x7D45, 0xBD4E, 0x7D46, 0xBD4F, 0x7D47, 0xBD50, 0x7D48, 0xBD51, 0x7D49, 0xBD52, 0x7D4A, 0xBD53, + 0x7D4B, 0xBD54, 0x7D4C, 0xBD55, 0x7D4D, 0xBD56, 0x7D4E, 0xBD57, 0x7D4F, 0xBD58, 0x7D50, 0xBD59, 0x7D51, 0xBD5A, 0x7D52, 0xBD5B, + 0x7D53, 0xBD5C, 0x7D54, 0xBD5D, 0x7D55, 0xBD5E, 0x7D56, 0xBD5F, 0x7D57, 0xBD60, 0x7D58, 0xBD61, 0x7D59, 0xBD62, 0x7D5A, 0xBD63, + 0x7D5B, 0xBD64, 0x7D5C, 0xBD65, 0x7D5D, 0xBD66, 0x7D5E, 0xBD67, 0x7D5F, 0xBD68, 0x7D60, 0xBD69, 0x7D61, 0xBD6A, 0x7D62, 0xBD6B, + 0x7D63, 0xBD6C, 0x7D64, 0xBD6D, 0x7D65, 0xBD6E, 0x7D66, 0xBD6F, 0x7D67, 0xBD70, 0x7D68, 0xBD71, 0x7D69, 0xBD72, 0x7D6A, 0xBD73, + 0x7D6B, 0xBD74, 0x7D6C, 0xBD75, 0x7D6D, 0xBD76, 0x7D6E, 0xD0F5, 0x7D6F, 0xBD77, 0x7D70, 0xBD78, 0x7D71, 0xBD79, 0x7D72, 0xBD7A, + 0x7D73, 0xBD7B, 0x7D74, 0xBD7C, 0x7D75, 0xBD7D, 0x7D76, 0xBD7E, 0x7D77, 0xF4EA, 0x7D78, 0xBD80, 0x7D79, 0xBD81, 0x7D7A, 0xBD82, + 0x7D7B, 0xBD83, 0x7D7C, 0xBD84, 0x7D7D, 0xBD85, 0x7D7E, 0xBD86, 0x7D7F, 0xBD87, 0x7D80, 0xBD88, 0x7D81, 0xBD89, 0x7D82, 0xBD8A, + 0x7D83, 0xBD8B, 0x7D84, 0xBD8C, 0x7D85, 0xBD8D, 0x7D86, 0xBD8E, 0x7D87, 0xBD8F, 0x7D88, 0xBD90, 0x7D89, 0xBD91, 0x7D8A, 0xBD92, + 0x7D8B, 0xBD93, 0x7D8C, 0xBD94, 0x7D8D, 0xBD95, 0x7D8E, 0xBD96, 0x7D8F, 0xBD97, 0x7D90, 0xBD98, 0x7D91, 0xBD99, 0x7D92, 0xBD9A, + 0x7D93, 0xBD9B, 0x7D94, 0xBD9C, 0x7D95, 0xBD9D, 0x7D96, 0xBD9E, 0x7D97, 0xBD9F, 0x7D98, 0xBDA0, 0x7D99, 0xBE40, 0x7D9A, 0xBE41, + 0x7D9B, 0xBE42, 0x7D9C, 0xBE43, 0x7D9D, 0xBE44, 0x7D9E, 0xBE45, 0x7D9F, 0xBE46, 0x7DA0, 0xBE47, 0x7DA1, 0xBE48, 0x7DA2, 0xBE49, + 0x7DA3, 0xBE4A, 0x7DA4, 0xBE4B, 0x7DA5, 0xBE4C, 0x7DA6, 0xF4EB, 0x7DA7, 0xBE4D, 0x7DA8, 0xBE4E, 0x7DA9, 0xBE4F, 0x7DAA, 0xBE50, + 0x7DAB, 0xBE51, 0x7DAC, 0xBE52, 0x7DAD, 0xBE53, 0x7DAE, 0xF4EC, 0x7DAF, 0xBE54, 0x7DB0, 0xBE55, 0x7DB1, 0xBE56, 0x7DB2, 0xBE57, + 0x7DB3, 0xBE58, 0x7DB4, 0xBE59, 0x7DB5, 0xBE5A, 0x7DB6, 0xBE5B, 0x7DB7, 0xBE5C, 0x7DB8, 0xBE5D, 0x7DB9, 0xBE5E, 0x7DBA, 0xBE5F, + 0x7DBB, 0xBE60, 0x7DBC, 0xBE61, 0x7DBD, 0xBE62, 0x7DBE, 0xBE63, 0x7DBF, 0xBE64, 0x7DC0, 0xBE65, 0x7DC1, 0xBE66, 0x7DC2, 0xBE67, + 0x7DC3, 0xBE68, 0x7DC4, 0xBE69, 0x7DC5, 0xBE6A, 0x7DC6, 0xBE6B, 0x7DC7, 0xBE6C, 0x7DC8, 0xBE6D, 0x7DC9, 0xBE6E, 0x7DCA, 0xBE6F, + 0x7DCB, 0xBE70, 0x7DCC, 0xBE71, 0x7DCD, 0xBE72, 0x7DCE, 0xBE73, 0x7DCF, 0xBE74, 0x7DD0, 0xBE75, 0x7DD1, 0xBE76, 0x7DD2, 0xBE77, + 0x7DD3, 0xBE78, 0x7DD4, 0xBE79, 0x7DD5, 0xBE7A, 0x7DD6, 0xBE7B, 0x7DD7, 0xBE7C, 0x7DD8, 0xBE7D, 0x7DD9, 0xBE7E, 0x7DDA, 0xBE80, + 0x7DDB, 0xBE81, 0x7DDC, 0xBE82, 0x7DDD, 0xBE83, 0x7DDE, 0xBE84, 0x7DDF, 0xBE85, 0x7DE0, 0xBE86, 0x7DE1, 0xBE87, 0x7DE2, 0xBE88, + 0x7DE3, 0xBE89, 0x7DE4, 0xBE8A, 0x7DE5, 0xBE8B, 0x7DE6, 0xBE8C, 0x7DE7, 0xBE8D, 0x7DE8, 0xBE8E, 0x7DE9, 0xBE8F, 0x7DEA, 0xBE90, + 0x7DEB, 0xBE91, 0x7DEC, 0xBE92, 0x7DED, 0xBE93, 0x7DEE, 0xBE94, 0x7DEF, 0xBE95, 0x7DF0, 0xBE96, 0x7DF1, 0xBE97, 0x7DF2, 0xBE98, + 0x7DF3, 0xBE99, 0x7DF4, 0xBE9A, 0x7DF5, 0xBE9B, 0x7DF6, 0xBE9C, 0x7DF7, 0xBE9D, 0x7DF8, 0xBE9E, 0x7DF9, 0xBE9F, 0x7DFA, 0xBEA0, + 0x7DFB, 0xBF40, 0x7DFC, 0xBF41, 0x7DFD, 0xBF42, 0x7DFE, 0xBF43, 0x7DFF, 0xBF44, 0x7E00, 0xBF45, 0x7E01, 0xBF46, 0x7E02, 0xBF47, + 0x7E03, 0xBF48, 0x7E04, 0xBF49, 0x7E05, 0xBF4A, 0x7E06, 0xBF4B, 0x7E07, 0xBF4C, 0x7E08, 0xBF4D, 0x7E09, 0xBF4E, 0x7E0A, 0xBF4F, + 0x7E0B, 0xBF50, 0x7E0C, 0xBF51, 0x7E0D, 0xBF52, 0x7E0E, 0xBF53, 0x7E0F, 0xBF54, 0x7E10, 0xBF55, 0x7E11, 0xBF56, 0x7E12, 0xBF57, + 0x7E13, 0xBF58, 0x7E14, 0xBF59, 0x7E15, 0xBF5A, 0x7E16, 0xBF5B, 0x7E17, 0xBF5C, 0x7E18, 0xBF5D, 0x7E19, 0xBF5E, 0x7E1A, 0xBF5F, + 0x7E1B, 0xBF60, 0x7E1C, 0xBF61, 0x7E1D, 0xBF62, 0x7E1E, 0xBF63, 0x7E1F, 0xBF64, 0x7E20, 0xBF65, 0x7E21, 0xBF66, 0x7E22, 0xBF67, + 0x7E23, 0xBF68, 0x7E24, 0xBF69, 0x7E25, 0xBF6A, 0x7E26, 0xBF6B, 0x7E27, 0xBF6C, 0x7E28, 0xBF6D, 0x7E29, 0xBF6E, 0x7E2A, 0xBF6F, + 0x7E2B, 0xBF70, 0x7E2C, 0xBF71, 0x7E2D, 0xBF72, 0x7E2E, 0xBF73, 0x7E2F, 0xBF74, 0x7E30, 0xBF75, 0x7E31, 0xBF76, 0x7E32, 0xBF77, + 0x7E33, 0xBF78, 0x7E34, 0xBF79, 0x7E35, 0xBF7A, 0x7E36, 0xBF7B, 0x7E37, 0xBF7C, 0x7E38, 0xBF7D, 0x7E39, 0xBF7E, 0x7E3A, 0xBF80, + 0x7E3B, 0xF7E3, 0x7E3C, 0xBF81, 0x7E3D, 0xBF82, 0x7E3E, 0xBF83, 0x7E3F, 0xBF84, 0x7E40, 0xBF85, 0x7E41, 0xB7B1, 0x7E42, 0xBF86, + 0x7E43, 0xBF87, 0x7E44, 0xBF88, 0x7E45, 0xBF89, 0x7E46, 0xBF8A, 0x7E47, 0xF4ED, 0x7E48, 0xBF8B, 0x7E49, 0xBF8C, 0x7E4A, 0xBF8D, + 0x7E4B, 0xBF8E, 0x7E4C, 0xBF8F, 0x7E4D, 0xBF90, 0x7E4E, 0xBF91, 0x7E4F, 0xBF92, 0x7E50, 0xBF93, 0x7E51, 0xBF94, 0x7E52, 0xBF95, + 0x7E53, 0xBF96, 0x7E54, 0xBF97, 0x7E55, 0xBF98, 0x7E56, 0xBF99, 0x7E57, 0xBF9A, 0x7E58, 0xBF9B, 0x7E59, 0xBF9C, 0x7E5A, 0xBF9D, + 0x7E5B, 0xBF9E, 0x7E5C, 0xBF9F, 0x7E5D, 0xBFA0, 0x7E5E, 0xC040, 0x7E5F, 0xC041, 0x7E60, 0xC042, 0x7E61, 0xC043, 0x7E62, 0xC044, + 0x7E63, 0xC045, 0x7E64, 0xC046, 0x7E65, 0xC047, 0x7E66, 0xC048, 0x7E67, 0xC049, 0x7E68, 0xC04A, 0x7E69, 0xC04B, 0x7E6A, 0xC04C, + 0x7E6B, 0xC04D, 0x7E6C, 0xC04E, 0x7E6D, 0xC04F, 0x7E6E, 0xC050, 0x7E6F, 0xC051, 0x7E70, 0xC052, 0x7E71, 0xC053, 0x7E72, 0xC054, + 0x7E73, 0xC055, 0x7E74, 0xC056, 0x7E75, 0xC057, 0x7E76, 0xC058, 0x7E77, 0xC059, 0x7E78, 0xC05A, 0x7E79, 0xC05B, 0x7E7A, 0xC05C, + 0x7E7B, 0xC05D, 0x7E7C, 0xC05E, 0x7E7D, 0xC05F, 0x7E7E, 0xC060, 0x7E7F, 0xC061, 0x7E80, 0xC062, 0x7E81, 0xC063, 0x7E82, 0xD7EB, + 0x7E83, 0xC064, 0x7E84, 0xC065, 0x7E85, 0xC066, 0x7E86, 0xC067, 0x7E87, 0xC068, 0x7E88, 0xC069, 0x7E89, 0xC06A, 0x7E8A, 0xC06B, + 0x7E8B, 0xC06C, 0x7E8C, 0xC06D, 0x7E8D, 0xC06E, 0x7E8E, 0xC06F, 0x7E8F, 0xC070, 0x7E90, 0xC071, 0x7E91, 0xC072, 0x7E92, 0xC073, + 0x7E93, 0xC074, 0x7E94, 0xC075, 0x7E95, 0xC076, 0x7E96, 0xC077, 0x7E97, 0xC078, 0x7E98, 0xC079, 0x7E99, 0xC07A, 0x7E9A, 0xC07B, + 0x7E9B, 0xF4EE, 0x7E9C, 0xC07C, 0x7E9D, 0xC07D, 0x7E9E, 0xC07E, 0x7E9F, 0xE6F9, 0x7EA0, 0xBEC0, 0x7EA1, 0xE6FA, 0x7EA2, 0xBAEC, + 0x7EA3, 0xE6FB, 0x7EA4, 0xCFCB, 0x7EA5, 0xE6FC, 0x7EA6, 0xD4BC, 0x7EA7, 0xBCB6, 0x7EA8, 0xE6FD, 0x7EA9, 0xE6FE, 0x7EAA, 0xBCCD, + 0x7EAB, 0xC8D2, 0x7EAC, 0xCEB3, 0x7EAD, 0xE7A1, 0x7EAE, 0xC080, 0x7EAF, 0xB4BF, 0x7EB0, 0xE7A2, 0x7EB1, 0xC9B4, 0x7EB2, 0xB8D9, + 0x7EB3, 0xC4C9, 0x7EB4, 0xC081, 0x7EB5, 0xD7DD, 0x7EB6, 0xC2DA, 0x7EB7, 0xB7D7, 0x7EB8, 0xD6BD, 0x7EB9, 0xCEC6, 0x7EBA, 0xB7C4, + 0x7EBB, 0xC082, 0x7EBC, 0xC083, 0x7EBD, 0xC5A6, 0x7EBE, 0xE7A3, 0x7EBF, 0xCFDF, 0x7EC0, 0xE7A4, 0x7EC1, 0xE7A5, 0x7EC2, 0xE7A6, + 0x7EC3, 0xC1B7, 0x7EC4, 0xD7E9, 0x7EC5, 0xC9F0, 0x7EC6, 0xCFB8, 0x7EC7, 0xD6AF, 0x7EC8, 0xD6D5, 0x7EC9, 0xE7A7, 0x7ECA, 0xB0ED, + 0x7ECB, 0xE7A8, 0x7ECC, 0xE7A9, 0x7ECD, 0xC9DC, 0x7ECE, 0xD2EF, 0x7ECF, 0xBEAD, 0x7ED0, 0xE7AA, 0x7ED1, 0xB0F3, 0x7ED2, 0xC8DE, + 0x7ED3, 0xBDE1, 0x7ED4, 0xE7AB, 0x7ED5, 0xC8C6, 0x7ED6, 0xC084, 0x7ED7, 0xE7AC, 0x7ED8, 0xBBE6, 0x7ED9, 0xB8F8, 0x7EDA, 0xD1A4, + 0x7EDB, 0xE7AD, 0x7EDC, 0xC2E7, 0x7EDD, 0xBEF8, 0x7EDE, 0xBDCA, 0x7EDF, 0xCDB3, 0x7EE0, 0xE7AE, 0x7EE1, 0xE7AF, 0x7EE2, 0xBEEE, + 0x7EE3, 0xD0E5, 0x7EE4, 0xC085, 0x7EE5, 0xCBE7, 0x7EE6, 0xCCD0, 0x7EE7, 0xBCCC, 0x7EE8, 0xE7B0, 0x7EE9, 0xBCA8, 0x7EEA, 0xD0F7, + 0x7EEB, 0xE7B1, 0x7EEC, 0xC086, 0x7EED, 0xD0F8, 0x7EEE, 0xE7B2, 0x7EEF, 0xE7B3, 0x7EF0, 0xB4C2, 0x7EF1, 0xE7B4, 0x7EF2, 0xE7B5, + 0x7EF3, 0xC9FE, 0x7EF4, 0xCEAC, 0x7EF5, 0xC3E0, 0x7EF6, 0xE7B7, 0x7EF7, 0xB1C1, 0x7EF8, 0xB3F1, 0x7EF9, 0xC087, 0x7EFA, 0xE7B8, + 0x7EFB, 0xE7B9, 0x7EFC, 0xD7DB, 0x7EFD, 0xD5C0, 0x7EFE, 0xE7BA, 0x7EFF, 0xC2CC, 0x7F00, 0xD7BA, 0x7F01, 0xE7BB, 0x7F02, 0xE7BC, + 0x7F03, 0xE7BD, 0x7F04, 0xBCEA, 0x7F05, 0xC3E5, 0x7F06, 0xC0C2, 0x7F07, 0xE7BE, 0x7F08, 0xE7BF, 0x7F09, 0xBCA9, 0x7F0A, 0xC088, + 0x7F0B, 0xE7C0, 0x7F0C, 0xE7C1, 0x7F0D, 0xE7B6, 0x7F0E, 0xB6D0, 0x7F0F, 0xE7C2, 0x7F10, 0xC089, 0x7F11, 0xE7C3, 0x7F12, 0xE7C4, + 0x7F13, 0xBBBA, 0x7F14, 0xB5DE, 0x7F15, 0xC2C6, 0x7F16, 0xB1E0, 0x7F17, 0xE7C5, 0x7F18, 0xD4B5, 0x7F19, 0xE7C6, 0x7F1A, 0xB8BF, + 0x7F1B, 0xE7C8, 0x7F1C, 0xE7C7, 0x7F1D, 0xB7EC, 0x7F1E, 0xC08A, 0x7F1F, 0xE7C9, 0x7F20, 0xB2F8, 0x7F21, 0xE7CA, 0x7F22, 0xE7CB, + 0x7F23, 0xE7CC, 0x7F24, 0xE7CD, 0x7F25, 0xE7CE, 0x7F26, 0xE7CF, 0x7F27, 0xE7D0, 0x7F28, 0xD3A7, 0x7F29, 0xCBF5, 0x7F2A, 0xE7D1, + 0x7F2B, 0xE7D2, 0x7F2C, 0xE7D3, 0x7F2D, 0xE7D4, 0x7F2E, 0xC9C9, 0x7F2F, 0xE7D5, 0x7F30, 0xE7D6, 0x7F31, 0xE7D7, 0x7F32, 0xE7D8, + 0x7F33, 0xE7D9, 0x7F34, 0xBDC9, 0x7F35, 0xE7DA, 0x7F36, 0xF3BE, 0x7F37, 0xC08B, 0x7F38, 0xB8D7, 0x7F39, 0xC08C, 0x7F3A, 0xC8B1, + 0x7F3B, 0xC08D, 0x7F3C, 0xC08E, 0x7F3D, 0xC08F, 0x7F3E, 0xC090, 0x7F3F, 0xC091, 0x7F40, 0xC092, 0x7F41, 0xC093, 0x7F42, 0xF3BF, + 0x7F43, 0xC094, 0x7F44, 0xF3C0, 0x7F45, 0xF3C1, 0x7F46, 0xC095, 0x7F47, 0xC096, 0x7F48, 0xC097, 0x7F49, 0xC098, 0x7F4A, 0xC099, + 0x7F4B, 0xC09A, 0x7F4C, 0xC09B, 0x7F4D, 0xC09C, 0x7F4E, 0xC09D, 0x7F4F, 0xC09E, 0x7F50, 0xB9DE, 0x7F51, 0xCDF8, 0x7F52, 0xC09F, + 0x7F53, 0xC0A0, 0x7F54, 0xD8E8, 0x7F55, 0xBAB1, 0x7F56, 0xC140, 0x7F57, 0xC2DE, 0x7F58, 0xEEB7, 0x7F59, 0xC141, 0x7F5A, 0xB7A3, + 0x7F5B, 0xC142, 0x7F5C, 0xC143, 0x7F5D, 0xC144, 0x7F5E, 0xC145, 0x7F5F, 0xEEB9, 0x7F60, 0xC146, 0x7F61, 0xEEB8, 0x7F62, 0xB0D5, + 0x7F63, 0xC147, 0x7F64, 0xC148, 0x7F65, 0xC149, 0x7F66, 0xC14A, 0x7F67, 0xC14B, 0x7F68, 0xEEBB, 0x7F69, 0xD5D6, 0x7F6A, 0xD7EF, + 0x7F6B, 0xC14C, 0x7F6C, 0xC14D, 0x7F6D, 0xC14E, 0x7F6E, 0xD6C3, 0x7F6F, 0xC14F, 0x7F70, 0xC150, 0x7F71, 0xEEBD, 0x7F72, 0xCAF0, + 0x7F73, 0xC151, 0x7F74, 0xEEBC, 0x7F75, 0xC152, 0x7F76, 0xC153, 0x7F77, 0xC154, 0x7F78, 0xC155, 0x7F79, 0xEEBE, 0x7F7A, 0xC156, + 0x7F7B, 0xC157, 0x7F7C, 0xC158, 0x7F7D, 0xC159, 0x7F7E, 0xEEC0, 0x7F7F, 0xC15A, 0x7F80, 0xC15B, 0x7F81, 0xEEBF, 0x7F82, 0xC15C, + 0x7F83, 0xC15D, 0x7F84, 0xC15E, 0x7F85, 0xC15F, 0x7F86, 0xC160, 0x7F87, 0xC161, 0x7F88, 0xC162, 0x7F89, 0xC163, 0x7F8A, 0xD1F2, + 0x7F8B, 0xC164, 0x7F8C, 0xC7BC, 0x7F8D, 0xC165, 0x7F8E, 0xC3C0, 0x7F8F, 0xC166, 0x7F90, 0xC167, 0x7F91, 0xC168, 0x7F92, 0xC169, + 0x7F93, 0xC16A, 0x7F94, 0xB8E1, 0x7F95, 0xC16B, 0x7F96, 0xC16C, 0x7F97, 0xC16D, 0x7F98, 0xC16E, 0x7F99, 0xC16F, 0x7F9A, 0xC1E7, + 0x7F9B, 0xC170, 0x7F9C, 0xC171, 0x7F9D, 0xF4C6, 0x7F9E, 0xD0DF, 0x7F9F, 0xF4C7, 0x7FA0, 0xC172, 0x7FA1, 0xCFDB, 0x7FA2, 0xC173, + 0x7FA3, 0xC174, 0x7FA4, 0xC8BA, 0x7FA5, 0xC175, 0x7FA6, 0xC176, 0x7FA7, 0xF4C8, 0x7FA8, 0xC177, 0x7FA9, 0xC178, 0x7FAA, 0xC179, + 0x7FAB, 0xC17A, 0x7FAC, 0xC17B, 0x7FAD, 0xC17C, 0x7FAE, 0xC17D, 0x7FAF, 0xF4C9, 0x7FB0, 0xF4CA, 0x7FB1, 0xC17E, 0x7FB2, 0xF4CB, + 0x7FB3, 0xC180, 0x7FB4, 0xC181, 0x7FB5, 0xC182, 0x7FB6, 0xC183, 0x7FB7, 0xC184, 0x7FB8, 0xD9FA, 0x7FB9, 0xB8FE, 0x7FBA, 0xC185, + 0x7FBB, 0xC186, 0x7FBC, 0xE5F1, 0x7FBD, 0xD3F0, 0x7FBE, 0xC187, 0x7FBF, 0xF4E0, 0x7FC0, 0xC188, 0x7FC1, 0xCECC, 0x7FC2, 0xC189, + 0x7FC3, 0xC18A, 0x7FC4, 0xC18B, 0x7FC5, 0xB3E1, 0x7FC6, 0xC18C, 0x7FC7, 0xC18D, 0x7FC8, 0xC18E, 0x7FC9, 0xC18F, 0x7FCA, 0xF1B4, + 0x7FCB, 0xC190, 0x7FCC, 0xD2EE, 0x7FCD, 0xC191, 0x7FCE, 0xF4E1, 0x7FCF, 0xC192, 0x7FD0, 0xC193, 0x7FD1, 0xC194, 0x7FD2, 0xC195, + 0x7FD3, 0xC196, 0x7FD4, 0xCFE8, 0x7FD5, 0xF4E2, 0x7FD6, 0xC197, 0x7FD7, 0xC198, 0x7FD8, 0xC7CC, 0x7FD9, 0xC199, 0x7FDA, 0xC19A, + 0x7FDB, 0xC19B, 0x7FDC, 0xC19C, 0x7FDD, 0xC19D, 0x7FDE, 0xC19E, 0x7FDF, 0xB5D4, 0x7FE0, 0xB4E4, 0x7FE1, 0xF4E4, 0x7FE2, 0xC19F, + 0x7FE3, 0xC1A0, 0x7FE4, 0xC240, 0x7FE5, 0xF4E3, 0x7FE6, 0xF4E5, 0x7FE7, 0xC241, 0x7FE8, 0xC242, 0x7FE9, 0xF4E6, 0x7FEA, 0xC243, + 0x7FEB, 0xC244, 0x7FEC, 0xC245, 0x7FED, 0xC246, 0x7FEE, 0xF4E7, 0x7FEF, 0xC247, 0x7FF0, 0xBAB2, 0x7FF1, 0xB0BF, 0x7FF2, 0xC248, + 0x7FF3, 0xF4E8, 0x7FF4, 0xC249, 0x7FF5, 0xC24A, 0x7FF6, 0xC24B, 0x7FF7, 0xC24C, 0x7FF8, 0xC24D, 0x7FF9, 0xC24E, 0x7FFA, 0xC24F, + 0x7FFB, 0xB7AD, 0x7FFC, 0xD2ED, 0x7FFD, 0xC250, 0x7FFE, 0xC251, 0x7FFF, 0xC252, 0x8000, 0xD2AB, 0x8001, 0xC0CF, 0x8002, 0xC253, + 0x8003, 0xBFBC, 0x8004, 0xEBA3, 0x8005, 0xD5DF, 0x8006, 0xEAC8, 0x8007, 0xC254, 0x8008, 0xC255, 0x8009, 0xC256, 0x800A, 0xC257, + 0x800B, 0xF1F3, 0x800C, 0xB6F8, 0x800D, 0xCBA3, 0x800E, 0xC258, 0x800F, 0xC259, 0x8010, 0xC4CD, 0x8011, 0xC25A, 0x8012, 0xF1E7, + 0x8013, 0xC25B, 0x8014, 0xF1E8, 0x8015, 0xB8FB, 0x8016, 0xF1E9, 0x8017, 0xBAC4, 0x8018, 0xD4C5, 0x8019, 0xB0D2, 0x801A, 0xC25C, + 0x801B, 0xC25D, 0x801C, 0xF1EA, 0x801D, 0xC25E, 0x801E, 0xC25F, 0x801F, 0xC260, 0x8020, 0xF1EB, 0x8021, 0xC261, 0x8022, 0xF1EC, + 0x8023, 0xC262, 0x8024, 0xC263, 0x8025, 0xF1ED, 0x8026, 0xF1EE, 0x8027, 0xF1EF, 0x8028, 0xF1F1, 0x8029, 0xF1F0, 0x802A, 0xC5D5, + 0x802B, 0xC264, 0x802C, 0xC265, 0x802D, 0xC266, 0x802E, 0xC267, 0x802F, 0xC268, 0x8030, 0xC269, 0x8031, 0xF1F2, 0x8032, 0xC26A, + 0x8033, 0xB6FA, 0x8034, 0xC26B, 0x8035, 0xF1F4, 0x8036, 0xD2AE, 0x8037, 0xDEC7, 0x8038, 0xCBCA, 0x8039, 0xC26C, 0x803A, 0xC26D, + 0x803B, 0xB3DC, 0x803C, 0xC26E, 0x803D, 0xB5A2, 0x803E, 0xC26F, 0x803F, 0xB9A2, 0x8040, 0xC270, 0x8041, 0xC271, 0x8042, 0xC4F4, + 0x8043, 0xF1F5, 0x8044, 0xC272, 0x8045, 0xC273, 0x8046, 0xF1F6, 0x8047, 0xC274, 0x8048, 0xC275, 0x8049, 0xC276, 0x804A, 0xC1C4, + 0x804B, 0xC1FB, 0x804C, 0xD6B0, 0x804D, 0xF1F7, 0x804E, 0xC277, 0x804F, 0xC278, 0x8050, 0xC279, 0x8051, 0xC27A, 0x8052, 0xF1F8, + 0x8053, 0xC27B, 0x8054, 0xC1AA, 0x8055, 0xC27C, 0x8056, 0xC27D, 0x8057, 0xC27E, 0x8058, 0xC6B8, 0x8059, 0xC280, 0x805A, 0xBEDB, + 0x805B, 0xC281, 0x805C, 0xC282, 0x805D, 0xC283, 0x805E, 0xC284, 0x805F, 0xC285, 0x8060, 0xC286, 0x8061, 0xC287, 0x8062, 0xC288, + 0x8063, 0xC289, 0x8064, 0xC28A, 0x8065, 0xC28B, 0x8066, 0xC28C, 0x8067, 0xC28D, 0x8068, 0xC28E, 0x8069, 0xF1F9, 0x806A, 0xB4CF, + 0x806B, 0xC28F, 0x806C, 0xC290, 0x806D, 0xC291, 0x806E, 0xC292, 0x806F, 0xC293, 0x8070, 0xC294, 0x8071, 0xF1FA, 0x8072, 0xC295, + 0x8073, 0xC296, 0x8074, 0xC297, 0x8075, 0xC298, 0x8076, 0xC299, 0x8077, 0xC29A, 0x8078, 0xC29B, 0x8079, 0xC29C, 0x807A, 0xC29D, + 0x807B, 0xC29E, 0x807C, 0xC29F, 0x807D, 0xC2A0, 0x807E, 0xC340, 0x807F, 0xEDB2, 0x8080, 0xEDB1, 0x8081, 0xC341, 0x8082, 0xC342, + 0x8083, 0xCBE0, 0x8084, 0xD2DE, 0x8085, 0xC343, 0x8086, 0xCBC1, 0x8087, 0xD5D8, 0x8088, 0xC344, 0x8089, 0xC8E2, 0x808A, 0xC345, + 0x808B, 0xC0DF, 0x808C, 0xBCA1, 0x808D, 0xC346, 0x808E, 0xC347, 0x808F, 0xC348, 0x8090, 0xC349, 0x8091, 0xC34A, 0x8092, 0xC34B, + 0x8093, 0xEBC1, 0x8094, 0xC34C, 0x8095, 0xC34D, 0x8096, 0xD0A4, 0x8097, 0xC34E, 0x8098, 0xD6E2, 0x8099, 0xC34F, 0x809A, 0xB6C7, + 0x809B, 0xB8D8, 0x809C, 0xEBC0, 0x809D, 0xB8CE, 0x809E, 0xC350, 0x809F, 0xEBBF, 0x80A0, 0xB3A6, 0x80A1, 0xB9C9, 0x80A2, 0xD6AB, + 0x80A3, 0xC351, 0x80A4, 0xB7F4, 0x80A5, 0xB7CA, 0x80A6, 0xC352, 0x80A7, 0xC353, 0x80A8, 0xC354, 0x80A9, 0xBCE7, 0x80AA, 0xB7BE, + 0x80AB, 0xEBC6, 0x80AC, 0xC355, 0x80AD, 0xEBC7, 0x80AE, 0xB0B9, 0x80AF, 0xBFCF, 0x80B0, 0xC356, 0x80B1, 0xEBC5, 0x80B2, 0xD3FD, + 0x80B3, 0xC357, 0x80B4, 0xEBC8, 0x80B5, 0xC358, 0x80B6, 0xC359, 0x80B7, 0xEBC9, 0x80B8, 0xC35A, 0x80B9, 0xC35B, 0x80BA, 0xB7CE, + 0x80BB, 0xC35C, 0x80BC, 0xEBC2, 0x80BD, 0xEBC4, 0x80BE, 0xC9F6, 0x80BF, 0xD6D7, 0x80C0, 0xD5CD, 0x80C1, 0xD0B2, 0x80C2, 0xEBCF, + 0x80C3, 0xCEB8, 0x80C4, 0xEBD0, 0x80C5, 0xC35D, 0x80C6, 0xB5A8, 0x80C7, 0xC35E, 0x80C8, 0xC35F, 0x80C9, 0xC360, 0x80CA, 0xC361, + 0x80CB, 0xC362, 0x80CC, 0xB1B3, 0x80CD, 0xEBD2, 0x80CE, 0xCCA5, 0x80CF, 0xC363, 0x80D0, 0xC364, 0x80D1, 0xC365, 0x80D2, 0xC366, + 0x80D3, 0xC367, 0x80D4, 0xC368, 0x80D5, 0xC369, 0x80D6, 0xC5D6, 0x80D7, 0xEBD3, 0x80D8, 0xC36A, 0x80D9, 0xEBD1, 0x80DA, 0xC5DF, + 0x80DB, 0xEBCE, 0x80DC, 0xCAA4, 0x80DD, 0xEBD5, 0x80DE, 0xB0FB, 0x80DF, 0xC36B, 0x80E0, 0xC36C, 0x80E1, 0xBAFA, 0x80E2, 0xC36D, + 0x80E3, 0xC36E, 0x80E4, 0xD8B7, 0x80E5, 0xF1E3, 0x80E6, 0xC36F, 0x80E7, 0xEBCA, 0x80E8, 0xEBCB, 0x80E9, 0xEBCC, 0x80EA, 0xEBCD, + 0x80EB, 0xEBD6, 0x80EC, 0xE6C0, 0x80ED, 0xEBD9, 0x80EE, 0xC370, 0x80EF, 0xBFE8, 0x80F0, 0xD2C8, 0x80F1, 0xEBD7, 0x80F2, 0xEBDC, + 0x80F3, 0xB8EC, 0x80F4, 0xEBD8, 0x80F5, 0xC371, 0x80F6, 0xBDBA, 0x80F7, 0xC372, 0x80F8, 0xD0D8, 0x80F9, 0xC373, 0x80FA, 0xB0B7, + 0x80FB, 0xC374, 0x80FC, 0xEBDD, 0x80FD, 0xC4DC, 0x80FE, 0xC375, 0x80FF, 0xC376, 0x8100, 0xC377, 0x8101, 0xC378, 0x8102, 0xD6AC, + 0x8103, 0xC379, 0x8104, 0xC37A, 0x8105, 0xC37B, 0x8106, 0xB4E0, 0x8107, 0xC37C, 0x8108, 0xC37D, 0x8109, 0xC2F6, 0x810A, 0xBCB9, + 0x810B, 0xC37E, 0x810C, 0xC380, 0x810D, 0xEBDA, 0x810E, 0xEBDB, 0x810F, 0xD4E0, 0x8110, 0xC6EA, 0x8111, 0xC4D4, 0x8112, 0xEBDF, + 0x8113, 0xC5A7, 0x8114, 0xD9F5, 0x8115, 0xC381, 0x8116, 0xB2B1, 0x8117, 0xC382, 0x8118, 0xEBE4, 0x8119, 0xC383, 0x811A, 0xBDC5, + 0x811B, 0xC384, 0x811C, 0xC385, 0x811D, 0xC386, 0x811E, 0xEBE2, 0x811F, 0xC387, 0x8120, 0xC388, 0x8121, 0xC389, 0x8122, 0xC38A, + 0x8123, 0xC38B, 0x8124, 0xC38C, 0x8125, 0xC38D, 0x8126, 0xC38E, 0x8127, 0xC38F, 0x8128, 0xC390, 0x8129, 0xC391, 0x812A, 0xC392, + 0x812B, 0xC393, 0x812C, 0xEBE3, 0x812D, 0xC394, 0x812E, 0xC395, 0x812F, 0xB8AC, 0x8130, 0xC396, 0x8131, 0xCDD1, 0x8132, 0xEBE5, + 0x8133, 0xC397, 0x8134, 0xC398, 0x8135, 0xC399, 0x8136, 0xEBE1, 0x8137, 0xC39A, 0x8138, 0xC1B3, 0x8139, 0xC39B, 0x813A, 0xC39C, + 0x813B, 0xC39D, 0x813C, 0xC39E, 0x813D, 0xC39F, 0x813E, 0xC6A2, 0x813F, 0xC3A0, 0x8140, 0xC440, 0x8141, 0xC441, 0x8142, 0xC442, + 0x8143, 0xC443, 0x8144, 0xC444, 0x8145, 0xC445, 0x8146, 0xCCF3, 0x8147, 0xC446, 0x8148, 0xEBE6, 0x8149, 0xC447, 0x814A, 0xC0B0, + 0x814B, 0xD2B8, 0x814C, 0xEBE7, 0x814D, 0xC448, 0x814E, 0xC449, 0x814F, 0xC44A, 0x8150, 0xB8AF, 0x8151, 0xB8AD, 0x8152, 0xC44B, + 0x8153, 0xEBE8, 0x8154, 0xC7BB, 0x8155, 0xCDF3, 0x8156, 0xC44C, 0x8157, 0xC44D, 0x8158, 0xC44E, 0x8159, 0xEBEA, 0x815A, 0xEBEB, + 0x815B, 0xC44F, 0x815C, 0xC450, 0x815D, 0xC451, 0x815E, 0xC452, 0x815F, 0xC453, 0x8160, 0xEBED, 0x8161, 0xC454, 0x8162, 0xC455, + 0x8163, 0xC456, 0x8164, 0xC457, 0x8165, 0xD0C8, 0x8166, 0xC458, 0x8167, 0xEBF2, 0x8168, 0xC459, 0x8169, 0xEBEE, 0x816A, 0xC45A, + 0x816B, 0xC45B, 0x816C, 0xC45C, 0x816D, 0xEBF1, 0x816E, 0xC8F9, 0x816F, 0xC45D, 0x8170, 0xD1FC, 0x8171, 0xEBEC, 0x8172, 0xC45E, + 0x8173, 0xC45F, 0x8174, 0xEBE9, 0x8175, 0xC460, 0x8176, 0xC461, 0x8177, 0xC462, 0x8178, 0xC463, 0x8179, 0xB8B9, 0x817A, 0xCFD9, + 0x817B, 0xC4E5, 0x817C, 0xEBEF, 0x817D, 0xEBF0, 0x817E, 0xCCDA, 0x817F, 0xCDC8, 0x8180, 0xB0F2, 0x8181, 0xC464, 0x8182, 0xEBF6, + 0x8183, 0xC465, 0x8184, 0xC466, 0x8185, 0xC467, 0x8186, 0xC468, 0x8187, 0xC469, 0x8188, 0xEBF5, 0x8189, 0xC46A, 0x818A, 0xB2B2, + 0x818B, 0xC46B, 0x818C, 0xC46C, 0x818D, 0xC46D, 0x818E, 0xC46E, 0x818F, 0xB8E0, 0x8190, 0xC46F, 0x8191, 0xEBF7, 0x8192, 0xC470, + 0x8193, 0xC471, 0x8194, 0xC472, 0x8195, 0xC473, 0x8196, 0xC474, 0x8197, 0xC475, 0x8198, 0xB1EC, 0x8199, 0xC476, 0x819A, 0xC477, + 0x819B, 0xCCC5, 0x819C, 0xC4A4, 0x819D, 0xCFA5, 0x819E, 0xC478, 0x819F, 0xC479, 0x81A0, 0xC47A, 0x81A1, 0xC47B, 0x81A2, 0xC47C, + 0x81A3, 0xEBF9, 0x81A4, 0xC47D, 0x81A5, 0xC47E, 0x81A6, 0xECA2, 0x81A7, 0xC480, 0x81A8, 0xC5F2, 0x81A9, 0xC481, 0x81AA, 0xEBFA, + 0x81AB, 0xC482, 0x81AC, 0xC483, 0x81AD, 0xC484, 0x81AE, 0xC485, 0x81AF, 0xC486, 0x81B0, 0xC487, 0x81B1, 0xC488, 0x81B2, 0xC489, + 0x81B3, 0xC9C5, 0x81B4, 0xC48A, 0x81B5, 0xC48B, 0x81B6, 0xC48C, 0x81B7, 0xC48D, 0x81B8, 0xC48E, 0x81B9, 0xC48F, 0x81BA, 0xE2DF, + 0x81BB, 0xEBFE, 0x81BC, 0xC490, 0x81BD, 0xC491, 0x81BE, 0xC492, 0x81BF, 0xC493, 0x81C0, 0xCDCE, 0x81C1, 0xECA1, 0x81C2, 0xB1DB, + 0x81C3, 0xD3B7, 0x81C4, 0xC494, 0x81C5, 0xC495, 0x81C6, 0xD2DC, 0x81C7, 0xC496, 0x81C8, 0xC497, 0x81C9, 0xC498, 0x81CA, 0xEBFD, + 0x81CB, 0xC499, 0x81CC, 0xEBFB, 0x81CD, 0xC49A, 0x81CE, 0xC49B, 0x81CF, 0xC49C, 0x81D0, 0xC49D, 0x81D1, 0xC49E, 0x81D2, 0xC49F, + 0x81D3, 0xC4A0, 0x81D4, 0xC540, 0x81D5, 0xC541, 0x81D6, 0xC542, 0x81D7, 0xC543, 0x81D8, 0xC544, 0x81D9, 0xC545, 0x81DA, 0xC546, + 0x81DB, 0xC547, 0x81DC, 0xC548, 0x81DD, 0xC549, 0x81DE, 0xC54A, 0x81DF, 0xC54B, 0x81E0, 0xC54C, 0x81E1, 0xC54D, 0x81E2, 0xC54E, + 0x81E3, 0xB3BC, 0x81E4, 0xC54F, 0x81E5, 0xC550, 0x81E6, 0xC551, 0x81E7, 0xEAB0, 0x81E8, 0xC552, 0x81E9, 0xC553, 0x81EA, 0xD7D4, + 0x81EB, 0xC554, 0x81EC, 0xF4AB, 0x81ED, 0xB3F4, 0x81EE, 0xC555, 0x81EF, 0xC556, 0x81F0, 0xC557, 0x81F1, 0xC558, 0x81F2, 0xC559, + 0x81F3, 0xD6C1, 0x81F4, 0xD6C2, 0x81F5, 0xC55A, 0x81F6, 0xC55B, 0x81F7, 0xC55C, 0x81F8, 0xC55D, 0x81F9, 0xC55E, 0x81FA, 0xC55F, + 0x81FB, 0xD5E9, 0x81FC, 0xBECA, 0x81FD, 0xC560, 0x81FE, 0xF4A7, 0x81FF, 0xC561, 0x8200, 0xD2A8, 0x8201, 0xF4A8, 0x8202, 0xF4A9, + 0x8203, 0xC562, 0x8204, 0xF4AA, 0x8205, 0xBECB, 0x8206, 0xD3DF, 0x8207, 0xC563, 0x8208, 0xC564, 0x8209, 0xC565, 0x820A, 0xC566, + 0x820B, 0xC567, 0x820C, 0xC9E0, 0x820D, 0xC9E1, 0x820E, 0xC568, 0x820F, 0xC569, 0x8210, 0xF3C2, 0x8211, 0xC56A, 0x8212, 0xCAE6, + 0x8213, 0xC56B, 0x8214, 0xCCF2, 0x8215, 0xC56C, 0x8216, 0xC56D, 0x8217, 0xC56E, 0x8218, 0xC56F, 0x8219, 0xC570, 0x821A, 0xC571, + 0x821B, 0xE2B6, 0x821C, 0xCBB4, 0x821D, 0xC572, 0x821E, 0xCEE8, 0x821F, 0xD6DB, 0x8220, 0xC573, 0x8221, 0xF4AD, 0x8222, 0xF4AE, + 0x8223, 0xF4AF, 0x8224, 0xC574, 0x8225, 0xC575, 0x8226, 0xC576, 0x8227, 0xC577, 0x8228, 0xF4B2, 0x8229, 0xC578, 0x822A, 0xBABD, + 0x822B, 0xF4B3, 0x822C, 0xB0E3, 0x822D, 0xF4B0, 0x822E, 0xC579, 0x822F, 0xF4B1, 0x8230, 0xBDA2, 0x8231, 0xB2D5, 0x8232, 0xC57A, + 0x8233, 0xF4B6, 0x8234, 0xF4B7, 0x8235, 0xB6E6, 0x8236, 0xB2B0, 0x8237, 0xCFCF, 0x8238, 0xF4B4, 0x8239, 0xB4AC, 0x823A, 0xC57B, + 0x823B, 0xF4B5, 0x823C, 0xC57C, 0x823D, 0xC57D, 0x823E, 0xF4B8, 0x823F, 0xC57E, 0x8240, 0xC580, 0x8241, 0xC581, 0x8242, 0xC582, + 0x8243, 0xC583, 0x8244, 0xF4B9, 0x8245, 0xC584, 0x8246, 0xC585, 0x8247, 0xCDA7, 0x8248, 0xC586, 0x8249, 0xF4BA, 0x824A, 0xC587, + 0x824B, 0xF4BB, 0x824C, 0xC588, 0x824D, 0xC589, 0x824E, 0xC58A, 0x824F, 0xF4BC, 0x8250, 0xC58B, 0x8251, 0xC58C, 0x8252, 0xC58D, + 0x8253, 0xC58E, 0x8254, 0xC58F, 0x8255, 0xC590, 0x8256, 0xC591, 0x8257, 0xC592, 0x8258, 0xCBD2, 0x8259, 0xC593, 0x825A, 0xF4BD, + 0x825B, 0xC594, 0x825C, 0xC595, 0x825D, 0xC596, 0x825E, 0xC597, 0x825F, 0xF4BE, 0x8260, 0xC598, 0x8261, 0xC599, 0x8262, 0xC59A, + 0x8263, 0xC59B, 0x8264, 0xC59C, 0x8265, 0xC59D, 0x8266, 0xC59E, 0x8267, 0xC59F, 0x8268, 0xF4BF, 0x8269, 0xC5A0, 0x826A, 0xC640, + 0x826B, 0xC641, 0x826C, 0xC642, 0x826D, 0xC643, 0x826E, 0xF4DE, 0x826F, 0xC1BC, 0x8270, 0xBCE8, 0x8271, 0xC644, 0x8272, 0xC9AB, + 0x8273, 0xD1DE, 0x8274, 0xE5F5, 0x8275, 0xC645, 0x8276, 0xC646, 0x8277, 0xC647, 0x8278, 0xC648, 0x8279, 0xDCB3, 0x827A, 0xD2D5, + 0x827B, 0xC649, 0x827C, 0xC64A, 0x827D, 0xDCB4, 0x827E, 0xB0AC, 0x827F, 0xDCB5, 0x8280, 0xC64B, 0x8281, 0xC64C, 0x8282, 0xBDDA, + 0x8283, 0xC64D, 0x8284, 0xDCB9, 0x8285, 0xC64E, 0x8286, 0xC64F, 0x8287, 0xC650, 0x8288, 0xD8C2, 0x8289, 0xC651, 0x828A, 0xDCB7, + 0x828B, 0xD3F3, 0x828C, 0xC652, 0x828D, 0xC9D6, 0x828E, 0xDCBA, 0x828F, 0xDCB6, 0x8290, 0xC653, 0x8291, 0xDCBB, 0x8292, 0xC3A2, + 0x8293, 0xC654, 0x8294, 0xC655, 0x8295, 0xC656, 0x8296, 0xC657, 0x8297, 0xDCBC, 0x8298, 0xDCC5, 0x8299, 0xDCBD, 0x829A, 0xC658, + 0x829B, 0xC659, 0x829C, 0xCEDF, 0x829D, 0xD6A5, 0x829E, 0xC65A, 0x829F, 0xDCCF, 0x82A0, 0xC65B, 0x82A1, 0xDCCD, 0x82A2, 0xC65C, + 0x82A3, 0xC65D, 0x82A4, 0xDCD2, 0x82A5, 0xBDE6, 0x82A6, 0xC2AB, 0x82A7, 0xC65E, 0x82A8, 0xDCB8, 0x82A9, 0xDCCB, 0x82AA, 0xDCCE, + 0x82AB, 0xDCBE, 0x82AC, 0xB7D2, 0x82AD, 0xB0C5, 0x82AE, 0xDCC7, 0x82AF, 0xD0BE, 0x82B0, 0xDCC1, 0x82B1, 0xBBA8, 0x82B2, 0xC65F, + 0x82B3, 0xB7BC, 0x82B4, 0xDCCC, 0x82B5, 0xC660, 0x82B6, 0xC661, 0x82B7, 0xDCC6, 0x82B8, 0xDCBF, 0x82B9, 0xC7DB, 0x82BA, 0xC662, + 0x82BB, 0xC663, 0x82BC, 0xC664, 0x82BD, 0xD1BF, 0x82BE, 0xDCC0, 0x82BF, 0xC665, 0x82C0, 0xC666, 0x82C1, 0xDCCA, 0x82C2, 0xC667, + 0x82C3, 0xC668, 0x82C4, 0xDCD0, 0x82C5, 0xC669, 0x82C6, 0xC66A, 0x82C7, 0xCEAD, 0x82C8, 0xDCC2, 0x82C9, 0xC66B, 0x82CA, 0xDCC3, + 0x82CB, 0xDCC8, 0x82CC, 0xDCC9, 0x82CD, 0xB2D4, 0x82CE, 0xDCD1, 0x82CF, 0xCBD5, 0x82D0, 0xC66C, 0x82D1, 0xD4B7, 0x82D2, 0xDCDB, + 0x82D3, 0xDCDF, 0x82D4, 0xCCA6, 0x82D5, 0xDCE6, 0x82D6, 0xC66D, 0x82D7, 0xC3E7, 0x82D8, 0xDCDC, 0x82D9, 0xC66E, 0x82DA, 0xC66F, + 0x82DB, 0xBFC1, 0x82DC, 0xDCD9, 0x82DD, 0xC670, 0x82DE, 0xB0FA, 0x82DF, 0xB9B6, 0x82E0, 0xDCE5, 0x82E1, 0xDCD3, 0x82E2, 0xC671, + 0x82E3, 0xDCC4, 0x82E4, 0xDCD6, 0x82E5, 0xC8F4, 0x82E6, 0xBFE0, 0x82E7, 0xC672, 0x82E8, 0xC673, 0x82E9, 0xC674, 0x82EA, 0xC675, + 0x82EB, 0xC9BB, 0x82EC, 0xC676, 0x82ED, 0xC677, 0x82EE, 0xC678, 0x82EF, 0xB1BD, 0x82F0, 0xC679, 0x82F1, 0xD3A2, 0x82F2, 0xC67A, + 0x82F3, 0xC67B, 0x82F4, 0xDCDA, 0x82F5, 0xC67C, 0x82F6, 0xC67D, 0x82F7, 0xDCD5, 0x82F8, 0xC67E, 0x82F9, 0xC6BB, 0x82FA, 0xC680, + 0x82FB, 0xDCDE, 0x82FC, 0xC681, 0x82FD, 0xC682, 0x82FE, 0xC683, 0x82FF, 0xC684, 0x8300, 0xC685, 0x8301, 0xD7C2, 0x8302, 0xC3AF, + 0x8303, 0xB7B6, 0x8304, 0xC7D1, 0x8305, 0xC3A9, 0x8306, 0xDCE2, 0x8307, 0xDCD8, 0x8308, 0xDCEB, 0x8309, 0xDCD4, 0x830A, 0xC686, + 0x830B, 0xC687, 0x830C, 0xDCDD, 0x830D, 0xC688, 0x830E, 0xBEA5, 0x830F, 0xDCD7, 0x8310, 0xC689, 0x8311, 0xDCE0, 0x8312, 0xC68A, + 0x8313, 0xC68B, 0x8314, 0xDCE3, 0x8315, 0xDCE4, 0x8316, 0xC68C, 0x8317, 0xDCF8, 0x8318, 0xC68D, 0x8319, 0xC68E, 0x831A, 0xDCE1, + 0x831B, 0xDDA2, 0x831C, 0xDCE7, 0x831D, 0xC68F, 0x831E, 0xC690, 0x831F, 0xC691, 0x8320, 0xC692, 0x8321, 0xC693, 0x8322, 0xC694, + 0x8323, 0xC695, 0x8324, 0xC696, 0x8325, 0xC697, 0x8326, 0xC698, 0x8327, 0xBCEB, 0x8328, 0xB4C4, 0x8329, 0xC699, 0x832A, 0xC69A, + 0x832B, 0xC3A3, 0x832C, 0xB2E7, 0x832D, 0xDCFA, 0x832E, 0xC69B, 0x832F, 0xDCF2, 0x8330, 0xC69C, 0x8331, 0xDCEF, 0x8332, 0xC69D, + 0x8333, 0xDCFC, 0x8334, 0xDCEE, 0x8335, 0xD2F0, 0x8336, 0xB2E8, 0x8337, 0xC69E, 0x8338, 0xC8D7, 0x8339, 0xC8E3, 0x833A, 0xDCFB, + 0x833B, 0xC69F, 0x833C, 0xDCED, 0x833D, 0xC6A0, 0x833E, 0xC740, 0x833F, 0xC741, 0x8340, 0xDCF7, 0x8341, 0xC742, 0x8342, 0xC743, + 0x8343, 0xDCF5, 0x8344, 0xC744, 0x8345, 0xC745, 0x8346, 0xBEA3, 0x8347, 0xDCF4, 0x8348, 0xC746, 0x8349, 0xB2DD, 0x834A, 0xC747, + 0x834B, 0xC748, 0x834C, 0xC749, 0x834D, 0xC74A, 0x834E, 0xC74B, 0x834F, 0xDCF3, 0x8350, 0xBCF6, 0x8351, 0xDCE8, 0x8352, 0xBBC4, + 0x8353, 0xC74C, 0x8354, 0xC0F3, 0x8355, 0xC74D, 0x8356, 0xC74E, 0x8357, 0xC74F, 0x8358, 0xC750, 0x8359, 0xC751, 0x835A, 0xBCD4, + 0x835B, 0xDCE9, 0x835C, 0xDCEA, 0x835D, 0xC752, 0x835E, 0xDCF1, 0x835F, 0xDCF6, 0x8360, 0xDCF9, 0x8361, 0xB5B4, 0x8362, 0xC753, + 0x8363, 0xC8D9, 0x8364, 0xBBE7, 0x8365, 0xDCFE, 0x8366, 0xDCFD, 0x8367, 0xD3AB, 0x8368, 0xDDA1, 0x8369, 0xDDA3, 0x836A, 0xDDA5, + 0x836B, 0xD2F1, 0x836C, 0xDDA4, 0x836D, 0xDDA6, 0x836E, 0xDDA7, 0x836F, 0xD2A9, 0x8370, 0xC754, 0x8371, 0xC755, 0x8372, 0xC756, + 0x8373, 0xC757, 0x8374, 0xC758, 0x8375, 0xC759, 0x8376, 0xC75A, 0x8377, 0xBAC9, 0x8378, 0xDDA9, 0x8379, 0xC75B, 0x837A, 0xC75C, + 0x837B, 0xDDB6, 0x837C, 0xDDB1, 0x837D, 0xDDB4, 0x837E, 0xC75D, 0x837F, 0xC75E, 0x8380, 0xC75F, 0x8381, 0xC760, 0x8382, 0xC761, + 0x8383, 0xC762, 0x8384, 0xC763, 0x8385, 0xDDB0, 0x8386, 0xC6CE, 0x8387, 0xC764, 0x8388, 0xC765, 0x8389, 0xC0F2, 0x838A, 0xC766, + 0x838B, 0xC767, 0x838C, 0xC768, 0x838D, 0xC769, 0x838E, 0xC9AF, 0x838F, 0xC76A, 0x8390, 0xC76B, 0x8391, 0xC76C, 0x8392, 0xDCEC, + 0x8393, 0xDDAE, 0x8394, 0xC76D, 0x8395, 0xC76E, 0x8396, 0xC76F, 0x8397, 0xC770, 0x8398, 0xDDB7, 0x8399, 0xC771, 0x839A, 0xC772, + 0x839B, 0xDCF0, 0x839C, 0xDDAF, 0x839D, 0xC773, 0x839E, 0xDDB8, 0x839F, 0xC774, 0x83A0, 0xDDAC, 0x83A1, 0xC775, 0x83A2, 0xC776, + 0x83A3, 0xC777, 0x83A4, 0xC778, 0x83A5, 0xC779, 0x83A6, 0xC77A, 0x83A7, 0xC77B, 0x83A8, 0xDDB9, 0x83A9, 0xDDB3, 0x83AA, 0xDDAD, + 0x83AB, 0xC4AA, 0x83AC, 0xC77C, 0x83AD, 0xC77D, 0x83AE, 0xC77E, 0x83AF, 0xC780, 0x83B0, 0xDDA8, 0x83B1, 0xC0B3, 0x83B2, 0xC1AB, + 0x83B3, 0xDDAA, 0x83B4, 0xDDAB, 0x83B5, 0xC781, 0x83B6, 0xDDB2, 0x83B7, 0xBBF1, 0x83B8, 0xDDB5, 0x83B9, 0xD3A8, 0x83BA, 0xDDBA, + 0x83BB, 0xC782, 0x83BC, 0xDDBB, 0x83BD, 0xC3A7, 0x83BE, 0xC783, 0x83BF, 0xC784, 0x83C0, 0xDDD2, 0x83C1, 0xDDBC, 0x83C2, 0xC785, + 0x83C3, 0xC786, 0x83C4, 0xC787, 0x83C5, 0xDDD1, 0x83C6, 0xC788, 0x83C7, 0xB9BD, 0x83C8, 0xC789, 0x83C9, 0xC78A, 0x83CA, 0xBED5, + 0x83CB, 0xC78B, 0x83CC, 0xBEFA, 0x83CD, 0xC78C, 0x83CE, 0xC78D, 0x83CF, 0xBACA, 0x83D0, 0xC78E, 0x83D1, 0xC78F, 0x83D2, 0xC790, + 0x83D3, 0xC791, 0x83D4, 0xDDCA, 0x83D5, 0xC792, 0x83D6, 0xDDC5, 0x83D7, 0xC793, 0x83D8, 0xDDBF, 0x83D9, 0xC794, 0x83DA, 0xC795, + 0x83DB, 0xC796, 0x83DC, 0xB2CB, 0x83DD, 0xDDC3, 0x83DE, 0xC797, 0x83DF, 0xDDCB, 0x83E0, 0xB2A4, 0x83E1, 0xDDD5, 0x83E2, 0xC798, + 0x83E3, 0xC799, 0x83E4, 0xC79A, 0x83E5, 0xDDBE, 0x83E6, 0xC79B, 0x83E7, 0xC79C, 0x83E8, 0xC79D, 0x83E9, 0xC6D0, 0x83EA, 0xDDD0, + 0x83EB, 0xC79E, 0x83EC, 0xC79F, 0x83ED, 0xC7A0, 0x83EE, 0xC840, 0x83EF, 0xC841, 0x83F0, 0xDDD4, 0x83F1, 0xC1E2, 0x83F2, 0xB7C6, + 0x83F3, 0xC842, 0x83F4, 0xC843, 0x83F5, 0xC844, 0x83F6, 0xC845, 0x83F7, 0xC846, 0x83F8, 0xDDCE, 0x83F9, 0xDDCF, 0x83FA, 0xC847, + 0x83FB, 0xC848, 0x83FC, 0xC849, 0x83FD, 0xDDC4, 0x83FE, 0xC84A, 0x83FF, 0xC84B, 0x8400, 0xC84C, 0x8401, 0xDDBD, 0x8402, 0xC84D, + 0x8403, 0xDDCD, 0x8404, 0xCCD1, 0x8405, 0xC84E, 0x8406, 0xDDC9, 0x8407, 0xC84F, 0x8408, 0xC850, 0x8409, 0xC851, 0x840A, 0xC852, + 0x840B, 0xDDC2, 0x840C, 0xC3C8, 0x840D, 0xC6BC, 0x840E, 0xCEAE, 0x840F, 0xDDCC, 0x8410, 0xC853, 0x8411, 0xDDC8, 0x8412, 0xC854, + 0x8413, 0xC855, 0x8414, 0xC856, 0x8415, 0xC857, 0x8416, 0xC858, 0x8417, 0xC859, 0x8418, 0xDDC1, 0x8419, 0xC85A, 0x841A, 0xC85B, + 0x841B, 0xC85C, 0x841C, 0xDDC6, 0x841D, 0xC2DC, 0x841E, 0xC85D, 0x841F, 0xC85E, 0x8420, 0xC85F, 0x8421, 0xC860, 0x8422, 0xC861, + 0x8423, 0xC862, 0x8424, 0xD3A9, 0x8425, 0xD3AA, 0x8426, 0xDDD3, 0x8427, 0xCFF4, 0x8428, 0xC8F8, 0x8429, 0xC863, 0x842A, 0xC864, + 0x842B, 0xC865, 0x842C, 0xC866, 0x842D, 0xC867, 0x842E, 0xC868, 0x842F, 0xC869, 0x8430, 0xC86A, 0x8431, 0xDDE6, 0x8432, 0xC86B, + 0x8433, 0xC86C, 0x8434, 0xC86D, 0x8435, 0xC86E, 0x8436, 0xC86F, 0x8437, 0xC870, 0x8438, 0xDDC7, 0x8439, 0xC871, 0x843A, 0xC872, + 0x843B, 0xC873, 0x843C, 0xDDE0, 0x843D, 0xC2E4, 0x843E, 0xC874, 0x843F, 0xC875, 0x8440, 0xC876, 0x8441, 0xC877, 0x8442, 0xC878, + 0x8443, 0xC879, 0x8444, 0xC87A, 0x8445, 0xC87B, 0x8446, 0xDDE1, 0x8447, 0xC87C, 0x8448, 0xC87D, 0x8449, 0xC87E, 0x844A, 0xC880, + 0x844B, 0xC881, 0x844C, 0xC882, 0x844D, 0xC883, 0x844E, 0xC884, 0x844F, 0xC885, 0x8450, 0xC886, 0x8451, 0xDDD7, 0x8452, 0xC887, + 0x8453, 0xC888, 0x8454, 0xC889, 0x8455, 0xC88A, 0x8456, 0xC88B, 0x8457, 0xD6F8, 0x8458, 0xC88C, 0x8459, 0xDDD9, 0x845A, 0xDDD8, + 0x845B, 0xB8F0, 0x845C, 0xDDD6, 0x845D, 0xC88D, 0x845E, 0xC88E, 0x845F, 0xC88F, 0x8460, 0xC890, 0x8461, 0xC6CF, 0x8462, 0xC891, + 0x8463, 0xB6AD, 0x8464, 0xC892, 0x8465, 0xC893, 0x8466, 0xC894, 0x8467, 0xC895, 0x8468, 0xC896, 0x8469, 0xDDE2, 0x846A, 0xC897, + 0x846B, 0xBAF9, 0x846C, 0xD4E1, 0x846D, 0xDDE7, 0x846E, 0xC898, 0x846F, 0xC899, 0x8470, 0xC89A, 0x8471, 0xB4D0, 0x8472, 0xC89B, + 0x8473, 0xDDDA, 0x8474, 0xC89C, 0x8475, 0xBFFB, 0x8476, 0xDDE3, 0x8477, 0xC89D, 0x8478, 0xDDDF, 0x8479, 0xC89E, 0x847A, 0xDDDD, + 0x847B, 0xC89F, 0x847C, 0xC8A0, 0x847D, 0xC940, 0x847E, 0xC941, 0x847F, 0xC942, 0x8480, 0xC943, 0x8481, 0xC944, 0x8482, 0xB5D9, + 0x8483, 0xC945, 0x8484, 0xC946, 0x8485, 0xC947, 0x8486, 0xC948, 0x8487, 0xDDDB, 0x8488, 0xDDDC, 0x8489, 0xDDDE, 0x848A, 0xC949, + 0x848B, 0xBDAF, 0x848C, 0xDDE4, 0x848D, 0xC94A, 0x848E, 0xDDE5, 0x848F, 0xC94B, 0x8490, 0xC94C, 0x8491, 0xC94D, 0x8492, 0xC94E, + 0x8493, 0xC94F, 0x8494, 0xC950, 0x8495, 0xC951, 0x8496, 0xC952, 0x8497, 0xDDF5, 0x8498, 0xC953, 0x8499, 0xC3C9, 0x849A, 0xC954, + 0x849B, 0xC955, 0x849C, 0xCBE2, 0x849D, 0xC956, 0x849E, 0xC957, 0x849F, 0xC958, 0x84A0, 0xC959, 0x84A1, 0xDDF2, 0x84A2, 0xC95A, + 0x84A3, 0xC95B, 0x84A4, 0xC95C, 0x84A5, 0xC95D, 0x84A6, 0xC95E, 0x84A7, 0xC95F, 0x84A8, 0xC960, 0x84A9, 0xC961, 0x84AA, 0xC962, + 0x84AB, 0xC963, 0x84AC, 0xC964, 0x84AD, 0xC965, 0x84AE, 0xC966, 0x84AF, 0xD8E1, 0x84B0, 0xC967, 0x84B1, 0xC968, 0x84B2, 0xC6D1, + 0x84B3, 0xC969, 0x84B4, 0xDDF4, 0x84B5, 0xC96A, 0x84B6, 0xC96B, 0x84B7, 0xC96C, 0x84B8, 0xD5F4, 0x84B9, 0xDDF3, 0x84BA, 0xDDF0, + 0x84BB, 0xC96D, 0x84BC, 0xC96E, 0x84BD, 0xDDEC, 0x84BE, 0xC96F, 0x84BF, 0xDDEF, 0x84C0, 0xC970, 0x84C1, 0xDDE8, 0x84C2, 0xC971, + 0x84C3, 0xC972, 0x84C4, 0xD0EE, 0x84C5, 0xC973, 0x84C6, 0xC974, 0x84C7, 0xC975, 0x84C8, 0xC976, 0x84C9, 0xC8D8, 0x84CA, 0xDDEE, + 0x84CB, 0xC977, 0x84CC, 0xC978, 0x84CD, 0xDDE9, 0x84CE, 0xC979, 0x84CF, 0xC97A, 0x84D0, 0xDDEA, 0x84D1, 0xCBF2, 0x84D2, 0xC97B, + 0x84D3, 0xDDED, 0x84D4, 0xC97C, 0x84D5, 0xC97D, 0x84D6, 0xB1CD, 0x84D7, 0xC97E, 0x84D8, 0xC980, 0x84D9, 0xC981, 0x84DA, 0xC982, + 0x84DB, 0xC983, 0x84DC, 0xC984, 0x84DD, 0xC0B6, 0x84DE, 0xC985, 0x84DF, 0xBCBB, 0x84E0, 0xDDF1, 0x84E1, 0xC986, 0x84E2, 0xC987, + 0x84E3, 0xDDF7, 0x84E4, 0xC988, 0x84E5, 0xDDF6, 0x84E6, 0xDDEB, 0x84E7, 0xC989, 0x84E8, 0xC98A, 0x84E9, 0xC98B, 0x84EA, 0xC98C, + 0x84EB, 0xC98D, 0x84EC, 0xC5EE, 0x84ED, 0xC98E, 0x84EE, 0xC98F, 0x84EF, 0xC990, 0x84F0, 0xDDFB, 0x84F1, 0xC991, 0x84F2, 0xC992, + 0x84F3, 0xC993, 0x84F4, 0xC994, 0x84F5, 0xC995, 0x84F6, 0xC996, 0x84F7, 0xC997, 0x84F8, 0xC998, 0x84F9, 0xC999, 0x84FA, 0xC99A, + 0x84FB, 0xC99B, 0x84FC, 0xDEA4, 0x84FD, 0xC99C, 0x84FE, 0xC99D, 0x84FF, 0xDEA3, 0x8500, 0xC99E, 0x8501, 0xC99F, 0x8502, 0xC9A0, + 0x8503, 0xCA40, 0x8504, 0xCA41, 0x8505, 0xCA42, 0x8506, 0xCA43, 0x8507, 0xCA44, 0x8508, 0xCA45, 0x8509, 0xCA46, 0x850A, 0xCA47, + 0x850B, 0xCA48, 0x850C, 0xDDF8, 0x850D, 0xCA49, 0x850E, 0xCA4A, 0x850F, 0xCA4B, 0x8510, 0xCA4C, 0x8511, 0xC3EF, 0x8512, 0xCA4D, + 0x8513, 0xC2FB, 0x8514, 0xCA4E, 0x8515, 0xCA4F, 0x8516, 0xCA50, 0x8517, 0xD5E1, 0x8518, 0xCA51, 0x8519, 0xCA52, 0x851A, 0xCEB5, + 0x851B, 0xCA53, 0x851C, 0xCA54, 0x851D, 0xCA55, 0x851E, 0xCA56, 0x851F, 0xDDFD, 0x8520, 0xCA57, 0x8521, 0xB2CC, 0x8522, 0xCA58, + 0x8523, 0xCA59, 0x8524, 0xCA5A, 0x8525, 0xCA5B, 0x8526, 0xCA5C, 0x8527, 0xCA5D, 0x8528, 0xCA5E, 0x8529, 0xCA5F, 0x852A, 0xCA60, + 0x852B, 0xC4E8, 0x852C, 0xCADF, 0x852D, 0xCA61, 0x852E, 0xCA62, 0x852F, 0xCA63, 0x8530, 0xCA64, 0x8531, 0xCA65, 0x8532, 0xCA66, + 0x8533, 0xCA67, 0x8534, 0xCA68, 0x8535, 0xCA69, 0x8536, 0xCA6A, 0x8537, 0xC7BE, 0x8538, 0xDDFA, 0x8539, 0xDDFC, 0x853A, 0xDDFE, + 0x853B, 0xDEA2, 0x853C, 0xB0AA, 0x853D, 0xB1CE, 0x853E, 0xCA6B, 0x853F, 0xCA6C, 0x8540, 0xCA6D, 0x8541, 0xCA6E, 0x8542, 0xCA6F, + 0x8543, 0xDEAC, 0x8544, 0xCA70, 0x8545, 0xCA71, 0x8546, 0xCA72, 0x8547, 0xCA73, 0x8548, 0xDEA6, 0x8549, 0xBDB6, 0x854A, 0xC8EF, + 0x854B, 0xCA74, 0x854C, 0xCA75, 0x854D, 0xCA76, 0x854E, 0xCA77, 0x854F, 0xCA78, 0x8550, 0xCA79, 0x8551, 0xCA7A, 0x8552, 0xCA7B, + 0x8553, 0xCA7C, 0x8554, 0xCA7D, 0x8555, 0xCA7E, 0x8556, 0xDEA1, 0x8557, 0xCA80, 0x8558, 0xCA81, 0x8559, 0xDEA5, 0x855A, 0xCA82, + 0x855B, 0xCA83, 0x855C, 0xCA84, 0x855D, 0xCA85, 0x855E, 0xDEA9, 0x855F, 0xCA86, 0x8560, 0xCA87, 0x8561, 0xCA88, 0x8562, 0xCA89, + 0x8563, 0xCA8A, 0x8564, 0xDEA8, 0x8565, 0xCA8B, 0x8566, 0xCA8C, 0x8567, 0xCA8D, 0x8568, 0xDEA7, 0x8569, 0xCA8E, 0x856A, 0xCA8F, + 0x856B, 0xCA90, 0x856C, 0xCA91, 0x856D, 0xCA92, 0x856E, 0xCA93, 0x856F, 0xCA94, 0x8570, 0xCA95, 0x8571, 0xCA96, 0x8572, 0xDEAD, + 0x8573, 0xCA97, 0x8574, 0xD4CC, 0x8575, 0xCA98, 0x8576, 0xCA99, 0x8577, 0xCA9A, 0x8578, 0xCA9B, 0x8579, 0xDEB3, 0x857A, 0xDEAA, + 0x857B, 0xDEAE, 0x857C, 0xCA9C, 0x857D, 0xCA9D, 0x857E, 0xC0D9, 0x857F, 0xCA9E, 0x8580, 0xCA9F, 0x8581, 0xCAA0, 0x8582, 0xCB40, + 0x8583, 0xCB41, 0x8584, 0xB1A1, 0x8585, 0xDEB6, 0x8586, 0xCB42, 0x8587, 0xDEB1, 0x8588, 0xCB43, 0x8589, 0xCB44, 0x858A, 0xCB45, + 0x858B, 0xCB46, 0x858C, 0xCB47, 0x858D, 0xCB48, 0x858E, 0xCB49, 0x858F, 0xDEB2, 0x8590, 0xCB4A, 0x8591, 0xCB4B, 0x8592, 0xCB4C, + 0x8593, 0xCB4D, 0x8594, 0xCB4E, 0x8595, 0xCB4F, 0x8596, 0xCB50, 0x8597, 0xCB51, 0x8598, 0xCB52, 0x8599, 0xCB53, 0x859A, 0xCB54, + 0x859B, 0xD1A6, 0x859C, 0xDEB5, 0x859D, 0xCB55, 0x859E, 0xCB56, 0x859F, 0xCB57, 0x85A0, 0xCB58, 0x85A1, 0xCB59, 0x85A2, 0xCB5A, + 0x85A3, 0xCB5B, 0x85A4, 0xDEAF, 0x85A5, 0xCB5C, 0x85A6, 0xCB5D, 0x85A7, 0xCB5E, 0x85A8, 0xDEB0, 0x85A9, 0xCB5F, 0x85AA, 0xD0BD, + 0x85AB, 0xCB60, 0x85AC, 0xCB61, 0x85AD, 0xCB62, 0x85AE, 0xDEB4, 0x85AF, 0xCAED, 0x85B0, 0xDEB9, 0x85B1, 0xCB63, 0x85B2, 0xCB64, + 0x85B3, 0xCB65, 0x85B4, 0xCB66, 0x85B5, 0xCB67, 0x85B6, 0xCB68, 0x85B7, 0xDEB8, 0x85B8, 0xCB69, 0x85B9, 0xDEB7, 0x85BA, 0xCB6A, + 0x85BB, 0xCB6B, 0x85BC, 0xCB6C, 0x85BD, 0xCB6D, 0x85BE, 0xCB6E, 0x85BF, 0xCB6F, 0x85C0, 0xCB70, 0x85C1, 0xDEBB, 0x85C2, 0xCB71, + 0x85C3, 0xCB72, 0x85C4, 0xCB73, 0x85C5, 0xCB74, 0x85C6, 0xCB75, 0x85C7, 0xCB76, 0x85C8, 0xCB77, 0x85C9, 0xBDE5, 0x85CA, 0xCB78, + 0x85CB, 0xCB79, 0x85CC, 0xCB7A, 0x85CD, 0xCB7B, 0x85CE, 0xCB7C, 0x85CF, 0xB2D8, 0x85D0, 0xC3EA, 0x85D1, 0xCB7D, 0x85D2, 0xCB7E, + 0x85D3, 0xDEBA, 0x85D4, 0xCB80, 0x85D5, 0xC5BA, 0x85D6, 0xCB81, 0x85D7, 0xCB82, 0x85D8, 0xCB83, 0x85D9, 0xCB84, 0x85DA, 0xCB85, + 0x85DB, 0xCB86, 0x85DC, 0xDEBC, 0x85DD, 0xCB87, 0x85DE, 0xCB88, 0x85DF, 0xCB89, 0x85E0, 0xCB8A, 0x85E1, 0xCB8B, 0x85E2, 0xCB8C, + 0x85E3, 0xCB8D, 0x85E4, 0xCCD9, 0x85E5, 0xCB8E, 0x85E6, 0xCB8F, 0x85E7, 0xCB90, 0x85E8, 0xCB91, 0x85E9, 0xB7AA, 0x85EA, 0xCB92, + 0x85EB, 0xCB93, 0x85EC, 0xCB94, 0x85ED, 0xCB95, 0x85EE, 0xCB96, 0x85EF, 0xCB97, 0x85F0, 0xCB98, 0x85F1, 0xCB99, 0x85F2, 0xCB9A, + 0x85F3, 0xCB9B, 0x85F4, 0xCB9C, 0x85F5, 0xCB9D, 0x85F6, 0xCB9E, 0x85F7, 0xCB9F, 0x85F8, 0xCBA0, 0x85F9, 0xCC40, 0x85FA, 0xCC41, + 0x85FB, 0xD4E5, 0x85FC, 0xCC42, 0x85FD, 0xCC43, 0x85FE, 0xCC44, 0x85FF, 0xDEBD, 0x8600, 0xCC45, 0x8601, 0xCC46, 0x8602, 0xCC47, + 0x8603, 0xCC48, 0x8604, 0xCC49, 0x8605, 0xDEBF, 0x8606, 0xCC4A, 0x8607, 0xCC4B, 0x8608, 0xCC4C, 0x8609, 0xCC4D, 0x860A, 0xCC4E, + 0x860B, 0xCC4F, 0x860C, 0xCC50, 0x860D, 0xCC51, 0x860E, 0xCC52, 0x860F, 0xCC53, 0x8610, 0xCC54, 0x8611, 0xC4A2, 0x8612, 0xCC55, + 0x8613, 0xCC56, 0x8614, 0xCC57, 0x8615, 0xCC58, 0x8616, 0xDEC1, 0x8617, 0xCC59, 0x8618, 0xCC5A, 0x8619, 0xCC5B, 0x861A, 0xCC5C, + 0x861B, 0xCC5D, 0x861C, 0xCC5E, 0x861D, 0xCC5F, 0x861E, 0xCC60, 0x861F, 0xCC61, 0x8620, 0xCC62, 0x8621, 0xCC63, 0x8622, 0xCC64, + 0x8623, 0xCC65, 0x8624, 0xCC66, 0x8625, 0xCC67, 0x8626, 0xCC68, 0x8627, 0xDEBE, 0x8628, 0xCC69, 0x8629, 0xDEC0, 0x862A, 0xCC6A, + 0x862B, 0xCC6B, 0x862C, 0xCC6C, 0x862D, 0xCC6D, 0x862E, 0xCC6E, 0x862F, 0xCC6F, 0x8630, 0xCC70, 0x8631, 0xCC71, 0x8632, 0xCC72, + 0x8633, 0xCC73, 0x8634, 0xCC74, 0x8635, 0xCC75, 0x8636, 0xCC76, 0x8637, 0xCC77, 0x8638, 0xD5BA, 0x8639, 0xCC78, 0x863A, 0xCC79, + 0x863B, 0xCC7A, 0x863C, 0xDEC2, 0x863D, 0xCC7B, 0x863E, 0xCC7C, 0x863F, 0xCC7D, 0x8640, 0xCC7E, 0x8641, 0xCC80, 0x8642, 0xCC81, + 0x8643, 0xCC82, 0x8644, 0xCC83, 0x8645, 0xCC84, 0x8646, 0xCC85, 0x8647, 0xCC86, 0x8648, 0xCC87, 0x8649, 0xCC88, 0x864A, 0xCC89, + 0x864B, 0xCC8A, 0x864C, 0xCC8B, 0x864D, 0xF2AE, 0x864E, 0xBBA2, 0x864F, 0xC2B2, 0x8650, 0xC5B0, 0x8651, 0xC2C7, 0x8652, 0xCC8C, + 0x8653, 0xCC8D, 0x8654, 0xF2AF, 0x8655, 0xCC8E, 0x8656, 0xCC8F, 0x8657, 0xCC90, 0x8658, 0xCC91, 0x8659, 0xCC92, 0x865A, 0xD0E9, + 0x865B, 0xCC93, 0x865C, 0xCC94, 0x865D, 0xCC95, 0x865E, 0xD3DD, 0x865F, 0xCC96, 0x8660, 0xCC97, 0x8661, 0xCC98, 0x8662, 0xEBBD, + 0x8663, 0xCC99, 0x8664, 0xCC9A, 0x8665, 0xCC9B, 0x8666, 0xCC9C, 0x8667, 0xCC9D, 0x8668, 0xCC9E, 0x8669, 0xCC9F, 0x866A, 0xCCA0, + 0x866B, 0xB3E6, 0x866C, 0xF2B0, 0x866D, 0xCD40, 0x866E, 0xF2B1, 0x866F, 0xCD41, 0x8670, 0xCD42, 0x8671, 0xCAAD, 0x8672, 0xCD43, + 0x8673, 0xCD44, 0x8674, 0xCD45, 0x8675, 0xCD46, 0x8676, 0xCD47, 0x8677, 0xCD48, 0x8678, 0xCD49, 0x8679, 0xBAE7, 0x867A, 0xF2B3, + 0x867B, 0xF2B5, 0x867C, 0xF2B4, 0x867D, 0xCBE4, 0x867E, 0xCFBA, 0x867F, 0xF2B2, 0x8680, 0xCAB4, 0x8681, 0xD2CF, 0x8682, 0xC2EC, + 0x8683, 0xCD4A, 0x8684, 0xCD4B, 0x8685, 0xCD4C, 0x8686, 0xCD4D, 0x8687, 0xCD4E, 0x8688, 0xCD4F, 0x8689, 0xCD50, 0x868A, 0xCEC3, + 0x868B, 0xF2B8, 0x868C, 0xB0F6, 0x868D, 0xF2B7, 0x868E, 0xCD51, 0x868F, 0xCD52, 0x8690, 0xCD53, 0x8691, 0xCD54, 0x8692, 0xCD55, + 0x8693, 0xF2BE, 0x8694, 0xCD56, 0x8695, 0xB2CF, 0x8696, 0xCD57, 0x8697, 0xCD58, 0x8698, 0xCD59, 0x8699, 0xCD5A, 0x869A, 0xCD5B, + 0x869B, 0xCD5C, 0x869C, 0xD1C1, 0x869D, 0xF2BA, 0x869E, 0xCD5D, 0x869F, 0xCD5E, 0x86A0, 0xCD5F, 0x86A1, 0xCD60, 0x86A2, 0xCD61, + 0x86A3, 0xF2BC, 0x86A4, 0xD4E9, 0x86A5, 0xCD62, 0x86A6, 0xCD63, 0x86A7, 0xF2BB, 0x86A8, 0xF2B6, 0x86A9, 0xF2BF, 0x86AA, 0xF2BD, + 0x86AB, 0xCD64, 0x86AC, 0xF2B9, 0x86AD, 0xCD65, 0x86AE, 0xCD66, 0x86AF, 0xF2C7, 0x86B0, 0xF2C4, 0x86B1, 0xF2C6, 0x86B2, 0xCD67, + 0x86B3, 0xCD68, 0x86B4, 0xF2CA, 0x86B5, 0xF2C2, 0x86B6, 0xF2C0, 0x86B7, 0xCD69, 0x86B8, 0xCD6A, 0x86B9, 0xCD6B, 0x86BA, 0xF2C5, + 0x86BB, 0xCD6C, 0x86BC, 0xCD6D, 0x86BD, 0xCD6E, 0x86BE, 0xCD6F, 0x86BF, 0xCD70, 0x86C0, 0xD6FB, 0x86C1, 0xCD71, 0x86C2, 0xCD72, + 0x86C3, 0xCD73, 0x86C4, 0xF2C1, 0x86C5, 0xCD74, 0x86C6, 0xC7F9, 0x86C7, 0xC9DF, 0x86C8, 0xCD75, 0x86C9, 0xF2C8, 0x86CA, 0xB9C6, + 0x86CB, 0xB5B0, 0x86CC, 0xCD76, 0x86CD, 0xCD77, 0x86CE, 0xF2C3, 0x86CF, 0xF2C9, 0x86D0, 0xF2D0, 0x86D1, 0xF2D6, 0x86D2, 0xCD78, + 0x86D3, 0xCD79, 0x86D4, 0xBBD7, 0x86D5, 0xCD7A, 0x86D6, 0xCD7B, 0x86D7, 0xCD7C, 0x86D8, 0xF2D5, 0x86D9, 0xCDDC, 0x86DA, 0xCD7D, + 0x86DB, 0xD6EB, 0x86DC, 0xCD7E, 0x86DD, 0xCD80, 0x86DE, 0xF2D2, 0x86DF, 0xF2D4, 0x86E0, 0xCD81, 0x86E1, 0xCD82, 0x86E2, 0xCD83, + 0x86E3, 0xCD84, 0x86E4, 0xB8F2, 0x86E5, 0xCD85, 0x86E6, 0xCD86, 0x86E7, 0xCD87, 0x86E8, 0xCD88, 0x86E9, 0xF2CB, 0x86EA, 0xCD89, + 0x86EB, 0xCD8A, 0x86EC, 0xCD8B, 0x86ED, 0xF2CE, 0x86EE, 0xC2F9, 0x86EF, 0xCD8C, 0x86F0, 0xD5DD, 0x86F1, 0xF2CC, 0x86F2, 0xF2CD, + 0x86F3, 0xF2CF, 0x86F4, 0xF2D3, 0x86F5, 0xCD8D, 0x86F6, 0xCD8E, 0x86F7, 0xCD8F, 0x86F8, 0xF2D9, 0x86F9, 0xD3BC, 0x86FA, 0xCD90, + 0x86FB, 0xCD91, 0x86FC, 0xCD92, 0x86FD, 0xCD93, 0x86FE, 0xB6EA, 0x86FF, 0xCD94, 0x8700, 0xCAF1, 0x8701, 0xCD95, 0x8702, 0xB7E4, + 0x8703, 0xF2D7, 0x8704, 0xCD96, 0x8705, 0xCD97, 0x8706, 0xCD98, 0x8707, 0xF2D8, 0x8708, 0xF2DA, 0x8709, 0xF2DD, 0x870A, 0xF2DB, + 0x870B, 0xCD99, 0x870C, 0xCD9A, 0x870D, 0xF2DC, 0x870E, 0xCD9B, 0x870F, 0xCD9C, 0x8710, 0xCD9D, 0x8711, 0xCD9E, 0x8712, 0xD1D1, + 0x8713, 0xF2D1, 0x8714, 0xCD9F, 0x8715, 0xCDC9, 0x8716, 0xCDA0, 0x8717, 0xCECF, 0x8718, 0xD6A9, 0x8719, 0xCE40, 0x871A, 0xF2E3, + 0x871B, 0xCE41, 0x871C, 0xC3DB, 0x871D, 0xCE42, 0x871E, 0xF2E0, 0x871F, 0xCE43, 0x8720, 0xCE44, 0x8721, 0xC0AF, 0x8722, 0xF2EC, + 0x8723, 0xF2DE, 0x8724, 0xCE45, 0x8725, 0xF2E1, 0x8726, 0xCE46, 0x8727, 0xCE47, 0x8728, 0xCE48, 0x8729, 0xF2E8, 0x872A, 0xCE49, + 0x872B, 0xCE4A, 0x872C, 0xCE4B, 0x872D, 0xCE4C, 0x872E, 0xF2E2, 0x872F, 0xCE4D, 0x8730, 0xCE4E, 0x8731, 0xF2E7, 0x8732, 0xCE4F, + 0x8733, 0xCE50, 0x8734, 0xF2E6, 0x8735, 0xCE51, 0x8736, 0xCE52, 0x8737, 0xF2E9, 0x8738, 0xCE53, 0x8739, 0xCE54, 0x873A, 0xCE55, + 0x873B, 0xF2DF, 0x873C, 0xCE56, 0x873D, 0xCE57, 0x873E, 0xF2E4, 0x873F, 0xF2EA, 0x8740, 0xCE58, 0x8741, 0xCE59, 0x8742, 0xCE5A, + 0x8743, 0xCE5B, 0x8744, 0xCE5C, 0x8745, 0xCE5D, 0x8746, 0xCE5E, 0x8747, 0xD3AC, 0x8748, 0xF2E5, 0x8749, 0xB2F5, 0x874A, 0xCE5F, + 0x874B, 0xCE60, 0x874C, 0xF2F2, 0x874D, 0xCE61, 0x874E, 0xD0AB, 0x874F, 0xCE62, 0x8750, 0xCE63, 0x8751, 0xCE64, 0x8752, 0xCE65, + 0x8753, 0xF2F5, 0x8754, 0xCE66, 0x8755, 0xCE67, 0x8756, 0xCE68, 0x8757, 0xBBC8, 0x8758, 0xCE69, 0x8759, 0xF2F9, 0x875A, 0xCE6A, + 0x875B, 0xCE6B, 0x875C, 0xCE6C, 0x875D, 0xCE6D, 0x875E, 0xCE6E, 0x875F, 0xCE6F, 0x8760, 0xF2F0, 0x8761, 0xCE70, 0x8762, 0xCE71, + 0x8763, 0xF2F6, 0x8764, 0xF2F8, 0x8765, 0xF2FA, 0x8766, 0xCE72, 0x8767, 0xCE73, 0x8768, 0xCE74, 0x8769, 0xCE75, 0x876A, 0xCE76, + 0x876B, 0xCE77, 0x876C, 0xCE78, 0x876D, 0xCE79, 0x876E, 0xF2F3, 0x876F, 0xCE7A, 0x8770, 0xF2F1, 0x8771, 0xCE7B, 0x8772, 0xCE7C, + 0x8773, 0xCE7D, 0x8774, 0xBAFB, 0x8775, 0xCE7E, 0x8776, 0xB5FB, 0x8777, 0xCE80, 0x8778, 0xCE81, 0x8779, 0xCE82, 0x877A, 0xCE83, + 0x877B, 0xF2EF, 0x877C, 0xF2F7, 0x877D, 0xF2ED, 0x877E, 0xF2EE, 0x877F, 0xCE84, 0x8780, 0xCE85, 0x8781, 0xCE86, 0x8782, 0xF2EB, + 0x8783, 0xF3A6, 0x8784, 0xCE87, 0x8785, 0xF3A3, 0x8786, 0xCE88, 0x8787, 0xCE89, 0x8788, 0xF3A2, 0x8789, 0xCE8A, 0x878A, 0xCE8B, + 0x878B, 0xF2F4, 0x878C, 0xCE8C, 0x878D, 0xC8DA, 0x878E, 0xCE8D, 0x878F, 0xCE8E, 0x8790, 0xCE8F, 0x8791, 0xCE90, 0x8792, 0xCE91, + 0x8793, 0xF2FB, 0x8794, 0xCE92, 0x8795, 0xCE93, 0x8796, 0xCE94, 0x8797, 0xF3A5, 0x8798, 0xCE95, 0x8799, 0xCE96, 0x879A, 0xCE97, + 0x879B, 0xCE98, 0x879C, 0xCE99, 0x879D, 0xCE9A, 0x879E, 0xCE9B, 0x879F, 0xC3F8, 0x87A0, 0xCE9C, 0x87A1, 0xCE9D, 0x87A2, 0xCE9E, + 0x87A3, 0xCE9F, 0x87A4, 0xCEA0, 0x87A5, 0xCF40, 0x87A6, 0xCF41, 0x87A7, 0xCF42, 0x87A8, 0xF2FD, 0x87A9, 0xCF43, 0x87AA, 0xCF44, + 0x87AB, 0xF3A7, 0x87AC, 0xF3A9, 0x87AD, 0xF3A4, 0x87AE, 0xCF45, 0x87AF, 0xF2FC, 0x87B0, 0xCF46, 0x87B1, 0xCF47, 0x87B2, 0xCF48, + 0x87B3, 0xF3AB, 0x87B4, 0xCF49, 0x87B5, 0xF3AA, 0x87B6, 0xCF4A, 0x87B7, 0xCF4B, 0x87B8, 0xCF4C, 0x87B9, 0xCF4D, 0x87BA, 0xC2DD, + 0x87BB, 0xCF4E, 0x87BC, 0xCF4F, 0x87BD, 0xF3AE, 0x87BE, 0xCF50, 0x87BF, 0xCF51, 0x87C0, 0xF3B0, 0x87C1, 0xCF52, 0x87C2, 0xCF53, + 0x87C3, 0xCF54, 0x87C4, 0xCF55, 0x87C5, 0xCF56, 0x87C6, 0xF3A1, 0x87C7, 0xCF57, 0x87C8, 0xCF58, 0x87C9, 0xCF59, 0x87CA, 0xF3B1, + 0x87CB, 0xF3AC, 0x87CC, 0xCF5A, 0x87CD, 0xCF5B, 0x87CE, 0xCF5C, 0x87CF, 0xCF5D, 0x87D0, 0xCF5E, 0x87D1, 0xF3AF, 0x87D2, 0xF2FE, + 0x87D3, 0xF3AD, 0x87D4, 0xCF5F, 0x87D5, 0xCF60, 0x87D6, 0xCF61, 0x87D7, 0xCF62, 0x87D8, 0xCF63, 0x87D9, 0xCF64, 0x87DA, 0xCF65, + 0x87DB, 0xF3B2, 0x87DC, 0xCF66, 0x87DD, 0xCF67, 0x87DE, 0xCF68, 0x87DF, 0xCF69, 0x87E0, 0xF3B4, 0x87E1, 0xCF6A, 0x87E2, 0xCF6B, + 0x87E3, 0xCF6C, 0x87E4, 0xCF6D, 0x87E5, 0xF3A8, 0x87E6, 0xCF6E, 0x87E7, 0xCF6F, 0x87E8, 0xCF70, 0x87E9, 0xCF71, 0x87EA, 0xF3B3, + 0x87EB, 0xCF72, 0x87EC, 0xCF73, 0x87ED, 0xCF74, 0x87EE, 0xF3B5, 0x87EF, 0xCF75, 0x87F0, 0xCF76, 0x87F1, 0xCF77, 0x87F2, 0xCF78, + 0x87F3, 0xCF79, 0x87F4, 0xCF7A, 0x87F5, 0xCF7B, 0x87F6, 0xCF7C, 0x87F7, 0xCF7D, 0x87F8, 0xCF7E, 0x87F9, 0xD0B7, 0x87FA, 0xCF80, + 0x87FB, 0xCF81, 0x87FC, 0xCF82, 0x87FD, 0xCF83, 0x87FE, 0xF3B8, 0x87FF, 0xCF84, 0x8800, 0xCF85, 0x8801, 0xCF86, 0x8802, 0xCF87, + 0x8803, 0xD9F9, 0x8804, 0xCF88, 0x8805, 0xCF89, 0x8806, 0xCF8A, 0x8807, 0xCF8B, 0x8808, 0xCF8C, 0x8809, 0xCF8D, 0x880A, 0xF3B9, + 0x880B, 0xCF8E, 0x880C, 0xCF8F, 0x880D, 0xCF90, 0x880E, 0xCF91, 0x880F, 0xCF92, 0x8810, 0xCF93, 0x8811, 0xCF94, 0x8812, 0xCF95, + 0x8813, 0xF3B7, 0x8814, 0xCF96, 0x8815, 0xC8E4, 0x8816, 0xF3B6, 0x8817, 0xCF97, 0x8818, 0xCF98, 0x8819, 0xCF99, 0x881A, 0xCF9A, + 0x881B, 0xF3BA, 0x881C, 0xCF9B, 0x881D, 0xCF9C, 0x881E, 0xCF9D, 0x881F, 0xCF9E, 0x8820, 0xCF9F, 0x8821, 0xF3BB, 0x8822, 0xB4C0, + 0x8823, 0xCFA0, 0x8824, 0xD040, 0x8825, 0xD041, 0x8826, 0xD042, 0x8827, 0xD043, 0x8828, 0xD044, 0x8829, 0xD045, 0x882A, 0xD046, + 0x882B, 0xD047, 0x882C, 0xD048, 0x882D, 0xD049, 0x882E, 0xD04A, 0x882F, 0xD04B, 0x8830, 0xD04C, 0x8831, 0xD04D, 0x8832, 0xEEC3, + 0x8833, 0xD04E, 0x8834, 0xD04F, 0x8835, 0xD050, 0x8836, 0xD051, 0x8837, 0xD052, 0x8838, 0xD053, 0x8839, 0xF3BC, 0x883A, 0xD054, + 0x883B, 0xD055, 0x883C, 0xF3BD, 0x883D, 0xD056, 0x883E, 0xD057, 0x883F, 0xD058, 0x8840, 0xD1AA, 0x8841, 0xD059, 0x8842, 0xD05A, + 0x8843, 0xD05B, 0x8844, 0xF4AC, 0x8845, 0xD0C6, 0x8846, 0xD05C, 0x8847, 0xD05D, 0x8848, 0xD05E, 0x8849, 0xD05F, 0x884A, 0xD060, + 0x884B, 0xD061, 0x884C, 0xD0D0, 0x884D, 0xD1DC, 0x884E, 0xD062, 0x884F, 0xD063, 0x8850, 0xD064, 0x8851, 0xD065, 0x8852, 0xD066, + 0x8853, 0xD067, 0x8854, 0xCFCE, 0x8855, 0xD068, 0x8856, 0xD069, 0x8857, 0xBDD6, 0x8858, 0xD06A, 0x8859, 0xD1C3, 0x885A, 0xD06B, + 0x885B, 0xD06C, 0x885C, 0xD06D, 0x885D, 0xD06E, 0x885E, 0xD06F, 0x885F, 0xD070, 0x8860, 0xD071, 0x8861, 0xBAE2, 0x8862, 0xE1E9, + 0x8863, 0xD2C2, 0x8864, 0xF1C2, 0x8865, 0xB2B9, 0x8866, 0xD072, 0x8867, 0xD073, 0x8868, 0xB1ED, 0x8869, 0xF1C3, 0x886A, 0xD074, + 0x886B, 0xC9C0, 0x886C, 0xB3C4, 0x886D, 0xD075, 0x886E, 0xD9F2, 0x886F, 0xD076, 0x8870, 0xCBA5, 0x8871, 0xD077, 0x8872, 0xF1C4, + 0x8873, 0xD078, 0x8874, 0xD079, 0x8875, 0xD07A, 0x8876, 0xD07B, 0x8877, 0xD6D4, 0x8878, 0xD07C, 0x8879, 0xD07D, 0x887A, 0xD07E, + 0x887B, 0xD080, 0x887C, 0xD081, 0x887D, 0xF1C5, 0x887E, 0xF4C0, 0x887F, 0xF1C6, 0x8880, 0xD082, 0x8881, 0xD4AC, 0x8882, 0xF1C7, + 0x8883, 0xD083, 0x8884, 0xB0C0, 0x8885, 0xF4C1, 0x8886, 0xD084, 0x8887, 0xD085, 0x8888, 0xF4C2, 0x8889, 0xD086, 0x888A, 0xD087, + 0x888B, 0xB4FC, 0x888C, 0xD088, 0x888D, 0xC5DB, 0x888E, 0xD089, 0x888F, 0xD08A, 0x8890, 0xD08B, 0x8891, 0xD08C, 0x8892, 0xCCBB, + 0x8893, 0xD08D, 0x8894, 0xD08E, 0x8895, 0xD08F, 0x8896, 0xD0E4, 0x8897, 0xD090, 0x8898, 0xD091, 0x8899, 0xD092, 0x889A, 0xD093, + 0x889B, 0xD094, 0x889C, 0xCDE0, 0x889D, 0xD095, 0x889E, 0xD096, 0x889F, 0xD097, 0x88A0, 0xD098, 0x88A1, 0xD099, 0x88A2, 0xF1C8, + 0x88A3, 0xD09A, 0x88A4, 0xD9F3, 0x88A5, 0xD09B, 0x88A6, 0xD09C, 0x88A7, 0xD09D, 0x88A8, 0xD09E, 0x88A9, 0xD09F, 0x88AA, 0xD0A0, + 0x88AB, 0xB1BB, 0x88AC, 0xD140, 0x88AD, 0xCFAE, 0x88AE, 0xD141, 0x88AF, 0xD142, 0x88B0, 0xD143, 0x88B1, 0xB8A4, 0x88B2, 0xD144, + 0x88B3, 0xD145, 0x88B4, 0xD146, 0x88B5, 0xD147, 0x88B6, 0xD148, 0x88B7, 0xF1CA, 0x88B8, 0xD149, 0x88B9, 0xD14A, 0x88BA, 0xD14B, + 0x88BB, 0xD14C, 0x88BC, 0xF1CB, 0x88BD, 0xD14D, 0x88BE, 0xD14E, 0x88BF, 0xD14F, 0x88C0, 0xD150, 0x88C1, 0xB2C3, 0x88C2, 0xC1D1, + 0x88C3, 0xD151, 0x88C4, 0xD152, 0x88C5, 0xD7B0, 0x88C6, 0xF1C9, 0x88C7, 0xD153, 0x88C8, 0xD154, 0x88C9, 0xF1CC, 0x88CA, 0xD155, + 0x88CB, 0xD156, 0x88CC, 0xD157, 0x88CD, 0xD158, 0x88CE, 0xF1CE, 0x88CF, 0xD159, 0x88D0, 0xD15A, 0x88D1, 0xD15B, 0x88D2, 0xD9F6, + 0x88D3, 0xD15C, 0x88D4, 0xD2E1, 0x88D5, 0xD4A3, 0x88D6, 0xD15D, 0x88D7, 0xD15E, 0x88D8, 0xF4C3, 0x88D9, 0xC8B9, 0x88DA, 0xD15F, + 0x88DB, 0xD160, 0x88DC, 0xD161, 0x88DD, 0xD162, 0x88DE, 0xD163, 0x88DF, 0xF4C4, 0x88E0, 0xD164, 0x88E1, 0xD165, 0x88E2, 0xF1CD, + 0x88E3, 0xF1CF, 0x88E4, 0xBFE3, 0x88E5, 0xF1D0, 0x88E6, 0xD166, 0x88E7, 0xD167, 0x88E8, 0xF1D4, 0x88E9, 0xD168, 0x88EA, 0xD169, + 0x88EB, 0xD16A, 0x88EC, 0xD16B, 0x88ED, 0xD16C, 0x88EE, 0xD16D, 0x88EF, 0xD16E, 0x88F0, 0xF1D6, 0x88F1, 0xF1D1, 0x88F2, 0xD16F, + 0x88F3, 0xC9D1, 0x88F4, 0xC5E1, 0x88F5, 0xD170, 0x88F6, 0xD171, 0x88F7, 0xD172, 0x88F8, 0xC2E3, 0x88F9, 0xB9FC, 0x88FA, 0xD173, + 0x88FB, 0xD174, 0x88FC, 0xF1D3, 0x88FD, 0xD175, 0x88FE, 0xF1D5, 0x88FF, 0xD176, 0x8900, 0xD177, 0x8901, 0xD178, 0x8902, 0xB9D3, + 0x8903, 0xD179, 0x8904, 0xD17A, 0x8905, 0xD17B, 0x8906, 0xD17C, 0x8907, 0xD17D, 0x8908, 0xD17E, 0x8909, 0xD180, 0x890A, 0xF1DB, + 0x890B, 0xD181, 0x890C, 0xD182, 0x890D, 0xD183, 0x890E, 0xD184, 0x890F, 0xD185, 0x8910, 0xBAD6, 0x8911, 0xD186, 0x8912, 0xB0FD, + 0x8913, 0xF1D9, 0x8914, 0xD187, 0x8915, 0xD188, 0x8916, 0xD189, 0x8917, 0xD18A, 0x8918, 0xD18B, 0x8919, 0xF1D8, 0x891A, 0xF1D2, + 0x891B, 0xF1DA, 0x891C, 0xD18C, 0x891D, 0xD18D, 0x891E, 0xD18E, 0x891F, 0xD18F, 0x8920, 0xD190, 0x8921, 0xF1D7, 0x8922, 0xD191, + 0x8923, 0xD192, 0x8924, 0xD193, 0x8925, 0xC8EC, 0x8926, 0xD194, 0x8927, 0xD195, 0x8928, 0xD196, 0x8929, 0xD197, 0x892A, 0xCDCA, + 0x892B, 0xF1DD, 0x892C, 0xD198, 0x892D, 0xD199, 0x892E, 0xD19A, 0x892F, 0xD19B, 0x8930, 0xE5BD, 0x8931, 0xD19C, 0x8932, 0xD19D, + 0x8933, 0xD19E, 0x8934, 0xF1DC, 0x8935, 0xD19F, 0x8936, 0xF1DE, 0x8937, 0xD1A0, 0x8938, 0xD240, 0x8939, 0xD241, 0x893A, 0xD242, + 0x893B, 0xD243, 0x893C, 0xD244, 0x893D, 0xD245, 0x893E, 0xD246, 0x893F, 0xD247, 0x8940, 0xD248, 0x8941, 0xF1DF, 0x8942, 0xD249, + 0x8943, 0xD24A, 0x8944, 0xCFE5, 0x8945, 0xD24B, 0x8946, 0xD24C, 0x8947, 0xD24D, 0x8948, 0xD24E, 0x8949, 0xD24F, 0x894A, 0xD250, + 0x894B, 0xD251, 0x894C, 0xD252, 0x894D, 0xD253, 0x894E, 0xD254, 0x894F, 0xD255, 0x8950, 0xD256, 0x8951, 0xD257, 0x8952, 0xD258, + 0x8953, 0xD259, 0x8954, 0xD25A, 0x8955, 0xD25B, 0x8956, 0xD25C, 0x8957, 0xD25D, 0x8958, 0xD25E, 0x8959, 0xD25F, 0x895A, 0xD260, + 0x895B, 0xD261, 0x895C, 0xD262, 0x895D, 0xD263, 0x895E, 0xF4C5, 0x895F, 0xBDF3, 0x8960, 0xD264, 0x8961, 0xD265, 0x8962, 0xD266, + 0x8963, 0xD267, 0x8964, 0xD268, 0x8965, 0xD269, 0x8966, 0xF1E0, 0x8967, 0xD26A, 0x8968, 0xD26B, 0x8969, 0xD26C, 0x896A, 0xD26D, + 0x896B, 0xD26E, 0x896C, 0xD26F, 0x896D, 0xD270, 0x896E, 0xD271, 0x896F, 0xD272, 0x8970, 0xD273, 0x8971, 0xD274, 0x8972, 0xD275, + 0x8973, 0xD276, 0x8974, 0xD277, 0x8975, 0xD278, 0x8976, 0xD279, 0x8977, 0xD27A, 0x8978, 0xD27B, 0x8979, 0xD27C, 0x897A, 0xD27D, + 0x897B, 0xF1E1, 0x897C, 0xD27E, 0x897D, 0xD280, 0x897E, 0xD281, 0x897F, 0xCEF7, 0x8980, 0xD282, 0x8981, 0xD2AA, 0x8982, 0xD283, + 0x8983, 0xF1FB, 0x8984, 0xD284, 0x8985, 0xD285, 0x8986, 0xB8B2, 0x8987, 0xD286, 0x8988, 0xD287, 0x8989, 0xD288, 0x898A, 0xD289, + 0x898B, 0xD28A, 0x898C, 0xD28B, 0x898D, 0xD28C, 0x898E, 0xD28D, 0x898F, 0xD28E, 0x8990, 0xD28F, 0x8991, 0xD290, 0x8992, 0xD291, + 0x8993, 0xD292, 0x8994, 0xD293, 0x8995, 0xD294, 0x8996, 0xD295, 0x8997, 0xD296, 0x8998, 0xD297, 0x8999, 0xD298, 0x899A, 0xD299, + 0x899B, 0xD29A, 0x899C, 0xD29B, 0x899D, 0xD29C, 0x899E, 0xD29D, 0x899F, 0xD29E, 0x89A0, 0xD29F, 0x89A1, 0xD2A0, 0x89A2, 0xD340, + 0x89A3, 0xD341, 0x89A4, 0xD342, 0x89A5, 0xD343, 0x89A6, 0xD344, 0x89A7, 0xD345, 0x89A8, 0xD346, 0x89A9, 0xD347, 0x89AA, 0xD348, + 0x89AB, 0xD349, 0x89AC, 0xD34A, 0x89AD, 0xD34B, 0x89AE, 0xD34C, 0x89AF, 0xD34D, 0x89B0, 0xD34E, 0x89B1, 0xD34F, 0x89B2, 0xD350, + 0x89B3, 0xD351, 0x89B4, 0xD352, 0x89B5, 0xD353, 0x89B6, 0xD354, 0x89B7, 0xD355, 0x89B8, 0xD356, 0x89B9, 0xD357, 0x89BA, 0xD358, + 0x89BB, 0xD359, 0x89BC, 0xD35A, 0x89BD, 0xD35B, 0x89BE, 0xD35C, 0x89BF, 0xD35D, 0x89C0, 0xD35E, 0x89C1, 0xBCFB, 0x89C2, 0xB9DB, + 0x89C3, 0xD35F, 0x89C4, 0xB9E6, 0x89C5, 0xC3D9, 0x89C6, 0xCAD3, 0x89C7, 0xEAE8, 0x89C8, 0xC0C0, 0x89C9, 0xBEF5, 0x89CA, 0xEAE9, + 0x89CB, 0xEAEA, 0x89CC, 0xEAEB, 0x89CD, 0xD360, 0x89CE, 0xEAEC, 0x89CF, 0xEAED, 0x89D0, 0xEAEE, 0x89D1, 0xEAEF, 0x89D2, 0xBDC7, + 0x89D3, 0xD361, 0x89D4, 0xD362, 0x89D5, 0xD363, 0x89D6, 0xF5FB, 0x89D7, 0xD364, 0x89D8, 0xD365, 0x89D9, 0xD366, 0x89DA, 0xF5FD, + 0x89DB, 0xD367, 0x89DC, 0xF5FE, 0x89DD, 0xD368, 0x89DE, 0xF5FC, 0x89DF, 0xD369, 0x89E0, 0xD36A, 0x89E1, 0xD36B, 0x89E2, 0xD36C, + 0x89E3, 0xBDE2, 0x89E4, 0xD36D, 0x89E5, 0xF6A1, 0x89E6, 0xB4A5, 0x89E7, 0xD36E, 0x89E8, 0xD36F, 0x89E9, 0xD370, 0x89EA, 0xD371, + 0x89EB, 0xF6A2, 0x89EC, 0xD372, 0x89ED, 0xD373, 0x89EE, 0xD374, 0x89EF, 0xF6A3, 0x89F0, 0xD375, 0x89F1, 0xD376, 0x89F2, 0xD377, + 0x89F3, 0xECB2, 0x89F4, 0xD378, 0x89F5, 0xD379, 0x89F6, 0xD37A, 0x89F7, 0xD37B, 0x89F8, 0xD37C, 0x89F9, 0xD37D, 0x89FA, 0xD37E, + 0x89FB, 0xD380, 0x89FC, 0xD381, 0x89FD, 0xD382, 0x89FE, 0xD383, 0x89FF, 0xD384, 0x8A00, 0xD1D4, 0x8A01, 0xD385, 0x8A02, 0xD386, + 0x8A03, 0xD387, 0x8A04, 0xD388, 0x8A05, 0xD389, 0x8A06, 0xD38A, 0x8A07, 0xD9EA, 0x8A08, 0xD38B, 0x8A09, 0xD38C, 0x8A0A, 0xD38D, + 0x8A0B, 0xD38E, 0x8A0C, 0xD38F, 0x8A0D, 0xD390, 0x8A0E, 0xD391, 0x8A0F, 0xD392, 0x8A10, 0xD393, 0x8A11, 0xD394, 0x8A12, 0xD395, + 0x8A13, 0xD396, 0x8A14, 0xD397, 0x8A15, 0xD398, 0x8A16, 0xD399, 0x8A17, 0xD39A, 0x8A18, 0xD39B, 0x8A19, 0xD39C, 0x8A1A, 0xD39D, + 0x8A1B, 0xD39E, 0x8A1C, 0xD39F, 0x8A1D, 0xD3A0, 0x8A1E, 0xD440, 0x8A1F, 0xD441, 0x8A20, 0xD442, 0x8A21, 0xD443, 0x8A22, 0xD444, + 0x8A23, 0xD445, 0x8A24, 0xD446, 0x8A25, 0xD447, 0x8A26, 0xD448, 0x8A27, 0xD449, 0x8A28, 0xD44A, 0x8A29, 0xD44B, 0x8A2A, 0xD44C, + 0x8A2B, 0xD44D, 0x8A2C, 0xD44E, 0x8A2D, 0xD44F, 0x8A2E, 0xD450, 0x8A2F, 0xD451, 0x8A30, 0xD452, 0x8A31, 0xD453, 0x8A32, 0xD454, + 0x8A33, 0xD455, 0x8A34, 0xD456, 0x8A35, 0xD457, 0x8A36, 0xD458, 0x8A37, 0xD459, 0x8A38, 0xD45A, 0x8A39, 0xD45B, 0x8A3A, 0xD45C, + 0x8A3B, 0xD45D, 0x8A3C, 0xD45E, 0x8A3D, 0xD45F, 0x8A3E, 0xF6A4, 0x8A3F, 0xD460, 0x8A40, 0xD461, 0x8A41, 0xD462, 0x8A42, 0xD463, + 0x8A43, 0xD464, 0x8A44, 0xD465, 0x8A45, 0xD466, 0x8A46, 0xD467, 0x8A47, 0xD468, 0x8A48, 0xEEBA, 0x8A49, 0xD469, 0x8A4A, 0xD46A, + 0x8A4B, 0xD46B, 0x8A4C, 0xD46C, 0x8A4D, 0xD46D, 0x8A4E, 0xD46E, 0x8A4F, 0xD46F, 0x8A50, 0xD470, 0x8A51, 0xD471, 0x8A52, 0xD472, + 0x8A53, 0xD473, 0x8A54, 0xD474, 0x8A55, 0xD475, 0x8A56, 0xD476, 0x8A57, 0xD477, 0x8A58, 0xD478, 0x8A59, 0xD479, 0x8A5A, 0xD47A, + 0x8A5B, 0xD47B, 0x8A5C, 0xD47C, 0x8A5D, 0xD47D, 0x8A5E, 0xD47E, 0x8A5F, 0xD480, 0x8A60, 0xD481, 0x8A61, 0xD482, 0x8A62, 0xD483, + 0x8A63, 0xD484, 0x8A64, 0xD485, 0x8A65, 0xD486, 0x8A66, 0xD487, 0x8A67, 0xD488, 0x8A68, 0xD489, 0x8A69, 0xD48A, 0x8A6A, 0xD48B, + 0x8A6B, 0xD48C, 0x8A6C, 0xD48D, 0x8A6D, 0xD48E, 0x8A6E, 0xD48F, 0x8A6F, 0xD490, 0x8A70, 0xD491, 0x8A71, 0xD492, 0x8A72, 0xD493, + 0x8A73, 0xD494, 0x8A74, 0xD495, 0x8A75, 0xD496, 0x8A76, 0xD497, 0x8A77, 0xD498, 0x8A78, 0xD499, 0x8A79, 0xD5B2, 0x8A7A, 0xD49A, + 0x8A7B, 0xD49B, 0x8A7C, 0xD49C, 0x8A7D, 0xD49D, 0x8A7E, 0xD49E, 0x8A7F, 0xD49F, 0x8A80, 0xD4A0, 0x8A81, 0xD540, 0x8A82, 0xD541, + 0x8A83, 0xD542, 0x8A84, 0xD543, 0x8A85, 0xD544, 0x8A86, 0xD545, 0x8A87, 0xD546, 0x8A88, 0xD547, 0x8A89, 0xD3FE, 0x8A8A, 0xCCDC, + 0x8A8B, 0xD548, 0x8A8C, 0xD549, 0x8A8D, 0xD54A, 0x8A8E, 0xD54B, 0x8A8F, 0xD54C, 0x8A90, 0xD54D, 0x8A91, 0xD54E, 0x8A92, 0xD54F, + 0x8A93, 0xCAC4, 0x8A94, 0xD550, 0x8A95, 0xD551, 0x8A96, 0xD552, 0x8A97, 0xD553, 0x8A98, 0xD554, 0x8A99, 0xD555, 0x8A9A, 0xD556, + 0x8A9B, 0xD557, 0x8A9C, 0xD558, 0x8A9D, 0xD559, 0x8A9E, 0xD55A, 0x8A9F, 0xD55B, 0x8AA0, 0xD55C, 0x8AA1, 0xD55D, 0x8AA2, 0xD55E, + 0x8AA3, 0xD55F, 0x8AA4, 0xD560, 0x8AA5, 0xD561, 0x8AA6, 0xD562, 0x8AA7, 0xD563, 0x8AA8, 0xD564, 0x8AA9, 0xD565, 0x8AAA, 0xD566, + 0x8AAB, 0xD567, 0x8AAC, 0xD568, 0x8AAD, 0xD569, 0x8AAE, 0xD56A, 0x8AAF, 0xD56B, 0x8AB0, 0xD56C, 0x8AB1, 0xD56D, 0x8AB2, 0xD56E, + 0x8AB3, 0xD56F, 0x8AB4, 0xD570, 0x8AB5, 0xD571, 0x8AB6, 0xD572, 0x8AB7, 0xD573, 0x8AB8, 0xD574, 0x8AB9, 0xD575, 0x8ABA, 0xD576, + 0x8ABB, 0xD577, 0x8ABC, 0xD578, 0x8ABD, 0xD579, 0x8ABE, 0xD57A, 0x8ABF, 0xD57B, 0x8AC0, 0xD57C, 0x8AC1, 0xD57D, 0x8AC2, 0xD57E, + 0x8AC3, 0xD580, 0x8AC4, 0xD581, 0x8AC5, 0xD582, 0x8AC6, 0xD583, 0x8AC7, 0xD584, 0x8AC8, 0xD585, 0x8AC9, 0xD586, 0x8ACA, 0xD587, + 0x8ACB, 0xD588, 0x8ACC, 0xD589, 0x8ACD, 0xD58A, 0x8ACE, 0xD58B, 0x8ACF, 0xD58C, 0x8AD0, 0xD58D, 0x8AD1, 0xD58E, 0x8AD2, 0xD58F, + 0x8AD3, 0xD590, 0x8AD4, 0xD591, 0x8AD5, 0xD592, 0x8AD6, 0xD593, 0x8AD7, 0xD594, 0x8AD8, 0xD595, 0x8AD9, 0xD596, 0x8ADA, 0xD597, + 0x8ADB, 0xD598, 0x8ADC, 0xD599, 0x8ADD, 0xD59A, 0x8ADE, 0xD59B, 0x8ADF, 0xD59C, 0x8AE0, 0xD59D, 0x8AE1, 0xD59E, 0x8AE2, 0xD59F, + 0x8AE3, 0xD5A0, 0x8AE4, 0xD640, 0x8AE5, 0xD641, 0x8AE6, 0xD642, 0x8AE7, 0xD643, 0x8AE8, 0xD644, 0x8AE9, 0xD645, 0x8AEA, 0xD646, + 0x8AEB, 0xD647, 0x8AEC, 0xD648, 0x8AED, 0xD649, 0x8AEE, 0xD64A, 0x8AEF, 0xD64B, 0x8AF0, 0xD64C, 0x8AF1, 0xD64D, 0x8AF2, 0xD64E, + 0x8AF3, 0xD64F, 0x8AF4, 0xD650, 0x8AF5, 0xD651, 0x8AF6, 0xD652, 0x8AF7, 0xD653, 0x8AF8, 0xD654, 0x8AF9, 0xD655, 0x8AFA, 0xD656, + 0x8AFB, 0xD657, 0x8AFC, 0xD658, 0x8AFD, 0xD659, 0x8AFE, 0xD65A, 0x8AFF, 0xD65B, 0x8B00, 0xD65C, 0x8B01, 0xD65D, 0x8B02, 0xD65E, + 0x8B03, 0xD65F, 0x8B04, 0xD660, 0x8B05, 0xD661, 0x8B06, 0xD662, 0x8B07, 0xE5C0, 0x8B08, 0xD663, 0x8B09, 0xD664, 0x8B0A, 0xD665, + 0x8B0B, 0xD666, 0x8B0C, 0xD667, 0x8B0D, 0xD668, 0x8B0E, 0xD669, 0x8B0F, 0xD66A, 0x8B10, 0xD66B, 0x8B11, 0xD66C, 0x8B12, 0xD66D, + 0x8B13, 0xD66E, 0x8B14, 0xD66F, 0x8B15, 0xD670, 0x8B16, 0xD671, 0x8B17, 0xD672, 0x8B18, 0xD673, 0x8B19, 0xD674, 0x8B1A, 0xD675, + 0x8B1B, 0xD676, 0x8B1C, 0xD677, 0x8B1D, 0xD678, 0x8B1E, 0xD679, 0x8B1F, 0xD67A, 0x8B20, 0xD67B, 0x8B21, 0xD67C, 0x8B22, 0xD67D, + 0x8B23, 0xD67E, 0x8B24, 0xD680, 0x8B25, 0xD681, 0x8B26, 0xF6A5, 0x8B27, 0xD682, 0x8B28, 0xD683, 0x8B29, 0xD684, 0x8B2A, 0xD685, + 0x8B2B, 0xD686, 0x8B2C, 0xD687, 0x8B2D, 0xD688, 0x8B2E, 0xD689, 0x8B2F, 0xD68A, 0x8B30, 0xD68B, 0x8B31, 0xD68C, 0x8B32, 0xD68D, + 0x8B33, 0xD68E, 0x8B34, 0xD68F, 0x8B35, 0xD690, 0x8B36, 0xD691, 0x8B37, 0xD692, 0x8B38, 0xD693, 0x8B39, 0xD694, 0x8B3A, 0xD695, + 0x8B3B, 0xD696, 0x8B3C, 0xD697, 0x8B3D, 0xD698, 0x8B3E, 0xD699, 0x8B3F, 0xD69A, 0x8B40, 0xD69B, 0x8B41, 0xD69C, 0x8B42, 0xD69D, + 0x8B43, 0xD69E, 0x8B44, 0xD69F, 0x8B45, 0xD6A0, 0x8B46, 0xD740, 0x8B47, 0xD741, 0x8B48, 0xD742, 0x8B49, 0xD743, 0x8B4A, 0xD744, + 0x8B4B, 0xD745, 0x8B4C, 0xD746, 0x8B4D, 0xD747, 0x8B4E, 0xD748, 0x8B4F, 0xD749, 0x8B50, 0xD74A, 0x8B51, 0xD74B, 0x8B52, 0xD74C, + 0x8B53, 0xD74D, 0x8B54, 0xD74E, 0x8B55, 0xD74F, 0x8B56, 0xD750, 0x8B57, 0xD751, 0x8B58, 0xD752, 0x8B59, 0xD753, 0x8B5A, 0xD754, + 0x8B5B, 0xD755, 0x8B5C, 0xD756, 0x8B5D, 0xD757, 0x8B5E, 0xD758, 0x8B5F, 0xD759, 0x8B60, 0xD75A, 0x8B61, 0xD75B, 0x8B62, 0xD75C, + 0x8B63, 0xD75D, 0x8B64, 0xD75E, 0x8B65, 0xD75F, 0x8B66, 0xBEAF, 0x8B67, 0xD760, 0x8B68, 0xD761, 0x8B69, 0xD762, 0x8B6A, 0xD763, + 0x8B6B, 0xD764, 0x8B6C, 0xC6A9, 0x8B6D, 0xD765, 0x8B6E, 0xD766, 0x8B6F, 0xD767, 0x8B70, 0xD768, 0x8B71, 0xD769, 0x8B72, 0xD76A, + 0x8B73, 0xD76B, 0x8B74, 0xD76C, 0x8B75, 0xD76D, 0x8B76, 0xD76E, 0x8B77, 0xD76F, 0x8B78, 0xD770, 0x8B79, 0xD771, 0x8B7A, 0xD772, + 0x8B7B, 0xD773, 0x8B7C, 0xD774, 0x8B7D, 0xD775, 0x8B7E, 0xD776, 0x8B7F, 0xD777, 0x8B80, 0xD778, 0x8B81, 0xD779, 0x8B82, 0xD77A, + 0x8B83, 0xD77B, 0x8B84, 0xD77C, 0x8B85, 0xD77D, 0x8B86, 0xD77E, 0x8B87, 0xD780, 0x8B88, 0xD781, 0x8B89, 0xD782, 0x8B8A, 0xD783, + 0x8B8B, 0xD784, 0x8B8C, 0xD785, 0x8B8D, 0xD786, 0x8B8E, 0xD787, 0x8B8F, 0xD788, 0x8B90, 0xD789, 0x8B91, 0xD78A, 0x8B92, 0xD78B, + 0x8B93, 0xD78C, 0x8B94, 0xD78D, 0x8B95, 0xD78E, 0x8B96, 0xD78F, 0x8B97, 0xD790, 0x8B98, 0xD791, 0x8B99, 0xD792, 0x8B9A, 0xD793, + 0x8B9B, 0xD794, 0x8B9C, 0xD795, 0x8B9D, 0xD796, 0x8B9E, 0xD797, 0x8B9F, 0xD798, 0x8BA0, 0xDAA5, 0x8BA1, 0xBCC6, 0x8BA2, 0xB6A9, + 0x8BA3, 0xB8BC, 0x8BA4, 0xC8CF, 0x8BA5, 0xBCA5, 0x8BA6, 0xDAA6, 0x8BA7, 0xDAA7, 0x8BA8, 0xCCD6, 0x8BA9, 0xC8C3, 0x8BAA, 0xDAA8, + 0x8BAB, 0xC6FD, 0x8BAC, 0xD799, 0x8BAD, 0xD1B5, 0x8BAE, 0xD2E9, 0x8BAF, 0xD1B6, 0x8BB0, 0xBCC7, 0x8BB1, 0xD79A, 0x8BB2, 0xBDB2, + 0x8BB3, 0xBBE4, 0x8BB4, 0xDAA9, 0x8BB5, 0xDAAA, 0x8BB6, 0xD1C8, 0x8BB7, 0xDAAB, 0x8BB8, 0xD0ED, 0x8BB9, 0xB6EF, 0x8BBA, 0xC2DB, + 0x8BBB, 0xD79B, 0x8BBC, 0xCBCF, 0x8BBD, 0xB7ED, 0x8BBE, 0xC9E8, 0x8BBF, 0xB7C3, 0x8BC0, 0xBEF7, 0x8BC1, 0xD6A4, 0x8BC2, 0xDAAC, + 0x8BC3, 0xDAAD, 0x8BC4, 0xC6C0, 0x8BC5, 0xD7E7, 0x8BC6, 0xCAB6, 0x8BC7, 0xD79C, 0x8BC8, 0xD5A9, 0x8BC9, 0xCBDF, 0x8BCA, 0xD5EF, + 0x8BCB, 0xDAAE, 0x8BCC, 0xD6DF, 0x8BCD, 0xB4CA, 0x8BCE, 0xDAB0, 0x8BCF, 0xDAAF, 0x8BD0, 0xD79D, 0x8BD1, 0xD2EB, 0x8BD2, 0xDAB1, + 0x8BD3, 0xDAB2, 0x8BD4, 0xDAB3, 0x8BD5, 0xCAD4, 0x8BD6, 0xDAB4, 0x8BD7, 0xCAAB, 0x8BD8, 0xDAB5, 0x8BD9, 0xDAB6, 0x8BDA, 0xB3CF, + 0x8BDB, 0xD6EF, 0x8BDC, 0xDAB7, 0x8BDD, 0xBBB0, 0x8BDE, 0xB5AE, 0x8BDF, 0xDAB8, 0x8BE0, 0xDAB9, 0x8BE1, 0xB9EE, 0x8BE2, 0xD1AF, + 0x8BE3, 0xD2E8, 0x8BE4, 0xDABA, 0x8BE5, 0xB8C3, 0x8BE6, 0xCFEA, 0x8BE7, 0xB2EF, 0x8BE8, 0xDABB, 0x8BE9, 0xDABC, 0x8BEA, 0xD79E, + 0x8BEB, 0xBDEB, 0x8BEC, 0xCEDC, 0x8BED, 0xD3EF, 0x8BEE, 0xDABD, 0x8BEF, 0xCEF3, 0x8BF0, 0xDABE, 0x8BF1, 0xD3D5, 0x8BF2, 0xBBE5, + 0x8BF3, 0xDABF, 0x8BF4, 0xCBB5, 0x8BF5, 0xCBD0, 0x8BF6, 0xDAC0, 0x8BF7, 0xC7EB, 0x8BF8, 0xD6EE, 0x8BF9, 0xDAC1, 0x8BFA, 0xC5B5, + 0x8BFB, 0xB6C1, 0x8BFC, 0xDAC2, 0x8BFD, 0xB7CC, 0x8BFE, 0xBFCE, 0x8BFF, 0xDAC3, 0x8C00, 0xDAC4, 0x8C01, 0xCBAD, 0x8C02, 0xDAC5, + 0x8C03, 0xB5F7, 0x8C04, 0xDAC6, 0x8C05, 0xC1C2, 0x8C06, 0xD7BB, 0x8C07, 0xDAC7, 0x8C08, 0xCCB8, 0x8C09, 0xD79F, 0x8C0A, 0xD2EA, + 0x8C0B, 0xC4B1, 0x8C0C, 0xDAC8, 0x8C0D, 0xB5FD, 0x8C0E, 0xBBD1, 0x8C0F, 0xDAC9, 0x8C10, 0xD0B3, 0x8C11, 0xDACA, 0x8C12, 0xDACB, + 0x8C13, 0xCEBD, 0x8C14, 0xDACC, 0x8C15, 0xDACD, 0x8C16, 0xDACE, 0x8C17, 0xB2F7, 0x8C18, 0xDAD1, 0x8C19, 0xDACF, 0x8C1A, 0xD1E8, + 0x8C1B, 0xDAD0, 0x8C1C, 0xC3D5, 0x8C1D, 0xDAD2, 0x8C1E, 0xD7A0, 0x8C1F, 0xDAD3, 0x8C20, 0xDAD4, 0x8C21, 0xDAD5, 0x8C22, 0xD0BB, + 0x8C23, 0xD2A5, 0x8C24, 0xB0F9, 0x8C25, 0xDAD6, 0x8C26, 0xC7AB, 0x8C27, 0xDAD7, 0x8C28, 0xBDF7, 0x8C29, 0xC3A1, 0x8C2A, 0xDAD8, + 0x8C2B, 0xDAD9, 0x8C2C, 0xC3FD, 0x8C2D, 0xCCB7, 0x8C2E, 0xDADA, 0x8C2F, 0xDADB, 0x8C30, 0xC0BE, 0x8C31, 0xC6D7, 0x8C32, 0xDADC, + 0x8C33, 0xDADD, 0x8C34, 0xC7B4, 0x8C35, 0xDADE, 0x8C36, 0xDADF, 0x8C37, 0xB9C8, 0x8C38, 0xD840, 0x8C39, 0xD841, 0x8C3A, 0xD842, + 0x8C3B, 0xD843, 0x8C3C, 0xD844, 0x8C3D, 0xD845, 0x8C3E, 0xD846, 0x8C3F, 0xD847, 0x8C40, 0xD848, 0x8C41, 0xBBED, 0x8C42, 0xD849, + 0x8C43, 0xD84A, 0x8C44, 0xD84B, 0x8C45, 0xD84C, 0x8C46, 0xB6B9, 0x8C47, 0xF4F8, 0x8C48, 0xD84D, 0x8C49, 0xF4F9, 0x8C4A, 0xD84E, + 0x8C4B, 0xD84F, 0x8C4C, 0xCDE3, 0x8C4D, 0xD850, 0x8C4E, 0xD851, 0x8C4F, 0xD852, 0x8C50, 0xD853, 0x8C51, 0xD854, 0x8C52, 0xD855, + 0x8C53, 0xD856, 0x8C54, 0xD857, 0x8C55, 0xF5B9, 0x8C56, 0xD858, 0x8C57, 0xD859, 0x8C58, 0xD85A, 0x8C59, 0xD85B, 0x8C5A, 0xEBE0, + 0x8C5B, 0xD85C, 0x8C5C, 0xD85D, 0x8C5D, 0xD85E, 0x8C5E, 0xD85F, 0x8C5F, 0xD860, 0x8C60, 0xD861, 0x8C61, 0xCFF3, 0x8C62, 0xBBBF, + 0x8C63, 0xD862, 0x8C64, 0xD863, 0x8C65, 0xD864, 0x8C66, 0xD865, 0x8C67, 0xD866, 0x8C68, 0xD867, 0x8C69, 0xD868, 0x8C6A, 0xBAC0, + 0x8C6B, 0xD4A5, 0x8C6C, 0xD869, 0x8C6D, 0xD86A, 0x8C6E, 0xD86B, 0x8C6F, 0xD86C, 0x8C70, 0xD86D, 0x8C71, 0xD86E, 0x8C72, 0xD86F, + 0x8C73, 0xE1D9, 0x8C74, 0xD870, 0x8C75, 0xD871, 0x8C76, 0xD872, 0x8C77, 0xD873, 0x8C78, 0xF5F4, 0x8C79, 0xB1AA, 0x8C7A, 0xB2F2, + 0x8C7B, 0xD874, 0x8C7C, 0xD875, 0x8C7D, 0xD876, 0x8C7E, 0xD877, 0x8C7F, 0xD878, 0x8C80, 0xD879, 0x8C81, 0xD87A, 0x8C82, 0xF5F5, + 0x8C83, 0xD87B, 0x8C84, 0xD87C, 0x8C85, 0xF5F7, 0x8C86, 0xD87D, 0x8C87, 0xD87E, 0x8C88, 0xD880, 0x8C89, 0xBAD1, 0x8C8A, 0xF5F6, + 0x8C8B, 0xD881, 0x8C8C, 0xC3B2, 0x8C8D, 0xD882, 0x8C8E, 0xD883, 0x8C8F, 0xD884, 0x8C90, 0xD885, 0x8C91, 0xD886, 0x8C92, 0xD887, + 0x8C93, 0xD888, 0x8C94, 0xF5F9, 0x8C95, 0xD889, 0x8C96, 0xD88A, 0x8C97, 0xD88B, 0x8C98, 0xF5F8, 0x8C99, 0xD88C, 0x8C9A, 0xD88D, + 0x8C9B, 0xD88E, 0x8C9C, 0xD88F, 0x8C9D, 0xD890, 0x8C9E, 0xD891, 0x8C9F, 0xD892, 0x8CA0, 0xD893, 0x8CA1, 0xD894, 0x8CA2, 0xD895, + 0x8CA3, 0xD896, 0x8CA4, 0xD897, 0x8CA5, 0xD898, 0x8CA6, 0xD899, 0x8CA7, 0xD89A, 0x8CA8, 0xD89B, 0x8CA9, 0xD89C, 0x8CAA, 0xD89D, + 0x8CAB, 0xD89E, 0x8CAC, 0xD89F, 0x8CAD, 0xD8A0, 0x8CAE, 0xD940, 0x8CAF, 0xD941, 0x8CB0, 0xD942, 0x8CB1, 0xD943, 0x8CB2, 0xD944, + 0x8CB3, 0xD945, 0x8CB4, 0xD946, 0x8CB5, 0xD947, 0x8CB6, 0xD948, 0x8CB7, 0xD949, 0x8CB8, 0xD94A, 0x8CB9, 0xD94B, 0x8CBA, 0xD94C, + 0x8CBB, 0xD94D, 0x8CBC, 0xD94E, 0x8CBD, 0xD94F, 0x8CBE, 0xD950, 0x8CBF, 0xD951, 0x8CC0, 0xD952, 0x8CC1, 0xD953, 0x8CC2, 0xD954, + 0x8CC3, 0xD955, 0x8CC4, 0xD956, 0x8CC5, 0xD957, 0x8CC6, 0xD958, 0x8CC7, 0xD959, 0x8CC8, 0xD95A, 0x8CC9, 0xD95B, 0x8CCA, 0xD95C, + 0x8CCB, 0xD95D, 0x8CCC, 0xD95E, 0x8CCD, 0xD95F, 0x8CCE, 0xD960, 0x8CCF, 0xD961, 0x8CD0, 0xD962, 0x8CD1, 0xD963, 0x8CD2, 0xD964, + 0x8CD3, 0xD965, 0x8CD4, 0xD966, 0x8CD5, 0xD967, 0x8CD6, 0xD968, 0x8CD7, 0xD969, 0x8CD8, 0xD96A, 0x8CD9, 0xD96B, 0x8CDA, 0xD96C, + 0x8CDB, 0xD96D, 0x8CDC, 0xD96E, 0x8CDD, 0xD96F, 0x8CDE, 0xD970, 0x8CDF, 0xD971, 0x8CE0, 0xD972, 0x8CE1, 0xD973, 0x8CE2, 0xD974, + 0x8CE3, 0xD975, 0x8CE4, 0xD976, 0x8CE5, 0xD977, 0x8CE6, 0xD978, 0x8CE7, 0xD979, 0x8CE8, 0xD97A, 0x8CE9, 0xD97B, 0x8CEA, 0xD97C, + 0x8CEB, 0xD97D, 0x8CEC, 0xD97E, 0x8CED, 0xD980, 0x8CEE, 0xD981, 0x8CEF, 0xD982, 0x8CF0, 0xD983, 0x8CF1, 0xD984, 0x8CF2, 0xD985, + 0x8CF3, 0xD986, 0x8CF4, 0xD987, 0x8CF5, 0xD988, 0x8CF6, 0xD989, 0x8CF7, 0xD98A, 0x8CF8, 0xD98B, 0x8CF9, 0xD98C, 0x8CFA, 0xD98D, + 0x8CFB, 0xD98E, 0x8CFC, 0xD98F, 0x8CFD, 0xD990, 0x8CFE, 0xD991, 0x8CFF, 0xD992, 0x8D00, 0xD993, 0x8D01, 0xD994, 0x8D02, 0xD995, + 0x8D03, 0xD996, 0x8D04, 0xD997, 0x8D05, 0xD998, 0x8D06, 0xD999, 0x8D07, 0xD99A, 0x8D08, 0xD99B, 0x8D09, 0xD99C, 0x8D0A, 0xD99D, + 0x8D0B, 0xD99E, 0x8D0C, 0xD99F, 0x8D0D, 0xD9A0, 0x8D0E, 0xDA40, 0x8D0F, 0xDA41, 0x8D10, 0xDA42, 0x8D11, 0xDA43, 0x8D12, 0xDA44, + 0x8D13, 0xDA45, 0x8D14, 0xDA46, 0x8D15, 0xDA47, 0x8D16, 0xDA48, 0x8D17, 0xDA49, 0x8D18, 0xDA4A, 0x8D19, 0xDA4B, 0x8D1A, 0xDA4C, + 0x8D1B, 0xDA4D, 0x8D1C, 0xDA4E, 0x8D1D, 0xB1B4, 0x8D1E, 0xD5EA, 0x8D1F, 0xB8BA, 0x8D20, 0xDA4F, 0x8D21, 0xB9B1, 0x8D22, 0xB2C6, + 0x8D23, 0xD4F0, 0x8D24, 0xCFCD, 0x8D25, 0xB0DC, 0x8D26, 0xD5CB, 0x8D27, 0xBBF5, 0x8D28, 0xD6CA, 0x8D29, 0xB7B7, 0x8D2A, 0xCCB0, + 0x8D2B, 0xC6B6, 0x8D2C, 0xB1E1, 0x8D2D, 0xB9BA, 0x8D2E, 0xD6FC, 0x8D2F, 0xB9E1, 0x8D30, 0xB7A1, 0x8D31, 0xBCFA, 0x8D32, 0xEADA, + 0x8D33, 0xEADB, 0x8D34, 0xCCF9, 0x8D35, 0xB9F3, 0x8D36, 0xEADC, 0x8D37, 0xB4FB, 0x8D38, 0xC3B3, 0x8D39, 0xB7D1, 0x8D3A, 0xBAD8, + 0x8D3B, 0xEADD, 0x8D3C, 0xD4F4, 0x8D3D, 0xEADE, 0x8D3E, 0xBCD6, 0x8D3F, 0xBBDF, 0x8D40, 0xEADF, 0x8D41, 0xC1DE, 0x8D42, 0xC2B8, + 0x8D43, 0xD4DF, 0x8D44, 0xD7CA, 0x8D45, 0xEAE0, 0x8D46, 0xEAE1, 0x8D47, 0xEAE4, 0x8D48, 0xEAE2, 0x8D49, 0xEAE3, 0x8D4A, 0xC9DE, + 0x8D4B, 0xB8B3, 0x8D4C, 0xB6C4, 0x8D4D, 0xEAE5, 0x8D4E, 0xCAEA, 0x8D4F, 0xC9CD, 0x8D50, 0xB4CD, 0x8D51, 0xDA50, 0x8D52, 0xDA51, + 0x8D53, 0xE2D9, 0x8D54, 0xC5E2, 0x8D55, 0xEAE6, 0x8D56, 0xC0B5, 0x8D57, 0xDA52, 0x8D58, 0xD7B8, 0x8D59, 0xEAE7, 0x8D5A, 0xD7AC, + 0x8D5B, 0xC8FC, 0x8D5C, 0xD8D3, 0x8D5D, 0xD8CD, 0x8D5E, 0xD4DE, 0x8D5F, 0xDA53, 0x8D60, 0xD4F9, 0x8D61, 0xC9C4, 0x8D62, 0xD3AE, + 0x8D63, 0xB8D3, 0x8D64, 0xB3E0, 0x8D65, 0xDA54, 0x8D66, 0xC9E2, 0x8D67, 0xF4F6, 0x8D68, 0xDA55, 0x8D69, 0xDA56, 0x8D6A, 0xDA57, + 0x8D6B, 0xBAD5, 0x8D6C, 0xDA58, 0x8D6D, 0xF4F7, 0x8D6E, 0xDA59, 0x8D6F, 0xDA5A, 0x8D70, 0xD7DF, 0x8D71, 0xDA5B, 0x8D72, 0xDA5C, + 0x8D73, 0xF4F1, 0x8D74, 0xB8B0, 0x8D75, 0xD5D4, 0x8D76, 0xB8CF, 0x8D77, 0xC6F0, 0x8D78, 0xDA5D, 0x8D79, 0xDA5E, 0x8D7A, 0xDA5F, + 0x8D7B, 0xDA60, 0x8D7C, 0xDA61, 0x8D7D, 0xDA62, 0x8D7E, 0xDA63, 0x8D7F, 0xDA64, 0x8D80, 0xDA65, 0x8D81, 0xB3C3, 0x8D82, 0xDA66, + 0x8D83, 0xDA67, 0x8D84, 0xF4F2, 0x8D85, 0xB3AC, 0x8D86, 0xDA68, 0x8D87, 0xDA69, 0x8D88, 0xDA6A, 0x8D89, 0xDA6B, 0x8D8A, 0xD4BD, + 0x8D8B, 0xC7F7, 0x8D8C, 0xDA6C, 0x8D8D, 0xDA6D, 0x8D8E, 0xDA6E, 0x8D8F, 0xDA6F, 0x8D90, 0xDA70, 0x8D91, 0xF4F4, 0x8D92, 0xDA71, + 0x8D93, 0xDA72, 0x8D94, 0xF4F3, 0x8D95, 0xDA73, 0x8D96, 0xDA74, 0x8D97, 0xDA75, 0x8D98, 0xDA76, 0x8D99, 0xDA77, 0x8D9A, 0xDA78, + 0x8D9B, 0xDA79, 0x8D9C, 0xDA7A, 0x8D9D, 0xDA7B, 0x8D9E, 0xDA7C, 0x8D9F, 0xCCCB, 0x8DA0, 0xDA7D, 0x8DA1, 0xDA7E, 0x8DA2, 0xDA80, + 0x8DA3, 0xC8A4, 0x8DA4, 0xDA81, 0x8DA5, 0xDA82, 0x8DA6, 0xDA83, 0x8DA7, 0xDA84, 0x8DA8, 0xDA85, 0x8DA9, 0xDA86, 0x8DAA, 0xDA87, + 0x8DAB, 0xDA88, 0x8DAC, 0xDA89, 0x8DAD, 0xDA8A, 0x8DAE, 0xDA8B, 0x8DAF, 0xDA8C, 0x8DB0, 0xDA8D, 0x8DB1, 0xF4F5, 0x8DB2, 0xDA8E, + 0x8DB3, 0xD7E3, 0x8DB4, 0xC5BF, 0x8DB5, 0xF5C0, 0x8DB6, 0xDA8F, 0x8DB7, 0xDA90, 0x8DB8, 0xF5BB, 0x8DB9, 0xDA91, 0x8DBA, 0xF5C3, + 0x8DBB, 0xDA92, 0x8DBC, 0xF5C2, 0x8DBD, 0xDA93, 0x8DBE, 0xD6BA, 0x8DBF, 0xF5C1, 0x8DC0, 0xDA94, 0x8DC1, 0xDA95, 0x8DC2, 0xDA96, + 0x8DC3, 0xD4BE, 0x8DC4, 0xF5C4, 0x8DC5, 0xDA97, 0x8DC6, 0xF5CC, 0x8DC7, 0xDA98, 0x8DC8, 0xDA99, 0x8DC9, 0xDA9A, 0x8DCA, 0xDA9B, + 0x8DCB, 0xB0CF, 0x8DCC, 0xB5F8, 0x8DCD, 0xDA9C, 0x8DCE, 0xF5C9, 0x8DCF, 0xF5CA, 0x8DD0, 0xDA9D, 0x8DD1, 0xC5DC, 0x8DD2, 0xDA9E, + 0x8DD3, 0xDA9F, 0x8DD4, 0xDAA0, 0x8DD5, 0xDB40, 0x8DD6, 0xF5C5, 0x8DD7, 0xF5C6, 0x8DD8, 0xDB41, 0x8DD9, 0xDB42, 0x8DDA, 0xF5C7, + 0x8DDB, 0xF5CB, 0x8DDC, 0xDB43, 0x8DDD, 0xBEE0, 0x8DDE, 0xF5C8, 0x8DDF, 0xB8FA, 0x8DE0, 0xDB44, 0x8DE1, 0xDB45, 0x8DE2, 0xDB46, + 0x8DE3, 0xF5D0, 0x8DE4, 0xF5D3, 0x8DE5, 0xDB47, 0x8DE6, 0xDB48, 0x8DE7, 0xDB49, 0x8DE8, 0xBFE7, 0x8DE9, 0xDB4A, 0x8DEA, 0xB9F2, + 0x8DEB, 0xF5BC, 0x8DEC, 0xF5CD, 0x8DED, 0xDB4B, 0x8DEE, 0xDB4C, 0x8DEF, 0xC2B7, 0x8DF0, 0xDB4D, 0x8DF1, 0xDB4E, 0x8DF2, 0xDB4F, + 0x8DF3, 0xCCF8, 0x8DF4, 0xDB50, 0x8DF5, 0xBCF9, 0x8DF6, 0xDB51, 0x8DF7, 0xF5CE, 0x8DF8, 0xF5CF, 0x8DF9, 0xF5D1, 0x8DFA, 0xB6E5, + 0x8DFB, 0xF5D2, 0x8DFC, 0xDB52, 0x8DFD, 0xF5D5, 0x8DFE, 0xDB53, 0x8DFF, 0xDB54, 0x8E00, 0xDB55, 0x8E01, 0xDB56, 0x8E02, 0xDB57, + 0x8E03, 0xDB58, 0x8E04, 0xDB59, 0x8E05, 0xF5BD, 0x8E06, 0xDB5A, 0x8E07, 0xDB5B, 0x8E08, 0xDB5C, 0x8E09, 0xF5D4, 0x8E0A, 0xD3BB, + 0x8E0B, 0xDB5D, 0x8E0C, 0xB3EC, 0x8E0D, 0xDB5E, 0x8E0E, 0xDB5F, 0x8E0F, 0xCCA4, 0x8E10, 0xDB60, 0x8E11, 0xDB61, 0x8E12, 0xDB62, + 0x8E13, 0xDB63, 0x8E14, 0xF5D6, 0x8E15, 0xDB64, 0x8E16, 0xDB65, 0x8E17, 0xDB66, 0x8E18, 0xDB67, 0x8E19, 0xDB68, 0x8E1A, 0xDB69, + 0x8E1B, 0xDB6A, 0x8E1C, 0xDB6B, 0x8E1D, 0xF5D7, 0x8E1E, 0xBEE1, 0x8E1F, 0xF5D8, 0x8E20, 0xDB6C, 0x8E21, 0xDB6D, 0x8E22, 0xCCDF, + 0x8E23, 0xF5DB, 0x8E24, 0xDB6E, 0x8E25, 0xDB6F, 0x8E26, 0xDB70, 0x8E27, 0xDB71, 0x8E28, 0xDB72, 0x8E29, 0xB2C8, 0x8E2A, 0xD7D9, + 0x8E2B, 0xDB73, 0x8E2C, 0xF5D9, 0x8E2D, 0xDB74, 0x8E2E, 0xF5DA, 0x8E2F, 0xF5DC, 0x8E30, 0xDB75, 0x8E31, 0xF5E2, 0x8E32, 0xDB76, + 0x8E33, 0xDB77, 0x8E34, 0xDB78, 0x8E35, 0xF5E0, 0x8E36, 0xDB79, 0x8E37, 0xDB7A, 0x8E38, 0xDB7B, 0x8E39, 0xF5DF, 0x8E3A, 0xF5DD, + 0x8E3B, 0xDB7C, 0x8E3C, 0xDB7D, 0x8E3D, 0xF5E1, 0x8E3E, 0xDB7E, 0x8E3F, 0xDB80, 0x8E40, 0xF5DE, 0x8E41, 0xF5E4, 0x8E42, 0xF5E5, + 0x8E43, 0xDB81, 0x8E44, 0xCCE3, 0x8E45, 0xDB82, 0x8E46, 0xDB83, 0x8E47, 0xE5BF, 0x8E48, 0xB5B8, 0x8E49, 0xF5E3, 0x8E4A, 0xF5E8, + 0x8E4B, 0xCCA3, 0x8E4C, 0xDB84, 0x8E4D, 0xDB85, 0x8E4E, 0xDB86, 0x8E4F, 0xDB87, 0x8E50, 0xDB88, 0x8E51, 0xF5E6, 0x8E52, 0xF5E7, + 0x8E53, 0xDB89, 0x8E54, 0xDB8A, 0x8E55, 0xDB8B, 0x8E56, 0xDB8C, 0x8E57, 0xDB8D, 0x8E58, 0xDB8E, 0x8E59, 0xF5BE, 0x8E5A, 0xDB8F, + 0x8E5B, 0xDB90, 0x8E5C, 0xDB91, 0x8E5D, 0xDB92, 0x8E5E, 0xDB93, 0x8E5F, 0xDB94, 0x8E60, 0xDB95, 0x8E61, 0xDB96, 0x8E62, 0xDB97, + 0x8E63, 0xDB98, 0x8E64, 0xDB99, 0x8E65, 0xDB9A, 0x8E66, 0xB1C4, 0x8E67, 0xDB9B, 0x8E68, 0xDB9C, 0x8E69, 0xF5BF, 0x8E6A, 0xDB9D, + 0x8E6B, 0xDB9E, 0x8E6C, 0xB5C5, 0x8E6D, 0xB2E4, 0x8E6E, 0xDB9F, 0x8E6F, 0xF5EC, 0x8E70, 0xF5E9, 0x8E71, 0xDBA0, 0x8E72, 0xB6D7, + 0x8E73, 0xDC40, 0x8E74, 0xF5ED, 0x8E75, 0xDC41, 0x8E76, 0xF5EA, 0x8E77, 0xDC42, 0x8E78, 0xDC43, 0x8E79, 0xDC44, 0x8E7A, 0xDC45, + 0x8E7B, 0xDC46, 0x8E7C, 0xF5EB, 0x8E7D, 0xDC47, 0x8E7E, 0xDC48, 0x8E7F, 0xB4DA, 0x8E80, 0xDC49, 0x8E81, 0xD4EA, 0x8E82, 0xDC4A, + 0x8E83, 0xDC4B, 0x8E84, 0xDC4C, 0x8E85, 0xF5EE, 0x8E86, 0xDC4D, 0x8E87, 0xB3F9, 0x8E88, 0xDC4E, 0x8E89, 0xDC4F, 0x8E8A, 0xDC50, + 0x8E8B, 0xDC51, 0x8E8C, 0xDC52, 0x8E8D, 0xDC53, 0x8E8E, 0xDC54, 0x8E8F, 0xF5EF, 0x8E90, 0xF5F1, 0x8E91, 0xDC55, 0x8E92, 0xDC56, + 0x8E93, 0xDC57, 0x8E94, 0xF5F0, 0x8E95, 0xDC58, 0x8E96, 0xDC59, 0x8E97, 0xDC5A, 0x8E98, 0xDC5B, 0x8E99, 0xDC5C, 0x8E9A, 0xDC5D, + 0x8E9B, 0xDC5E, 0x8E9C, 0xF5F2, 0x8E9D, 0xDC5F, 0x8E9E, 0xF5F3, 0x8E9F, 0xDC60, 0x8EA0, 0xDC61, 0x8EA1, 0xDC62, 0x8EA2, 0xDC63, + 0x8EA3, 0xDC64, 0x8EA4, 0xDC65, 0x8EA5, 0xDC66, 0x8EA6, 0xDC67, 0x8EA7, 0xDC68, 0x8EA8, 0xDC69, 0x8EA9, 0xDC6A, 0x8EAA, 0xDC6B, + 0x8EAB, 0xC9ED, 0x8EAC, 0xB9AA, 0x8EAD, 0xDC6C, 0x8EAE, 0xDC6D, 0x8EAF, 0xC7FB, 0x8EB0, 0xDC6E, 0x8EB1, 0xDC6F, 0x8EB2, 0xB6E3, + 0x8EB3, 0xDC70, 0x8EB4, 0xDC71, 0x8EB5, 0xDC72, 0x8EB6, 0xDC73, 0x8EB7, 0xDC74, 0x8EB8, 0xDC75, 0x8EB9, 0xDC76, 0x8EBA, 0xCCC9, + 0x8EBB, 0xDC77, 0x8EBC, 0xDC78, 0x8EBD, 0xDC79, 0x8EBE, 0xDC7A, 0x8EBF, 0xDC7B, 0x8EC0, 0xDC7C, 0x8EC1, 0xDC7D, 0x8EC2, 0xDC7E, + 0x8EC3, 0xDC80, 0x8EC4, 0xDC81, 0x8EC5, 0xDC82, 0x8EC6, 0xDC83, 0x8EC7, 0xDC84, 0x8EC8, 0xDC85, 0x8EC9, 0xDC86, 0x8ECA, 0xDC87, + 0x8ECB, 0xDC88, 0x8ECC, 0xDC89, 0x8ECD, 0xDC8A, 0x8ECE, 0xEAA6, 0x8ECF, 0xDC8B, 0x8ED0, 0xDC8C, 0x8ED1, 0xDC8D, 0x8ED2, 0xDC8E, + 0x8ED3, 0xDC8F, 0x8ED4, 0xDC90, 0x8ED5, 0xDC91, 0x8ED6, 0xDC92, 0x8ED7, 0xDC93, 0x8ED8, 0xDC94, 0x8ED9, 0xDC95, 0x8EDA, 0xDC96, + 0x8EDB, 0xDC97, 0x8EDC, 0xDC98, 0x8EDD, 0xDC99, 0x8EDE, 0xDC9A, 0x8EDF, 0xDC9B, 0x8EE0, 0xDC9C, 0x8EE1, 0xDC9D, 0x8EE2, 0xDC9E, + 0x8EE3, 0xDC9F, 0x8EE4, 0xDCA0, 0x8EE5, 0xDD40, 0x8EE6, 0xDD41, 0x8EE7, 0xDD42, 0x8EE8, 0xDD43, 0x8EE9, 0xDD44, 0x8EEA, 0xDD45, + 0x8EEB, 0xDD46, 0x8EEC, 0xDD47, 0x8EED, 0xDD48, 0x8EEE, 0xDD49, 0x8EEF, 0xDD4A, 0x8EF0, 0xDD4B, 0x8EF1, 0xDD4C, 0x8EF2, 0xDD4D, + 0x8EF3, 0xDD4E, 0x8EF4, 0xDD4F, 0x8EF5, 0xDD50, 0x8EF6, 0xDD51, 0x8EF7, 0xDD52, 0x8EF8, 0xDD53, 0x8EF9, 0xDD54, 0x8EFA, 0xDD55, + 0x8EFB, 0xDD56, 0x8EFC, 0xDD57, 0x8EFD, 0xDD58, 0x8EFE, 0xDD59, 0x8EFF, 0xDD5A, 0x8F00, 0xDD5B, 0x8F01, 0xDD5C, 0x8F02, 0xDD5D, + 0x8F03, 0xDD5E, 0x8F04, 0xDD5F, 0x8F05, 0xDD60, 0x8F06, 0xDD61, 0x8F07, 0xDD62, 0x8F08, 0xDD63, 0x8F09, 0xDD64, 0x8F0A, 0xDD65, + 0x8F0B, 0xDD66, 0x8F0C, 0xDD67, 0x8F0D, 0xDD68, 0x8F0E, 0xDD69, 0x8F0F, 0xDD6A, 0x8F10, 0xDD6B, 0x8F11, 0xDD6C, 0x8F12, 0xDD6D, + 0x8F13, 0xDD6E, 0x8F14, 0xDD6F, 0x8F15, 0xDD70, 0x8F16, 0xDD71, 0x8F17, 0xDD72, 0x8F18, 0xDD73, 0x8F19, 0xDD74, 0x8F1A, 0xDD75, + 0x8F1B, 0xDD76, 0x8F1C, 0xDD77, 0x8F1D, 0xDD78, 0x8F1E, 0xDD79, 0x8F1F, 0xDD7A, 0x8F20, 0xDD7B, 0x8F21, 0xDD7C, 0x8F22, 0xDD7D, + 0x8F23, 0xDD7E, 0x8F24, 0xDD80, 0x8F25, 0xDD81, 0x8F26, 0xDD82, 0x8F27, 0xDD83, 0x8F28, 0xDD84, 0x8F29, 0xDD85, 0x8F2A, 0xDD86, + 0x8F2B, 0xDD87, 0x8F2C, 0xDD88, 0x8F2D, 0xDD89, 0x8F2E, 0xDD8A, 0x8F2F, 0xDD8B, 0x8F30, 0xDD8C, 0x8F31, 0xDD8D, 0x8F32, 0xDD8E, + 0x8F33, 0xDD8F, 0x8F34, 0xDD90, 0x8F35, 0xDD91, 0x8F36, 0xDD92, 0x8F37, 0xDD93, 0x8F38, 0xDD94, 0x8F39, 0xDD95, 0x8F3A, 0xDD96, + 0x8F3B, 0xDD97, 0x8F3C, 0xDD98, 0x8F3D, 0xDD99, 0x8F3E, 0xDD9A, 0x8F3F, 0xDD9B, 0x8F40, 0xDD9C, 0x8F41, 0xDD9D, 0x8F42, 0xDD9E, + 0x8F43, 0xDD9F, 0x8F44, 0xDDA0, 0x8F45, 0xDE40, 0x8F46, 0xDE41, 0x8F47, 0xDE42, 0x8F48, 0xDE43, 0x8F49, 0xDE44, 0x8F4A, 0xDE45, + 0x8F4B, 0xDE46, 0x8F4C, 0xDE47, 0x8F4D, 0xDE48, 0x8F4E, 0xDE49, 0x8F4F, 0xDE4A, 0x8F50, 0xDE4B, 0x8F51, 0xDE4C, 0x8F52, 0xDE4D, + 0x8F53, 0xDE4E, 0x8F54, 0xDE4F, 0x8F55, 0xDE50, 0x8F56, 0xDE51, 0x8F57, 0xDE52, 0x8F58, 0xDE53, 0x8F59, 0xDE54, 0x8F5A, 0xDE55, + 0x8F5B, 0xDE56, 0x8F5C, 0xDE57, 0x8F5D, 0xDE58, 0x8F5E, 0xDE59, 0x8F5F, 0xDE5A, 0x8F60, 0xDE5B, 0x8F61, 0xDE5C, 0x8F62, 0xDE5D, + 0x8F63, 0xDE5E, 0x8F64, 0xDE5F, 0x8F65, 0xDE60, 0x8F66, 0xB3B5, 0x8F67, 0xD4FE, 0x8F68, 0xB9EC, 0x8F69, 0xD0F9, 0x8F6A, 0xDE61, + 0x8F6B, 0xE9ED, 0x8F6C, 0xD7AA, 0x8F6D, 0xE9EE, 0x8F6E, 0xC2D6, 0x8F6F, 0xC8ED, 0x8F70, 0xBAE4, 0x8F71, 0xE9EF, 0x8F72, 0xE9F0, + 0x8F73, 0xE9F1, 0x8F74, 0xD6E1, 0x8F75, 0xE9F2, 0x8F76, 0xE9F3, 0x8F77, 0xE9F5, 0x8F78, 0xE9F4, 0x8F79, 0xE9F6, 0x8F7A, 0xE9F7, + 0x8F7B, 0xC7E1, 0x8F7C, 0xE9F8, 0x8F7D, 0xD4D8, 0x8F7E, 0xE9F9, 0x8F7F, 0xBDCE, 0x8F80, 0xDE62, 0x8F81, 0xE9FA, 0x8F82, 0xE9FB, + 0x8F83, 0xBDCF, 0x8F84, 0xE9FC, 0x8F85, 0xB8A8, 0x8F86, 0xC1BE, 0x8F87, 0xE9FD, 0x8F88, 0xB1B2, 0x8F89, 0xBBD4, 0x8F8A, 0xB9F5, + 0x8F8B, 0xE9FE, 0x8F8C, 0xDE63, 0x8F8D, 0xEAA1, 0x8F8E, 0xEAA2, 0x8F8F, 0xEAA3, 0x8F90, 0xB7F8, 0x8F91, 0xBCAD, 0x8F92, 0xDE64, + 0x8F93, 0xCAE4, 0x8F94, 0xE0CE, 0x8F95, 0xD4AF, 0x8F96, 0xCFBD, 0x8F97, 0xD5B7, 0x8F98, 0xEAA4, 0x8F99, 0xD5DE, 0x8F9A, 0xEAA5, + 0x8F9B, 0xD0C1, 0x8F9C, 0xB9BC, 0x8F9D, 0xDE65, 0x8F9E, 0xB4C7, 0x8F9F, 0xB1D9, 0x8FA0, 0xDE66, 0x8FA1, 0xDE67, 0x8FA2, 0xDE68, + 0x8FA3, 0xC0B1, 0x8FA4, 0xDE69, 0x8FA5, 0xDE6A, 0x8FA6, 0xDE6B, 0x8FA7, 0xDE6C, 0x8FA8, 0xB1E6, 0x8FA9, 0xB1E7, 0x8FAA, 0xDE6D, + 0x8FAB, 0xB1E8, 0x8FAC, 0xDE6E, 0x8FAD, 0xDE6F, 0x8FAE, 0xDE70, 0x8FAF, 0xDE71, 0x8FB0, 0xB3BD, 0x8FB1, 0xC8E8, 0x8FB2, 0xDE72, + 0x8FB3, 0xDE73, 0x8FB4, 0xDE74, 0x8FB5, 0xDE75, 0x8FB6, 0xE5C1, 0x8FB7, 0xDE76, 0x8FB8, 0xDE77, 0x8FB9, 0xB1DF, 0x8FBA, 0xDE78, + 0x8FBB, 0xDE79, 0x8FBC, 0xDE7A, 0x8FBD, 0xC1C9, 0x8FBE, 0xB4EF, 0x8FBF, 0xDE7B, 0x8FC0, 0xDE7C, 0x8FC1, 0xC7A8, 0x8FC2, 0xD3D8, + 0x8FC3, 0xDE7D, 0x8FC4, 0xC6F9, 0x8FC5, 0xD1B8, 0x8FC6, 0xDE7E, 0x8FC7, 0xB9FD, 0x8FC8, 0xC2F5, 0x8FC9, 0xDE80, 0x8FCA, 0xDE81, + 0x8FCB, 0xDE82, 0x8FCC, 0xDE83, 0x8FCD, 0xDE84, 0x8FCE, 0xD3AD, 0x8FCF, 0xDE85, 0x8FD0, 0xD4CB, 0x8FD1, 0xBDFC, 0x8FD2, 0xDE86, + 0x8FD3, 0xE5C2, 0x8FD4, 0xB7B5, 0x8FD5, 0xE5C3, 0x8FD6, 0xDE87, 0x8FD7, 0xDE88, 0x8FD8, 0xBBB9, 0x8FD9, 0xD5E2, 0x8FDA, 0xDE89, + 0x8FDB, 0xBDF8, 0x8FDC, 0xD4B6, 0x8FDD, 0xCEA5, 0x8FDE, 0xC1AC, 0x8FDF, 0xB3D9, 0x8FE0, 0xDE8A, 0x8FE1, 0xDE8B, 0x8FE2, 0xCCF6, + 0x8FE3, 0xDE8C, 0x8FE4, 0xE5C6, 0x8FE5, 0xE5C4, 0x8FE6, 0xE5C8, 0x8FE7, 0xDE8D, 0x8FE8, 0xE5CA, 0x8FE9, 0xE5C7, 0x8FEA, 0xB5CF, + 0x8FEB, 0xC6C8, 0x8FEC, 0xDE8E, 0x8FED, 0xB5FC, 0x8FEE, 0xE5C5, 0x8FEF, 0xDE8F, 0x8FF0, 0xCAF6, 0x8FF1, 0xDE90, 0x8FF2, 0xDE91, + 0x8FF3, 0xE5C9, 0x8FF4, 0xDE92, 0x8FF5, 0xDE93, 0x8FF6, 0xDE94, 0x8FF7, 0xC3D4, 0x8FF8, 0xB1C5, 0x8FF9, 0xBCA3, 0x8FFA, 0xDE95, + 0x8FFB, 0xDE96, 0x8FFC, 0xDE97, 0x8FFD, 0xD7B7, 0x8FFE, 0xDE98, 0x8FFF, 0xDE99, 0x9000, 0xCDCB, 0x9001, 0xCBCD, 0x9002, 0xCACA, + 0x9003, 0xCCD3, 0x9004, 0xE5CC, 0x9005, 0xE5CB, 0x9006, 0xC4E6, 0x9007, 0xDE9A, 0x9008, 0xDE9B, 0x9009, 0xD1A1, 0x900A, 0xD1B7, + 0x900B, 0xE5CD, 0x900C, 0xDE9C, 0x900D, 0xE5D0, 0x900E, 0xDE9D, 0x900F, 0xCDB8, 0x9010, 0xD6F0, 0x9011, 0xE5CF, 0x9012, 0xB5DD, + 0x9013, 0xDE9E, 0x9014, 0xCDBE, 0x9015, 0xDE9F, 0x9016, 0xE5D1, 0x9017, 0xB6BA, 0x9018, 0xDEA0, 0x9019, 0xDF40, 0x901A, 0xCDA8, + 0x901B, 0xB9E4, 0x901C, 0xDF41, 0x901D, 0xCAC5, 0x901E, 0xB3D1, 0x901F, 0xCBD9, 0x9020, 0xD4EC, 0x9021, 0xE5D2, 0x9022, 0xB7EA, + 0x9023, 0xDF42, 0x9024, 0xDF43, 0x9025, 0xDF44, 0x9026, 0xE5CE, 0x9027, 0xDF45, 0x9028, 0xDF46, 0x9029, 0xDF47, 0x902A, 0xDF48, + 0x902B, 0xDF49, 0x902C, 0xDF4A, 0x902D, 0xE5D5, 0x902E, 0xB4FE, 0x902F, 0xE5D6, 0x9030, 0xDF4B, 0x9031, 0xDF4C, 0x9032, 0xDF4D, + 0x9033, 0xDF4E, 0x9034, 0xDF4F, 0x9035, 0xE5D3, 0x9036, 0xE5D4, 0x9037, 0xDF50, 0x9038, 0xD2DD, 0x9039, 0xDF51, 0x903A, 0xDF52, + 0x903B, 0xC2DF, 0x903C, 0xB1C6, 0x903D, 0xDF53, 0x903E, 0xD3E2, 0x903F, 0xDF54, 0x9040, 0xDF55, 0x9041, 0xB6DD, 0x9042, 0xCBEC, + 0x9043, 0xDF56, 0x9044, 0xE5D7, 0x9045, 0xDF57, 0x9046, 0xDF58, 0x9047, 0xD3F6, 0x9048, 0xDF59, 0x9049, 0xDF5A, 0x904A, 0xDF5B, + 0x904B, 0xDF5C, 0x904C, 0xDF5D, 0x904D, 0xB1E9, 0x904E, 0xDF5E, 0x904F, 0xB6F4, 0x9050, 0xE5DA, 0x9051, 0xE5D8, 0x9052, 0xE5D9, + 0x9053, 0xB5C0, 0x9054, 0xDF5F, 0x9055, 0xDF60, 0x9056, 0xDF61, 0x9057, 0xD2C5, 0x9058, 0xE5DC, 0x9059, 0xDF62, 0x905A, 0xDF63, + 0x905B, 0xE5DE, 0x905C, 0xDF64, 0x905D, 0xDF65, 0x905E, 0xDF66, 0x905F, 0xDF67, 0x9060, 0xDF68, 0x9061, 0xDF69, 0x9062, 0xE5DD, + 0x9063, 0xC7B2, 0x9064, 0xDF6A, 0x9065, 0xD2A3, 0x9066, 0xDF6B, 0x9067, 0xDF6C, 0x9068, 0xE5DB, 0x9069, 0xDF6D, 0x906A, 0xDF6E, + 0x906B, 0xDF6F, 0x906C, 0xDF70, 0x906D, 0xD4E2, 0x906E, 0xD5DA, 0x906F, 0xDF71, 0x9070, 0xDF72, 0x9071, 0xDF73, 0x9072, 0xDF74, + 0x9073, 0xDF75, 0x9074, 0xE5E0, 0x9075, 0xD7F1, 0x9076, 0xDF76, 0x9077, 0xDF77, 0x9078, 0xDF78, 0x9079, 0xDF79, 0x907A, 0xDF7A, + 0x907B, 0xDF7B, 0x907C, 0xDF7C, 0x907D, 0xE5E1, 0x907E, 0xDF7D, 0x907F, 0xB1DC, 0x9080, 0xD1FB, 0x9081, 0xDF7E, 0x9082, 0xE5E2, + 0x9083, 0xE5E4, 0x9084, 0xDF80, 0x9085, 0xDF81, 0x9086, 0xDF82, 0x9087, 0xDF83, 0x9088, 0xE5E3, 0x9089, 0xDF84, 0x908A, 0xDF85, + 0x908B, 0xE5E5, 0x908C, 0xDF86, 0x908D, 0xDF87, 0x908E, 0xDF88, 0x908F, 0xDF89, 0x9090, 0xDF8A, 0x9091, 0xD2D8, 0x9092, 0xDF8B, + 0x9093, 0xB5CB, 0x9094, 0xDF8C, 0x9095, 0xE7DF, 0x9096, 0xDF8D, 0x9097, 0xDAF5, 0x9098, 0xDF8E, 0x9099, 0xDAF8, 0x909A, 0xDF8F, + 0x909B, 0xDAF6, 0x909C, 0xDF90, 0x909D, 0xDAF7, 0x909E, 0xDF91, 0x909F, 0xDF92, 0x90A0, 0xDF93, 0x90A1, 0xDAFA, 0x90A2, 0xD0CF, + 0x90A3, 0xC4C7, 0x90A4, 0xDF94, 0x90A5, 0xDF95, 0x90A6, 0xB0EE, 0x90A7, 0xDF96, 0x90A8, 0xDF97, 0x90A9, 0xDF98, 0x90AA, 0xD0B0, + 0x90AB, 0xDF99, 0x90AC, 0xDAF9, 0x90AD, 0xDF9A, 0x90AE, 0xD3CA, 0x90AF, 0xBAAA, 0x90B0, 0xDBA2, 0x90B1, 0xC7F1, 0x90B2, 0xDF9B, + 0x90B3, 0xDAFC, 0x90B4, 0xDAFB, 0x90B5, 0xC9DB, 0x90B6, 0xDAFD, 0x90B7, 0xDF9C, 0x90B8, 0xDBA1, 0x90B9, 0xD7DE, 0x90BA, 0xDAFE, + 0x90BB, 0xC1DA, 0x90BC, 0xDF9D, 0x90BD, 0xDF9E, 0x90BE, 0xDBA5, 0x90BF, 0xDF9F, 0x90C0, 0xDFA0, 0x90C1, 0xD3F4, 0x90C2, 0xE040, + 0x90C3, 0xE041, 0x90C4, 0xDBA7, 0x90C5, 0xDBA4, 0x90C6, 0xE042, 0x90C7, 0xDBA8, 0x90C8, 0xE043, 0x90C9, 0xE044, 0x90CA, 0xBDBC, + 0x90CB, 0xE045, 0x90CC, 0xE046, 0x90CD, 0xE047, 0x90CE, 0xC0C9, 0x90CF, 0xDBA3, 0x90D0, 0xDBA6, 0x90D1, 0xD6A3, 0x90D2, 0xE048, + 0x90D3, 0xDBA9, 0x90D4, 0xE049, 0x90D5, 0xE04A, 0x90D6, 0xE04B, 0x90D7, 0xDBAD, 0x90D8, 0xE04C, 0x90D9, 0xE04D, 0x90DA, 0xE04E, + 0x90DB, 0xDBAE, 0x90DC, 0xDBAC, 0x90DD, 0xBAC2, 0x90DE, 0xE04F, 0x90DF, 0xE050, 0x90E0, 0xE051, 0x90E1, 0xBFA4, 0x90E2, 0xDBAB, + 0x90E3, 0xE052, 0x90E4, 0xE053, 0x90E5, 0xE054, 0x90E6, 0xDBAA, 0x90E7, 0xD4C7, 0x90E8, 0xB2BF, 0x90E9, 0xE055, 0x90EA, 0xE056, + 0x90EB, 0xDBAF, 0x90EC, 0xE057, 0x90ED, 0xB9F9, 0x90EE, 0xE058, 0x90EF, 0xDBB0, 0x90F0, 0xE059, 0x90F1, 0xE05A, 0x90F2, 0xE05B, + 0x90F3, 0xE05C, 0x90F4, 0xB3BB, 0x90F5, 0xE05D, 0x90F6, 0xE05E, 0x90F7, 0xE05F, 0x90F8, 0xB5A6, 0x90F9, 0xE060, 0x90FA, 0xE061, + 0x90FB, 0xE062, 0x90FC, 0xE063, 0x90FD, 0xB6BC, 0x90FE, 0xDBB1, 0x90FF, 0xE064, 0x9100, 0xE065, 0x9101, 0xE066, 0x9102, 0xB6F5, + 0x9103, 0xE067, 0x9104, 0xDBB2, 0x9105, 0xE068, 0x9106, 0xE069, 0x9107, 0xE06A, 0x9108, 0xE06B, 0x9109, 0xE06C, 0x910A, 0xE06D, + 0x910B, 0xE06E, 0x910C, 0xE06F, 0x910D, 0xE070, 0x910E, 0xE071, 0x910F, 0xE072, 0x9110, 0xE073, 0x9111, 0xE074, 0x9112, 0xE075, + 0x9113, 0xE076, 0x9114, 0xE077, 0x9115, 0xE078, 0x9116, 0xE079, 0x9117, 0xE07A, 0x9118, 0xE07B, 0x9119, 0xB1C9, 0x911A, 0xE07C, + 0x911B, 0xE07D, 0x911C, 0xE07E, 0x911D, 0xE080, 0x911E, 0xDBB4, 0x911F, 0xE081, 0x9120, 0xE082, 0x9121, 0xE083, 0x9122, 0xDBB3, + 0x9123, 0xDBB5, 0x9124, 0xE084, 0x9125, 0xE085, 0x9126, 0xE086, 0x9127, 0xE087, 0x9128, 0xE088, 0x9129, 0xE089, 0x912A, 0xE08A, + 0x912B, 0xE08B, 0x912C, 0xE08C, 0x912D, 0xE08D, 0x912E, 0xE08E, 0x912F, 0xDBB7, 0x9130, 0xE08F, 0x9131, 0xDBB6, 0x9132, 0xE090, + 0x9133, 0xE091, 0x9134, 0xE092, 0x9135, 0xE093, 0x9136, 0xE094, 0x9137, 0xE095, 0x9138, 0xE096, 0x9139, 0xDBB8, 0x913A, 0xE097, + 0x913B, 0xE098, 0x913C, 0xE099, 0x913D, 0xE09A, 0x913E, 0xE09B, 0x913F, 0xE09C, 0x9140, 0xE09D, 0x9141, 0xE09E, 0x9142, 0xE09F, + 0x9143, 0xDBB9, 0x9144, 0xE0A0, 0x9145, 0xE140, 0x9146, 0xDBBA, 0x9147, 0xE141, 0x9148, 0xE142, 0x9149, 0xD3CF, 0x914A, 0xF4FA, + 0x914B, 0xC7F5, 0x914C, 0xD7C3, 0x914D, 0xC5E4, 0x914E, 0xF4FC, 0x914F, 0xF4FD, 0x9150, 0xF4FB, 0x9151, 0xE143, 0x9152, 0xBEC6, + 0x9153, 0xE144, 0x9154, 0xE145, 0x9155, 0xE146, 0x9156, 0xE147, 0x9157, 0xD0EF, 0x9158, 0xE148, 0x9159, 0xE149, 0x915A, 0xB7D3, + 0x915B, 0xE14A, 0x915C, 0xE14B, 0x915D, 0xD4CD, 0x915E, 0xCCAA, 0x915F, 0xE14C, 0x9160, 0xE14D, 0x9161, 0xF5A2, 0x9162, 0xF5A1, + 0x9163, 0xBAA8, 0x9164, 0xF4FE, 0x9165, 0xCBD6, 0x9166, 0xE14E, 0x9167, 0xE14F, 0x9168, 0xE150, 0x9169, 0xF5A4, 0x916A, 0xC0D2, + 0x916B, 0xE151, 0x916C, 0xB3EA, 0x916D, 0xE152, 0x916E, 0xCDAA, 0x916F, 0xF5A5, 0x9170, 0xF5A3, 0x9171, 0xBDB4, 0x9172, 0xF5A8, + 0x9173, 0xE153, 0x9174, 0xF5A9, 0x9175, 0xBDCD, 0x9176, 0xC3B8, 0x9177, 0xBFE1, 0x9178, 0xCBE1, 0x9179, 0xF5AA, 0x917A, 0xE154, + 0x917B, 0xE155, 0x917C, 0xE156, 0x917D, 0xF5A6, 0x917E, 0xF5A7, 0x917F, 0xC4F0, 0x9180, 0xE157, 0x9181, 0xE158, 0x9182, 0xE159, + 0x9183, 0xE15A, 0x9184, 0xE15B, 0x9185, 0xF5AC, 0x9186, 0xE15C, 0x9187, 0xB4BC, 0x9188, 0xE15D, 0x9189, 0xD7ED, 0x918A, 0xE15E, + 0x918B, 0xB4D7, 0x918C, 0xF5AB, 0x918D, 0xF5AE, 0x918E, 0xE15F, 0x918F, 0xE160, 0x9190, 0xF5AD, 0x9191, 0xF5AF, 0x9192, 0xD0D1, + 0x9193, 0xE161, 0x9194, 0xE162, 0x9195, 0xE163, 0x9196, 0xE164, 0x9197, 0xE165, 0x9198, 0xE166, 0x9199, 0xE167, 0x919A, 0xC3D1, + 0x919B, 0xC8A9, 0x919C, 0xE168, 0x919D, 0xE169, 0x919E, 0xE16A, 0x919F, 0xE16B, 0x91A0, 0xE16C, 0x91A1, 0xE16D, 0x91A2, 0xF5B0, + 0x91A3, 0xF5B1, 0x91A4, 0xE16E, 0x91A5, 0xE16F, 0x91A6, 0xE170, 0x91A7, 0xE171, 0x91A8, 0xE172, 0x91A9, 0xE173, 0x91AA, 0xF5B2, + 0x91AB, 0xE174, 0x91AC, 0xE175, 0x91AD, 0xF5B3, 0x91AE, 0xF5B4, 0x91AF, 0xF5B5, 0x91B0, 0xE176, 0x91B1, 0xE177, 0x91B2, 0xE178, + 0x91B3, 0xE179, 0x91B4, 0xF5B7, 0x91B5, 0xF5B6, 0x91B6, 0xE17A, 0x91B7, 0xE17B, 0x91B8, 0xE17C, 0x91B9, 0xE17D, 0x91BA, 0xF5B8, + 0x91BB, 0xE17E, 0x91BC, 0xE180, 0x91BD, 0xE181, 0x91BE, 0xE182, 0x91BF, 0xE183, 0x91C0, 0xE184, 0x91C1, 0xE185, 0x91C2, 0xE186, + 0x91C3, 0xE187, 0x91C4, 0xE188, 0x91C5, 0xE189, 0x91C6, 0xE18A, 0x91C7, 0xB2C9, 0x91C8, 0xE18B, 0x91C9, 0xD3D4, 0x91CA, 0xCACD, + 0x91CB, 0xE18C, 0x91CC, 0xC0EF, 0x91CD, 0xD6D8, 0x91CE, 0xD2B0, 0x91CF, 0xC1BF, 0x91D0, 0xE18D, 0x91D1, 0xBDF0, 0x91D2, 0xE18E, + 0x91D3, 0xE18F, 0x91D4, 0xE190, 0x91D5, 0xE191, 0x91D6, 0xE192, 0x91D7, 0xE193, 0x91D8, 0xE194, 0x91D9, 0xE195, 0x91DA, 0xE196, + 0x91DB, 0xE197, 0x91DC, 0xB8AA, 0x91DD, 0xE198, 0x91DE, 0xE199, 0x91DF, 0xE19A, 0x91E0, 0xE19B, 0x91E1, 0xE19C, 0x91E2, 0xE19D, + 0x91E3, 0xE19E, 0x91E4, 0xE19F, 0x91E5, 0xE1A0, 0x91E6, 0xE240, 0x91E7, 0xE241, 0x91E8, 0xE242, 0x91E9, 0xE243, 0x91EA, 0xE244, + 0x91EB, 0xE245, 0x91EC, 0xE246, 0x91ED, 0xE247, 0x91EE, 0xE248, 0x91EF, 0xE249, 0x91F0, 0xE24A, 0x91F1, 0xE24B, 0x91F2, 0xE24C, + 0x91F3, 0xE24D, 0x91F4, 0xE24E, 0x91F5, 0xE24F, 0x91F6, 0xE250, 0x91F7, 0xE251, 0x91F8, 0xE252, 0x91F9, 0xE253, 0x91FA, 0xE254, + 0x91FB, 0xE255, 0x91FC, 0xE256, 0x91FD, 0xE257, 0x91FE, 0xE258, 0x91FF, 0xE259, 0x9200, 0xE25A, 0x9201, 0xE25B, 0x9202, 0xE25C, + 0x9203, 0xE25D, 0x9204, 0xE25E, 0x9205, 0xE25F, 0x9206, 0xE260, 0x9207, 0xE261, 0x9208, 0xE262, 0x9209, 0xE263, 0x920A, 0xE264, + 0x920B, 0xE265, 0x920C, 0xE266, 0x920D, 0xE267, 0x920E, 0xE268, 0x920F, 0xE269, 0x9210, 0xE26A, 0x9211, 0xE26B, 0x9212, 0xE26C, + 0x9213, 0xE26D, 0x9214, 0xE26E, 0x9215, 0xE26F, 0x9216, 0xE270, 0x9217, 0xE271, 0x9218, 0xE272, 0x9219, 0xE273, 0x921A, 0xE274, + 0x921B, 0xE275, 0x921C, 0xE276, 0x921D, 0xE277, 0x921E, 0xE278, 0x921F, 0xE279, 0x9220, 0xE27A, 0x9221, 0xE27B, 0x9222, 0xE27C, + 0x9223, 0xE27D, 0x9224, 0xE27E, 0x9225, 0xE280, 0x9226, 0xE281, 0x9227, 0xE282, 0x9228, 0xE283, 0x9229, 0xE284, 0x922A, 0xE285, + 0x922B, 0xE286, 0x922C, 0xE287, 0x922D, 0xE288, 0x922E, 0xE289, 0x922F, 0xE28A, 0x9230, 0xE28B, 0x9231, 0xE28C, 0x9232, 0xE28D, + 0x9233, 0xE28E, 0x9234, 0xE28F, 0x9235, 0xE290, 0x9236, 0xE291, 0x9237, 0xE292, 0x9238, 0xE293, 0x9239, 0xE294, 0x923A, 0xE295, + 0x923B, 0xE296, 0x923C, 0xE297, 0x923D, 0xE298, 0x923E, 0xE299, 0x923F, 0xE29A, 0x9240, 0xE29B, 0x9241, 0xE29C, 0x9242, 0xE29D, + 0x9243, 0xE29E, 0x9244, 0xE29F, 0x9245, 0xE2A0, 0x9246, 0xE340, 0x9247, 0xE341, 0x9248, 0xE342, 0x9249, 0xE343, 0x924A, 0xE344, + 0x924B, 0xE345, 0x924C, 0xE346, 0x924D, 0xE347, 0x924E, 0xE348, 0x924F, 0xE349, 0x9250, 0xE34A, 0x9251, 0xE34B, 0x9252, 0xE34C, + 0x9253, 0xE34D, 0x9254, 0xE34E, 0x9255, 0xE34F, 0x9256, 0xE350, 0x9257, 0xE351, 0x9258, 0xE352, 0x9259, 0xE353, 0x925A, 0xE354, + 0x925B, 0xE355, 0x925C, 0xE356, 0x925D, 0xE357, 0x925E, 0xE358, 0x925F, 0xE359, 0x9260, 0xE35A, 0x9261, 0xE35B, 0x9262, 0xE35C, + 0x9263, 0xE35D, 0x9264, 0xE35E, 0x9265, 0xE35F, 0x9266, 0xE360, 0x9267, 0xE361, 0x9268, 0xE362, 0x9269, 0xE363, 0x926A, 0xE364, + 0x926B, 0xE365, 0x926C, 0xE366, 0x926D, 0xE367, 0x926E, 0xE368, 0x926F, 0xE369, 0x9270, 0xE36A, 0x9271, 0xE36B, 0x9272, 0xE36C, + 0x9273, 0xE36D, 0x9274, 0xBCF8, 0x9275, 0xE36E, 0x9276, 0xE36F, 0x9277, 0xE370, 0x9278, 0xE371, 0x9279, 0xE372, 0x927A, 0xE373, + 0x927B, 0xE374, 0x927C, 0xE375, 0x927D, 0xE376, 0x927E, 0xE377, 0x927F, 0xE378, 0x9280, 0xE379, 0x9281, 0xE37A, 0x9282, 0xE37B, + 0x9283, 0xE37C, 0x9284, 0xE37D, 0x9285, 0xE37E, 0x9286, 0xE380, 0x9287, 0xE381, 0x9288, 0xE382, 0x9289, 0xE383, 0x928A, 0xE384, + 0x928B, 0xE385, 0x928C, 0xE386, 0x928D, 0xE387, 0x928E, 0xF6C6, 0x928F, 0xE388, 0x9290, 0xE389, 0x9291, 0xE38A, 0x9292, 0xE38B, + 0x9293, 0xE38C, 0x9294, 0xE38D, 0x9295, 0xE38E, 0x9296, 0xE38F, 0x9297, 0xE390, 0x9298, 0xE391, 0x9299, 0xE392, 0x929A, 0xE393, + 0x929B, 0xE394, 0x929C, 0xE395, 0x929D, 0xE396, 0x929E, 0xE397, 0x929F, 0xE398, 0x92A0, 0xE399, 0x92A1, 0xE39A, 0x92A2, 0xE39B, + 0x92A3, 0xE39C, 0x92A4, 0xE39D, 0x92A5, 0xE39E, 0x92A6, 0xE39F, 0x92A7, 0xE3A0, 0x92A8, 0xE440, 0x92A9, 0xE441, 0x92AA, 0xE442, + 0x92AB, 0xE443, 0x92AC, 0xE444, 0x92AD, 0xE445, 0x92AE, 0xF6C7, 0x92AF, 0xE446, 0x92B0, 0xE447, 0x92B1, 0xE448, 0x92B2, 0xE449, + 0x92B3, 0xE44A, 0x92B4, 0xE44B, 0x92B5, 0xE44C, 0x92B6, 0xE44D, 0x92B7, 0xE44E, 0x92B8, 0xE44F, 0x92B9, 0xE450, 0x92BA, 0xE451, + 0x92BB, 0xE452, 0x92BC, 0xE453, 0x92BD, 0xE454, 0x92BE, 0xE455, 0x92BF, 0xE456, 0x92C0, 0xE457, 0x92C1, 0xE458, 0x92C2, 0xE459, + 0x92C3, 0xE45A, 0x92C4, 0xE45B, 0x92C5, 0xE45C, 0x92C6, 0xE45D, 0x92C7, 0xE45E, 0x92C8, 0xF6C8, 0x92C9, 0xE45F, 0x92CA, 0xE460, + 0x92CB, 0xE461, 0x92CC, 0xE462, 0x92CD, 0xE463, 0x92CE, 0xE464, 0x92CF, 0xE465, 0x92D0, 0xE466, 0x92D1, 0xE467, 0x92D2, 0xE468, + 0x92D3, 0xE469, 0x92D4, 0xE46A, 0x92D5, 0xE46B, 0x92D6, 0xE46C, 0x92D7, 0xE46D, 0x92D8, 0xE46E, 0x92D9, 0xE46F, 0x92DA, 0xE470, + 0x92DB, 0xE471, 0x92DC, 0xE472, 0x92DD, 0xE473, 0x92DE, 0xE474, 0x92DF, 0xE475, 0x92E0, 0xE476, 0x92E1, 0xE477, 0x92E2, 0xE478, + 0x92E3, 0xE479, 0x92E4, 0xE47A, 0x92E5, 0xE47B, 0x92E6, 0xE47C, 0x92E7, 0xE47D, 0x92E8, 0xE47E, 0x92E9, 0xE480, 0x92EA, 0xE481, + 0x92EB, 0xE482, 0x92EC, 0xE483, 0x92ED, 0xE484, 0x92EE, 0xE485, 0x92EF, 0xE486, 0x92F0, 0xE487, 0x92F1, 0xE488, 0x92F2, 0xE489, + 0x92F3, 0xE48A, 0x92F4, 0xE48B, 0x92F5, 0xE48C, 0x92F6, 0xE48D, 0x92F7, 0xE48E, 0x92F8, 0xE48F, 0x92F9, 0xE490, 0x92FA, 0xE491, + 0x92FB, 0xE492, 0x92FC, 0xE493, 0x92FD, 0xE494, 0x92FE, 0xE495, 0x92FF, 0xE496, 0x9300, 0xE497, 0x9301, 0xE498, 0x9302, 0xE499, + 0x9303, 0xE49A, 0x9304, 0xE49B, 0x9305, 0xE49C, 0x9306, 0xE49D, 0x9307, 0xE49E, 0x9308, 0xE49F, 0x9309, 0xE4A0, 0x930A, 0xE540, + 0x930B, 0xE541, 0x930C, 0xE542, 0x930D, 0xE543, 0x930E, 0xE544, 0x930F, 0xE545, 0x9310, 0xE546, 0x9311, 0xE547, 0x9312, 0xE548, + 0x9313, 0xE549, 0x9314, 0xE54A, 0x9315, 0xE54B, 0x9316, 0xE54C, 0x9317, 0xE54D, 0x9318, 0xE54E, 0x9319, 0xE54F, 0x931A, 0xE550, + 0x931B, 0xE551, 0x931C, 0xE552, 0x931D, 0xE553, 0x931E, 0xE554, 0x931F, 0xE555, 0x9320, 0xE556, 0x9321, 0xE557, 0x9322, 0xE558, + 0x9323, 0xE559, 0x9324, 0xE55A, 0x9325, 0xE55B, 0x9326, 0xE55C, 0x9327, 0xE55D, 0x9328, 0xE55E, 0x9329, 0xE55F, 0x932A, 0xE560, + 0x932B, 0xE561, 0x932C, 0xE562, 0x932D, 0xE563, 0x932E, 0xE564, 0x932F, 0xE565, 0x9330, 0xE566, 0x9331, 0xE567, 0x9332, 0xE568, + 0x9333, 0xE569, 0x9334, 0xE56A, 0x9335, 0xE56B, 0x9336, 0xE56C, 0x9337, 0xE56D, 0x9338, 0xE56E, 0x9339, 0xE56F, 0x933A, 0xE570, + 0x933B, 0xE571, 0x933C, 0xE572, 0x933D, 0xE573, 0x933E, 0xF6C9, 0x933F, 0xE574, 0x9340, 0xE575, 0x9341, 0xE576, 0x9342, 0xE577, + 0x9343, 0xE578, 0x9344, 0xE579, 0x9345, 0xE57A, 0x9346, 0xE57B, 0x9347, 0xE57C, 0x9348, 0xE57D, 0x9349, 0xE57E, 0x934A, 0xE580, + 0x934B, 0xE581, 0x934C, 0xE582, 0x934D, 0xE583, 0x934E, 0xE584, 0x934F, 0xE585, 0x9350, 0xE586, 0x9351, 0xE587, 0x9352, 0xE588, + 0x9353, 0xE589, 0x9354, 0xE58A, 0x9355, 0xE58B, 0x9356, 0xE58C, 0x9357, 0xE58D, 0x9358, 0xE58E, 0x9359, 0xE58F, 0x935A, 0xE590, + 0x935B, 0xE591, 0x935C, 0xE592, 0x935D, 0xE593, 0x935E, 0xE594, 0x935F, 0xE595, 0x9360, 0xE596, 0x9361, 0xE597, 0x9362, 0xE598, + 0x9363, 0xE599, 0x9364, 0xE59A, 0x9365, 0xE59B, 0x9366, 0xE59C, 0x9367, 0xE59D, 0x9368, 0xE59E, 0x9369, 0xE59F, 0x936A, 0xF6CA, + 0x936B, 0xE5A0, 0x936C, 0xE640, 0x936D, 0xE641, 0x936E, 0xE642, 0x936F, 0xE643, 0x9370, 0xE644, 0x9371, 0xE645, 0x9372, 0xE646, + 0x9373, 0xE647, 0x9374, 0xE648, 0x9375, 0xE649, 0x9376, 0xE64A, 0x9377, 0xE64B, 0x9378, 0xE64C, 0x9379, 0xE64D, 0x937A, 0xE64E, + 0x937B, 0xE64F, 0x937C, 0xE650, 0x937D, 0xE651, 0x937E, 0xE652, 0x937F, 0xE653, 0x9380, 0xE654, 0x9381, 0xE655, 0x9382, 0xE656, + 0x9383, 0xE657, 0x9384, 0xE658, 0x9385, 0xE659, 0x9386, 0xE65A, 0x9387, 0xE65B, 0x9388, 0xE65C, 0x9389, 0xE65D, 0x938A, 0xE65E, + 0x938B, 0xE65F, 0x938C, 0xE660, 0x938D, 0xE661, 0x938E, 0xE662, 0x938F, 0xF6CC, 0x9390, 0xE663, 0x9391, 0xE664, 0x9392, 0xE665, + 0x9393, 0xE666, 0x9394, 0xE667, 0x9395, 0xE668, 0x9396, 0xE669, 0x9397, 0xE66A, 0x9398, 0xE66B, 0x9399, 0xE66C, 0x939A, 0xE66D, + 0x939B, 0xE66E, 0x939C, 0xE66F, 0x939D, 0xE670, 0x939E, 0xE671, 0x939F, 0xE672, 0x93A0, 0xE673, 0x93A1, 0xE674, 0x93A2, 0xE675, + 0x93A3, 0xE676, 0x93A4, 0xE677, 0x93A5, 0xE678, 0x93A6, 0xE679, 0x93A7, 0xE67A, 0x93A8, 0xE67B, 0x93A9, 0xE67C, 0x93AA, 0xE67D, + 0x93AB, 0xE67E, 0x93AC, 0xE680, 0x93AD, 0xE681, 0x93AE, 0xE682, 0x93AF, 0xE683, 0x93B0, 0xE684, 0x93B1, 0xE685, 0x93B2, 0xE686, + 0x93B3, 0xE687, 0x93B4, 0xE688, 0x93B5, 0xE689, 0x93B6, 0xE68A, 0x93B7, 0xE68B, 0x93B8, 0xE68C, 0x93B9, 0xE68D, 0x93BA, 0xE68E, + 0x93BB, 0xE68F, 0x93BC, 0xE690, 0x93BD, 0xE691, 0x93BE, 0xE692, 0x93BF, 0xE693, 0x93C0, 0xE694, 0x93C1, 0xE695, 0x93C2, 0xE696, + 0x93C3, 0xE697, 0x93C4, 0xE698, 0x93C5, 0xE699, 0x93C6, 0xE69A, 0x93C7, 0xE69B, 0x93C8, 0xE69C, 0x93C9, 0xE69D, 0x93CA, 0xF6CB, + 0x93CB, 0xE69E, 0x93CC, 0xE69F, 0x93CD, 0xE6A0, 0x93CE, 0xE740, 0x93CF, 0xE741, 0x93D0, 0xE742, 0x93D1, 0xE743, 0x93D2, 0xE744, + 0x93D3, 0xE745, 0x93D4, 0xE746, 0x93D5, 0xE747, 0x93D6, 0xF7E9, 0x93D7, 0xE748, 0x93D8, 0xE749, 0x93D9, 0xE74A, 0x93DA, 0xE74B, + 0x93DB, 0xE74C, 0x93DC, 0xE74D, 0x93DD, 0xE74E, 0x93DE, 0xE74F, 0x93DF, 0xE750, 0x93E0, 0xE751, 0x93E1, 0xE752, 0x93E2, 0xE753, + 0x93E3, 0xE754, 0x93E4, 0xE755, 0x93E5, 0xE756, 0x93E6, 0xE757, 0x93E7, 0xE758, 0x93E8, 0xE759, 0x93E9, 0xE75A, 0x93EA, 0xE75B, + 0x93EB, 0xE75C, 0x93EC, 0xE75D, 0x93ED, 0xE75E, 0x93EE, 0xE75F, 0x93EF, 0xE760, 0x93F0, 0xE761, 0x93F1, 0xE762, 0x93F2, 0xE763, + 0x93F3, 0xE764, 0x93F4, 0xE765, 0x93F5, 0xE766, 0x93F6, 0xE767, 0x93F7, 0xE768, 0x93F8, 0xE769, 0x93F9, 0xE76A, 0x93FA, 0xE76B, + 0x93FB, 0xE76C, 0x93FC, 0xE76D, 0x93FD, 0xE76E, 0x93FE, 0xE76F, 0x93FF, 0xE770, 0x9400, 0xE771, 0x9401, 0xE772, 0x9402, 0xE773, + 0x9403, 0xE774, 0x9404, 0xE775, 0x9405, 0xE776, 0x9406, 0xE777, 0x9407, 0xE778, 0x9408, 0xE779, 0x9409, 0xE77A, 0x940A, 0xE77B, + 0x940B, 0xE77C, 0x940C, 0xE77D, 0x940D, 0xE77E, 0x940E, 0xE780, 0x940F, 0xE781, 0x9410, 0xE782, 0x9411, 0xE783, 0x9412, 0xE784, + 0x9413, 0xE785, 0x9414, 0xE786, 0x9415, 0xE787, 0x9416, 0xE788, 0x9417, 0xE789, 0x9418, 0xE78A, 0x9419, 0xE78B, 0x941A, 0xE78C, + 0x941B, 0xE78D, 0x941C, 0xE78E, 0x941D, 0xE78F, 0x941E, 0xE790, 0x941F, 0xE791, 0x9420, 0xE792, 0x9421, 0xE793, 0x9422, 0xE794, + 0x9423, 0xE795, 0x9424, 0xE796, 0x9425, 0xE797, 0x9426, 0xE798, 0x9427, 0xE799, 0x9428, 0xE79A, 0x9429, 0xE79B, 0x942A, 0xE79C, + 0x942B, 0xE79D, 0x942C, 0xE79E, 0x942D, 0xE79F, 0x942E, 0xE7A0, 0x942F, 0xE840, 0x9430, 0xE841, 0x9431, 0xE842, 0x9432, 0xE843, + 0x9433, 0xE844, 0x9434, 0xE845, 0x9435, 0xE846, 0x9436, 0xE847, 0x9437, 0xE848, 0x9438, 0xE849, 0x9439, 0xE84A, 0x943A, 0xE84B, + 0x943B, 0xE84C, 0x943C, 0xE84D, 0x943D, 0xE84E, 0x943E, 0xF6CD, 0x943F, 0xE84F, 0x9440, 0xE850, 0x9441, 0xE851, 0x9442, 0xE852, + 0x9443, 0xE853, 0x9444, 0xE854, 0x9445, 0xE855, 0x9446, 0xE856, 0x9447, 0xE857, 0x9448, 0xE858, 0x9449, 0xE859, 0x944A, 0xE85A, + 0x944B, 0xE85B, 0x944C, 0xE85C, 0x944D, 0xE85D, 0x944E, 0xE85E, 0x944F, 0xE85F, 0x9450, 0xE860, 0x9451, 0xE861, 0x9452, 0xE862, + 0x9453, 0xE863, 0x9454, 0xE864, 0x9455, 0xE865, 0x9456, 0xE866, 0x9457, 0xE867, 0x9458, 0xE868, 0x9459, 0xE869, 0x945A, 0xE86A, + 0x945B, 0xE86B, 0x945C, 0xE86C, 0x945D, 0xE86D, 0x945E, 0xE86E, 0x945F, 0xE86F, 0x9460, 0xE870, 0x9461, 0xE871, 0x9462, 0xE872, + 0x9463, 0xE873, 0x9464, 0xE874, 0x9465, 0xE875, 0x9466, 0xE876, 0x9467, 0xE877, 0x9468, 0xE878, 0x9469, 0xE879, 0x946A, 0xE87A, + 0x946B, 0xF6CE, 0x946C, 0xE87B, 0x946D, 0xE87C, 0x946E, 0xE87D, 0x946F, 0xE87E, 0x9470, 0xE880, 0x9471, 0xE881, 0x9472, 0xE882, + 0x9473, 0xE883, 0x9474, 0xE884, 0x9475, 0xE885, 0x9476, 0xE886, 0x9477, 0xE887, 0x9478, 0xE888, 0x9479, 0xE889, 0x947A, 0xE88A, + 0x947B, 0xE88B, 0x947C, 0xE88C, 0x947D, 0xE88D, 0x947E, 0xE88E, 0x947F, 0xE88F, 0x9480, 0xE890, 0x9481, 0xE891, 0x9482, 0xE892, + 0x9483, 0xE893, 0x9484, 0xE894, 0x9485, 0xEEC4, 0x9486, 0xEEC5, 0x9487, 0xEEC6, 0x9488, 0xD5EB, 0x9489, 0xB6A4, 0x948A, 0xEEC8, + 0x948B, 0xEEC7, 0x948C, 0xEEC9, 0x948D, 0xEECA, 0x948E, 0xC7A5, 0x948F, 0xEECB, 0x9490, 0xEECC, 0x9491, 0xE895, 0x9492, 0xB7B0, + 0x9493, 0xB5F6, 0x9494, 0xEECD, 0x9495, 0xEECF, 0x9496, 0xE896, 0x9497, 0xEECE, 0x9498, 0xE897, 0x9499, 0xB8C6, 0x949A, 0xEED0, + 0x949B, 0xEED1, 0x949C, 0xEED2, 0x949D, 0xB6DB, 0x949E, 0xB3AE, 0x949F, 0xD6D3, 0x94A0, 0xC4C6, 0x94A1, 0xB1B5, 0x94A2, 0xB8D6, + 0x94A3, 0xEED3, 0x94A4, 0xEED4, 0x94A5, 0xD4BF, 0x94A6, 0xC7D5, 0x94A7, 0xBEFB, 0x94A8, 0xCED9, 0x94A9, 0xB9B3, 0x94AA, 0xEED6, + 0x94AB, 0xEED5, 0x94AC, 0xEED8, 0x94AD, 0xEED7, 0x94AE, 0xC5A5, 0x94AF, 0xEED9, 0x94B0, 0xEEDA, 0x94B1, 0xC7AE, 0x94B2, 0xEEDB, + 0x94B3, 0xC7AF, 0x94B4, 0xEEDC, 0x94B5, 0xB2A7, 0x94B6, 0xEEDD, 0x94B7, 0xEEDE, 0x94B8, 0xEEDF, 0x94B9, 0xEEE0, 0x94BA, 0xEEE1, + 0x94BB, 0xD7EA, 0x94BC, 0xEEE2, 0x94BD, 0xEEE3, 0x94BE, 0xBCD8, 0x94BF, 0xEEE4, 0x94C0, 0xD3CB, 0x94C1, 0xCCFA, 0x94C2, 0xB2AC, + 0x94C3, 0xC1E5, 0x94C4, 0xEEE5, 0x94C5, 0xC7A6, 0x94C6, 0xC3AD, 0x94C7, 0xE898, 0x94C8, 0xEEE6, 0x94C9, 0xEEE7, 0x94CA, 0xEEE8, + 0x94CB, 0xEEE9, 0x94CC, 0xEEEA, 0x94CD, 0xEEEB, 0x94CE, 0xEEEC, 0x94CF, 0xE899, 0x94D0, 0xEEED, 0x94D1, 0xEEEE, 0x94D2, 0xEEEF, + 0x94D3, 0xE89A, 0x94D4, 0xE89B, 0x94D5, 0xEEF0, 0x94D6, 0xEEF1, 0x94D7, 0xEEF2, 0x94D8, 0xEEF4, 0x94D9, 0xEEF3, 0x94DA, 0xE89C, + 0x94DB, 0xEEF5, 0x94DC, 0xCDAD, 0x94DD, 0xC2C1, 0x94DE, 0xEEF6, 0x94DF, 0xEEF7, 0x94E0, 0xEEF8, 0x94E1, 0xD5A1, 0x94E2, 0xEEF9, + 0x94E3, 0xCFB3, 0x94E4, 0xEEFA, 0x94E5, 0xEEFB, 0x94E6, 0xE89D, 0x94E7, 0xEEFC, 0x94E8, 0xEEFD, 0x94E9, 0xEFA1, 0x94EA, 0xEEFE, + 0x94EB, 0xEFA2, 0x94EC, 0xB8F5, 0x94ED, 0xC3FA, 0x94EE, 0xEFA3, 0x94EF, 0xEFA4, 0x94F0, 0xBDC2, 0x94F1, 0xD2BF, 0x94F2, 0xB2F9, + 0x94F3, 0xEFA5, 0x94F4, 0xEFA6, 0x94F5, 0xEFA7, 0x94F6, 0xD2F8, 0x94F7, 0xEFA8, 0x94F8, 0xD6FD, 0x94F9, 0xEFA9, 0x94FA, 0xC6CC, + 0x94FB, 0xE89E, 0x94FC, 0xEFAA, 0x94FD, 0xEFAB, 0x94FE, 0xC1B4, 0x94FF, 0xEFAC, 0x9500, 0xCFFA, 0x9501, 0xCBF8, 0x9502, 0xEFAE, + 0x9503, 0xEFAD, 0x9504, 0xB3FA, 0x9505, 0xB9F8, 0x9506, 0xEFAF, 0x9507, 0xEFB0, 0x9508, 0xD0E2, 0x9509, 0xEFB1, 0x950A, 0xEFB2, + 0x950B, 0xB7E6, 0x950C, 0xD0BF, 0x950D, 0xEFB3, 0x950E, 0xEFB4, 0x950F, 0xEFB5, 0x9510, 0xC8F1, 0x9511, 0xCCE0, 0x9512, 0xEFB6, + 0x9513, 0xEFB7, 0x9514, 0xEFB8, 0x9515, 0xEFB9, 0x9516, 0xEFBA, 0x9517, 0xD5E0, 0x9518, 0xEFBB, 0x9519, 0xB4ED, 0x951A, 0xC3AA, + 0x951B, 0xEFBC, 0x951C, 0xE89F, 0x951D, 0xEFBD, 0x951E, 0xEFBE, 0x951F, 0xEFBF, 0x9520, 0xE8A0, 0x9521, 0xCEFD, 0x9522, 0xEFC0, + 0x9523, 0xC2E0, 0x9524, 0xB4B8, 0x9525, 0xD7B6, 0x9526, 0xBDF5, 0x9527, 0xE940, 0x9528, 0xCFC7, 0x9529, 0xEFC3, 0x952A, 0xEFC1, + 0x952B, 0xEFC2, 0x952C, 0xEFC4, 0x952D, 0xB6A7, 0x952E, 0xBCFC, 0x952F, 0xBEE2, 0x9530, 0xC3CC, 0x9531, 0xEFC5, 0x9532, 0xEFC6, + 0x9533, 0xE941, 0x9534, 0xEFC7, 0x9535, 0xEFCF, 0x9536, 0xEFC8, 0x9537, 0xEFC9, 0x9538, 0xEFCA, 0x9539, 0xC7C2, 0x953A, 0xEFF1, + 0x953B, 0xB6CD, 0x953C, 0xEFCB, 0x953D, 0xE942, 0x953E, 0xEFCC, 0x953F, 0xEFCD, 0x9540, 0xB6C6, 0x9541, 0xC3BE, 0x9542, 0xEFCE, + 0x9543, 0xE943, 0x9544, 0xEFD0, 0x9545, 0xEFD1, 0x9546, 0xEFD2, 0x9547, 0xD5F2, 0x9548, 0xE944, 0x9549, 0xEFD3, 0x954A, 0xC4F7, + 0x954B, 0xE945, 0x954C, 0xEFD4, 0x954D, 0xC4F8, 0x954E, 0xEFD5, 0x954F, 0xEFD6, 0x9550, 0xB8E4, 0x9551, 0xB0F7, 0x9552, 0xEFD7, + 0x9553, 0xEFD8, 0x9554, 0xEFD9, 0x9555, 0xE946, 0x9556, 0xEFDA, 0x9557, 0xEFDB, 0x9558, 0xEFDC, 0x9559, 0xEFDD, 0x955A, 0xE947, + 0x955B, 0xEFDE, 0x955C, 0xBEB5, 0x955D, 0xEFE1, 0x955E, 0xEFDF, 0x955F, 0xEFE0, 0x9560, 0xE948, 0x9561, 0xEFE2, 0x9562, 0xEFE3, + 0x9563, 0xC1CD, 0x9564, 0xEFE4, 0x9565, 0xEFE5, 0x9566, 0xEFE6, 0x9567, 0xEFE7, 0x9568, 0xEFE8, 0x9569, 0xEFE9, 0x956A, 0xEFEA, + 0x956B, 0xEFEB, 0x956C, 0xEFEC, 0x956D, 0xC0D8, 0x956E, 0xE949, 0x956F, 0xEFED, 0x9570, 0xC1AD, 0x9571, 0xEFEE, 0x9572, 0xEFEF, + 0x9573, 0xEFF0, 0x9574, 0xE94A, 0x9575, 0xE94B, 0x9576, 0xCFE2, 0x9577, 0xE94C, 0x9578, 0xE94D, 0x9579, 0xE94E, 0x957A, 0xE94F, + 0x957B, 0xE950, 0x957C, 0xE951, 0x957D, 0xE952, 0x957E, 0xE953, 0x957F, 0xB3A4, 0x9580, 0xE954, 0x9581, 0xE955, 0x9582, 0xE956, + 0x9583, 0xE957, 0x9584, 0xE958, 0x9585, 0xE959, 0x9586, 0xE95A, 0x9587, 0xE95B, 0x9588, 0xE95C, 0x9589, 0xE95D, 0x958A, 0xE95E, + 0x958B, 0xE95F, 0x958C, 0xE960, 0x958D, 0xE961, 0x958E, 0xE962, 0x958F, 0xE963, 0x9590, 0xE964, 0x9591, 0xE965, 0x9592, 0xE966, + 0x9593, 0xE967, 0x9594, 0xE968, 0x9595, 0xE969, 0x9596, 0xE96A, 0x9597, 0xE96B, 0x9598, 0xE96C, 0x9599, 0xE96D, 0x959A, 0xE96E, + 0x959B, 0xE96F, 0x959C, 0xE970, 0x959D, 0xE971, 0x959E, 0xE972, 0x959F, 0xE973, 0x95A0, 0xE974, 0x95A1, 0xE975, 0x95A2, 0xE976, + 0x95A3, 0xE977, 0x95A4, 0xE978, 0x95A5, 0xE979, 0x95A6, 0xE97A, 0x95A7, 0xE97B, 0x95A8, 0xE97C, 0x95A9, 0xE97D, 0x95AA, 0xE97E, + 0x95AB, 0xE980, 0x95AC, 0xE981, 0x95AD, 0xE982, 0x95AE, 0xE983, 0x95AF, 0xE984, 0x95B0, 0xE985, 0x95B1, 0xE986, 0x95B2, 0xE987, + 0x95B3, 0xE988, 0x95B4, 0xE989, 0x95B5, 0xE98A, 0x95B6, 0xE98B, 0x95B7, 0xE98C, 0x95B8, 0xE98D, 0x95B9, 0xE98E, 0x95BA, 0xE98F, + 0x95BB, 0xE990, 0x95BC, 0xE991, 0x95BD, 0xE992, 0x95BE, 0xE993, 0x95BF, 0xE994, 0x95C0, 0xE995, 0x95C1, 0xE996, 0x95C2, 0xE997, + 0x95C3, 0xE998, 0x95C4, 0xE999, 0x95C5, 0xE99A, 0x95C6, 0xE99B, 0x95C7, 0xE99C, 0x95C8, 0xE99D, 0x95C9, 0xE99E, 0x95CA, 0xE99F, + 0x95CB, 0xE9A0, 0x95CC, 0xEA40, 0x95CD, 0xEA41, 0x95CE, 0xEA42, 0x95CF, 0xEA43, 0x95D0, 0xEA44, 0x95D1, 0xEA45, 0x95D2, 0xEA46, + 0x95D3, 0xEA47, 0x95D4, 0xEA48, 0x95D5, 0xEA49, 0x95D6, 0xEA4A, 0x95D7, 0xEA4B, 0x95D8, 0xEA4C, 0x95D9, 0xEA4D, 0x95DA, 0xEA4E, + 0x95DB, 0xEA4F, 0x95DC, 0xEA50, 0x95DD, 0xEA51, 0x95DE, 0xEA52, 0x95DF, 0xEA53, 0x95E0, 0xEA54, 0x95E1, 0xEA55, 0x95E2, 0xEA56, + 0x95E3, 0xEA57, 0x95E4, 0xEA58, 0x95E5, 0xEA59, 0x95E6, 0xEA5A, 0x95E7, 0xEA5B, 0x95E8, 0xC3C5, 0x95E9, 0xE3C5, 0x95EA, 0xC9C1, + 0x95EB, 0xE3C6, 0x95EC, 0xEA5C, 0x95ED, 0xB1D5, 0x95EE, 0xCECA, 0x95EF, 0xB4B3, 0x95F0, 0xC8F2, 0x95F1, 0xE3C7, 0x95F2, 0xCFD0, + 0x95F3, 0xE3C8, 0x95F4, 0xBCE4, 0x95F5, 0xE3C9, 0x95F6, 0xE3CA, 0x95F7, 0xC3C6, 0x95F8, 0xD5A2, 0x95F9, 0xC4D6, 0x95FA, 0xB9EB, + 0x95FB, 0xCEC5, 0x95FC, 0xE3CB, 0x95FD, 0xC3F6, 0x95FE, 0xE3CC, 0x95FF, 0xEA5D, 0x9600, 0xB7A7, 0x9601, 0xB8F3, 0x9602, 0xBAD2, + 0x9603, 0xE3CD, 0x9604, 0xE3CE, 0x9605, 0xD4C4, 0x9606, 0xE3CF, 0x9607, 0xEA5E, 0x9608, 0xE3D0, 0x9609, 0xD1CB, 0x960A, 0xE3D1, + 0x960B, 0xE3D2, 0x960C, 0xE3D3, 0x960D, 0xE3D4, 0x960E, 0xD1D6, 0x960F, 0xE3D5, 0x9610, 0xB2FB, 0x9611, 0xC0BB, 0x9612, 0xE3D6, + 0x9613, 0xEA5F, 0x9614, 0xC0AB, 0x9615, 0xE3D7, 0x9616, 0xE3D8, 0x9617, 0xE3D9, 0x9618, 0xEA60, 0x9619, 0xE3DA, 0x961A, 0xE3DB, + 0x961B, 0xEA61, 0x961C, 0xB8B7, 0x961D, 0xDAE2, 0x961E, 0xEA62, 0x961F, 0xB6D3, 0x9620, 0xEA63, 0x9621, 0xDAE4, 0x9622, 0xDAE3, + 0x9623, 0xEA64, 0x9624, 0xEA65, 0x9625, 0xEA66, 0x9626, 0xEA67, 0x9627, 0xEA68, 0x9628, 0xEA69, 0x9629, 0xEA6A, 0x962A, 0xDAE6, + 0x962B, 0xEA6B, 0x962C, 0xEA6C, 0x962D, 0xEA6D, 0x962E, 0xC8EE, 0x962F, 0xEA6E, 0x9630, 0xEA6F, 0x9631, 0xDAE5, 0x9632, 0xB7C0, + 0x9633, 0xD1F4, 0x9634, 0xD2F5, 0x9635, 0xD5F3, 0x9636, 0xBDD7, 0x9637, 0xEA70, 0x9638, 0xEA71, 0x9639, 0xEA72, 0x963A, 0xEA73, + 0x963B, 0xD7E8, 0x963C, 0xDAE8, 0x963D, 0xDAE7, 0x963E, 0xEA74, 0x963F, 0xB0A2, 0x9640, 0xCDD3, 0x9641, 0xEA75, 0x9642, 0xDAE9, + 0x9643, 0xEA76, 0x9644, 0xB8BD, 0x9645, 0xBCCA, 0x9646, 0xC2BD, 0x9647, 0xC2A4, 0x9648, 0xB3C2, 0x9649, 0xDAEA, 0x964A, 0xEA77, + 0x964B, 0xC2AA, 0x964C, 0xC4B0, 0x964D, 0xBDB5, 0x964E, 0xEA78, 0x964F, 0xEA79, 0x9650, 0xCFDE, 0x9651, 0xEA7A, 0x9652, 0xEA7B, + 0x9653, 0xEA7C, 0x9654, 0xDAEB, 0x9655, 0xC9C2, 0x9656, 0xEA7D, 0x9657, 0xEA7E, 0x9658, 0xEA80, 0x9659, 0xEA81, 0x965A, 0xEA82, + 0x965B, 0xB1DD, 0x965C, 0xEA83, 0x965D, 0xEA84, 0x965E, 0xEA85, 0x965F, 0xDAEC, 0x9660, 0xEA86, 0x9661, 0xB6B8, 0x9662, 0xD4BA, + 0x9663, 0xEA87, 0x9664, 0xB3FD, 0x9665, 0xEA88, 0x9666, 0xEA89, 0x9667, 0xDAED, 0x9668, 0xD4C9, 0x9669, 0xCFD5, 0x966A, 0xC5E3, + 0x966B, 0xEA8A, 0x966C, 0xDAEE, 0x966D, 0xEA8B, 0x966E, 0xEA8C, 0x966F, 0xEA8D, 0x9670, 0xEA8E, 0x9671, 0xEA8F, 0x9672, 0xDAEF, + 0x9673, 0xEA90, 0x9674, 0xDAF0, 0x9675, 0xC1EA, 0x9676, 0xCCD5, 0x9677, 0xCFDD, 0x9678, 0xEA91, 0x9679, 0xEA92, 0x967A, 0xEA93, + 0x967B, 0xEA94, 0x967C, 0xEA95, 0x967D, 0xEA96, 0x967E, 0xEA97, 0x967F, 0xEA98, 0x9680, 0xEA99, 0x9681, 0xEA9A, 0x9682, 0xEA9B, + 0x9683, 0xEA9C, 0x9684, 0xEA9D, 0x9685, 0xD3E7, 0x9686, 0xC2A1, 0x9687, 0xEA9E, 0x9688, 0xDAF1, 0x9689, 0xEA9F, 0x968A, 0xEAA0, + 0x968B, 0xCBE5, 0x968C, 0xEB40, 0x968D, 0xDAF2, 0x968E, 0xEB41, 0x968F, 0xCBE6, 0x9690, 0xD2FE, 0x9691, 0xEB42, 0x9692, 0xEB43, + 0x9693, 0xEB44, 0x9694, 0xB8F4, 0x9695, 0xEB45, 0x9696, 0xEB46, 0x9697, 0xDAF3, 0x9698, 0xB0AF, 0x9699, 0xCFB6, 0x969A, 0xEB47, + 0x969B, 0xEB48, 0x969C, 0xD5CF, 0x969D, 0xEB49, 0x969E, 0xEB4A, 0x969F, 0xEB4B, 0x96A0, 0xEB4C, 0x96A1, 0xEB4D, 0x96A2, 0xEB4E, + 0x96A3, 0xEB4F, 0x96A4, 0xEB50, 0x96A5, 0xEB51, 0x96A6, 0xEB52, 0x96A7, 0xCBED, 0x96A8, 0xEB53, 0x96A9, 0xEB54, 0x96AA, 0xEB55, + 0x96AB, 0xEB56, 0x96AC, 0xEB57, 0x96AD, 0xEB58, 0x96AE, 0xEB59, 0x96AF, 0xEB5A, 0x96B0, 0xDAF4, 0x96B1, 0xEB5B, 0x96B2, 0xEB5C, + 0x96B3, 0xE3C4, 0x96B4, 0xEB5D, 0x96B5, 0xEB5E, 0x96B6, 0xC1A5, 0x96B7, 0xEB5F, 0x96B8, 0xEB60, 0x96B9, 0xF6BF, 0x96BA, 0xEB61, + 0x96BB, 0xEB62, 0x96BC, 0xF6C0, 0x96BD, 0xF6C1, 0x96BE, 0xC4D1, 0x96BF, 0xEB63, 0x96C0, 0xC8B8, 0x96C1, 0xD1E3, 0x96C2, 0xEB64, + 0x96C3, 0xEB65, 0x96C4, 0xD0DB, 0x96C5, 0xD1C5, 0x96C6, 0xBCAF, 0x96C7, 0xB9CD, 0x96C8, 0xEB66, 0x96C9, 0xEFF4, 0x96CA, 0xEB67, + 0x96CB, 0xEB68, 0x96CC, 0xB4C6, 0x96CD, 0xD3BA, 0x96CE, 0xF6C2, 0x96CF, 0xB3FB, 0x96D0, 0xEB69, 0x96D1, 0xEB6A, 0x96D2, 0xF6C3, + 0x96D3, 0xEB6B, 0x96D4, 0xEB6C, 0x96D5, 0xB5F1, 0x96D6, 0xEB6D, 0x96D7, 0xEB6E, 0x96D8, 0xEB6F, 0x96D9, 0xEB70, 0x96DA, 0xEB71, + 0x96DB, 0xEB72, 0x96DC, 0xEB73, 0x96DD, 0xEB74, 0x96DE, 0xEB75, 0x96DF, 0xEB76, 0x96E0, 0xF6C5, 0x96E1, 0xEB77, 0x96E2, 0xEB78, + 0x96E3, 0xEB79, 0x96E4, 0xEB7A, 0x96E5, 0xEB7B, 0x96E6, 0xEB7C, 0x96E7, 0xEB7D, 0x96E8, 0xD3EA, 0x96E9, 0xF6A7, 0x96EA, 0xD1A9, + 0x96EB, 0xEB7E, 0x96EC, 0xEB80, 0x96ED, 0xEB81, 0x96EE, 0xEB82, 0x96EF, 0xF6A9, 0x96F0, 0xEB83, 0x96F1, 0xEB84, 0x96F2, 0xEB85, + 0x96F3, 0xF6A8, 0x96F4, 0xEB86, 0x96F5, 0xEB87, 0x96F6, 0xC1E3, 0x96F7, 0xC0D7, 0x96F8, 0xEB88, 0x96F9, 0xB1A2, 0x96FA, 0xEB89, + 0x96FB, 0xEB8A, 0x96FC, 0xEB8B, 0x96FD, 0xEB8C, 0x96FE, 0xCEED, 0x96FF, 0xEB8D, 0x9700, 0xD0E8, 0x9701, 0xF6AB, 0x9702, 0xEB8E, + 0x9703, 0xEB8F, 0x9704, 0xCFF6, 0x9705, 0xEB90, 0x9706, 0xF6AA, 0x9707, 0xD5F0, 0x9708, 0xF6AC, 0x9709, 0xC3B9, 0x970A, 0xEB91, + 0x970B, 0xEB92, 0x970C, 0xEB93, 0x970D, 0xBBF4, 0x970E, 0xF6AE, 0x970F, 0xF6AD, 0x9710, 0xEB94, 0x9711, 0xEB95, 0x9712, 0xEB96, + 0x9713, 0xC4DE, 0x9714, 0xEB97, 0x9715, 0xEB98, 0x9716, 0xC1D8, 0x9717, 0xEB99, 0x9718, 0xEB9A, 0x9719, 0xEB9B, 0x971A, 0xEB9C, + 0x971B, 0xEB9D, 0x971C, 0xCBAA, 0x971D, 0xEB9E, 0x971E, 0xCFBC, 0x971F, 0xEB9F, 0x9720, 0xEBA0, 0x9721, 0xEC40, 0x9722, 0xEC41, + 0x9723, 0xEC42, 0x9724, 0xEC43, 0x9725, 0xEC44, 0x9726, 0xEC45, 0x9727, 0xEC46, 0x9728, 0xEC47, 0x9729, 0xEC48, 0x972A, 0xF6AF, + 0x972B, 0xEC49, 0x972C, 0xEC4A, 0x972D, 0xF6B0, 0x972E, 0xEC4B, 0x972F, 0xEC4C, 0x9730, 0xF6B1, 0x9731, 0xEC4D, 0x9732, 0xC2B6, + 0x9733, 0xEC4E, 0x9734, 0xEC4F, 0x9735, 0xEC50, 0x9736, 0xEC51, 0x9737, 0xEC52, 0x9738, 0xB0D4, 0x9739, 0xC5F9, 0x973A, 0xEC53, + 0x973B, 0xEC54, 0x973C, 0xEC55, 0x973D, 0xEC56, 0x973E, 0xF6B2, 0x973F, 0xEC57, 0x9740, 0xEC58, 0x9741, 0xEC59, 0x9742, 0xEC5A, + 0x9743, 0xEC5B, 0x9744, 0xEC5C, 0x9745, 0xEC5D, 0x9746, 0xEC5E, 0x9747, 0xEC5F, 0x9748, 0xEC60, 0x9749, 0xEC61, 0x974A, 0xEC62, + 0x974B, 0xEC63, 0x974C, 0xEC64, 0x974D, 0xEC65, 0x974E, 0xEC66, 0x974F, 0xEC67, 0x9750, 0xEC68, 0x9751, 0xEC69, 0x9752, 0xC7E0, + 0x9753, 0xF6A6, 0x9754, 0xEC6A, 0x9755, 0xEC6B, 0x9756, 0xBEB8, 0x9757, 0xEC6C, 0x9758, 0xEC6D, 0x9759, 0xBEB2, 0x975A, 0xEC6E, + 0x975B, 0xB5E5, 0x975C, 0xEC6F, 0x975D, 0xEC70, 0x975E, 0xB7C7, 0x975F, 0xEC71, 0x9760, 0xBFBF, 0x9761, 0xC3D2, 0x9762, 0xC3E6, + 0x9763, 0xEC72, 0x9764, 0xEC73, 0x9765, 0xD8CC, 0x9766, 0xEC74, 0x9767, 0xEC75, 0x9768, 0xEC76, 0x9769, 0xB8EF, 0x976A, 0xEC77, + 0x976B, 0xEC78, 0x976C, 0xEC79, 0x976D, 0xEC7A, 0x976E, 0xEC7B, 0x976F, 0xEC7C, 0x9770, 0xEC7D, 0x9771, 0xEC7E, 0x9772, 0xEC80, + 0x9773, 0xBDF9, 0x9774, 0xD1A5, 0x9775, 0xEC81, 0x9776, 0xB0D0, 0x9777, 0xEC82, 0x9778, 0xEC83, 0x9779, 0xEC84, 0x977A, 0xEC85, + 0x977B, 0xEC86, 0x977C, 0xF7B0, 0x977D, 0xEC87, 0x977E, 0xEC88, 0x977F, 0xEC89, 0x9780, 0xEC8A, 0x9781, 0xEC8B, 0x9782, 0xEC8C, + 0x9783, 0xEC8D, 0x9784, 0xEC8E, 0x9785, 0xF7B1, 0x9786, 0xEC8F, 0x9787, 0xEC90, 0x9788, 0xEC91, 0x9789, 0xEC92, 0x978A, 0xEC93, + 0x978B, 0xD0AC, 0x978C, 0xEC94, 0x978D, 0xB0B0, 0x978E, 0xEC95, 0x978F, 0xEC96, 0x9790, 0xEC97, 0x9791, 0xF7B2, 0x9792, 0xF7B3, + 0x9793, 0xEC98, 0x9794, 0xF7B4, 0x9795, 0xEC99, 0x9796, 0xEC9A, 0x9797, 0xEC9B, 0x9798, 0xC7CA, 0x9799, 0xEC9C, 0x979A, 0xEC9D, + 0x979B, 0xEC9E, 0x979C, 0xEC9F, 0x979D, 0xECA0, 0x979E, 0xED40, 0x979F, 0xED41, 0x97A0, 0xBECF, 0x97A1, 0xED42, 0x97A2, 0xED43, + 0x97A3, 0xF7B7, 0x97A4, 0xED44, 0x97A5, 0xED45, 0x97A6, 0xED46, 0x97A7, 0xED47, 0x97A8, 0xED48, 0x97A9, 0xED49, 0x97AA, 0xED4A, + 0x97AB, 0xF7B6, 0x97AC, 0xED4B, 0x97AD, 0xB1DE, 0x97AE, 0xED4C, 0x97AF, 0xF7B5, 0x97B0, 0xED4D, 0x97B1, 0xED4E, 0x97B2, 0xF7B8, + 0x97B3, 0xED4F, 0x97B4, 0xF7B9, 0x97B5, 0xED50, 0x97B6, 0xED51, 0x97B7, 0xED52, 0x97B8, 0xED53, 0x97B9, 0xED54, 0x97BA, 0xED55, + 0x97BB, 0xED56, 0x97BC, 0xED57, 0x97BD, 0xED58, 0x97BE, 0xED59, 0x97BF, 0xED5A, 0x97C0, 0xED5B, 0x97C1, 0xED5C, 0x97C2, 0xED5D, + 0x97C3, 0xED5E, 0x97C4, 0xED5F, 0x97C5, 0xED60, 0x97C6, 0xED61, 0x97C7, 0xED62, 0x97C8, 0xED63, 0x97C9, 0xED64, 0x97CA, 0xED65, + 0x97CB, 0xED66, 0x97CC, 0xED67, 0x97CD, 0xED68, 0x97CE, 0xED69, 0x97CF, 0xED6A, 0x97D0, 0xED6B, 0x97D1, 0xED6C, 0x97D2, 0xED6D, + 0x97D3, 0xED6E, 0x97D4, 0xED6F, 0x97D5, 0xED70, 0x97D6, 0xED71, 0x97D7, 0xED72, 0x97D8, 0xED73, 0x97D9, 0xED74, 0x97DA, 0xED75, + 0x97DB, 0xED76, 0x97DC, 0xED77, 0x97DD, 0xED78, 0x97DE, 0xED79, 0x97DF, 0xED7A, 0x97E0, 0xED7B, 0x97E1, 0xED7C, 0x97E2, 0xED7D, + 0x97E3, 0xED7E, 0x97E4, 0xED80, 0x97E5, 0xED81, 0x97E6, 0xCEA4, 0x97E7, 0xC8CD, 0x97E8, 0xED82, 0x97E9, 0xBAAB, 0x97EA, 0xE8B8, + 0x97EB, 0xE8B9, 0x97EC, 0xE8BA, 0x97ED, 0xBEC2, 0x97EE, 0xED83, 0x97EF, 0xED84, 0x97F0, 0xED85, 0x97F1, 0xED86, 0x97F2, 0xED87, + 0x97F3, 0xD2F4, 0x97F4, 0xED88, 0x97F5, 0xD4CF, 0x97F6, 0xC9D8, 0x97F7, 0xED89, 0x97F8, 0xED8A, 0x97F9, 0xED8B, 0x97FA, 0xED8C, + 0x97FB, 0xED8D, 0x97FC, 0xED8E, 0x97FD, 0xED8F, 0x97FE, 0xED90, 0x97FF, 0xED91, 0x9800, 0xED92, 0x9801, 0xED93, 0x9802, 0xED94, + 0x9803, 0xED95, 0x9804, 0xED96, 0x9805, 0xED97, 0x9806, 0xED98, 0x9807, 0xED99, 0x9808, 0xED9A, 0x9809, 0xED9B, 0x980A, 0xED9C, + 0x980B, 0xED9D, 0x980C, 0xED9E, 0x980D, 0xED9F, 0x980E, 0xEDA0, 0x980F, 0xEE40, 0x9810, 0xEE41, 0x9811, 0xEE42, 0x9812, 0xEE43, + 0x9813, 0xEE44, 0x9814, 0xEE45, 0x9815, 0xEE46, 0x9816, 0xEE47, 0x9817, 0xEE48, 0x9818, 0xEE49, 0x9819, 0xEE4A, 0x981A, 0xEE4B, + 0x981B, 0xEE4C, 0x981C, 0xEE4D, 0x981D, 0xEE4E, 0x981E, 0xEE4F, 0x981F, 0xEE50, 0x9820, 0xEE51, 0x9821, 0xEE52, 0x9822, 0xEE53, + 0x9823, 0xEE54, 0x9824, 0xEE55, 0x9825, 0xEE56, 0x9826, 0xEE57, 0x9827, 0xEE58, 0x9828, 0xEE59, 0x9829, 0xEE5A, 0x982A, 0xEE5B, + 0x982B, 0xEE5C, 0x982C, 0xEE5D, 0x982D, 0xEE5E, 0x982E, 0xEE5F, 0x982F, 0xEE60, 0x9830, 0xEE61, 0x9831, 0xEE62, 0x9832, 0xEE63, + 0x9833, 0xEE64, 0x9834, 0xEE65, 0x9835, 0xEE66, 0x9836, 0xEE67, 0x9837, 0xEE68, 0x9838, 0xEE69, 0x9839, 0xEE6A, 0x983A, 0xEE6B, + 0x983B, 0xEE6C, 0x983C, 0xEE6D, 0x983D, 0xEE6E, 0x983E, 0xEE6F, 0x983F, 0xEE70, 0x9840, 0xEE71, 0x9841, 0xEE72, 0x9842, 0xEE73, + 0x9843, 0xEE74, 0x9844, 0xEE75, 0x9845, 0xEE76, 0x9846, 0xEE77, 0x9847, 0xEE78, 0x9848, 0xEE79, 0x9849, 0xEE7A, 0x984A, 0xEE7B, + 0x984B, 0xEE7C, 0x984C, 0xEE7D, 0x984D, 0xEE7E, 0x984E, 0xEE80, 0x984F, 0xEE81, 0x9850, 0xEE82, 0x9851, 0xEE83, 0x9852, 0xEE84, + 0x9853, 0xEE85, 0x9854, 0xEE86, 0x9855, 0xEE87, 0x9856, 0xEE88, 0x9857, 0xEE89, 0x9858, 0xEE8A, 0x9859, 0xEE8B, 0x985A, 0xEE8C, + 0x985B, 0xEE8D, 0x985C, 0xEE8E, 0x985D, 0xEE8F, 0x985E, 0xEE90, 0x985F, 0xEE91, 0x9860, 0xEE92, 0x9861, 0xEE93, 0x9862, 0xEE94, + 0x9863, 0xEE95, 0x9864, 0xEE96, 0x9865, 0xEE97, 0x9866, 0xEE98, 0x9867, 0xEE99, 0x9868, 0xEE9A, 0x9869, 0xEE9B, 0x986A, 0xEE9C, + 0x986B, 0xEE9D, 0x986C, 0xEE9E, 0x986D, 0xEE9F, 0x986E, 0xEEA0, 0x986F, 0xEF40, 0x9870, 0xEF41, 0x9871, 0xEF42, 0x9872, 0xEF43, + 0x9873, 0xEF44, 0x9874, 0xEF45, 0x9875, 0xD2B3, 0x9876, 0xB6A5, 0x9877, 0xC7EA, 0x9878, 0xF1FC, 0x9879, 0xCFEE, 0x987A, 0xCBB3, + 0x987B, 0xD0EB, 0x987C, 0xE7EF, 0x987D, 0xCDE7, 0x987E, 0xB9CB, 0x987F, 0xB6D9, 0x9880, 0xF1FD, 0x9881, 0xB0E4, 0x9882, 0xCBCC, + 0x9883, 0xF1FE, 0x9884, 0xD4A4, 0x9885, 0xC2AD, 0x9886, 0xC1EC, 0x9887, 0xC6C4, 0x9888, 0xBEB1, 0x9889, 0xF2A1, 0x988A, 0xBCD5, + 0x988B, 0xEF46, 0x988C, 0xF2A2, 0x988D, 0xF2A3, 0x988E, 0xEF47, 0x988F, 0xF2A4, 0x9890, 0xD2C3, 0x9891, 0xC6B5, 0x9892, 0xEF48, + 0x9893, 0xCDC7, 0x9894, 0xF2A5, 0x9895, 0xEF49, 0x9896, 0xD3B1, 0x9897, 0xBFC5, 0x9898, 0xCCE2, 0x9899, 0xEF4A, 0x989A, 0xF2A6, + 0x989B, 0xF2A7, 0x989C, 0xD1D5, 0x989D, 0xB6EE, 0x989E, 0xF2A8, 0x989F, 0xF2A9, 0x98A0, 0xB5DF, 0x98A1, 0xF2AA, 0x98A2, 0xF2AB, + 0x98A3, 0xEF4B, 0x98A4, 0xB2FC, 0x98A5, 0xF2AC, 0x98A6, 0xF2AD, 0x98A7, 0xC8A7, 0x98A8, 0xEF4C, 0x98A9, 0xEF4D, 0x98AA, 0xEF4E, + 0x98AB, 0xEF4F, 0x98AC, 0xEF50, 0x98AD, 0xEF51, 0x98AE, 0xEF52, 0x98AF, 0xEF53, 0x98B0, 0xEF54, 0x98B1, 0xEF55, 0x98B2, 0xEF56, + 0x98B3, 0xEF57, 0x98B4, 0xEF58, 0x98B5, 0xEF59, 0x98B6, 0xEF5A, 0x98B7, 0xEF5B, 0x98B8, 0xEF5C, 0x98B9, 0xEF5D, 0x98BA, 0xEF5E, + 0x98BB, 0xEF5F, 0x98BC, 0xEF60, 0x98BD, 0xEF61, 0x98BE, 0xEF62, 0x98BF, 0xEF63, 0x98C0, 0xEF64, 0x98C1, 0xEF65, 0x98C2, 0xEF66, + 0x98C3, 0xEF67, 0x98C4, 0xEF68, 0x98C5, 0xEF69, 0x98C6, 0xEF6A, 0x98C7, 0xEF6B, 0x98C8, 0xEF6C, 0x98C9, 0xEF6D, 0x98CA, 0xEF6E, + 0x98CB, 0xEF6F, 0x98CC, 0xEF70, 0x98CD, 0xEF71, 0x98CE, 0xB7E7, 0x98CF, 0xEF72, 0x98D0, 0xEF73, 0x98D1, 0xECA9, 0x98D2, 0xECAA, + 0x98D3, 0xECAB, 0x98D4, 0xEF74, 0x98D5, 0xECAC, 0x98D6, 0xEF75, 0x98D7, 0xEF76, 0x98D8, 0xC6AE, 0x98D9, 0xECAD, 0x98DA, 0xECAE, + 0x98DB, 0xEF77, 0x98DC, 0xEF78, 0x98DD, 0xEF79, 0x98DE, 0xB7C9, 0x98DF, 0xCAB3, 0x98E0, 0xEF7A, 0x98E1, 0xEF7B, 0x98E2, 0xEF7C, + 0x98E3, 0xEF7D, 0x98E4, 0xEF7E, 0x98E5, 0xEF80, 0x98E6, 0xEF81, 0x98E7, 0xE2B8, 0x98E8, 0xF7CF, 0x98E9, 0xEF82, 0x98EA, 0xEF83, + 0x98EB, 0xEF84, 0x98EC, 0xEF85, 0x98ED, 0xEF86, 0x98EE, 0xEF87, 0x98EF, 0xEF88, 0x98F0, 0xEF89, 0x98F1, 0xEF8A, 0x98F2, 0xEF8B, + 0x98F3, 0xEF8C, 0x98F4, 0xEF8D, 0x98F5, 0xEF8E, 0x98F6, 0xEF8F, 0x98F7, 0xEF90, 0x98F8, 0xEF91, 0x98F9, 0xEF92, 0x98FA, 0xEF93, + 0x98FB, 0xEF94, 0x98FC, 0xEF95, 0x98FD, 0xEF96, 0x98FE, 0xEF97, 0x98FF, 0xEF98, 0x9900, 0xEF99, 0x9901, 0xEF9A, 0x9902, 0xEF9B, + 0x9903, 0xEF9C, 0x9904, 0xEF9D, 0x9905, 0xEF9E, 0x9906, 0xEF9F, 0x9907, 0xEFA0, 0x9908, 0xF040, 0x9909, 0xF041, 0x990A, 0xF042, + 0x990B, 0xF043, 0x990C, 0xF044, 0x990D, 0xF7D0, 0x990E, 0xF045, 0x990F, 0xF046, 0x9910, 0xB2CD, 0x9911, 0xF047, 0x9912, 0xF048, + 0x9913, 0xF049, 0x9914, 0xF04A, 0x9915, 0xF04B, 0x9916, 0xF04C, 0x9917, 0xF04D, 0x9918, 0xF04E, 0x9919, 0xF04F, 0x991A, 0xF050, + 0x991B, 0xF051, 0x991C, 0xF052, 0x991D, 0xF053, 0x991E, 0xF054, 0x991F, 0xF055, 0x9920, 0xF056, 0x9921, 0xF057, 0x9922, 0xF058, + 0x9923, 0xF059, 0x9924, 0xF05A, 0x9925, 0xF05B, 0x9926, 0xF05C, 0x9927, 0xF05D, 0x9928, 0xF05E, 0x9929, 0xF05F, 0x992A, 0xF060, + 0x992B, 0xF061, 0x992C, 0xF062, 0x992D, 0xF063, 0x992E, 0xF7D1, 0x992F, 0xF064, 0x9930, 0xF065, 0x9931, 0xF066, 0x9932, 0xF067, + 0x9933, 0xF068, 0x9934, 0xF069, 0x9935, 0xF06A, 0x9936, 0xF06B, 0x9937, 0xF06C, 0x9938, 0xF06D, 0x9939, 0xF06E, 0x993A, 0xF06F, + 0x993B, 0xF070, 0x993C, 0xF071, 0x993D, 0xF072, 0x993E, 0xF073, 0x993F, 0xF074, 0x9940, 0xF075, 0x9941, 0xF076, 0x9942, 0xF077, + 0x9943, 0xF078, 0x9944, 0xF079, 0x9945, 0xF07A, 0x9946, 0xF07B, 0x9947, 0xF07C, 0x9948, 0xF07D, 0x9949, 0xF07E, 0x994A, 0xF080, + 0x994B, 0xF081, 0x994C, 0xF082, 0x994D, 0xF083, 0x994E, 0xF084, 0x994F, 0xF085, 0x9950, 0xF086, 0x9951, 0xF087, 0x9952, 0xF088, + 0x9953, 0xF089, 0x9954, 0xF7D3, 0x9955, 0xF7D2, 0x9956, 0xF08A, 0x9957, 0xF08B, 0x9958, 0xF08C, 0x9959, 0xF08D, 0x995A, 0xF08E, + 0x995B, 0xF08F, 0x995C, 0xF090, 0x995D, 0xF091, 0x995E, 0xF092, 0x995F, 0xF093, 0x9960, 0xF094, 0x9961, 0xF095, 0x9962, 0xF096, + 0x9963, 0xE2BB, 0x9964, 0xF097, 0x9965, 0xBCA2, 0x9966, 0xF098, 0x9967, 0xE2BC, 0x9968, 0xE2BD, 0x9969, 0xE2BE, 0x996A, 0xE2BF, + 0x996B, 0xE2C0, 0x996C, 0xE2C1, 0x996D, 0xB7B9, 0x996E, 0xD2FB, 0x996F, 0xBDA4, 0x9970, 0xCACE, 0x9971, 0xB1A5, 0x9972, 0xCBC7, + 0x9973, 0xF099, 0x9974, 0xE2C2, 0x9975, 0xB6FC, 0x9976, 0xC8C4, 0x9977, 0xE2C3, 0x9978, 0xF09A, 0x9979, 0xF09B, 0x997A, 0xBDC8, + 0x997B, 0xF09C, 0x997C, 0xB1FD, 0x997D, 0xE2C4, 0x997E, 0xF09D, 0x997F, 0xB6F6, 0x9980, 0xE2C5, 0x9981, 0xC4D9, 0x9982, 0xF09E, + 0x9983, 0xF09F, 0x9984, 0xE2C6, 0x9985, 0xCFDA, 0x9986, 0xB9DD, 0x9987, 0xE2C7, 0x9988, 0xC0A1, 0x9989, 0xF0A0, 0x998A, 0xE2C8, + 0x998B, 0xB2F6, 0x998C, 0xF140, 0x998D, 0xE2C9, 0x998E, 0xF141, 0x998F, 0xC1F3, 0x9990, 0xE2CA, 0x9991, 0xE2CB, 0x9992, 0xC2F8, + 0x9993, 0xE2CC, 0x9994, 0xE2CD, 0x9995, 0xE2CE, 0x9996, 0xCAD7, 0x9997, 0xD8B8, 0x9998, 0xD9E5, 0x9999, 0xCFE3, 0x999A, 0xF142, + 0x999B, 0xF143, 0x999C, 0xF144, 0x999D, 0xF145, 0x999E, 0xF146, 0x999F, 0xF147, 0x99A0, 0xF148, 0x99A1, 0xF149, 0x99A2, 0xF14A, + 0x99A3, 0xF14B, 0x99A4, 0xF14C, 0x99A5, 0xF0A5, 0x99A6, 0xF14D, 0x99A7, 0xF14E, 0x99A8, 0xDCB0, 0x99A9, 0xF14F, 0x99AA, 0xF150, + 0x99AB, 0xF151, 0x99AC, 0xF152, 0x99AD, 0xF153, 0x99AE, 0xF154, 0x99AF, 0xF155, 0x99B0, 0xF156, 0x99B1, 0xF157, 0x99B2, 0xF158, + 0x99B3, 0xF159, 0x99B4, 0xF15A, 0x99B5, 0xF15B, 0x99B6, 0xF15C, 0x99B7, 0xF15D, 0x99B8, 0xF15E, 0x99B9, 0xF15F, 0x99BA, 0xF160, + 0x99BB, 0xF161, 0x99BC, 0xF162, 0x99BD, 0xF163, 0x99BE, 0xF164, 0x99BF, 0xF165, 0x99C0, 0xF166, 0x99C1, 0xF167, 0x99C2, 0xF168, + 0x99C3, 0xF169, 0x99C4, 0xF16A, 0x99C5, 0xF16B, 0x99C6, 0xF16C, 0x99C7, 0xF16D, 0x99C8, 0xF16E, 0x99C9, 0xF16F, 0x99CA, 0xF170, + 0x99CB, 0xF171, 0x99CC, 0xF172, 0x99CD, 0xF173, 0x99CE, 0xF174, 0x99CF, 0xF175, 0x99D0, 0xF176, 0x99D1, 0xF177, 0x99D2, 0xF178, + 0x99D3, 0xF179, 0x99D4, 0xF17A, 0x99D5, 0xF17B, 0x99D6, 0xF17C, 0x99D7, 0xF17D, 0x99D8, 0xF17E, 0x99D9, 0xF180, 0x99DA, 0xF181, + 0x99DB, 0xF182, 0x99DC, 0xF183, 0x99DD, 0xF184, 0x99DE, 0xF185, 0x99DF, 0xF186, 0x99E0, 0xF187, 0x99E1, 0xF188, 0x99E2, 0xF189, + 0x99E3, 0xF18A, 0x99E4, 0xF18B, 0x99E5, 0xF18C, 0x99E6, 0xF18D, 0x99E7, 0xF18E, 0x99E8, 0xF18F, 0x99E9, 0xF190, 0x99EA, 0xF191, + 0x99EB, 0xF192, 0x99EC, 0xF193, 0x99ED, 0xF194, 0x99EE, 0xF195, 0x99EF, 0xF196, 0x99F0, 0xF197, 0x99F1, 0xF198, 0x99F2, 0xF199, + 0x99F3, 0xF19A, 0x99F4, 0xF19B, 0x99F5, 0xF19C, 0x99F6, 0xF19D, 0x99F7, 0xF19E, 0x99F8, 0xF19F, 0x99F9, 0xF1A0, 0x99FA, 0xF240, + 0x99FB, 0xF241, 0x99FC, 0xF242, 0x99FD, 0xF243, 0x99FE, 0xF244, 0x99FF, 0xF245, 0x9A00, 0xF246, 0x9A01, 0xF247, 0x9A02, 0xF248, + 0x9A03, 0xF249, 0x9A04, 0xF24A, 0x9A05, 0xF24B, 0x9A06, 0xF24C, 0x9A07, 0xF24D, 0x9A08, 0xF24E, 0x9A09, 0xF24F, 0x9A0A, 0xF250, + 0x9A0B, 0xF251, 0x9A0C, 0xF252, 0x9A0D, 0xF253, 0x9A0E, 0xF254, 0x9A0F, 0xF255, 0x9A10, 0xF256, 0x9A11, 0xF257, 0x9A12, 0xF258, + 0x9A13, 0xF259, 0x9A14, 0xF25A, 0x9A15, 0xF25B, 0x9A16, 0xF25C, 0x9A17, 0xF25D, 0x9A18, 0xF25E, 0x9A19, 0xF25F, 0x9A1A, 0xF260, + 0x9A1B, 0xF261, 0x9A1C, 0xF262, 0x9A1D, 0xF263, 0x9A1E, 0xF264, 0x9A1F, 0xF265, 0x9A20, 0xF266, 0x9A21, 0xF267, 0x9A22, 0xF268, + 0x9A23, 0xF269, 0x9A24, 0xF26A, 0x9A25, 0xF26B, 0x9A26, 0xF26C, 0x9A27, 0xF26D, 0x9A28, 0xF26E, 0x9A29, 0xF26F, 0x9A2A, 0xF270, + 0x9A2B, 0xF271, 0x9A2C, 0xF272, 0x9A2D, 0xF273, 0x9A2E, 0xF274, 0x9A2F, 0xF275, 0x9A30, 0xF276, 0x9A31, 0xF277, 0x9A32, 0xF278, + 0x9A33, 0xF279, 0x9A34, 0xF27A, 0x9A35, 0xF27B, 0x9A36, 0xF27C, 0x9A37, 0xF27D, 0x9A38, 0xF27E, 0x9A39, 0xF280, 0x9A3A, 0xF281, + 0x9A3B, 0xF282, 0x9A3C, 0xF283, 0x9A3D, 0xF284, 0x9A3E, 0xF285, 0x9A3F, 0xF286, 0x9A40, 0xF287, 0x9A41, 0xF288, 0x9A42, 0xF289, + 0x9A43, 0xF28A, 0x9A44, 0xF28B, 0x9A45, 0xF28C, 0x9A46, 0xF28D, 0x9A47, 0xF28E, 0x9A48, 0xF28F, 0x9A49, 0xF290, 0x9A4A, 0xF291, + 0x9A4B, 0xF292, 0x9A4C, 0xF293, 0x9A4D, 0xF294, 0x9A4E, 0xF295, 0x9A4F, 0xF296, 0x9A50, 0xF297, 0x9A51, 0xF298, 0x9A52, 0xF299, + 0x9A53, 0xF29A, 0x9A54, 0xF29B, 0x9A55, 0xF29C, 0x9A56, 0xF29D, 0x9A57, 0xF29E, 0x9A58, 0xF29F, 0x9A59, 0xF2A0, 0x9A5A, 0xF340, + 0x9A5B, 0xF341, 0x9A5C, 0xF342, 0x9A5D, 0xF343, 0x9A5E, 0xF344, 0x9A5F, 0xF345, 0x9A60, 0xF346, 0x9A61, 0xF347, 0x9A62, 0xF348, + 0x9A63, 0xF349, 0x9A64, 0xF34A, 0x9A65, 0xF34B, 0x9A66, 0xF34C, 0x9A67, 0xF34D, 0x9A68, 0xF34E, 0x9A69, 0xF34F, 0x9A6A, 0xF350, + 0x9A6B, 0xF351, 0x9A6C, 0xC2ED, 0x9A6D, 0xD4A6, 0x9A6E, 0xCDD4, 0x9A6F, 0xD1B1, 0x9A70, 0xB3DB, 0x9A71, 0xC7FD, 0x9A72, 0xF352, + 0x9A73, 0xB2B5, 0x9A74, 0xC2BF, 0x9A75, 0xE6E0, 0x9A76, 0xCABB, 0x9A77, 0xE6E1, 0x9A78, 0xE6E2, 0x9A79, 0xBED4, 0x9A7A, 0xE6E3, + 0x9A7B, 0xD7A4, 0x9A7C, 0xCDD5, 0x9A7D, 0xE6E5, 0x9A7E, 0xBCDD, 0x9A7F, 0xE6E4, 0x9A80, 0xE6E6, 0x9A81, 0xE6E7, 0x9A82, 0xC2EE, + 0x9A83, 0xF353, 0x9A84, 0xBDBE, 0x9A85, 0xE6E8, 0x9A86, 0xC2E6, 0x9A87, 0xBAA7, 0x9A88, 0xE6E9, 0x9A89, 0xF354, 0x9A8A, 0xE6EA, + 0x9A8B, 0xB3D2, 0x9A8C, 0xD1E9, 0x9A8D, 0xF355, 0x9A8E, 0xF356, 0x9A8F, 0xBFA5, 0x9A90, 0xE6EB, 0x9A91, 0xC6EF, 0x9A92, 0xE6EC, + 0x9A93, 0xE6ED, 0x9A94, 0xF357, 0x9A95, 0xF358, 0x9A96, 0xE6EE, 0x9A97, 0xC6AD, 0x9A98, 0xE6EF, 0x9A99, 0xF359, 0x9A9A, 0xC9A7, + 0x9A9B, 0xE6F0, 0x9A9C, 0xE6F1, 0x9A9D, 0xE6F2, 0x9A9E, 0xE5B9, 0x9A9F, 0xE6F3, 0x9AA0, 0xE6F4, 0x9AA1, 0xC2E2, 0x9AA2, 0xE6F5, + 0x9AA3, 0xE6F6, 0x9AA4, 0xD6E8, 0x9AA5, 0xE6F7, 0x9AA6, 0xF35A, 0x9AA7, 0xE6F8, 0x9AA8, 0xB9C7, 0x9AA9, 0xF35B, 0x9AAA, 0xF35C, + 0x9AAB, 0xF35D, 0x9AAC, 0xF35E, 0x9AAD, 0xF35F, 0x9AAE, 0xF360, 0x9AAF, 0xF361, 0x9AB0, 0xF7BB, 0x9AB1, 0xF7BA, 0x9AB2, 0xF362, + 0x9AB3, 0xF363, 0x9AB4, 0xF364, 0x9AB5, 0xF365, 0x9AB6, 0xF7BE, 0x9AB7, 0xF7BC, 0x9AB8, 0xBAA1, 0x9AB9, 0xF366, 0x9ABA, 0xF7BF, + 0x9ABB, 0xF367, 0x9ABC, 0xF7C0, 0x9ABD, 0xF368, 0x9ABE, 0xF369, 0x9ABF, 0xF36A, 0x9AC0, 0xF7C2, 0x9AC1, 0xF7C1, 0x9AC2, 0xF7C4, + 0x9AC3, 0xF36B, 0x9AC4, 0xF36C, 0x9AC5, 0xF7C3, 0x9AC6, 0xF36D, 0x9AC7, 0xF36E, 0x9AC8, 0xF36F, 0x9AC9, 0xF370, 0x9ACA, 0xF371, + 0x9ACB, 0xF7C5, 0x9ACC, 0xF7C6, 0x9ACD, 0xF372, 0x9ACE, 0xF373, 0x9ACF, 0xF374, 0x9AD0, 0xF375, 0x9AD1, 0xF7C7, 0x9AD2, 0xF376, + 0x9AD3, 0xCBE8, 0x9AD4, 0xF377, 0x9AD5, 0xF378, 0x9AD6, 0xF379, 0x9AD7, 0xF37A, 0x9AD8, 0xB8DF, 0x9AD9, 0xF37B, 0x9ADA, 0xF37C, + 0x9ADB, 0xF37D, 0x9ADC, 0xF37E, 0x9ADD, 0xF380, 0x9ADE, 0xF381, 0x9ADF, 0xF7D4, 0x9AE0, 0xF382, 0x9AE1, 0xF7D5, 0x9AE2, 0xF383, + 0x9AE3, 0xF384, 0x9AE4, 0xF385, 0x9AE5, 0xF386, 0x9AE6, 0xF7D6, 0x9AE7, 0xF387, 0x9AE8, 0xF388, 0x9AE9, 0xF389, 0x9AEA, 0xF38A, + 0x9AEB, 0xF7D8, 0x9AEC, 0xF38B, 0x9AED, 0xF7DA, 0x9AEE, 0xF38C, 0x9AEF, 0xF7D7, 0x9AF0, 0xF38D, 0x9AF1, 0xF38E, 0x9AF2, 0xF38F, + 0x9AF3, 0xF390, 0x9AF4, 0xF391, 0x9AF5, 0xF392, 0x9AF6, 0xF393, 0x9AF7, 0xF394, 0x9AF8, 0xF395, 0x9AF9, 0xF7DB, 0x9AFA, 0xF396, + 0x9AFB, 0xF7D9, 0x9AFC, 0xF397, 0x9AFD, 0xF398, 0x9AFE, 0xF399, 0x9AFF, 0xF39A, 0x9B00, 0xF39B, 0x9B01, 0xF39C, 0x9B02, 0xF39D, + 0x9B03, 0xD7D7, 0x9B04, 0xF39E, 0x9B05, 0xF39F, 0x9B06, 0xF3A0, 0x9B07, 0xF440, 0x9B08, 0xF7DC, 0x9B09, 0xF441, 0x9B0A, 0xF442, + 0x9B0B, 0xF443, 0x9B0C, 0xF444, 0x9B0D, 0xF445, 0x9B0E, 0xF446, 0x9B0F, 0xF7DD, 0x9B10, 0xF447, 0x9B11, 0xF448, 0x9B12, 0xF449, + 0x9B13, 0xF7DE, 0x9B14, 0xF44A, 0x9B15, 0xF44B, 0x9B16, 0xF44C, 0x9B17, 0xF44D, 0x9B18, 0xF44E, 0x9B19, 0xF44F, 0x9B1A, 0xF450, + 0x9B1B, 0xF451, 0x9B1C, 0xF452, 0x9B1D, 0xF453, 0x9B1E, 0xF454, 0x9B1F, 0xF7DF, 0x9B20, 0xF455, 0x9B21, 0xF456, 0x9B22, 0xF457, + 0x9B23, 0xF7E0, 0x9B24, 0xF458, 0x9B25, 0xF459, 0x9B26, 0xF45A, 0x9B27, 0xF45B, 0x9B28, 0xF45C, 0x9B29, 0xF45D, 0x9B2A, 0xF45E, + 0x9B2B, 0xF45F, 0x9B2C, 0xF460, 0x9B2D, 0xF461, 0x9B2E, 0xF462, 0x9B2F, 0xDBCB, 0x9B30, 0xF463, 0x9B31, 0xF464, 0x9B32, 0xD8AA, + 0x9B33, 0xF465, 0x9B34, 0xF466, 0x9B35, 0xF467, 0x9B36, 0xF468, 0x9B37, 0xF469, 0x9B38, 0xF46A, 0x9B39, 0xF46B, 0x9B3A, 0xF46C, + 0x9B3B, 0xE5F7, 0x9B3C, 0xB9ED, 0x9B3D, 0xF46D, 0x9B3E, 0xF46E, 0x9B3F, 0xF46F, 0x9B40, 0xF470, 0x9B41, 0xBFFD, 0x9B42, 0xBBEA, + 0x9B43, 0xF7C9, 0x9B44, 0xC6C7, 0x9B45, 0xF7C8, 0x9B46, 0xF471, 0x9B47, 0xF7CA, 0x9B48, 0xF7CC, 0x9B49, 0xF7CB, 0x9B4A, 0xF472, + 0x9B4B, 0xF473, 0x9B4C, 0xF474, 0x9B4D, 0xF7CD, 0x9B4E, 0xF475, 0x9B4F, 0xCEBA, 0x9B50, 0xF476, 0x9B51, 0xF7CE, 0x9B52, 0xF477, + 0x9B53, 0xF478, 0x9B54, 0xC4A7, 0x9B55, 0xF479, 0x9B56, 0xF47A, 0x9B57, 0xF47B, 0x9B58, 0xF47C, 0x9B59, 0xF47D, 0x9B5A, 0xF47E, + 0x9B5B, 0xF480, 0x9B5C, 0xF481, 0x9B5D, 0xF482, 0x9B5E, 0xF483, 0x9B5F, 0xF484, 0x9B60, 0xF485, 0x9B61, 0xF486, 0x9B62, 0xF487, + 0x9B63, 0xF488, 0x9B64, 0xF489, 0x9B65, 0xF48A, 0x9B66, 0xF48B, 0x9B67, 0xF48C, 0x9B68, 0xF48D, 0x9B69, 0xF48E, 0x9B6A, 0xF48F, + 0x9B6B, 0xF490, 0x9B6C, 0xF491, 0x9B6D, 0xF492, 0x9B6E, 0xF493, 0x9B6F, 0xF494, 0x9B70, 0xF495, 0x9B71, 0xF496, 0x9B72, 0xF497, + 0x9B73, 0xF498, 0x9B74, 0xF499, 0x9B75, 0xF49A, 0x9B76, 0xF49B, 0x9B77, 0xF49C, 0x9B78, 0xF49D, 0x9B79, 0xF49E, 0x9B7A, 0xF49F, + 0x9B7B, 0xF4A0, 0x9B7C, 0xF540, 0x9B7D, 0xF541, 0x9B7E, 0xF542, 0x9B7F, 0xF543, 0x9B80, 0xF544, 0x9B81, 0xF545, 0x9B82, 0xF546, + 0x9B83, 0xF547, 0x9B84, 0xF548, 0x9B85, 0xF549, 0x9B86, 0xF54A, 0x9B87, 0xF54B, 0x9B88, 0xF54C, 0x9B89, 0xF54D, 0x9B8A, 0xF54E, + 0x9B8B, 0xF54F, 0x9B8C, 0xF550, 0x9B8D, 0xF551, 0x9B8E, 0xF552, 0x9B8F, 0xF553, 0x9B90, 0xF554, 0x9B91, 0xF555, 0x9B92, 0xF556, + 0x9B93, 0xF557, 0x9B94, 0xF558, 0x9B95, 0xF559, 0x9B96, 0xF55A, 0x9B97, 0xF55B, 0x9B98, 0xF55C, 0x9B99, 0xF55D, 0x9B9A, 0xF55E, + 0x9B9B, 0xF55F, 0x9B9C, 0xF560, 0x9B9D, 0xF561, 0x9B9E, 0xF562, 0x9B9F, 0xF563, 0x9BA0, 0xF564, 0x9BA1, 0xF565, 0x9BA2, 0xF566, + 0x9BA3, 0xF567, 0x9BA4, 0xF568, 0x9BA5, 0xF569, 0x9BA6, 0xF56A, 0x9BA7, 0xF56B, 0x9BA8, 0xF56C, 0x9BA9, 0xF56D, 0x9BAA, 0xF56E, + 0x9BAB, 0xF56F, 0x9BAC, 0xF570, 0x9BAD, 0xF571, 0x9BAE, 0xF572, 0x9BAF, 0xF573, 0x9BB0, 0xF574, 0x9BB1, 0xF575, 0x9BB2, 0xF576, + 0x9BB3, 0xF577, 0x9BB4, 0xF578, 0x9BB5, 0xF579, 0x9BB6, 0xF57A, 0x9BB7, 0xF57B, 0x9BB8, 0xF57C, 0x9BB9, 0xF57D, 0x9BBA, 0xF57E, + 0x9BBB, 0xF580, 0x9BBC, 0xF581, 0x9BBD, 0xF582, 0x9BBE, 0xF583, 0x9BBF, 0xF584, 0x9BC0, 0xF585, 0x9BC1, 0xF586, 0x9BC2, 0xF587, + 0x9BC3, 0xF588, 0x9BC4, 0xF589, 0x9BC5, 0xF58A, 0x9BC6, 0xF58B, 0x9BC7, 0xF58C, 0x9BC8, 0xF58D, 0x9BC9, 0xF58E, 0x9BCA, 0xF58F, + 0x9BCB, 0xF590, 0x9BCC, 0xF591, 0x9BCD, 0xF592, 0x9BCE, 0xF593, 0x9BCF, 0xF594, 0x9BD0, 0xF595, 0x9BD1, 0xF596, 0x9BD2, 0xF597, + 0x9BD3, 0xF598, 0x9BD4, 0xF599, 0x9BD5, 0xF59A, 0x9BD6, 0xF59B, 0x9BD7, 0xF59C, 0x9BD8, 0xF59D, 0x9BD9, 0xF59E, 0x9BDA, 0xF59F, + 0x9BDB, 0xF5A0, 0x9BDC, 0xF640, 0x9BDD, 0xF641, 0x9BDE, 0xF642, 0x9BDF, 0xF643, 0x9BE0, 0xF644, 0x9BE1, 0xF645, 0x9BE2, 0xF646, + 0x9BE3, 0xF647, 0x9BE4, 0xF648, 0x9BE5, 0xF649, 0x9BE6, 0xF64A, 0x9BE7, 0xF64B, 0x9BE8, 0xF64C, 0x9BE9, 0xF64D, 0x9BEA, 0xF64E, + 0x9BEB, 0xF64F, 0x9BEC, 0xF650, 0x9BED, 0xF651, 0x9BEE, 0xF652, 0x9BEF, 0xF653, 0x9BF0, 0xF654, 0x9BF1, 0xF655, 0x9BF2, 0xF656, + 0x9BF3, 0xF657, 0x9BF4, 0xF658, 0x9BF5, 0xF659, 0x9BF6, 0xF65A, 0x9BF7, 0xF65B, 0x9BF8, 0xF65C, 0x9BF9, 0xF65D, 0x9BFA, 0xF65E, + 0x9BFB, 0xF65F, 0x9BFC, 0xF660, 0x9BFD, 0xF661, 0x9BFE, 0xF662, 0x9BFF, 0xF663, 0x9C00, 0xF664, 0x9C01, 0xF665, 0x9C02, 0xF666, + 0x9C03, 0xF667, 0x9C04, 0xF668, 0x9C05, 0xF669, 0x9C06, 0xF66A, 0x9C07, 0xF66B, 0x9C08, 0xF66C, 0x9C09, 0xF66D, 0x9C0A, 0xF66E, + 0x9C0B, 0xF66F, 0x9C0C, 0xF670, 0x9C0D, 0xF671, 0x9C0E, 0xF672, 0x9C0F, 0xF673, 0x9C10, 0xF674, 0x9C11, 0xF675, 0x9C12, 0xF676, + 0x9C13, 0xF677, 0x9C14, 0xF678, 0x9C15, 0xF679, 0x9C16, 0xF67A, 0x9C17, 0xF67B, 0x9C18, 0xF67C, 0x9C19, 0xF67D, 0x9C1A, 0xF67E, + 0x9C1B, 0xF680, 0x9C1C, 0xF681, 0x9C1D, 0xF682, 0x9C1E, 0xF683, 0x9C1F, 0xF684, 0x9C20, 0xF685, 0x9C21, 0xF686, 0x9C22, 0xF687, + 0x9C23, 0xF688, 0x9C24, 0xF689, 0x9C25, 0xF68A, 0x9C26, 0xF68B, 0x9C27, 0xF68C, 0x9C28, 0xF68D, 0x9C29, 0xF68E, 0x9C2A, 0xF68F, + 0x9C2B, 0xF690, 0x9C2C, 0xF691, 0x9C2D, 0xF692, 0x9C2E, 0xF693, 0x9C2F, 0xF694, 0x9C30, 0xF695, 0x9C31, 0xF696, 0x9C32, 0xF697, + 0x9C33, 0xF698, 0x9C34, 0xF699, 0x9C35, 0xF69A, 0x9C36, 0xF69B, 0x9C37, 0xF69C, 0x9C38, 0xF69D, 0x9C39, 0xF69E, 0x9C3A, 0xF69F, + 0x9C3B, 0xF6A0, 0x9C3C, 0xF740, 0x9C3D, 0xF741, 0x9C3E, 0xF742, 0x9C3F, 0xF743, 0x9C40, 0xF744, 0x9C41, 0xF745, 0x9C42, 0xF746, + 0x9C43, 0xF747, 0x9C44, 0xF748, 0x9C45, 0xF749, 0x9C46, 0xF74A, 0x9C47, 0xF74B, 0x9C48, 0xF74C, 0x9C49, 0xF74D, 0x9C4A, 0xF74E, + 0x9C4B, 0xF74F, 0x9C4C, 0xF750, 0x9C4D, 0xF751, 0x9C4E, 0xF752, 0x9C4F, 0xF753, 0x9C50, 0xF754, 0x9C51, 0xF755, 0x9C52, 0xF756, + 0x9C53, 0xF757, 0x9C54, 0xF758, 0x9C55, 0xF759, 0x9C56, 0xF75A, 0x9C57, 0xF75B, 0x9C58, 0xF75C, 0x9C59, 0xF75D, 0x9C5A, 0xF75E, + 0x9C5B, 0xF75F, 0x9C5C, 0xF760, 0x9C5D, 0xF761, 0x9C5E, 0xF762, 0x9C5F, 0xF763, 0x9C60, 0xF764, 0x9C61, 0xF765, 0x9C62, 0xF766, + 0x9C63, 0xF767, 0x9C64, 0xF768, 0x9C65, 0xF769, 0x9C66, 0xF76A, 0x9C67, 0xF76B, 0x9C68, 0xF76C, 0x9C69, 0xF76D, 0x9C6A, 0xF76E, + 0x9C6B, 0xF76F, 0x9C6C, 0xF770, 0x9C6D, 0xF771, 0x9C6E, 0xF772, 0x9C6F, 0xF773, 0x9C70, 0xF774, 0x9C71, 0xF775, 0x9C72, 0xF776, + 0x9C73, 0xF777, 0x9C74, 0xF778, 0x9C75, 0xF779, 0x9C76, 0xF77A, 0x9C77, 0xF77B, 0x9C78, 0xF77C, 0x9C79, 0xF77D, 0x9C7A, 0xF77E, + 0x9C7B, 0xF780, 0x9C7C, 0xD3E3, 0x9C7D, 0xF781, 0x9C7E, 0xF782, 0x9C7F, 0xF6CF, 0x9C80, 0xF783, 0x9C81, 0xC2B3, 0x9C82, 0xF6D0, + 0x9C83, 0xF784, 0x9C84, 0xF785, 0x9C85, 0xF6D1, 0x9C86, 0xF6D2, 0x9C87, 0xF6D3, 0x9C88, 0xF6D4, 0x9C89, 0xF786, 0x9C8A, 0xF787, + 0x9C8B, 0xF6D6, 0x9C8C, 0xF788, 0x9C8D, 0xB1AB, 0x9C8E, 0xF6D7, 0x9C8F, 0xF789, 0x9C90, 0xF6D8, 0x9C91, 0xF6D9, 0x9C92, 0xF6DA, + 0x9C93, 0xF78A, 0x9C94, 0xF6DB, 0x9C95, 0xF6DC, 0x9C96, 0xF78B, 0x9C97, 0xF78C, 0x9C98, 0xF78D, 0x9C99, 0xF78E, 0x9C9A, 0xF6DD, + 0x9C9B, 0xF6DE, 0x9C9C, 0xCFCA, 0x9C9D, 0xF78F, 0x9C9E, 0xF6DF, 0x9C9F, 0xF6E0, 0x9CA0, 0xF6E1, 0x9CA1, 0xF6E2, 0x9CA2, 0xF6E3, + 0x9CA3, 0xF6E4, 0x9CA4, 0xC0F0, 0x9CA5, 0xF6E5, 0x9CA6, 0xF6E6, 0x9CA7, 0xF6E7, 0x9CA8, 0xF6E8, 0x9CA9, 0xF6E9, 0x9CAA, 0xF790, + 0x9CAB, 0xF6EA, 0x9CAC, 0xF791, 0x9CAD, 0xF6EB, 0x9CAE, 0xF6EC, 0x9CAF, 0xF792, 0x9CB0, 0xF6ED, 0x9CB1, 0xF6EE, 0x9CB2, 0xF6EF, + 0x9CB3, 0xF6F0, 0x9CB4, 0xF6F1, 0x9CB5, 0xF6F2, 0x9CB6, 0xF6F3, 0x9CB7, 0xF6F4, 0x9CB8, 0xBEA8, 0x9CB9, 0xF793, 0x9CBA, 0xF6F5, + 0x9CBB, 0xF6F6, 0x9CBC, 0xF6F7, 0x9CBD, 0xF6F8, 0x9CBE, 0xF794, 0x9CBF, 0xF795, 0x9CC0, 0xF796, 0x9CC1, 0xF797, 0x9CC2, 0xF798, + 0x9CC3, 0xC8FA, 0x9CC4, 0xF6F9, 0x9CC5, 0xF6FA, 0x9CC6, 0xF6FB, 0x9CC7, 0xF6FC, 0x9CC8, 0xF799, 0x9CC9, 0xF79A, 0x9CCA, 0xF6FD, + 0x9CCB, 0xF6FE, 0x9CCC, 0xF7A1, 0x9CCD, 0xF7A2, 0x9CCE, 0xF7A3, 0x9CCF, 0xF7A4, 0x9CD0, 0xF7A5, 0x9CD1, 0xF79B, 0x9CD2, 0xF79C, + 0x9CD3, 0xF7A6, 0x9CD4, 0xF7A7, 0x9CD5, 0xF7A8, 0x9CD6, 0xB1EE, 0x9CD7, 0xF7A9, 0x9CD8, 0xF7AA, 0x9CD9, 0xF7AB, 0x9CDA, 0xF79D, + 0x9CDB, 0xF79E, 0x9CDC, 0xF7AC, 0x9CDD, 0xF7AD, 0x9CDE, 0xC1DB, 0x9CDF, 0xF7AE, 0x9CE0, 0xF79F, 0x9CE1, 0xF7A0, 0x9CE2, 0xF7AF, + 0x9CE3, 0xF840, 0x9CE4, 0xF841, 0x9CE5, 0xF842, 0x9CE6, 0xF843, 0x9CE7, 0xF844, 0x9CE8, 0xF845, 0x9CE9, 0xF846, 0x9CEA, 0xF847, + 0x9CEB, 0xF848, 0x9CEC, 0xF849, 0x9CED, 0xF84A, 0x9CEE, 0xF84B, 0x9CEF, 0xF84C, 0x9CF0, 0xF84D, 0x9CF1, 0xF84E, 0x9CF2, 0xF84F, + 0x9CF3, 0xF850, 0x9CF4, 0xF851, 0x9CF5, 0xF852, 0x9CF6, 0xF853, 0x9CF7, 0xF854, 0x9CF8, 0xF855, 0x9CF9, 0xF856, 0x9CFA, 0xF857, + 0x9CFB, 0xF858, 0x9CFC, 0xF859, 0x9CFD, 0xF85A, 0x9CFE, 0xF85B, 0x9CFF, 0xF85C, 0x9D00, 0xF85D, 0x9D01, 0xF85E, 0x9D02, 0xF85F, + 0x9D03, 0xF860, 0x9D04, 0xF861, 0x9D05, 0xF862, 0x9D06, 0xF863, 0x9D07, 0xF864, 0x9D08, 0xF865, 0x9D09, 0xF866, 0x9D0A, 0xF867, + 0x9D0B, 0xF868, 0x9D0C, 0xF869, 0x9D0D, 0xF86A, 0x9D0E, 0xF86B, 0x9D0F, 0xF86C, 0x9D10, 0xF86D, 0x9D11, 0xF86E, 0x9D12, 0xF86F, + 0x9D13, 0xF870, 0x9D14, 0xF871, 0x9D15, 0xF872, 0x9D16, 0xF873, 0x9D17, 0xF874, 0x9D18, 0xF875, 0x9D19, 0xF876, 0x9D1A, 0xF877, + 0x9D1B, 0xF878, 0x9D1C, 0xF879, 0x9D1D, 0xF87A, 0x9D1E, 0xF87B, 0x9D1F, 0xF87C, 0x9D20, 0xF87D, 0x9D21, 0xF87E, 0x9D22, 0xF880, + 0x9D23, 0xF881, 0x9D24, 0xF882, 0x9D25, 0xF883, 0x9D26, 0xF884, 0x9D27, 0xF885, 0x9D28, 0xF886, 0x9D29, 0xF887, 0x9D2A, 0xF888, + 0x9D2B, 0xF889, 0x9D2C, 0xF88A, 0x9D2D, 0xF88B, 0x9D2E, 0xF88C, 0x9D2F, 0xF88D, 0x9D30, 0xF88E, 0x9D31, 0xF88F, 0x9D32, 0xF890, + 0x9D33, 0xF891, 0x9D34, 0xF892, 0x9D35, 0xF893, 0x9D36, 0xF894, 0x9D37, 0xF895, 0x9D38, 0xF896, 0x9D39, 0xF897, 0x9D3A, 0xF898, + 0x9D3B, 0xF899, 0x9D3C, 0xF89A, 0x9D3D, 0xF89B, 0x9D3E, 0xF89C, 0x9D3F, 0xF89D, 0x9D40, 0xF89E, 0x9D41, 0xF89F, 0x9D42, 0xF8A0, + 0x9D43, 0xF940, 0x9D44, 0xF941, 0x9D45, 0xF942, 0x9D46, 0xF943, 0x9D47, 0xF944, 0x9D48, 0xF945, 0x9D49, 0xF946, 0x9D4A, 0xF947, + 0x9D4B, 0xF948, 0x9D4C, 0xF949, 0x9D4D, 0xF94A, 0x9D4E, 0xF94B, 0x9D4F, 0xF94C, 0x9D50, 0xF94D, 0x9D51, 0xF94E, 0x9D52, 0xF94F, + 0x9D53, 0xF950, 0x9D54, 0xF951, 0x9D55, 0xF952, 0x9D56, 0xF953, 0x9D57, 0xF954, 0x9D58, 0xF955, 0x9D59, 0xF956, 0x9D5A, 0xF957, + 0x9D5B, 0xF958, 0x9D5C, 0xF959, 0x9D5D, 0xF95A, 0x9D5E, 0xF95B, 0x9D5F, 0xF95C, 0x9D60, 0xF95D, 0x9D61, 0xF95E, 0x9D62, 0xF95F, + 0x9D63, 0xF960, 0x9D64, 0xF961, 0x9D65, 0xF962, 0x9D66, 0xF963, 0x9D67, 0xF964, 0x9D68, 0xF965, 0x9D69, 0xF966, 0x9D6A, 0xF967, + 0x9D6B, 0xF968, 0x9D6C, 0xF969, 0x9D6D, 0xF96A, 0x9D6E, 0xF96B, 0x9D6F, 0xF96C, 0x9D70, 0xF96D, 0x9D71, 0xF96E, 0x9D72, 0xF96F, + 0x9D73, 0xF970, 0x9D74, 0xF971, 0x9D75, 0xF972, 0x9D76, 0xF973, 0x9D77, 0xF974, 0x9D78, 0xF975, 0x9D79, 0xF976, 0x9D7A, 0xF977, + 0x9D7B, 0xF978, 0x9D7C, 0xF979, 0x9D7D, 0xF97A, 0x9D7E, 0xF97B, 0x9D7F, 0xF97C, 0x9D80, 0xF97D, 0x9D81, 0xF97E, 0x9D82, 0xF980, + 0x9D83, 0xF981, 0x9D84, 0xF982, 0x9D85, 0xF983, 0x9D86, 0xF984, 0x9D87, 0xF985, 0x9D88, 0xF986, 0x9D89, 0xF987, 0x9D8A, 0xF988, + 0x9D8B, 0xF989, 0x9D8C, 0xF98A, 0x9D8D, 0xF98B, 0x9D8E, 0xF98C, 0x9D8F, 0xF98D, 0x9D90, 0xF98E, 0x9D91, 0xF98F, 0x9D92, 0xF990, + 0x9D93, 0xF991, 0x9D94, 0xF992, 0x9D95, 0xF993, 0x9D96, 0xF994, 0x9D97, 0xF995, 0x9D98, 0xF996, 0x9D99, 0xF997, 0x9D9A, 0xF998, + 0x9D9B, 0xF999, 0x9D9C, 0xF99A, 0x9D9D, 0xF99B, 0x9D9E, 0xF99C, 0x9D9F, 0xF99D, 0x9DA0, 0xF99E, 0x9DA1, 0xF99F, 0x9DA2, 0xF9A0, + 0x9DA3, 0xFA40, 0x9DA4, 0xFA41, 0x9DA5, 0xFA42, 0x9DA6, 0xFA43, 0x9DA7, 0xFA44, 0x9DA8, 0xFA45, 0x9DA9, 0xFA46, 0x9DAA, 0xFA47, + 0x9DAB, 0xFA48, 0x9DAC, 0xFA49, 0x9DAD, 0xFA4A, 0x9DAE, 0xFA4B, 0x9DAF, 0xFA4C, 0x9DB0, 0xFA4D, 0x9DB1, 0xFA4E, 0x9DB2, 0xFA4F, + 0x9DB3, 0xFA50, 0x9DB4, 0xFA51, 0x9DB5, 0xFA52, 0x9DB6, 0xFA53, 0x9DB7, 0xFA54, 0x9DB8, 0xFA55, 0x9DB9, 0xFA56, 0x9DBA, 0xFA57, + 0x9DBB, 0xFA58, 0x9DBC, 0xFA59, 0x9DBD, 0xFA5A, 0x9DBE, 0xFA5B, 0x9DBF, 0xFA5C, 0x9DC0, 0xFA5D, 0x9DC1, 0xFA5E, 0x9DC2, 0xFA5F, + 0x9DC3, 0xFA60, 0x9DC4, 0xFA61, 0x9DC5, 0xFA62, 0x9DC6, 0xFA63, 0x9DC7, 0xFA64, 0x9DC8, 0xFA65, 0x9DC9, 0xFA66, 0x9DCA, 0xFA67, + 0x9DCB, 0xFA68, 0x9DCC, 0xFA69, 0x9DCD, 0xFA6A, 0x9DCE, 0xFA6B, 0x9DCF, 0xFA6C, 0x9DD0, 0xFA6D, 0x9DD1, 0xFA6E, 0x9DD2, 0xFA6F, + 0x9DD3, 0xFA70, 0x9DD4, 0xFA71, 0x9DD5, 0xFA72, 0x9DD6, 0xFA73, 0x9DD7, 0xFA74, 0x9DD8, 0xFA75, 0x9DD9, 0xFA76, 0x9DDA, 0xFA77, + 0x9DDB, 0xFA78, 0x9DDC, 0xFA79, 0x9DDD, 0xFA7A, 0x9DDE, 0xFA7B, 0x9DDF, 0xFA7C, 0x9DE0, 0xFA7D, 0x9DE1, 0xFA7E, 0x9DE2, 0xFA80, + 0x9DE3, 0xFA81, 0x9DE4, 0xFA82, 0x9DE5, 0xFA83, 0x9DE6, 0xFA84, 0x9DE7, 0xFA85, 0x9DE8, 0xFA86, 0x9DE9, 0xFA87, 0x9DEA, 0xFA88, + 0x9DEB, 0xFA89, 0x9DEC, 0xFA8A, 0x9DED, 0xFA8B, 0x9DEE, 0xFA8C, 0x9DEF, 0xFA8D, 0x9DF0, 0xFA8E, 0x9DF1, 0xFA8F, 0x9DF2, 0xFA90, + 0x9DF3, 0xFA91, 0x9DF4, 0xFA92, 0x9DF5, 0xFA93, 0x9DF6, 0xFA94, 0x9DF7, 0xFA95, 0x9DF8, 0xFA96, 0x9DF9, 0xFA97, 0x9DFA, 0xFA98, + 0x9DFB, 0xFA99, 0x9DFC, 0xFA9A, 0x9DFD, 0xFA9B, 0x9DFE, 0xFA9C, 0x9DFF, 0xFA9D, 0x9E00, 0xFA9E, 0x9E01, 0xFA9F, 0x9E02, 0xFAA0, + 0x9E03, 0xFB40, 0x9E04, 0xFB41, 0x9E05, 0xFB42, 0x9E06, 0xFB43, 0x9E07, 0xFB44, 0x9E08, 0xFB45, 0x9E09, 0xFB46, 0x9E0A, 0xFB47, + 0x9E0B, 0xFB48, 0x9E0C, 0xFB49, 0x9E0D, 0xFB4A, 0x9E0E, 0xFB4B, 0x9E0F, 0xFB4C, 0x9E10, 0xFB4D, 0x9E11, 0xFB4E, 0x9E12, 0xFB4F, + 0x9E13, 0xFB50, 0x9E14, 0xFB51, 0x9E15, 0xFB52, 0x9E16, 0xFB53, 0x9E17, 0xFB54, 0x9E18, 0xFB55, 0x9E19, 0xFB56, 0x9E1A, 0xFB57, + 0x9E1B, 0xFB58, 0x9E1C, 0xFB59, 0x9E1D, 0xFB5A, 0x9E1E, 0xFB5B, 0x9E1F, 0xC4F1, 0x9E20, 0xF0AF, 0x9E21, 0xBCA6, 0x9E22, 0xF0B0, + 0x9E23, 0xC3F9, 0x9E24, 0xFB5C, 0x9E25, 0xC5B8, 0x9E26, 0xD1BB, 0x9E27, 0xFB5D, 0x9E28, 0xF0B1, 0x9E29, 0xF0B2, 0x9E2A, 0xF0B3, + 0x9E2B, 0xF0B4, 0x9E2C, 0xF0B5, 0x9E2D, 0xD1BC, 0x9E2E, 0xFB5E, 0x9E2F, 0xD1EC, 0x9E30, 0xFB5F, 0x9E31, 0xF0B7, 0x9E32, 0xF0B6, + 0x9E33, 0xD4A7, 0x9E34, 0xFB60, 0x9E35, 0xCDD2, 0x9E36, 0xF0B8, 0x9E37, 0xF0BA, 0x9E38, 0xF0B9, 0x9E39, 0xF0BB, 0x9E3A, 0xF0BC, + 0x9E3B, 0xFB61, 0x9E3C, 0xFB62, 0x9E3D, 0xB8EB, 0x9E3E, 0xF0BD, 0x9E3F, 0xBAE8, 0x9E40, 0xFB63, 0x9E41, 0xF0BE, 0x9E42, 0xF0BF, + 0x9E43, 0xBEE9, 0x9E44, 0xF0C0, 0x9E45, 0xB6EC, 0x9E46, 0xF0C1, 0x9E47, 0xF0C2, 0x9E48, 0xF0C3, 0x9E49, 0xF0C4, 0x9E4A, 0xC8B5, + 0x9E4B, 0xF0C5, 0x9E4C, 0xF0C6, 0x9E4D, 0xFB64, 0x9E4E, 0xF0C7, 0x9E4F, 0xC5F4, 0x9E50, 0xFB65, 0x9E51, 0xF0C8, 0x9E52, 0xFB66, + 0x9E53, 0xFB67, 0x9E54, 0xFB68, 0x9E55, 0xF0C9, 0x9E56, 0xFB69, 0x9E57, 0xF0CA, 0x9E58, 0xF7BD, 0x9E59, 0xFB6A, 0x9E5A, 0xF0CB, + 0x9E5B, 0xF0CC, 0x9E5C, 0xF0CD, 0x9E5D, 0xFB6B, 0x9E5E, 0xF0CE, 0x9E5F, 0xFB6C, 0x9E60, 0xFB6D, 0x9E61, 0xFB6E, 0x9E62, 0xFB6F, + 0x9E63, 0xF0CF, 0x9E64, 0xBAD7, 0x9E65, 0xFB70, 0x9E66, 0xF0D0, 0x9E67, 0xF0D1, 0x9E68, 0xF0D2, 0x9E69, 0xF0D3, 0x9E6A, 0xF0D4, + 0x9E6B, 0xF0D5, 0x9E6C, 0xF0D6, 0x9E6D, 0xF0D8, 0x9E6E, 0xFB71, 0x9E6F, 0xFB72, 0x9E70, 0xD3A5, 0x9E71, 0xF0D7, 0x9E72, 0xFB73, + 0x9E73, 0xF0D9, 0x9E74, 0xFB74, 0x9E75, 0xFB75, 0x9E76, 0xFB76, 0x9E77, 0xFB77, 0x9E78, 0xFB78, 0x9E79, 0xFB79, 0x9E7A, 0xFB7A, + 0x9E7B, 0xFB7B, 0x9E7C, 0xFB7C, 0x9E7D, 0xFB7D, 0x9E7E, 0xF5BA, 0x9E7F, 0xC2B9, 0x9E80, 0xFB7E, 0x9E81, 0xFB80, 0x9E82, 0xF7E4, + 0x9E83, 0xFB81, 0x9E84, 0xFB82, 0x9E85, 0xFB83, 0x9E86, 0xFB84, 0x9E87, 0xF7E5, 0x9E88, 0xF7E6, 0x9E89, 0xFB85, 0x9E8A, 0xFB86, + 0x9E8B, 0xF7E7, 0x9E8C, 0xFB87, 0x9E8D, 0xFB88, 0x9E8E, 0xFB89, 0x9E8F, 0xFB8A, 0x9E90, 0xFB8B, 0x9E91, 0xFB8C, 0x9E92, 0xF7E8, + 0x9E93, 0xC2B4, 0x9E94, 0xFB8D, 0x9E95, 0xFB8E, 0x9E96, 0xFB8F, 0x9E97, 0xFB90, 0x9E98, 0xFB91, 0x9E99, 0xFB92, 0x9E9A, 0xFB93, + 0x9E9B, 0xFB94, 0x9E9C, 0xFB95, 0x9E9D, 0xF7EA, 0x9E9E, 0xFB96, 0x9E9F, 0xF7EB, 0x9EA0, 0xFB97, 0x9EA1, 0xFB98, 0x9EA2, 0xFB99, + 0x9EA3, 0xFB9A, 0x9EA4, 0xFB9B, 0x9EA5, 0xFB9C, 0x9EA6, 0xC2F3, 0x9EA7, 0xFB9D, 0x9EA8, 0xFB9E, 0x9EA9, 0xFB9F, 0x9EAA, 0xFBA0, + 0x9EAB, 0xFC40, 0x9EAC, 0xFC41, 0x9EAD, 0xFC42, 0x9EAE, 0xFC43, 0x9EAF, 0xFC44, 0x9EB0, 0xFC45, 0x9EB1, 0xFC46, 0x9EB2, 0xFC47, + 0x9EB3, 0xFC48, 0x9EB4, 0xF4F0, 0x9EB5, 0xFC49, 0x9EB6, 0xFC4A, 0x9EB7, 0xFC4B, 0x9EB8, 0xF4EF, 0x9EB9, 0xFC4C, 0x9EBA, 0xFC4D, + 0x9EBB, 0xC2E9, 0x9EBC, 0xFC4E, 0x9EBD, 0xF7E1, 0x9EBE, 0xF7E2, 0x9EBF, 0xFC4F, 0x9EC0, 0xFC50, 0x9EC1, 0xFC51, 0x9EC2, 0xFC52, + 0x9EC3, 0xFC53, 0x9EC4, 0xBBC6, 0x9EC5, 0xFC54, 0x9EC6, 0xFC55, 0x9EC7, 0xFC56, 0x9EC8, 0xFC57, 0x9EC9, 0xD9E4, 0x9ECA, 0xFC58, + 0x9ECB, 0xFC59, 0x9ECC, 0xFC5A, 0x9ECD, 0xCAF2, 0x9ECE, 0xC0E8, 0x9ECF, 0xF0A4, 0x9ED0, 0xFC5B, 0x9ED1, 0xBADA, 0x9ED2, 0xFC5C, + 0x9ED3, 0xFC5D, 0x9ED4, 0xC7AD, 0x9ED5, 0xFC5E, 0x9ED6, 0xFC5F, 0x9ED7, 0xFC60, 0x9ED8, 0xC4AC, 0x9ED9, 0xFC61, 0x9EDA, 0xFC62, + 0x9EDB, 0xF7EC, 0x9EDC, 0xF7ED, 0x9EDD, 0xF7EE, 0x9EDE, 0xFC63, 0x9EDF, 0xF7F0, 0x9EE0, 0xF7EF, 0x9EE1, 0xFC64, 0x9EE2, 0xF7F1, + 0x9EE3, 0xFC65, 0x9EE4, 0xFC66, 0x9EE5, 0xF7F4, 0x9EE6, 0xFC67, 0x9EE7, 0xF7F3, 0x9EE8, 0xFC68, 0x9EE9, 0xF7F2, 0x9EEA, 0xF7F5, + 0x9EEB, 0xFC69, 0x9EEC, 0xFC6A, 0x9EED, 0xFC6B, 0x9EEE, 0xFC6C, 0x9EEF, 0xF7F6, 0x9EF0, 0xFC6D, 0x9EF1, 0xFC6E, 0x9EF2, 0xFC6F, + 0x9EF3, 0xFC70, 0x9EF4, 0xFC71, 0x9EF5, 0xFC72, 0x9EF6, 0xFC73, 0x9EF7, 0xFC74, 0x9EF8, 0xFC75, 0x9EF9, 0xEDE9, 0x9EFA, 0xFC76, + 0x9EFB, 0xEDEA, 0x9EFC, 0xEDEB, 0x9EFD, 0xFC77, 0x9EFE, 0xF6BC, 0x9EFF, 0xFC78, 0x9F00, 0xFC79, 0x9F01, 0xFC7A, 0x9F02, 0xFC7B, + 0x9F03, 0xFC7C, 0x9F04, 0xFC7D, 0x9F05, 0xFC7E, 0x9F06, 0xFC80, 0x9F07, 0xFC81, 0x9F08, 0xFC82, 0x9F09, 0xFC83, 0x9F0A, 0xFC84, + 0x9F0B, 0xF6BD, 0x9F0C, 0xFC85, 0x9F0D, 0xF6BE, 0x9F0E, 0xB6A6, 0x9F0F, 0xFC86, 0x9F10, 0xD8BE, 0x9F11, 0xFC87, 0x9F12, 0xFC88, + 0x9F13, 0xB9C4, 0x9F14, 0xFC89, 0x9F15, 0xFC8A, 0x9F16, 0xFC8B, 0x9F17, 0xD8BB, 0x9F18, 0xFC8C, 0x9F19, 0xDCB1, 0x9F1A, 0xFC8D, + 0x9F1B, 0xFC8E, 0x9F1C, 0xFC8F, 0x9F1D, 0xFC90, 0x9F1E, 0xFC91, 0x9F1F, 0xFC92, 0x9F20, 0xCAF3, 0x9F21, 0xFC93, 0x9F22, 0xF7F7, + 0x9F23, 0xFC94, 0x9F24, 0xFC95, 0x9F25, 0xFC96, 0x9F26, 0xFC97, 0x9F27, 0xFC98, 0x9F28, 0xFC99, 0x9F29, 0xFC9A, 0x9F2A, 0xFC9B, + 0x9F2B, 0xFC9C, 0x9F2C, 0xF7F8, 0x9F2D, 0xFC9D, 0x9F2E, 0xFC9E, 0x9F2F, 0xF7F9, 0x9F30, 0xFC9F, 0x9F31, 0xFCA0, 0x9F32, 0xFD40, + 0x9F33, 0xFD41, 0x9F34, 0xFD42, 0x9F35, 0xFD43, 0x9F36, 0xFD44, 0x9F37, 0xF7FB, 0x9F38, 0xFD45, 0x9F39, 0xF7FA, 0x9F3A, 0xFD46, + 0x9F3B, 0xB1C7, 0x9F3C, 0xFD47, 0x9F3D, 0xF7FC, 0x9F3E, 0xF7FD, 0x9F3F, 0xFD48, 0x9F40, 0xFD49, 0x9F41, 0xFD4A, 0x9F42, 0xFD4B, + 0x9F43, 0xFD4C, 0x9F44, 0xF7FE, 0x9F45, 0xFD4D, 0x9F46, 0xFD4E, 0x9F47, 0xFD4F, 0x9F48, 0xFD50, 0x9F49, 0xFD51, 0x9F4A, 0xFD52, + 0x9F4B, 0xFD53, 0x9F4C, 0xFD54, 0x9F4D, 0xFD55, 0x9F4E, 0xFD56, 0x9F4F, 0xFD57, 0x9F50, 0xC6EB, 0x9F51, 0xECB4, 0x9F52, 0xFD58, + 0x9F53, 0xFD59, 0x9F54, 0xFD5A, 0x9F55, 0xFD5B, 0x9F56, 0xFD5C, 0x9F57, 0xFD5D, 0x9F58, 0xFD5E, 0x9F59, 0xFD5F, 0x9F5A, 0xFD60, + 0x9F5B, 0xFD61, 0x9F5C, 0xFD62, 0x9F5D, 0xFD63, 0x9F5E, 0xFD64, 0x9F5F, 0xFD65, 0x9F60, 0xFD66, 0x9F61, 0xFD67, 0x9F62, 0xFD68, + 0x9F63, 0xFD69, 0x9F64, 0xFD6A, 0x9F65, 0xFD6B, 0x9F66, 0xFD6C, 0x9F67, 0xFD6D, 0x9F68, 0xFD6E, 0x9F69, 0xFD6F, 0x9F6A, 0xFD70, + 0x9F6B, 0xFD71, 0x9F6C, 0xFD72, 0x9F6D, 0xFD73, 0x9F6E, 0xFD74, 0x9F6F, 0xFD75, 0x9F70, 0xFD76, 0x9F71, 0xFD77, 0x9F72, 0xFD78, + 0x9F73, 0xFD79, 0x9F74, 0xFD7A, 0x9F75, 0xFD7B, 0x9F76, 0xFD7C, 0x9F77, 0xFD7D, 0x9F78, 0xFD7E, 0x9F79, 0xFD80, 0x9F7A, 0xFD81, + 0x9F7B, 0xFD82, 0x9F7C, 0xFD83, 0x9F7D, 0xFD84, 0x9F7E, 0xFD85, 0x9F7F, 0xB3DD, 0x9F80, 0xF6B3, 0x9F81, 0xFD86, 0x9F82, 0xFD87, + 0x9F83, 0xF6B4, 0x9F84, 0xC1E4, 0x9F85, 0xF6B5, 0x9F86, 0xF6B6, 0x9F87, 0xF6B7, 0x9F88, 0xF6B8, 0x9F89, 0xF6B9, 0x9F8A, 0xF6BA, + 0x9F8B, 0xC8A3, 0x9F8C, 0xF6BB, 0x9F8D, 0xFD88, 0x9F8E, 0xFD89, 0x9F8F, 0xFD8A, 0x9F90, 0xFD8B, 0x9F91, 0xFD8C, 0x9F92, 0xFD8D, + 0x9F93, 0xFD8E, 0x9F94, 0xFD8F, 0x9F95, 0xFD90, 0x9F96, 0xFD91, 0x9F97, 0xFD92, 0x9F98, 0xFD93, 0x9F99, 0xC1FA, 0x9F9A, 0xB9A8, + 0x9F9B, 0xEDE8, 0x9F9C, 0xFD94, 0x9F9D, 0xFD95, 0x9F9E, 0xFD96, 0x9F9F, 0xB9EA, 0x9FA0, 0xD9DF, 0x9FA1, 0xFD97, 0x9FA2, 0xFD98, + 0x9FA3, 0xFD99, 0x9FA4, 0xFD9A, 0x9FA5, 0xFD9B, 0xF92C, 0xFD9C, 0xF979, 0xFD9D, 0xF995, 0xFD9E, 0xF9E7, 0xFD9F, 0xF9F1, 0xFDA0, + 0xFA0C, 0xFE40, 0xFA0D, 0xFE41, 0xFA0E, 0xFE42, 0xFA0F, 0xFE43, 0xFA11, 0xFE44, 0xFA13, 0xFE45, 0xFA14, 0xFE46, 0xFA18, 0xFE47, + 0xFA1F, 0xFE48, 0xFA20, 0xFE49, 0xFA21, 0xFE4A, 0xFA23, 0xFE4B, 0xFA24, 0xFE4C, 0xFA27, 0xFE4D, 0xFA28, 0xFE4E, 0xFA29, 0xFE4F, + 0xFE30, 0xA955, 0xFE31, 0xA6F2, 0xFE33, 0xA6F4, 0xFE34, 0xA6F5, 0xFE35, 0xA6E0, 0xFE36, 0xA6E1, 0xFE37, 0xA6F0, 0xFE38, 0xA6F1, + 0xFE39, 0xA6E2, 0xFE3A, 0xA6E3, 0xFE3B, 0xA6EE, 0xFE3C, 0xA6EF, 0xFE3D, 0xA6E6, 0xFE3E, 0xA6E7, 0xFE3F, 0xA6E4, 0xFE40, 0xA6E5, + 0xFE41, 0xA6E8, 0xFE42, 0xA6E9, 0xFE43, 0xA6EA, 0xFE44, 0xA6EB, 0xFE49, 0xA968, 0xFE4A, 0xA969, 0xFE4B, 0xA96A, 0xFE4C, 0xA96B, + 0xFE4D, 0xA96C, 0xFE4E, 0xA96D, 0xFE4F, 0xA96E, 0xFE50, 0xA96F, 0xFE51, 0xA970, 0xFE52, 0xA971, 0xFE54, 0xA972, 0xFE55, 0xA973, + 0xFE56, 0xA974, 0xFE57, 0xA975, 0xFE59, 0xA976, 0xFE5A, 0xA977, 0xFE5B, 0xA978, 0xFE5C, 0xA979, 0xFE5D, 0xA97A, 0xFE5E, 0xA97B, + 0xFE5F, 0xA97C, 0xFE60, 0xA97D, 0xFE61, 0xA97E, 0xFE62, 0xA980, 0xFE63, 0xA981, 0xFE64, 0xA982, 0xFE65, 0xA983, 0xFE66, 0xA984, + 0xFE68, 0xA985, 0xFE69, 0xA986, 0xFE6A, 0xA987, 0xFE6B, 0xA988, 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA1E7, + 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC, + 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4, + 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC, + 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4, + 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC, + 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4, + 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA3DC, + 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4, + 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC, + 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4, + 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC, + 0xFF5D, 0xA3FD, 0xFF5E, 0xA1AB, 0xFFE0, 0xA1E9, 0xFFE1, 0xA1EA, 0xFFE2, 0xA956, 0xFFE3, 0xA3FE, 0xFFE4, 0xA957, 0xFFE5, 0xA3A4, + 0, 0 +}; + +static const WCHAR oem2uni936[] = { /* GBK --> Unicode pairs */ + 0x0080, 0x20AC, 0x8140, 0x4E02, 0x8141, 0x4E04, 0x8142, 0x4E05, 0x8143, 0x4E06, 0x8144, 0x4E0F, 0x8145, 0x4E12, 0x8146, 0x4E17, + 0x8147, 0x4E1F, 0x8148, 0x4E20, 0x8149, 0x4E21, 0x814A, 0x4E23, 0x814B, 0x4E26, 0x814C, 0x4E29, 0x814D, 0x4E2E, 0x814E, 0x4E2F, + 0x814F, 0x4E31, 0x8150, 0x4E33, 0x8151, 0x4E35, 0x8152, 0x4E37, 0x8153, 0x4E3C, 0x8154, 0x4E40, 0x8155, 0x4E41, 0x8156, 0x4E42, + 0x8157, 0x4E44, 0x8158, 0x4E46, 0x8159, 0x4E4A, 0x815A, 0x4E51, 0x815B, 0x4E55, 0x815C, 0x4E57, 0x815D, 0x4E5A, 0x815E, 0x4E5B, + 0x815F, 0x4E62, 0x8160, 0x4E63, 0x8161, 0x4E64, 0x8162, 0x4E65, 0x8163, 0x4E67, 0x8164, 0x4E68, 0x8165, 0x4E6A, 0x8166, 0x4E6B, + 0x8167, 0x4E6C, 0x8168, 0x4E6D, 0x8169, 0x4E6E, 0x816A, 0x4E6F, 0x816B, 0x4E72, 0x816C, 0x4E74, 0x816D, 0x4E75, 0x816E, 0x4E76, + 0x816F, 0x4E77, 0x8170, 0x4E78, 0x8171, 0x4E79, 0x8172, 0x4E7A, 0x8173, 0x4E7B, 0x8174, 0x4E7C, 0x8175, 0x4E7D, 0x8176, 0x4E7F, + 0x8177, 0x4E80, 0x8178, 0x4E81, 0x8179, 0x4E82, 0x817A, 0x4E83, 0x817B, 0x4E84, 0x817C, 0x4E85, 0x817D, 0x4E87, 0x817E, 0x4E8A, + 0x8180, 0x4E90, 0x8181, 0x4E96, 0x8182, 0x4E97, 0x8183, 0x4E99, 0x8184, 0x4E9C, 0x8185, 0x4E9D, 0x8186, 0x4E9E, 0x8187, 0x4EA3, + 0x8188, 0x4EAA, 0x8189, 0x4EAF, 0x818A, 0x4EB0, 0x818B, 0x4EB1, 0x818C, 0x4EB4, 0x818D, 0x4EB6, 0x818E, 0x4EB7, 0x818F, 0x4EB8, + 0x8190, 0x4EB9, 0x8191, 0x4EBC, 0x8192, 0x4EBD, 0x8193, 0x4EBE, 0x8194, 0x4EC8, 0x8195, 0x4ECC, 0x8196, 0x4ECF, 0x8197, 0x4ED0, + 0x8198, 0x4ED2, 0x8199, 0x4EDA, 0x819A, 0x4EDB, 0x819B, 0x4EDC, 0x819C, 0x4EE0, 0x819D, 0x4EE2, 0x819E, 0x4EE6, 0x819F, 0x4EE7, + 0x81A0, 0x4EE9, 0x81A1, 0x4EED, 0x81A2, 0x4EEE, 0x81A3, 0x4EEF, 0x81A4, 0x4EF1, 0x81A5, 0x4EF4, 0x81A6, 0x4EF8, 0x81A7, 0x4EF9, + 0x81A8, 0x4EFA, 0x81A9, 0x4EFC, 0x81AA, 0x4EFE, 0x81AB, 0x4F00, 0x81AC, 0x4F02, 0x81AD, 0x4F03, 0x81AE, 0x4F04, 0x81AF, 0x4F05, + 0x81B0, 0x4F06, 0x81B1, 0x4F07, 0x81B2, 0x4F08, 0x81B3, 0x4F0B, 0x81B4, 0x4F0C, 0x81B5, 0x4F12, 0x81B6, 0x4F13, 0x81B7, 0x4F14, + 0x81B8, 0x4F15, 0x81B9, 0x4F16, 0x81BA, 0x4F1C, 0x81BB, 0x4F1D, 0x81BC, 0x4F21, 0x81BD, 0x4F23, 0x81BE, 0x4F28, 0x81BF, 0x4F29, + 0x81C0, 0x4F2C, 0x81C1, 0x4F2D, 0x81C2, 0x4F2E, 0x81C3, 0x4F31, 0x81C4, 0x4F33, 0x81C5, 0x4F35, 0x81C6, 0x4F37, 0x81C7, 0x4F39, + 0x81C8, 0x4F3B, 0x81C9, 0x4F3E, 0x81CA, 0x4F3F, 0x81CB, 0x4F40, 0x81CC, 0x4F41, 0x81CD, 0x4F42, 0x81CE, 0x4F44, 0x81CF, 0x4F45, + 0x81D0, 0x4F47, 0x81D1, 0x4F48, 0x81D2, 0x4F49, 0x81D3, 0x4F4A, 0x81D4, 0x4F4B, 0x81D5, 0x4F4C, 0x81D6, 0x4F52, 0x81D7, 0x4F54, + 0x81D8, 0x4F56, 0x81D9, 0x4F61, 0x81DA, 0x4F62, 0x81DB, 0x4F66, 0x81DC, 0x4F68, 0x81DD, 0x4F6A, 0x81DE, 0x4F6B, 0x81DF, 0x4F6D, + 0x81E0, 0x4F6E, 0x81E1, 0x4F71, 0x81E2, 0x4F72, 0x81E3, 0x4F75, 0x81E4, 0x4F77, 0x81E5, 0x4F78, 0x81E6, 0x4F79, 0x81E7, 0x4F7A, + 0x81E8, 0x4F7D, 0x81E9, 0x4F80, 0x81EA, 0x4F81, 0x81EB, 0x4F82, 0x81EC, 0x4F85, 0x81ED, 0x4F86, 0x81EE, 0x4F87, 0x81EF, 0x4F8A, + 0x81F0, 0x4F8C, 0x81F1, 0x4F8E, 0x81F2, 0x4F90, 0x81F3, 0x4F92, 0x81F4, 0x4F93, 0x81F5, 0x4F95, 0x81F6, 0x4F96, 0x81F7, 0x4F98, + 0x81F8, 0x4F99, 0x81F9, 0x4F9A, 0x81FA, 0x4F9C, 0x81FB, 0x4F9E, 0x81FC, 0x4F9F, 0x81FD, 0x4FA1, 0x81FE, 0x4FA2, 0x8240, 0x4FA4, + 0x8241, 0x4FAB, 0x8242, 0x4FAD, 0x8243, 0x4FB0, 0x8244, 0x4FB1, 0x8245, 0x4FB2, 0x8246, 0x4FB3, 0x8247, 0x4FB4, 0x8248, 0x4FB6, + 0x8249, 0x4FB7, 0x824A, 0x4FB8, 0x824B, 0x4FB9, 0x824C, 0x4FBA, 0x824D, 0x4FBB, 0x824E, 0x4FBC, 0x824F, 0x4FBD, 0x8250, 0x4FBE, + 0x8251, 0x4FC0, 0x8252, 0x4FC1, 0x8253, 0x4FC2, 0x8254, 0x4FC6, 0x8255, 0x4FC7, 0x8256, 0x4FC8, 0x8257, 0x4FC9, 0x8258, 0x4FCB, + 0x8259, 0x4FCC, 0x825A, 0x4FCD, 0x825B, 0x4FD2, 0x825C, 0x4FD3, 0x825D, 0x4FD4, 0x825E, 0x4FD5, 0x825F, 0x4FD6, 0x8260, 0x4FD9, + 0x8261, 0x4FDB, 0x8262, 0x4FE0, 0x8263, 0x4FE2, 0x8264, 0x4FE4, 0x8265, 0x4FE5, 0x8266, 0x4FE7, 0x8267, 0x4FEB, 0x8268, 0x4FEC, + 0x8269, 0x4FF0, 0x826A, 0x4FF2, 0x826B, 0x4FF4, 0x826C, 0x4FF5, 0x826D, 0x4FF6, 0x826E, 0x4FF7, 0x826F, 0x4FF9, 0x8270, 0x4FFB, + 0x8271, 0x4FFC, 0x8272, 0x4FFD, 0x8273, 0x4FFF, 0x8274, 0x5000, 0x8275, 0x5001, 0x8276, 0x5002, 0x8277, 0x5003, 0x8278, 0x5004, + 0x8279, 0x5005, 0x827A, 0x5006, 0x827B, 0x5007, 0x827C, 0x5008, 0x827D, 0x5009, 0x827E, 0x500A, 0x8280, 0x500B, 0x8281, 0x500E, + 0x8282, 0x5010, 0x8283, 0x5011, 0x8284, 0x5013, 0x8285, 0x5015, 0x8286, 0x5016, 0x8287, 0x5017, 0x8288, 0x501B, 0x8289, 0x501D, + 0x828A, 0x501E, 0x828B, 0x5020, 0x828C, 0x5022, 0x828D, 0x5023, 0x828E, 0x5024, 0x828F, 0x5027, 0x8290, 0x502B, 0x8291, 0x502F, + 0x8292, 0x5030, 0x8293, 0x5031, 0x8294, 0x5032, 0x8295, 0x5033, 0x8296, 0x5034, 0x8297, 0x5035, 0x8298, 0x5036, 0x8299, 0x5037, + 0x829A, 0x5038, 0x829B, 0x5039, 0x829C, 0x503B, 0x829D, 0x503D, 0x829E, 0x503F, 0x829F, 0x5040, 0x82A0, 0x5041, 0x82A1, 0x5042, + 0x82A2, 0x5044, 0x82A3, 0x5045, 0x82A4, 0x5046, 0x82A5, 0x5049, 0x82A6, 0x504A, 0x82A7, 0x504B, 0x82A8, 0x504D, 0x82A9, 0x5050, + 0x82AA, 0x5051, 0x82AB, 0x5052, 0x82AC, 0x5053, 0x82AD, 0x5054, 0x82AE, 0x5056, 0x82AF, 0x5057, 0x82B0, 0x5058, 0x82B1, 0x5059, + 0x82B2, 0x505B, 0x82B3, 0x505D, 0x82B4, 0x505E, 0x82B5, 0x505F, 0x82B6, 0x5060, 0x82B7, 0x5061, 0x82B8, 0x5062, 0x82B9, 0x5063, + 0x82BA, 0x5064, 0x82BB, 0x5066, 0x82BC, 0x5067, 0x82BD, 0x5068, 0x82BE, 0x5069, 0x82BF, 0x506A, 0x82C0, 0x506B, 0x82C1, 0x506D, + 0x82C2, 0x506E, 0x82C3, 0x506F, 0x82C4, 0x5070, 0x82C5, 0x5071, 0x82C6, 0x5072, 0x82C7, 0x5073, 0x82C8, 0x5074, 0x82C9, 0x5075, + 0x82CA, 0x5078, 0x82CB, 0x5079, 0x82CC, 0x507A, 0x82CD, 0x507C, 0x82CE, 0x507D, 0x82CF, 0x5081, 0x82D0, 0x5082, 0x82D1, 0x5083, + 0x82D2, 0x5084, 0x82D3, 0x5086, 0x82D4, 0x5087, 0x82D5, 0x5089, 0x82D6, 0x508A, 0x82D7, 0x508B, 0x82D8, 0x508C, 0x82D9, 0x508E, + 0x82DA, 0x508F, 0x82DB, 0x5090, 0x82DC, 0x5091, 0x82DD, 0x5092, 0x82DE, 0x5093, 0x82DF, 0x5094, 0x82E0, 0x5095, 0x82E1, 0x5096, + 0x82E2, 0x5097, 0x82E3, 0x5098, 0x82E4, 0x5099, 0x82E5, 0x509A, 0x82E6, 0x509B, 0x82E7, 0x509C, 0x82E8, 0x509D, 0x82E9, 0x509E, + 0x82EA, 0x509F, 0x82EB, 0x50A0, 0x82EC, 0x50A1, 0x82ED, 0x50A2, 0x82EE, 0x50A4, 0x82EF, 0x50A6, 0x82F0, 0x50AA, 0x82F1, 0x50AB, + 0x82F2, 0x50AD, 0x82F3, 0x50AE, 0x82F4, 0x50AF, 0x82F5, 0x50B0, 0x82F6, 0x50B1, 0x82F7, 0x50B3, 0x82F8, 0x50B4, 0x82F9, 0x50B5, + 0x82FA, 0x50B6, 0x82FB, 0x50B7, 0x82FC, 0x50B8, 0x82FD, 0x50B9, 0x82FE, 0x50BC, 0x8340, 0x50BD, 0x8341, 0x50BE, 0x8342, 0x50BF, + 0x8343, 0x50C0, 0x8344, 0x50C1, 0x8345, 0x50C2, 0x8346, 0x50C3, 0x8347, 0x50C4, 0x8348, 0x50C5, 0x8349, 0x50C6, 0x834A, 0x50C7, + 0x834B, 0x50C8, 0x834C, 0x50C9, 0x834D, 0x50CA, 0x834E, 0x50CB, 0x834F, 0x50CC, 0x8350, 0x50CD, 0x8351, 0x50CE, 0x8352, 0x50D0, + 0x8353, 0x50D1, 0x8354, 0x50D2, 0x8355, 0x50D3, 0x8356, 0x50D4, 0x8357, 0x50D5, 0x8358, 0x50D7, 0x8359, 0x50D8, 0x835A, 0x50D9, + 0x835B, 0x50DB, 0x835C, 0x50DC, 0x835D, 0x50DD, 0x835E, 0x50DE, 0x835F, 0x50DF, 0x8360, 0x50E0, 0x8361, 0x50E1, 0x8362, 0x50E2, + 0x8363, 0x50E3, 0x8364, 0x50E4, 0x8365, 0x50E5, 0x8366, 0x50E8, 0x8367, 0x50E9, 0x8368, 0x50EA, 0x8369, 0x50EB, 0x836A, 0x50EF, + 0x836B, 0x50F0, 0x836C, 0x50F1, 0x836D, 0x50F2, 0x836E, 0x50F4, 0x836F, 0x50F6, 0x8370, 0x50F7, 0x8371, 0x50F8, 0x8372, 0x50F9, + 0x8373, 0x50FA, 0x8374, 0x50FC, 0x8375, 0x50FD, 0x8376, 0x50FE, 0x8377, 0x50FF, 0x8378, 0x5100, 0x8379, 0x5101, 0x837A, 0x5102, + 0x837B, 0x5103, 0x837C, 0x5104, 0x837D, 0x5105, 0x837E, 0x5108, 0x8380, 0x5109, 0x8381, 0x510A, 0x8382, 0x510C, 0x8383, 0x510D, + 0x8384, 0x510E, 0x8385, 0x510F, 0x8386, 0x5110, 0x8387, 0x5111, 0x8388, 0x5113, 0x8389, 0x5114, 0x838A, 0x5115, 0x838B, 0x5116, + 0x838C, 0x5117, 0x838D, 0x5118, 0x838E, 0x5119, 0x838F, 0x511A, 0x8390, 0x511B, 0x8391, 0x511C, 0x8392, 0x511D, 0x8393, 0x511E, + 0x8394, 0x511F, 0x8395, 0x5120, 0x8396, 0x5122, 0x8397, 0x5123, 0x8398, 0x5124, 0x8399, 0x5125, 0x839A, 0x5126, 0x839B, 0x5127, + 0x839C, 0x5128, 0x839D, 0x5129, 0x839E, 0x512A, 0x839F, 0x512B, 0x83A0, 0x512C, 0x83A1, 0x512D, 0x83A2, 0x512E, 0x83A3, 0x512F, + 0x83A4, 0x5130, 0x83A5, 0x5131, 0x83A6, 0x5132, 0x83A7, 0x5133, 0x83A8, 0x5134, 0x83A9, 0x5135, 0x83AA, 0x5136, 0x83AB, 0x5137, + 0x83AC, 0x5138, 0x83AD, 0x5139, 0x83AE, 0x513A, 0x83AF, 0x513B, 0x83B0, 0x513C, 0x83B1, 0x513D, 0x83B2, 0x513E, 0x83B3, 0x5142, + 0x83B4, 0x5147, 0x83B5, 0x514A, 0x83B6, 0x514C, 0x83B7, 0x514E, 0x83B8, 0x514F, 0x83B9, 0x5150, 0x83BA, 0x5152, 0x83BB, 0x5153, + 0x83BC, 0x5157, 0x83BD, 0x5158, 0x83BE, 0x5159, 0x83BF, 0x515B, 0x83C0, 0x515D, 0x83C1, 0x515E, 0x83C2, 0x515F, 0x83C3, 0x5160, + 0x83C4, 0x5161, 0x83C5, 0x5163, 0x83C6, 0x5164, 0x83C7, 0x5166, 0x83C8, 0x5167, 0x83C9, 0x5169, 0x83CA, 0x516A, 0x83CB, 0x516F, + 0x83CC, 0x5172, 0x83CD, 0x517A, 0x83CE, 0x517E, 0x83CF, 0x517F, 0x83D0, 0x5183, 0x83D1, 0x5184, 0x83D2, 0x5186, 0x83D3, 0x5187, + 0x83D4, 0x518A, 0x83D5, 0x518B, 0x83D6, 0x518E, 0x83D7, 0x518F, 0x83D8, 0x5190, 0x83D9, 0x5191, 0x83DA, 0x5193, 0x83DB, 0x5194, + 0x83DC, 0x5198, 0x83DD, 0x519A, 0x83DE, 0x519D, 0x83DF, 0x519E, 0x83E0, 0x519F, 0x83E1, 0x51A1, 0x83E2, 0x51A3, 0x83E3, 0x51A6, + 0x83E4, 0x51A7, 0x83E5, 0x51A8, 0x83E6, 0x51A9, 0x83E7, 0x51AA, 0x83E8, 0x51AD, 0x83E9, 0x51AE, 0x83EA, 0x51B4, 0x83EB, 0x51B8, + 0x83EC, 0x51B9, 0x83ED, 0x51BA, 0x83EE, 0x51BE, 0x83EF, 0x51BF, 0x83F0, 0x51C1, 0x83F1, 0x51C2, 0x83F2, 0x51C3, 0x83F3, 0x51C5, + 0x83F4, 0x51C8, 0x83F5, 0x51CA, 0x83F6, 0x51CD, 0x83F7, 0x51CE, 0x83F8, 0x51D0, 0x83F9, 0x51D2, 0x83FA, 0x51D3, 0x83FB, 0x51D4, + 0x83FC, 0x51D5, 0x83FD, 0x51D6, 0x83FE, 0x51D7, 0x8440, 0x51D8, 0x8441, 0x51D9, 0x8442, 0x51DA, 0x8443, 0x51DC, 0x8444, 0x51DE, + 0x8445, 0x51DF, 0x8446, 0x51E2, 0x8447, 0x51E3, 0x8448, 0x51E5, 0x8449, 0x51E6, 0x844A, 0x51E7, 0x844B, 0x51E8, 0x844C, 0x51E9, + 0x844D, 0x51EA, 0x844E, 0x51EC, 0x844F, 0x51EE, 0x8450, 0x51F1, 0x8451, 0x51F2, 0x8452, 0x51F4, 0x8453, 0x51F7, 0x8454, 0x51FE, + 0x8455, 0x5204, 0x8456, 0x5205, 0x8457, 0x5209, 0x8458, 0x520B, 0x8459, 0x520C, 0x845A, 0x520F, 0x845B, 0x5210, 0x845C, 0x5213, + 0x845D, 0x5214, 0x845E, 0x5215, 0x845F, 0x521C, 0x8460, 0x521E, 0x8461, 0x521F, 0x8462, 0x5221, 0x8463, 0x5222, 0x8464, 0x5223, + 0x8465, 0x5225, 0x8466, 0x5226, 0x8467, 0x5227, 0x8468, 0x522A, 0x8469, 0x522C, 0x846A, 0x522F, 0x846B, 0x5231, 0x846C, 0x5232, + 0x846D, 0x5234, 0x846E, 0x5235, 0x846F, 0x523C, 0x8470, 0x523E, 0x8471, 0x5244, 0x8472, 0x5245, 0x8473, 0x5246, 0x8474, 0x5247, + 0x8475, 0x5248, 0x8476, 0x5249, 0x8477, 0x524B, 0x8478, 0x524E, 0x8479, 0x524F, 0x847A, 0x5252, 0x847B, 0x5253, 0x847C, 0x5255, + 0x847D, 0x5257, 0x847E, 0x5258, 0x8480, 0x5259, 0x8481, 0x525A, 0x8482, 0x525B, 0x8483, 0x525D, 0x8484, 0x525F, 0x8485, 0x5260, + 0x8486, 0x5262, 0x8487, 0x5263, 0x8488, 0x5264, 0x8489, 0x5266, 0x848A, 0x5268, 0x848B, 0x526B, 0x848C, 0x526C, 0x848D, 0x526D, + 0x848E, 0x526E, 0x848F, 0x5270, 0x8490, 0x5271, 0x8491, 0x5273, 0x8492, 0x5274, 0x8493, 0x5275, 0x8494, 0x5276, 0x8495, 0x5277, + 0x8496, 0x5278, 0x8497, 0x5279, 0x8498, 0x527A, 0x8499, 0x527B, 0x849A, 0x527C, 0x849B, 0x527E, 0x849C, 0x5280, 0x849D, 0x5283, + 0x849E, 0x5284, 0x849F, 0x5285, 0x84A0, 0x5286, 0x84A1, 0x5287, 0x84A2, 0x5289, 0x84A3, 0x528A, 0x84A4, 0x528B, 0x84A5, 0x528C, + 0x84A6, 0x528D, 0x84A7, 0x528E, 0x84A8, 0x528F, 0x84A9, 0x5291, 0x84AA, 0x5292, 0x84AB, 0x5294, 0x84AC, 0x5295, 0x84AD, 0x5296, + 0x84AE, 0x5297, 0x84AF, 0x5298, 0x84B0, 0x5299, 0x84B1, 0x529A, 0x84B2, 0x529C, 0x84B3, 0x52A4, 0x84B4, 0x52A5, 0x84B5, 0x52A6, + 0x84B6, 0x52A7, 0x84B7, 0x52AE, 0x84B8, 0x52AF, 0x84B9, 0x52B0, 0x84BA, 0x52B4, 0x84BB, 0x52B5, 0x84BC, 0x52B6, 0x84BD, 0x52B7, + 0x84BE, 0x52B8, 0x84BF, 0x52B9, 0x84C0, 0x52BA, 0x84C1, 0x52BB, 0x84C2, 0x52BC, 0x84C3, 0x52BD, 0x84C4, 0x52C0, 0x84C5, 0x52C1, + 0x84C6, 0x52C2, 0x84C7, 0x52C4, 0x84C8, 0x52C5, 0x84C9, 0x52C6, 0x84CA, 0x52C8, 0x84CB, 0x52CA, 0x84CC, 0x52CC, 0x84CD, 0x52CD, + 0x84CE, 0x52CE, 0x84CF, 0x52CF, 0x84D0, 0x52D1, 0x84D1, 0x52D3, 0x84D2, 0x52D4, 0x84D3, 0x52D5, 0x84D4, 0x52D7, 0x84D5, 0x52D9, + 0x84D6, 0x52DA, 0x84D7, 0x52DB, 0x84D8, 0x52DC, 0x84D9, 0x52DD, 0x84DA, 0x52DE, 0x84DB, 0x52E0, 0x84DC, 0x52E1, 0x84DD, 0x52E2, + 0x84DE, 0x52E3, 0x84DF, 0x52E5, 0x84E0, 0x52E6, 0x84E1, 0x52E7, 0x84E2, 0x52E8, 0x84E3, 0x52E9, 0x84E4, 0x52EA, 0x84E5, 0x52EB, + 0x84E6, 0x52EC, 0x84E7, 0x52ED, 0x84E8, 0x52EE, 0x84E9, 0x52EF, 0x84EA, 0x52F1, 0x84EB, 0x52F2, 0x84EC, 0x52F3, 0x84ED, 0x52F4, + 0x84EE, 0x52F5, 0x84EF, 0x52F6, 0x84F0, 0x52F7, 0x84F1, 0x52F8, 0x84F2, 0x52FB, 0x84F3, 0x52FC, 0x84F4, 0x52FD, 0x84F5, 0x5301, + 0x84F6, 0x5302, 0x84F7, 0x5303, 0x84F8, 0x5304, 0x84F9, 0x5307, 0x84FA, 0x5309, 0x84FB, 0x530A, 0x84FC, 0x530B, 0x84FD, 0x530C, + 0x84FE, 0x530E, 0x8540, 0x5311, 0x8541, 0x5312, 0x8542, 0x5313, 0x8543, 0x5314, 0x8544, 0x5318, 0x8545, 0x531B, 0x8546, 0x531C, + 0x8547, 0x531E, 0x8548, 0x531F, 0x8549, 0x5322, 0x854A, 0x5324, 0x854B, 0x5325, 0x854C, 0x5327, 0x854D, 0x5328, 0x854E, 0x5329, + 0x854F, 0x532B, 0x8550, 0x532C, 0x8551, 0x532D, 0x8552, 0x532F, 0x8553, 0x5330, 0x8554, 0x5331, 0x8555, 0x5332, 0x8556, 0x5333, + 0x8557, 0x5334, 0x8558, 0x5335, 0x8559, 0x5336, 0x855A, 0x5337, 0x855B, 0x5338, 0x855C, 0x533C, 0x855D, 0x533D, 0x855E, 0x5340, + 0x855F, 0x5342, 0x8560, 0x5344, 0x8561, 0x5346, 0x8562, 0x534B, 0x8563, 0x534C, 0x8564, 0x534D, 0x8565, 0x5350, 0x8566, 0x5354, + 0x8567, 0x5358, 0x8568, 0x5359, 0x8569, 0x535B, 0x856A, 0x535D, 0x856B, 0x5365, 0x856C, 0x5368, 0x856D, 0x536A, 0x856E, 0x536C, + 0x856F, 0x536D, 0x8570, 0x5372, 0x8571, 0x5376, 0x8572, 0x5379, 0x8573, 0x537B, 0x8574, 0x537C, 0x8575, 0x537D, 0x8576, 0x537E, + 0x8577, 0x5380, 0x8578, 0x5381, 0x8579, 0x5383, 0x857A, 0x5387, 0x857B, 0x5388, 0x857C, 0x538A, 0x857D, 0x538E, 0x857E, 0x538F, + 0x8580, 0x5390, 0x8581, 0x5391, 0x8582, 0x5392, 0x8583, 0x5393, 0x8584, 0x5394, 0x8585, 0x5396, 0x8586, 0x5397, 0x8587, 0x5399, + 0x8588, 0x539B, 0x8589, 0x539C, 0x858A, 0x539E, 0x858B, 0x53A0, 0x858C, 0x53A1, 0x858D, 0x53A4, 0x858E, 0x53A7, 0x858F, 0x53AA, + 0x8590, 0x53AB, 0x8591, 0x53AC, 0x8592, 0x53AD, 0x8593, 0x53AF, 0x8594, 0x53B0, 0x8595, 0x53B1, 0x8596, 0x53B2, 0x8597, 0x53B3, + 0x8598, 0x53B4, 0x8599, 0x53B5, 0x859A, 0x53B7, 0x859B, 0x53B8, 0x859C, 0x53B9, 0x859D, 0x53BA, 0x859E, 0x53BC, 0x859F, 0x53BD, + 0x85A0, 0x53BE, 0x85A1, 0x53C0, 0x85A2, 0x53C3, 0x85A3, 0x53C4, 0x85A4, 0x53C5, 0x85A5, 0x53C6, 0x85A6, 0x53C7, 0x85A7, 0x53CE, + 0x85A8, 0x53CF, 0x85A9, 0x53D0, 0x85AA, 0x53D2, 0x85AB, 0x53D3, 0x85AC, 0x53D5, 0x85AD, 0x53DA, 0x85AE, 0x53DC, 0x85AF, 0x53DD, + 0x85B0, 0x53DE, 0x85B1, 0x53E1, 0x85B2, 0x53E2, 0x85B3, 0x53E7, 0x85B4, 0x53F4, 0x85B5, 0x53FA, 0x85B6, 0x53FE, 0x85B7, 0x53FF, + 0x85B8, 0x5400, 0x85B9, 0x5402, 0x85BA, 0x5405, 0x85BB, 0x5407, 0x85BC, 0x540B, 0x85BD, 0x5414, 0x85BE, 0x5418, 0x85BF, 0x5419, + 0x85C0, 0x541A, 0x85C1, 0x541C, 0x85C2, 0x5422, 0x85C3, 0x5424, 0x85C4, 0x5425, 0x85C5, 0x542A, 0x85C6, 0x5430, 0x85C7, 0x5433, + 0x85C8, 0x5436, 0x85C9, 0x5437, 0x85CA, 0x543A, 0x85CB, 0x543D, 0x85CC, 0x543F, 0x85CD, 0x5441, 0x85CE, 0x5442, 0x85CF, 0x5444, + 0x85D0, 0x5445, 0x85D1, 0x5447, 0x85D2, 0x5449, 0x85D3, 0x544C, 0x85D4, 0x544D, 0x85D5, 0x544E, 0x85D6, 0x544F, 0x85D7, 0x5451, + 0x85D8, 0x545A, 0x85D9, 0x545D, 0x85DA, 0x545E, 0x85DB, 0x545F, 0x85DC, 0x5460, 0x85DD, 0x5461, 0x85DE, 0x5463, 0x85DF, 0x5465, + 0x85E0, 0x5467, 0x85E1, 0x5469, 0x85E2, 0x546A, 0x85E3, 0x546B, 0x85E4, 0x546C, 0x85E5, 0x546D, 0x85E6, 0x546E, 0x85E7, 0x546F, + 0x85E8, 0x5470, 0x85E9, 0x5474, 0x85EA, 0x5479, 0x85EB, 0x547A, 0x85EC, 0x547E, 0x85ED, 0x547F, 0x85EE, 0x5481, 0x85EF, 0x5483, + 0x85F0, 0x5485, 0x85F1, 0x5487, 0x85F2, 0x5488, 0x85F3, 0x5489, 0x85F4, 0x548A, 0x85F5, 0x548D, 0x85F6, 0x5491, 0x85F7, 0x5493, + 0x85F8, 0x5497, 0x85F9, 0x5498, 0x85FA, 0x549C, 0x85FB, 0x549E, 0x85FC, 0x549F, 0x85FD, 0x54A0, 0x85FE, 0x54A1, 0x8640, 0x54A2, + 0x8641, 0x54A5, 0x8642, 0x54AE, 0x8643, 0x54B0, 0x8644, 0x54B2, 0x8645, 0x54B5, 0x8646, 0x54B6, 0x8647, 0x54B7, 0x8648, 0x54B9, + 0x8649, 0x54BA, 0x864A, 0x54BC, 0x864B, 0x54BE, 0x864C, 0x54C3, 0x864D, 0x54C5, 0x864E, 0x54CA, 0x864F, 0x54CB, 0x8650, 0x54D6, + 0x8651, 0x54D8, 0x8652, 0x54DB, 0x8653, 0x54E0, 0x8654, 0x54E1, 0x8655, 0x54E2, 0x8656, 0x54E3, 0x8657, 0x54E4, 0x8658, 0x54EB, + 0x8659, 0x54EC, 0x865A, 0x54EF, 0x865B, 0x54F0, 0x865C, 0x54F1, 0x865D, 0x54F4, 0x865E, 0x54F5, 0x865F, 0x54F6, 0x8660, 0x54F7, + 0x8661, 0x54F8, 0x8662, 0x54F9, 0x8663, 0x54FB, 0x8664, 0x54FE, 0x8665, 0x5500, 0x8666, 0x5502, 0x8667, 0x5503, 0x8668, 0x5504, + 0x8669, 0x5505, 0x866A, 0x5508, 0x866B, 0x550A, 0x866C, 0x550B, 0x866D, 0x550C, 0x866E, 0x550D, 0x866F, 0x550E, 0x8670, 0x5512, + 0x8671, 0x5513, 0x8672, 0x5515, 0x8673, 0x5516, 0x8674, 0x5517, 0x8675, 0x5518, 0x8676, 0x5519, 0x8677, 0x551A, 0x8678, 0x551C, + 0x8679, 0x551D, 0x867A, 0x551E, 0x867B, 0x551F, 0x867C, 0x5521, 0x867D, 0x5525, 0x867E, 0x5526, 0x8680, 0x5528, 0x8681, 0x5529, + 0x8682, 0x552B, 0x8683, 0x552D, 0x8684, 0x5532, 0x8685, 0x5534, 0x8686, 0x5535, 0x8687, 0x5536, 0x8688, 0x5538, 0x8689, 0x5539, + 0x868A, 0x553A, 0x868B, 0x553B, 0x868C, 0x553D, 0x868D, 0x5540, 0x868E, 0x5542, 0x868F, 0x5545, 0x8690, 0x5547, 0x8691, 0x5548, + 0x8692, 0x554B, 0x8693, 0x554C, 0x8694, 0x554D, 0x8695, 0x554E, 0x8696, 0x554F, 0x8697, 0x5551, 0x8698, 0x5552, 0x8699, 0x5553, + 0x869A, 0x5554, 0x869B, 0x5557, 0x869C, 0x5558, 0x869D, 0x5559, 0x869E, 0x555A, 0x869F, 0x555B, 0x86A0, 0x555D, 0x86A1, 0x555E, + 0x86A2, 0x555F, 0x86A3, 0x5560, 0x86A4, 0x5562, 0x86A5, 0x5563, 0x86A6, 0x5568, 0x86A7, 0x5569, 0x86A8, 0x556B, 0x86A9, 0x556F, + 0x86AA, 0x5570, 0x86AB, 0x5571, 0x86AC, 0x5572, 0x86AD, 0x5573, 0x86AE, 0x5574, 0x86AF, 0x5579, 0x86B0, 0x557A, 0x86B1, 0x557D, + 0x86B2, 0x557F, 0x86B3, 0x5585, 0x86B4, 0x5586, 0x86B5, 0x558C, 0x86B6, 0x558D, 0x86B7, 0x558E, 0x86B8, 0x5590, 0x86B9, 0x5592, + 0x86BA, 0x5593, 0x86BB, 0x5595, 0x86BC, 0x5596, 0x86BD, 0x5597, 0x86BE, 0x559A, 0x86BF, 0x559B, 0x86C0, 0x559E, 0x86C1, 0x55A0, + 0x86C2, 0x55A1, 0x86C3, 0x55A2, 0x86C4, 0x55A3, 0x86C5, 0x55A4, 0x86C6, 0x55A5, 0x86C7, 0x55A6, 0x86C8, 0x55A8, 0x86C9, 0x55A9, + 0x86CA, 0x55AA, 0x86CB, 0x55AB, 0x86CC, 0x55AC, 0x86CD, 0x55AD, 0x86CE, 0x55AE, 0x86CF, 0x55AF, 0x86D0, 0x55B0, 0x86D1, 0x55B2, + 0x86D2, 0x55B4, 0x86D3, 0x55B6, 0x86D4, 0x55B8, 0x86D5, 0x55BA, 0x86D6, 0x55BC, 0x86D7, 0x55BF, 0x86D8, 0x55C0, 0x86D9, 0x55C1, + 0x86DA, 0x55C2, 0x86DB, 0x55C3, 0x86DC, 0x55C6, 0x86DD, 0x55C7, 0x86DE, 0x55C8, 0x86DF, 0x55CA, 0x86E0, 0x55CB, 0x86E1, 0x55CE, + 0x86E2, 0x55CF, 0x86E3, 0x55D0, 0x86E4, 0x55D5, 0x86E5, 0x55D7, 0x86E6, 0x55D8, 0x86E7, 0x55D9, 0x86E8, 0x55DA, 0x86E9, 0x55DB, + 0x86EA, 0x55DE, 0x86EB, 0x55E0, 0x86EC, 0x55E2, 0x86ED, 0x55E7, 0x86EE, 0x55E9, 0x86EF, 0x55ED, 0x86F0, 0x55EE, 0x86F1, 0x55F0, + 0x86F2, 0x55F1, 0x86F3, 0x55F4, 0x86F4, 0x55F6, 0x86F5, 0x55F8, 0x86F6, 0x55F9, 0x86F7, 0x55FA, 0x86F8, 0x55FB, 0x86F9, 0x55FC, + 0x86FA, 0x55FF, 0x86FB, 0x5602, 0x86FC, 0x5603, 0x86FD, 0x5604, 0x86FE, 0x5605, 0x8740, 0x5606, 0x8741, 0x5607, 0x8742, 0x560A, + 0x8743, 0x560B, 0x8744, 0x560D, 0x8745, 0x5610, 0x8746, 0x5611, 0x8747, 0x5612, 0x8748, 0x5613, 0x8749, 0x5614, 0x874A, 0x5615, + 0x874B, 0x5616, 0x874C, 0x5617, 0x874D, 0x5619, 0x874E, 0x561A, 0x874F, 0x561C, 0x8750, 0x561D, 0x8751, 0x5620, 0x8752, 0x5621, + 0x8753, 0x5622, 0x8754, 0x5625, 0x8755, 0x5626, 0x8756, 0x5628, 0x8757, 0x5629, 0x8758, 0x562A, 0x8759, 0x562B, 0x875A, 0x562E, + 0x875B, 0x562F, 0x875C, 0x5630, 0x875D, 0x5633, 0x875E, 0x5635, 0x875F, 0x5637, 0x8760, 0x5638, 0x8761, 0x563A, 0x8762, 0x563C, + 0x8763, 0x563D, 0x8764, 0x563E, 0x8765, 0x5640, 0x8766, 0x5641, 0x8767, 0x5642, 0x8768, 0x5643, 0x8769, 0x5644, 0x876A, 0x5645, + 0x876B, 0x5646, 0x876C, 0x5647, 0x876D, 0x5648, 0x876E, 0x5649, 0x876F, 0x564A, 0x8770, 0x564B, 0x8771, 0x564F, 0x8772, 0x5650, + 0x8773, 0x5651, 0x8774, 0x5652, 0x8775, 0x5653, 0x8776, 0x5655, 0x8777, 0x5656, 0x8778, 0x565A, 0x8779, 0x565B, 0x877A, 0x565D, + 0x877B, 0x565E, 0x877C, 0x565F, 0x877D, 0x5660, 0x877E, 0x5661, 0x8780, 0x5663, 0x8781, 0x5665, 0x8782, 0x5666, 0x8783, 0x5667, + 0x8784, 0x566D, 0x8785, 0x566E, 0x8786, 0x566F, 0x8787, 0x5670, 0x8788, 0x5672, 0x8789, 0x5673, 0x878A, 0x5674, 0x878B, 0x5675, + 0x878C, 0x5677, 0x878D, 0x5678, 0x878E, 0x5679, 0x878F, 0x567A, 0x8790, 0x567D, 0x8791, 0x567E, 0x8792, 0x567F, 0x8793, 0x5680, + 0x8794, 0x5681, 0x8795, 0x5682, 0x8796, 0x5683, 0x8797, 0x5684, 0x8798, 0x5687, 0x8799, 0x5688, 0x879A, 0x5689, 0x879B, 0x568A, + 0x879C, 0x568B, 0x879D, 0x568C, 0x879E, 0x568D, 0x879F, 0x5690, 0x87A0, 0x5691, 0x87A1, 0x5692, 0x87A2, 0x5694, 0x87A3, 0x5695, + 0x87A4, 0x5696, 0x87A5, 0x5697, 0x87A6, 0x5698, 0x87A7, 0x5699, 0x87A8, 0x569A, 0x87A9, 0x569B, 0x87AA, 0x569C, 0x87AB, 0x569D, + 0x87AC, 0x569E, 0x87AD, 0x569F, 0x87AE, 0x56A0, 0x87AF, 0x56A1, 0x87B0, 0x56A2, 0x87B1, 0x56A4, 0x87B2, 0x56A5, 0x87B3, 0x56A6, + 0x87B4, 0x56A7, 0x87B5, 0x56A8, 0x87B6, 0x56A9, 0x87B7, 0x56AA, 0x87B8, 0x56AB, 0x87B9, 0x56AC, 0x87BA, 0x56AD, 0x87BB, 0x56AE, + 0x87BC, 0x56B0, 0x87BD, 0x56B1, 0x87BE, 0x56B2, 0x87BF, 0x56B3, 0x87C0, 0x56B4, 0x87C1, 0x56B5, 0x87C2, 0x56B6, 0x87C3, 0x56B8, + 0x87C4, 0x56B9, 0x87C5, 0x56BA, 0x87C6, 0x56BB, 0x87C7, 0x56BD, 0x87C8, 0x56BE, 0x87C9, 0x56BF, 0x87CA, 0x56C0, 0x87CB, 0x56C1, + 0x87CC, 0x56C2, 0x87CD, 0x56C3, 0x87CE, 0x56C4, 0x87CF, 0x56C5, 0x87D0, 0x56C6, 0x87D1, 0x56C7, 0x87D2, 0x56C8, 0x87D3, 0x56C9, + 0x87D4, 0x56CB, 0x87D5, 0x56CC, 0x87D6, 0x56CD, 0x87D7, 0x56CE, 0x87D8, 0x56CF, 0x87D9, 0x56D0, 0x87DA, 0x56D1, 0x87DB, 0x56D2, + 0x87DC, 0x56D3, 0x87DD, 0x56D5, 0x87DE, 0x56D6, 0x87DF, 0x56D8, 0x87E0, 0x56D9, 0x87E1, 0x56DC, 0x87E2, 0x56E3, 0x87E3, 0x56E5, + 0x87E4, 0x56E6, 0x87E5, 0x56E7, 0x87E6, 0x56E8, 0x87E7, 0x56E9, 0x87E8, 0x56EA, 0x87E9, 0x56EC, 0x87EA, 0x56EE, 0x87EB, 0x56EF, + 0x87EC, 0x56F2, 0x87ED, 0x56F3, 0x87EE, 0x56F6, 0x87EF, 0x56F7, 0x87F0, 0x56F8, 0x87F1, 0x56FB, 0x87F2, 0x56FC, 0x87F3, 0x5700, + 0x87F4, 0x5701, 0x87F5, 0x5702, 0x87F6, 0x5705, 0x87F7, 0x5707, 0x87F8, 0x570B, 0x87F9, 0x570C, 0x87FA, 0x570D, 0x87FB, 0x570E, + 0x87FC, 0x570F, 0x87FD, 0x5710, 0x87FE, 0x5711, 0x8840, 0x5712, 0x8841, 0x5713, 0x8842, 0x5714, 0x8843, 0x5715, 0x8844, 0x5716, + 0x8845, 0x5717, 0x8846, 0x5718, 0x8847, 0x5719, 0x8848, 0x571A, 0x8849, 0x571B, 0x884A, 0x571D, 0x884B, 0x571E, 0x884C, 0x5720, + 0x884D, 0x5721, 0x884E, 0x5722, 0x884F, 0x5724, 0x8850, 0x5725, 0x8851, 0x5726, 0x8852, 0x5727, 0x8853, 0x572B, 0x8854, 0x5731, + 0x8855, 0x5732, 0x8856, 0x5734, 0x8857, 0x5735, 0x8858, 0x5736, 0x8859, 0x5737, 0x885A, 0x5738, 0x885B, 0x573C, 0x885C, 0x573D, + 0x885D, 0x573F, 0x885E, 0x5741, 0x885F, 0x5743, 0x8860, 0x5744, 0x8861, 0x5745, 0x8862, 0x5746, 0x8863, 0x5748, 0x8864, 0x5749, + 0x8865, 0x574B, 0x8866, 0x5752, 0x8867, 0x5753, 0x8868, 0x5754, 0x8869, 0x5755, 0x886A, 0x5756, 0x886B, 0x5758, 0x886C, 0x5759, + 0x886D, 0x5762, 0x886E, 0x5763, 0x886F, 0x5765, 0x8870, 0x5767, 0x8871, 0x576C, 0x8872, 0x576E, 0x8873, 0x5770, 0x8874, 0x5771, + 0x8875, 0x5772, 0x8876, 0x5774, 0x8877, 0x5775, 0x8878, 0x5778, 0x8879, 0x5779, 0x887A, 0x577A, 0x887B, 0x577D, 0x887C, 0x577E, + 0x887D, 0x577F, 0x887E, 0x5780, 0x8880, 0x5781, 0x8881, 0x5787, 0x8882, 0x5788, 0x8883, 0x5789, 0x8884, 0x578A, 0x8885, 0x578D, + 0x8886, 0x578E, 0x8887, 0x578F, 0x8888, 0x5790, 0x8889, 0x5791, 0x888A, 0x5794, 0x888B, 0x5795, 0x888C, 0x5796, 0x888D, 0x5797, + 0x888E, 0x5798, 0x888F, 0x5799, 0x8890, 0x579A, 0x8891, 0x579C, 0x8892, 0x579D, 0x8893, 0x579E, 0x8894, 0x579F, 0x8895, 0x57A5, + 0x8896, 0x57A8, 0x8897, 0x57AA, 0x8898, 0x57AC, 0x8899, 0x57AF, 0x889A, 0x57B0, 0x889B, 0x57B1, 0x889C, 0x57B3, 0x889D, 0x57B5, + 0x889E, 0x57B6, 0x889F, 0x57B7, 0x88A0, 0x57B9, 0x88A1, 0x57BA, 0x88A2, 0x57BB, 0x88A3, 0x57BC, 0x88A4, 0x57BD, 0x88A5, 0x57BE, + 0x88A6, 0x57BF, 0x88A7, 0x57C0, 0x88A8, 0x57C1, 0x88A9, 0x57C4, 0x88AA, 0x57C5, 0x88AB, 0x57C6, 0x88AC, 0x57C7, 0x88AD, 0x57C8, + 0x88AE, 0x57C9, 0x88AF, 0x57CA, 0x88B0, 0x57CC, 0x88B1, 0x57CD, 0x88B2, 0x57D0, 0x88B3, 0x57D1, 0x88B4, 0x57D3, 0x88B5, 0x57D6, + 0x88B6, 0x57D7, 0x88B7, 0x57DB, 0x88B8, 0x57DC, 0x88B9, 0x57DE, 0x88BA, 0x57E1, 0x88BB, 0x57E2, 0x88BC, 0x57E3, 0x88BD, 0x57E5, + 0x88BE, 0x57E6, 0x88BF, 0x57E7, 0x88C0, 0x57E8, 0x88C1, 0x57E9, 0x88C2, 0x57EA, 0x88C3, 0x57EB, 0x88C4, 0x57EC, 0x88C5, 0x57EE, + 0x88C6, 0x57F0, 0x88C7, 0x57F1, 0x88C8, 0x57F2, 0x88C9, 0x57F3, 0x88CA, 0x57F5, 0x88CB, 0x57F6, 0x88CC, 0x57F7, 0x88CD, 0x57FB, + 0x88CE, 0x57FC, 0x88CF, 0x57FE, 0x88D0, 0x57FF, 0x88D1, 0x5801, 0x88D2, 0x5803, 0x88D3, 0x5804, 0x88D4, 0x5805, 0x88D5, 0x5808, + 0x88D6, 0x5809, 0x88D7, 0x580A, 0x88D8, 0x580C, 0x88D9, 0x580E, 0x88DA, 0x580F, 0x88DB, 0x5810, 0x88DC, 0x5812, 0x88DD, 0x5813, + 0x88DE, 0x5814, 0x88DF, 0x5816, 0x88E0, 0x5817, 0x88E1, 0x5818, 0x88E2, 0x581A, 0x88E3, 0x581B, 0x88E4, 0x581C, 0x88E5, 0x581D, + 0x88E6, 0x581F, 0x88E7, 0x5822, 0x88E8, 0x5823, 0x88E9, 0x5825, 0x88EA, 0x5826, 0x88EB, 0x5827, 0x88EC, 0x5828, 0x88ED, 0x5829, + 0x88EE, 0x582B, 0x88EF, 0x582C, 0x88F0, 0x582D, 0x88F1, 0x582E, 0x88F2, 0x582F, 0x88F3, 0x5831, 0x88F4, 0x5832, 0x88F5, 0x5833, + 0x88F6, 0x5834, 0x88F7, 0x5836, 0x88F8, 0x5837, 0x88F9, 0x5838, 0x88FA, 0x5839, 0x88FB, 0x583A, 0x88FC, 0x583B, 0x88FD, 0x583C, + 0x88FE, 0x583D, 0x8940, 0x583E, 0x8941, 0x583F, 0x8942, 0x5840, 0x8943, 0x5841, 0x8944, 0x5842, 0x8945, 0x5843, 0x8946, 0x5845, + 0x8947, 0x5846, 0x8948, 0x5847, 0x8949, 0x5848, 0x894A, 0x5849, 0x894B, 0x584A, 0x894C, 0x584B, 0x894D, 0x584E, 0x894E, 0x584F, + 0x894F, 0x5850, 0x8950, 0x5852, 0x8951, 0x5853, 0x8952, 0x5855, 0x8953, 0x5856, 0x8954, 0x5857, 0x8955, 0x5859, 0x8956, 0x585A, + 0x8957, 0x585B, 0x8958, 0x585C, 0x8959, 0x585D, 0x895A, 0x585F, 0x895B, 0x5860, 0x895C, 0x5861, 0x895D, 0x5862, 0x895E, 0x5863, + 0x895F, 0x5864, 0x8960, 0x5866, 0x8961, 0x5867, 0x8962, 0x5868, 0x8963, 0x5869, 0x8964, 0x586A, 0x8965, 0x586D, 0x8966, 0x586E, + 0x8967, 0x586F, 0x8968, 0x5870, 0x8969, 0x5871, 0x896A, 0x5872, 0x896B, 0x5873, 0x896C, 0x5874, 0x896D, 0x5875, 0x896E, 0x5876, + 0x896F, 0x5877, 0x8970, 0x5878, 0x8971, 0x5879, 0x8972, 0x587A, 0x8973, 0x587B, 0x8974, 0x587C, 0x8975, 0x587D, 0x8976, 0x587F, + 0x8977, 0x5882, 0x8978, 0x5884, 0x8979, 0x5886, 0x897A, 0x5887, 0x897B, 0x5888, 0x897C, 0x588A, 0x897D, 0x588B, 0x897E, 0x588C, + 0x8980, 0x588D, 0x8981, 0x588E, 0x8982, 0x588F, 0x8983, 0x5890, 0x8984, 0x5891, 0x8985, 0x5894, 0x8986, 0x5895, 0x8987, 0x5896, + 0x8988, 0x5897, 0x8989, 0x5898, 0x898A, 0x589B, 0x898B, 0x589C, 0x898C, 0x589D, 0x898D, 0x58A0, 0x898E, 0x58A1, 0x898F, 0x58A2, + 0x8990, 0x58A3, 0x8991, 0x58A4, 0x8992, 0x58A5, 0x8993, 0x58A6, 0x8994, 0x58A7, 0x8995, 0x58AA, 0x8996, 0x58AB, 0x8997, 0x58AC, + 0x8998, 0x58AD, 0x8999, 0x58AE, 0x899A, 0x58AF, 0x899B, 0x58B0, 0x899C, 0x58B1, 0x899D, 0x58B2, 0x899E, 0x58B3, 0x899F, 0x58B4, + 0x89A0, 0x58B5, 0x89A1, 0x58B6, 0x89A2, 0x58B7, 0x89A3, 0x58B8, 0x89A4, 0x58B9, 0x89A5, 0x58BA, 0x89A6, 0x58BB, 0x89A7, 0x58BD, + 0x89A8, 0x58BE, 0x89A9, 0x58BF, 0x89AA, 0x58C0, 0x89AB, 0x58C2, 0x89AC, 0x58C3, 0x89AD, 0x58C4, 0x89AE, 0x58C6, 0x89AF, 0x58C7, + 0x89B0, 0x58C8, 0x89B1, 0x58C9, 0x89B2, 0x58CA, 0x89B3, 0x58CB, 0x89B4, 0x58CC, 0x89B5, 0x58CD, 0x89B6, 0x58CE, 0x89B7, 0x58CF, + 0x89B8, 0x58D0, 0x89B9, 0x58D2, 0x89BA, 0x58D3, 0x89BB, 0x58D4, 0x89BC, 0x58D6, 0x89BD, 0x58D7, 0x89BE, 0x58D8, 0x89BF, 0x58D9, + 0x89C0, 0x58DA, 0x89C1, 0x58DB, 0x89C2, 0x58DC, 0x89C3, 0x58DD, 0x89C4, 0x58DE, 0x89C5, 0x58DF, 0x89C6, 0x58E0, 0x89C7, 0x58E1, + 0x89C8, 0x58E2, 0x89C9, 0x58E3, 0x89CA, 0x58E5, 0x89CB, 0x58E6, 0x89CC, 0x58E7, 0x89CD, 0x58E8, 0x89CE, 0x58E9, 0x89CF, 0x58EA, + 0x89D0, 0x58ED, 0x89D1, 0x58EF, 0x89D2, 0x58F1, 0x89D3, 0x58F2, 0x89D4, 0x58F4, 0x89D5, 0x58F5, 0x89D6, 0x58F7, 0x89D7, 0x58F8, + 0x89D8, 0x58FA, 0x89D9, 0x58FB, 0x89DA, 0x58FC, 0x89DB, 0x58FD, 0x89DC, 0x58FE, 0x89DD, 0x58FF, 0x89DE, 0x5900, 0x89DF, 0x5901, + 0x89E0, 0x5903, 0x89E1, 0x5905, 0x89E2, 0x5906, 0x89E3, 0x5908, 0x89E4, 0x5909, 0x89E5, 0x590A, 0x89E6, 0x590B, 0x89E7, 0x590C, + 0x89E8, 0x590E, 0x89E9, 0x5910, 0x89EA, 0x5911, 0x89EB, 0x5912, 0x89EC, 0x5913, 0x89ED, 0x5917, 0x89EE, 0x5918, 0x89EF, 0x591B, + 0x89F0, 0x591D, 0x89F1, 0x591E, 0x89F2, 0x5920, 0x89F3, 0x5921, 0x89F4, 0x5922, 0x89F5, 0x5923, 0x89F6, 0x5926, 0x89F7, 0x5928, + 0x89F8, 0x592C, 0x89F9, 0x5930, 0x89FA, 0x5932, 0x89FB, 0x5933, 0x89FC, 0x5935, 0x89FD, 0x5936, 0x89FE, 0x593B, 0x8A40, 0x593D, + 0x8A41, 0x593E, 0x8A42, 0x593F, 0x8A43, 0x5940, 0x8A44, 0x5943, 0x8A45, 0x5945, 0x8A46, 0x5946, 0x8A47, 0x594A, 0x8A48, 0x594C, + 0x8A49, 0x594D, 0x8A4A, 0x5950, 0x8A4B, 0x5952, 0x8A4C, 0x5953, 0x8A4D, 0x5959, 0x8A4E, 0x595B, 0x8A4F, 0x595C, 0x8A50, 0x595D, + 0x8A51, 0x595E, 0x8A52, 0x595F, 0x8A53, 0x5961, 0x8A54, 0x5963, 0x8A55, 0x5964, 0x8A56, 0x5966, 0x8A57, 0x5967, 0x8A58, 0x5968, + 0x8A59, 0x5969, 0x8A5A, 0x596A, 0x8A5B, 0x596B, 0x8A5C, 0x596C, 0x8A5D, 0x596D, 0x8A5E, 0x596E, 0x8A5F, 0x596F, 0x8A60, 0x5970, + 0x8A61, 0x5971, 0x8A62, 0x5972, 0x8A63, 0x5975, 0x8A64, 0x5977, 0x8A65, 0x597A, 0x8A66, 0x597B, 0x8A67, 0x597C, 0x8A68, 0x597E, + 0x8A69, 0x597F, 0x8A6A, 0x5980, 0x8A6B, 0x5985, 0x8A6C, 0x5989, 0x8A6D, 0x598B, 0x8A6E, 0x598C, 0x8A6F, 0x598E, 0x8A70, 0x598F, + 0x8A71, 0x5990, 0x8A72, 0x5991, 0x8A73, 0x5994, 0x8A74, 0x5995, 0x8A75, 0x5998, 0x8A76, 0x599A, 0x8A77, 0x599B, 0x8A78, 0x599C, + 0x8A79, 0x599D, 0x8A7A, 0x599F, 0x8A7B, 0x59A0, 0x8A7C, 0x59A1, 0x8A7D, 0x59A2, 0x8A7E, 0x59A6, 0x8A80, 0x59A7, 0x8A81, 0x59AC, + 0x8A82, 0x59AD, 0x8A83, 0x59B0, 0x8A84, 0x59B1, 0x8A85, 0x59B3, 0x8A86, 0x59B4, 0x8A87, 0x59B5, 0x8A88, 0x59B6, 0x8A89, 0x59B7, + 0x8A8A, 0x59B8, 0x8A8B, 0x59BA, 0x8A8C, 0x59BC, 0x8A8D, 0x59BD, 0x8A8E, 0x59BF, 0x8A8F, 0x59C0, 0x8A90, 0x59C1, 0x8A91, 0x59C2, + 0x8A92, 0x59C3, 0x8A93, 0x59C4, 0x8A94, 0x59C5, 0x8A95, 0x59C7, 0x8A96, 0x59C8, 0x8A97, 0x59C9, 0x8A98, 0x59CC, 0x8A99, 0x59CD, + 0x8A9A, 0x59CE, 0x8A9B, 0x59CF, 0x8A9C, 0x59D5, 0x8A9D, 0x59D6, 0x8A9E, 0x59D9, 0x8A9F, 0x59DB, 0x8AA0, 0x59DE, 0x8AA1, 0x59DF, + 0x8AA2, 0x59E0, 0x8AA3, 0x59E1, 0x8AA4, 0x59E2, 0x8AA5, 0x59E4, 0x8AA6, 0x59E6, 0x8AA7, 0x59E7, 0x8AA8, 0x59E9, 0x8AA9, 0x59EA, + 0x8AAA, 0x59EB, 0x8AAB, 0x59ED, 0x8AAC, 0x59EE, 0x8AAD, 0x59EF, 0x8AAE, 0x59F0, 0x8AAF, 0x59F1, 0x8AB0, 0x59F2, 0x8AB1, 0x59F3, + 0x8AB2, 0x59F4, 0x8AB3, 0x59F5, 0x8AB4, 0x59F6, 0x8AB5, 0x59F7, 0x8AB6, 0x59F8, 0x8AB7, 0x59FA, 0x8AB8, 0x59FC, 0x8AB9, 0x59FD, + 0x8ABA, 0x59FE, 0x8ABB, 0x5A00, 0x8ABC, 0x5A02, 0x8ABD, 0x5A0A, 0x8ABE, 0x5A0B, 0x8ABF, 0x5A0D, 0x8AC0, 0x5A0E, 0x8AC1, 0x5A0F, + 0x8AC2, 0x5A10, 0x8AC3, 0x5A12, 0x8AC4, 0x5A14, 0x8AC5, 0x5A15, 0x8AC6, 0x5A16, 0x8AC7, 0x5A17, 0x8AC8, 0x5A19, 0x8AC9, 0x5A1A, + 0x8ACA, 0x5A1B, 0x8ACB, 0x5A1D, 0x8ACC, 0x5A1E, 0x8ACD, 0x5A21, 0x8ACE, 0x5A22, 0x8ACF, 0x5A24, 0x8AD0, 0x5A26, 0x8AD1, 0x5A27, + 0x8AD2, 0x5A28, 0x8AD3, 0x5A2A, 0x8AD4, 0x5A2B, 0x8AD5, 0x5A2C, 0x8AD6, 0x5A2D, 0x8AD7, 0x5A2E, 0x8AD8, 0x5A2F, 0x8AD9, 0x5A30, + 0x8ADA, 0x5A33, 0x8ADB, 0x5A35, 0x8ADC, 0x5A37, 0x8ADD, 0x5A38, 0x8ADE, 0x5A39, 0x8ADF, 0x5A3A, 0x8AE0, 0x5A3B, 0x8AE1, 0x5A3D, + 0x8AE2, 0x5A3E, 0x8AE3, 0x5A3F, 0x8AE4, 0x5A41, 0x8AE5, 0x5A42, 0x8AE6, 0x5A43, 0x8AE7, 0x5A44, 0x8AE8, 0x5A45, 0x8AE9, 0x5A47, + 0x8AEA, 0x5A48, 0x8AEB, 0x5A4B, 0x8AEC, 0x5A4C, 0x8AED, 0x5A4D, 0x8AEE, 0x5A4E, 0x8AEF, 0x5A4F, 0x8AF0, 0x5A50, 0x8AF1, 0x5A51, + 0x8AF2, 0x5A52, 0x8AF3, 0x5A53, 0x8AF4, 0x5A54, 0x8AF5, 0x5A56, 0x8AF6, 0x5A57, 0x8AF7, 0x5A58, 0x8AF8, 0x5A59, 0x8AF9, 0x5A5B, + 0x8AFA, 0x5A5C, 0x8AFB, 0x5A5D, 0x8AFC, 0x5A5E, 0x8AFD, 0x5A5F, 0x8AFE, 0x5A60, 0x8B40, 0x5A61, 0x8B41, 0x5A63, 0x8B42, 0x5A64, + 0x8B43, 0x5A65, 0x8B44, 0x5A66, 0x8B45, 0x5A68, 0x8B46, 0x5A69, 0x8B47, 0x5A6B, 0x8B48, 0x5A6C, 0x8B49, 0x5A6D, 0x8B4A, 0x5A6E, + 0x8B4B, 0x5A6F, 0x8B4C, 0x5A70, 0x8B4D, 0x5A71, 0x8B4E, 0x5A72, 0x8B4F, 0x5A73, 0x8B50, 0x5A78, 0x8B51, 0x5A79, 0x8B52, 0x5A7B, + 0x8B53, 0x5A7C, 0x8B54, 0x5A7D, 0x8B55, 0x5A7E, 0x8B56, 0x5A80, 0x8B57, 0x5A81, 0x8B58, 0x5A82, 0x8B59, 0x5A83, 0x8B5A, 0x5A84, + 0x8B5B, 0x5A85, 0x8B5C, 0x5A86, 0x8B5D, 0x5A87, 0x8B5E, 0x5A88, 0x8B5F, 0x5A89, 0x8B60, 0x5A8A, 0x8B61, 0x5A8B, 0x8B62, 0x5A8C, + 0x8B63, 0x5A8D, 0x8B64, 0x5A8E, 0x8B65, 0x5A8F, 0x8B66, 0x5A90, 0x8B67, 0x5A91, 0x8B68, 0x5A93, 0x8B69, 0x5A94, 0x8B6A, 0x5A95, + 0x8B6B, 0x5A96, 0x8B6C, 0x5A97, 0x8B6D, 0x5A98, 0x8B6E, 0x5A99, 0x8B6F, 0x5A9C, 0x8B70, 0x5A9D, 0x8B71, 0x5A9E, 0x8B72, 0x5A9F, + 0x8B73, 0x5AA0, 0x8B74, 0x5AA1, 0x8B75, 0x5AA2, 0x8B76, 0x5AA3, 0x8B77, 0x5AA4, 0x8B78, 0x5AA5, 0x8B79, 0x5AA6, 0x8B7A, 0x5AA7, + 0x8B7B, 0x5AA8, 0x8B7C, 0x5AA9, 0x8B7D, 0x5AAB, 0x8B7E, 0x5AAC, 0x8B80, 0x5AAD, 0x8B81, 0x5AAE, 0x8B82, 0x5AAF, 0x8B83, 0x5AB0, + 0x8B84, 0x5AB1, 0x8B85, 0x5AB4, 0x8B86, 0x5AB6, 0x8B87, 0x5AB7, 0x8B88, 0x5AB9, 0x8B89, 0x5ABA, 0x8B8A, 0x5ABB, 0x8B8B, 0x5ABC, + 0x8B8C, 0x5ABD, 0x8B8D, 0x5ABF, 0x8B8E, 0x5AC0, 0x8B8F, 0x5AC3, 0x8B90, 0x5AC4, 0x8B91, 0x5AC5, 0x8B92, 0x5AC6, 0x8B93, 0x5AC7, + 0x8B94, 0x5AC8, 0x8B95, 0x5ACA, 0x8B96, 0x5ACB, 0x8B97, 0x5ACD, 0x8B98, 0x5ACE, 0x8B99, 0x5ACF, 0x8B9A, 0x5AD0, 0x8B9B, 0x5AD1, + 0x8B9C, 0x5AD3, 0x8B9D, 0x5AD5, 0x8B9E, 0x5AD7, 0x8B9F, 0x5AD9, 0x8BA0, 0x5ADA, 0x8BA1, 0x5ADB, 0x8BA2, 0x5ADD, 0x8BA3, 0x5ADE, + 0x8BA4, 0x5ADF, 0x8BA5, 0x5AE2, 0x8BA6, 0x5AE4, 0x8BA7, 0x5AE5, 0x8BA8, 0x5AE7, 0x8BA9, 0x5AE8, 0x8BAA, 0x5AEA, 0x8BAB, 0x5AEC, + 0x8BAC, 0x5AED, 0x8BAD, 0x5AEE, 0x8BAE, 0x5AEF, 0x8BAF, 0x5AF0, 0x8BB0, 0x5AF2, 0x8BB1, 0x5AF3, 0x8BB2, 0x5AF4, 0x8BB3, 0x5AF5, + 0x8BB4, 0x5AF6, 0x8BB5, 0x5AF7, 0x8BB6, 0x5AF8, 0x8BB7, 0x5AF9, 0x8BB8, 0x5AFA, 0x8BB9, 0x5AFB, 0x8BBA, 0x5AFC, 0x8BBB, 0x5AFD, + 0x8BBC, 0x5AFE, 0x8BBD, 0x5AFF, 0x8BBE, 0x5B00, 0x8BBF, 0x5B01, 0x8BC0, 0x5B02, 0x8BC1, 0x5B03, 0x8BC2, 0x5B04, 0x8BC3, 0x5B05, + 0x8BC4, 0x5B06, 0x8BC5, 0x5B07, 0x8BC6, 0x5B08, 0x8BC7, 0x5B0A, 0x8BC8, 0x5B0B, 0x8BC9, 0x5B0C, 0x8BCA, 0x5B0D, 0x8BCB, 0x5B0E, + 0x8BCC, 0x5B0F, 0x8BCD, 0x5B10, 0x8BCE, 0x5B11, 0x8BCF, 0x5B12, 0x8BD0, 0x5B13, 0x8BD1, 0x5B14, 0x8BD2, 0x5B15, 0x8BD3, 0x5B18, + 0x8BD4, 0x5B19, 0x8BD5, 0x5B1A, 0x8BD6, 0x5B1B, 0x8BD7, 0x5B1C, 0x8BD8, 0x5B1D, 0x8BD9, 0x5B1E, 0x8BDA, 0x5B1F, 0x8BDB, 0x5B20, + 0x8BDC, 0x5B21, 0x8BDD, 0x5B22, 0x8BDE, 0x5B23, 0x8BDF, 0x5B24, 0x8BE0, 0x5B25, 0x8BE1, 0x5B26, 0x8BE2, 0x5B27, 0x8BE3, 0x5B28, + 0x8BE4, 0x5B29, 0x8BE5, 0x5B2A, 0x8BE6, 0x5B2B, 0x8BE7, 0x5B2C, 0x8BE8, 0x5B2D, 0x8BE9, 0x5B2E, 0x8BEA, 0x5B2F, 0x8BEB, 0x5B30, + 0x8BEC, 0x5B31, 0x8BED, 0x5B33, 0x8BEE, 0x5B35, 0x8BEF, 0x5B36, 0x8BF0, 0x5B38, 0x8BF1, 0x5B39, 0x8BF2, 0x5B3A, 0x8BF3, 0x5B3B, + 0x8BF4, 0x5B3C, 0x8BF5, 0x5B3D, 0x8BF6, 0x5B3E, 0x8BF7, 0x5B3F, 0x8BF8, 0x5B41, 0x8BF9, 0x5B42, 0x8BFA, 0x5B43, 0x8BFB, 0x5B44, + 0x8BFC, 0x5B45, 0x8BFD, 0x5B46, 0x8BFE, 0x5B47, 0x8C40, 0x5B48, 0x8C41, 0x5B49, 0x8C42, 0x5B4A, 0x8C43, 0x5B4B, 0x8C44, 0x5B4C, + 0x8C45, 0x5B4D, 0x8C46, 0x5B4E, 0x8C47, 0x5B4F, 0x8C48, 0x5B52, 0x8C49, 0x5B56, 0x8C4A, 0x5B5E, 0x8C4B, 0x5B60, 0x8C4C, 0x5B61, + 0x8C4D, 0x5B67, 0x8C4E, 0x5B68, 0x8C4F, 0x5B6B, 0x8C50, 0x5B6D, 0x8C51, 0x5B6E, 0x8C52, 0x5B6F, 0x8C53, 0x5B72, 0x8C54, 0x5B74, + 0x8C55, 0x5B76, 0x8C56, 0x5B77, 0x8C57, 0x5B78, 0x8C58, 0x5B79, 0x8C59, 0x5B7B, 0x8C5A, 0x5B7C, 0x8C5B, 0x5B7E, 0x8C5C, 0x5B7F, + 0x8C5D, 0x5B82, 0x8C5E, 0x5B86, 0x8C5F, 0x5B8A, 0x8C60, 0x5B8D, 0x8C61, 0x5B8E, 0x8C62, 0x5B90, 0x8C63, 0x5B91, 0x8C64, 0x5B92, + 0x8C65, 0x5B94, 0x8C66, 0x5B96, 0x8C67, 0x5B9F, 0x8C68, 0x5BA7, 0x8C69, 0x5BA8, 0x8C6A, 0x5BA9, 0x8C6B, 0x5BAC, 0x8C6C, 0x5BAD, + 0x8C6D, 0x5BAE, 0x8C6E, 0x5BAF, 0x8C6F, 0x5BB1, 0x8C70, 0x5BB2, 0x8C71, 0x5BB7, 0x8C72, 0x5BBA, 0x8C73, 0x5BBB, 0x8C74, 0x5BBC, + 0x8C75, 0x5BC0, 0x8C76, 0x5BC1, 0x8C77, 0x5BC3, 0x8C78, 0x5BC8, 0x8C79, 0x5BC9, 0x8C7A, 0x5BCA, 0x8C7B, 0x5BCB, 0x8C7C, 0x5BCD, + 0x8C7D, 0x5BCE, 0x8C7E, 0x5BCF, 0x8C80, 0x5BD1, 0x8C81, 0x5BD4, 0x8C82, 0x5BD5, 0x8C83, 0x5BD6, 0x8C84, 0x5BD7, 0x8C85, 0x5BD8, + 0x8C86, 0x5BD9, 0x8C87, 0x5BDA, 0x8C88, 0x5BDB, 0x8C89, 0x5BDC, 0x8C8A, 0x5BE0, 0x8C8B, 0x5BE2, 0x8C8C, 0x5BE3, 0x8C8D, 0x5BE6, + 0x8C8E, 0x5BE7, 0x8C8F, 0x5BE9, 0x8C90, 0x5BEA, 0x8C91, 0x5BEB, 0x8C92, 0x5BEC, 0x8C93, 0x5BED, 0x8C94, 0x5BEF, 0x8C95, 0x5BF1, + 0x8C96, 0x5BF2, 0x8C97, 0x5BF3, 0x8C98, 0x5BF4, 0x8C99, 0x5BF5, 0x8C9A, 0x5BF6, 0x8C9B, 0x5BF7, 0x8C9C, 0x5BFD, 0x8C9D, 0x5BFE, + 0x8C9E, 0x5C00, 0x8C9F, 0x5C02, 0x8CA0, 0x5C03, 0x8CA1, 0x5C05, 0x8CA2, 0x5C07, 0x8CA3, 0x5C08, 0x8CA4, 0x5C0B, 0x8CA5, 0x5C0C, + 0x8CA6, 0x5C0D, 0x8CA7, 0x5C0E, 0x8CA8, 0x5C10, 0x8CA9, 0x5C12, 0x8CAA, 0x5C13, 0x8CAB, 0x5C17, 0x8CAC, 0x5C19, 0x8CAD, 0x5C1B, + 0x8CAE, 0x5C1E, 0x8CAF, 0x5C1F, 0x8CB0, 0x5C20, 0x8CB1, 0x5C21, 0x8CB2, 0x5C23, 0x8CB3, 0x5C26, 0x8CB4, 0x5C28, 0x8CB5, 0x5C29, + 0x8CB6, 0x5C2A, 0x8CB7, 0x5C2B, 0x8CB8, 0x5C2D, 0x8CB9, 0x5C2E, 0x8CBA, 0x5C2F, 0x8CBB, 0x5C30, 0x8CBC, 0x5C32, 0x8CBD, 0x5C33, + 0x8CBE, 0x5C35, 0x8CBF, 0x5C36, 0x8CC0, 0x5C37, 0x8CC1, 0x5C43, 0x8CC2, 0x5C44, 0x8CC3, 0x5C46, 0x8CC4, 0x5C47, 0x8CC5, 0x5C4C, + 0x8CC6, 0x5C4D, 0x8CC7, 0x5C52, 0x8CC8, 0x5C53, 0x8CC9, 0x5C54, 0x8CCA, 0x5C56, 0x8CCB, 0x5C57, 0x8CCC, 0x5C58, 0x8CCD, 0x5C5A, + 0x8CCE, 0x5C5B, 0x8CCF, 0x5C5C, 0x8CD0, 0x5C5D, 0x8CD1, 0x5C5F, 0x8CD2, 0x5C62, 0x8CD3, 0x5C64, 0x8CD4, 0x5C67, 0x8CD5, 0x5C68, + 0x8CD6, 0x5C69, 0x8CD7, 0x5C6A, 0x8CD8, 0x5C6B, 0x8CD9, 0x5C6C, 0x8CDA, 0x5C6D, 0x8CDB, 0x5C70, 0x8CDC, 0x5C72, 0x8CDD, 0x5C73, + 0x8CDE, 0x5C74, 0x8CDF, 0x5C75, 0x8CE0, 0x5C76, 0x8CE1, 0x5C77, 0x8CE2, 0x5C78, 0x8CE3, 0x5C7B, 0x8CE4, 0x5C7C, 0x8CE5, 0x5C7D, + 0x8CE6, 0x5C7E, 0x8CE7, 0x5C80, 0x8CE8, 0x5C83, 0x8CE9, 0x5C84, 0x8CEA, 0x5C85, 0x8CEB, 0x5C86, 0x8CEC, 0x5C87, 0x8CED, 0x5C89, + 0x8CEE, 0x5C8A, 0x8CEF, 0x5C8B, 0x8CF0, 0x5C8E, 0x8CF1, 0x5C8F, 0x8CF2, 0x5C92, 0x8CF3, 0x5C93, 0x8CF4, 0x5C95, 0x8CF5, 0x5C9D, + 0x8CF6, 0x5C9E, 0x8CF7, 0x5C9F, 0x8CF8, 0x5CA0, 0x8CF9, 0x5CA1, 0x8CFA, 0x5CA4, 0x8CFB, 0x5CA5, 0x8CFC, 0x5CA6, 0x8CFD, 0x5CA7, + 0x8CFE, 0x5CA8, 0x8D40, 0x5CAA, 0x8D41, 0x5CAE, 0x8D42, 0x5CAF, 0x8D43, 0x5CB0, 0x8D44, 0x5CB2, 0x8D45, 0x5CB4, 0x8D46, 0x5CB6, + 0x8D47, 0x5CB9, 0x8D48, 0x5CBA, 0x8D49, 0x5CBB, 0x8D4A, 0x5CBC, 0x8D4B, 0x5CBE, 0x8D4C, 0x5CC0, 0x8D4D, 0x5CC2, 0x8D4E, 0x5CC3, + 0x8D4F, 0x5CC5, 0x8D50, 0x5CC6, 0x8D51, 0x5CC7, 0x8D52, 0x5CC8, 0x8D53, 0x5CC9, 0x8D54, 0x5CCA, 0x8D55, 0x5CCC, 0x8D56, 0x5CCD, + 0x8D57, 0x5CCE, 0x8D58, 0x5CCF, 0x8D59, 0x5CD0, 0x8D5A, 0x5CD1, 0x8D5B, 0x5CD3, 0x8D5C, 0x5CD4, 0x8D5D, 0x5CD5, 0x8D5E, 0x5CD6, + 0x8D5F, 0x5CD7, 0x8D60, 0x5CD8, 0x8D61, 0x5CDA, 0x8D62, 0x5CDB, 0x8D63, 0x5CDC, 0x8D64, 0x5CDD, 0x8D65, 0x5CDE, 0x8D66, 0x5CDF, + 0x8D67, 0x5CE0, 0x8D68, 0x5CE2, 0x8D69, 0x5CE3, 0x8D6A, 0x5CE7, 0x8D6B, 0x5CE9, 0x8D6C, 0x5CEB, 0x8D6D, 0x5CEC, 0x8D6E, 0x5CEE, + 0x8D6F, 0x5CEF, 0x8D70, 0x5CF1, 0x8D71, 0x5CF2, 0x8D72, 0x5CF3, 0x8D73, 0x5CF4, 0x8D74, 0x5CF5, 0x8D75, 0x5CF6, 0x8D76, 0x5CF7, + 0x8D77, 0x5CF8, 0x8D78, 0x5CF9, 0x8D79, 0x5CFA, 0x8D7A, 0x5CFC, 0x8D7B, 0x5CFD, 0x8D7C, 0x5CFE, 0x8D7D, 0x5CFF, 0x8D7E, 0x5D00, + 0x8D80, 0x5D01, 0x8D81, 0x5D04, 0x8D82, 0x5D05, 0x8D83, 0x5D08, 0x8D84, 0x5D09, 0x8D85, 0x5D0A, 0x8D86, 0x5D0B, 0x8D87, 0x5D0C, + 0x8D88, 0x5D0D, 0x8D89, 0x5D0F, 0x8D8A, 0x5D10, 0x8D8B, 0x5D11, 0x8D8C, 0x5D12, 0x8D8D, 0x5D13, 0x8D8E, 0x5D15, 0x8D8F, 0x5D17, + 0x8D90, 0x5D18, 0x8D91, 0x5D19, 0x8D92, 0x5D1A, 0x8D93, 0x5D1C, 0x8D94, 0x5D1D, 0x8D95, 0x5D1F, 0x8D96, 0x5D20, 0x8D97, 0x5D21, + 0x8D98, 0x5D22, 0x8D99, 0x5D23, 0x8D9A, 0x5D25, 0x8D9B, 0x5D28, 0x8D9C, 0x5D2A, 0x8D9D, 0x5D2B, 0x8D9E, 0x5D2C, 0x8D9F, 0x5D2F, + 0x8DA0, 0x5D30, 0x8DA1, 0x5D31, 0x8DA2, 0x5D32, 0x8DA3, 0x5D33, 0x8DA4, 0x5D35, 0x8DA5, 0x5D36, 0x8DA6, 0x5D37, 0x8DA7, 0x5D38, + 0x8DA8, 0x5D39, 0x8DA9, 0x5D3A, 0x8DAA, 0x5D3B, 0x8DAB, 0x5D3C, 0x8DAC, 0x5D3F, 0x8DAD, 0x5D40, 0x8DAE, 0x5D41, 0x8DAF, 0x5D42, + 0x8DB0, 0x5D43, 0x8DB1, 0x5D44, 0x8DB2, 0x5D45, 0x8DB3, 0x5D46, 0x8DB4, 0x5D48, 0x8DB5, 0x5D49, 0x8DB6, 0x5D4D, 0x8DB7, 0x5D4E, + 0x8DB8, 0x5D4F, 0x8DB9, 0x5D50, 0x8DBA, 0x5D51, 0x8DBB, 0x5D52, 0x8DBC, 0x5D53, 0x8DBD, 0x5D54, 0x8DBE, 0x5D55, 0x8DBF, 0x5D56, + 0x8DC0, 0x5D57, 0x8DC1, 0x5D59, 0x8DC2, 0x5D5A, 0x8DC3, 0x5D5C, 0x8DC4, 0x5D5E, 0x8DC5, 0x5D5F, 0x8DC6, 0x5D60, 0x8DC7, 0x5D61, + 0x8DC8, 0x5D62, 0x8DC9, 0x5D63, 0x8DCA, 0x5D64, 0x8DCB, 0x5D65, 0x8DCC, 0x5D66, 0x8DCD, 0x5D67, 0x8DCE, 0x5D68, 0x8DCF, 0x5D6A, + 0x8DD0, 0x5D6D, 0x8DD1, 0x5D6E, 0x8DD2, 0x5D70, 0x8DD3, 0x5D71, 0x8DD4, 0x5D72, 0x8DD5, 0x5D73, 0x8DD6, 0x5D75, 0x8DD7, 0x5D76, + 0x8DD8, 0x5D77, 0x8DD9, 0x5D78, 0x8DDA, 0x5D79, 0x8DDB, 0x5D7A, 0x8DDC, 0x5D7B, 0x8DDD, 0x5D7C, 0x8DDE, 0x5D7D, 0x8DDF, 0x5D7E, + 0x8DE0, 0x5D7F, 0x8DE1, 0x5D80, 0x8DE2, 0x5D81, 0x8DE3, 0x5D83, 0x8DE4, 0x5D84, 0x8DE5, 0x5D85, 0x8DE6, 0x5D86, 0x8DE7, 0x5D87, + 0x8DE8, 0x5D88, 0x8DE9, 0x5D89, 0x8DEA, 0x5D8A, 0x8DEB, 0x5D8B, 0x8DEC, 0x5D8C, 0x8DED, 0x5D8D, 0x8DEE, 0x5D8E, 0x8DEF, 0x5D8F, + 0x8DF0, 0x5D90, 0x8DF1, 0x5D91, 0x8DF2, 0x5D92, 0x8DF3, 0x5D93, 0x8DF4, 0x5D94, 0x8DF5, 0x5D95, 0x8DF6, 0x5D96, 0x8DF7, 0x5D97, + 0x8DF8, 0x5D98, 0x8DF9, 0x5D9A, 0x8DFA, 0x5D9B, 0x8DFB, 0x5D9C, 0x8DFC, 0x5D9E, 0x8DFD, 0x5D9F, 0x8DFE, 0x5DA0, 0x8E40, 0x5DA1, + 0x8E41, 0x5DA2, 0x8E42, 0x5DA3, 0x8E43, 0x5DA4, 0x8E44, 0x5DA5, 0x8E45, 0x5DA6, 0x8E46, 0x5DA7, 0x8E47, 0x5DA8, 0x8E48, 0x5DA9, + 0x8E49, 0x5DAA, 0x8E4A, 0x5DAB, 0x8E4B, 0x5DAC, 0x8E4C, 0x5DAD, 0x8E4D, 0x5DAE, 0x8E4E, 0x5DAF, 0x8E4F, 0x5DB0, 0x8E50, 0x5DB1, + 0x8E51, 0x5DB2, 0x8E52, 0x5DB3, 0x8E53, 0x5DB4, 0x8E54, 0x5DB5, 0x8E55, 0x5DB6, 0x8E56, 0x5DB8, 0x8E57, 0x5DB9, 0x8E58, 0x5DBA, + 0x8E59, 0x5DBB, 0x8E5A, 0x5DBC, 0x8E5B, 0x5DBD, 0x8E5C, 0x5DBE, 0x8E5D, 0x5DBF, 0x8E5E, 0x5DC0, 0x8E5F, 0x5DC1, 0x8E60, 0x5DC2, + 0x8E61, 0x5DC3, 0x8E62, 0x5DC4, 0x8E63, 0x5DC6, 0x8E64, 0x5DC7, 0x8E65, 0x5DC8, 0x8E66, 0x5DC9, 0x8E67, 0x5DCA, 0x8E68, 0x5DCB, + 0x8E69, 0x5DCC, 0x8E6A, 0x5DCE, 0x8E6B, 0x5DCF, 0x8E6C, 0x5DD0, 0x8E6D, 0x5DD1, 0x8E6E, 0x5DD2, 0x8E6F, 0x5DD3, 0x8E70, 0x5DD4, + 0x8E71, 0x5DD5, 0x8E72, 0x5DD6, 0x8E73, 0x5DD7, 0x8E74, 0x5DD8, 0x8E75, 0x5DD9, 0x8E76, 0x5DDA, 0x8E77, 0x5DDC, 0x8E78, 0x5DDF, + 0x8E79, 0x5DE0, 0x8E7A, 0x5DE3, 0x8E7B, 0x5DE4, 0x8E7C, 0x5DEA, 0x8E7D, 0x5DEC, 0x8E7E, 0x5DED, 0x8E80, 0x5DF0, 0x8E81, 0x5DF5, + 0x8E82, 0x5DF6, 0x8E83, 0x5DF8, 0x8E84, 0x5DF9, 0x8E85, 0x5DFA, 0x8E86, 0x5DFB, 0x8E87, 0x5DFC, 0x8E88, 0x5DFF, 0x8E89, 0x5E00, + 0x8E8A, 0x5E04, 0x8E8B, 0x5E07, 0x8E8C, 0x5E09, 0x8E8D, 0x5E0A, 0x8E8E, 0x5E0B, 0x8E8F, 0x5E0D, 0x8E90, 0x5E0E, 0x8E91, 0x5E12, + 0x8E92, 0x5E13, 0x8E93, 0x5E17, 0x8E94, 0x5E1E, 0x8E95, 0x5E1F, 0x8E96, 0x5E20, 0x8E97, 0x5E21, 0x8E98, 0x5E22, 0x8E99, 0x5E23, + 0x8E9A, 0x5E24, 0x8E9B, 0x5E25, 0x8E9C, 0x5E28, 0x8E9D, 0x5E29, 0x8E9E, 0x5E2A, 0x8E9F, 0x5E2B, 0x8EA0, 0x5E2C, 0x8EA1, 0x5E2F, + 0x8EA2, 0x5E30, 0x8EA3, 0x5E32, 0x8EA4, 0x5E33, 0x8EA5, 0x5E34, 0x8EA6, 0x5E35, 0x8EA7, 0x5E36, 0x8EA8, 0x5E39, 0x8EA9, 0x5E3A, + 0x8EAA, 0x5E3E, 0x8EAB, 0x5E3F, 0x8EAC, 0x5E40, 0x8EAD, 0x5E41, 0x8EAE, 0x5E43, 0x8EAF, 0x5E46, 0x8EB0, 0x5E47, 0x8EB1, 0x5E48, + 0x8EB2, 0x5E49, 0x8EB3, 0x5E4A, 0x8EB4, 0x5E4B, 0x8EB5, 0x5E4D, 0x8EB6, 0x5E4E, 0x8EB7, 0x5E4F, 0x8EB8, 0x5E50, 0x8EB9, 0x5E51, + 0x8EBA, 0x5E52, 0x8EBB, 0x5E53, 0x8EBC, 0x5E56, 0x8EBD, 0x5E57, 0x8EBE, 0x5E58, 0x8EBF, 0x5E59, 0x8EC0, 0x5E5A, 0x8EC1, 0x5E5C, + 0x8EC2, 0x5E5D, 0x8EC3, 0x5E5F, 0x8EC4, 0x5E60, 0x8EC5, 0x5E63, 0x8EC6, 0x5E64, 0x8EC7, 0x5E65, 0x8EC8, 0x5E66, 0x8EC9, 0x5E67, + 0x8ECA, 0x5E68, 0x8ECB, 0x5E69, 0x8ECC, 0x5E6A, 0x8ECD, 0x5E6B, 0x8ECE, 0x5E6C, 0x8ECF, 0x5E6D, 0x8ED0, 0x5E6E, 0x8ED1, 0x5E6F, + 0x8ED2, 0x5E70, 0x8ED3, 0x5E71, 0x8ED4, 0x5E75, 0x8ED5, 0x5E77, 0x8ED6, 0x5E79, 0x8ED7, 0x5E7E, 0x8ED8, 0x5E81, 0x8ED9, 0x5E82, + 0x8EDA, 0x5E83, 0x8EDB, 0x5E85, 0x8EDC, 0x5E88, 0x8EDD, 0x5E89, 0x8EDE, 0x5E8C, 0x8EDF, 0x5E8D, 0x8EE0, 0x5E8E, 0x8EE1, 0x5E92, + 0x8EE2, 0x5E98, 0x8EE3, 0x5E9B, 0x8EE4, 0x5E9D, 0x8EE5, 0x5EA1, 0x8EE6, 0x5EA2, 0x8EE7, 0x5EA3, 0x8EE8, 0x5EA4, 0x8EE9, 0x5EA8, + 0x8EEA, 0x5EA9, 0x8EEB, 0x5EAA, 0x8EEC, 0x5EAB, 0x8EED, 0x5EAC, 0x8EEE, 0x5EAE, 0x8EEF, 0x5EAF, 0x8EF0, 0x5EB0, 0x8EF1, 0x5EB1, + 0x8EF2, 0x5EB2, 0x8EF3, 0x5EB4, 0x8EF4, 0x5EBA, 0x8EF5, 0x5EBB, 0x8EF6, 0x5EBC, 0x8EF7, 0x5EBD, 0x8EF8, 0x5EBF, 0x8EF9, 0x5EC0, + 0x8EFA, 0x5EC1, 0x8EFB, 0x5EC2, 0x8EFC, 0x5EC3, 0x8EFD, 0x5EC4, 0x8EFE, 0x5EC5, 0x8F40, 0x5EC6, 0x8F41, 0x5EC7, 0x8F42, 0x5EC8, + 0x8F43, 0x5ECB, 0x8F44, 0x5ECC, 0x8F45, 0x5ECD, 0x8F46, 0x5ECE, 0x8F47, 0x5ECF, 0x8F48, 0x5ED0, 0x8F49, 0x5ED4, 0x8F4A, 0x5ED5, + 0x8F4B, 0x5ED7, 0x8F4C, 0x5ED8, 0x8F4D, 0x5ED9, 0x8F4E, 0x5EDA, 0x8F4F, 0x5EDC, 0x8F50, 0x5EDD, 0x8F51, 0x5EDE, 0x8F52, 0x5EDF, + 0x8F53, 0x5EE0, 0x8F54, 0x5EE1, 0x8F55, 0x5EE2, 0x8F56, 0x5EE3, 0x8F57, 0x5EE4, 0x8F58, 0x5EE5, 0x8F59, 0x5EE6, 0x8F5A, 0x5EE7, + 0x8F5B, 0x5EE9, 0x8F5C, 0x5EEB, 0x8F5D, 0x5EEC, 0x8F5E, 0x5EED, 0x8F5F, 0x5EEE, 0x8F60, 0x5EEF, 0x8F61, 0x5EF0, 0x8F62, 0x5EF1, + 0x8F63, 0x5EF2, 0x8F64, 0x5EF3, 0x8F65, 0x5EF5, 0x8F66, 0x5EF8, 0x8F67, 0x5EF9, 0x8F68, 0x5EFB, 0x8F69, 0x5EFC, 0x8F6A, 0x5EFD, + 0x8F6B, 0x5F05, 0x8F6C, 0x5F06, 0x8F6D, 0x5F07, 0x8F6E, 0x5F09, 0x8F6F, 0x5F0C, 0x8F70, 0x5F0D, 0x8F71, 0x5F0E, 0x8F72, 0x5F10, + 0x8F73, 0x5F12, 0x8F74, 0x5F14, 0x8F75, 0x5F16, 0x8F76, 0x5F19, 0x8F77, 0x5F1A, 0x8F78, 0x5F1C, 0x8F79, 0x5F1D, 0x8F7A, 0x5F1E, + 0x8F7B, 0x5F21, 0x8F7C, 0x5F22, 0x8F7D, 0x5F23, 0x8F7E, 0x5F24, 0x8F80, 0x5F28, 0x8F81, 0x5F2B, 0x8F82, 0x5F2C, 0x8F83, 0x5F2E, + 0x8F84, 0x5F30, 0x8F85, 0x5F32, 0x8F86, 0x5F33, 0x8F87, 0x5F34, 0x8F88, 0x5F35, 0x8F89, 0x5F36, 0x8F8A, 0x5F37, 0x8F8B, 0x5F38, + 0x8F8C, 0x5F3B, 0x8F8D, 0x5F3D, 0x8F8E, 0x5F3E, 0x8F8F, 0x5F3F, 0x8F90, 0x5F41, 0x8F91, 0x5F42, 0x8F92, 0x5F43, 0x8F93, 0x5F44, + 0x8F94, 0x5F45, 0x8F95, 0x5F46, 0x8F96, 0x5F47, 0x8F97, 0x5F48, 0x8F98, 0x5F49, 0x8F99, 0x5F4A, 0x8F9A, 0x5F4B, 0x8F9B, 0x5F4C, + 0x8F9C, 0x5F4D, 0x8F9D, 0x5F4E, 0x8F9E, 0x5F4F, 0x8F9F, 0x5F51, 0x8FA0, 0x5F54, 0x8FA1, 0x5F59, 0x8FA2, 0x5F5A, 0x8FA3, 0x5F5B, + 0x8FA4, 0x5F5C, 0x8FA5, 0x5F5E, 0x8FA6, 0x5F5F, 0x8FA7, 0x5F60, 0x8FA8, 0x5F63, 0x8FA9, 0x5F65, 0x8FAA, 0x5F67, 0x8FAB, 0x5F68, + 0x8FAC, 0x5F6B, 0x8FAD, 0x5F6E, 0x8FAE, 0x5F6F, 0x8FAF, 0x5F72, 0x8FB0, 0x5F74, 0x8FB1, 0x5F75, 0x8FB2, 0x5F76, 0x8FB3, 0x5F78, + 0x8FB4, 0x5F7A, 0x8FB5, 0x5F7D, 0x8FB6, 0x5F7E, 0x8FB7, 0x5F7F, 0x8FB8, 0x5F83, 0x8FB9, 0x5F86, 0x8FBA, 0x5F8D, 0x8FBB, 0x5F8E, + 0x8FBC, 0x5F8F, 0x8FBD, 0x5F91, 0x8FBE, 0x5F93, 0x8FBF, 0x5F94, 0x8FC0, 0x5F96, 0x8FC1, 0x5F9A, 0x8FC2, 0x5F9B, 0x8FC3, 0x5F9D, + 0x8FC4, 0x5F9E, 0x8FC5, 0x5F9F, 0x8FC6, 0x5FA0, 0x8FC7, 0x5FA2, 0x8FC8, 0x5FA3, 0x8FC9, 0x5FA4, 0x8FCA, 0x5FA5, 0x8FCB, 0x5FA6, + 0x8FCC, 0x5FA7, 0x8FCD, 0x5FA9, 0x8FCE, 0x5FAB, 0x8FCF, 0x5FAC, 0x8FD0, 0x5FAF, 0x8FD1, 0x5FB0, 0x8FD2, 0x5FB1, 0x8FD3, 0x5FB2, + 0x8FD4, 0x5FB3, 0x8FD5, 0x5FB4, 0x8FD6, 0x5FB6, 0x8FD7, 0x5FB8, 0x8FD8, 0x5FB9, 0x8FD9, 0x5FBA, 0x8FDA, 0x5FBB, 0x8FDB, 0x5FBE, + 0x8FDC, 0x5FBF, 0x8FDD, 0x5FC0, 0x8FDE, 0x5FC1, 0x8FDF, 0x5FC2, 0x8FE0, 0x5FC7, 0x8FE1, 0x5FC8, 0x8FE2, 0x5FCA, 0x8FE3, 0x5FCB, + 0x8FE4, 0x5FCE, 0x8FE5, 0x5FD3, 0x8FE6, 0x5FD4, 0x8FE7, 0x5FD5, 0x8FE8, 0x5FDA, 0x8FE9, 0x5FDB, 0x8FEA, 0x5FDC, 0x8FEB, 0x5FDE, + 0x8FEC, 0x5FDF, 0x8FED, 0x5FE2, 0x8FEE, 0x5FE3, 0x8FEF, 0x5FE5, 0x8FF0, 0x5FE6, 0x8FF1, 0x5FE8, 0x8FF2, 0x5FE9, 0x8FF3, 0x5FEC, + 0x8FF4, 0x5FEF, 0x8FF5, 0x5FF0, 0x8FF6, 0x5FF2, 0x8FF7, 0x5FF3, 0x8FF8, 0x5FF4, 0x8FF9, 0x5FF6, 0x8FFA, 0x5FF7, 0x8FFB, 0x5FF9, + 0x8FFC, 0x5FFA, 0x8FFD, 0x5FFC, 0x8FFE, 0x6007, 0x9040, 0x6008, 0x9041, 0x6009, 0x9042, 0x600B, 0x9043, 0x600C, 0x9044, 0x6010, + 0x9045, 0x6011, 0x9046, 0x6013, 0x9047, 0x6017, 0x9048, 0x6018, 0x9049, 0x601A, 0x904A, 0x601E, 0x904B, 0x601F, 0x904C, 0x6022, + 0x904D, 0x6023, 0x904E, 0x6024, 0x904F, 0x602C, 0x9050, 0x602D, 0x9051, 0x602E, 0x9052, 0x6030, 0x9053, 0x6031, 0x9054, 0x6032, + 0x9055, 0x6033, 0x9056, 0x6034, 0x9057, 0x6036, 0x9058, 0x6037, 0x9059, 0x6038, 0x905A, 0x6039, 0x905B, 0x603A, 0x905C, 0x603D, + 0x905D, 0x603E, 0x905E, 0x6040, 0x905F, 0x6044, 0x9060, 0x6045, 0x9061, 0x6046, 0x9062, 0x6047, 0x9063, 0x6048, 0x9064, 0x6049, + 0x9065, 0x604A, 0x9066, 0x604C, 0x9067, 0x604E, 0x9068, 0x604F, 0x9069, 0x6051, 0x906A, 0x6053, 0x906B, 0x6054, 0x906C, 0x6056, + 0x906D, 0x6057, 0x906E, 0x6058, 0x906F, 0x605B, 0x9070, 0x605C, 0x9071, 0x605E, 0x9072, 0x605F, 0x9073, 0x6060, 0x9074, 0x6061, + 0x9075, 0x6065, 0x9076, 0x6066, 0x9077, 0x606E, 0x9078, 0x6071, 0x9079, 0x6072, 0x907A, 0x6074, 0x907B, 0x6075, 0x907C, 0x6077, + 0x907D, 0x607E, 0x907E, 0x6080, 0x9080, 0x6081, 0x9081, 0x6082, 0x9082, 0x6085, 0x9083, 0x6086, 0x9084, 0x6087, 0x9085, 0x6088, + 0x9086, 0x608A, 0x9087, 0x608B, 0x9088, 0x608E, 0x9089, 0x608F, 0x908A, 0x6090, 0x908B, 0x6091, 0x908C, 0x6093, 0x908D, 0x6095, + 0x908E, 0x6097, 0x908F, 0x6098, 0x9090, 0x6099, 0x9091, 0x609C, 0x9092, 0x609E, 0x9093, 0x60A1, 0x9094, 0x60A2, 0x9095, 0x60A4, + 0x9096, 0x60A5, 0x9097, 0x60A7, 0x9098, 0x60A9, 0x9099, 0x60AA, 0x909A, 0x60AE, 0x909B, 0x60B0, 0x909C, 0x60B3, 0x909D, 0x60B5, + 0x909E, 0x60B6, 0x909F, 0x60B7, 0x90A0, 0x60B9, 0x90A1, 0x60BA, 0x90A2, 0x60BD, 0x90A3, 0x60BE, 0x90A4, 0x60BF, 0x90A5, 0x60C0, + 0x90A6, 0x60C1, 0x90A7, 0x60C2, 0x90A8, 0x60C3, 0x90A9, 0x60C4, 0x90AA, 0x60C7, 0x90AB, 0x60C8, 0x90AC, 0x60C9, 0x90AD, 0x60CC, + 0x90AE, 0x60CD, 0x90AF, 0x60CE, 0x90B0, 0x60CF, 0x90B1, 0x60D0, 0x90B2, 0x60D2, 0x90B3, 0x60D3, 0x90B4, 0x60D4, 0x90B5, 0x60D6, + 0x90B6, 0x60D7, 0x90B7, 0x60D9, 0x90B8, 0x60DB, 0x90B9, 0x60DE, 0x90BA, 0x60E1, 0x90BB, 0x60E2, 0x90BC, 0x60E3, 0x90BD, 0x60E4, + 0x90BE, 0x60E5, 0x90BF, 0x60EA, 0x90C0, 0x60F1, 0x90C1, 0x60F2, 0x90C2, 0x60F5, 0x90C3, 0x60F7, 0x90C4, 0x60F8, 0x90C5, 0x60FB, + 0x90C6, 0x60FC, 0x90C7, 0x60FD, 0x90C8, 0x60FE, 0x90C9, 0x60FF, 0x90CA, 0x6102, 0x90CB, 0x6103, 0x90CC, 0x6104, 0x90CD, 0x6105, + 0x90CE, 0x6107, 0x90CF, 0x610A, 0x90D0, 0x610B, 0x90D1, 0x610C, 0x90D2, 0x6110, 0x90D3, 0x6111, 0x90D4, 0x6112, 0x90D5, 0x6113, + 0x90D6, 0x6114, 0x90D7, 0x6116, 0x90D8, 0x6117, 0x90D9, 0x6118, 0x90DA, 0x6119, 0x90DB, 0x611B, 0x90DC, 0x611C, 0x90DD, 0x611D, + 0x90DE, 0x611E, 0x90DF, 0x6121, 0x90E0, 0x6122, 0x90E1, 0x6125, 0x90E2, 0x6128, 0x90E3, 0x6129, 0x90E4, 0x612A, 0x90E5, 0x612C, + 0x90E6, 0x612D, 0x90E7, 0x612E, 0x90E8, 0x612F, 0x90E9, 0x6130, 0x90EA, 0x6131, 0x90EB, 0x6132, 0x90EC, 0x6133, 0x90ED, 0x6134, + 0x90EE, 0x6135, 0x90EF, 0x6136, 0x90F0, 0x6137, 0x90F1, 0x6138, 0x90F2, 0x6139, 0x90F3, 0x613A, 0x90F4, 0x613B, 0x90F5, 0x613C, + 0x90F6, 0x613D, 0x90F7, 0x613E, 0x90F8, 0x6140, 0x90F9, 0x6141, 0x90FA, 0x6142, 0x90FB, 0x6143, 0x90FC, 0x6144, 0x90FD, 0x6145, + 0x90FE, 0x6146, 0x9140, 0x6147, 0x9141, 0x6149, 0x9142, 0x614B, 0x9143, 0x614D, 0x9144, 0x614F, 0x9145, 0x6150, 0x9146, 0x6152, + 0x9147, 0x6153, 0x9148, 0x6154, 0x9149, 0x6156, 0x914A, 0x6157, 0x914B, 0x6158, 0x914C, 0x6159, 0x914D, 0x615A, 0x914E, 0x615B, + 0x914F, 0x615C, 0x9150, 0x615E, 0x9151, 0x615F, 0x9152, 0x6160, 0x9153, 0x6161, 0x9154, 0x6163, 0x9155, 0x6164, 0x9156, 0x6165, + 0x9157, 0x6166, 0x9158, 0x6169, 0x9159, 0x616A, 0x915A, 0x616B, 0x915B, 0x616C, 0x915C, 0x616D, 0x915D, 0x616E, 0x915E, 0x616F, + 0x915F, 0x6171, 0x9160, 0x6172, 0x9161, 0x6173, 0x9162, 0x6174, 0x9163, 0x6176, 0x9164, 0x6178, 0x9165, 0x6179, 0x9166, 0x617A, + 0x9167, 0x617B, 0x9168, 0x617C, 0x9169, 0x617D, 0x916A, 0x617E, 0x916B, 0x617F, 0x916C, 0x6180, 0x916D, 0x6181, 0x916E, 0x6182, + 0x916F, 0x6183, 0x9170, 0x6184, 0x9171, 0x6185, 0x9172, 0x6186, 0x9173, 0x6187, 0x9174, 0x6188, 0x9175, 0x6189, 0x9176, 0x618A, + 0x9177, 0x618C, 0x9178, 0x618D, 0x9179, 0x618F, 0x917A, 0x6190, 0x917B, 0x6191, 0x917C, 0x6192, 0x917D, 0x6193, 0x917E, 0x6195, + 0x9180, 0x6196, 0x9181, 0x6197, 0x9182, 0x6198, 0x9183, 0x6199, 0x9184, 0x619A, 0x9185, 0x619B, 0x9186, 0x619C, 0x9187, 0x619E, + 0x9188, 0x619F, 0x9189, 0x61A0, 0x918A, 0x61A1, 0x918B, 0x61A2, 0x918C, 0x61A3, 0x918D, 0x61A4, 0x918E, 0x61A5, 0x918F, 0x61A6, + 0x9190, 0x61AA, 0x9191, 0x61AB, 0x9192, 0x61AD, 0x9193, 0x61AE, 0x9194, 0x61AF, 0x9195, 0x61B0, 0x9196, 0x61B1, 0x9197, 0x61B2, + 0x9198, 0x61B3, 0x9199, 0x61B4, 0x919A, 0x61B5, 0x919B, 0x61B6, 0x919C, 0x61B8, 0x919D, 0x61B9, 0x919E, 0x61BA, 0x919F, 0x61BB, + 0x91A0, 0x61BC, 0x91A1, 0x61BD, 0x91A2, 0x61BF, 0x91A3, 0x61C0, 0x91A4, 0x61C1, 0x91A5, 0x61C3, 0x91A6, 0x61C4, 0x91A7, 0x61C5, + 0x91A8, 0x61C6, 0x91A9, 0x61C7, 0x91AA, 0x61C9, 0x91AB, 0x61CC, 0x91AC, 0x61CD, 0x91AD, 0x61CE, 0x91AE, 0x61CF, 0x91AF, 0x61D0, + 0x91B0, 0x61D3, 0x91B1, 0x61D5, 0x91B2, 0x61D6, 0x91B3, 0x61D7, 0x91B4, 0x61D8, 0x91B5, 0x61D9, 0x91B6, 0x61DA, 0x91B7, 0x61DB, + 0x91B8, 0x61DC, 0x91B9, 0x61DD, 0x91BA, 0x61DE, 0x91BB, 0x61DF, 0x91BC, 0x61E0, 0x91BD, 0x61E1, 0x91BE, 0x61E2, 0x91BF, 0x61E3, + 0x91C0, 0x61E4, 0x91C1, 0x61E5, 0x91C2, 0x61E7, 0x91C3, 0x61E8, 0x91C4, 0x61E9, 0x91C5, 0x61EA, 0x91C6, 0x61EB, 0x91C7, 0x61EC, + 0x91C8, 0x61ED, 0x91C9, 0x61EE, 0x91CA, 0x61EF, 0x91CB, 0x61F0, 0x91CC, 0x61F1, 0x91CD, 0x61F2, 0x91CE, 0x61F3, 0x91CF, 0x61F4, + 0x91D0, 0x61F6, 0x91D1, 0x61F7, 0x91D2, 0x61F8, 0x91D3, 0x61F9, 0x91D4, 0x61FA, 0x91D5, 0x61FB, 0x91D6, 0x61FC, 0x91D7, 0x61FD, + 0x91D8, 0x61FE, 0x91D9, 0x6200, 0x91DA, 0x6201, 0x91DB, 0x6202, 0x91DC, 0x6203, 0x91DD, 0x6204, 0x91DE, 0x6205, 0x91DF, 0x6207, + 0x91E0, 0x6209, 0x91E1, 0x6213, 0x91E2, 0x6214, 0x91E3, 0x6219, 0x91E4, 0x621C, 0x91E5, 0x621D, 0x91E6, 0x621E, 0x91E7, 0x6220, + 0x91E8, 0x6223, 0x91E9, 0x6226, 0x91EA, 0x6227, 0x91EB, 0x6228, 0x91EC, 0x6229, 0x91ED, 0x622B, 0x91EE, 0x622D, 0x91EF, 0x622F, + 0x91F0, 0x6230, 0x91F1, 0x6231, 0x91F2, 0x6232, 0x91F3, 0x6235, 0x91F4, 0x6236, 0x91F5, 0x6238, 0x91F6, 0x6239, 0x91F7, 0x623A, + 0x91F8, 0x623B, 0x91F9, 0x623C, 0x91FA, 0x6242, 0x91FB, 0x6244, 0x91FC, 0x6245, 0x91FD, 0x6246, 0x91FE, 0x624A, 0x9240, 0x624F, + 0x9241, 0x6250, 0x9242, 0x6255, 0x9243, 0x6256, 0x9244, 0x6257, 0x9245, 0x6259, 0x9246, 0x625A, 0x9247, 0x625C, 0x9248, 0x625D, + 0x9249, 0x625E, 0x924A, 0x625F, 0x924B, 0x6260, 0x924C, 0x6261, 0x924D, 0x6262, 0x924E, 0x6264, 0x924F, 0x6265, 0x9250, 0x6268, + 0x9251, 0x6271, 0x9252, 0x6272, 0x9253, 0x6274, 0x9254, 0x6275, 0x9255, 0x6277, 0x9256, 0x6278, 0x9257, 0x627A, 0x9258, 0x627B, + 0x9259, 0x627D, 0x925A, 0x6281, 0x925B, 0x6282, 0x925C, 0x6283, 0x925D, 0x6285, 0x925E, 0x6286, 0x925F, 0x6287, 0x9260, 0x6288, + 0x9261, 0x628B, 0x9262, 0x628C, 0x9263, 0x628D, 0x9264, 0x628E, 0x9265, 0x628F, 0x9266, 0x6290, 0x9267, 0x6294, 0x9268, 0x6299, + 0x9269, 0x629C, 0x926A, 0x629D, 0x926B, 0x629E, 0x926C, 0x62A3, 0x926D, 0x62A6, 0x926E, 0x62A7, 0x926F, 0x62A9, 0x9270, 0x62AA, + 0x9271, 0x62AD, 0x9272, 0x62AE, 0x9273, 0x62AF, 0x9274, 0x62B0, 0x9275, 0x62B2, 0x9276, 0x62B3, 0x9277, 0x62B4, 0x9278, 0x62B6, + 0x9279, 0x62B7, 0x927A, 0x62B8, 0x927B, 0x62BA, 0x927C, 0x62BE, 0x927D, 0x62C0, 0x927E, 0x62C1, 0x9280, 0x62C3, 0x9281, 0x62CB, + 0x9282, 0x62CF, 0x9283, 0x62D1, 0x9284, 0x62D5, 0x9285, 0x62DD, 0x9286, 0x62DE, 0x9287, 0x62E0, 0x9288, 0x62E1, 0x9289, 0x62E4, + 0x928A, 0x62EA, 0x928B, 0x62EB, 0x928C, 0x62F0, 0x928D, 0x62F2, 0x928E, 0x62F5, 0x928F, 0x62F8, 0x9290, 0x62F9, 0x9291, 0x62FA, + 0x9292, 0x62FB, 0x9293, 0x6300, 0x9294, 0x6303, 0x9295, 0x6304, 0x9296, 0x6305, 0x9297, 0x6306, 0x9298, 0x630A, 0x9299, 0x630B, + 0x929A, 0x630C, 0x929B, 0x630D, 0x929C, 0x630F, 0x929D, 0x6310, 0x929E, 0x6312, 0x929F, 0x6313, 0x92A0, 0x6314, 0x92A1, 0x6315, + 0x92A2, 0x6317, 0x92A3, 0x6318, 0x92A4, 0x6319, 0x92A5, 0x631C, 0x92A6, 0x6326, 0x92A7, 0x6327, 0x92A8, 0x6329, 0x92A9, 0x632C, + 0x92AA, 0x632D, 0x92AB, 0x632E, 0x92AC, 0x6330, 0x92AD, 0x6331, 0x92AE, 0x6333, 0x92AF, 0x6334, 0x92B0, 0x6335, 0x92B1, 0x6336, + 0x92B2, 0x6337, 0x92B3, 0x6338, 0x92B4, 0x633B, 0x92B5, 0x633C, 0x92B6, 0x633E, 0x92B7, 0x633F, 0x92B8, 0x6340, 0x92B9, 0x6341, + 0x92BA, 0x6344, 0x92BB, 0x6347, 0x92BC, 0x6348, 0x92BD, 0x634A, 0x92BE, 0x6351, 0x92BF, 0x6352, 0x92C0, 0x6353, 0x92C1, 0x6354, + 0x92C2, 0x6356, 0x92C3, 0x6357, 0x92C4, 0x6358, 0x92C5, 0x6359, 0x92C6, 0x635A, 0x92C7, 0x635B, 0x92C8, 0x635C, 0x92C9, 0x635D, + 0x92CA, 0x6360, 0x92CB, 0x6364, 0x92CC, 0x6365, 0x92CD, 0x6366, 0x92CE, 0x6368, 0x92CF, 0x636A, 0x92D0, 0x636B, 0x92D1, 0x636C, + 0x92D2, 0x636F, 0x92D3, 0x6370, 0x92D4, 0x6372, 0x92D5, 0x6373, 0x92D6, 0x6374, 0x92D7, 0x6375, 0x92D8, 0x6378, 0x92D9, 0x6379, + 0x92DA, 0x637C, 0x92DB, 0x637D, 0x92DC, 0x637E, 0x92DD, 0x637F, 0x92DE, 0x6381, 0x92DF, 0x6383, 0x92E0, 0x6384, 0x92E1, 0x6385, + 0x92E2, 0x6386, 0x92E3, 0x638B, 0x92E4, 0x638D, 0x92E5, 0x6391, 0x92E6, 0x6393, 0x92E7, 0x6394, 0x92E8, 0x6395, 0x92E9, 0x6397, + 0x92EA, 0x6399, 0x92EB, 0x639A, 0x92EC, 0x639B, 0x92ED, 0x639C, 0x92EE, 0x639D, 0x92EF, 0x639E, 0x92F0, 0x639F, 0x92F1, 0x63A1, + 0x92F2, 0x63A4, 0x92F3, 0x63A6, 0x92F4, 0x63AB, 0x92F5, 0x63AF, 0x92F6, 0x63B1, 0x92F7, 0x63B2, 0x92F8, 0x63B5, 0x92F9, 0x63B6, + 0x92FA, 0x63B9, 0x92FB, 0x63BB, 0x92FC, 0x63BD, 0x92FD, 0x63BF, 0x92FE, 0x63C0, 0x9340, 0x63C1, 0x9341, 0x63C2, 0x9342, 0x63C3, + 0x9343, 0x63C5, 0x9344, 0x63C7, 0x9345, 0x63C8, 0x9346, 0x63CA, 0x9347, 0x63CB, 0x9348, 0x63CC, 0x9349, 0x63D1, 0x934A, 0x63D3, + 0x934B, 0x63D4, 0x934C, 0x63D5, 0x934D, 0x63D7, 0x934E, 0x63D8, 0x934F, 0x63D9, 0x9350, 0x63DA, 0x9351, 0x63DB, 0x9352, 0x63DC, + 0x9353, 0x63DD, 0x9354, 0x63DF, 0x9355, 0x63E2, 0x9356, 0x63E4, 0x9357, 0x63E5, 0x9358, 0x63E6, 0x9359, 0x63E7, 0x935A, 0x63E8, + 0x935B, 0x63EB, 0x935C, 0x63EC, 0x935D, 0x63EE, 0x935E, 0x63EF, 0x935F, 0x63F0, 0x9360, 0x63F1, 0x9361, 0x63F3, 0x9362, 0x63F5, + 0x9363, 0x63F7, 0x9364, 0x63F9, 0x9365, 0x63FA, 0x9366, 0x63FB, 0x9367, 0x63FC, 0x9368, 0x63FE, 0x9369, 0x6403, 0x936A, 0x6404, + 0x936B, 0x6406, 0x936C, 0x6407, 0x936D, 0x6408, 0x936E, 0x6409, 0x936F, 0x640A, 0x9370, 0x640D, 0x9371, 0x640E, 0x9372, 0x6411, + 0x9373, 0x6412, 0x9374, 0x6415, 0x9375, 0x6416, 0x9376, 0x6417, 0x9377, 0x6418, 0x9378, 0x6419, 0x9379, 0x641A, 0x937A, 0x641D, + 0x937B, 0x641F, 0x937C, 0x6422, 0x937D, 0x6423, 0x937E, 0x6424, 0x9380, 0x6425, 0x9381, 0x6427, 0x9382, 0x6428, 0x9383, 0x6429, + 0x9384, 0x642B, 0x9385, 0x642E, 0x9386, 0x642F, 0x9387, 0x6430, 0x9388, 0x6431, 0x9389, 0x6432, 0x938A, 0x6433, 0x938B, 0x6435, + 0x938C, 0x6436, 0x938D, 0x6437, 0x938E, 0x6438, 0x938F, 0x6439, 0x9390, 0x643B, 0x9391, 0x643C, 0x9392, 0x643E, 0x9393, 0x6440, + 0x9394, 0x6442, 0x9395, 0x6443, 0x9396, 0x6449, 0x9397, 0x644B, 0x9398, 0x644C, 0x9399, 0x644D, 0x939A, 0x644E, 0x939B, 0x644F, + 0x939C, 0x6450, 0x939D, 0x6451, 0x939E, 0x6453, 0x939F, 0x6455, 0x93A0, 0x6456, 0x93A1, 0x6457, 0x93A2, 0x6459, 0x93A3, 0x645A, + 0x93A4, 0x645B, 0x93A5, 0x645C, 0x93A6, 0x645D, 0x93A7, 0x645F, 0x93A8, 0x6460, 0x93A9, 0x6461, 0x93AA, 0x6462, 0x93AB, 0x6463, + 0x93AC, 0x6464, 0x93AD, 0x6465, 0x93AE, 0x6466, 0x93AF, 0x6468, 0x93B0, 0x646A, 0x93B1, 0x646B, 0x93B2, 0x646C, 0x93B3, 0x646E, + 0x93B4, 0x646F, 0x93B5, 0x6470, 0x93B6, 0x6471, 0x93B7, 0x6472, 0x93B8, 0x6473, 0x93B9, 0x6474, 0x93BA, 0x6475, 0x93BB, 0x6476, + 0x93BC, 0x6477, 0x93BD, 0x647B, 0x93BE, 0x647C, 0x93BF, 0x647D, 0x93C0, 0x647E, 0x93C1, 0x647F, 0x93C2, 0x6480, 0x93C3, 0x6481, + 0x93C4, 0x6483, 0x93C5, 0x6486, 0x93C6, 0x6488, 0x93C7, 0x6489, 0x93C8, 0x648A, 0x93C9, 0x648B, 0x93CA, 0x648C, 0x93CB, 0x648D, + 0x93CC, 0x648E, 0x93CD, 0x648F, 0x93CE, 0x6490, 0x93CF, 0x6493, 0x93D0, 0x6494, 0x93D1, 0x6497, 0x93D2, 0x6498, 0x93D3, 0x649A, + 0x93D4, 0x649B, 0x93D5, 0x649C, 0x93D6, 0x649D, 0x93D7, 0x649F, 0x93D8, 0x64A0, 0x93D9, 0x64A1, 0x93DA, 0x64A2, 0x93DB, 0x64A3, + 0x93DC, 0x64A5, 0x93DD, 0x64A6, 0x93DE, 0x64A7, 0x93DF, 0x64A8, 0x93E0, 0x64AA, 0x93E1, 0x64AB, 0x93E2, 0x64AF, 0x93E3, 0x64B1, + 0x93E4, 0x64B2, 0x93E5, 0x64B3, 0x93E6, 0x64B4, 0x93E7, 0x64B6, 0x93E8, 0x64B9, 0x93E9, 0x64BB, 0x93EA, 0x64BD, 0x93EB, 0x64BE, + 0x93EC, 0x64BF, 0x93ED, 0x64C1, 0x93EE, 0x64C3, 0x93EF, 0x64C4, 0x93F0, 0x64C6, 0x93F1, 0x64C7, 0x93F2, 0x64C8, 0x93F3, 0x64C9, + 0x93F4, 0x64CA, 0x93F5, 0x64CB, 0x93F6, 0x64CC, 0x93F7, 0x64CF, 0x93F8, 0x64D1, 0x93F9, 0x64D3, 0x93FA, 0x64D4, 0x93FB, 0x64D5, + 0x93FC, 0x64D6, 0x93FD, 0x64D9, 0x93FE, 0x64DA, 0x9440, 0x64DB, 0x9441, 0x64DC, 0x9442, 0x64DD, 0x9443, 0x64DF, 0x9444, 0x64E0, + 0x9445, 0x64E1, 0x9446, 0x64E3, 0x9447, 0x64E5, 0x9448, 0x64E7, 0x9449, 0x64E8, 0x944A, 0x64E9, 0x944B, 0x64EA, 0x944C, 0x64EB, + 0x944D, 0x64EC, 0x944E, 0x64ED, 0x944F, 0x64EE, 0x9450, 0x64EF, 0x9451, 0x64F0, 0x9452, 0x64F1, 0x9453, 0x64F2, 0x9454, 0x64F3, + 0x9455, 0x64F4, 0x9456, 0x64F5, 0x9457, 0x64F6, 0x9458, 0x64F7, 0x9459, 0x64F8, 0x945A, 0x64F9, 0x945B, 0x64FA, 0x945C, 0x64FB, + 0x945D, 0x64FC, 0x945E, 0x64FD, 0x945F, 0x64FE, 0x9460, 0x64FF, 0x9461, 0x6501, 0x9462, 0x6502, 0x9463, 0x6503, 0x9464, 0x6504, + 0x9465, 0x6505, 0x9466, 0x6506, 0x9467, 0x6507, 0x9468, 0x6508, 0x9469, 0x650A, 0x946A, 0x650B, 0x946B, 0x650C, 0x946C, 0x650D, + 0x946D, 0x650E, 0x946E, 0x650F, 0x946F, 0x6510, 0x9470, 0x6511, 0x9471, 0x6513, 0x9472, 0x6514, 0x9473, 0x6515, 0x9474, 0x6516, + 0x9475, 0x6517, 0x9476, 0x6519, 0x9477, 0x651A, 0x9478, 0x651B, 0x9479, 0x651C, 0x947A, 0x651D, 0x947B, 0x651E, 0x947C, 0x651F, + 0x947D, 0x6520, 0x947E, 0x6521, 0x9480, 0x6522, 0x9481, 0x6523, 0x9482, 0x6524, 0x9483, 0x6526, 0x9484, 0x6527, 0x9485, 0x6528, + 0x9486, 0x6529, 0x9487, 0x652A, 0x9488, 0x652C, 0x9489, 0x652D, 0x948A, 0x6530, 0x948B, 0x6531, 0x948C, 0x6532, 0x948D, 0x6533, + 0x948E, 0x6537, 0x948F, 0x653A, 0x9490, 0x653C, 0x9491, 0x653D, 0x9492, 0x6540, 0x9493, 0x6541, 0x9494, 0x6542, 0x9495, 0x6543, + 0x9496, 0x6544, 0x9497, 0x6546, 0x9498, 0x6547, 0x9499, 0x654A, 0x949A, 0x654B, 0x949B, 0x654D, 0x949C, 0x654E, 0x949D, 0x6550, + 0x949E, 0x6552, 0x949F, 0x6553, 0x94A0, 0x6554, 0x94A1, 0x6557, 0x94A2, 0x6558, 0x94A3, 0x655A, 0x94A4, 0x655C, 0x94A5, 0x655F, + 0x94A6, 0x6560, 0x94A7, 0x6561, 0x94A8, 0x6564, 0x94A9, 0x6565, 0x94AA, 0x6567, 0x94AB, 0x6568, 0x94AC, 0x6569, 0x94AD, 0x656A, + 0x94AE, 0x656D, 0x94AF, 0x656E, 0x94B0, 0x656F, 0x94B1, 0x6571, 0x94B2, 0x6573, 0x94B3, 0x6575, 0x94B4, 0x6576, 0x94B5, 0x6578, + 0x94B6, 0x6579, 0x94B7, 0x657A, 0x94B8, 0x657B, 0x94B9, 0x657C, 0x94BA, 0x657D, 0x94BB, 0x657E, 0x94BC, 0x657F, 0x94BD, 0x6580, + 0x94BE, 0x6581, 0x94BF, 0x6582, 0x94C0, 0x6583, 0x94C1, 0x6584, 0x94C2, 0x6585, 0x94C3, 0x6586, 0x94C4, 0x6588, 0x94C5, 0x6589, + 0x94C6, 0x658A, 0x94C7, 0x658D, 0x94C8, 0x658E, 0x94C9, 0x658F, 0x94CA, 0x6592, 0x94CB, 0x6594, 0x94CC, 0x6595, 0x94CD, 0x6596, + 0x94CE, 0x6598, 0x94CF, 0x659A, 0x94D0, 0x659D, 0x94D1, 0x659E, 0x94D2, 0x65A0, 0x94D3, 0x65A2, 0x94D4, 0x65A3, 0x94D5, 0x65A6, + 0x94D6, 0x65A8, 0x94D7, 0x65AA, 0x94D8, 0x65AC, 0x94D9, 0x65AE, 0x94DA, 0x65B1, 0x94DB, 0x65B2, 0x94DC, 0x65B3, 0x94DD, 0x65B4, + 0x94DE, 0x65B5, 0x94DF, 0x65B6, 0x94E0, 0x65B7, 0x94E1, 0x65B8, 0x94E2, 0x65BA, 0x94E3, 0x65BB, 0x94E4, 0x65BE, 0x94E5, 0x65BF, + 0x94E6, 0x65C0, 0x94E7, 0x65C2, 0x94E8, 0x65C7, 0x94E9, 0x65C8, 0x94EA, 0x65C9, 0x94EB, 0x65CA, 0x94EC, 0x65CD, 0x94ED, 0x65D0, + 0x94EE, 0x65D1, 0x94EF, 0x65D3, 0x94F0, 0x65D4, 0x94F1, 0x65D5, 0x94F2, 0x65D8, 0x94F3, 0x65D9, 0x94F4, 0x65DA, 0x94F5, 0x65DB, + 0x94F6, 0x65DC, 0x94F7, 0x65DD, 0x94F8, 0x65DE, 0x94F9, 0x65DF, 0x94FA, 0x65E1, 0x94FB, 0x65E3, 0x94FC, 0x65E4, 0x94FD, 0x65EA, + 0x94FE, 0x65EB, 0x9540, 0x65F2, 0x9541, 0x65F3, 0x9542, 0x65F4, 0x9543, 0x65F5, 0x9544, 0x65F8, 0x9545, 0x65F9, 0x9546, 0x65FB, + 0x9547, 0x65FC, 0x9548, 0x65FD, 0x9549, 0x65FE, 0x954A, 0x65FF, 0x954B, 0x6601, 0x954C, 0x6604, 0x954D, 0x6605, 0x954E, 0x6607, + 0x954F, 0x6608, 0x9550, 0x6609, 0x9551, 0x660B, 0x9552, 0x660D, 0x9553, 0x6610, 0x9554, 0x6611, 0x9555, 0x6612, 0x9556, 0x6616, + 0x9557, 0x6617, 0x9558, 0x6618, 0x9559, 0x661A, 0x955A, 0x661B, 0x955B, 0x661C, 0x955C, 0x661E, 0x955D, 0x6621, 0x955E, 0x6622, + 0x955F, 0x6623, 0x9560, 0x6624, 0x9561, 0x6626, 0x9562, 0x6629, 0x9563, 0x662A, 0x9564, 0x662B, 0x9565, 0x662C, 0x9566, 0x662E, + 0x9567, 0x6630, 0x9568, 0x6632, 0x9569, 0x6633, 0x956A, 0x6637, 0x956B, 0x6638, 0x956C, 0x6639, 0x956D, 0x663A, 0x956E, 0x663B, + 0x956F, 0x663D, 0x9570, 0x663F, 0x9571, 0x6640, 0x9572, 0x6642, 0x9573, 0x6644, 0x9574, 0x6645, 0x9575, 0x6646, 0x9576, 0x6647, + 0x9577, 0x6648, 0x9578, 0x6649, 0x9579, 0x664A, 0x957A, 0x664D, 0x957B, 0x664E, 0x957C, 0x6650, 0x957D, 0x6651, 0x957E, 0x6658, + 0x9580, 0x6659, 0x9581, 0x665B, 0x9582, 0x665C, 0x9583, 0x665D, 0x9584, 0x665E, 0x9585, 0x6660, 0x9586, 0x6662, 0x9587, 0x6663, + 0x9588, 0x6665, 0x9589, 0x6667, 0x958A, 0x6669, 0x958B, 0x666A, 0x958C, 0x666B, 0x958D, 0x666C, 0x958E, 0x666D, 0x958F, 0x6671, + 0x9590, 0x6672, 0x9591, 0x6673, 0x9592, 0x6675, 0x9593, 0x6678, 0x9594, 0x6679, 0x9595, 0x667B, 0x9596, 0x667C, 0x9597, 0x667D, + 0x9598, 0x667F, 0x9599, 0x6680, 0x959A, 0x6681, 0x959B, 0x6683, 0x959C, 0x6685, 0x959D, 0x6686, 0x959E, 0x6688, 0x959F, 0x6689, + 0x95A0, 0x668A, 0x95A1, 0x668B, 0x95A2, 0x668D, 0x95A3, 0x668E, 0x95A4, 0x668F, 0x95A5, 0x6690, 0x95A6, 0x6692, 0x95A7, 0x6693, + 0x95A8, 0x6694, 0x95A9, 0x6695, 0x95AA, 0x6698, 0x95AB, 0x6699, 0x95AC, 0x669A, 0x95AD, 0x669B, 0x95AE, 0x669C, 0x95AF, 0x669E, + 0x95B0, 0x669F, 0x95B1, 0x66A0, 0x95B2, 0x66A1, 0x95B3, 0x66A2, 0x95B4, 0x66A3, 0x95B5, 0x66A4, 0x95B6, 0x66A5, 0x95B7, 0x66A6, + 0x95B8, 0x66A9, 0x95B9, 0x66AA, 0x95BA, 0x66AB, 0x95BB, 0x66AC, 0x95BC, 0x66AD, 0x95BD, 0x66AF, 0x95BE, 0x66B0, 0x95BF, 0x66B1, + 0x95C0, 0x66B2, 0x95C1, 0x66B3, 0x95C2, 0x66B5, 0x95C3, 0x66B6, 0x95C4, 0x66B7, 0x95C5, 0x66B8, 0x95C6, 0x66BA, 0x95C7, 0x66BB, + 0x95C8, 0x66BC, 0x95C9, 0x66BD, 0x95CA, 0x66BF, 0x95CB, 0x66C0, 0x95CC, 0x66C1, 0x95CD, 0x66C2, 0x95CE, 0x66C3, 0x95CF, 0x66C4, + 0x95D0, 0x66C5, 0x95D1, 0x66C6, 0x95D2, 0x66C7, 0x95D3, 0x66C8, 0x95D4, 0x66C9, 0x95D5, 0x66CA, 0x95D6, 0x66CB, 0x95D7, 0x66CC, + 0x95D8, 0x66CD, 0x95D9, 0x66CE, 0x95DA, 0x66CF, 0x95DB, 0x66D0, 0x95DC, 0x66D1, 0x95DD, 0x66D2, 0x95DE, 0x66D3, 0x95DF, 0x66D4, + 0x95E0, 0x66D5, 0x95E1, 0x66D6, 0x95E2, 0x66D7, 0x95E3, 0x66D8, 0x95E4, 0x66DA, 0x95E5, 0x66DE, 0x95E6, 0x66DF, 0x95E7, 0x66E0, + 0x95E8, 0x66E1, 0x95E9, 0x66E2, 0x95EA, 0x66E3, 0x95EB, 0x66E4, 0x95EC, 0x66E5, 0x95ED, 0x66E7, 0x95EE, 0x66E8, 0x95EF, 0x66EA, + 0x95F0, 0x66EB, 0x95F1, 0x66EC, 0x95F2, 0x66ED, 0x95F3, 0x66EE, 0x95F4, 0x66EF, 0x95F5, 0x66F1, 0x95F6, 0x66F5, 0x95F7, 0x66F6, + 0x95F8, 0x66F8, 0x95F9, 0x66FA, 0x95FA, 0x66FB, 0x95FB, 0x66FD, 0x95FC, 0x6701, 0x95FD, 0x6702, 0x95FE, 0x6703, 0x9640, 0x6704, + 0x9641, 0x6705, 0x9642, 0x6706, 0x9643, 0x6707, 0x9644, 0x670C, 0x9645, 0x670E, 0x9646, 0x670F, 0x9647, 0x6711, 0x9648, 0x6712, + 0x9649, 0x6713, 0x964A, 0x6716, 0x964B, 0x6718, 0x964C, 0x6719, 0x964D, 0x671A, 0x964E, 0x671C, 0x964F, 0x671E, 0x9650, 0x6720, + 0x9651, 0x6721, 0x9652, 0x6722, 0x9653, 0x6723, 0x9654, 0x6724, 0x9655, 0x6725, 0x9656, 0x6727, 0x9657, 0x6729, 0x9658, 0x672E, + 0x9659, 0x6730, 0x965A, 0x6732, 0x965B, 0x6733, 0x965C, 0x6736, 0x965D, 0x6737, 0x965E, 0x6738, 0x965F, 0x6739, 0x9660, 0x673B, + 0x9661, 0x673C, 0x9662, 0x673E, 0x9663, 0x673F, 0x9664, 0x6741, 0x9665, 0x6744, 0x9666, 0x6745, 0x9667, 0x6747, 0x9668, 0x674A, + 0x9669, 0x674B, 0x966A, 0x674D, 0x966B, 0x6752, 0x966C, 0x6754, 0x966D, 0x6755, 0x966E, 0x6757, 0x966F, 0x6758, 0x9670, 0x6759, + 0x9671, 0x675A, 0x9672, 0x675B, 0x9673, 0x675D, 0x9674, 0x6762, 0x9675, 0x6763, 0x9676, 0x6764, 0x9677, 0x6766, 0x9678, 0x6767, + 0x9679, 0x676B, 0x967A, 0x676C, 0x967B, 0x676E, 0x967C, 0x6771, 0x967D, 0x6774, 0x967E, 0x6776, 0x9680, 0x6778, 0x9681, 0x6779, + 0x9682, 0x677A, 0x9683, 0x677B, 0x9684, 0x677D, 0x9685, 0x6780, 0x9686, 0x6782, 0x9687, 0x6783, 0x9688, 0x6785, 0x9689, 0x6786, + 0x968A, 0x6788, 0x968B, 0x678A, 0x968C, 0x678C, 0x968D, 0x678D, 0x968E, 0x678E, 0x968F, 0x678F, 0x9690, 0x6791, 0x9691, 0x6792, + 0x9692, 0x6793, 0x9693, 0x6794, 0x9694, 0x6796, 0x9695, 0x6799, 0x9696, 0x679B, 0x9697, 0x679F, 0x9698, 0x67A0, 0x9699, 0x67A1, + 0x969A, 0x67A4, 0x969B, 0x67A6, 0x969C, 0x67A9, 0x969D, 0x67AC, 0x969E, 0x67AE, 0x969F, 0x67B1, 0x96A0, 0x67B2, 0x96A1, 0x67B4, + 0x96A2, 0x67B9, 0x96A3, 0x67BA, 0x96A4, 0x67BB, 0x96A5, 0x67BC, 0x96A6, 0x67BD, 0x96A7, 0x67BE, 0x96A8, 0x67BF, 0x96A9, 0x67C0, + 0x96AA, 0x67C2, 0x96AB, 0x67C5, 0x96AC, 0x67C6, 0x96AD, 0x67C7, 0x96AE, 0x67C8, 0x96AF, 0x67C9, 0x96B0, 0x67CA, 0x96B1, 0x67CB, + 0x96B2, 0x67CC, 0x96B3, 0x67CD, 0x96B4, 0x67CE, 0x96B5, 0x67D5, 0x96B6, 0x67D6, 0x96B7, 0x67D7, 0x96B8, 0x67DB, 0x96B9, 0x67DF, + 0x96BA, 0x67E1, 0x96BB, 0x67E3, 0x96BC, 0x67E4, 0x96BD, 0x67E6, 0x96BE, 0x67E7, 0x96BF, 0x67E8, 0x96C0, 0x67EA, 0x96C1, 0x67EB, + 0x96C2, 0x67ED, 0x96C3, 0x67EE, 0x96C4, 0x67F2, 0x96C5, 0x67F5, 0x96C6, 0x67F6, 0x96C7, 0x67F7, 0x96C8, 0x67F8, 0x96C9, 0x67F9, + 0x96CA, 0x67FA, 0x96CB, 0x67FB, 0x96CC, 0x67FC, 0x96CD, 0x67FE, 0x96CE, 0x6801, 0x96CF, 0x6802, 0x96D0, 0x6803, 0x96D1, 0x6804, + 0x96D2, 0x6806, 0x96D3, 0x680D, 0x96D4, 0x6810, 0x96D5, 0x6812, 0x96D6, 0x6814, 0x96D7, 0x6815, 0x96D8, 0x6818, 0x96D9, 0x6819, + 0x96DA, 0x681A, 0x96DB, 0x681B, 0x96DC, 0x681C, 0x96DD, 0x681E, 0x96DE, 0x681F, 0x96DF, 0x6820, 0x96E0, 0x6822, 0x96E1, 0x6823, + 0x96E2, 0x6824, 0x96E3, 0x6825, 0x96E4, 0x6826, 0x96E5, 0x6827, 0x96E6, 0x6828, 0x96E7, 0x682B, 0x96E8, 0x682C, 0x96E9, 0x682D, + 0x96EA, 0x682E, 0x96EB, 0x682F, 0x96EC, 0x6830, 0x96ED, 0x6831, 0x96EE, 0x6834, 0x96EF, 0x6835, 0x96F0, 0x6836, 0x96F1, 0x683A, + 0x96F2, 0x683B, 0x96F3, 0x683F, 0x96F4, 0x6847, 0x96F5, 0x684B, 0x96F6, 0x684D, 0x96F7, 0x684F, 0x96F8, 0x6852, 0x96F9, 0x6856, + 0x96FA, 0x6857, 0x96FB, 0x6858, 0x96FC, 0x6859, 0x96FD, 0x685A, 0x96FE, 0x685B, 0x9740, 0x685C, 0x9741, 0x685D, 0x9742, 0x685E, + 0x9743, 0x685F, 0x9744, 0x686A, 0x9745, 0x686C, 0x9746, 0x686D, 0x9747, 0x686E, 0x9748, 0x686F, 0x9749, 0x6870, 0x974A, 0x6871, + 0x974B, 0x6872, 0x974C, 0x6873, 0x974D, 0x6875, 0x974E, 0x6878, 0x974F, 0x6879, 0x9750, 0x687A, 0x9751, 0x687B, 0x9752, 0x687C, + 0x9753, 0x687D, 0x9754, 0x687E, 0x9755, 0x687F, 0x9756, 0x6880, 0x9757, 0x6882, 0x9758, 0x6884, 0x9759, 0x6887, 0x975A, 0x6888, + 0x975B, 0x6889, 0x975C, 0x688A, 0x975D, 0x688B, 0x975E, 0x688C, 0x975F, 0x688D, 0x9760, 0x688E, 0x9761, 0x6890, 0x9762, 0x6891, + 0x9763, 0x6892, 0x9764, 0x6894, 0x9765, 0x6895, 0x9766, 0x6896, 0x9767, 0x6898, 0x9768, 0x6899, 0x9769, 0x689A, 0x976A, 0x689B, + 0x976B, 0x689C, 0x976C, 0x689D, 0x976D, 0x689E, 0x976E, 0x689F, 0x976F, 0x68A0, 0x9770, 0x68A1, 0x9771, 0x68A3, 0x9772, 0x68A4, + 0x9773, 0x68A5, 0x9774, 0x68A9, 0x9775, 0x68AA, 0x9776, 0x68AB, 0x9777, 0x68AC, 0x9778, 0x68AE, 0x9779, 0x68B1, 0x977A, 0x68B2, + 0x977B, 0x68B4, 0x977C, 0x68B6, 0x977D, 0x68B7, 0x977E, 0x68B8, 0x9780, 0x68B9, 0x9781, 0x68BA, 0x9782, 0x68BB, 0x9783, 0x68BC, + 0x9784, 0x68BD, 0x9785, 0x68BE, 0x9786, 0x68BF, 0x9787, 0x68C1, 0x9788, 0x68C3, 0x9789, 0x68C4, 0x978A, 0x68C5, 0x978B, 0x68C6, + 0x978C, 0x68C7, 0x978D, 0x68C8, 0x978E, 0x68CA, 0x978F, 0x68CC, 0x9790, 0x68CE, 0x9791, 0x68CF, 0x9792, 0x68D0, 0x9793, 0x68D1, + 0x9794, 0x68D3, 0x9795, 0x68D4, 0x9796, 0x68D6, 0x9797, 0x68D7, 0x9798, 0x68D9, 0x9799, 0x68DB, 0x979A, 0x68DC, 0x979B, 0x68DD, + 0x979C, 0x68DE, 0x979D, 0x68DF, 0x979E, 0x68E1, 0x979F, 0x68E2, 0x97A0, 0x68E4, 0x97A1, 0x68E5, 0x97A2, 0x68E6, 0x97A3, 0x68E7, + 0x97A4, 0x68E8, 0x97A5, 0x68E9, 0x97A6, 0x68EA, 0x97A7, 0x68EB, 0x97A8, 0x68EC, 0x97A9, 0x68ED, 0x97AA, 0x68EF, 0x97AB, 0x68F2, + 0x97AC, 0x68F3, 0x97AD, 0x68F4, 0x97AE, 0x68F6, 0x97AF, 0x68F7, 0x97B0, 0x68F8, 0x97B1, 0x68FB, 0x97B2, 0x68FD, 0x97B3, 0x68FE, + 0x97B4, 0x68FF, 0x97B5, 0x6900, 0x97B6, 0x6902, 0x97B7, 0x6903, 0x97B8, 0x6904, 0x97B9, 0x6906, 0x97BA, 0x6907, 0x97BB, 0x6908, + 0x97BC, 0x6909, 0x97BD, 0x690A, 0x97BE, 0x690C, 0x97BF, 0x690F, 0x97C0, 0x6911, 0x97C1, 0x6913, 0x97C2, 0x6914, 0x97C3, 0x6915, + 0x97C4, 0x6916, 0x97C5, 0x6917, 0x97C6, 0x6918, 0x97C7, 0x6919, 0x97C8, 0x691A, 0x97C9, 0x691B, 0x97CA, 0x691C, 0x97CB, 0x691D, + 0x97CC, 0x691E, 0x97CD, 0x6921, 0x97CE, 0x6922, 0x97CF, 0x6923, 0x97D0, 0x6925, 0x97D1, 0x6926, 0x97D2, 0x6927, 0x97D3, 0x6928, + 0x97D4, 0x6929, 0x97D5, 0x692A, 0x97D6, 0x692B, 0x97D7, 0x692C, 0x97D8, 0x692E, 0x97D9, 0x692F, 0x97DA, 0x6931, 0x97DB, 0x6932, + 0x97DC, 0x6933, 0x97DD, 0x6935, 0x97DE, 0x6936, 0x97DF, 0x6937, 0x97E0, 0x6938, 0x97E1, 0x693A, 0x97E2, 0x693B, 0x97E3, 0x693C, + 0x97E4, 0x693E, 0x97E5, 0x6940, 0x97E6, 0x6941, 0x97E7, 0x6943, 0x97E8, 0x6944, 0x97E9, 0x6945, 0x97EA, 0x6946, 0x97EB, 0x6947, + 0x97EC, 0x6948, 0x97ED, 0x6949, 0x97EE, 0x694A, 0x97EF, 0x694B, 0x97F0, 0x694C, 0x97F1, 0x694D, 0x97F2, 0x694E, 0x97F3, 0x694F, + 0x97F4, 0x6950, 0x97F5, 0x6951, 0x97F6, 0x6952, 0x97F7, 0x6953, 0x97F8, 0x6955, 0x97F9, 0x6956, 0x97FA, 0x6958, 0x97FB, 0x6959, + 0x97FC, 0x695B, 0x97FD, 0x695C, 0x97FE, 0x695F, 0x9840, 0x6961, 0x9841, 0x6962, 0x9842, 0x6964, 0x9843, 0x6965, 0x9844, 0x6967, + 0x9845, 0x6968, 0x9846, 0x6969, 0x9847, 0x696A, 0x9848, 0x696C, 0x9849, 0x696D, 0x984A, 0x696F, 0x984B, 0x6970, 0x984C, 0x6972, + 0x984D, 0x6973, 0x984E, 0x6974, 0x984F, 0x6975, 0x9850, 0x6976, 0x9851, 0x697A, 0x9852, 0x697B, 0x9853, 0x697D, 0x9854, 0x697E, + 0x9855, 0x697F, 0x9856, 0x6981, 0x9857, 0x6983, 0x9858, 0x6985, 0x9859, 0x698A, 0x985A, 0x698B, 0x985B, 0x698C, 0x985C, 0x698E, + 0x985D, 0x698F, 0x985E, 0x6990, 0x985F, 0x6991, 0x9860, 0x6992, 0x9861, 0x6993, 0x9862, 0x6996, 0x9863, 0x6997, 0x9864, 0x6999, + 0x9865, 0x699A, 0x9866, 0x699D, 0x9867, 0x699E, 0x9868, 0x699F, 0x9869, 0x69A0, 0x986A, 0x69A1, 0x986B, 0x69A2, 0x986C, 0x69A3, + 0x986D, 0x69A4, 0x986E, 0x69A5, 0x986F, 0x69A6, 0x9870, 0x69A9, 0x9871, 0x69AA, 0x9872, 0x69AC, 0x9873, 0x69AE, 0x9874, 0x69AF, + 0x9875, 0x69B0, 0x9876, 0x69B2, 0x9877, 0x69B3, 0x9878, 0x69B5, 0x9879, 0x69B6, 0x987A, 0x69B8, 0x987B, 0x69B9, 0x987C, 0x69BA, + 0x987D, 0x69BC, 0x987E, 0x69BD, 0x9880, 0x69BE, 0x9881, 0x69BF, 0x9882, 0x69C0, 0x9883, 0x69C2, 0x9884, 0x69C3, 0x9885, 0x69C4, + 0x9886, 0x69C5, 0x9887, 0x69C6, 0x9888, 0x69C7, 0x9889, 0x69C8, 0x988A, 0x69C9, 0x988B, 0x69CB, 0x988C, 0x69CD, 0x988D, 0x69CF, + 0x988E, 0x69D1, 0x988F, 0x69D2, 0x9890, 0x69D3, 0x9891, 0x69D5, 0x9892, 0x69D6, 0x9893, 0x69D7, 0x9894, 0x69D8, 0x9895, 0x69D9, + 0x9896, 0x69DA, 0x9897, 0x69DC, 0x9898, 0x69DD, 0x9899, 0x69DE, 0x989A, 0x69E1, 0x989B, 0x69E2, 0x989C, 0x69E3, 0x989D, 0x69E4, + 0x989E, 0x69E5, 0x989F, 0x69E6, 0x98A0, 0x69E7, 0x98A1, 0x69E8, 0x98A2, 0x69E9, 0x98A3, 0x69EA, 0x98A4, 0x69EB, 0x98A5, 0x69EC, + 0x98A6, 0x69EE, 0x98A7, 0x69EF, 0x98A8, 0x69F0, 0x98A9, 0x69F1, 0x98AA, 0x69F3, 0x98AB, 0x69F4, 0x98AC, 0x69F5, 0x98AD, 0x69F6, + 0x98AE, 0x69F7, 0x98AF, 0x69F8, 0x98B0, 0x69F9, 0x98B1, 0x69FA, 0x98B2, 0x69FB, 0x98B3, 0x69FC, 0x98B4, 0x69FE, 0x98B5, 0x6A00, + 0x98B6, 0x6A01, 0x98B7, 0x6A02, 0x98B8, 0x6A03, 0x98B9, 0x6A04, 0x98BA, 0x6A05, 0x98BB, 0x6A06, 0x98BC, 0x6A07, 0x98BD, 0x6A08, + 0x98BE, 0x6A09, 0x98BF, 0x6A0B, 0x98C0, 0x6A0C, 0x98C1, 0x6A0D, 0x98C2, 0x6A0E, 0x98C3, 0x6A0F, 0x98C4, 0x6A10, 0x98C5, 0x6A11, + 0x98C6, 0x6A12, 0x98C7, 0x6A13, 0x98C8, 0x6A14, 0x98C9, 0x6A15, 0x98CA, 0x6A16, 0x98CB, 0x6A19, 0x98CC, 0x6A1A, 0x98CD, 0x6A1B, + 0x98CE, 0x6A1C, 0x98CF, 0x6A1D, 0x98D0, 0x6A1E, 0x98D1, 0x6A20, 0x98D2, 0x6A22, 0x98D3, 0x6A23, 0x98D4, 0x6A24, 0x98D5, 0x6A25, + 0x98D6, 0x6A26, 0x98D7, 0x6A27, 0x98D8, 0x6A29, 0x98D9, 0x6A2B, 0x98DA, 0x6A2C, 0x98DB, 0x6A2D, 0x98DC, 0x6A2E, 0x98DD, 0x6A30, + 0x98DE, 0x6A32, 0x98DF, 0x6A33, 0x98E0, 0x6A34, 0x98E1, 0x6A36, 0x98E2, 0x6A37, 0x98E3, 0x6A38, 0x98E4, 0x6A39, 0x98E5, 0x6A3A, + 0x98E6, 0x6A3B, 0x98E7, 0x6A3C, 0x98E8, 0x6A3F, 0x98E9, 0x6A40, 0x98EA, 0x6A41, 0x98EB, 0x6A42, 0x98EC, 0x6A43, 0x98ED, 0x6A45, + 0x98EE, 0x6A46, 0x98EF, 0x6A48, 0x98F0, 0x6A49, 0x98F1, 0x6A4A, 0x98F2, 0x6A4B, 0x98F3, 0x6A4C, 0x98F4, 0x6A4D, 0x98F5, 0x6A4E, + 0x98F6, 0x6A4F, 0x98F7, 0x6A51, 0x98F8, 0x6A52, 0x98F9, 0x6A53, 0x98FA, 0x6A54, 0x98FB, 0x6A55, 0x98FC, 0x6A56, 0x98FD, 0x6A57, + 0x98FE, 0x6A5A, 0x9940, 0x6A5C, 0x9941, 0x6A5D, 0x9942, 0x6A5E, 0x9943, 0x6A5F, 0x9944, 0x6A60, 0x9945, 0x6A62, 0x9946, 0x6A63, + 0x9947, 0x6A64, 0x9948, 0x6A66, 0x9949, 0x6A67, 0x994A, 0x6A68, 0x994B, 0x6A69, 0x994C, 0x6A6A, 0x994D, 0x6A6B, 0x994E, 0x6A6C, + 0x994F, 0x6A6D, 0x9950, 0x6A6E, 0x9951, 0x6A6F, 0x9952, 0x6A70, 0x9953, 0x6A72, 0x9954, 0x6A73, 0x9955, 0x6A74, 0x9956, 0x6A75, + 0x9957, 0x6A76, 0x9958, 0x6A77, 0x9959, 0x6A78, 0x995A, 0x6A7A, 0x995B, 0x6A7B, 0x995C, 0x6A7D, 0x995D, 0x6A7E, 0x995E, 0x6A7F, + 0x995F, 0x6A81, 0x9960, 0x6A82, 0x9961, 0x6A83, 0x9962, 0x6A85, 0x9963, 0x6A86, 0x9964, 0x6A87, 0x9965, 0x6A88, 0x9966, 0x6A89, + 0x9967, 0x6A8A, 0x9968, 0x6A8B, 0x9969, 0x6A8C, 0x996A, 0x6A8D, 0x996B, 0x6A8F, 0x996C, 0x6A92, 0x996D, 0x6A93, 0x996E, 0x6A94, + 0x996F, 0x6A95, 0x9970, 0x6A96, 0x9971, 0x6A98, 0x9972, 0x6A99, 0x9973, 0x6A9A, 0x9974, 0x6A9B, 0x9975, 0x6A9C, 0x9976, 0x6A9D, + 0x9977, 0x6A9E, 0x9978, 0x6A9F, 0x9979, 0x6AA1, 0x997A, 0x6AA2, 0x997B, 0x6AA3, 0x997C, 0x6AA4, 0x997D, 0x6AA5, 0x997E, 0x6AA6, + 0x9980, 0x6AA7, 0x9981, 0x6AA8, 0x9982, 0x6AAA, 0x9983, 0x6AAD, 0x9984, 0x6AAE, 0x9985, 0x6AAF, 0x9986, 0x6AB0, 0x9987, 0x6AB1, + 0x9988, 0x6AB2, 0x9989, 0x6AB3, 0x998A, 0x6AB4, 0x998B, 0x6AB5, 0x998C, 0x6AB6, 0x998D, 0x6AB7, 0x998E, 0x6AB8, 0x998F, 0x6AB9, + 0x9990, 0x6ABA, 0x9991, 0x6ABB, 0x9992, 0x6ABC, 0x9993, 0x6ABD, 0x9994, 0x6ABE, 0x9995, 0x6ABF, 0x9996, 0x6AC0, 0x9997, 0x6AC1, + 0x9998, 0x6AC2, 0x9999, 0x6AC3, 0x999A, 0x6AC4, 0x999B, 0x6AC5, 0x999C, 0x6AC6, 0x999D, 0x6AC7, 0x999E, 0x6AC8, 0x999F, 0x6AC9, + 0x99A0, 0x6ACA, 0x99A1, 0x6ACB, 0x99A2, 0x6ACC, 0x99A3, 0x6ACD, 0x99A4, 0x6ACE, 0x99A5, 0x6ACF, 0x99A6, 0x6AD0, 0x99A7, 0x6AD1, + 0x99A8, 0x6AD2, 0x99A9, 0x6AD3, 0x99AA, 0x6AD4, 0x99AB, 0x6AD5, 0x99AC, 0x6AD6, 0x99AD, 0x6AD7, 0x99AE, 0x6AD8, 0x99AF, 0x6AD9, + 0x99B0, 0x6ADA, 0x99B1, 0x6ADB, 0x99B2, 0x6ADC, 0x99B3, 0x6ADD, 0x99B4, 0x6ADE, 0x99B5, 0x6ADF, 0x99B6, 0x6AE0, 0x99B7, 0x6AE1, + 0x99B8, 0x6AE2, 0x99B9, 0x6AE3, 0x99BA, 0x6AE4, 0x99BB, 0x6AE5, 0x99BC, 0x6AE6, 0x99BD, 0x6AE7, 0x99BE, 0x6AE8, 0x99BF, 0x6AE9, + 0x99C0, 0x6AEA, 0x99C1, 0x6AEB, 0x99C2, 0x6AEC, 0x99C3, 0x6AED, 0x99C4, 0x6AEE, 0x99C5, 0x6AEF, 0x99C6, 0x6AF0, 0x99C7, 0x6AF1, + 0x99C8, 0x6AF2, 0x99C9, 0x6AF3, 0x99CA, 0x6AF4, 0x99CB, 0x6AF5, 0x99CC, 0x6AF6, 0x99CD, 0x6AF7, 0x99CE, 0x6AF8, 0x99CF, 0x6AF9, + 0x99D0, 0x6AFA, 0x99D1, 0x6AFB, 0x99D2, 0x6AFC, 0x99D3, 0x6AFD, 0x99D4, 0x6AFE, 0x99D5, 0x6AFF, 0x99D6, 0x6B00, 0x99D7, 0x6B01, + 0x99D8, 0x6B02, 0x99D9, 0x6B03, 0x99DA, 0x6B04, 0x99DB, 0x6B05, 0x99DC, 0x6B06, 0x99DD, 0x6B07, 0x99DE, 0x6B08, 0x99DF, 0x6B09, + 0x99E0, 0x6B0A, 0x99E1, 0x6B0B, 0x99E2, 0x6B0C, 0x99E3, 0x6B0D, 0x99E4, 0x6B0E, 0x99E5, 0x6B0F, 0x99E6, 0x6B10, 0x99E7, 0x6B11, + 0x99E8, 0x6B12, 0x99E9, 0x6B13, 0x99EA, 0x6B14, 0x99EB, 0x6B15, 0x99EC, 0x6B16, 0x99ED, 0x6B17, 0x99EE, 0x6B18, 0x99EF, 0x6B19, + 0x99F0, 0x6B1A, 0x99F1, 0x6B1B, 0x99F2, 0x6B1C, 0x99F3, 0x6B1D, 0x99F4, 0x6B1E, 0x99F5, 0x6B1F, 0x99F6, 0x6B25, 0x99F7, 0x6B26, + 0x99F8, 0x6B28, 0x99F9, 0x6B29, 0x99FA, 0x6B2A, 0x99FB, 0x6B2B, 0x99FC, 0x6B2C, 0x99FD, 0x6B2D, 0x99FE, 0x6B2E, 0x9A40, 0x6B2F, + 0x9A41, 0x6B30, 0x9A42, 0x6B31, 0x9A43, 0x6B33, 0x9A44, 0x6B34, 0x9A45, 0x6B35, 0x9A46, 0x6B36, 0x9A47, 0x6B38, 0x9A48, 0x6B3B, + 0x9A49, 0x6B3C, 0x9A4A, 0x6B3D, 0x9A4B, 0x6B3F, 0x9A4C, 0x6B40, 0x9A4D, 0x6B41, 0x9A4E, 0x6B42, 0x9A4F, 0x6B44, 0x9A50, 0x6B45, + 0x9A51, 0x6B48, 0x9A52, 0x6B4A, 0x9A53, 0x6B4B, 0x9A54, 0x6B4D, 0x9A55, 0x6B4E, 0x9A56, 0x6B4F, 0x9A57, 0x6B50, 0x9A58, 0x6B51, + 0x9A59, 0x6B52, 0x9A5A, 0x6B53, 0x9A5B, 0x6B54, 0x9A5C, 0x6B55, 0x9A5D, 0x6B56, 0x9A5E, 0x6B57, 0x9A5F, 0x6B58, 0x9A60, 0x6B5A, + 0x9A61, 0x6B5B, 0x9A62, 0x6B5C, 0x9A63, 0x6B5D, 0x9A64, 0x6B5E, 0x9A65, 0x6B5F, 0x9A66, 0x6B60, 0x9A67, 0x6B61, 0x9A68, 0x6B68, + 0x9A69, 0x6B69, 0x9A6A, 0x6B6B, 0x9A6B, 0x6B6C, 0x9A6C, 0x6B6D, 0x9A6D, 0x6B6E, 0x9A6E, 0x6B6F, 0x9A6F, 0x6B70, 0x9A70, 0x6B71, + 0x9A71, 0x6B72, 0x9A72, 0x6B73, 0x9A73, 0x6B74, 0x9A74, 0x6B75, 0x9A75, 0x6B76, 0x9A76, 0x6B77, 0x9A77, 0x6B78, 0x9A78, 0x6B7A, + 0x9A79, 0x6B7D, 0x9A7A, 0x6B7E, 0x9A7B, 0x6B7F, 0x9A7C, 0x6B80, 0x9A7D, 0x6B85, 0x9A7E, 0x6B88, 0x9A80, 0x6B8C, 0x9A81, 0x6B8E, + 0x9A82, 0x6B8F, 0x9A83, 0x6B90, 0x9A84, 0x6B91, 0x9A85, 0x6B94, 0x9A86, 0x6B95, 0x9A87, 0x6B97, 0x9A88, 0x6B98, 0x9A89, 0x6B99, + 0x9A8A, 0x6B9C, 0x9A8B, 0x6B9D, 0x9A8C, 0x6B9E, 0x9A8D, 0x6B9F, 0x9A8E, 0x6BA0, 0x9A8F, 0x6BA2, 0x9A90, 0x6BA3, 0x9A91, 0x6BA4, + 0x9A92, 0x6BA5, 0x9A93, 0x6BA6, 0x9A94, 0x6BA7, 0x9A95, 0x6BA8, 0x9A96, 0x6BA9, 0x9A97, 0x6BAB, 0x9A98, 0x6BAC, 0x9A99, 0x6BAD, + 0x9A9A, 0x6BAE, 0x9A9B, 0x6BAF, 0x9A9C, 0x6BB0, 0x9A9D, 0x6BB1, 0x9A9E, 0x6BB2, 0x9A9F, 0x6BB6, 0x9AA0, 0x6BB8, 0x9AA1, 0x6BB9, + 0x9AA2, 0x6BBA, 0x9AA3, 0x6BBB, 0x9AA4, 0x6BBC, 0x9AA5, 0x6BBD, 0x9AA6, 0x6BBE, 0x9AA7, 0x6BC0, 0x9AA8, 0x6BC3, 0x9AA9, 0x6BC4, + 0x9AAA, 0x6BC6, 0x9AAB, 0x6BC7, 0x9AAC, 0x6BC8, 0x9AAD, 0x6BC9, 0x9AAE, 0x6BCA, 0x9AAF, 0x6BCC, 0x9AB0, 0x6BCE, 0x9AB1, 0x6BD0, + 0x9AB2, 0x6BD1, 0x9AB3, 0x6BD8, 0x9AB4, 0x6BDA, 0x9AB5, 0x6BDC, 0x9AB6, 0x6BDD, 0x9AB7, 0x6BDE, 0x9AB8, 0x6BDF, 0x9AB9, 0x6BE0, + 0x9ABA, 0x6BE2, 0x9ABB, 0x6BE3, 0x9ABC, 0x6BE4, 0x9ABD, 0x6BE5, 0x9ABE, 0x6BE6, 0x9ABF, 0x6BE7, 0x9AC0, 0x6BE8, 0x9AC1, 0x6BE9, + 0x9AC2, 0x6BEC, 0x9AC3, 0x6BED, 0x9AC4, 0x6BEE, 0x9AC5, 0x6BF0, 0x9AC6, 0x6BF1, 0x9AC7, 0x6BF2, 0x9AC8, 0x6BF4, 0x9AC9, 0x6BF6, + 0x9ACA, 0x6BF7, 0x9ACB, 0x6BF8, 0x9ACC, 0x6BFA, 0x9ACD, 0x6BFB, 0x9ACE, 0x6BFC, 0x9ACF, 0x6BFE, 0x9AD0, 0x6BFF, 0x9AD1, 0x6C00, + 0x9AD2, 0x6C01, 0x9AD3, 0x6C02, 0x9AD4, 0x6C03, 0x9AD5, 0x6C04, 0x9AD6, 0x6C08, 0x9AD7, 0x6C09, 0x9AD8, 0x6C0A, 0x9AD9, 0x6C0B, + 0x9ADA, 0x6C0C, 0x9ADB, 0x6C0E, 0x9ADC, 0x6C12, 0x9ADD, 0x6C17, 0x9ADE, 0x6C1C, 0x9ADF, 0x6C1D, 0x9AE0, 0x6C1E, 0x9AE1, 0x6C20, + 0x9AE2, 0x6C23, 0x9AE3, 0x6C25, 0x9AE4, 0x6C2B, 0x9AE5, 0x6C2C, 0x9AE6, 0x6C2D, 0x9AE7, 0x6C31, 0x9AE8, 0x6C33, 0x9AE9, 0x6C36, + 0x9AEA, 0x6C37, 0x9AEB, 0x6C39, 0x9AEC, 0x6C3A, 0x9AED, 0x6C3B, 0x9AEE, 0x6C3C, 0x9AEF, 0x6C3E, 0x9AF0, 0x6C3F, 0x9AF1, 0x6C43, + 0x9AF2, 0x6C44, 0x9AF3, 0x6C45, 0x9AF4, 0x6C48, 0x9AF5, 0x6C4B, 0x9AF6, 0x6C4C, 0x9AF7, 0x6C4D, 0x9AF8, 0x6C4E, 0x9AF9, 0x6C4F, + 0x9AFA, 0x6C51, 0x9AFB, 0x6C52, 0x9AFC, 0x6C53, 0x9AFD, 0x6C56, 0x9AFE, 0x6C58, 0x9B40, 0x6C59, 0x9B41, 0x6C5A, 0x9B42, 0x6C62, + 0x9B43, 0x6C63, 0x9B44, 0x6C65, 0x9B45, 0x6C66, 0x9B46, 0x6C67, 0x9B47, 0x6C6B, 0x9B48, 0x6C6C, 0x9B49, 0x6C6D, 0x9B4A, 0x6C6E, + 0x9B4B, 0x6C6F, 0x9B4C, 0x6C71, 0x9B4D, 0x6C73, 0x9B4E, 0x6C75, 0x9B4F, 0x6C77, 0x9B50, 0x6C78, 0x9B51, 0x6C7A, 0x9B52, 0x6C7B, + 0x9B53, 0x6C7C, 0x9B54, 0x6C7F, 0x9B55, 0x6C80, 0x9B56, 0x6C84, 0x9B57, 0x6C87, 0x9B58, 0x6C8A, 0x9B59, 0x6C8B, 0x9B5A, 0x6C8D, + 0x9B5B, 0x6C8E, 0x9B5C, 0x6C91, 0x9B5D, 0x6C92, 0x9B5E, 0x6C95, 0x9B5F, 0x6C96, 0x9B60, 0x6C97, 0x9B61, 0x6C98, 0x9B62, 0x6C9A, + 0x9B63, 0x6C9C, 0x9B64, 0x6C9D, 0x9B65, 0x6C9E, 0x9B66, 0x6CA0, 0x9B67, 0x6CA2, 0x9B68, 0x6CA8, 0x9B69, 0x6CAC, 0x9B6A, 0x6CAF, + 0x9B6B, 0x6CB0, 0x9B6C, 0x6CB4, 0x9B6D, 0x6CB5, 0x9B6E, 0x6CB6, 0x9B6F, 0x6CB7, 0x9B70, 0x6CBA, 0x9B71, 0x6CC0, 0x9B72, 0x6CC1, + 0x9B73, 0x6CC2, 0x9B74, 0x6CC3, 0x9B75, 0x6CC6, 0x9B76, 0x6CC7, 0x9B77, 0x6CC8, 0x9B78, 0x6CCB, 0x9B79, 0x6CCD, 0x9B7A, 0x6CCE, + 0x9B7B, 0x6CCF, 0x9B7C, 0x6CD1, 0x9B7D, 0x6CD2, 0x9B7E, 0x6CD8, 0x9B80, 0x6CD9, 0x9B81, 0x6CDA, 0x9B82, 0x6CDC, 0x9B83, 0x6CDD, + 0x9B84, 0x6CDF, 0x9B85, 0x6CE4, 0x9B86, 0x6CE6, 0x9B87, 0x6CE7, 0x9B88, 0x6CE9, 0x9B89, 0x6CEC, 0x9B8A, 0x6CED, 0x9B8B, 0x6CF2, + 0x9B8C, 0x6CF4, 0x9B8D, 0x6CF9, 0x9B8E, 0x6CFF, 0x9B8F, 0x6D00, 0x9B90, 0x6D02, 0x9B91, 0x6D03, 0x9B92, 0x6D05, 0x9B93, 0x6D06, + 0x9B94, 0x6D08, 0x9B95, 0x6D09, 0x9B96, 0x6D0A, 0x9B97, 0x6D0D, 0x9B98, 0x6D0F, 0x9B99, 0x6D10, 0x9B9A, 0x6D11, 0x9B9B, 0x6D13, + 0x9B9C, 0x6D14, 0x9B9D, 0x6D15, 0x9B9E, 0x6D16, 0x9B9F, 0x6D18, 0x9BA0, 0x6D1C, 0x9BA1, 0x6D1D, 0x9BA2, 0x6D1F, 0x9BA3, 0x6D20, + 0x9BA4, 0x6D21, 0x9BA5, 0x6D22, 0x9BA6, 0x6D23, 0x9BA7, 0x6D24, 0x9BA8, 0x6D26, 0x9BA9, 0x6D28, 0x9BAA, 0x6D29, 0x9BAB, 0x6D2C, + 0x9BAC, 0x6D2D, 0x9BAD, 0x6D2F, 0x9BAE, 0x6D30, 0x9BAF, 0x6D34, 0x9BB0, 0x6D36, 0x9BB1, 0x6D37, 0x9BB2, 0x6D38, 0x9BB3, 0x6D3A, + 0x9BB4, 0x6D3F, 0x9BB5, 0x6D40, 0x9BB6, 0x6D42, 0x9BB7, 0x6D44, 0x9BB8, 0x6D49, 0x9BB9, 0x6D4C, 0x9BBA, 0x6D50, 0x9BBB, 0x6D55, + 0x9BBC, 0x6D56, 0x9BBD, 0x6D57, 0x9BBE, 0x6D58, 0x9BBF, 0x6D5B, 0x9BC0, 0x6D5D, 0x9BC1, 0x6D5F, 0x9BC2, 0x6D61, 0x9BC3, 0x6D62, + 0x9BC4, 0x6D64, 0x9BC5, 0x6D65, 0x9BC6, 0x6D67, 0x9BC7, 0x6D68, 0x9BC8, 0x6D6B, 0x9BC9, 0x6D6C, 0x9BCA, 0x6D6D, 0x9BCB, 0x6D70, + 0x9BCC, 0x6D71, 0x9BCD, 0x6D72, 0x9BCE, 0x6D73, 0x9BCF, 0x6D75, 0x9BD0, 0x6D76, 0x9BD1, 0x6D79, 0x9BD2, 0x6D7A, 0x9BD3, 0x6D7B, + 0x9BD4, 0x6D7D, 0x9BD5, 0x6D7E, 0x9BD6, 0x6D7F, 0x9BD7, 0x6D80, 0x9BD8, 0x6D81, 0x9BD9, 0x6D83, 0x9BDA, 0x6D84, 0x9BDB, 0x6D86, + 0x9BDC, 0x6D87, 0x9BDD, 0x6D8A, 0x9BDE, 0x6D8B, 0x9BDF, 0x6D8D, 0x9BE0, 0x6D8F, 0x9BE1, 0x6D90, 0x9BE2, 0x6D92, 0x9BE3, 0x6D96, + 0x9BE4, 0x6D97, 0x9BE5, 0x6D98, 0x9BE6, 0x6D99, 0x9BE7, 0x6D9A, 0x9BE8, 0x6D9C, 0x9BE9, 0x6DA2, 0x9BEA, 0x6DA5, 0x9BEB, 0x6DAC, + 0x9BEC, 0x6DAD, 0x9BED, 0x6DB0, 0x9BEE, 0x6DB1, 0x9BEF, 0x6DB3, 0x9BF0, 0x6DB4, 0x9BF1, 0x6DB6, 0x9BF2, 0x6DB7, 0x9BF3, 0x6DB9, + 0x9BF4, 0x6DBA, 0x9BF5, 0x6DBB, 0x9BF6, 0x6DBC, 0x9BF7, 0x6DBD, 0x9BF8, 0x6DBE, 0x9BF9, 0x6DC1, 0x9BFA, 0x6DC2, 0x9BFB, 0x6DC3, + 0x9BFC, 0x6DC8, 0x9BFD, 0x6DC9, 0x9BFE, 0x6DCA, 0x9C40, 0x6DCD, 0x9C41, 0x6DCE, 0x9C42, 0x6DCF, 0x9C43, 0x6DD0, 0x9C44, 0x6DD2, + 0x9C45, 0x6DD3, 0x9C46, 0x6DD4, 0x9C47, 0x6DD5, 0x9C48, 0x6DD7, 0x9C49, 0x6DDA, 0x9C4A, 0x6DDB, 0x9C4B, 0x6DDC, 0x9C4C, 0x6DDF, + 0x9C4D, 0x6DE2, 0x9C4E, 0x6DE3, 0x9C4F, 0x6DE5, 0x9C50, 0x6DE7, 0x9C51, 0x6DE8, 0x9C52, 0x6DE9, 0x9C53, 0x6DEA, 0x9C54, 0x6DED, + 0x9C55, 0x6DEF, 0x9C56, 0x6DF0, 0x9C57, 0x6DF2, 0x9C58, 0x6DF4, 0x9C59, 0x6DF5, 0x9C5A, 0x6DF6, 0x9C5B, 0x6DF8, 0x9C5C, 0x6DFA, + 0x9C5D, 0x6DFD, 0x9C5E, 0x6DFE, 0x9C5F, 0x6DFF, 0x9C60, 0x6E00, 0x9C61, 0x6E01, 0x9C62, 0x6E02, 0x9C63, 0x6E03, 0x9C64, 0x6E04, + 0x9C65, 0x6E06, 0x9C66, 0x6E07, 0x9C67, 0x6E08, 0x9C68, 0x6E09, 0x9C69, 0x6E0B, 0x9C6A, 0x6E0F, 0x9C6B, 0x6E12, 0x9C6C, 0x6E13, + 0x9C6D, 0x6E15, 0x9C6E, 0x6E18, 0x9C6F, 0x6E19, 0x9C70, 0x6E1B, 0x9C71, 0x6E1C, 0x9C72, 0x6E1E, 0x9C73, 0x6E1F, 0x9C74, 0x6E22, + 0x9C75, 0x6E26, 0x9C76, 0x6E27, 0x9C77, 0x6E28, 0x9C78, 0x6E2A, 0x9C79, 0x6E2C, 0x9C7A, 0x6E2E, 0x9C7B, 0x6E30, 0x9C7C, 0x6E31, + 0x9C7D, 0x6E33, 0x9C7E, 0x6E35, 0x9C80, 0x6E36, 0x9C81, 0x6E37, 0x9C82, 0x6E39, 0x9C83, 0x6E3B, 0x9C84, 0x6E3C, 0x9C85, 0x6E3D, + 0x9C86, 0x6E3E, 0x9C87, 0x6E3F, 0x9C88, 0x6E40, 0x9C89, 0x6E41, 0x9C8A, 0x6E42, 0x9C8B, 0x6E45, 0x9C8C, 0x6E46, 0x9C8D, 0x6E47, + 0x9C8E, 0x6E48, 0x9C8F, 0x6E49, 0x9C90, 0x6E4A, 0x9C91, 0x6E4B, 0x9C92, 0x6E4C, 0x9C93, 0x6E4F, 0x9C94, 0x6E50, 0x9C95, 0x6E51, + 0x9C96, 0x6E52, 0x9C97, 0x6E55, 0x9C98, 0x6E57, 0x9C99, 0x6E59, 0x9C9A, 0x6E5A, 0x9C9B, 0x6E5C, 0x9C9C, 0x6E5D, 0x9C9D, 0x6E5E, + 0x9C9E, 0x6E60, 0x9C9F, 0x6E61, 0x9CA0, 0x6E62, 0x9CA1, 0x6E63, 0x9CA2, 0x6E64, 0x9CA3, 0x6E65, 0x9CA4, 0x6E66, 0x9CA5, 0x6E67, + 0x9CA6, 0x6E68, 0x9CA7, 0x6E69, 0x9CA8, 0x6E6A, 0x9CA9, 0x6E6C, 0x9CAA, 0x6E6D, 0x9CAB, 0x6E6F, 0x9CAC, 0x6E70, 0x9CAD, 0x6E71, + 0x9CAE, 0x6E72, 0x9CAF, 0x6E73, 0x9CB0, 0x6E74, 0x9CB1, 0x6E75, 0x9CB2, 0x6E76, 0x9CB3, 0x6E77, 0x9CB4, 0x6E78, 0x9CB5, 0x6E79, + 0x9CB6, 0x6E7A, 0x9CB7, 0x6E7B, 0x9CB8, 0x6E7C, 0x9CB9, 0x6E7D, 0x9CBA, 0x6E80, 0x9CBB, 0x6E81, 0x9CBC, 0x6E82, 0x9CBD, 0x6E84, + 0x9CBE, 0x6E87, 0x9CBF, 0x6E88, 0x9CC0, 0x6E8A, 0x9CC1, 0x6E8B, 0x9CC2, 0x6E8C, 0x9CC3, 0x6E8D, 0x9CC4, 0x6E8E, 0x9CC5, 0x6E91, + 0x9CC6, 0x6E92, 0x9CC7, 0x6E93, 0x9CC8, 0x6E94, 0x9CC9, 0x6E95, 0x9CCA, 0x6E96, 0x9CCB, 0x6E97, 0x9CCC, 0x6E99, 0x9CCD, 0x6E9A, + 0x9CCE, 0x6E9B, 0x9CCF, 0x6E9D, 0x9CD0, 0x6E9E, 0x9CD1, 0x6EA0, 0x9CD2, 0x6EA1, 0x9CD3, 0x6EA3, 0x9CD4, 0x6EA4, 0x9CD5, 0x6EA6, + 0x9CD6, 0x6EA8, 0x9CD7, 0x6EA9, 0x9CD8, 0x6EAB, 0x9CD9, 0x6EAC, 0x9CDA, 0x6EAD, 0x9CDB, 0x6EAE, 0x9CDC, 0x6EB0, 0x9CDD, 0x6EB3, + 0x9CDE, 0x6EB5, 0x9CDF, 0x6EB8, 0x9CE0, 0x6EB9, 0x9CE1, 0x6EBC, 0x9CE2, 0x6EBE, 0x9CE3, 0x6EBF, 0x9CE4, 0x6EC0, 0x9CE5, 0x6EC3, + 0x9CE6, 0x6EC4, 0x9CE7, 0x6EC5, 0x9CE8, 0x6EC6, 0x9CE9, 0x6EC8, 0x9CEA, 0x6EC9, 0x9CEB, 0x6ECA, 0x9CEC, 0x6ECC, 0x9CED, 0x6ECD, + 0x9CEE, 0x6ECE, 0x9CEF, 0x6ED0, 0x9CF0, 0x6ED2, 0x9CF1, 0x6ED6, 0x9CF2, 0x6ED8, 0x9CF3, 0x6ED9, 0x9CF4, 0x6EDB, 0x9CF5, 0x6EDC, + 0x9CF6, 0x6EDD, 0x9CF7, 0x6EE3, 0x9CF8, 0x6EE7, 0x9CF9, 0x6EEA, 0x9CFA, 0x6EEB, 0x9CFB, 0x6EEC, 0x9CFC, 0x6EED, 0x9CFD, 0x6EEE, + 0x9CFE, 0x6EEF, 0x9D40, 0x6EF0, 0x9D41, 0x6EF1, 0x9D42, 0x6EF2, 0x9D43, 0x6EF3, 0x9D44, 0x6EF5, 0x9D45, 0x6EF6, 0x9D46, 0x6EF7, + 0x9D47, 0x6EF8, 0x9D48, 0x6EFA, 0x9D49, 0x6EFB, 0x9D4A, 0x6EFC, 0x9D4B, 0x6EFD, 0x9D4C, 0x6EFE, 0x9D4D, 0x6EFF, 0x9D4E, 0x6F00, + 0x9D4F, 0x6F01, 0x9D50, 0x6F03, 0x9D51, 0x6F04, 0x9D52, 0x6F05, 0x9D53, 0x6F07, 0x9D54, 0x6F08, 0x9D55, 0x6F0A, 0x9D56, 0x6F0B, + 0x9D57, 0x6F0C, 0x9D58, 0x6F0D, 0x9D59, 0x6F0E, 0x9D5A, 0x6F10, 0x9D5B, 0x6F11, 0x9D5C, 0x6F12, 0x9D5D, 0x6F16, 0x9D5E, 0x6F17, + 0x9D5F, 0x6F18, 0x9D60, 0x6F19, 0x9D61, 0x6F1A, 0x9D62, 0x6F1B, 0x9D63, 0x6F1C, 0x9D64, 0x6F1D, 0x9D65, 0x6F1E, 0x9D66, 0x6F1F, + 0x9D67, 0x6F21, 0x9D68, 0x6F22, 0x9D69, 0x6F23, 0x9D6A, 0x6F25, 0x9D6B, 0x6F26, 0x9D6C, 0x6F27, 0x9D6D, 0x6F28, 0x9D6E, 0x6F2C, + 0x9D6F, 0x6F2E, 0x9D70, 0x6F30, 0x9D71, 0x6F32, 0x9D72, 0x6F34, 0x9D73, 0x6F35, 0x9D74, 0x6F37, 0x9D75, 0x6F38, 0x9D76, 0x6F39, + 0x9D77, 0x6F3A, 0x9D78, 0x6F3B, 0x9D79, 0x6F3C, 0x9D7A, 0x6F3D, 0x9D7B, 0x6F3F, 0x9D7C, 0x6F40, 0x9D7D, 0x6F41, 0x9D7E, 0x6F42, + 0x9D80, 0x6F43, 0x9D81, 0x6F44, 0x9D82, 0x6F45, 0x9D83, 0x6F48, 0x9D84, 0x6F49, 0x9D85, 0x6F4A, 0x9D86, 0x6F4C, 0x9D87, 0x6F4E, + 0x9D88, 0x6F4F, 0x9D89, 0x6F50, 0x9D8A, 0x6F51, 0x9D8B, 0x6F52, 0x9D8C, 0x6F53, 0x9D8D, 0x6F54, 0x9D8E, 0x6F55, 0x9D8F, 0x6F56, + 0x9D90, 0x6F57, 0x9D91, 0x6F59, 0x9D92, 0x6F5A, 0x9D93, 0x6F5B, 0x9D94, 0x6F5D, 0x9D95, 0x6F5F, 0x9D96, 0x6F60, 0x9D97, 0x6F61, + 0x9D98, 0x6F63, 0x9D99, 0x6F64, 0x9D9A, 0x6F65, 0x9D9B, 0x6F67, 0x9D9C, 0x6F68, 0x9D9D, 0x6F69, 0x9D9E, 0x6F6A, 0x9D9F, 0x6F6B, + 0x9DA0, 0x6F6C, 0x9DA1, 0x6F6F, 0x9DA2, 0x6F70, 0x9DA3, 0x6F71, 0x9DA4, 0x6F73, 0x9DA5, 0x6F75, 0x9DA6, 0x6F76, 0x9DA7, 0x6F77, + 0x9DA8, 0x6F79, 0x9DA9, 0x6F7B, 0x9DAA, 0x6F7D, 0x9DAB, 0x6F7E, 0x9DAC, 0x6F7F, 0x9DAD, 0x6F80, 0x9DAE, 0x6F81, 0x9DAF, 0x6F82, + 0x9DB0, 0x6F83, 0x9DB1, 0x6F85, 0x9DB2, 0x6F86, 0x9DB3, 0x6F87, 0x9DB4, 0x6F8A, 0x9DB5, 0x6F8B, 0x9DB6, 0x6F8F, 0x9DB7, 0x6F90, + 0x9DB8, 0x6F91, 0x9DB9, 0x6F92, 0x9DBA, 0x6F93, 0x9DBB, 0x6F94, 0x9DBC, 0x6F95, 0x9DBD, 0x6F96, 0x9DBE, 0x6F97, 0x9DBF, 0x6F98, + 0x9DC0, 0x6F99, 0x9DC1, 0x6F9A, 0x9DC2, 0x6F9B, 0x9DC3, 0x6F9D, 0x9DC4, 0x6F9E, 0x9DC5, 0x6F9F, 0x9DC6, 0x6FA0, 0x9DC7, 0x6FA2, + 0x9DC8, 0x6FA3, 0x9DC9, 0x6FA4, 0x9DCA, 0x6FA5, 0x9DCB, 0x6FA6, 0x9DCC, 0x6FA8, 0x9DCD, 0x6FA9, 0x9DCE, 0x6FAA, 0x9DCF, 0x6FAB, + 0x9DD0, 0x6FAC, 0x9DD1, 0x6FAD, 0x9DD2, 0x6FAE, 0x9DD3, 0x6FAF, 0x9DD4, 0x6FB0, 0x9DD5, 0x6FB1, 0x9DD6, 0x6FB2, 0x9DD7, 0x6FB4, + 0x9DD8, 0x6FB5, 0x9DD9, 0x6FB7, 0x9DDA, 0x6FB8, 0x9DDB, 0x6FBA, 0x9DDC, 0x6FBB, 0x9DDD, 0x6FBC, 0x9DDE, 0x6FBD, 0x9DDF, 0x6FBE, + 0x9DE0, 0x6FBF, 0x9DE1, 0x6FC1, 0x9DE2, 0x6FC3, 0x9DE3, 0x6FC4, 0x9DE4, 0x6FC5, 0x9DE5, 0x6FC6, 0x9DE6, 0x6FC7, 0x9DE7, 0x6FC8, + 0x9DE8, 0x6FCA, 0x9DE9, 0x6FCB, 0x9DEA, 0x6FCC, 0x9DEB, 0x6FCD, 0x9DEC, 0x6FCE, 0x9DED, 0x6FCF, 0x9DEE, 0x6FD0, 0x9DEF, 0x6FD3, + 0x9DF0, 0x6FD4, 0x9DF1, 0x6FD5, 0x9DF2, 0x6FD6, 0x9DF3, 0x6FD7, 0x9DF4, 0x6FD8, 0x9DF5, 0x6FD9, 0x9DF6, 0x6FDA, 0x9DF7, 0x6FDB, + 0x9DF8, 0x6FDC, 0x9DF9, 0x6FDD, 0x9DFA, 0x6FDF, 0x9DFB, 0x6FE2, 0x9DFC, 0x6FE3, 0x9DFD, 0x6FE4, 0x9DFE, 0x6FE5, 0x9E40, 0x6FE6, + 0x9E41, 0x6FE7, 0x9E42, 0x6FE8, 0x9E43, 0x6FE9, 0x9E44, 0x6FEA, 0x9E45, 0x6FEB, 0x9E46, 0x6FEC, 0x9E47, 0x6FED, 0x9E48, 0x6FF0, + 0x9E49, 0x6FF1, 0x9E4A, 0x6FF2, 0x9E4B, 0x6FF3, 0x9E4C, 0x6FF4, 0x9E4D, 0x6FF5, 0x9E4E, 0x6FF6, 0x9E4F, 0x6FF7, 0x9E50, 0x6FF8, + 0x9E51, 0x6FF9, 0x9E52, 0x6FFA, 0x9E53, 0x6FFB, 0x9E54, 0x6FFC, 0x9E55, 0x6FFD, 0x9E56, 0x6FFE, 0x9E57, 0x6FFF, 0x9E58, 0x7000, + 0x9E59, 0x7001, 0x9E5A, 0x7002, 0x9E5B, 0x7003, 0x9E5C, 0x7004, 0x9E5D, 0x7005, 0x9E5E, 0x7006, 0x9E5F, 0x7007, 0x9E60, 0x7008, + 0x9E61, 0x7009, 0x9E62, 0x700A, 0x9E63, 0x700B, 0x9E64, 0x700C, 0x9E65, 0x700D, 0x9E66, 0x700E, 0x9E67, 0x700F, 0x9E68, 0x7010, + 0x9E69, 0x7012, 0x9E6A, 0x7013, 0x9E6B, 0x7014, 0x9E6C, 0x7015, 0x9E6D, 0x7016, 0x9E6E, 0x7017, 0x9E6F, 0x7018, 0x9E70, 0x7019, + 0x9E71, 0x701C, 0x9E72, 0x701D, 0x9E73, 0x701E, 0x9E74, 0x701F, 0x9E75, 0x7020, 0x9E76, 0x7021, 0x9E77, 0x7022, 0x9E78, 0x7024, + 0x9E79, 0x7025, 0x9E7A, 0x7026, 0x9E7B, 0x7027, 0x9E7C, 0x7028, 0x9E7D, 0x7029, 0x9E7E, 0x702A, 0x9E80, 0x702B, 0x9E81, 0x702C, + 0x9E82, 0x702D, 0x9E83, 0x702E, 0x9E84, 0x702F, 0x9E85, 0x7030, 0x9E86, 0x7031, 0x9E87, 0x7032, 0x9E88, 0x7033, 0x9E89, 0x7034, + 0x9E8A, 0x7036, 0x9E8B, 0x7037, 0x9E8C, 0x7038, 0x9E8D, 0x703A, 0x9E8E, 0x703B, 0x9E8F, 0x703C, 0x9E90, 0x703D, 0x9E91, 0x703E, + 0x9E92, 0x703F, 0x9E93, 0x7040, 0x9E94, 0x7041, 0x9E95, 0x7042, 0x9E96, 0x7043, 0x9E97, 0x7044, 0x9E98, 0x7045, 0x9E99, 0x7046, + 0x9E9A, 0x7047, 0x9E9B, 0x7048, 0x9E9C, 0x7049, 0x9E9D, 0x704A, 0x9E9E, 0x704B, 0x9E9F, 0x704D, 0x9EA0, 0x704E, 0x9EA1, 0x7050, + 0x9EA2, 0x7051, 0x9EA3, 0x7052, 0x9EA4, 0x7053, 0x9EA5, 0x7054, 0x9EA6, 0x7055, 0x9EA7, 0x7056, 0x9EA8, 0x7057, 0x9EA9, 0x7058, + 0x9EAA, 0x7059, 0x9EAB, 0x705A, 0x9EAC, 0x705B, 0x9EAD, 0x705C, 0x9EAE, 0x705D, 0x9EAF, 0x705F, 0x9EB0, 0x7060, 0x9EB1, 0x7061, + 0x9EB2, 0x7062, 0x9EB3, 0x7063, 0x9EB4, 0x7064, 0x9EB5, 0x7065, 0x9EB6, 0x7066, 0x9EB7, 0x7067, 0x9EB8, 0x7068, 0x9EB9, 0x7069, + 0x9EBA, 0x706A, 0x9EBB, 0x706E, 0x9EBC, 0x7071, 0x9EBD, 0x7072, 0x9EBE, 0x7073, 0x9EBF, 0x7074, 0x9EC0, 0x7077, 0x9EC1, 0x7079, + 0x9EC2, 0x707A, 0x9EC3, 0x707B, 0x9EC4, 0x707D, 0x9EC5, 0x7081, 0x9EC6, 0x7082, 0x9EC7, 0x7083, 0x9EC8, 0x7084, 0x9EC9, 0x7086, + 0x9ECA, 0x7087, 0x9ECB, 0x7088, 0x9ECC, 0x708B, 0x9ECD, 0x708C, 0x9ECE, 0x708D, 0x9ECF, 0x708F, 0x9ED0, 0x7090, 0x9ED1, 0x7091, + 0x9ED2, 0x7093, 0x9ED3, 0x7097, 0x9ED4, 0x7098, 0x9ED5, 0x709A, 0x9ED6, 0x709B, 0x9ED7, 0x709E, 0x9ED8, 0x709F, 0x9ED9, 0x70A0, + 0x9EDA, 0x70A1, 0x9EDB, 0x70A2, 0x9EDC, 0x70A3, 0x9EDD, 0x70A4, 0x9EDE, 0x70A5, 0x9EDF, 0x70A6, 0x9EE0, 0x70A7, 0x9EE1, 0x70A8, + 0x9EE2, 0x70A9, 0x9EE3, 0x70AA, 0x9EE4, 0x70B0, 0x9EE5, 0x70B2, 0x9EE6, 0x70B4, 0x9EE7, 0x70B5, 0x9EE8, 0x70B6, 0x9EE9, 0x70BA, + 0x9EEA, 0x70BE, 0x9EEB, 0x70BF, 0x9EEC, 0x70C4, 0x9EED, 0x70C5, 0x9EEE, 0x70C6, 0x9EEF, 0x70C7, 0x9EF0, 0x70C9, 0x9EF1, 0x70CB, + 0x9EF2, 0x70CC, 0x9EF3, 0x70CD, 0x9EF4, 0x70CE, 0x9EF5, 0x70CF, 0x9EF6, 0x70D0, 0x9EF7, 0x70D1, 0x9EF8, 0x70D2, 0x9EF9, 0x70D3, + 0x9EFA, 0x70D4, 0x9EFB, 0x70D5, 0x9EFC, 0x70D6, 0x9EFD, 0x70D7, 0x9EFE, 0x70DA, 0x9F40, 0x70DC, 0x9F41, 0x70DD, 0x9F42, 0x70DE, + 0x9F43, 0x70E0, 0x9F44, 0x70E1, 0x9F45, 0x70E2, 0x9F46, 0x70E3, 0x9F47, 0x70E5, 0x9F48, 0x70EA, 0x9F49, 0x70EE, 0x9F4A, 0x70F0, + 0x9F4B, 0x70F1, 0x9F4C, 0x70F2, 0x9F4D, 0x70F3, 0x9F4E, 0x70F4, 0x9F4F, 0x70F5, 0x9F50, 0x70F6, 0x9F51, 0x70F8, 0x9F52, 0x70FA, + 0x9F53, 0x70FB, 0x9F54, 0x70FC, 0x9F55, 0x70FE, 0x9F56, 0x70FF, 0x9F57, 0x7100, 0x9F58, 0x7101, 0x9F59, 0x7102, 0x9F5A, 0x7103, + 0x9F5B, 0x7104, 0x9F5C, 0x7105, 0x9F5D, 0x7106, 0x9F5E, 0x7107, 0x9F5F, 0x7108, 0x9F60, 0x710B, 0x9F61, 0x710C, 0x9F62, 0x710D, + 0x9F63, 0x710E, 0x9F64, 0x710F, 0x9F65, 0x7111, 0x9F66, 0x7112, 0x9F67, 0x7114, 0x9F68, 0x7117, 0x9F69, 0x711B, 0x9F6A, 0x711C, + 0x9F6B, 0x711D, 0x9F6C, 0x711E, 0x9F6D, 0x711F, 0x9F6E, 0x7120, 0x9F6F, 0x7121, 0x9F70, 0x7122, 0x9F71, 0x7123, 0x9F72, 0x7124, + 0x9F73, 0x7125, 0x9F74, 0x7127, 0x9F75, 0x7128, 0x9F76, 0x7129, 0x9F77, 0x712A, 0x9F78, 0x712B, 0x9F79, 0x712C, 0x9F7A, 0x712D, + 0x9F7B, 0x712E, 0x9F7C, 0x7132, 0x9F7D, 0x7133, 0x9F7E, 0x7134, 0x9F80, 0x7135, 0x9F81, 0x7137, 0x9F82, 0x7138, 0x9F83, 0x7139, + 0x9F84, 0x713A, 0x9F85, 0x713B, 0x9F86, 0x713C, 0x9F87, 0x713D, 0x9F88, 0x713E, 0x9F89, 0x713F, 0x9F8A, 0x7140, 0x9F8B, 0x7141, + 0x9F8C, 0x7142, 0x9F8D, 0x7143, 0x9F8E, 0x7144, 0x9F8F, 0x7146, 0x9F90, 0x7147, 0x9F91, 0x7148, 0x9F92, 0x7149, 0x9F93, 0x714B, + 0x9F94, 0x714D, 0x9F95, 0x714F, 0x9F96, 0x7150, 0x9F97, 0x7151, 0x9F98, 0x7152, 0x9F99, 0x7153, 0x9F9A, 0x7154, 0x9F9B, 0x7155, + 0x9F9C, 0x7156, 0x9F9D, 0x7157, 0x9F9E, 0x7158, 0x9F9F, 0x7159, 0x9FA0, 0x715A, 0x9FA1, 0x715B, 0x9FA2, 0x715D, 0x9FA3, 0x715F, + 0x9FA4, 0x7160, 0x9FA5, 0x7161, 0x9FA6, 0x7162, 0x9FA7, 0x7163, 0x9FA8, 0x7165, 0x9FA9, 0x7169, 0x9FAA, 0x716A, 0x9FAB, 0x716B, + 0x9FAC, 0x716C, 0x9FAD, 0x716D, 0x9FAE, 0x716F, 0x9FAF, 0x7170, 0x9FB0, 0x7171, 0x9FB1, 0x7174, 0x9FB2, 0x7175, 0x9FB3, 0x7176, + 0x9FB4, 0x7177, 0x9FB5, 0x7179, 0x9FB6, 0x717B, 0x9FB7, 0x717C, 0x9FB8, 0x717E, 0x9FB9, 0x717F, 0x9FBA, 0x7180, 0x9FBB, 0x7181, + 0x9FBC, 0x7182, 0x9FBD, 0x7183, 0x9FBE, 0x7185, 0x9FBF, 0x7186, 0x9FC0, 0x7187, 0x9FC1, 0x7188, 0x9FC2, 0x7189, 0x9FC3, 0x718B, + 0x9FC4, 0x718C, 0x9FC5, 0x718D, 0x9FC6, 0x718E, 0x9FC7, 0x7190, 0x9FC8, 0x7191, 0x9FC9, 0x7192, 0x9FCA, 0x7193, 0x9FCB, 0x7195, + 0x9FCC, 0x7196, 0x9FCD, 0x7197, 0x9FCE, 0x719A, 0x9FCF, 0x719B, 0x9FD0, 0x719C, 0x9FD1, 0x719D, 0x9FD2, 0x719E, 0x9FD3, 0x71A1, + 0x9FD4, 0x71A2, 0x9FD5, 0x71A3, 0x9FD6, 0x71A4, 0x9FD7, 0x71A5, 0x9FD8, 0x71A6, 0x9FD9, 0x71A7, 0x9FDA, 0x71A9, 0x9FDB, 0x71AA, + 0x9FDC, 0x71AB, 0x9FDD, 0x71AD, 0x9FDE, 0x71AE, 0x9FDF, 0x71AF, 0x9FE0, 0x71B0, 0x9FE1, 0x71B1, 0x9FE2, 0x71B2, 0x9FE3, 0x71B4, + 0x9FE4, 0x71B6, 0x9FE5, 0x71B7, 0x9FE6, 0x71B8, 0x9FE7, 0x71BA, 0x9FE8, 0x71BB, 0x9FE9, 0x71BC, 0x9FEA, 0x71BD, 0x9FEB, 0x71BE, + 0x9FEC, 0x71BF, 0x9FED, 0x71C0, 0x9FEE, 0x71C1, 0x9FEF, 0x71C2, 0x9FF0, 0x71C4, 0x9FF1, 0x71C5, 0x9FF2, 0x71C6, 0x9FF3, 0x71C7, + 0x9FF4, 0x71C8, 0x9FF5, 0x71C9, 0x9FF6, 0x71CA, 0x9FF7, 0x71CB, 0x9FF8, 0x71CC, 0x9FF9, 0x71CD, 0x9FFA, 0x71CF, 0x9FFB, 0x71D0, + 0x9FFC, 0x71D1, 0x9FFD, 0x71D2, 0x9FFE, 0x71D3, 0xA040, 0x71D6, 0xA041, 0x71D7, 0xA042, 0x71D8, 0xA043, 0x71D9, 0xA044, 0x71DA, + 0xA045, 0x71DB, 0xA046, 0x71DC, 0xA047, 0x71DD, 0xA048, 0x71DE, 0xA049, 0x71DF, 0xA04A, 0x71E1, 0xA04B, 0x71E2, 0xA04C, 0x71E3, + 0xA04D, 0x71E4, 0xA04E, 0x71E6, 0xA04F, 0x71E8, 0xA050, 0x71E9, 0xA051, 0x71EA, 0xA052, 0x71EB, 0xA053, 0x71EC, 0xA054, 0x71ED, + 0xA055, 0x71EF, 0xA056, 0x71F0, 0xA057, 0x71F1, 0xA058, 0x71F2, 0xA059, 0x71F3, 0xA05A, 0x71F4, 0xA05B, 0x71F5, 0xA05C, 0x71F6, + 0xA05D, 0x71F7, 0xA05E, 0x71F8, 0xA05F, 0x71FA, 0xA060, 0x71FB, 0xA061, 0x71FC, 0xA062, 0x71FD, 0xA063, 0x71FE, 0xA064, 0x71FF, + 0xA065, 0x7200, 0xA066, 0x7201, 0xA067, 0x7202, 0xA068, 0x7203, 0xA069, 0x7204, 0xA06A, 0x7205, 0xA06B, 0x7207, 0xA06C, 0x7208, + 0xA06D, 0x7209, 0xA06E, 0x720A, 0xA06F, 0x720B, 0xA070, 0x720C, 0xA071, 0x720D, 0xA072, 0x720E, 0xA073, 0x720F, 0xA074, 0x7210, + 0xA075, 0x7211, 0xA076, 0x7212, 0xA077, 0x7213, 0xA078, 0x7214, 0xA079, 0x7215, 0xA07A, 0x7216, 0xA07B, 0x7217, 0xA07C, 0x7218, + 0xA07D, 0x7219, 0xA07E, 0x721A, 0xA080, 0x721B, 0xA081, 0x721C, 0xA082, 0x721E, 0xA083, 0x721F, 0xA084, 0x7220, 0xA085, 0x7221, + 0xA086, 0x7222, 0xA087, 0x7223, 0xA088, 0x7224, 0xA089, 0x7225, 0xA08A, 0x7226, 0xA08B, 0x7227, 0xA08C, 0x7229, 0xA08D, 0x722B, + 0xA08E, 0x722D, 0xA08F, 0x722E, 0xA090, 0x722F, 0xA091, 0x7232, 0xA092, 0x7233, 0xA093, 0x7234, 0xA094, 0x723A, 0xA095, 0x723C, + 0xA096, 0x723E, 0xA097, 0x7240, 0xA098, 0x7241, 0xA099, 0x7242, 0xA09A, 0x7243, 0xA09B, 0x7244, 0xA09C, 0x7245, 0xA09D, 0x7246, + 0xA09E, 0x7249, 0xA09F, 0x724A, 0xA0A0, 0x724B, 0xA0A1, 0x724E, 0xA0A2, 0x724F, 0xA0A3, 0x7250, 0xA0A4, 0x7251, 0xA0A5, 0x7253, + 0xA0A6, 0x7254, 0xA0A7, 0x7255, 0xA0A8, 0x7257, 0xA0A9, 0x7258, 0xA0AA, 0x725A, 0xA0AB, 0x725C, 0xA0AC, 0x725E, 0xA0AD, 0x7260, + 0xA0AE, 0x7263, 0xA0AF, 0x7264, 0xA0B0, 0x7265, 0xA0B1, 0x7268, 0xA0B2, 0x726A, 0xA0B3, 0x726B, 0xA0B4, 0x726C, 0xA0B5, 0x726D, + 0xA0B6, 0x7270, 0xA0B7, 0x7271, 0xA0B8, 0x7273, 0xA0B9, 0x7274, 0xA0BA, 0x7276, 0xA0BB, 0x7277, 0xA0BC, 0x7278, 0xA0BD, 0x727B, + 0xA0BE, 0x727C, 0xA0BF, 0x727D, 0xA0C0, 0x7282, 0xA0C1, 0x7283, 0xA0C2, 0x7285, 0xA0C3, 0x7286, 0xA0C4, 0x7287, 0xA0C5, 0x7288, + 0xA0C6, 0x7289, 0xA0C7, 0x728C, 0xA0C8, 0x728E, 0xA0C9, 0x7290, 0xA0CA, 0x7291, 0xA0CB, 0x7293, 0xA0CC, 0x7294, 0xA0CD, 0x7295, + 0xA0CE, 0x7296, 0xA0CF, 0x7297, 0xA0D0, 0x7298, 0xA0D1, 0x7299, 0xA0D2, 0x729A, 0xA0D3, 0x729B, 0xA0D4, 0x729C, 0xA0D5, 0x729D, + 0xA0D6, 0x729E, 0xA0D7, 0x72A0, 0xA0D8, 0x72A1, 0xA0D9, 0x72A2, 0xA0DA, 0x72A3, 0xA0DB, 0x72A4, 0xA0DC, 0x72A5, 0xA0DD, 0x72A6, + 0xA0DE, 0x72A7, 0xA0DF, 0x72A8, 0xA0E0, 0x72A9, 0xA0E1, 0x72AA, 0xA0E2, 0x72AB, 0xA0E3, 0x72AE, 0xA0E4, 0x72B1, 0xA0E5, 0x72B2, + 0xA0E6, 0x72B3, 0xA0E7, 0x72B5, 0xA0E8, 0x72BA, 0xA0E9, 0x72BB, 0xA0EA, 0x72BC, 0xA0EB, 0x72BD, 0xA0EC, 0x72BE, 0xA0ED, 0x72BF, + 0xA0EE, 0x72C0, 0xA0EF, 0x72C5, 0xA0F0, 0x72C6, 0xA0F1, 0x72C7, 0xA0F2, 0x72C9, 0xA0F3, 0x72CA, 0xA0F4, 0x72CB, 0xA0F5, 0x72CC, + 0xA0F6, 0x72CF, 0xA0F7, 0x72D1, 0xA0F8, 0x72D3, 0xA0F9, 0x72D4, 0xA0FA, 0x72D5, 0xA0FB, 0x72D6, 0xA0FC, 0x72D8, 0xA0FD, 0x72DA, + 0xA0FE, 0x72DB, 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, 0xA1A4, 0x00B7, 0xA1A5, 0x02C9, 0xA1A6, 0x02C7, 0xA1A7, 0x00A8, + 0xA1A8, 0x3003, 0xA1A9, 0x3005, 0xA1AA, 0x2014, 0xA1AB, 0xFF5E, 0xA1AC, 0x2016, 0xA1AD, 0x2026, 0xA1AE, 0x2018, 0xA1AF, 0x2019, + 0xA1B0, 0x201C, 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, 0xA1B4, 0x3008, 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B, + 0xA1B8, 0x300C, 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, 0xA1BC, 0x3016, 0xA1BD, 0x3017, 0xA1BE, 0x3010, 0xA1BF, 0x3011, + 0xA1C0, 0x00B1, 0xA1C1, 0x00D7, 0xA1C2, 0x00F7, 0xA1C3, 0x2236, 0xA1C4, 0x2227, 0xA1C5, 0x2228, 0xA1C6, 0x2211, 0xA1C7, 0x220F, + 0xA1C8, 0x222A, 0xA1C9, 0x2229, 0xA1CA, 0x2208, 0xA1CB, 0x2237, 0xA1CC, 0x221A, 0xA1CD, 0x22A5, 0xA1CE, 0x2225, 0xA1CF, 0x2220, + 0xA1D0, 0x2312, 0xA1D1, 0x2299, 0xA1D2, 0x222B, 0xA1D3, 0x222E, 0xA1D4, 0x2261, 0xA1D5, 0x224C, 0xA1D6, 0x2248, 0xA1D7, 0x223D, + 0xA1D8, 0x221D, 0xA1D9, 0x2260, 0xA1DA, 0x226E, 0xA1DB, 0x226F, 0xA1DC, 0x2264, 0xA1DD, 0x2265, 0xA1DE, 0x221E, 0xA1DF, 0x2235, + 0xA1E0, 0x2234, 0xA1E1, 0x2642, 0xA1E2, 0x2640, 0xA1E3, 0x00B0, 0xA1E4, 0x2032, 0xA1E5, 0x2033, 0xA1E6, 0x2103, 0xA1E7, 0xFF04, + 0xA1E8, 0x00A4, 0xA1E9, 0xFFE0, 0xA1EA, 0xFFE1, 0xA1EB, 0x2030, 0xA1EC, 0x00A7, 0xA1ED, 0x2116, 0xA1EE, 0x2606, 0xA1EF, 0x2605, + 0xA1F0, 0x25CB, 0xA1F1, 0x25CF, 0xA1F2, 0x25CE, 0xA1F3, 0x25C7, 0xA1F4, 0x25C6, 0xA1F5, 0x25A1, 0xA1F6, 0x25A0, 0xA1F7, 0x25B3, + 0xA1F8, 0x25B2, 0xA1F9, 0x203B, 0xA1FA, 0x2192, 0xA1FB, 0x2190, 0xA1FC, 0x2191, 0xA1FD, 0x2193, 0xA1FE, 0x3013, 0xA2A1, 0x2170, + 0xA2A2, 0x2171, 0xA2A3, 0x2172, 0xA2A4, 0x2173, 0xA2A5, 0x2174, 0xA2A6, 0x2175, 0xA2A7, 0x2176, 0xA2A8, 0x2177, 0xA2A9, 0x2178, + 0xA2AA, 0x2179, 0xA2B1, 0x2488, 0xA2B2, 0x2489, 0xA2B3, 0x248A, 0xA2B4, 0x248B, 0xA2B5, 0x248C, 0xA2B6, 0x248D, 0xA2B7, 0x248E, + 0xA2B8, 0x248F, 0xA2B9, 0x2490, 0xA2BA, 0x2491, 0xA2BB, 0x2492, 0xA2BC, 0x2493, 0xA2BD, 0x2494, 0xA2BE, 0x2495, 0xA2BF, 0x2496, + 0xA2C0, 0x2497, 0xA2C1, 0x2498, 0xA2C2, 0x2499, 0xA2C3, 0x249A, 0xA2C4, 0x249B, 0xA2C5, 0x2474, 0xA2C6, 0x2475, 0xA2C7, 0x2476, + 0xA2C8, 0x2477, 0xA2C9, 0x2478, 0xA2CA, 0x2479, 0xA2CB, 0x247A, 0xA2CC, 0x247B, 0xA2CD, 0x247C, 0xA2CE, 0x247D, 0xA2CF, 0x247E, + 0xA2D0, 0x247F, 0xA2D1, 0x2480, 0xA2D2, 0x2481, 0xA2D3, 0x2482, 0xA2D4, 0x2483, 0xA2D5, 0x2484, 0xA2D6, 0x2485, 0xA2D7, 0x2486, + 0xA2D8, 0x2487, 0xA2D9, 0x2460, 0xA2DA, 0x2461, 0xA2DB, 0x2462, 0xA2DC, 0x2463, 0xA2DD, 0x2464, 0xA2DE, 0x2465, 0xA2DF, 0x2466, + 0xA2E0, 0x2467, 0xA2E1, 0x2468, 0xA2E2, 0x2469, 0xA2E5, 0x3220, 0xA2E6, 0x3221, 0xA2E7, 0x3222, 0xA2E8, 0x3223, 0xA2E9, 0x3224, + 0xA2EA, 0x3225, 0xA2EB, 0x3226, 0xA2EC, 0x3227, 0xA2ED, 0x3228, 0xA2EE, 0x3229, 0xA2F1, 0x2160, 0xA2F2, 0x2161, 0xA2F3, 0x2162, + 0xA2F4, 0x2163, 0xA2F5, 0x2164, 0xA2F6, 0x2165, 0xA2F7, 0x2166, 0xA2F8, 0x2167, 0xA2F9, 0x2168, 0xA2FA, 0x2169, 0xA2FB, 0x216A, + 0xA2FC, 0x216B, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, 0xA3A4, 0xFFE5, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07, + 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F, + 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17, + 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F, + 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27, + 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F, + 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37, + 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, 0xA3DC, 0xFF3C, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F, + 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47, + 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F, + 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57, + 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA4A1, 0x3041, + 0xA4A2, 0x3042, 0xA4A3, 0x3043, 0xA4A4, 0x3044, 0xA4A5, 0x3045, 0xA4A6, 0x3046, 0xA4A7, 0x3047, 0xA4A8, 0x3048, 0xA4A9, 0x3049, + 0xA4AA, 0x304A, 0xA4AB, 0x304B, 0xA4AC, 0x304C, 0xA4AD, 0x304D, 0xA4AE, 0x304E, 0xA4AF, 0x304F, 0xA4B0, 0x3050, 0xA4B1, 0x3051, + 0xA4B2, 0x3052, 0xA4B3, 0x3053, 0xA4B4, 0x3054, 0xA4B5, 0x3055, 0xA4B6, 0x3056, 0xA4B7, 0x3057, 0xA4B8, 0x3058, 0xA4B9, 0x3059, + 0xA4BA, 0x305A, 0xA4BB, 0x305B, 0xA4BC, 0x305C, 0xA4BD, 0x305D, 0xA4BE, 0x305E, 0xA4BF, 0x305F, 0xA4C0, 0x3060, 0xA4C1, 0x3061, + 0xA4C2, 0x3062, 0xA4C3, 0x3063, 0xA4C4, 0x3064, 0xA4C5, 0x3065, 0xA4C6, 0x3066, 0xA4C7, 0x3067, 0xA4C8, 0x3068, 0xA4C9, 0x3069, + 0xA4CA, 0x306A, 0xA4CB, 0x306B, 0xA4CC, 0x306C, 0xA4CD, 0x306D, 0xA4CE, 0x306E, 0xA4CF, 0x306F, 0xA4D0, 0x3070, 0xA4D1, 0x3071, + 0xA4D2, 0x3072, 0xA4D3, 0x3073, 0xA4D4, 0x3074, 0xA4D5, 0x3075, 0xA4D6, 0x3076, 0xA4D7, 0x3077, 0xA4D8, 0x3078, 0xA4D9, 0x3079, + 0xA4DA, 0x307A, 0xA4DB, 0x307B, 0xA4DC, 0x307C, 0xA4DD, 0x307D, 0xA4DE, 0x307E, 0xA4DF, 0x307F, 0xA4E0, 0x3080, 0xA4E1, 0x3081, + 0xA4E2, 0x3082, 0xA4E3, 0x3083, 0xA4E4, 0x3084, 0xA4E5, 0x3085, 0xA4E6, 0x3086, 0xA4E7, 0x3087, 0xA4E8, 0x3088, 0xA4E9, 0x3089, + 0xA4EA, 0x308A, 0xA4EB, 0x308B, 0xA4EC, 0x308C, 0xA4ED, 0x308D, 0xA4EE, 0x308E, 0xA4EF, 0x308F, 0xA4F0, 0x3090, 0xA4F1, 0x3091, + 0xA4F2, 0x3092, 0xA4F3, 0x3093, 0xA5A1, 0x30A1, 0xA5A2, 0x30A2, 0xA5A3, 0x30A3, 0xA5A4, 0x30A4, 0xA5A5, 0x30A5, 0xA5A6, 0x30A6, + 0xA5A7, 0x30A7, 0xA5A8, 0x30A8, 0xA5A9, 0x30A9, 0xA5AA, 0x30AA, 0xA5AB, 0x30AB, 0xA5AC, 0x30AC, 0xA5AD, 0x30AD, 0xA5AE, 0x30AE, + 0xA5AF, 0x30AF, 0xA5B0, 0x30B0, 0xA5B1, 0x30B1, 0xA5B2, 0x30B2, 0xA5B3, 0x30B3, 0xA5B4, 0x30B4, 0xA5B5, 0x30B5, 0xA5B6, 0x30B6, + 0xA5B7, 0x30B7, 0xA5B8, 0x30B8, 0xA5B9, 0x30B9, 0xA5BA, 0x30BA, 0xA5BB, 0x30BB, 0xA5BC, 0x30BC, 0xA5BD, 0x30BD, 0xA5BE, 0x30BE, + 0xA5BF, 0x30BF, 0xA5C0, 0x30C0, 0xA5C1, 0x30C1, 0xA5C2, 0x30C2, 0xA5C3, 0x30C3, 0xA5C4, 0x30C4, 0xA5C5, 0x30C5, 0xA5C6, 0x30C6, + 0xA5C7, 0x30C7, 0xA5C8, 0x30C8, 0xA5C9, 0x30C9, 0xA5CA, 0x30CA, 0xA5CB, 0x30CB, 0xA5CC, 0x30CC, 0xA5CD, 0x30CD, 0xA5CE, 0x30CE, + 0xA5CF, 0x30CF, 0xA5D0, 0x30D0, 0xA5D1, 0x30D1, 0xA5D2, 0x30D2, 0xA5D3, 0x30D3, 0xA5D4, 0x30D4, 0xA5D5, 0x30D5, 0xA5D6, 0x30D6, + 0xA5D7, 0x30D7, 0xA5D8, 0x30D8, 0xA5D9, 0x30D9, 0xA5DA, 0x30DA, 0xA5DB, 0x30DB, 0xA5DC, 0x30DC, 0xA5DD, 0x30DD, 0xA5DE, 0x30DE, + 0xA5DF, 0x30DF, 0xA5E0, 0x30E0, 0xA5E1, 0x30E1, 0xA5E2, 0x30E2, 0xA5E3, 0x30E3, 0xA5E4, 0x30E4, 0xA5E5, 0x30E5, 0xA5E6, 0x30E6, + 0xA5E7, 0x30E7, 0xA5E8, 0x30E8, 0xA5E9, 0x30E9, 0xA5EA, 0x30EA, 0xA5EB, 0x30EB, 0xA5EC, 0x30EC, 0xA5ED, 0x30ED, 0xA5EE, 0x30EE, + 0xA5EF, 0x30EF, 0xA5F0, 0x30F0, 0xA5F1, 0x30F1, 0xA5F2, 0x30F2, 0xA5F3, 0x30F3, 0xA5F4, 0x30F4, 0xA5F5, 0x30F5, 0xA5F6, 0x30F6, + 0xA6A1, 0x0391, 0xA6A2, 0x0392, 0xA6A3, 0x0393, 0xA6A4, 0x0394, 0xA6A5, 0x0395, 0xA6A6, 0x0396, 0xA6A7, 0x0397, 0xA6A8, 0x0398, + 0xA6A9, 0x0399, 0xA6AA, 0x039A, 0xA6AB, 0x039B, 0xA6AC, 0x039C, 0xA6AD, 0x039D, 0xA6AE, 0x039E, 0xA6AF, 0x039F, 0xA6B0, 0x03A0, + 0xA6B1, 0x03A1, 0xA6B2, 0x03A3, 0xA6B3, 0x03A4, 0xA6B4, 0x03A5, 0xA6B5, 0x03A6, 0xA6B6, 0x03A7, 0xA6B7, 0x03A8, 0xA6B8, 0x03A9, + 0xA6C1, 0x03B1, 0xA6C2, 0x03B2, 0xA6C3, 0x03B3, 0xA6C4, 0x03B4, 0xA6C5, 0x03B5, 0xA6C6, 0x03B6, 0xA6C7, 0x03B7, 0xA6C8, 0x03B8, + 0xA6C9, 0x03B9, 0xA6CA, 0x03BA, 0xA6CB, 0x03BB, 0xA6CC, 0x03BC, 0xA6CD, 0x03BD, 0xA6CE, 0x03BE, 0xA6CF, 0x03BF, 0xA6D0, 0x03C0, + 0xA6D1, 0x03C1, 0xA6D2, 0x03C3, 0xA6D3, 0x03C4, 0xA6D4, 0x03C5, 0xA6D5, 0x03C6, 0xA6D6, 0x03C7, 0xA6D7, 0x03C8, 0xA6D8, 0x03C9, + 0xA6E0, 0xFE35, 0xA6E1, 0xFE36, 0xA6E2, 0xFE39, 0xA6E3, 0xFE3A, 0xA6E4, 0xFE3F, 0xA6E5, 0xFE40, 0xA6E6, 0xFE3D, 0xA6E7, 0xFE3E, + 0xA6E8, 0xFE41, 0xA6E9, 0xFE42, 0xA6EA, 0xFE43, 0xA6EB, 0xFE44, 0xA6EE, 0xFE3B, 0xA6EF, 0xFE3C, 0xA6F0, 0xFE37, 0xA6F1, 0xFE38, + 0xA6F2, 0xFE31, 0xA6F4, 0xFE33, 0xA6F5, 0xFE34, 0xA7A1, 0x0410, 0xA7A2, 0x0411, 0xA7A3, 0x0412, 0xA7A4, 0x0413, 0xA7A5, 0x0414, + 0xA7A6, 0x0415, 0xA7A7, 0x0401, 0xA7A8, 0x0416, 0xA7A9, 0x0417, 0xA7AA, 0x0418, 0xA7AB, 0x0419, 0xA7AC, 0x041A, 0xA7AD, 0x041B, + 0xA7AE, 0x041C, 0xA7AF, 0x041D, 0xA7B0, 0x041E, 0xA7B1, 0x041F, 0xA7B2, 0x0420, 0xA7B3, 0x0421, 0xA7B4, 0x0422, 0xA7B5, 0x0423, + 0xA7B6, 0x0424, 0xA7B7, 0x0425, 0xA7B8, 0x0426, 0xA7B9, 0x0427, 0xA7BA, 0x0428, 0xA7BB, 0x0429, 0xA7BC, 0x042A, 0xA7BD, 0x042B, + 0xA7BE, 0x042C, 0xA7BF, 0x042D, 0xA7C0, 0x042E, 0xA7C1, 0x042F, 0xA7D1, 0x0430, 0xA7D2, 0x0431, 0xA7D3, 0x0432, 0xA7D4, 0x0433, + 0xA7D5, 0x0434, 0xA7D6, 0x0435, 0xA7D7, 0x0451, 0xA7D8, 0x0436, 0xA7D9, 0x0437, 0xA7DA, 0x0438, 0xA7DB, 0x0439, 0xA7DC, 0x043A, + 0xA7DD, 0x043B, 0xA7DE, 0x043C, 0xA7DF, 0x043D, 0xA7E0, 0x043E, 0xA7E1, 0x043F, 0xA7E2, 0x0440, 0xA7E3, 0x0441, 0xA7E4, 0x0442, + 0xA7E5, 0x0443, 0xA7E6, 0x0444, 0xA7E7, 0x0445, 0xA7E8, 0x0446, 0xA7E9, 0x0447, 0xA7EA, 0x0448, 0xA7EB, 0x0449, 0xA7EC, 0x044A, + 0xA7ED, 0x044B, 0xA7EE, 0x044C, 0xA7EF, 0x044D, 0xA7F0, 0x044E, 0xA7F1, 0x044F, 0xA840, 0x02CA, 0xA841, 0x02CB, 0xA842, 0x02D9, + 0xA843, 0x2013, 0xA844, 0x2015, 0xA845, 0x2025, 0xA846, 0x2035, 0xA847, 0x2105, 0xA848, 0x2109, 0xA849, 0x2196, 0xA84A, 0x2197, + 0xA84B, 0x2198, 0xA84C, 0x2199, 0xA84D, 0x2215, 0xA84E, 0x221F, 0xA84F, 0x2223, 0xA850, 0x2252, 0xA851, 0x2266, 0xA852, 0x2267, + 0xA853, 0x22BF, 0xA854, 0x2550, 0xA855, 0x2551, 0xA856, 0x2552, 0xA857, 0x2553, 0xA858, 0x2554, 0xA859, 0x2555, 0xA85A, 0x2556, + 0xA85B, 0x2557, 0xA85C, 0x2558, 0xA85D, 0x2559, 0xA85E, 0x255A, 0xA85F, 0x255B, 0xA860, 0x255C, 0xA861, 0x255D, 0xA862, 0x255E, + 0xA863, 0x255F, 0xA864, 0x2560, 0xA865, 0x2561, 0xA866, 0x2562, 0xA867, 0x2563, 0xA868, 0x2564, 0xA869, 0x2565, 0xA86A, 0x2566, + 0xA86B, 0x2567, 0xA86C, 0x2568, 0xA86D, 0x2569, 0xA86E, 0x256A, 0xA86F, 0x256B, 0xA870, 0x256C, 0xA871, 0x256D, 0xA872, 0x256E, + 0xA873, 0x256F, 0xA874, 0x2570, 0xA875, 0x2571, 0xA876, 0x2572, 0xA877, 0x2573, 0xA878, 0x2581, 0xA879, 0x2582, 0xA87A, 0x2583, + 0xA87B, 0x2584, 0xA87C, 0x2585, 0xA87D, 0x2586, 0xA87E, 0x2587, 0xA880, 0x2588, 0xA881, 0x2589, 0xA882, 0x258A, 0xA883, 0x258B, + 0xA884, 0x258C, 0xA885, 0x258D, 0xA886, 0x258E, 0xA887, 0x258F, 0xA888, 0x2593, 0xA889, 0x2594, 0xA88A, 0x2595, 0xA88B, 0x25BC, + 0xA88C, 0x25BD, 0xA88D, 0x25E2, 0xA88E, 0x25E3, 0xA88F, 0x25E4, 0xA890, 0x25E5, 0xA891, 0x2609, 0xA892, 0x2295, 0xA893, 0x3012, + 0xA894, 0x301D, 0xA895, 0x301E, 0xA8A1, 0x0101, 0xA8A2, 0x00E1, 0xA8A3, 0x01CE, 0xA8A4, 0x00E0, 0xA8A5, 0x0113, 0xA8A6, 0x00E9, + 0xA8A7, 0x011B, 0xA8A8, 0x00E8, 0xA8A9, 0x012B, 0xA8AA, 0x00ED, 0xA8AB, 0x01D0, 0xA8AC, 0x00EC, 0xA8AD, 0x014D, 0xA8AE, 0x00F3, + 0xA8AF, 0x01D2, 0xA8B0, 0x00F2, 0xA8B1, 0x016B, 0xA8B2, 0x00FA, 0xA8B3, 0x01D4, 0xA8B4, 0x00F9, 0xA8B5, 0x01D6, 0xA8B6, 0x01D8, + 0xA8B7, 0x01DA, 0xA8B8, 0x01DC, 0xA8B9, 0x00FC, 0xA8BA, 0x00EA, 0xA8BB, 0x0251, 0xA8BD, 0x0144, 0xA8BE, 0x0148, 0xA8C0, 0x0261, + 0xA8C5, 0x3105, 0xA8C6, 0x3106, 0xA8C7, 0x3107, 0xA8C8, 0x3108, 0xA8C9, 0x3109, 0xA8CA, 0x310A, 0xA8CB, 0x310B, 0xA8CC, 0x310C, + 0xA8CD, 0x310D, 0xA8CE, 0x310E, 0xA8CF, 0x310F, 0xA8D0, 0x3110, 0xA8D1, 0x3111, 0xA8D2, 0x3112, 0xA8D3, 0x3113, 0xA8D4, 0x3114, + 0xA8D5, 0x3115, 0xA8D6, 0x3116, 0xA8D7, 0x3117, 0xA8D8, 0x3118, 0xA8D9, 0x3119, 0xA8DA, 0x311A, 0xA8DB, 0x311B, 0xA8DC, 0x311C, + 0xA8DD, 0x311D, 0xA8DE, 0x311E, 0xA8DF, 0x311F, 0xA8E0, 0x3120, 0xA8E1, 0x3121, 0xA8E2, 0x3122, 0xA8E3, 0x3123, 0xA8E4, 0x3124, + 0xA8E5, 0x3125, 0xA8E6, 0x3126, 0xA8E7, 0x3127, 0xA8E8, 0x3128, 0xA8E9, 0x3129, 0xA940, 0x3021, 0xA941, 0x3022, 0xA942, 0x3023, + 0xA943, 0x3024, 0xA944, 0x3025, 0xA945, 0x3026, 0xA946, 0x3027, 0xA947, 0x3028, 0xA948, 0x3029, 0xA949, 0x32A3, 0xA94A, 0x338E, + 0xA94B, 0x338F, 0xA94C, 0x339C, 0xA94D, 0x339D, 0xA94E, 0x339E, 0xA94F, 0x33A1, 0xA950, 0x33C4, 0xA951, 0x33CE, 0xA952, 0x33D1, + 0xA953, 0x33D2, 0xA954, 0x33D5, 0xA955, 0xFE30, 0xA956, 0xFFE2, 0xA957, 0xFFE4, 0xA959, 0x2121, 0xA95A, 0x3231, 0xA95C, 0x2010, + 0xA960, 0x30FC, 0xA961, 0x309B, 0xA962, 0x309C, 0xA963, 0x30FD, 0xA964, 0x30FE, 0xA965, 0x3006, 0xA966, 0x309D, 0xA967, 0x309E, + 0xA968, 0xFE49, 0xA969, 0xFE4A, 0xA96A, 0xFE4B, 0xA96B, 0xFE4C, 0xA96C, 0xFE4D, 0xA96D, 0xFE4E, 0xA96E, 0xFE4F, 0xA96F, 0xFE50, + 0xA970, 0xFE51, 0xA971, 0xFE52, 0xA972, 0xFE54, 0xA973, 0xFE55, 0xA974, 0xFE56, 0xA975, 0xFE57, 0xA976, 0xFE59, 0xA977, 0xFE5A, + 0xA978, 0xFE5B, 0xA979, 0xFE5C, 0xA97A, 0xFE5D, 0xA97B, 0xFE5E, 0xA97C, 0xFE5F, 0xA97D, 0xFE60, 0xA97E, 0xFE61, 0xA980, 0xFE62, + 0xA981, 0xFE63, 0xA982, 0xFE64, 0xA983, 0xFE65, 0xA984, 0xFE66, 0xA985, 0xFE68, 0xA986, 0xFE69, 0xA987, 0xFE6A, 0xA988, 0xFE6B, + 0xA996, 0x3007, 0xA9A4, 0x2500, 0xA9A5, 0x2501, 0xA9A6, 0x2502, 0xA9A7, 0x2503, 0xA9A8, 0x2504, 0xA9A9, 0x2505, 0xA9AA, 0x2506, + 0xA9AB, 0x2507, 0xA9AC, 0x2508, 0xA9AD, 0x2509, 0xA9AE, 0x250A, 0xA9AF, 0x250B, 0xA9B0, 0x250C, 0xA9B1, 0x250D, 0xA9B2, 0x250E, + 0xA9B3, 0x250F, 0xA9B4, 0x2510, 0xA9B5, 0x2511, 0xA9B6, 0x2512, 0xA9B7, 0x2513, 0xA9B8, 0x2514, 0xA9B9, 0x2515, 0xA9BA, 0x2516, + 0xA9BB, 0x2517, 0xA9BC, 0x2518, 0xA9BD, 0x2519, 0xA9BE, 0x251A, 0xA9BF, 0x251B, 0xA9C0, 0x251C, 0xA9C1, 0x251D, 0xA9C2, 0x251E, + 0xA9C3, 0x251F, 0xA9C4, 0x2520, 0xA9C5, 0x2521, 0xA9C6, 0x2522, 0xA9C7, 0x2523, 0xA9C8, 0x2524, 0xA9C9, 0x2525, 0xA9CA, 0x2526, + 0xA9CB, 0x2527, 0xA9CC, 0x2528, 0xA9CD, 0x2529, 0xA9CE, 0x252A, 0xA9CF, 0x252B, 0xA9D0, 0x252C, 0xA9D1, 0x252D, 0xA9D2, 0x252E, + 0xA9D3, 0x252F, 0xA9D4, 0x2530, 0xA9D5, 0x2531, 0xA9D6, 0x2532, 0xA9D7, 0x2533, 0xA9D8, 0x2534, 0xA9D9, 0x2535, 0xA9DA, 0x2536, + 0xA9DB, 0x2537, 0xA9DC, 0x2538, 0xA9DD, 0x2539, 0xA9DE, 0x253A, 0xA9DF, 0x253B, 0xA9E0, 0x253C, 0xA9E1, 0x253D, 0xA9E2, 0x253E, + 0xA9E3, 0x253F, 0xA9E4, 0x2540, 0xA9E5, 0x2541, 0xA9E6, 0x2542, 0xA9E7, 0x2543, 0xA9E8, 0x2544, 0xA9E9, 0x2545, 0xA9EA, 0x2546, + 0xA9EB, 0x2547, 0xA9EC, 0x2548, 0xA9ED, 0x2549, 0xA9EE, 0x254A, 0xA9EF, 0x254B, 0xAA40, 0x72DC, 0xAA41, 0x72DD, 0xAA42, 0x72DF, + 0xAA43, 0x72E2, 0xAA44, 0x72E3, 0xAA45, 0x72E4, 0xAA46, 0x72E5, 0xAA47, 0x72E6, 0xAA48, 0x72E7, 0xAA49, 0x72EA, 0xAA4A, 0x72EB, + 0xAA4B, 0x72F5, 0xAA4C, 0x72F6, 0xAA4D, 0x72F9, 0xAA4E, 0x72FD, 0xAA4F, 0x72FE, 0xAA50, 0x72FF, 0xAA51, 0x7300, 0xAA52, 0x7302, + 0xAA53, 0x7304, 0xAA54, 0x7305, 0xAA55, 0x7306, 0xAA56, 0x7307, 0xAA57, 0x7308, 0xAA58, 0x7309, 0xAA59, 0x730B, 0xAA5A, 0x730C, + 0xAA5B, 0x730D, 0xAA5C, 0x730F, 0xAA5D, 0x7310, 0xAA5E, 0x7311, 0xAA5F, 0x7312, 0xAA60, 0x7314, 0xAA61, 0x7318, 0xAA62, 0x7319, + 0xAA63, 0x731A, 0xAA64, 0x731F, 0xAA65, 0x7320, 0xAA66, 0x7323, 0xAA67, 0x7324, 0xAA68, 0x7326, 0xAA69, 0x7327, 0xAA6A, 0x7328, + 0xAA6B, 0x732D, 0xAA6C, 0x732F, 0xAA6D, 0x7330, 0xAA6E, 0x7332, 0xAA6F, 0x7333, 0xAA70, 0x7335, 0xAA71, 0x7336, 0xAA72, 0x733A, + 0xAA73, 0x733B, 0xAA74, 0x733C, 0xAA75, 0x733D, 0xAA76, 0x7340, 0xAA77, 0x7341, 0xAA78, 0x7342, 0xAA79, 0x7343, 0xAA7A, 0x7344, + 0xAA7B, 0x7345, 0xAA7C, 0x7346, 0xAA7D, 0x7347, 0xAA7E, 0x7348, 0xAA80, 0x7349, 0xAA81, 0x734A, 0xAA82, 0x734B, 0xAA83, 0x734C, + 0xAA84, 0x734E, 0xAA85, 0x734F, 0xAA86, 0x7351, 0xAA87, 0x7353, 0xAA88, 0x7354, 0xAA89, 0x7355, 0xAA8A, 0x7356, 0xAA8B, 0x7358, + 0xAA8C, 0x7359, 0xAA8D, 0x735A, 0xAA8E, 0x735B, 0xAA8F, 0x735C, 0xAA90, 0x735D, 0xAA91, 0x735E, 0xAA92, 0x735F, 0xAA93, 0x7361, + 0xAA94, 0x7362, 0xAA95, 0x7363, 0xAA96, 0x7364, 0xAA97, 0x7365, 0xAA98, 0x7366, 0xAA99, 0x7367, 0xAA9A, 0x7368, 0xAA9B, 0x7369, + 0xAA9C, 0x736A, 0xAA9D, 0x736B, 0xAA9E, 0x736E, 0xAA9F, 0x7370, 0xAAA0, 0x7371, 0xAB40, 0x7372, 0xAB41, 0x7373, 0xAB42, 0x7374, + 0xAB43, 0x7375, 0xAB44, 0x7376, 0xAB45, 0x7377, 0xAB46, 0x7378, 0xAB47, 0x7379, 0xAB48, 0x737A, 0xAB49, 0x737B, 0xAB4A, 0x737C, + 0xAB4B, 0x737D, 0xAB4C, 0x737F, 0xAB4D, 0x7380, 0xAB4E, 0x7381, 0xAB4F, 0x7382, 0xAB50, 0x7383, 0xAB51, 0x7385, 0xAB52, 0x7386, + 0xAB53, 0x7388, 0xAB54, 0x738A, 0xAB55, 0x738C, 0xAB56, 0x738D, 0xAB57, 0x738F, 0xAB58, 0x7390, 0xAB59, 0x7392, 0xAB5A, 0x7393, + 0xAB5B, 0x7394, 0xAB5C, 0x7395, 0xAB5D, 0x7397, 0xAB5E, 0x7398, 0xAB5F, 0x7399, 0xAB60, 0x739A, 0xAB61, 0x739C, 0xAB62, 0x739D, + 0xAB63, 0x739E, 0xAB64, 0x73A0, 0xAB65, 0x73A1, 0xAB66, 0x73A3, 0xAB67, 0x73A4, 0xAB68, 0x73A5, 0xAB69, 0x73A6, 0xAB6A, 0x73A7, + 0xAB6B, 0x73A8, 0xAB6C, 0x73AA, 0xAB6D, 0x73AC, 0xAB6E, 0x73AD, 0xAB6F, 0x73B1, 0xAB70, 0x73B4, 0xAB71, 0x73B5, 0xAB72, 0x73B6, + 0xAB73, 0x73B8, 0xAB74, 0x73B9, 0xAB75, 0x73BC, 0xAB76, 0x73BD, 0xAB77, 0x73BE, 0xAB78, 0x73BF, 0xAB79, 0x73C1, 0xAB7A, 0x73C3, + 0xAB7B, 0x73C4, 0xAB7C, 0x73C5, 0xAB7D, 0x73C6, 0xAB7E, 0x73C7, 0xAB80, 0x73CB, 0xAB81, 0x73CC, 0xAB82, 0x73CE, 0xAB83, 0x73D2, + 0xAB84, 0x73D3, 0xAB85, 0x73D4, 0xAB86, 0x73D5, 0xAB87, 0x73D6, 0xAB88, 0x73D7, 0xAB89, 0x73D8, 0xAB8A, 0x73DA, 0xAB8B, 0x73DB, + 0xAB8C, 0x73DC, 0xAB8D, 0x73DD, 0xAB8E, 0x73DF, 0xAB8F, 0x73E1, 0xAB90, 0x73E2, 0xAB91, 0x73E3, 0xAB92, 0x73E4, 0xAB93, 0x73E6, + 0xAB94, 0x73E8, 0xAB95, 0x73EA, 0xAB96, 0x73EB, 0xAB97, 0x73EC, 0xAB98, 0x73EE, 0xAB99, 0x73EF, 0xAB9A, 0x73F0, 0xAB9B, 0x73F1, + 0xAB9C, 0x73F3, 0xAB9D, 0x73F4, 0xAB9E, 0x73F5, 0xAB9F, 0x73F6, 0xABA0, 0x73F7, 0xAC40, 0x73F8, 0xAC41, 0x73F9, 0xAC42, 0x73FA, + 0xAC43, 0x73FB, 0xAC44, 0x73FC, 0xAC45, 0x73FD, 0xAC46, 0x73FE, 0xAC47, 0x73FF, 0xAC48, 0x7400, 0xAC49, 0x7401, 0xAC4A, 0x7402, + 0xAC4B, 0x7404, 0xAC4C, 0x7407, 0xAC4D, 0x7408, 0xAC4E, 0x740B, 0xAC4F, 0x740C, 0xAC50, 0x740D, 0xAC51, 0x740E, 0xAC52, 0x7411, + 0xAC53, 0x7412, 0xAC54, 0x7413, 0xAC55, 0x7414, 0xAC56, 0x7415, 0xAC57, 0x7416, 0xAC58, 0x7417, 0xAC59, 0x7418, 0xAC5A, 0x7419, + 0xAC5B, 0x741C, 0xAC5C, 0x741D, 0xAC5D, 0x741E, 0xAC5E, 0x741F, 0xAC5F, 0x7420, 0xAC60, 0x7421, 0xAC61, 0x7423, 0xAC62, 0x7424, + 0xAC63, 0x7427, 0xAC64, 0x7429, 0xAC65, 0x742B, 0xAC66, 0x742D, 0xAC67, 0x742F, 0xAC68, 0x7431, 0xAC69, 0x7432, 0xAC6A, 0x7437, + 0xAC6B, 0x7438, 0xAC6C, 0x7439, 0xAC6D, 0x743A, 0xAC6E, 0x743B, 0xAC6F, 0x743D, 0xAC70, 0x743E, 0xAC71, 0x743F, 0xAC72, 0x7440, + 0xAC73, 0x7442, 0xAC74, 0x7443, 0xAC75, 0x7444, 0xAC76, 0x7445, 0xAC77, 0x7446, 0xAC78, 0x7447, 0xAC79, 0x7448, 0xAC7A, 0x7449, + 0xAC7B, 0x744A, 0xAC7C, 0x744B, 0xAC7D, 0x744C, 0xAC7E, 0x744D, 0xAC80, 0x744E, 0xAC81, 0x744F, 0xAC82, 0x7450, 0xAC83, 0x7451, + 0xAC84, 0x7452, 0xAC85, 0x7453, 0xAC86, 0x7454, 0xAC87, 0x7456, 0xAC88, 0x7458, 0xAC89, 0x745D, 0xAC8A, 0x7460, 0xAC8B, 0x7461, + 0xAC8C, 0x7462, 0xAC8D, 0x7463, 0xAC8E, 0x7464, 0xAC8F, 0x7465, 0xAC90, 0x7466, 0xAC91, 0x7467, 0xAC92, 0x7468, 0xAC93, 0x7469, + 0xAC94, 0x746A, 0xAC95, 0x746B, 0xAC96, 0x746C, 0xAC97, 0x746E, 0xAC98, 0x746F, 0xAC99, 0x7471, 0xAC9A, 0x7472, 0xAC9B, 0x7473, + 0xAC9C, 0x7474, 0xAC9D, 0x7475, 0xAC9E, 0x7478, 0xAC9F, 0x7479, 0xACA0, 0x747A, 0xAD40, 0x747B, 0xAD41, 0x747C, 0xAD42, 0x747D, + 0xAD43, 0x747F, 0xAD44, 0x7482, 0xAD45, 0x7484, 0xAD46, 0x7485, 0xAD47, 0x7486, 0xAD48, 0x7488, 0xAD49, 0x7489, 0xAD4A, 0x748A, + 0xAD4B, 0x748C, 0xAD4C, 0x748D, 0xAD4D, 0x748F, 0xAD4E, 0x7491, 0xAD4F, 0x7492, 0xAD50, 0x7493, 0xAD51, 0x7494, 0xAD52, 0x7495, + 0xAD53, 0x7496, 0xAD54, 0x7497, 0xAD55, 0x7498, 0xAD56, 0x7499, 0xAD57, 0x749A, 0xAD58, 0x749B, 0xAD59, 0x749D, 0xAD5A, 0x749F, + 0xAD5B, 0x74A0, 0xAD5C, 0x74A1, 0xAD5D, 0x74A2, 0xAD5E, 0x74A3, 0xAD5F, 0x74A4, 0xAD60, 0x74A5, 0xAD61, 0x74A6, 0xAD62, 0x74AA, + 0xAD63, 0x74AB, 0xAD64, 0x74AC, 0xAD65, 0x74AD, 0xAD66, 0x74AE, 0xAD67, 0x74AF, 0xAD68, 0x74B0, 0xAD69, 0x74B1, 0xAD6A, 0x74B2, + 0xAD6B, 0x74B3, 0xAD6C, 0x74B4, 0xAD6D, 0x74B5, 0xAD6E, 0x74B6, 0xAD6F, 0x74B7, 0xAD70, 0x74B8, 0xAD71, 0x74B9, 0xAD72, 0x74BB, + 0xAD73, 0x74BC, 0xAD74, 0x74BD, 0xAD75, 0x74BE, 0xAD76, 0x74BF, 0xAD77, 0x74C0, 0xAD78, 0x74C1, 0xAD79, 0x74C2, 0xAD7A, 0x74C3, + 0xAD7B, 0x74C4, 0xAD7C, 0x74C5, 0xAD7D, 0x74C6, 0xAD7E, 0x74C7, 0xAD80, 0x74C8, 0xAD81, 0x74C9, 0xAD82, 0x74CA, 0xAD83, 0x74CB, + 0xAD84, 0x74CC, 0xAD85, 0x74CD, 0xAD86, 0x74CE, 0xAD87, 0x74CF, 0xAD88, 0x74D0, 0xAD89, 0x74D1, 0xAD8A, 0x74D3, 0xAD8B, 0x74D4, + 0xAD8C, 0x74D5, 0xAD8D, 0x74D6, 0xAD8E, 0x74D7, 0xAD8F, 0x74D8, 0xAD90, 0x74D9, 0xAD91, 0x74DA, 0xAD92, 0x74DB, 0xAD93, 0x74DD, + 0xAD94, 0x74DF, 0xAD95, 0x74E1, 0xAD96, 0x74E5, 0xAD97, 0x74E7, 0xAD98, 0x74E8, 0xAD99, 0x74E9, 0xAD9A, 0x74EA, 0xAD9B, 0x74EB, + 0xAD9C, 0x74EC, 0xAD9D, 0x74ED, 0xAD9E, 0x74F0, 0xAD9F, 0x74F1, 0xADA0, 0x74F2, 0xAE40, 0x74F3, 0xAE41, 0x74F5, 0xAE42, 0x74F8, + 0xAE43, 0x74F9, 0xAE44, 0x74FA, 0xAE45, 0x74FB, 0xAE46, 0x74FC, 0xAE47, 0x74FD, 0xAE48, 0x74FE, 0xAE49, 0x7500, 0xAE4A, 0x7501, + 0xAE4B, 0x7502, 0xAE4C, 0x7503, 0xAE4D, 0x7505, 0xAE4E, 0x7506, 0xAE4F, 0x7507, 0xAE50, 0x7508, 0xAE51, 0x7509, 0xAE52, 0x750A, + 0xAE53, 0x750B, 0xAE54, 0x750C, 0xAE55, 0x750E, 0xAE56, 0x7510, 0xAE57, 0x7512, 0xAE58, 0x7514, 0xAE59, 0x7515, 0xAE5A, 0x7516, + 0xAE5B, 0x7517, 0xAE5C, 0x751B, 0xAE5D, 0x751D, 0xAE5E, 0x751E, 0xAE5F, 0x7520, 0xAE60, 0x7521, 0xAE61, 0x7522, 0xAE62, 0x7523, + 0xAE63, 0x7524, 0xAE64, 0x7526, 0xAE65, 0x7527, 0xAE66, 0x752A, 0xAE67, 0x752E, 0xAE68, 0x7534, 0xAE69, 0x7536, 0xAE6A, 0x7539, + 0xAE6B, 0x753C, 0xAE6C, 0x753D, 0xAE6D, 0x753F, 0xAE6E, 0x7541, 0xAE6F, 0x7542, 0xAE70, 0x7543, 0xAE71, 0x7544, 0xAE72, 0x7546, + 0xAE73, 0x7547, 0xAE74, 0x7549, 0xAE75, 0x754A, 0xAE76, 0x754D, 0xAE77, 0x7550, 0xAE78, 0x7551, 0xAE79, 0x7552, 0xAE7A, 0x7553, + 0xAE7B, 0x7555, 0xAE7C, 0x7556, 0xAE7D, 0x7557, 0xAE7E, 0x7558, 0xAE80, 0x755D, 0xAE81, 0x755E, 0xAE82, 0x755F, 0xAE83, 0x7560, + 0xAE84, 0x7561, 0xAE85, 0x7562, 0xAE86, 0x7563, 0xAE87, 0x7564, 0xAE88, 0x7567, 0xAE89, 0x7568, 0xAE8A, 0x7569, 0xAE8B, 0x756B, + 0xAE8C, 0x756C, 0xAE8D, 0x756D, 0xAE8E, 0x756E, 0xAE8F, 0x756F, 0xAE90, 0x7570, 0xAE91, 0x7571, 0xAE92, 0x7573, 0xAE93, 0x7575, + 0xAE94, 0x7576, 0xAE95, 0x7577, 0xAE96, 0x757A, 0xAE97, 0x757B, 0xAE98, 0x757C, 0xAE99, 0x757D, 0xAE9A, 0x757E, 0xAE9B, 0x7580, + 0xAE9C, 0x7581, 0xAE9D, 0x7582, 0xAE9E, 0x7584, 0xAE9F, 0x7585, 0xAEA0, 0x7587, 0xAF40, 0x7588, 0xAF41, 0x7589, 0xAF42, 0x758A, + 0xAF43, 0x758C, 0xAF44, 0x758D, 0xAF45, 0x758E, 0xAF46, 0x7590, 0xAF47, 0x7593, 0xAF48, 0x7595, 0xAF49, 0x7598, 0xAF4A, 0x759B, + 0xAF4B, 0x759C, 0xAF4C, 0x759E, 0xAF4D, 0x75A2, 0xAF4E, 0x75A6, 0xAF4F, 0x75A7, 0xAF50, 0x75A8, 0xAF51, 0x75A9, 0xAF52, 0x75AA, + 0xAF53, 0x75AD, 0xAF54, 0x75B6, 0xAF55, 0x75B7, 0xAF56, 0x75BA, 0xAF57, 0x75BB, 0xAF58, 0x75BF, 0xAF59, 0x75C0, 0xAF5A, 0x75C1, + 0xAF5B, 0x75C6, 0xAF5C, 0x75CB, 0xAF5D, 0x75CC, 0xAF5E, 0x75CE, 0xAF5F, 0x75CF, 0xAF60, 0x75D0, 0xAF61, 0x75D1, 0xAF62, 0x75D3, + 0xAF63, 0x75D7, 0xAF64, 0x75D9, 0xAF65, 0x75DA, 0xAF66, 0x75DC, 0xAF67, 0x75DD, 0xAF68, 0x75DF, 0xAF69, 0x75E0, 0xAF6A, 0x75E1, + 0xAF6B, 0x75E5, 0xAF6C, 0x75E9, 0xAF6D, 0x75EC, 0xAF6E, 0x75ED, 0xAF6F, 0x75EE, 0xAF70, 0x75EF, 0xAF71, 0x75F2, 0xAF72, 0x75F3, + 0xAF73, 0x75F5, 0xAF74, 0x75F6, 0xAF75, 0x75F7, 0xAF76, 0x75F8, 0xAF77, 0x75FA, 0xAF78, 0x75FB, 0xAF79, 0x75FD, 0xAF7A, 0x75FE, + 0xAF7B, 0x7602, 0xAF7C, 0x7604, 0xAF7D, 0x7606, 0xAF7E, 0x7607, 0xAF80, 0x7608, 0xAF81, 0x7609, 0xAF82, 0x760B, 0xAF83, 0x760D, + 0xAF84, 0x760E, 0xAF85, 0x760F, 0xAF86, 0x7611, 0xAF87, 0x7612, 0xAF88, 0x7613, 0xAF89, 0x7614, 0xAF8A, 0x7616, 0xAF8B, 0x761A, + 0xAF8C, 0x761C, 0xAF8D, 0x761D, 0xAF8E, 0x761E, 0xAF8F, 0x7621, 0xAF90, 0x7623, 0xAF91, 0x7627, 0xAF92, 0x7628, 0xAF93, 0x762C, + 0xAF94, 0x762E, 0xAF95, 0x762F, 0xAF96, 0x7631, 0xAF97, 0x7632, 0xAF98, 0x7636, 0xAF99, 0x7637, 0xAF9A, 0x7639, 0xAF9B, 0x763A, + 0xAF9C, 0x763B, 0xAF9D, 0x763D, 0xAF9E, 0x7641, 0xAF9F, 0x7642, 0xAFA0, 0x7644, 0xB040, 0x7645, 0xB041, 0x7646, 0xB042, 0x7647, + 0xB043, 0x7648, 0xB044, 0x7649, 0xB045, 0x764A, 0xB046, 0x764B, 0xB047, 0x764E, 0xB048, 0x764F, 0xB049, 0x7650, 0xB04A, 0x7651, + 0xB04B, 0x7652, 0xB04C, 0x7653, 0xB04D, 0x7655, 0xB04E, 0x7657, 0xB04F, 0x7658, 0xB050, 0x7659, 0xB051, 0x765A, 0xB052, 0x765B, + 0xB053, 0x765D, 0xB054, 0x765F, 0xB055, 0x7660, 0xB056, 0x7661, 0xB057, 0x7662, 0xB058, 0x7664, 0xB059, 0x7665, 0xB05A, 0x7666, + 0xB05B, 0x7667, 0xB05C, 0x7668, 0xB05D, 0x7669, 0xB05E, 0x766A, 0xB05F, 0x766C, 0xB060, 0x766D, 0xB061, 0x766E, 0xB062, 0x7670, + 0xB063, 0x7671, 0xB064, 0x7672, 0xB065, 0x7673, 0xB066, 0x7674, 0xB067, 0x7675, 0xB068, 0x7676, 0xB069, 0x7677, 0xB06A, 0x7679, + 0xB06B, 0x767A, 0xB06C, 0x767C, 0xB06D, 0x767F, 0xB06E, 0x7680, 0xB06F, 0x7681, 0xB070, 0x7683, 0xB071, 0x7685, 0xB072, 0x7689, + 0xB073, 0x768A, 0xB074, 0x768C, 0xB075, 0x768D, 0xB076, 0x768F, 0xB077, 0x7690, 0xB078, 0x7692, 0xB079, 0x7694, 0xB07A, 0x7695, + 0xB07B, 0x7697, 0xB07C, 0x7698, 0xB07D, 0x769A, 0xB07E, 0x769B, 0xB080, 0x769C, 0xB081, 0x769D, 0xB082, 0x769E, 0xB083, 0x769F, + 0xB084, 0x76A0, 0xB085, 0x76A1, 0xB086, 0x76A2, 0xB087, 0x76A3, 0xB088, 0x76A5, 0xB089, 0x76A6, 0xB08A, 0x76A7, 0xB08B, 0x76A8, + 0xB08C, 0x76A9, 0xB08D, 0x76AA, 0xB08E, 0x76AB, 0xB08F, 0x76AC, 0xB090, 0x76AD, 0xB091, 0x76AF, 0xB092, 0x76B0, 0xB093, 0x76B3, + 0xB094, 0x76B5, 0xB095, 0x76B6, 0xB096, 0x76B7, 0xB097, 0x76B8, 0xB098, 0x76B9, 0xB099, 0x76BA, 0xB09A, 0x76BB, 0xB09B, 0x76BC, + 0xB09C, 0x76BD, 0xB09D, 0x76BE, 0xB09E, 0x76C0, 0xB09F, 0x76C1, 0xB0A0, 0x76C3, 0xB0A1, 0x554A, 0xB0A2, 0x963F, 0xB0A3, 0x57C3, + 0xB0A4, 0x6328, 0xB0A5, 0x54CE, 0xB0A6, 0x5509, 0xB0A7, 0x54C0, 0xB0A8, 0x7691, 0xB0A9, 0x764C, 0xB0AA, 0x853C, 0xB0AB, 0x77EE, + 0xB0AC, 0x827E, 0xB0AD, 0x788D, 0xB0AE, 0x7231, 0xB0AF, 0x9698, 0xB0B0, 0x978D, 0xB0B1, 0x6C28, 0xB0B2, 0x5B89, 0xB0B3, 0x4FFA, + 0xB0B4, 0x6309, 0xB0B5, 0x6697, 0xB0B6, 0x5CB8, 0xB0B7, 0x80FA, 0xB0B8, 0x6848, 0xB0B9, 0x80AE, 0xB0BA, 0x6602, 0xB0BB, 0x76CE, + 0xB0BC, 0x51F9, 0xB0BD, 0x6556, 0xB0BE, 0x71AC, 0xB0BF, 0x7FF1, 0xB0C0, 0x8884, 0xB0C1, 0x50B2, 0xB0C2, 0x5965, 0xB0C3, 0x61CA, + 0xB0C4, 0x6FB3, 0xB0C5, 0x82AD, 0xB0C6, 0x634C, 0xB0C7, 0x6252, 0xB0C8, 0x53ED, 0xB0C9, 0x5427, 0xB0CA, 0x7B06, 0xB0CB, 0x516B, + 0xB0CC, 0x75A4, 0xB0CD, 0x5DF4, 0xB0CE, 0x62D4, 0xB0CF, 0x8DCB, 0xB0D0, 0x9776, 0xB0D1, 0x628A, 0xB0D2, 0x8019, 0xB0D3, 0x575D, + 0xB0D4, 0x9738, 0xB0D5, 0x7F62, 0xB0D6, 0x7238, 0xB0D7, 0x767D, 0xB0D8, 0x67CF, 0xB0D9, 0x767E, 0xB0DA, 0x6446, 0xB0DB, 0x4F70, + 0xB0DC, 0x8D25, 0xB0DD, 0x62DC, 0xB0DE, 0x7A17, 0xB0DF, 0x6591, 0xB0E0, 0x73ED, 0xB0E1, 0x642C, 0xB0E2, 0x6273, 0xB0E3, 0x822C, + 0xB0E4, 0x9881, 0xB0E5, 0x677F, 0xB0E6, 0x7248, 0xB0E7, 0x626E, 0xB0E8, 0x62CC, 0xB0E9, 0x4F34, 0xB0EA, 0x74E3, 0xB0EB, 0x534A, + 0xB0EC, 0x529E, 0xB0ED, 0x7ECA, 0xB0EE, 0x90A6, 0xB0EF, 0x5E2E, 0xB0F0, 0x6886, 0xB0F1, 0x699C, 0xB0F2, 0x8180, 0xB0F3, 0x7ED1, + 0xB0F4, 0x68D2, 0xB0F5, 0x78C5, 0xB0F6, 0x868C, 0xB0F7, 0x9551, 0xB0F8, 0x508D, 0xB0F9, 0x8C24, 0xB0FA, 0x82DE, 0xB0FB, 0x80DE, + 0xB0FC, 0x5305, 0xB0FD, 0x8912, 0xB0FE, 0x5265, 0xB140, 0x76C4, 0xB141, 0x76C7, 0xB142, 0x76C9, 0xB143, 0x76CB, 0xB144, 0x76CC, + 0xB145, 0x76D3, 0xB146, 0x76D5, 0xB147, 0x76D9, 0xB148, 0x76DA, 0xB149, 0x76DC, 0xB14A, 0x76DD, 0xB14B, 0x76DE, 0xB14C, 0x76E0, + 0xB14D, 0x76E1, 0xB14E, 0x76E2, 0xB14F, 0x76E3, 0xB150, 0x76E4, 0xB151, 0x76E6, 0xB152, 0x76E7, 0xB153, 0x76E8, 0xB154, 0x76E9, + 0xB155, 0x76EA, 0xB156, 0x76EB, 0xB157, 0x76EC, 0xB158, 0x76ED, 0xB159, 0x76F0, 0xB15A, 0x76F3, 0xB15B, 0x76F5, 0xB15C, 0x76F6, + 0xB15D, 0x76F7, 0xB15E, 0x76FA, 0xB15F, 0x76FB, 0xB160, 0x76FD, 0xB161, 0x76FF, 0xB162, 0x7700, 0xB163, 0x7702, 0xB164, 0x7703, + 0xB165, 0x7705, 0xB166, 0x7706, 0xB167, 0x770A, 0xB168, 0x770C, 0xB169, 0x770E, 0xB16A, 0x770F, 0xB16B, 0x7710, 0xB16C, 0x7711, + 0xB16D, 0x7712, 0xB16E, 0x7713, 0xB16F, 0x7714, 0xB170, 0x7715, 0xB171, 0x7716, 0xB172, 0x7717, 0xB173, 0x7718, 0xB174, 0x771B, + 0xB175, 0x771C, 0xB176, 0x771D, 0xB177, 0x771E, 0xB178, 0x7721, 0xB179, 0x7723, 0xB17A, 0x7724, 0xB17B, 0x7725, 0xB17C, 0x7727, + 0xB17D, 0x772A, 0xB17E, 0x772B, 0xB180, 0x772C, 0xB181, 0x772E, 0xB182, 0x7730, 0xB183, 0x7731, 0xB184, 0x7732, 0xB185, 0x7733, + 0xB186, 0x7734, 0xB187, 0x7739, 0xB188, 0x773B, 0xB189, 0x773D, 0xB18A, 0x773E, 0xB18B, 0x773F, 0xB18C, 0x7742, 0xB18D, 0x7744, + 0xB18E, 0x7745, 0xB18F, 0x7746, 0xB190, 0x7748, 0xB191, 0x7749, 0xB192, 0x774A, 0xB193, 0x774B, 0xB194, 0x774C, 0xB195, 0x774D, + 0xB196, 0x774E, 0xB197, 0x774F, 0xB198, 0x7752, 0xB199, 0x7753, 0xB19A, 0x7754, 0xB19B, 0x7755, 0xB19C, 0x7756, 0xB19D, 0x7757, + 0xB19E, 0x7758, 0xB19F, 0x7759, 0xB1A0, 0x775C, 0xB1A1, 0x8584, 0xB1A2, 0x96F9, 0xB1A3, 0x4FDD, 0xB1A4, 0x5821, 0xB1A5, 0x9971, + 0xB1A6, 0x5B9D, 0xB1A7, 0x62B1, 0xB1A8, 0x62A5, 0xB1A9, 0x66B4, 0xB1AA, 0x8C79, 0xB1AB, 0x9C8D, 0xB1AC, 0x7206, 0xB1AD, 0x676F, + 0xB1AE, 0x7891, 0xB1AF, 0x60B2, 0xB1B0, 0x5351, 0xB1B1, 0x5317, 0xB1B2, 0x8F88, 0xB1B3, 0x80CC, 0xB1B4, 0x8D1D, 0xB1B5, 0x94A1, + 0xB1B6, 0x500D, 0xB1B7, 0x72C8, 0xB1B8, 0x5907, 0xB1B9, 0x60EB, 0xB1BA, 0x7119, 0xB1BB, 0x88AB, 0xB1BC, 0x5954, 0xB1BD, 0x82EF, + 0xB1BE, 0x672C, 0xB1BF, 0x7B28, 0xB1C0, 0x5D29, 0xB1C1, 0x7EF7, 0xB1C2, 0x752D, 0xB1C3, 0x6CF5, 0xB1C4, 0x8E66, 0xB1C5, 0x8FF8, + 0xB1C6, 0x903C, 0xB1C7, 0x9F3B, 0xB1C8, 0x6BD4, 0xB1C9, 0x9119, 0xB1CA, 0x7B14, 0xB1CB, 0x5F7C, 0xB1CC, 0x78A7, 0xB1CD, 0x84D6, + 0xB1CE, 0x853D, 0xB1CF, 0x6BD5, 0xB1D0, 0x6BD9, 0xB1D1, 0x6BD6, 0xB1D2, 0x5E01, 0xB1D3, 0x5E87, 0xB1D4, 0x75F9, 0xB1D5, 0x95ED, + 0xB1D6, 0x655D, 0xB1D7, 0x5F0A, 0xB1D8, 0x5FC5, 0xB1D9, 0x8F9F, 0xB1DA, 0x58C1, 0xB1DB, 0x81C2, 0xB1DC, 0x907F, 0xB1DD, 0x965B, + 0xB1DE, 0x97AD, 0xB1DF, 0x8FB9, 0xB1E0, 0x7F16, 0xB1E1, 0x8D2C, 0xB1E2, 0x6241, 0xB1E3, 0x4FBF, 0xB1E4, 0x53D8, 0xB1E5, 0x535E, + 0xB1E6, 0x8FA8, 0xB1E7, 0x8FA9, 0xB1E8, 0x8FAB, 0xB1E9, 0x904D, 0xB1EA, 0x6807, 0xB1EB, 0x5F6A, 0xB1EC, 0x8198, 0xB1ED, 0x8868, + 0xB1EE, 0x9CD6, 0xB1EF, 0x618B, 0xB1F0, 0x522B, 0xB1F1, 0x762A, 0xB1F2, 0x5F6C, 0xB1F3, 0x658C, 0xB1F4, 0x6FD2, 0xB1F5, 0x6EE8, + 0xB1F6, 0x5BBE, 0xB1F7, 0x6448, 0xB1F8, 0x5175, 0xB1F9, 0x51B0, 0xB1FA, 0x67C4, 0xB1FB, 0x4E19, 0xB1FC, 0x79C9, 0xB1FD, 0x997C, + 0xB1FE, 0x70B3, 0xB240, 0x775D, 0xB241, 0x775E, 0xB242, 0x775F, 0xB243, 0x7760, 0xB244, 0x7764, 0xB245, 0x7767, 0xB246, 0x7769, + 0xB247, 0x776A, 0xB248, 0x776D, 0xB249, 0x776E, 0xB24A, 0x776F, 0xB24B, 0x7770, 0xB24C, 0x7771, 0xB24D, 0x7772, 0xB24E, 0x7773, + 0xB24F, 0x7774, 0xB250, 0x7775, 0xB251, 0x7776, 0xB252, 0x7777, 0xB253, 0x7778, 0xB254, 0x777A, 0xB255, 0x777B, 0xB256, 0x777C, + 0xB257, 0x7781, 0xB258, 0x7782, 0xB259, 0x7783, 0xB25A, 0x7786, 0xB25B, 0x7787, 0xB25C, 0x7788, 0xB25D, 0x7789, 0xB25E, 0x778A, + 0xB25F, 0x778B, 0xB260, 0x778F, 0xB261, 0x7790, 0xB262, 0x7793, 0xB263, 0x7794, 0xB264, 0x7795, 0xB265, 0x7796, 0xB266, 0x7797, + 0xB267, 0x7798, 0xB268, 0x7799, 0xB269, 0x779A, 0xB26A, 0x779B, 0xB26B, 0x779C, 0xB26C, 0x779D, 0xB26D, 0x779E, 0xB26E, 0x77A1, + 0xB26F, 0x77A3, 0xB270, 0x77A4, 0xB271, 0x77A6, 0xB272, 0x77A8, 0xB273, 0x77AB, 0xB274, 0x77AD, 0xB275, 0x77AE, 0xB276, 0x77AF, + 0xB277, 0x77B1, 0xB278, 0x77B2, 0xB279, 0x77B4, 0xB27A, 0x77B6, 0xB27B, 0x77B7, 0xB27C, 0x77B8, 0xB27D, 0x77B9, 0xB27E, 0x77BA, + 0xB280, 0x77BC, 0xB281, 0x77BE, 0xB282, 0x77C0, 0xB283, 0x77C1, 0xB284, 0x77C2, 0xB285, 0x77C3, 0xB286, 0x77C4, 0xB287, 0x77C5, + 0xB288, 0x77C6, 0xB289, 0x77C7, 0xB28A, 0x77C8, 0xB28B, 0x77C9, 0xB28C, 0x77CA, 0xB28D, 0x77CB, 0xB28E, 0x77CC, 0xB28F, 0x77CE, + 0xB290, 0x77CF, 0xB291, 0x77D0, 0xB292, 0x77D1, 0xB293, 0x77D2, 0xB294, 0x77D3, 0xB295, 0x77D4, 0xB296, 0x77D5, 0xB297, 0x77D6, + 0xB298, 0x77D8, 0xB299, 0x77D9, 0xB29A, 0x77DA, 0xB29B, 0x77DD, 0xB29C, 0x77DE, 0xB29D, 0x77DF, 0xB29E, 0x77E0, 0xB29F, 0x77E1, + 0xB2A0, 0x77E4, 0xB2A1, 0x75C5, 0xB2A2, 0x5E76, 0xB2A3, 0x73BB, 0xB2A4, 0x83E0, 0xB2A5, 0x64AD, 0xB2A6, 0x62E8, 0xB2A7, 0x94B5, + 0xB2A8, 0x6CE2, 0xB2A9, 0x535A, 0xB2AA, 0x52C3, 0xB2AB, 0x640F, 0xB2AC, 0x94C2, 0xB2AD, 0x7B94, 0xB2AE, 0x4F2F, 0xB2AF, 0x5E1B, + 0xB2B0, 0x8236, 0xB2B1, 0x8116, 0xB2B2, 0x818A, 0xB2B3, 0x6E24, 0xB2B4, 0x6CCA, 0xB2B5, 0x9A73, 0xB2B6, 0x6355, 0xB2B7, 0x535C, + 0xB2B8, 0x54FA, 0xB2B9, 0x8865, 0xB2BA, 0x57E0, 0xB2BB, 0x4E0D, 0xB2BC, 0x5E03, 0xB2BD, 0x6B65, 0xB2BE, 0x7C3F, 0xB2BF, 0x90E8, + 0xB2C0, 0x6016, 0xB2C1, 0x64E6, 0xB2C2, 0x731C, 0xB2C3, 0x88C1, 0xB2C4, 0x6750, 0xB2C5, 0x624D, 0xB2C6, 0x8D22, 0xB2C7, 0x776C, + 0xB2C8, 0x8E29, 0xB2C9, 0x91C7, 0xB2CA, 0x5F69, 0xB2CB, 0x83DC, 0xB2CC, 0x8521, 0xB2CD, 0x9910, 0xB2CE, 0x53C2, 0xB2CF, 0x8695, + 0xB2D0, 0x6B8B, 0xB2D1, 0x60ED, 0xB2D2, 0x60E8, 0xB2D3, 0x707F, 0xB2D4, 0x82CD, 0xB2D5, 0x8231, 0xB2D6, 0x4ED3, 0xB2D7, 0x6CA7, + 0xB2D8, 0x85CF, 0xB2D9, 0x64CD, 0xB2DA, 0x7CD9, 0xB2DB, 0x69FD, 0xB2DC, 0x66F9, 0xB2DD, 0x8349, 0xB2DE, 0x5395, 0xB2DF, 0x7B56, + 0xB2E0, 0x4FA7, 0xB2E1, 0x518C, 0xB2E2, 0x6D4B, 0xB2E3, 0x5C42, 0xB2E4, 0x8E6D, 0xB2E5, 0x63D2, 0xB2E6, 0x53C9, 0xB2E7, 0x832C, + 0xB2E8, 0x8336, 0xB2E9, 0x67E5, 0xB2EA, 0x78B4, 0xB2EB, 0x643D, 0xB2EC, 0x5BDF, 0xB2ED, 0x5C94, 0xB2EE, 0x5DEE, 0xB2EF, 0x8BE7, + 0xB2F0, 0x62C6, 0xB2F1, 0x67F4, 0xB2F2, 0x8C7A, 0xB2F3, 0x6400, 0xB2F4, 0x63BA, 0xB2F5, 0x8749, 0xB2F6, 0x998B, 0xB2F7, 0x8C17, + 0xB2F8, 0x7F20, 0xB2F9, 0x94F2, 0xB2FA, 0x4EA7, 0xB2FB, 0x9610, 0xB2FC, 0x98A4, 0xB2FD, 0x660C, 0xB2FE, 0x7316, 0xB340, 0x77E6, + 0xB341, 0x77E8, 0xB342, 0x77EA, 0xB343, 0x77EF, 0xB344, 0x77F0, 0xB345, 0x77F1, 0xB346, 0x77F2, 0xB347, 0x77F4, 0xB348, 0x77F5, + 0xB349, 0x77F7, 0xB34A, 0x77F9, 0xB34B, 0x77FA, 0xB34C, 0x77FB, 0xB34D, 0x77FC, 0xB34E, 0x7803, 0xB34F, 0x7804, 0xB350, 0x7805, + 0xB351, 0x7806, 0xB352, 0x7807, 0xB353, 0x7808, 0xB354, 0x780A, 0xB355, 0x780B, 0xB356, 0x780E, 0xB357, 0x780F, 0xB358, 0x7810, + 0xB359, 0x7813, 0xB35A, 0x7815, 0xB35B, 0x7819, 0xB35C, 0x781B, 0xB35D, 0x781E, 0xB35E, 0x7820, 0xB35F, 0x7821, 0xB360, 0x7822, + 0xB361, 0x7824, 0xB362, 0x7828, 0xB363, 0x782A, 0xB364, 0x782B, 0xB365, 0x782E, 0xB366, 0x782F, 0xB367, 0x7831, 0xB368, 0x7832, + 0xB369, 0x7833, 0xB36A, 0x7835, 0xB36B, 0x7836, 0xB36C, 0x783D, 0xB36D, 0x783F, 0xB36E, 0x7841, 0xB36F, 0x7842, 0xB370, 0x7843, + 0xB371, 0x7844, 0xB372, 0x7846, 0xB373, 0x7848, 0xB374, 0x7849, 0xB375, 0x784A, 0xB376, 0x784B, 0xB377, 0x784D, 0xB378, 0x784F, + 0xB379, 0x7851, 0xB37A, 0x7853, 0xB37B, 0x7854, 0xB37C, 0x7858, 0xB37D, 0x7859, 0xB37E, 0x785A, 0xB380, 0x785B, 0xB381, 0x785C, + 0xB382, 0x785E, 0xB383, 0x785F, 0xB384, 0x7860, 0xB385, 0x7861, 0xB386, 0x7862, 0xB387, 0x7863, 0xB388, 0x7864, 0xB389, 0x7865, + 0xB38A, 0x7866, 0xB38B, 0x7867, 0xB38C, 0x7868, 0xB38D, 0x7869, 0xB38E, 0x786F, 0xB38F, 0x7870, 0xB390, 0x7871, 0xB391, 0x7872, + 0xB392, 0x7873, 0xB393, 0x7874, 0xB394, 0x7875, 0xB395, 0x7876, 0xB396, 0x7878, 0xB397, 0x7879, 0xB398, 0x787A, 0xB399, 0x787B, + 0xB39A, 0x787D, 0xB39B, 0x787E, 0xB39C, 0x787F, 0xB39D, 0x7880, 0xB39E, 0x7881, 0xB39F, 0x7882, 0xB3A0, 0x7883, 0xB3A1, 0x573A, + 0xB3A2, 0x5C1D, 0xB3A3, 0x5E38, 0xB3A4, 0x957F, 0xB3A5, 0x507F, 0xB3A6, 0x80A0, 0xB3A7, 0x5382, 0xB3A8, 0x655E, 0xB3A9, 0x7545, + 0xB3AA, 0x5531, 0xB3AB, 0x5021, 0xB3AC, 0x8D85, 0xB3AD, 0x6284, 0xB3AE, 0x949E, 0xB3AF, 0x671D, 0xB3B0, 0x5632, 0xB3B1, 0x6F6E, + 0xB3B2, 0x5DE2, 0xB3B3, 0x5435, 0xB3B4, 0x7092, 0xB3B5, 0x8F66, 0xB3B6, 0x626F, 0xB3B7, 0x64A4, 0xB3B8, 0x63A3, 0xB3B9, 0x5F7B, + 0xB3BA, 0x6F88, 0xB3BB, 0x90F4, 0xB3BC, 0x81E3, 0xB3BD, 0x8FB0, 0xB3BE, 0x5C18, 0xB3BF, 0x6668, 0xB3C0, 0x5FF1, 0xB3C1, 0x6C89, + 0xB3C2, 0x9648, 0xB3C3, 0x8D81, 0xB3C4, 0x886C, 0xB3C5, 0x6491, 0xB3C6, 0x79F0, 0xB3C7, 0x57CE, 0xB3C8, 0x6A59, 0xB3C9, 0x6210, + 0xB3CA, 0x5448, 0xB3CB, 0x4E58, 0xB3CC, 0x7A0B, 0xB3CD, 0x60E9, 0xB3CE, 0x6F84, 0xB3CF, 0x8BDA, 0xB3D0, 0x627F, 0xB3D1, 0x901E, + 0xB3D2, 0x9A8B, 0xB3D3, 0x79E4, 0xB3D4, 0x5403, 0xB3D5, 0x75F4, 0xB3D6, 0x6301, 0xB3D7, 0x5319, 0xB3D8, 0x6C60, 0xB3D9, 0x8FDF, + 0xB3DA, 0x5F1B, 0xB3DB, 0x9A70, 0xB3DC, 0x803B, 0xB3DD, 0x9F7F, 0xB3DE, 0x4F88, 0xB3DF, 0x5C3A, 0xB3E0, 0x8D64, 0xB3E1, 0x7FC5, + 0xB3E2, 0x65A5, 0xB3E3, 0x70BD, 0xB3E4, 0x5145, 0xB3E5, 0x51B2, 0xB3E6, 0x866B, 0xB3E7, 0x5D07, 0xB3E8, 0x5BA0, 0xB3E9, 0x62BD, + 0xB3EA, 0x916C, 0xB3EB, 0x7574, 0xB3EC, 0x8E0C, 0xB3ED, 0x7A20, 0xB3EE, 0x6101, 0xB3EF, 0x7B79, 0xB3F0, 0x4EC7, 0xB3F1, 0x7EF8, + 0xB3F2, 0x7785, 0xB3F3, 0x4E11, 0xB3F4, 0x81ED, 0xB3F5, 0x521D, 0xB3F6, 0x51FA, 0xB3F7, 0x6A71, 0xB3F8, 0x53A8, 0xB3F9, 0x8E87, + 0xB3FA, 0x9504, 0xB3FB, 0x96CF, 0xB3FC, 0x6EC1, 0xB3FD, 0x9664, 0xB3FE, 0x695A, 0xB440, 0x7884, 0xB441, 0x7885, 0xB442, 0x7886, + 0xB443, 0x7888, 0xB444, 0x788A, 0xB445, 0x788B, 0xB446, 0x788F, 0xB447, 0x7890, 0xB448, 0x7892, 0xB449, 0x7894, 0xB44A, 0x7895, + 0xB44B, 0x7896, 0xB44C, 0x7899, 0xB44D, 0x789D, 0xB44E, 0x789E, 0xB44F, 0x78A0, 0xB450, 0x78A2, 0xB451, 0x78A4, 0xB452, 0x78A6, + 0xB453, 0x78A8, 0xB454, 0x78A9, 0xB455, 0x78AA, 0xB456, 0x78AB, 0xB457, 0x78AC, 0xB458, 0x78AD, 0xB459, 0x78AE, 0xB45A, 0x78AF, + 0xB45B, 0x78B5, 0xB45C, 0x78B6, 0xB45D, 0x78B7, 0xB45E, 0x78B8, 0xB45F, 0x78BA, 0xB460, 0x78BB, 0xB461, 0x78BC, 0xB462, 0x78BD, + 0xB463, 0x78BF, 0xB464, 0x78C0, 0xB465, 0x78C2, 0xB466, 0x78C3, 0xB467, 0x78C4, 0xB468, 0x78C6, 0xB469, 0x78C7, 0xB46A, 0x78C8, + 0xB46B, 0x78CC, 0xB46C, 0x78CD, 0xB46D, 0x78CE, 0xB46E, 0x78CF, 0xB46F, 0x78D1, 0xB470, 0x78D2, 0xB471, 0x78D3, 0xB472, 0x78D6, + 0xB473, 0x78D7, 0xB474, 0x78D8, 0xB475, 0x78DA, 0xB476, 0x78DB, 0xB477, 0x78DC, 0xB478, 0x78DD, 0xB479, 0x78DE, 0xB47A, 0x78DF, + 0xB47B, 0x78E0, 0xB47C, 0x78E1, 0xB47D, 0x78E2, 0xB47E, 0x78E3, 0xB480, 0x78E4, 0xB481, 0x78E5, 0xB482, 0x78E6, 0xB483, 0x78E7, + 0xB484, 0x78E9, 0xB485, 0x78EA, 0xB486, 0x78EB, 0xB487, 0x78ED, 0xB488, 0x78EE, 0xB489, 0x78EF, 0xB48A, 0x78F0, 0xB48B, 0x78F1, + 0xB48C, 0x78F3, 0xB48D, 0x78F5, 0xB48E, 0x78F6, 0xB48F, 0x78F8, 0xB490, 0x78F9, 0xB491, 0x78FB, 0xB492, 0x78FC, 0xB493, 0x78FD, + 0xB494, 0x78FE, 0xB495, 0x78FF, 0xB496, 0x7900, 0xB497, 0x7902, 0xB498, 0x7903, 0xB499, 0x7904, 0xB49A, 0x7906, 0xB49B, 0x7907, + 0xB49C, 0x7908, 0xB49D, 0x7909, 0xB49E, 0x790A, 0xB49F, 0x790B, 0xB4A0, 0x790C, 0xB4A1, 0x7840, 0xB4A2, 0x50A8, 0xB4A3, 0x77D7, + 0xB4A4, 0x6410, 0xB4A5, 0x89E6, 0xB4A6, 0x5904, 0xB4A7, 0x63E3, 0xB4A8, 0x5DDD, 0xB4A9, 0x7A7F, 0xB4AA, 0x693D, 0xB4AB, 0x4F20, + 0xB4AC, 0x8239, 0xB4AD, 0x5598, 0xB4AE, 0x4E32, 0xB4AF, 0x75AE, 0xB4B0, 0x7A97, 0xB4B1, 0x5E62, 0xB4B2, 0x5E8A, 0xB4B3, 0x95EF, + 0xB4B4, 0x521B, 0xB4B5, 0x5439, 0xB4B6, 0x708A, 0xB4B7, 0x6376, 0xB4B8, 0x9524, 0xB4B9, 0x5782, 0xB4BA, 0x6625, 0xB4BB, 0x693F, + 0xB4BC, 0x9187, 0xB4BD, 0x5507, 0xB4BE, 0x6DF3, 0xB4BF, 0x7EAF, 0xB4C0, 0x8822, 0xB4C1, 0x6233, 0xB4C2, 0x7EF0, 0xB4C3, 0x75B5, + 0xB4C4, 0x8328, 0xB4C5, 0x78C1, 0xB4C6, 0x96CC, 0xB4C7, 0x8F9E, 0xB4C8, 0x6148, 0xB4C9, 0x74F7, 0xB4CA, 0x8BCD, 0xB4CB, 0x6B64, + 0xB4CC, 0x523A, 0xB4CD, 0x8D50, 0xB4CE, 0x6B21, 0xB4CF, 0x806A, 0xB4D0, 0x8471, 0xB4D1, 0x56F1, 0xB4D2, 0x5306, 0xB4D3, 0x4ECE, + 0xB4D4, 0x4E1B, 0xB4D5, 0x51D1, 0xB4D6, 0x7C97, 0xB4D7, 0x918B, 0xB4D8, 0x7C07, 0xB4D9, 0x4FC3, 0xB4DA, 0x8E7F, 0xB4DB, 0x7BE1, + 0xB4DC, 0x7A9C, 0xB4DD, 0x6467, 0xB4DE, 0x5D14, 0xB4DF, 0x50AC, 0xB4E0, 0x8106, 0xB4E1, 0x7601, 0xB4E2, 0x7CB9, 0xB4E3, 0x6DEC, + 0xB4E4, 0x7FE0, 0xB4E5, 0x6751, 0xB4E6, 0x5B58, 0xB4E7, 0x5BF8, 0xB4E8, 0x78CB, 0xB4E9, 0x64AE, 0xB4EA, 0x6413, 0xB4EB, 0x63AA, + 0xB4EC, 0x632B, 0xB4ED, 0x9519, 0xB4EE, 0x642D, 0xB4EF, 0x8FBE, 0xB4F0, 0x7B54, 0xB4F1, 0x7629, 0xB4F2, 0x6253, 0xB4F3, 0x5927, + 0xB4F4, 0x5446, 0xB4F5, 0x6B79, 0xB4F6, 0x50A3, 0xB4F7, 0x6234, 0xB4F8, 0x5E26, 0xB4F9, 0x6B86, 0xB4FA, 0x4EE3, 0xB4FB, 0x8D37, + 0xB4FC, 0x888B, 0xB4FD, 0x5F85, 0xB4FE, 0x902E, 0xB540, 0x790D, 0xB541, 0x790E, 0xB542, 0x790F, 0xB543, 0x7910, 0xB544, 0x7911, + 0xB545, 0x7912, 0xB546, 0x7914, 0xB547, 0x7915, 0xB548, 0x7916, 0xB549, 0x7917, 0xB54A, 0x7918, 0xB54B, 0x7919, 0xB54C, 0x791A, + 0xB54D, 0x791B, 0xB54E, 0x791C, 0xB54F, 0x791D, 0xB550, 0x791F, 0xB551, 0x7920, 0xB552, 0x7921, 0xB553, 0x7922, 0xB554, 0x7923, + 0xB555, 0x7925, 0xB556, 0x7926, 0xB557, 0x7927, 0xB558, 0x7928, 0xB559, 0x7929, 0xB55A, 0x792A, 0xB55B, 0x792B, 0xB55C, 0x792C, + 0xB55D, 0x792D, 0xB55E, 0x792E, 0xB55F, 0x792F, 0xB560, 0x7930, 0xB561, 0x7931, 0xB562, 0x7932, 0xB563, 0x7933, 0xB564, 0x7935, + 0xB565, 0x7936, 0xB566, 0x7937, 0xB567, 0x7938, 0xB568, 0x7939, 0xB569, 0x793D, 0xB56A, 0x793F, 0xB56B, 0x7942, 0xB56C, 0x7943, + 0xB56D, 0x7944, 0xB56E, 0x7945, 0xB56F, 0x7947, 0xB570, 0x794A, 0xB571, 0x794B, 0xB572, 0x794C, 0xB573, 0x794D, 0xB574, 0x794E, + 0xB575, 0x794F, 0xB576, 0x7950, 0xB577, 0x7951, 0xB578, 0x7952, 0xB579, 0x7954, 0xB57A, 0x7955, 0xB57B, 0x7958, 0xB57C, 0x7959, + 0xB57D, 0x7961, 0xB57E, 0x7963, 0xB580, 0x7964, 0xB581, 0x7966, 0xB582, 0x7969, 0xB583, 0x796A, 0xB584, 0x796B, 0xB585, 0x796C, + 0xB586, 0x796E, 0xB587, 0x7970, 0xB588, 0x7971, 0xB589, 0x7972, 0xB58A, 0x7973, 0xB58B, 0x7974, 0xB58C, 0x7975, 0xB58D, 0x7976, + 0xB58E, 0x7979, 0xB58F, 0x797B, 0xB590, 0x797C, 0xB591, 0x797D, 0xB592, 0x797E, 0xB593, 0x797F, 0xB594, 0x7982, 0xB595, 0x7983, + 0xB596, 0x7986, 0xB597, 0x7987, 0xB598, 0x7988, 0xB599, 0x7989, 0xB59A, 0x798B, 0xB59B, 0x798C, 0xB59C, 0x798D, 0xB59D, 0x798E, + 0xB59E, 0x7990, 0xB59F, 0x7991, 0xB5A0, 0x7992, 0xB5A1, 0x6020, 0xB5A2, 0x803D, 0xB5A3, 0x62C5, 0xB5A4, 0x4E39, 0xB5A5, 0x5355, + 0xB5A6, 0x90F8, 0xB5A7, 0x63B8, 0xB5A8, 0x80C6, 0xB5A9, 0x65E6, 0xB5AA, 0x6C2E, 0xB5AB, 0x4F46, 0xB5AC, 0x60EE, 0xB5AD, 0x6DE1, + 0xB5AE, 0x8BDE, 0xB5AF, 0x5F39, 0xB5B0, 0x86CB, 0xB5B1, 0x5F53, 0xB5B2, 0x6321, 0xB5B3, 0x515A, 0xB5B4, 0x8361, 0xB5B5, 0x6863, + 0xB5B6, 0x5200, 0xB5B7, 0x6363, 0xB5B8, 0x8E48, 0xB5B9, 0x5012, 0xB5BA, 0x5C9B, 0xB5BB, 0x7977, 0xB5BC, 0x5BFC, 0xB5BD, 0x5230, + 0xB5BE, 0x7A3B, 0xB5BF, 0x60BC, 0xB5C0, 0x9053, 0xB5C1, 0x76D7, 0xB5C2, 0x5FB7, 0xB5C3, 0x5F97, 0xB5C4, 0x7684, 0xB5C5, 0x8E6C, + 0xB5C6, 0x706F, 0xB5C7, 0x767B, 0xB5C8, 0x7B49, 0xB5C9, 0x77AA, 0xB5CA, 0x51F3, 0xB5CB, 0x9093, 0xB5CC, 0x5824, 0xB5CD, 0x4F4E, + 0xB5CE, 0x6EF4, 0xB5CF, 0x8FEA, 0xB5D0, 0x654C, 0xB5D1, 0x7B1B, 0xB5D2, 0x72C4, 0xB5D3, 0x6DA4, 0xB5D4, 0x7FDF, 0xB5D5, 0x5AE1, + 0xB5D6, 0x62B5, 0xB5D7, 0x5E95, 0xB5D8, 0x5730, 0xB5D9, 0x8482, 0xB5DA, 0x7B2C, 0xB5DB, 0x5E1D, 0xB5DC, 0x5F1F, 0xB5DD, 0x9012, + 0xB5DE, 0x7F14, 0xB5DF, 0x98A0, 0xB5E0, 0x6382, 0xB5E1, 0x6EC7, 0xB5E2, 0x7898, 0xB5E3, 0x70B9, 0xB5E4, 0x5178, 0xB5E5, 0x975B, + 0xB5E6, 0x57AB, 0xB5E7, 0x7535, 0xB5E8, 0x4F43, 0xB5E9, 0x7538, 0xB5EA, 0x5E97, 0xB5EB, 0x60E6, 0xB5EC, 0x5960, 0xB5ED, 0x6DC0, + 0xB5EE, 0x6BBF, 0xB5EF, 0x7889, 0xB5F0, 0x53FC, 0xB5F1, 0x96D5, 0xB5F2, 0x51CB, 0xB5F3, 0x5201, 0xB5F4, 0x6389, 0xB5F5, 0x540A, + 0xB5F6, 0x9493, 0xB5F7, 0x8C03, 0xB5F8, 0x8DCC, 0xB5F9, 0x7239, 0xB5FA, 0x789F, 0xB5FB, 0x8776, 0xB5FC, 0x8FED, 0xB5FD, 0x8C0D, + 0xB5FE, 0x53E0, 0xB640, 0x7993, 0xB641, 0x7994, 0xB642, 0x7995, 0xB643, 0x7996, 0xB644, 0x7997, 0xB645, 0x7998, 0xB646, 0x7999, + 0xB647, 0x799B, 0xB648, 0x799C, 0xB649, 0x799D, 0xB64A, 0x799E, 0xB64B, 0x799F, 0xB64C, 0x79A0, 0xB64D, 0x79A1, 0xB64E, 0x79A2, + 0xB64F, 0x79A3, 0xB650, 0x79A4, 0xB651, 0x79A5, 0xB652, 0x79A6, 0xB653, 0x79A8, 0xB654, 0x79A9, 0xB655, 0x79AA, 0xB656, 0x79AB, + 0xB657, 0x79AC, 0xB658, 0x79AD, 0xB659, 0x79AE, 0xB65A, 0x79AF, 0xB65B, 0x79B0, 0xB65C, 0x79B1, 0xB65D, 0x79B2, 0xB65E, 0x79B4, + 0xB65F, 0x79B5, 0xB660, 0x79B6, 0xB661, 0x79B7, 0xB662, 0x79B8, 0xB663, 0x79BC, 0xB664, 0x79BF, 0xB665, 0x79C2, 0xB666, 0x79C4, + 0xB667, 0x79C5, 0xB668, 0x79C7, 0xB669, 0x79C8, 0xB66A, 0x79CA, 0xB66B, 0x79CC, 0xB66C, 0x79CE, 0xB66D, 0x79CF, 0xB66E, 0x79D0, + 0xB66F, 0x79D3, 0xB670, 0x79D4, 0xB671, 0x79D6, 0xB672, 0x79D7, 0xB673, 0x79D9, 0xB674, 0x79DA, 0xB675, 0x79DB, 0xB676, 0x79DC, + 0xB677, 0x79DD, 0xB678, 0x79DE, 0xB679, 0x79E0, 0xB67A, 0x79E1, 0xB67B, 0x79E2, 0xB67C, 0x79E5, 0xB67D, 0x79E8, 0xB67E, 0x79EA, + 0xB680, 0x79EC, 0xB681, 0x79EE, 0xB682, 0x79F1, 0xB683, 0x79F2, 0xB684, 0x79F3, 0xB685, 0x79F4, 0xB686, 0x79F5, 0xB687, 0x79F6, + 0xB688, 0x79F7, 0xB689, 0x79F9, 0xB68A, 0x79FA, 0xB68B, 0x79FC, 0xB68C, 0x79FE, 0xB68D, 0x79FF, 0xB68E, 0x7A01, 0xB68F, 0x7A04, + 0xB690, 0x7A05, 0xB691, 0x7A07, 0xB692, 0x7A08, 0xB693, 0x7A09, 0xB694, 0x7A0A, 0xB695, 0x7A0C, 0xB696, 0x7A0F, 0xB697, 0x7A10, + 0xB698, 0x7A11, 0xB699, 0x7A12, 0xB69A, 0x7A13, 0xB69B, 0x7A15, 0xB69C, 0x7A16, 0xB69D, 0x7A18, 0xB69E, 0x7A19, 0xB69F, 0x7A1B, + 0xB6A0, 0x7A1C, 0xB6A1, 0x4E01, 0xB6A2, 0x76EF, 0xB6A3, 0x53EE, 0xB6A4, 0x9489, 0xB6A5, 0x9876, 0xB6A6, 0x9F0E, 0xB6A7, 0x952D, + 0xB6A8, 0x5B9A, 0xB6A9, 0x8BA2, 0xB6AA, 0x4E22, 0xB6AB, 0x4E1C, 0xB6AC, 0x51AC, 0xB6AD, 0x8463, 0xB6AE, 0x61C2, 0xB6AF, 0x52A8, + 0xB6B0, 0x680B, 0xB6B1, 0x4F97, 0xB6B2, 0x606B, 0xB6B3, 0x51BB, 0xB6B4, 0x6D1E, 0xB6B5, 0x515C, 0xB6B6, 0x6296, 0xB6B7, 0x6597, + 0xB6B8, 0x9661, 0xB6B9, 0x8C46, 0xB6BA, 0x9017, 0xB6BB, 0x75D8, 0xB6BC, 0x90FD, 0xB6BD, 0x7763, 0xB6BE, 0x6BD2, 0xB6BF, 0x728A, + 0xB6C0, 0x72EC, 0xB6C1, 0x8BFB, 0xB6C2, 0x5835, 0xB6C3, 0x7779, 0xB6C4, 0x8D4C, 0xB6C5, 0x675C, 0xB6C6, 0x9540, 0xB6C7, 0x809A, + 0xB6C8, 0x5EA6, 0xB6C9, 0x6E21, 0xB6CA, 0x5992, 0xB6CB, 0x7AEF, 0xB6CC, 0x77ED, 0xB6CD, 0x953B, 0xB6CE, 0x6BB5, 0xB6CF, 0x65AD, + 0xB6D0, 0x7F0E, 0xB6D1, 0x5806, 0xB6D2, 0x5151, 0xB6D3, 0x961F, 0xB6D4, 0x5BF9, 0xB6D5, 0x58A9, 0xB6D6, 0x5428, 0xB6D7, 0x8E72, + 0xB6D8, 0x6566, 0xB6D9, 0x987F, 0xB6DA, 0x56E4, 0xB6DB, 0x949D, 0xB6DC, 0x76FE, 0xB6DD, 0x9041, 0xB6DE, 0x6387, 0xB6DF, 0x54C6, + 0xB6E0, 0x591A, 0xB6E1, 0x593A, 0xB6E2, 0x579B, 0xB6E3, 0x8EB2, 0xB6E4, 0x6735, 0xB6E5, 0x8DFA, 0xB6E6, 0x8235, 0xB6E7, 0x5241, + 0xB6E8, 0x60F0, 0xB6E9, 0x5815, 0xB6EA, 0x86FE, 0xB6EB, 0x5CE8, 0xB6EC, 0x9E45, 0xB6ED, 0x4FC4, 0xB6EE, 0x989D, 0xB6EF, 0x8BB9, + 0xB6F0, 0x5A25, 0xB6F1, 0x6076, 0xB6F2, 0x5384, 0xB6F3, 0x627C, 0xB6F4, 0x904F, 0xB6F5, 0x9102, 0xB6F6, 0x997F, 0xB6F7, 0x6069, + 0xB6F8, 0x800C, 0xB6F9, 0x513F, 0xB6FA, 0x8033, 0xB6FB, 0x5C14, 0xB6FC, 0x9975, 0xB6FD, 0x6D31, 0xB6FE, 0x4E8C, 0xB740, 0x7A1D, + 0xB741, 0x7A1F, 0xB742, 0x7A21, 0xB743, 0x7A22, 0xB744, 0x7A24, 0xB745, 0x7A25, 0xB746, 0x7A26, 0xB747, 0x7A27, 0xB748, 0x7A28, + 0xB749, 0x7A29, 0xB74A, 0x7A2A, 0xB74B, 0x7A2B, 0xB74C, 0x7A2C, 0xB74D, 0x7A2D, 0xB74E, 0x7A2E, 0xB74F, 0x7A2F, 0xB750, 0x7A30, + 0xB751, 0x7A31, 0xB752, 0x7A32, 0xB753, 0x7A34, 0xB754, 0x7A35, 0xB755, 0x7A36, 0xB756, 0x7A38, 0xB757, 0x7A3A, 0xB758, 0x7A3E, + 0xB759, 0x7A40, 0xB75A, 0x7A41, 0xB75B, 0x7A42, 0xB75C, 0x7A43, 0xB75D, 0x7A44, 0xB75E, 0x7A45, 0xB75F, 0x7A47, 0xB760, 0x7A48, + 0xB761, 0x7A49, 0xB762, 0x7A4A, 0xB763, 0x7A4B, 0xB764, 0x7A4C, 0xB765, 0x7A4D, 0xB766, 0x7A4E, 0xB767, 0x7A4F, 0xB768, 0x7A50, + 0xB769, 0x7A52, 0xB76A, 0x7A53, 0xB76B, 0x7A54, 0xB76C, 0x7A55, 0xB76D, 0x7A56, 0xB76E, 0x7A58, 0xB76F, 0x7A59, 0xB770, 0x7A5A, + 0xB771, 0x7A5B, 0xB772, 0x7A5C, 0xB773, 0x7A5D, 0xB774, 0x7A5E, 0xB775, 0x7A5F, 0xB776, 0x7A60, 0xB777, 0x7A61, 0xB778, 0x7A62, + 0xB779, 0x7A63, 0xB77A, 0x7A64, 0xB77B, 0x7A65, 0xB77C, 0x7A66, 0xB77D, 0x7A67, 0xB77E, 0x7A68, 0xB780, 0x7A69, 0xB781, 0x7A6A, + 0xB782, 0x7A6B, 0xB783, 0x7A6C, 0xB784, 0x7A6D, 0xB785, 0x7A6E, 0xB786, 0x7A6F, 0xB787, 0x7A71, 0xB788, 0x7A72, 0xB789, 0x7A73, + 0xB78A, 0x7A75, 0xB78B, 0x7A7B, 0xB78C, 0x7A7C, 0xB78D, 0x7A7D, 0xB78E, 0x7A7E, 0xB78F, 0x7A82, 0xB790, 0x7A85, 0xB791, 0x7A87, + 0xB792, 0x7A89, 0xB793, 0x7A8A, 0xB794, 0x7A8B, 0xB795, 0x7A8C, 0xB796, 0x7A8E, 0xB797, 0x7A8F, 0xB798, 0x7A90, 0xB799, 0x7A93, + 0xB79A, 0x7A94, 0xB79B, 0x7A99, 0xB79C, 0x7A9A, 0xB79D, 0x7A9B, 0xB79E, 0x7A9E, 0xB79F, 0x7AA1, 0xB7A0, 0x7AA2, 0xB7A1, 0x8D30, + 0xB7A2, 0x53D1, 0xB7A3, 0x7F5A, 0xB7A4, 0x7B4F, 0xB7A5, 0x4F10, 0xB7A6, 0x4E4F, 0xB7A7, 0x9600, 0xB7A8, 0x6CD5, 0xB7A9, 0x73D0, + 0xB7AA, 0x85E9, 0xB7AB, 0x5E06, 0xB7AC, 0x756A, 0xB7AD, 0x7FFB, 0xB7AE, 0x6A0A, 0xB7AF, 0x77FE, 0xB7B0, 0x9492, 0xB7B1, 0x7E41, + 0xB7B2, 0x51E1, 0xB7B3, 0x70E6, 0xB7B4, 0x53CD, 0xB7B5, 0x8FD4, 0xB7B6, 0x8303, 0xB7B7, 0x8D29, 0xB7B8, 0x72AF, 0xB7B9, 0x996D, + 0xB7BA, 0x6CDB, 0xB7BB, 0x574A, 0xB7BC, 0x82B3, 0xB7BD, 0x65B9, 0xB7BE, 0x80AA, 0xB7BF, 0x623F, 0xB7C0, 0x9632, 0xB7C1, 0x59A8, + 0xB7C2, 0x4EFF, 0xB7C3, 0x8BBF, 0xB7C4, 0x7EBA, 0xB7C5, 0x653E, 0xB7C6, 0x83F2, 0xB7C7, 0x975E, 0xB7C8, 0x5561, 0xB7C9, 0x98DE, + 0xB7CA, 0x80A5, 0xB7CB, 0x532A, 0xB7CC, 0x8BFD, 0xB7CD, 0x5420, 0xB7CE, 0x80BA, 0xB7CF, 0x5E9F, 0xB7D0, 0x6CB8, 0xB7D1, 0x8D39, + 0xB7D2, 0x82AC, 0xB7D3, 0x915A, 0xB7D4, 0x5429, 0xB7D5, 0x6C1B, 0xB7D6, 0x5206, 0xB7D7, 0x7EB7, 0xB7D8, 0x575F, 0xB7D9, 0x711A, + 0xB7DA, 0x6C7E, 0xB7DB, 0x7C89, 0xB7DC, 0x594B, 0xB7DD, 0x4EFD, 0xB7DE, 0x5FFF, 0xB7DF, 0x6124, 0xB7E0, 0x7CAA, 0xB7E1, 0x4E30, + 0xB7E2, 0x5C01, 0xB7E3, 0x67AB, 0xB7E4, 0x8702, 0xB7E5, 0x5CF0, 0xB7E6, 0x950B, 0xB7E7, 0x98CE, 0xB7E8, 0x75AF, 0xB7E9, 0x70FD, + 0xB7EA, 0x9022, 0xB7EB, 0x51AF, 0xB7EC, 0x7F1D, 0xB7ED, 0x8BBD, 0xB7EE, 0x5949, 0xB7EF, 0x51E4, 0xB7F0, 0x4F5B, 0xB7F1, 0x5426, + 0xB7F2, 0x592B, 0xB7F3, 0x6577, 0xB7F4, 0x80A4, 0xB7F5, 0x5B75, 0xB7F6, 0x6276, 0xB7F7, 0x62C2, 0xB7F8, 0x8F90, 0xB7F9, 0x5E45, + 0xB7FA, 0x6C1F, 0xB7FB, 0x7B26, 0xB7FC, 0x4F0F, 0xB7FD, 0x4FD8, 0xB7FE, 0x670D, 0xB840, 0x7AA3, 0xB841, 0x7AA4, 0xB842, 0x7AA7, + 0xB843, 0x7AA9, 0xB844, 0x7AAA, 0xB845, 0x7AAB, 0xB846, 0x7AAE, 0xB847, 0x7AAF, 0xB848, 0x7AB0, 0xB849, 0x7AB1, 0xB84A, 0x7AB2, + 0xB84B, 0x7AB4, 0xB84C, 0x7AB5, 0xB84D, 0x7AB6, 0xB84E, 0x7AB7, 0xB84F, 0x7AB8, 0xB850, 0x7AB9, 0xB851, 0x7ABA, 0xB852, 0x7ABB, + 0xB853, 0x7ABC, 0xB854, 0x7ABD, 0xB855, 0x7ABE, 0xB856, 0x7AC0, 0xB857, 0x7AC1, 0xB858, 0x7AC2, 0xB859, 0x7AC3, 0xB85A, 0x7AC4, + 0xB85B, 0x7AC5, 0xB85C, 0x7AC6, 0xB85D, 0x7AC7, 0xB85E, 0x7AC8, 0xB85F, 0x7AC9, 0xB860, 0x7ACA, 0xB861, 0x7ACC, 0xB862, 0x7ACD, + 0xB863, 0x7ACE, 0xB864, 0x7ACF, 0xB865, 0x7AD0, 0xB866, 0x7AD1, 0xB867, 0x7AD2, 0xB868, 0x7AD3, 0xB869, 0x7AD4, 0xB86A, 0x7AD5, + 0xB86B, 0x7AD7, 0xB86C, 0x7AD8, 0xB86D, 0x7ADA, 0xB86E, 0x7ADB, 0xB86F, 0x7ADC, 0xB870, 0x7ADD, 0xB871, 0x7AE1, 0xB872, 0x7AE2, + 0xB873, 0x7AE4, 0xB874, 0x7AE7, 0xB875, 0x7AE8, 0xB876, 0x7AE9, 0xB877, 0x7AEA, 0xB878, 0x7AEB, 0xB879, 0x7AEC, 0xB87A, 0x7AEE, + 0xB87B, 0x7AF0, 0xB87C, 0x7AF1, 0xB87D, 0x7AF2, 0xB87E, 0x7AF3, 0xB880, 0x7AF4, 0xB881, 0x7AF5, 0xB882, 0x7AF6, 0xB883, 0x7AF7, + 0xB884, 0x7AF8, 0xB885, 0x7AFB, 0xB886, 0x7AFC, 0xB887, 0x7AFE, 0xB888, 0x7B00, 0xB889, 0x7B01, 0xB88A, 0x7B02, 0xB88B, 0x7B05, + 0xB88C, 0x7B07, 0xB88D, 0x7B09, 0xB88E, 0x7B0C, 0xB88F, 0x7B0D, 0xB890, 0x7B0E, 0xB891, 0x7B10, 0xB892, 0x7B12, 0xB893, 0x7B13, + 0xB894, 0x7B16, 0xB895, 0x7B17, 0xB896, 0x7B18, 0xB897, 0x7B1A, 0xB898, 0x7B1C, 0xB899, 0x7B1D, 0xB89A, 0x7B1F, 0xB89B, 0x7B21, + 0xB89C, 0x7B22, 0xB89D, 0x7B23, 0xB89E, 0x7B27, 0xB89F, 0x7B29, 0xB8A0, 0x7B2D, 0xB8A1, 0x6D6E, 0xB8A2, 0x6DAA, 0xB8A3, 0x798F, + 0xB8A4, 0x88B1, 0xB8A5, 0x5F17, 0xB8A6, 0x752B, 0xB8A7, 0x629A, 0xB8A8, 0x8F85, 0xB8A9, 0x4FEF, 0xB8AA, 0x91DC, 0xB8AB, 0x65A7, + 0xB8AC, 0x812F, 0xB8AD, 0x8151, 0xB8AE, 0x5E9C, 0xB8AF, 0x8150, 0xB8B0, 0x8D74, 0xB8B1, 0x526F, 0xB8B2, 0x8986, 0xB8B3, 0x8D4B, + 0xB8B4, 0x590D, 0xB8B5, 0x5085, 0xB8B6, 0x4ED8, 0xB8B7, 0x961C, 0xB8B8, 0x7236, 0xB8B9, 0x8179, 0xB8BA, 0x8D1F, 0xB8BB, 0x5BCC, + 0xB8BC, 0x8BA3, 0xB8BD, 0x9644, 0xB8BE, 0x5987, 0xB8BF, 0x7F1A, 0xB8C0, 0x5490, 0xB8C1, 0x5676, 0xB8C2, 0x560E, 0xB8C3, 0x8BE5, + 0xB8C4, 0x6539, 0xB8C5, 0x6982, 0xB8C6, 0x9499, 0xB8C7, 0x76D6, 0xB8C8, 0x6E89, 0xB8C9, 0x5E72, 0xB8CA, 0x7518, 0xB8CB, 0x6746, + 0xB8CC, 0x67D1, 0xB8CD, 0x7AFF, 0xB8CE, 0x809D, 0xB8CF, 0x8D76, 0xB8D0, 0x611F, 0xB8D1, 0x79C6, 0xB8D2, 0x6562, 0xB8D3, 0x8D63, + 0xB8D4, 0x5188, 0xB8D5, 0x521A, 0xB8D6, 0x94A2, 0xB8D7, 0x7F38, 0xB8D8, 0x809B, 0xB8D9, 0x7EB2, 0xB8DA, 0x5C97, 0xB8DB, 0x6E2F, + 0xB8DC, 0x6760, 0xB8DD, 0x7BD9, 0xB8DE, 0x768B, 0xB8DF, 0x9AD8, 0xB8E0, 0x818F, 0xB8E1, 0x7F94, 0xB8E2, 0x7CD5, 0xB8E3, 0x641E, + 0xB8E4, 0x9550, 0xB8E5, 0x7A3F, 0xB8E6, 0x544A, 0xB8E7, 0x54E5, 0xB8E8, 0x6B4C, 0xB8E9, 0x6401, 0xB8EA, 0x6208, 0xB8EB, 0x9E3D, + 0xB8EC, 0x80F3, 0xB8ED, 0x7599, 0xB8EE, 0x5272, 0xB8EF, 0x9769, 0xB8F0, 0x845B, 0xB8F1, 0x683C, 0xB8F2, 0x86E4, 0xB8F3, 0x9601, + 0xB8F4, 0x9694, 0xB8F5, 0x94EC, 0xB8F6, 0x4E2A, 0xB8F7, 0x5404, 0xB8F8, 0x7ED9, 0xB8F9, 0x6839, 0xB8FA, 0x8DDF, 0xB8FB, 0x8015, + 0xB8FC, 0x66F4, 0xB8FD, 0x5E9A, 0xB8FE, 0x7FB9, 0xB940, 0x7B2F, 0xB941, 0x7B30, 0xB942, 0x7B32, 0xB943, 0x7B34, 0xB944, 0x7B35, + 0xB945, 0x7B36, 0xB946, 0x7B37, 0xB947, 0x7B39, 0xB948, 0x7B3B, 0xB949, 0x7B3D, 0xB94A, 0x7B3F, 0xB94B, 0x7B40, 0xB94C, 0x7B41, + 0xB94D, 0x7B42, 0xB94E, 0x7B43, 0xB94F, 0x7B44, 0xB950, 0x7B46, 0xB951, 0x7B48, 0xB952, 0x7B4A, 0xB953, 0x7B4D, 0xB954, 0x7B4E, + 0xB955, 0x7B53, 0xB956, 0x7B55, 0xB957, 0x7B57, 0xB958, 0x7B59, 0xB959, 0x7B5C, 0xB95A, 0x7B5E, 0xB95B, 0x7B5F, 0xB95C, 0x7B61, + 0xB95D, 0x7B63, 0xB95E, 0x7B64, 0xB95F, 0x7B65, 0xB960, 0x7B66, 0xB961, 0x7B67, 0xB962, 0x7B68, 0xB963, 0x7B69, 0xB964, 0x7B6A, + 0xB965, 0x7B6B, 0xB966, 0x7B6C, 0xB967, 0x7B6D, 0xB968, 0x7B6F, 0xB969, 0x7B70, 0xB96A, 0x7B73, 0xB96B, 0x7B74, 0xB96C, 0x7B76, + 0xB96D, 0x7B78, 0xB96E, 0x7B7A, 0xB96F, 0x7B7C, 0xB970, 0x7B7D, 0xB971, 0x7B7F, 0xB972, 0x7B81, 0xB973, 0x7B82, 0xB974, 0x7B83, + 0xB975, 0x7B84, 0xB976, 0x7B86, 0xB977, 0x7B87, 0xB978, 0x7B88, 0xB979, 0x7B89, 0xB97A, 0x7B8A, 0xB97B, 0x7B8B, 0xB97C, 0x7B8C, + 0xB97D, 0x7B8E, 0xB97E, 0x7B8F, 0xB980, 0x7B91, 0xB981, 0x7B92, 0xB982, 0x7B93, 0xB983, 0x7B96, 0xB984, 0x7B98, 0xB985, 0x7B99, + 0xB986, 0x7B9A, 0xB987, 0x7B9B, 0xB988, 0x7B9E, 0xB989, 0x7B9F, 0xB98A, 0x7BA0, 0xB98B, 0x7BA3, 0xB98C, 0x7BA4, 0xB98D, 0x7BA5, + 0xB98E, 0x7BAE, 0xB98F, 0x7BAF, 0xB990, 0x7BB0, 0xB991, 0x7BB2, 0xB992, 0x7BB3, 0xB993, 0x7BB5, 0xB994, 0x7BB6, 0xB995, 0x7BB7, + 0xB996, 0x7BB9, 0xB997, 0x7BBA, 0xB998, 0x7BBB, 0xB999, 0x7BBC, 0xB99A, 0x7BBD, 0xB99B, 0x7BBE, 0xB99C, 0x7BBF, 0xB99D, 0x7BC0, + 0xB99E, 0x7BC2, 0xB99F, 0x7BC3, 0xB9A0, 0x7BC4, 0xB9A1, 0x57C2, 0xB9A2, 0x803F, 0xB9A3, 0x6897, 0xB9A4, 0x5DE5, 0xB9A5, 0x653B, + 0xB9A6, 0x529F, 0xB9A7, 0x606D, 0xB9A8, 0x9F9A, 0xB9A9, 0x4F9B, 0xB9AA, 0x8EAC, 0xB9AB, 0x516C, 0xB9AC, 0x5BAB, 0xB9AD, 0x5F13, + 0xB9AE, 0x5DE9, 0xB9AF, 0x6C5E, 0xB9B0, 0x62F1, 0xB9B1, 0x8D21, 0xB9B2, 0x5171, 0xB9B3, 0x94A9, 0xB9B4, 0x52FE, 0xB9B5, 0x6C9F, + 0xB9B6, 0x82DF, 0xB9B7, 0x72D7, 0xB9B8, 0x57A2, 0xB9B9, 0x6784, 0xB9BA, 0x8D2D, 0xB9BB, 0x591F, 0xB9BC, 0x8F9C, 0xB9BD, 0x83C7, + 0xB9BE, 0x5495, 0xB9BF, 0x7B8D, 0xB9C0, 0x4F30, 0xB9C1, 0x6CBD, 0xB9C2, 0x5B64, 0xB9C3, 0x59D1, 0xB9C4, 0x9F13, 0xB9C5, 0x53E4, + 0xB9C6, 0x86CA, 0xB9C7, 0x9AA8, 0xB9C8, 0x8C37, 0xB9C9, 0x80A1, 0xB9CA, 0x6545, 0xB9CB, 0x987E, 0xB9CC, 0x56FA, 0xB9CD, 0x96C7, + 0xB9CE, 0x522E, 0xB9CF, 0x74DC, 0xB9D0, 0x5250, 0xB9D1, 0x5BE1, 0xB9D2, 0x6302, 0xB9D3, 0x8902, 0xB9D4, 0x4E56, 0xB9D5, 0x62D0, + 0xB9D6, 0x602A, 0xB9D7, 0x68FA, 0xB9D8, 0x5173, 0xB9D9, 0x5B98, 0xB9DA, 0x51A0, 0xB9DB, 0x89C2, 0xB9DC, 0x7BA1, 0xB9DD, 0x9986, + 0xB9DE, 0x7F50, 0xB9DF, 0x60EF, 0xB9E0, 0x704C, 0xB9E1, 0x8D2F, 0xB9E2, 0x5149, 0xB9E3, 0x5E7F, 0xB9E4, 0x901B, 0xB9E5, 0x7470, + 0xB9E6, 0x89C4, 0xB9E7, 0x572D, 0xB9E8, 0x7845, 0xB9E9, 0x5F52, 0xB9EA, 0x9F9F, 0xB9EB, 0x95FA, 0xB9EC, 0x8F68, 0xB9ED, 0x9B3C, + 0xB9EE, 0x8BE1, 0xB9EF, 0x7678, 0xB9F0, 0x6842, 0xB9F1, 0x67DC, 0xB9F2, 0x8DEA, 0xB9F3, 0x8D35, 0xB9F4, 0x523D, 0xB9F5, 0x8F8A, + 0xB9F6, 0x6EDA, 0xB9F7, 0x68CD, 0xB9F8, 0x9505, 0xB9F9, 0x90ED, 0xB9FA, 0x56FD, 0xB9FB, 0x679C, 0xB9FC, 0x88F9, 0xB9FD, 0x8FC7, + 0xB9FE, 0x54C8, 0xBA40, 0x7BC5, 0xBA41, 0x7BC8, 0xBA42, 0x7BC9, 0xBA43, 0x7BCA, 0xBA44, 0x7BCB, 0xBA45, 0x7BCD, 0xBA46, 0x7BCE, + 0xBA47, 0x7BCF, 0xBA48, 0x7BD0, 0xBA49, 0x7BD2, 0xBA4A, 0x7BD4, 0xBA4B, 0x7BD5, 0xBA4C, 0x7BD6, 0xBA4D, 0x7BD7, 0xBA4E, 0x7BD8, + 0xBA4F, 0x7BDB, 0xBA50, 0x7BDC, 0xBA51, 0x7BDE, 0xBA52, 0x7BDF, 0xBA53, 0x7BE0, 0xBA54, 0x7BE2, 0xBA55, 0x7BE3, 0xBA56, 0x7BE4, + 0xBA57, 0x7BE7, 0xBA58, 0x7BE8, 0xBA59, 0x7BE9, 0xBA5A, 0x7BEB, 0xBA5B, 0x7BEC, 0xBA5C, 0x7BED, 0xBA5D, 0x7BEF, 0xBA5E, 0x7BF0, + 0xBA5F, 0x7BF2, 0xBA60, 0x7BF3, 0xBA61, 0x7BF4, 0xBA62, 0x7BF5, 0xBA63, 0x7BF6, 0xBA64, 0x7BF8, 0xBA65, 0x7BF9, 0xBA66, 0x7BFA, + 0xBA67, 0x7BFB, 0xBA68, 0x7BFD, 0xBA69, 0x7BFF, 0xBA6A, 0x7C00, 0xBA6B, 0x7C01, 0xBA6C, 0x7C02, 0xBA6D, 0x7C03, 0xBA6E, 0x7C04, + 0xBA6F, 0x7C05, 0xBA70, 0x7C06, 0xBA71, 0x7C08, 0xBA72, 0x7C09, 0xBA73, 0x7C0A, 0xBA74, 0x7C0D, 0xBA75, 0x7C0E, 0xBA76, 0x7C10, + 0xBA77, 0x7C11, 0xBA78, 0x7C12, 0xBA79, 0x7C13, 0xBA7A, 0x7C14, 0xBA7B, 0x7C15, 0xBA7C, 0x7C17, 0xBA7D, 0x7C18, 0xBA7E, 0x7C19, + 0xBA80, 0x7C1A, 0xBA81, 0x7C1B, 0xBA82, 0x7C1C, 0xBA83, 0x7C1D, 0xBA84, 0x7C1E, 0xBA85, 0x7C20, 0xBA86, 0x7C21, 0xBA87, 0x7C22, + 0xBA88, 0x7C23, 0xBA89, 0x7C24, 0xBA8A, 0x7C25, 0xBA8B, 0x7C28, 0xBA8C, 0x7C29, 0xBA8D, 0x7C2B, 0xBA8E, 0x7C2C, 0xBA8F, 0x7C2D, + 0xBA90, 0x7C2E, 0xBA91, 0x7C2F, 0xBA92, 0x7C30, 0xBA93, 0x7C31, 0xBA94, 0x7C32, 0xBA95, 0x7C33, 0xBA96, 0x7C34, 0xBA97, 0x7C35, + 0xBA98, 0x7C36, 0xBA99, 0x7C37, 0xBA9A, 0x7C39, 0xBA9B, 0x7C3A, 0xBA9C, 0x7C3B, 0xBA9D, 0x7C3C, 0xBA9E, 0x7C3D, 0xBA9F, 0x7C3E, + 0xBAA0, 0x7C42, 0xBAA1, 0x9AB8, 0xBAA2, 0x5B69, 0xBAA3, 0x6D77, 0xBAA4, 0x6C26, 0xBAA5, 0x4EA5, 0xBAA6, 0x5BB3, 0xBAA7, 0x9A87, + 0xBAA8, 0x9163, 0xBAA9, 0x61A8, 0xBAAA, 0x90AF, 0xBAAB, 0x97E9, 0xBAAC, 0x542B, 0xBAAD, 0x6DB5, 0xBAAE, 0x5BD2, 0xBAAF, 0x51FD, + 0xBAB0, 0x558A, 0xBAB1, 0x7F55, 0xBAB2, 0x7FF0, 0xBAB3, 0x64BC, 0xBAB4, 0x634D, 0xBAB5, 0x65F1, 0xBAB6, 0x61BE, 0xBAB7, 0x608D, + 0xBAB8, 0x710A, 0xBAB9, 0x6C57, 0xBABA, 0x6C49, 0xBABB, 0x592F, 0xBABC, 0x676D, 0xBABD, 0x822A, 0xBABE, 0x58D5, 0xBABF, 0x568E, + 0xBAC0, 0x8C6A, 0xBAC1, 0x6BEB, 0xBAC2, 0x90DD, 0xBAC3, 0x597D, 0xBAC4, 0x8017, 0xBAC5, 0x53F7, 0xBAC6, 0x6D69, 0xBAC7, 0x5475, + 0xBAC8, 0x559D, 0xBAC9, 0x8377, 0xBACA, 0x83CF, 0xBACB, 0x6838, 0xBACC, 0x79BE, 0xBACD, 0x548C, 0xBACE, 0x4F55, 0xBACF, 0x5408, + 0xBAD0, 0x76D2, 0xBAD1, 0x8C89, 0xBAD2, 0x9602, 0xBAD3, 0x6CB3, 0xBAD4, 0x6DB8, 0xBAD5, 0x8D6B, 0xBAD6, 0x8910, 0xBAD7, 0x9E64, + 0xBAD8, 0x8D3A, 0xBAD9, 0x563F, 0xBADA, 0x9ED1, 0xBADB, 0x75D5, 0xBADC, 0x5F88, 0xBADD, 0x72E0, 0xBADE, 0x6068, 0xBADF, 0x54FC, + 0xBAE0, 0x4EA8, 0xBAE1, 0x6A2A, 0xBAE2, 0x8861, 0xBAE3, 0x6052, 0xBAE4, 0x8F70, 0xBAE5, 0x54C4, 0xBAE6, 0x70D8, 0xBAE7, 0x8679, + 0xBAE8, 0x9E3F, 0xBAE9, 0x6D2A, 0xBAEA, 0x5B8F, 0xBAEB, 0x5F18, 0xBAEC, 0x7EA2, 0xBAED, 0x5589, 0xBAEE, 0x4FAF, 0xBAEF, 0x7334, + 0xBAF0, 0x543C, 0xBAF1, 0x539A, 0xBAF2, 0x5019, 0xBAF3, 0x540E, 0xBAF4, 0x547C, 0xBAF5, 0x4E4E, 0xBAF6, 0x5FFD, 0xBAF7, 0x745A, + 0xBAF8, 0x58F6, 0xBAF9, 0x846B, 0xBAFA, 0x80E1, 0xBAFB, 0x8774, 0xBAFC, 0x72D0, 0xBAFD, 0x7CCA, 0xBAFE, 0x6E56, 0xBB40, 0x7C43, + 0xBB41, 0x7C44, 0xBB42, 0x7C45, 0xBB43, 0x7C46, 0xBB44, 0x7C47, 0xBB45, 0x7C48, 0xBB46, 0x7C49, 0xBB47, 0x7C4A, 0xBB48, 0x7C4B, + 0xBB49, 0x7C4C, 0xBB4A, 0x7C4E, 0xBB4B, 0x7C4F, 0xBB4C, 0x7C50, 0xBB4D, 0x7C51, 0xBB4E, 0x7C52, 0xBB4F, 0x7C53, 0xBB50, 0x7C54, + 0xBB51, 0x7C55, 0xBB52, 0x7C56, 0xBB53, 0x7C57, 0xBB54, 0x7C58, 0xBB55, 0x7C59, 0xBB56, 0x7C5A, 0xBB57, 0x7C5B, 0xBB58, 0x7C5C, + 0xBB59, 0x7C5D, 0xBB5A, 0x7C5E, 0xBB5B, 0x7C5F, 0xBB5C, 0x7C60, 0xBB5D, 0x7C61, 0xBB5E, 0x7C62, 0xBB5F, 0x7C63, 0xBB60, 0x7C64, + 0xBB61, 0x7C65, 0xBB62, 0x7C66, 0xBB63, 0x7C67, 0xBB64, 0x7C68, 0xBB65, 0x7C69, 0xBB66, 0x7C6A, 0xBB67, 0x7C6B, 0xBB68, 0x7C6C, + 0xBB69, 0x7C6D, 0xBB6A, 0x7C6E, 0xBB6B, 0x7C6F, 0xBB6C, 0x7C70, 0xBB6D, 0x7C71, 0xBB6E, 0x7C72, 0xBB6F, 0x7C75, 0xBB70, 0x7C76, + 0xBB71, 0x7C77, 0xBB72, 0x7C78, 0xBB73, 0x7C79, 0xBB74, 0x7C7A, 0xBB75, 0x7C7E, 0xBB76, 0x7C7F, 0xBB77, 0x7C80, 0xBB78, 0x7C81, + 0xBB79, 0x7C82, 0xBB7A, 0x7C83, 0xBB7B, 0x7C84, 0xBB7C, 0x7C85, 0xBB7D, 0x7C86, 0xBB7E, 0x7C87, 0xBB80, 0x7C88, 0xBB81, 0x7C8A, + 0xBB82, 0x7C8B, 0xBB83, 0x7C8C, 0xBB84, 0x7C8D, 0xBB85, 0x7C8E, 0xBB86, 0x7C8F, 0xBB87, 0x7C90, 0xBB88, 0x7C93, 0xBB89, 0x7C94, + 0xBB8A, 0x7C96, 0xBB8B, 0x7C99, 0xBB8C, 0x7C9A, 0xBB8D, 0x7C9B, 0xBB8E, 0x7CA0, 0xBB8F, 0x7CA1, 0xBB90, 0x7CA3, 0xBB91, 0x7CA6, + 0xBB92, 0x7CA7, 0xBB93, 0x7CA8, 0xBB94, 0x7CA9, 0xBB95, 0x7CAB, 0xBB96, 0x7CAC, 0xBB97, 0x7CAD, 0xBB98, 0x7CAF, 0xBB99, 0x7CB0, + 0xBB9A, 0x7CB4, 0xBB9B, 0x7CB5, 0xBB9C, 0x7CB6, 0xBB9D, 0x7CB7, 0xBB9E, 0x7CB8, 0xBB9F, 0x7CBA, 0xBBA0, 0x7CBB, 0xBBA1, 0x5F27, + 0xBBA2, 0x864E, 0xBBA3, 0x552C, 0xBBA4, 0x62A4, 0xBBA5, 0x4E92, 0xBBA6, 0x6CAA, 0xBBA7, 0x6237, 0xBBA8, 0x82B1, 0xBBA9, 0x54D7, + 0xBBAA, 0x534E, 0xBBAB, 0x733E, 0xBBAC, 0x6ED1, 0xBBAD, 0x753B, 0xBBAE, 0x5212, 0xBBAF, 0x5316, 0xBBB0, 0x8BDD, 0xBBB1, 0x69D0, + 0xBBB2, 0x5F8A, 0xBBB3, 0x6000, 0xBBB4, 0x6DEE, 0xBBB5, 0x574F, 0xBBB6, 0x6B22, 0xBBB7, 0x73AF, 0xBBB8, 0x6853, 0xBBB9, 0x8FD8, + 0xBBBA, 0x7F13, 0xBBBB, 0x6362, 0xBBBC, 0x60A3, 0xBBBD, 0x5524, 0xBBBE, 0x75EA, 0xBBBF, 0x8C62, 0xBBC0, 0x7115, 0xBBC1, 0x6DA3, + 0xBBC2, 0x5BA6, 0xBBC3, 0x5E7B, 0xBBC4, 0x8352, 0xBBC5, 0x614C, 0xBBC6, 0x9EC4, 0xBBC7, 0x78FA, 0xBBC8, 0x8757, 0xBBC9, 0x7C27, + 0xBBCA, 0x7687, 0xBBCB, 0x51F0, 0xBBCC, 0x60F6, 0xBBCD, 0x714C, 0xBBCE, 0x6643, 0xBBCF, 0x5E4C, 0xBBD0, 0x604D, 0xBBD1, 0x8C0E, + 0xBBD2, 0x7070, 0xBBD3, 0x6325, 0xBBD4, 0x8F89, 0xBBD5, 0x5FBD, 0xBBD6, 0x6062, 0xBBD7, 0x86D4, 0xBBD8, 0x56DE, 0xBBD9, 0x6BC1, + 0xBBDA, 0x6094, 0xBBDB, 0x6167, 0xBBDC, 0x5349, 0xBBDD, 0x60E0, 0xBBDE, 0x6666, 0xBBDF, 0x8D3F, 0xBBE0, 0x79FD, 0xBBE1, 0x4F1A, + 0xBBE2, 0x70E9, 0xBBE3, 0x6C47, 0xBBE4, 0x8BB3, 0xBBE5, 0x8BF2, 0xBBE6, 0x7ED8, 0xBBE7, 0x8364, 0xBBE8, 0x660F, 0xBBE9, 0x5A5A, + 0xBBEA, 0x9B42, 0xBBEB, 0x6D51, 0xBBEC, 0x6DF7, 0xBBED, 0x8C41, 0xBBEE, 0x6D3B, 0xBBEF, 0x4F19, 0xBBF0, 0x706B, 0xBBF1, 0x83B7, + 0xBBF2, 0x6216, 0xBBF3, 0x60D1, 0xBBF4, 0x970D, 0xBBF5, 0x8D27, 0xBBF6, 0x7978, 0xBBF7, 0x51FB, 0xBBF8, 0x573E, 0xBBF9, 0x57FA, + 0xBBFA, 0x673A, 0xBBFB, 0x7578, 0xBBFC, 0x7A3D, 0xBBFD, 0x79EF, 0xBBFE, 0x7B95, 0xBC40, 0x7CBF, 0xBC41, 0x7CC0, 0xBC42, 0x7CC2, + 0xBC43, 0x7CC3, 0xBC44, 0x7CC4, 0xBC45, 0x7CC6, 0xBC46, 0x7CC9, 0xBC47, 0x7CCB, 0xBC48, 0x7CCE, 0xBC49, 0x7CCF, 0xBC4A, 0x7CD0, + 0xBC4B, 0x7CD1, 0xBC4C, 0x7CD2, 0xBC4D, 0x7CD3, 0xBC4E, 0x7CD4, 0xBC4F, 0x7CD8, 0xBC50, 0x7CDA, 0xBC51, 0x7CDB, 0xBC52, 0x7CDD, + 0xBC53, 0x7CDE, 0xBC54, 0x7CE1, 0xBC55, 0x7CE2, 0xBC56, 0x7CE3, 0xBC57, 0x7CE4, 0xBC58, 0x7CE5, 0xBC59, 0x7CE6, 0xBC5A, 0x7CE7, + 0xBC5B, 0x7CE9, 0xBC5C, 0x7CEA, 0xBC5D, 0x7CEB, 0xBC5E, 0x7CEC, 0xBC5F, 0x7CED, 0xBC60, 0x7CEE, 0xBC61, 0x7CF0, 0xBC62, 0x7CF1, + 0xBC63, 0x7CF2, 0xBC64, 0x7CF3, 0xBC65, 0x7CF4, 0xBC66, 0x7CF5, 0xBC67, 0x7CF6, 0xBC68, 0x7CF7, 0xBC69, 0x7CF9, 0xBC6A, 0x7CFA, + 0xBC6B, 0x7CFC, 0xBC6C, 0x7CFD, 0xBC6D, 0x7CFE, 0xBC6E, 0x7CFF, 0xBC6F, 0x7D00, 0xBC70, 0x7D01, 0xBC71, 0x7D02, 0xBC72, 0x7D03, + 0xBC73, 0x7D04, 0xBC74, 0x7D05, 0xBC75, 0x7D06, 0xBC76, 0x7D07, 0xBC77, 0x7D08, 0xBC78, 0x7D09, 0xBC79, 0x7D0B, 0xBC7A, 0x7D0C, + 0xBC7B, 0x7D0D, 0xBC7C, 0x7D0E, 0xBC7D, 0x7D0F, 0xBC7E, 0x7D10, 0xBC80, 0x7D11, 0xBC81, 0x7D12, 0xBC82, 0x7D13, 0xBC83, 0x7D14, + 0xBC84, 0x7D15, 0xBC85, 0x7D16, 0xBC86, 0x7D17, 0xBC87, 0x7D18, 0xBC88, 0x7D19, 0xBC89, 0x7D1A, 0xBC8A, 0x7D1B, 0xBC8B, 0x7D1C, + 0xBC8C, 0x7D1D, 0xBC8D, 0x7D1E, 0xBC8E, 0x7D1F, 0xBC8F, 0x7D21, 0xBC90, 0x7D23, 0xBC91, 0x7D24, 0xBC92, 0x7D25, 0xBC93, 0x7D26, + 0xBC94, 0x7D28, 0xBC95, 0x7D29, 0xBC96, 0x7D2A, 0xBC97, 0x7D2C, 0xBC98, 0x7D2D, 0xBC99, 0x7D2E, 0xBC9A, 0x7D30, 0xBC9B, 0x7D31, + 0xBC9C, 0x7D32, 0xBC9D, 0x7D33, 0xBC9E, 0x7D34, 0xBC9F, 0x7D35, 0xBCA0, 0x7D36, 0xBCA1, 0x808C, 0xBCA2, 0x9965, 0xBCA3, 0x8FF9, + 0xBCA4, 0x6FC0, 0xBCA5, 0x8BA5, 0xBCA6, 0x9E21, 0xBCA7, 0x59EC, 0xBCA8, 0x7EE9, 0xBCA9, 0x7F09, 0xBCAA, 0x5409, 0xBCAB, 0x6781, + 0xBCAC, 0x68D8, 0xBCAD, 0x8F91, 0xBCAE, 0x7C4D, 0xBCAF, 0x96C6, 0xBCB0, 0x53CA, 0xBCB1, 0x6025, 0xBCB2, 0x75BE, 0xBCB3, 0x6C72, + 0xBCB4, 0x5373, 0xBCB5, 0x5AC9, 0xBCB6, 0x7EA7, 0xBCB7, 0x6324, 0xBCB8, 0x51E0, 0xBCB9, 0x810A, 0xBCBA, 0x5DF1, 0xBCBB, 0x84DF, + 0xBCBC, 0x6280, 0xBCBD, 0x5180, 0xBCBE, 0x5B63, 0xBCBF, 0x4F0E, 0xBCC0, 0x796D, 0xBCC1, 0x5242, 0xBCC2, 0x60B8, 0xBCC3, 0x6D4E, + 0xBCC4, 0x5BC4, 0xBCC5, 0x5BC2, 0xBCC6, 0x8BA1, 0xBCC7, 0x8BB0, 0xBCC8, 0x65E2, 0xBCC9, 0x5FCC, 0xBCCA, 0x9645, 0xBCCB, 0x5993, + 0xBCCC, 0x7EE7, 0xBCCD, 0x7EAA, 0xBCCE, 0x5609, 0xBCCF, 0x67B7, 0xBCD0, 0x5939, 0xBCD1, 0x4F73, 0xBCD2, 0x5BB6, 0xBCD3, 0x52A0, + 0xBCD4, 0x835A, 0xBCD5, 0x988A, 0xBCD6, 0x8D3E, 0xBCD7, 0x7532, 0xBCD8, 0x94BE, 0xBCD9, 0x5047, 0xBCDA, 0x7A3C, 0xBCDB, 0x4EF7, + 0xBCDC, 0x67B6, 0xBCDD, 0x9A7E, 0xBCDE, 0x5AC1, 0xBCDF, 0x6B7C, 0xBCE0, 0x76D1, 0xBCE1, 0x575A, 0xBCE2, 0x5C16, 0xBCE3, 0x7B3A, + 0xBCE4, 0x95F4, 0xBCE5, 0x714E, 0xBCE6, 0x517C, 0xBCE7, 0x80A9, 0xBCE8, 0x8270, 0xBCE9, 0x5978, 0xBCEA, 0x7F04, 0xBCEB, 0x8327, + 0xBCEC, 0x68C0, 0xBCED, 0x67EC, 0xBCEE, 0x78B1, 0xBCEF, 0x7877, 0xBCF0, 0x62E3, 0xBCF1, 0x6361, 0xBCF2, 0x7B80, 0xBCF3, 0x4FED, + 0xBCF4, 0x526A, 0xBCF5, 0x51CF, 0xBCF6, 0x8350, 0xBCF7, 0x69DB, 0xBCF8, 0x9274, 0xBCF9, 0x8DF5, 0xBCFA, 0x8D31, 0xBCFB, 0x89C1, + 0xBCFC, 0x952E, 0xBCFD, 0x7BAD, 0xBCFE, 0x4EF6, 0xBD40, 0x7D37, 0xBD41, 0x7D38, 0xBD42, 0x7D39, 0xBD43, 0x7D3A, 0xBD44, 0x7D3B, + 0xBD45, 0x7D3C, 0xBD46, 0x7D3D, 0xBD47, 0x7D3E, 0xBD48, 0x7D3F, 0xBD49, 0x7D40, 0xBD4A, 0x7D41, 0xBD4B, 0x7D42, 0xBD4C, 0x7D43, + 0xBD4D, 0x7D44, 0xBD4E, 0x7D45, 0xBD4F, 0x7D46, 0xBD50, 0x7D47, 0xBD51, 0x7D48, 0xBD52, 0x7D49, 0xBD53, 0x7D4A, 0xBD54, 0x7D4B, + 0xBD55, 0x7D4C, 0xBD56, 0x7D4D, 0xBD57, 0x7D4E, 0xBD58, 0x7D4F, 0xBD59, 0x7D50, 0xBD5A, 0x7D51, 0xBD5B, 0x7D52, 0xBD5C, 0x7D53, + 0xBD5D, 0x7D54, 0xBD5E, 0x7D55, 0xBD5F, 0x7D56, 0xBD60, 0x7D57, 0xBD61, 0x7D58, 0xBD62, 0x7D59, 0xBD63, 0x7D5A, 0xBD64, 0x7D5B, + 0xBD65, 0x7D5C, 0xBD66, 0x7D5D, 0xBD67, 0x7D5E, 0xBD68, 0x7D5F, 0xBD69, 0x7D60, 0xBD6A, 0x7D61, 0xBD6B, 0x7D62, 0xBD6C, 0x7D63, + 0xBD6D, 0x7D64, 0xBD6E, 0x7D65, 0xBD6F, 0x7D66, 0xBD70, 0x7D67, 0xBD71, 0x7D68, 0xBD72, 0x7D69, 0xBD73, 0x7D6A, 0xBD74, 0x7D6B, + 0xBD75, 0x7D6C, 0xBD76, 0x7D6D, 0xBD77, 0x7D6F, 0xBD78, 0x7D70, 0xBD79, 0x7D71, 0xBD7A, 0x7D72, 0xBD7B, 0x7D73, 0xBD7C, 0x7D74, + 0xBD7D, 0x7D75, 0xBD7E, 0x7D76, 0xBD80, 0x7D78, 0xBD81, 0x7D79, 0xBD82, 0x7D7A, 0xBD83, 0x7D7B, 0xBD84, 0x7D7C, 0xBD85, 0x7D7D, + 0xBD86, 0x7D7E, 0xBD87, 0x7D7F, 0xBD88, 0x7D80, 0xBD89, 0x7D81, 0xBD8A, 0x7D82, 0xBD8B, 0x7D83, 0xBD8C, 0x7D84, 0xBD8D, 0x7D85, + 0xBD8E, 0x7D86, 0xBD8F, 0x7D87, 0xBD90, 0x7D88, 0xBD91, 0x7D89, 0xBD92, 0x7D8A, 0xBD93, 0x7D8B, 0xBD94, 0x7D8C, 0xBD95, 0x7D8D, + 0xBD96, 0x7D8E, 0xBD97, 0x7D8F, 0xBD98, 0x7D90, 0xBD99, 0x7D91, 0xBD9A, 0x7D92, 0xBD9B, 0x7D93, 0xBD9C, 0x7D94, 0xBD9D, 0x7D95, + 0xBD9E, 0x7D96, 0xBD9F, 0x7D97, 0xBDA0, 0x7D98, 0xBDA1, 0x5065, 0xBDA2, 0x8230, 0xBDA3, 0x5251, 0xBDA4, 0x996F, 0xBDA5, 0x6E10, + 0xBDA6, 0x6E85, 0xBDA7, 0x6DA7, 0xBDA8, 0x5EFA, 0xBDA9, 0x50F5, 0xBDAA, 0x59DC, 0xBDAB, 0x5C06, 0xBDAC, 0x6D46, 0xBDAD, 0x6C5F, + 0xBDAE, 0x7586, 0xBDAF, 0x848B, 0xBDB0, 0x6868, 0xBDB1, 0x5956, 0xBDB2, 0x8BB2, 0xBDB3, 0x5320, 0xBDB4, 0x9171, 0xBDB5, 0x964D, + 0xBDB6, 0x8549, 0xBDB7, 0x6912, 0xBDB8, 0x7901, 0xBDB9, 0x7126, 0xBDBA, 0x80F6, 0xBDBB, 0x4EA4, 0xBDBC, 0x90CA, 0xBDBD, 0x6D47, + 0xBDBE, 0x9A84, 0xBDBF, 0x5A07, 0xBDC0, 0x56BC, 0xBDC1, 0x6405, 0xBDC2, 0x94F0, 0xBDC3, 0x77EB, 0xBDC4, 0x4FA5, 0xBDC5, 0x811A, + 0xBDC6, 0x72E1, 0xBDC7, 0x89D2, 0xBDC8, 0x997A, 0xBDC9, 0x7F34, 0xBDCA, 0x7EDE, 0xBDCB, 0x527F, 0xBDCC, 0x6559, 0xBDCD, 0x9175, + 0xBDCE, 0x8F7F, 0xBDCF, 0x8F83, 0xBDD0, 0x53EB, 0xBDD1, 0x7A96, 0xBDD2, 0x63ED, 0xBDD3, 0x63A5, 0xBDD4, 0x7686, 0xBDD5, 0x79F8, + 0xBDD6, 0x8857, 0xBDD7, 0x9636, 0xBDD8, 0x622A, 0xBDD9, 0x52AB, 0xBDDA, 0x8282, 0xBDDB, 0x6854, 0xBDDC, 0x6770, 0xBDDD, 0x6377, + 0xBDDE, 0x776B, 0xBDDF, 0x7AED, 0xBDE0, 0x6D01, 0xBDE1, 0x7ED3, 0xBDE2, 0x89E3, 0xBDE3, 0x59D0, 0xBDE4, 0x6212, 0xBDE5, 0x85C9, + 0xBDE6, 0x82A5, 0xBDE7, 0x754C, 0xBDE8, 0x501F, 0xBDE9, 0x4ECB, 0xBDEA, 0x75A5, 0xBDEB, 0x8BEB, 0xBDEC, 0x5C4A, 0xBDED, 0x5DFE, + 0xBDEE, 0x7B4B, 0xBDEF, 0x65A4, 0xBDF0, 0x91D1, 0xBDF1, 0x4ECA, 0xBDF2, 0x6D25, 0xBDF3, 0x895F, 0xBDF4, 0x7D27, 0xBDF5, 0x9526, + 0xBDF6, 0x4EC5, 0xBDF7, 0x8C28, 0xBDF8, 0x8FDB, 0xBDF9, 0x9773, 0xBDFA, 0x664B, 0xBDFB, 0x7981, 0xBDFC, 0x8FD1, 0xBDFD, 0x70EC, + 0xBDFE, 0x6D78, 0xBE40, 0x7D99, 0xBE41, 0x7D9A, 0xBE42, 0x7D9B, 0xBE43, 0x7D9C, 0xBE44, 0x7D9D, 0xBE45, 0x7D9E, 0xBE46, 0x7D9F, + 0xBE47, 0x7DA0, 0xBE48, 0x7DA1, 0xBE49, 0x7DA2, 0xBE4A, 0x7DA3, 0xBE4B, 0x7DA4, 0xBE4C, 0x7DA5, 0xBE4D, 0x7DA7, 0xBE4E, 0x7DA8, + 0xBE4F, 0x7DA9, 0xBE50, 0x7DAA, 0xBE51, 0x7DAB, 0xBE52, 0x7DAC, 0xBE53, 0x7DAD, 0xBE54, 0x7DAF, 0xBE55, 0x7DB0, 0xBE56, 0x7DB1, + 0xBE57, 0x7DB2, 0xBE58, 0x7DB3, 0xBE59, 0x7DB4, 0xBE5A, 0x7DB5, 0xBE5B, 0x7DB6, 0xBE5C, 0x7DB7, 0xBE5D, 0x7DB8, 0xBE5E, 0x7DB9, + 0xBE5F, 0x7DBA, 0xBE60, 0x7DBB, 0xBE61, 0x7DBC, 0xBE62, 0x7DBD, 0xBE63, 0x7DBE, 0xBE64, 0x7DBF, 0xBE65, 0x7DC0, 0xBE66, 0x7DC1, + 0xBE67, 0x7DC2, 0xBE68, 0x7DC3, 0xBE69, 0x7DC4, 0xBE6A, 0x7DC5, 0xBE6B, 0x7DC6, 0xBE6C, 0x7DC7, 0xBE6D, 0x7DC8, 0xBE6E, 0x7DC9, + 0xBE6F, 0x7DCA, 0xBE70, 0x7DCB, 0xBE71, 0x7DCC, 0xBE72, 0x7DCD, 0xBE73, 0x7DCE, 0xBE74, 0x7DCF, 0xBE75, 0x7DD0, 0xBE76, 0x7DD1, + 0xBE77, 0x7DD2, 0xBE78, 0x7DD3, 0xBE79, 0x7DD4, 0xBE7A, 0x7DD5, 0xBE7B, 0x7DD6, 0xBE7C, 0x7DD7, 0xBE7D, 0x7DD8, 0xBE7E, 0x7DD9, + 0xBE80, 0x7DDA, 0xBE81, 0x7DDB, 0xBE82, 0x7DDC, 0xBE83, 0x7DDD, 0xBE84, 0x7DDE, 0xBE85, 0x7DDF, 0xBE86, 0x7DE0, 0xBE87, 0x7DE1, + 0xBE88, 0x7DE2, 0xBE89, 0x7DE3, 0xBE8A, 0x7DE4, 0xBE8B, 0x7DE5, 0xBE8C, 0x7DE6, 0xBE8D, 0x7DE7, 0xBE8E, 0x7DE8, 0xBE8F, 0x7DE9, + 0xBE90, 0x7DEA, 0xBE91, 0x7DEB, 0xBE92, 0x7DEC, 0xBE93, 0x7DED, 0xBE94, 0x7DEE, 0xBE95, 0x7DEF, 0xBE96, 0x7DF0, 0xBE97, 0x7DF1, + 0xBE98, 0x7DF2, 0xBE99, 0x7DF3, 0xBE9A, 0x7DF4, 0xBE9B, 0x7DF5, 0xBE9C, 0x7DF6, 0xBE9D, 0x7DF7, 0xBE9E, 0x7DF8, 0xBE9F, 0x7DF9, + 0xBEA0, 0x7DFA, 0xBEA1, 0x5C3D, 0xBEA2, 0x52B2, 0xBEA3, 0x8346, 0xBEA4, 0x5162, 0xBEA5, 0x830E, 0xBEA6, 0x775B, 0xBEA7, 0x6676, + 0xBEA8, 0x9CB8, 0xBEA9, 0x4EAC, 0xBEAA, 0x60CA, 0xBEAB, 0x7CBE, 0xBEAC, 0x7CB3, 0xBEAD, 0x7ECF, 0xBEAE, 0x4E95, 0xBEAF, 0x8B66, + 0xBEB0, 0x666F, 0xBEB1, 0x9888, 0xBEB2, 0x9759, 0xBEB3, 0x5883, 0xBEB4, 0x656C, 0xBEB5, 0x955C, 0xBEB6, 0x5F84, 0xBEB7, 0x75C9, + 0xBEB8, 0x9756, 0xBEB9, 0x7ADF, 0xBEBA, 0x7ADE, 0xBEBB, 0x51C0, 0xBEBC, 0x70AF, 0xBEBD, 0x7A98, 0xBEBE, 0x63EA, 0xBEBF, 0x7A76, + 0xBEC0, 0x7EA0, 0xBEC1, 0x7396, 0xBEC2, 0x97ED, 0xBEC3, 0x4E45, 0xBEC4, 0x7078, 0xBEC5, 0x4E5D, 0xBEC6, 0x9152, 0xBEC7, 0x53A9, + 0xBEC8, 0x6551, 0xBEC9, 0x65E7, 0xBECA, 0x81FC, 0xBECB, 0x8205, 0xBECC, 0x548E, 0xBECD, 0x5C31, 0xBECE, 0x759A, 0xBECF, 0x97A0, + 0xBED0, 0x62D8, 0xBED1, 0x72D9, 0xBED2, 0x75BD, 0xBED3, 0x5C45, 0xBED4, 0x9A79, 0xBED5, 0x83CA, 0xBED6, 0x5C40, 0xBED7, 0x5480, + 0xBED8, 0x77E9, 0xBED9, 0x4E3E, 0xBEDA, 0x6CAE, 0xBEDB, 0x805A, 0xBEDC, 0x62D2, 0xBEDD, 0x636E, 0xBEDE, 0x5DE8, 0xBEDF, 0x5177, + 0xBEE0, 0x8DDD, 0xBEE1, 0x8E1E, 0xBEE2, 0x952F, 0xBEE3, 0x4FF1, 0xBEE4, 0x53E5, 0xBEE5, 0x60E7, 0xBEE6, 0x70AC, 0xBEE7, 0x5267, + 0xBEE8, 0x6350, 0xBEE9, 0x9E43, 0xBEEA, 0x5A1F, 0xBEEB, 0x5026, 0xBEEC, 0x7737, 0xBEED, 0x5377, 0xBEEE, 0x7EE2, 0xBEEF, 0x6485, + 0xBEF0, 0x652B, 0xBEF1, 0x6289, 0xBEF2, 0x6398, 0xBEF3, 0x5014, 0xBEF4, 0x7235, 0xBEF5, 0x89C9, 0xBEF6, 0x51B3, 0xBEF7, 0x8BC0, + 0xBEF8, 0x7EDD, 0xBEF9, 0x5747, 0xBEFA, 0x83CC, 0xBEFB, 0x94A7, 0xBEFC, 0x519B, 0xBEFD, 0x541B, 0xBEFE, 0x5CFB, 0xBF40, 0x7DFB, + 0xBF41, 0x7DFC, 0xBF42, 0x7DFD, 0xBF43, 0x7DFE, 0xBF44, 0x7DFF, 0xBF45, 0x7E00, 0xBF46, 0x7E01, 0xBF47, 0x7E02, 0xBF48, 0x7E03, + 0xBF49, 0x7E04, 0xBF4A, 0x7E05, 0xBF4B, 0x7E06, 0xBF4C, 0x7E07, 0xBF4D, 0x7E08, 0xBF4E, 0x7E09, 0xBF4F, 0x7E0A, 0xBF50, 0x7E0B, + 0xBF51, 0x7E0C, 0xBF52, 0x7E0D, 0xBF53, 0x7E0E, 0xBF54, 0x7E0F, 0xBF55, 0x7E10, 0xBF56, 0x7E11, 0xBF57, 0x7E12, 0xBF58, 0x7E13, + 0xBF59, 0x7E14, 0xBF5A, 0x7E15, 0xBF5B, 0x7E16, 0xBF5C, 0x7E17, 0xBF5D, 0x7E18, 0xBF5E, 0x7E19, 0xBF5F, 0x7E1A, 0xBF60, 0x7E1B, + 0xBF61, 0x7E1C, 0xBF62, 0x7E1D, 0xBF63, 0x7E1E, 0xBF64, 0x7E1F, 0xBF65, 0x7E20, 0xBF66, 0x7E21, 0xBF67, 0x7E22, 0xBF68, 0x7E23, + 0xBF69, 0x7E24, 0xBF6A, 0x7E25, 0xBF6B, 0x7E26, 0xBF6C, 0x7E27, 0xBF6D, 0x7E28, 0xBF6E, 0x7E29, 0xBF6F, 0x7E2A, 0xBF70, 0x7E2B, + 0xBF71, 0x7E2C, 0xBF72, 0x7E2D, 0xBF73, 0x7E2E, 0xBF74, 0x7E2F, 0xBF75, 0x7E30, 0xBF76, 0x7E31, 0xBF77, 0x7E32, 0xBF78, 0x7E33, + 0xBF79, 0x7E34, 0xBF7A, 0x7E35, 0xBF7B, 0x7E36, 0xBF7C, 0x7E37, 0xBF7D, 0x7E38, 0xBF7E, 0x7E39, 0xBF80, 0x7E3A, 0xBF81, 0x7E3C, + 0xBF82, 0x7E3D, 0xBF83, 0x7E3E, 0xBF84, 0x7E3F, 0xBF85, 0x7E40, 0xBF86, 0x7E42, 0xBF87, 0x7E43, 0xBF88, 0x7E44, 0xBF89, 0x7E45, + 0xBF8A, 0x7E46, 0xBF8B, 0x7E48, 0xBF8C, 0x7E49, 0xBF8D, 0x7E4A, 0xBF8E, 0x7E4B, 0xBF8F, 0x7E4C, 0xBF90, 0x7E4D, 0xBF91, 0x7E4E, + 0xBF92, 0x7E4F, 0xBF93, 0x7E50, 0xBF94, 0x7E51, 0xBF95, 0x7E52, 0xBF96, 0x7E53, 0xBF97, 0x7E54, 0xBF98, 0x7E55, 0xBF99, 0x7E56, + 0xBF9A, 0x7E57, 0xBF9B, 0x7E58, 0xBF9C, 0x7E59, 0xBF9D, 0x7E5A, 0xBF9E, 0x7E5B, 0xBF9F, 0x7E5C, 0xBFA0, 0x7E5D, 0xBFA1, 0x4FCA, + 0xBFA2, 0x7AE3, 0xBFA3, 0x6D5A, 0xBFA4, 0x90E1, 0xBFA5, 0x9A8F, 0xBFA6, 0x5580, 0xBFA7, 0x5496, 0xBFA8, 0x5361, 0xBFA9, 0x54AF, + 0xBFAA, 0x5F00, 0xBFAB, 0x63E9, 0xBFAC, 0x6977, 0xBFAD, 0x51EF, 0xBFAE, 0x6168, 0xBFAF, 0x520A, 0xBFB0, 0x582A, 0xBFB1, 0x52D8, + 0xBFB2, 0x574E, 0xBFB3, 0x780D, 0xBFB4, 0x770B, 0xBFB5, 0x5EB7, 0xBFB6, 0x6177, 0xBFB7, 0x7CE0, 0xBFB8, 0x625B, 0xBFB9, 0x6297, + 0xBFBA, 0x4EA2, 0xBFBB, 0x7095, 0xBFBC, 0x8003, 0xBFBD, 0x62F7, 0xBFBE, 0x70E4, 0xBFBF, 0x9760, 0xBFC0, 0x5777, 0xBFC1, 0x82DB, + 0xBFC2, 0x67EF, 0xBFC3, 0x68F5, 0xBFC4, 0x78D5, 0xBFC5, 0x9897, 0xBFC6, 0x79D1, 0xBFC7, 0x58F3, 0xBFC8, 0x54B3, 0xBFC9, 0x53EF, + 0xBFCA, 0x6E34, 0xBFCB, 0x514B, 0xBFCC, 0x523B, 0xBFCD, 0x5BA2, 0xBFCE, 0x8BFE, 0xBFCF, 0x80AF, 0xBFD0, 0x5543, 0xBFD1, 0x57A6, + 0xBFD2, 0x6073, 0xBFD3, 0x5751, 0xBFD4, 0x542D, 0xBFD5, 0x7A7A, 0xBFD6, 0x6050, 0xBFD7, 0x5B54, 0xBFD8, 0x63A7, 0xBFD9, 0x62A0, + 0xBFDA, 0x53E3, 0xBFDB, 0x6263, 0xBFDC, 0x5BC7, 0xBFDD, 0x67AF, 0xBFDE, 0x54ED, 0xBFDF, 0x7A9F, 0xBFE0, 0x82E6, 0xBFE1, 0x9177, + 0xBFE2, 0x5E93, 0xBFE3, 0x88E4, 0xBFE4, 0x5938, 0xBFE5, 0x57AE, 0xBFE6, 0x630E, 0xBFE7, 0x8DE8, 0xBFE8, 0x80EF, 0xBFE9, 0x5757, + 0xBFEA, 0x7B77, 0xBFEB, 0x4FA9, 0xBFEC, 0x5FEB, 0xBFED, 0x5BBD, 0xBFEE, 0x6B3E, 0xBFEF, 0x5321, 0xBFF0, 0x7B50, 0xBFF1, 0x72C2, + 0xBFF2, 0x6846, 0xBFF3, 0x77FF, 0xBFF4, 0x7736, 0xBFF5, 0x65F7, 0xBFF6, 0x51B5, 0xBFF7, 0x4E8F, 0xBFF8, 0x76D4, 0xBFF9, 0x5CBF, + 0xBFFA, 0x7AA5, 0xBFFB, 0x8475, 0xBFFC, 0x594E, 0xBFFD, 0x9B41, 0xBFFE, 0x5080, 0xC040, 0x7E5E, 0xC041, 0x7E5F, 0xC042, 0x7E60, + 0xC043, 0x7E61, 0xC044, 0x7E62, 0xC045, 0x7E63, 0xC046, 0x7E64, 0xC047, 0x7E65, 0xC048, 0x7E66, 0xC049, 0x7E67, 0xC04A, 0x7E68, + 0xC04B, 0x7E69, 0xC04C, 0x7E6A, 0xC04D, 0x7E6B, 0xC04E, 0x7E6C, 0xC04F, 0x7E6D, 0xC050, 0x7E6E, 0xC051, 0x7E6F, 0xC052, 0x7E70, + 0xC053, 0x7E71, 0xC054, 0x7E72, 0xC055, 0x7E73, 0xC056, 0x7E74, 0xC057, 0x7E75, 0xC058, 0x7E76, 0xC059, 0x7E77, 0xC05A, 0x7E78, + 0xC05B, 0x7E79, 0xC05C, 0x7E7A, 0xC05D, 0x7E7B, 0xC05E, 0x7E7C, 0xC05F, 0x7E7D, 0xC060, 0x7E7E, 0xC061, 0x7E7F, 0xC062, 0x7E80, + 0xC063, 0x7E81, 0xC064, 0x7E83, 0xC065, 0x7E84, 0xC066, 0x7E85, 0xC067, 0x7E86, 0xC068, 0x7E87, 0xC069, 0x7E88, 0xC06A, 0x7E89, + 0xC06B, 0x7E8A, 0xC06C, 0x7E8B, 0xC06D, 0x7E8C, 0xC06E, 0x7E8D, 0xC06F, 0x7E8E, 0xC070, 0x7E8F, 0xC071, 0x7E90, 0xC072, 0x7E91, + 0xC073, 0x7E92, 0xC074, 0x7E93, 0xC075, 0x7E94, 0xC076, 0x7E95, 0xC077, 0x7E96, 0xC078, 0x7E97, 0xC079, 0x7E98, 0xC07A, 0x7E99, + 0xC07B, 0x7E9A, 0xC07C, 0x7E9C, 0xC07D, 0x7E9D, 0xC07E, 0x7E9E, 0xC080, 0x7EAE, 0xC081, 0x7EB4, 0xC082, 0x7EBB, 0xC083, 0x7EBC, + 0xC084, 0x7ED6, 0xC085, 0x7EE4, 0xC086, 0x7EEC, 0xC087, 0x7EF9, 0xC088, 0x7F0A, 0xC089, 0x7F10, 0xC08A, 0x7F1E, 0xC08B, 0x7F37, + 0xC08C, 0x7F39, 0xC08D, 0x7F3B, 0xC08E, 0x7F3C, 0xC08F, 0x7F3D, 0xC090, 0x7F3E, 0xC091, 0x7F3F, 0xC092, 0x7F40, 0xC093, 0x7F41, + 0xC094, 0x7F43, 0xC095, 0x7F46, 0xC096, 0x7F47, 0xC097, 0x7F48, 0xC098, 0x7F49, 0xC099, 0x7F4A, 0xC09A, 0x7F4B, 0xC09B, 0x7F4C, + 0xC09C, 0x7F4D, 0xC09D, 0x7F4E, 0xC09E, 0x7F4F, 0xC09F, 0x7F52, 0xC0A0, 0x7F53, 0xC0A1, 0x9988, 0xC0A2, 0x6127, 0xC0A3, 0x6E83, + 0xC0A4, 0x5764, 0xC0A5, 0x6606, 0xC0A6, 0x6346, 0xC0A7, 0x56F0, 0xC0A8, 0x62EC, 0xC0A9, 0x6269, 0xC0AA, 0x5ED3, 0xC0AB, 0x9614, + 0xC0AC, 0x5783, 0xC0AD, 0x62C9, 0xC0AE, 0x5587, 0xC0AF, 0x8721, 0xC0B0, 0x814A, 0xC0B1, 0x8FA3, 0xC0B2, 0x5566, 0xC0B3, 0x83B1, + 0xC0B4, 0x6765, 0xC0B5, 0x8D56, 0xC0B6, 0x84DD, 0xC0B7, 0x5A6A, 0xC0B8, 0x680F, 0xC0B9, 0x62E6, 0xC0BA, 0x7BEE, 0xC0BB, 0x9611, + 0xC0BC, 0x5170, 0xC0BD, 0x6F9C, 0xC0BE, 0x8C30, 0xC0BF, 0x63FD, 0xC0C0, 0x89C8, 0xC0C1, 0x61D2, 0xC0C2, 0x7F06, 0xC0C3, 0x70C2, + 0xC0C4, 0x6EE5, 0xC0C5, 0x7405, 0xC0C6, 0x6994, 0xC0C7, 0x72FC, 0xC0C8, 0x5ECA, 0xC0C9, 0x90CE, 0xC0CA, 0x6717, 0xC0CB, 0x6D6A, + 0xC0CC, 0x635E, 0xC0CD, 0x52B3, 0xC0CE, 0x7262, 0xC0CF, 0x8001, 0xC0D0, 0x4F6C, 0xC0D1, 0x59E5, 0xC0D2, 0x916A, 0xC0D3, 0x70D9, + 0xC0D4, 0x6D9D, 0xC0D5, 0x52D2, 0xC0D6, 0x4E50, 0xC0D7, 0x96F7, 0xC0D8, 0x956D, 0xC0D9, 0x857E, 0xC0DA, 0x78CA, 0xC0DB, 0x7D2F, + 0xC0DC, 0x5121, 0xC0DD, 0x5792, 0xC0DE, 0x64C2, 0xC0DF, 0x808B, 0xC0E0, 0x7C7B, 0xC0E1, 0x6CEA, 0xC0E2, 0x68F1, 0xC0E3, 0x695E, + 0xC0E4, 0x51B7, 0xC0E5, 0x5398, 0xC0E6, 0x68A8, 0xC0E7, 0x7281, 0xC0E8, 0x9ECE, 0xC0E9, 0x7BF1, 0xC0EA, 0x72F8, 0xC0EB, 0x79BB, + 0xC0EC, 0x6F13, 0xC0ED, 0x7406, 0xC0EE, 0x674E, 0xC0EF, 0x91CC, 0xC0F0, 0x9CA4, 0xC0F1, 0x793C, 0xC0F2, 0x8389, 0xC0F3, 0x8354, + 0xC0F4, 0x540F, 0xC0F5, 0x6817, 0xC0F6, 0x4E3D, 0xC0F7, 0x5389, 0xC0F8, 0x52B1, 0xC0F9, 0x783E, 0xC0FA, 0x5386, 0xC0FB, 0x5229, + 0xC0FC, 0x5088, 0xC0FD, 0x4F8B, 0xC0FE, 0x4FD0, 0xC140, 0x7F56, 0xC141, 0x7F59, 0xC142, 0x7F5B, 0xC143, 0x7F5C, 0xC144, 0x7F5D, + 0xC145, 0x7F5E, 0xC146, 0x7F60, 0xC147, 0x7F63, 0xC148, 0x7F64, 0xC149, 0x7F65, 0xC14A, 0x7F66, 0xC14B, 0x7F67, 0xC14C, 0x7F6B, + 0xC14D, 0x7F6C, 0xC14E, 0x7F6D, 0xC14F, 0x7F6F, 0xC150, 0x7F70, 0xC151, 0x7F73, 0xC152, 0x7F75, 0xC153, 0x7F76, 0xC154, 0x7F77, + 0xC155, 0x7F78, 0xC156, 0x7F7A, 0xC157, 0x7F7B, 0xC158, 0x7F7C, 0xC159, 0x7F7D, 0xC15A, 0x7F7F, 0xC15B, 0x7F80, 0xC15C, 0x7F82, + 0xC15D, 0x7F83, 0xC15E, 0x7F84, 0xC15F, 0x7F85, 0xC160, 0x7F86, 0xC161, 0x7F87, 0xC162, 0x7F88, 0xC163, 0x7F89, 0xC164, 0x7F8B, + 0xC165, 0x7F8D, 0xC166, 0x7F8F, 0xC167, 0x7F90, 0xC168, 0x7F91, 0xC169, 0x7F92, 0xC16A, 0x7F93, 0xC16B, 0x7F95, 0xC16C, 0x7F96, + 0xC16D, 0x7F97, 0xC16E, 0x7F98, 0xC16F, 0x7F99, 0xC170, 0x7F9B, 0xC171, 0x7F9C, 0xC172, 0x7FA0, 0xC173, 0x7FA2, 0xC174, 0x7FA3, + 0xC175, 0x7FA5, 0xC176, 0x7FA6, 0xC177, 0x7FA8, 0xC178, 0x7FA9, 0xC179, 0x7FAA, 0xC17A, 0x7FAB, 0xC17B, 0x7FAC, 0xC17C, 0x7FAD, + 0xC17D, 0x7FAE, 0xC17E, 0x7FB1, 0xC180, 0x7FB3, 0xC181, 0x7FB4, 0xC182, 0x7FB5, 0xC183, 0x7FB6, 0xC184, 0x7FB7, 0xC185, 0x7FBA, + 0xC186, 0x7FBB, 0xC187, 0x7FBE, 0xC188, 0x7FC0, 0xC189, 0x7FC2, 0xC18A, 0x7FC3, 0xC18B, 0x7FC4, 0xC18C, 0x7FC6, 0xC18D, 0x7FC7, + 0xC18E, 0x7FC8, 0xC18F, 0x7FC9, 0xC190, 0x7FCB, 0xC191, 0x7FCD, 0xC192, 0x7FCF, 0xC193, 0x7FD0, 0xC194, 0x7FD1, 0xC195, 0x7FD2, + 0xC196, 0x7FD3, 0xC197, 0x7FD6, 0xC198, 0x7FD7, 0xC199, 0x7FD9, 0xC19A, 0x7FDA, 0xC19B, 0x7FDB, 0xC19C, 0x7FDC, 0xC19D, 0x7FDD, + 0xC19E, 0x7FDE, 0xC19F, 0x7FE2, 0xC1A0, 0x7FE3, 0xC1A1, 0x75E2, 0xC1A2, 0x7ACB, 0xC1A3, 0x7C92, 0xC1A4, 0x6CA5, 0xC1A5, 0x96B6, + 0xC1A6, 0x529B, 0xC1A7, 0x7483, 0xC1A8, 0x54E9, 0xC1A9, 0x4FE9, 0xC1AA, 0x8054, 0xC1AB, 0x83B2, 0xC1AC, 0x8FDE, 0xC1AD, 0x9570, + 0xC1AE, 0x5EC9, 0xC1AF, 0x601C, 0xC1B0, 0x6D9F, 0xC1B1, 0x5E18, 0xC1B2, 0x655B, 0xC1B3, 0x8138, 0xC1B4, 0x94FE, 0xC1B5, 0x604B, + 0xC1B6, 0x70BC, 0xC1B7, 0x7EC3, 0xC1B8, 0x7CAE, 0xC1B9, 0x51C9, 0xC1BA, 0x6881, 0xC1BB, 0x7CB1, 0xC1BC, 0x826F, 0xC1BD, 0x4E24, + 0xC1BE, 0x8F86, 0xC1BF, 0x91CF, 0xC1C0, 0x667E, 0xC1C1, 0x4EAE, 0xC1C2, 0x8C05, 0xC1C3, 0x64A9, 0xC1C4, 0x804A, 0xC1C5, 0x50DA, + 0xC1C6, 0x7597, 0xC1C7, 0x71CE, 0xC1C8, 0x5BE5, 0xC1C9, 0x8FBD, 0xC1CA, 0x6F66, 0xC1CB, 0x4E86, 0xC1CC, 0x6482, 0xC1CD, 0x9563, + 0xC1CE, 0x5ED6, 0xC1CF, 0x6599, 0xC1D0, 0x5217, 0xC1D1, 0x88C2, 0xC1D2, 0x70C8, 0xC1D3, 0x52A3, 0xC1D4, 0x730E, 0xC1D5, 0x7433, + 0xC1D6, 0x6797, 0xC1D7, 0x78F7, 0xC1D8, 0x9716, 0xC1D9, 0x4E34, 0xC1DA, 0x90BB, 0xC1DB, 0x9CDE, 0xC1DC, 0x6DCB, 0xC1DD, 0x51DB, + 0xC1DE, 0x8D41, 0xC1DF, 0x541D, 0xC1E0, 0x62CE, 0xC1E1, 0x73B2, 0xC1E2, 0x83F1, 0xC1E3, 0x96F6, 0xC1E4, 0x9F84, 0xC1E5, 0x94C3, + 0xC1E6, 0x4F36, 0xC1E7, 0x7F9A, 0xC1E8, 0x51CC, 0xC1E9, 0x7075, 0xC1EA, 0x9675, 0xC1EB, 0x5CAD, 0xC1EC, 0x9886, 0xC1ED, 0x53E6, + 0xC1EE, 0x4EE4, 0xC1EF, 0x6E9C, 0xC1F0, 0x7409, 0xC1F1, 0x69B4, 0xC1F2, 0x786B, 0xC1F3, 0x998F, 0xC1F4, 0x7559, 0xC1F5, 0x5218, + 0xC1F6, 0x7624, 0xC1F7, 0x6D41, 0xC1F8, 0x67F3, 0xC1F9, 0x516D, 0xC1FA, 0x9F99, 0xC1FB, 0x804B, 0xC1FC, 0x5499, 0xC1FD, 0x7B3C, + 0xC1FE, 0x7ABF, 0xC240, 0x7FE4, 0xC241, 0x7FE7, 0xC242, 0x7FE8, 0xC243, 0x7FEA, 0xC244, 0x7FEB, 0xC245, 0x7FEC, 0xC246, 0x7FED, + 0xC247, 0x7FEF, 0xC248, 0x7FF2, 0xC249, 0x7FF4, 0xC24A, 0x7FF5, 0xC24B, 0x7FF6, 0xC24C, 0x7FF7, 0xC24D, 0x7FF8, 0xC24E, 0x7FF9, + 0xC24F, 0x7FFA, 0xC250, 0x7FFD, 0xC251, 0x7FFE, 0xC252, 0x7FFF, 0xC253, 0x8002, 0xC254, 0x8007, 0xC255, 0x8008, 0xC256, 0x8009, + 0xC257, 0x800A, 0xC258, 0x800E, 0xC259, 0x800F, 0xC25A, 0x8011, 0xC25B, 0x8013, 0xC25C, 0x801A, 0xC25D, 0x801B, 0xC25E, 0x801D, + 0xC25F, 0x801E, 0xC260, 0x801F, 0xC261, 0x8021, 0xC262, 0x8023, 0xC263, 0x8024, 0xC264, 0x802B, 0xC265, 0x802C, 0xC266, 0x802D, + 0xC267, 0x802E, 0xC268, 0x802F, 0xC269, 0x8030, 0xC26A, 0x8032, 0xC26B, 0x8034, 0xC26C, 0x8039, 0xC26D, 0x803A, 0xC26E, 0x803C, + 0xC26F, 0x803E, 0xC270, 0x8040, 0xC271, 0x8041, 0xC272, 0x8044, 0xC273, 0x8045, 0xC274, 0x8047, 0xC275, 0x8048, 0xC276, 0x8049, + 0xC277, 0x804E, 0xC278, 0x804F, 0xC279, 0x8050, 0xC27A, 0x8051, 0xC27B, 0x8053, 0xC27C, 0x8055, 0xC27D, 0x8056, 0xC27E, 0x8057, + 0xC280, 0x8059, 0xC281, 0x805B, 0xC282, 0x805C, 0xC283, 0x805D, 0xC284, 0x805E, 0xC285, 0x805F, 0xC286, 0x8060, 0xC287, 0x8061, + 0xC288, 0x8062, 0xC289, 0x8063, 0xC28A, 0x8064, 0xC28B, 0x8065, 0xC28C, 0x8066, 0xC28D, 0x8067, 0xC28E, 0x8068, 0xC28F, 0x806B, + 0xC290, 0x806C, 0xC291, 0x806D, 0xC292, 0x806E, 0xC293, 0x806F, 0xC294, 0x8070, 0xC295, 0x8072, 0xC296, 0x8073, 0xC297, 0x8074, + 0xC298, 0x8075, 0xC299, 0x8076, 0xC29A, 0x8077, 0xC29B, 0x8078, 0xC29C, 0x8079, 0xC29D, 0x807A, 0xC29E, 0x807B, 0xC29F, 0x807C, + 0xC2A0, 0x807D, 0xC2A1, 0x9686, 0xC2A2, 0x5784, 0xC2A3, 0x62E2, 0xC2A4, 0x9647, 0xC2A5, 0x697C, 0xC2A6, 0x5A04, 0xC2A7, 0x6402, + 0xC2A8, 0x7BD3, 0xC2A9, 0x6F0F, 0xC2AA, 0x964B, 0xC2AB, 0x82A6, 0xC2AC, 0x5362, 0xC2AD, 0x9885, 0xC2AE, 0x5E90, 0xC2AF, 0x7089, + 0xC2B0, 0x63B3, 0xC2B1, 0x5364, 0xC2B2, 0x864F, 0xC2B3, 0x9C81, 0xC2B4, 0x9E93, 0xC2B5, 0x788C, 0xC2B6, 0x9732, 0xC2B7, 0x8DEF, + 0xC2B8, 0x8D42, 0xC2B9, 0x9E7F, 0xC2BA, 0x6F5E, 0xC2BB, 0x7984, 0xC2BC, 0x5F55, 0xC2BD, 0x9646, 0xC2BE, 0x622E, 0xC2BF, 0x9A74, + 0xC2C0, 0x5415, 0xC2C1, 0x94DD, 0xC2C2, 0x4FA3, 0xC2C3, 0x65C5, 0xC2C4, 0x5C65, 0xC2C5, 0x5C61, 0xC2C6, 0x7F15, 0xC2C7, 0x8651, + 0xC2C8, 0x6C2F, 0xC2C9, 0x5F8B, 0xC2CA, 0x7387, 0xC2CB, 0x6EE4, 0xC2CC, 0x7EFF, 0xC2CD, 0x5CE6, 0xC2CE, 0x631B, 0xC2CF, 0x5B6A, + 0xC2D0, 0x6EE6, 0xC2D1, 0x5375, 0xC2D2, 0x4E71, 0xC2D3, 0x63A0, 0xC2D4, 0x7565, 0xC2D5, 0x62A1, 0xC2D6, 0x8F6E, 0xC2D7, 0x4F26, + 0xC2D8, 0x4ED1, 0xC2D9, 0x6CA6, 0xC2DA, 0x7EB6, 0xC2DB, 0x8BBA, 0xC2DC, 0x841D, 0xC2DD, 0x87BA, 0xC2DE, 0x7F57, 0xC2DF, 0x903B, + 0xC2E0, 0x9523, 0xC2E1, 0x7BA9, 0xC2E2, 0x9AA1, 0xC2E3, 0x88F8, 0xC2E4, 0x843D, 0xC2E5, 0x6D1B, 0xC2E6, 0x9A86, 0xC2E7, 0x7EDC, + 0xC2E8, 0x5988, 0xC2E9, 0x9EBB, 0xC2EA, 0x739B, 0xC2EB, 0x7801, 0xC2EC, 0x8682, 0xC2ED, 0x9A6C, 0xC2EE, 0x9A82, 0xC2EF, 0x561B, + 0xC2F0, 0x5417, 0xC2F1, 0x57CB, 0xC2F2, 0x4E70, 0xC2F3, 0x9EA6, 0xC2F4, 0x5356, 0xC2F5, 0x8FC8, 0xC2F6, 0x8109, 0xC2F7, 0x7792, + 0xC2F8, 0x9992, 0xC2F9, 0x86EE, 0xC2FA, 0x6EE1, 0xC2FB, 0x8513, 0xC2FC, 0x66FC, 0xC2FD, 0x6162, 0xC2FE, 0x6F2B, 0xC340, 0x807E, + 0xC341, 0x8081, 0xC342, 0x8082, 0xC343, 0x8085, 0xC344, 0x8088, 0xC345, 0x808A, 0xC346, 0x808D, 0xC347, 0x808E, 0xC348, 0x808F, + 0xC349, 0x8090, 0xC34A, 0x8091, 0xC34B, 0x8092, 0xC34C, 0x8094, 0xC34D, 0x8095, 0xC34E, 0x8097, 0xC34F, 0x8099, 0xC350, 0x809E, + 0xC351, 0x80A3, 0xC352, 0x80A6, 0xC353, 0x80A7, 0xC354, 0x80A8, 0xC355, 0x80AC, 0xC356, 0x80B0, 0xC357, 0x80B3, 0xC358, 0x80B5, + 0xC359, 0x80B6, 0xC35A, 0x80B8, 0xC35B, 0x80B9, 0xC35C, 0x80BB, 0xC35D, 0x80C5, 0xC35E, 0x80C7, 0xC35F, 0x80C8, 0xC360, 0x80C9, + 0xC361, 0x80CA, 0xC362, 0x80CB, 0xC363, 0x80CF, 0xC364, 0x80D0, 0xC365, 0x80D1, 0xC366, 0x80D2, 0xC367, 0x80D3, 0xC368, 0x80D4, + 0xC369, 0x80D5, 0xC36A, 0x80D8, 0xC36B, 0x80DF, 0xC36C, 0x80E0, 0xC36D, 0x80E2, 0xC36E, 0x80E3, 0xC36F, 0x80E6, 0xC370, 0x80EE, + 0xC371, 0x80F5, 0xC372, 0x80F7, 0xC373, 0x80F9, 0xC374, 0x80FB, 0xC375, 0x80FE, 0xC376, 0x80FF, 0xC377, 0x8100, 0xC378, 0x8101, + 0xC379, 0x8103, 0xC37A, 0x8104, 0xC37B, 0x8105, 0xC37C, 0x8107, 0xC37D, 0x8108, 0xC37E, 0x810B, 0xC380, 0x810C, 0xC381, 0x8115, + 0xC382, 0x8117, 0xC383, 0x8119, 0xC384, 0x811B, 0xC385, 0x811C, 0xC386, 0x811D, 0xC387, 0x811F, 0xC388, 0x8120, 0xC389, 0x8121, + 0xC38A, 0x8122, 0xC38B, 0x8123, 0xC38C, 0x8124, 0xC38D, 0x8125, 0xC38E, 0x8126, 0xC38F, 0x8127, 0xC390, 0x8128, 0xC391, 0x8129, + 0xC392, 0x812A, 0xC393, 0x812B, 0xC394, 0x812D, 0xC395, 0x812E, 0xC396, 0x8130, 0xC397, 0x8133, 0xC398, 0x8134, 0xC399, 0x8135, + 0xC39A, 0x8137, 0xC39B, 0x8139, 0xC39C, 0x813A, 0xC39D, 0x813B, 0xC39E, 0x813C, 0xC39F, 0x813D, 0xC3A0, 0x813F, 0xC3A1, 0x8C29, + 0xC3A2, 0x8292, 0xC3A3, 0x832B, 0xC3A4, 0x76F2, 0xC3A5, 0x6C13, 0xC3A6, 0x5FD9, 0xC3A7, 0x83BD, 0xC3A8, 0x732B, 0xC3A9, 0x8305, + 0xC3AA, 0x951A, 0xC3AB, 0x6BDB, 0xC3AC, 0x77DB, 0xC3AD, 0x94C6, 0xC3AE, 0x536F, 0xC3AF, 0x8302, 0xC3B0, 0x5192, 0xC3B1, 0x5E3D, + 0xC3B2, 0x8C8C, 0xC3B3, 0x8D38, 0xC3B4, 0x4E48, 0xC3B5, 0x73AB, 0xC3B6, 0x679A, 0xC3B7, 0x6885, 0xC3B8, 0x9176, 0xC3B9, 0x9709, + 0xC3BA, 0x7164, 0xC3BB, 0x6CA1, 0xC3BC, 0x7709, 0xC3BD, 0x5A92, 0xC3BE, 0x9541, 0xC3BF, 0x6BCF, 0xC3C0, 0x7F8E, 0xC3C1, 0x6627, + 0xC3C2, 0x5BD0, 0xC3C3, 0x59B9, 0xC3C4, 0x5A9A, 0xC3C5, 0x95E8, 0xC3C6, 0x95F7, 0xC3C7, 0x4EEC, 0xC3C8, 0x840C, 0xC3C9, 0x8499, + 0xC3CA, 0x6AAC, 0xC3CB, 0x76DF, 0xC3CC, 0x9530, 0xC3CD, 0x731B, 0xC3CE, 0x68A6, 0xC3CF, 0x5B5F, 0xC3D0, 0x772F, 0xC3D1, 0x919A, + 0xC3D2, 0x9761, 0xC3D3, 0x7CDC, 0xC3D4, 0x8FF7, 0xC3D5, 0x8C1C, 0xC3D6, 0x5F25, 0xC3D7, 0x7C73, 0xC3D8, 0x79D8, 0xC3D9, 0x89C5, + 0xC3DA, 0x6CCC, 0xC3DB, 0x871C, 0xC3DC, 0x5BC6, 0xC3DD, 0x5E42, 0xC3DE, 0x68C9, 0xC3DF, 0x7720, 0xC3E0, 0x7EF5, 0xC3E1, 0x5195, + 0xC3E2, 0x514D, 0xC3E3, 0x52C9, 0xC3E4, 0x5A29, 0xC3E5, 0x7F05, 0xC3E6, 0x9762, 0xC3E7, 0x82D7, 0xC3E8, 0x63CF, 0xC3E9, 0x7784, + 0xC3EA, 0x85D0, 0xC3EB, 0x79D2, 0xC3EC, 0x6E3A, 0xC3ED, 0x5E99, 0xC3EE, 0x5999, 0xC3EF, 0x8511, 0xC3F0, 0x706D, 0xC3F1, 0x6C11, + 0xC3F2, 0x62BF, 0xC3F3, 0x76BF, 0xC3F4, 0x654F, 0xC3F5, 0x60AF, 0xC3F6, 0x95FD, 0xC3F7, 0x660E, 0xC3F8, 0x879F, 0xC3F9, 0x9E23, + 0xC3FA, 0x94ED, 0xC3FB, 0x540D, 0xC3FC, 0x547D, 0xC3FD, 0x8C2C, 0xC3FE, 0x6478, 0xC440, 0x8140, 0xC441, 0x8141, 0xC442, 0x8142, + 0xC443, 0x8143, 0xC444, 0x8144, 0xC445, 0x8145, 0xC446, 0x8147, 0xC447, 0x8149, 0xC448, 0x814D, 0xC449, 0x814E, 0xC44A, 0x814F, + 0xC44B, 0x8152, 0xC44C, 0x8156, 0xC44D, 0x8157, 0xC44E, 0x8158, 0xC44F, 0x815B, 0xC450, 0x815C, 0xC451, 0x815D, 0xC452, 0x815E, + 0xC453, 0x815F, 0xC454, 0x8161, 0xC455, 0x8162, 0xC456, 0x8163, 0xC457, 0x8164, 0xC458, 0x8166, 0xC459, 0x8168, 0xC45A, 0x816A, + 0xC45B, 0x816B, 0xC45C, 0x816C, 0xC45D, 0x816F, 0xC45E, 0x8172, 0xC45F, 0x8173, 0xC460, 0x8175, 0xC461, 0x8176, 0xC462, 0x8177, + 0xC463, 0x8178, 0xC464, 0x8181, 0xC465, 0x8183, 0xC466, 0x8184, 0xC467, 0x8185, 0xC468, 0x8186, 0xC469, 0x8187, 0xC46A, 0x8189, + 0xC46B, 0x818B, 0xC46C, 0x818C, 0xC46D, 0x818D, 0xC46E, 0x818E, 0xC46F, 0x8190, 0xC470, 0x8192, 0xC471, 0x8193, 0xC472, 0x8194, + 0xC473, 0x8195, 0xC474, 0x8196, 0xC475, 0x8197, 0xC476, 0x8199, 0xC477, 0x819A, 0xC478, 0x819E, 0xC479, 0x819F, 0xC47A, 0x81A0, + 0xC47B, 0x81A1, 0xC47C, 0x81A2, 0xC47D, 0x81A4, 0xC47E, 0x81A5, 0xC480, 0x81A7, 0xC481, 0x81A9, 0xC482, 0x81AB, 0xC483, 0x81AC, + 0xC484, 0x81AD, 0xC485, 0x81AE, 0xC486, 0x81AF, 0xC487, 0x81B0, 0xC488, 0x81B1, 0xC489, 0x81B2, 0xC48A, 0x81B4, 0xC48B, 0x81B5, + 0xC48C, 0x81B6, 0xC48D, 0x81B7, 0xC48E, 0x81B8, 0xC48F, 0x81B9, 0xC490, 0x81BC, 0xC491, 0x81BD, 0xC492, 0x81BE, 0xC493, 0x81BF, + 0xC494, 0x81C4, 0xC495, 0x81C5, 0xC496, 0x81C7, 0xC497, 0x81C8, 0xC498, 0x81C9, 0xC499, 0x81CB, 0xC49A, 0x81CD, 0xC49B, 0x81CE, + 0xC49C, 0x81CF, 0xC49D, 0x81D0, 0xC49E, 0x81D1, 0xC49F, 0x81D2, 0xC4A0, 0x81D3, 0xC4A1, 0x6479, 0xC4A2, 0x8611, 0xC4A3, 0x6A21, + 0xC4A4, 0x819C, 0xC4A5, 0x78E8, 0xC4A6, 0x6469, 0xC4A7, 0x9B54, 0xC4A8, 0x62B9, 0xC4A9, 0x672B, 0xC4AA, 0x83AB, 0xC4AB, 0x58A8, + 0xC4AC, 0x9ED8, 0xC4AD, 0x6CAB, 0xC4AE, 0x6F20, 0xC4AF, 0x5BDE, 0xC4B0, 0x964C, 0xC4B1, 0x8C0B, 0xC4B2, 0x725F, 0xC4B3, 0x67D0, + 0xC4B4, 0x62C7, 0xC4B5, 0x7261, 0xC4B6, 0x4EA9, 0xC4B7, 0x59C6, 0xC4B8, 0x6BCD, 0xC4B9, 0x5893, 0xC4BA, 0x66AE, 0xC4BB, 0x5E55, + 0xC4BC, 0x52DF, 0xC4BD, 0x6155, 0xC4BE, 0x6728, 0xC4BF, 0x76EE, 0xC4C0, 0x7766, 0xC4C1, 0x7267, 0xC4C2, 0x7A46, 0xC4C3, 0x62FF, + 0xC4C4, 0x54EA, 0xC4C5, 0x5450, 0xC4C6, 0x94A0, 0xC4C7, 0x90A3, 0xC4C8, 0x5A1C, 0xC4C9, 0x7EB3, 0xC4CA, 0x6C16, 0xC4CB, 0x4E43, + 0xC4CC, 0x5976, 0xC4CD, 0x8010, 0xC4CE, 0x5948, 0xC4CF, 0x5357, 0xC4D0, 0x7537, 0xC4D1, 0x96BE, 0xC4D2, 0x56CA, 0xC4D3, 0x6320, + 0xC4D4, 0x8111, 0xC4D5, 0x607C, 0xC4D6, 0x95F9, 0xC4D7, 0x6DD6, 0xC4D8, 0x5462, 0xC4D9, 0x9981, 0xC4DA, 0x5185, 0xC4DB, 0x5AE9, + 0xC4DC, 0x80FD, 0xC4DD, 0x59AE, 0xC4DE, 0x9713, 0xC4DF, 0x502A, 0xC4E0, 0x6CE5, 0xC4E1, 0x5C3C, 0xC4E2, 0x62DF, 0xC4E3, 0x4F60, + 0xC4E4, 0x533F, 0xC4E5, 0x817B, 0xC4E6, 0x9006, 0xC4E7, 0x6EBA, 0xC4E8, 0x852B, 0xC4E9, 0x62C8, 0xC4EA, 0x5E74, 0xC4EB, 0x78BE, + 0xC4EC, 0x64B5, 0xC4ED, 0x637B, 0xC4EE, 0x5FF5, 0xC4EF, 0x5A18, 0xC4F0, 0x917F, 0xC4F1, 0x9E1F, 0xC4F2, 0x5C3F, 0xC4F3, 0x634F, + 0xC4F4, 0x8042, 0xC4F5, 0x5B7D, 0xC4F6, 0x556E, 0xC4F7, 0x954A, 0xC4F8, 0x954D, 0xC4F9, 0x6D85, 0xC4FA, 0x60A8, 0xC4FB, 0x67E0, + 0xC4FC, 0x72DE, 0xC4FD, 0x51DD, 0xC4FE, 0x5B81, 0xC540, 0x81D4, 0xC541, 0x81D5, 0xC542, 0x81D6, 0xC543, 0x81D7, 0xC544, 0x81D8, + 0xC545, 0x81D9, 0xC546, 0x81DA, 0xC547, 0x81DB, 0xC548, 0x81DC, 0xC549, 0x81DD, 0xC54A, 0x81DE, 0xC54B, 0x81DF, 0xC54C, 0x81E0, + 0xC54D, 0x81E1, 0xC54E, 0x81E2, 0xC54F, 0x81E4, 0xC550, 0x81E5, 0xC551, 0x81E6, 0xC552, 0x81E8, 0xC553, 0x81E9, 0xC554, 0x81EB, + 0xC555, 0x81EE, 0xC556, 0x81EF, 0xC557, 0x81F0, 0xC558, 0x81F1, 0xC559, 0x81F2, 0xC55A, 0x81F5, 0xC55B, 0x81F6, 0xC55C, 0x81F7, + 0xC55D, 0x81F8, 0xC55E, 0x81F9, 0xC55F, 0x81FA, 0xC560, 0x81FD, 0xC561, 0x81FF, 0xC562, 0x8203, 0xC563, 0x8207, 0xC564, 0x8208, + 0xC565, 0x8209, 0xC566, 0x820A, 0xC567, 0x820B, 0xC568, 0x820E, 0xC569, 0x820F, 0xC56A, 0x8211, 0xC56B, 0x8213, 0xC56C, 0x8215, + 0xC56D, 0x8216, 0xC56E, 0x8217, 0xC56F, 0x8218, 0xC570, 0x8219, 0xC571, 0x821A, 0xC572, 0x821D, 0xC573, 0x8220, 0xC574, 0x8224, + 0xC575, 0x8225, 0xC576, 0x8226, 0xC577, 0x8227, 0xC578, 0x8229, 0xC579, 0x822E, 0xC57A, 0x8232, 0xC57B, 0x823A, 0xC57C, 0x823C, + 0xC57D, 0x823D, 0xC57E, 0x823F, 0xC580, 0x8240, 0xC581, 0x8241, 0xC582, 0x8242, 0xC583, 0x8243, 0xC584, 0x8245, 0xC585, 0x8246, + 0xC586, 0x8248, 0xC587, 0x824A, 0xC588, 0x824C, 0xC589, 0x824D, 0xC58A, 0x824E, 0xC58B, 0x8250, 0xC58C, 0x8251, 0xC58D, 0x8252, + 0xC58E, 0x8253, 0xC58F, 0x8254, 0xC590, 0x8255, 0xC591, 0x8256, 0xC592, 0x8257, 0xC593, 0x8259, 0xC594, 0x825B, 0xC595, 0x825C, + 0xC596, 0x825D, 0xC597, 0x825E, 0xC598, 0x8260, 0xC599, 0x8261, 0xC59A, 0x8262, 0xC59B, 0x8263, 0xC59C, 0x8264, 0xC59D, 0x8265, + 0xC59E, 0x8266, 0xC59F, 0x8267, 0xC5A0, 0x8269, 0xC5A1, 0x62E7, 0xC5A2, 0x6CDE, 0xC5A3, 0x725B, 0xC5A4, 0x626D, 0xC5A5, 0x94AE, + 0xC5A6, 0x7EBD, 0xC5A7, 0x8113, 0xC5A8, 0x6D53, 0xC5A9, 0x519C, 0xC5AA, 0x5F04, 0xC5AB, 0x5974, 0xC5AC, 0x52AA, 0xC5AD, 0x6012, + 0xC5AE, 0x5973, 0xC5AF, 0x6696, 0xC5B0, 0x8650, 0xC5B1, 0x759F, 0xC5B2, 0x632A, 0xC5B3, 0x61E6, 0xC5B4, 0x7CEF, 0xC5B5, 0x8BFA, + 0xC5B6, 0x54E6, 0xC5B7, 0x6B27, 0xC5B8, 0x9E25, 0xC5B9, 0x6BB4, 0xC5BA, 0x85D5, 0xC5BB, 0x5455, 0xC5BC, 0x5076, 0xC5BD, 0x6CA4, + 0xC5BE, 0x556A, 0xC5BF, 0x8DB4, 0xC5C0, 0x722C, 0xC5C1, 0x5E15, 0xC5C2, 0x6015, 0xC5C3, 0x7436, 0xC5C4, 0x62CD, 0xC5C5, 0x6392, + 0xC5C6, 0x724C, 0xC5C7, 0x5F98, 0xC5C8, 0x6E43, 0xC5C9, 0x6D3E, 0xC5CA, 0x6500, 0xC5CB, 0x6F58, 0xC5CC, 0x76D8, 0xC5CD, 0x78D0, + 0xC5CE, 0x76FC, 0xC5CF, 0x7554, 0xC5D0, 0x5224, 0xC5D1, 0x53DB, 0xC5D2, 0x4E53, 0xC5D3, 0x5E9E, 0xC5D4, 0x65C1, 0xC5D5, 0x802A, + 0xC5D6, 0x80D6, 0xC5D7, 0x629B, 0xC5D8, 0x5486, 0xC5D9, 0x5228, 0xC5DA, 0x70AE, 0xC5DB, 0x888D, 0xC5DC, 0x8DD1, 0xC5DD, 0x6CE1, + 0xC5DE, 0x5478, 0xC5DF, 0x80DA, 0xC5E0, 0x57F9, 0xC5E1, 0x88F4, 0xC5E2, 0x8D54, 0xC5E3, 0x966A, 0xC5E4, 0x914D, 0xC5E5, 0x4F69, + 0xC5E6, 0x6C9B, 0xC5E7, 0x55B7, 0xC5E8, 0x76C6, 0xC5E9, 0x7830, 0xC5EA, 0x62A8, 0xC5EB, 0x70F9, 0xC5EC, 0x6F8E, 0xC5ED, 0x5F6D, + 0xC5EE, 0x84EC, 0xC5EF, 0x68DA, 0xC5F0, 0x787C, 0xC5F1, 0x7BF7, 0xC5F2, 0x81A8, 0xC5F3, 0x670B, 0xC5F4, 0x9E4F, 0xC5F5, 0x6367, + 0xC5F6, 0x78B0, 0xC5F7, 0x576F, 0xC5F8, 0x7812, 0xC5F9, 0x9739, 0xC5FA, 0x6279, 0xC5FB, 0x62AB, 0xC5FC, 0x5288, 0xC5FD, 0x7435, + 0xC5FE, 0x6BD7, 0xC640, 0x826A, 0xC641, 0x826B, 0xC642, 0x826C, 0xC643, 0x826D, 0xC644, 0x8271, 0xC645, 0x8275, 0xC646, 0x8276, + 0xC647, 0x8277, 0xC648, 0x8278, 0xC649, 0x827B, 0xC64A, 0x827C, 0xC64B, 0x8280, 0xC64C, 0x8281, 0xC64D, 0x8283, 0xC64E, 0x8285, + 0xC64F, 0x8286, 0xC650, 0x8287, 0xC651, 0x8289, 0xC652, 0x828C, 0xC653, 0x8290, 0xC654, 0x8293, 0xC655, 0x8294, 0xC656, 0x8295, + 0xC657, 0x8296, 0xC658, 0x829A, 0xC659, 0x829B, 0xC65A, 0x829E, 0xC65B, 0x82A0, 0xC65C, 0x82A2, 0xC65D, 0x82A3, 0xC65E, 0x82A7, + 0xC65F, 0x82B2, 0xC660, 0x82B5, 0xC661, 0x82B6, 0xC662, 0x82BA, 0xC663, 0x82BB, 0xC664, 0x82BC, 0xC665, 0x82BF, 0xC666, 0x82C0, + 0xC667, 0x82C2, 0xC668, 0x82C3, 0xC669, 0x82C5, 0xC66A, 0x82C6, 0xC66B, 0x82C9, 0xC66C, 0x82D0, 0xC66D, 0x82D6, 0xC66E, 0x82D9, + 0xC66F, 0x82DA, 0xC670, 0x82DD, 0xC671, 0x82E2, 0xC672, 0x82E7, 0xC673, 0x82E8, 0xC674, 0x82E9, 0xC675, 0x82EA, 0xC676, 0x82EC, + 0xC677, 0x82ED, 0xC678, 0x82EE, 0xC679, 0x82F0, 0xC67A, 0x82F2, 0xC67B, 0x82F3, 0xC67C, 0x82F5, 0xC67D, 0x82F6, 0xC67E, 0x82F8, + 0xC680, 0x82FA, 0xC681, 0x82FC, 0xC682, 0x82FD, 0xC683, 0x82FE, 0xC684, 0x82FF, 0xC685, 0x8300, 0xC686, 0x830A, 0xC687, 0x830B, + 0xC688, 0x830D, 0xC689, 0x8310, 0xC68A, 0x8312, 0xC68B, 0x8313, 0xC68C, 0x8316, 0xC68D, 0x8318, 0xC68E, 0x8319, 0xC68F, 0x831D, + 0xC690, 0x831E, 0xC691, 0x831F, 0xC692, 0x8320, 0xC693, 0x8321, 0xC694, 0x8322, 0xC695, 0x8323, 0xC696, 0x8324, 0xC697, 0x8325, + 0xC698, 0x8326, 0xC699, 0x8329, 0xC69A, 0x832A, 0xC69B, 0x832E, 0xC69C, 0x8330, 0xC69D, 0x8332, 0xC69E, 0x8337, 0xC69F, 0x833B, + 0xC6A0, 0x833D, 0xC6A1, 0x5564, 0xC6A2, 0x813E, 0xC6A3, 0x75B2, 0xC6A4, 0x76AE, 0xC6A5, 0x5339, 0xC6A6, 0x75DE, 0xC6A7, 0x50FB, + 0xC6A8, 0x5C41, 0xC6A9, 0x8B6C, 0xC6AA, 0x7BC7, 0xC6AB, 0x504F, 0xC6AC, 0x7247, 0xC6AD, 0x9A97, 0xC6AE, 0x98D8, 0xC6AF, 0x6F02, + 0xC6B0, 0x74E2, 0xC6B1, 0x7968, 0xC6B2, 0x6487, 0xC6B3, 0x77A5, 0xC6B4, 0x62FC, 0xC6B5, 0x9891, 0xC6B6, 0x8D2B, 0xC6B7, 0x54C1, + 0xC6B8, 0x8058, 0xC6B9, 0x4E52, 0xC6BA, 0x576A, 0xC6BB, 0x82F9, 0xC6BC, 0x840D, 0xC6BD, 0x5E73, 0xC6BE, 0x51ED, 0xC6BF, 0x74F6, + 0xC6C0, 0x8BC4, 0xC6C1, 0x5C4F, 0xC6C2, 0x5761, 0xC6C3, 0x6CFC, 0xC6C4, 0x9887, 0xC6C5, 0x5A46, 0xC6C6, 0x7834, 0xC6C7, 0x9B44, + 0xC6C8, 0x8FEB, 0xC6C9, 0x7C95, 0xC6CA, 0x5256, 0xC6CB, 0x6251, 0xC6CC, 0x94FA, 0xC6CD, 0x4EC6, 0xC6CE, 0x8386, 0xC6CF, 0x8461, + 0xC6D0, 0x83E9, 0xC6D1, 0x84B2, 0xC6D2, 0x57D4, 0xC6D3, 0x6734, 0xC6D4, 0x5703, 0xC6D5, 0x666E, 0xC6D6, 0x6D66, 0xC6D7, 0x8C31, + 0xC6D8, 0x66DD, 0xC6D9, 0x7011, 0xC6DA, 0x671F, 0xC6DB, 0x6B3A, 0xC6DC, 0x6816, 0xC6DD, 0x621A, 0xC6DE, 0x59BB, 0xC6DF, 0x4E03, + 0xC6E0, 0x51C4, 0xC6E1, 0x6F06, 0xC6E2, 0x67D2, 0xC6E3, 0x6C8F, 0xC6E4, 0x5176, 0xC6E5, 0x68CB, 0xC6E6, 0x5947, 0xC6E7, 0x6B67, + 0xC6E8, 0x7566, 0xC6E9, 0x5D0E, 0xC6EA, 0x8110, 0xC6EB, 0x9F50, 0xC6EC, 0x65D7, 0xC6ED, 0x7948, 0xC6EE, 0x7941, 0xC6EF, 0x9A91, + 0xC6F0, 0x8D77, 0xC6F1, 0x5C82, 0xC6F2, 0x4E5E, 0xC6F3, 0x4F01, 0xC6F4, 0x542F, 0xC6F5, 0x5951, 0xC6F6, 0x780C, 0xC6F7, 0x5668, + 0xC6F8, 0x6C14, 0xC6F9, 0x8FC4, 0xC6FA, 0x5F03, 0xC6FB, 0x6C7D, 0xC6FC, 0x6CE3, 0xC6FD, 0x8BAB, 0xC6FE, 0x6390, 0xC740, 0x833E, + 0xC741, 0x833F, 0xC742, 0x8341, 0xC743, 0x8342, 0xC744, 0x8344, 0xC745, 0x8345, 0xC746, 0x8348, 0xC747, 0x834A, 0xC748, 0x834B, + 0xC749, 0x834C, 0xC74A, 0x834D, 0xC74B, 0x834E, 0xC74C, 0x8353, 0xC74D, 0x8355, 0xC74E, 0x8356, 0xC74F, 0x8357, 0xC750, 0x8358, + 0xC751, 0x8359, 0xC752, 0x835D, 0xC753, 0x8362, 0xC754, 0x8370, 0xC755, 0x8371, 0xC756, 0x8372, 0xC757, 0x8373, 0xC758, 0x8374, + 0xC759, 0x8375, 0xC75A, 0x8376, 0xC75B, 0x8379, 0xC75C, 0x837A, 0xC75D, 0x837E, 0xC75E, 0x837F, 0xC75F, 0x8380, 0xC760, 0x8381, + 0xC761, 0x8382, 0xC762, 0x8383, 0xC763, 0x8384, 0xC764, 0x8387, 0xC765, 0x8388, 0xC766, 0x838A, 0xC767, 0x838B, 0xC768, 0x838C, + 0xC769, 0x838D, 0xC76A, 0x838F, 0xC76B, 0x8390, 0xC76C, 0x8391, 0xC76D, 0x8394, 0xC76E, 0x8395, 0xC76F, 0x8396, 0xC770, 0x8397, + 0xC771, 0x8399, 0xC772, 0x839A, 0xC773, 0x839D, 0xC774, 0x839F, 0xC775, 0x83A1, 0xC776, 0x83A2, 0xC777, 0x83A3, 0xC778, 0x83A4, + 0xC779, 0x83A5, 0xC77A, 0x83A6, 0xC77B, 0x83A7, 0xC77C, 0x83AC, 0xC77D, 0x83AD, 0xC77E, 0x83AE, 0xC780, 0x83AF, 0xC781, 0x83B5, + 0xC782, 0x83BB, 0xC783, 0x83BE, 0xC784, 0x83BF, 0xC785, 0x83C2, 0xC786, 0x83C3, 0xC787, 0x83C4, 0xC788, 0x83C6, 0xC789, 0x83C8, + 0xC78A, 0x83C9, 0xC78B, 0x83CB, 0xC78C, 0x83CD, 0xC78D, 0x83CE, 0xC78E, 0x83D0, 0xC78F, 0x83D1, 0xC790, 0x83D2, 0xC791, 0x83D3, + 0xC792, 0x83D5, 0xC793, 0x83D7, 0xC794, 0x83D9, 0xC795, 0x83DA, 0xC796, 0x83DB, 0xC797, 0x83DE, 0xC798, 0x83E2, 0xC799, 0x83E3, + 0xC79A, 0x83E4, 0xC79B, 0x83E6, 0xC79C, 0x83E7, 0xC79D, 0x83E8, 0xC79E, 0x83EB, 0xC79F, 0x83EC, 0xC7A0, 0x83ED, 0xC7A1, 0x6070, + 0xC7A2, 0x6D3D, 0xC7A3, 0x7275, 0xC7A4, 0x6266, 0xC7A5, 0x948E, 0xC7A6, 0x94C5, 0xC7A7, 0x5343, 0xC7A8, 0x8FC1, 0xC7A9, 0x7B7E, + 0xC7AA, 0x4EDF, 0xC7AB, 0x8C26, 0xC7AC, 0x4E7E, 0xC7AD, 0x9ED4, 0xC7AE, 0x94B1, 0xC7AF, 0x94B3, 0xC7B0, 0x524D, 0xC7B1, 0x6F5C, + 0xC7B2, 0x9063, 0xC7B3, 0x6D45, 0xC7B4, 0x8C34, 0xC7B5, 0x5811, 0xC7B6, 0x5D4C, 0xC7B7, 0x6B20, 0xC7B8, 0x6B49, 0xC7B9, 0x67AA, + 0xC7BA, 0x545B, 0xC7BB, 0x8154, 0xC7BC, 0x7F8C, 0xC7BD, 0x5899, 0xC7BE, 0x8537, 0xC7BF, 0x5F3A, 0xC7C0, 0x62A2, 0xC7C1, 0x6A47, + 0xC7C2, 0x9539, 0xC7C3, 0x6572, 0xC7C4, 0x6084, 0xC7C5, 0x6865, 0xC7C6, 0x77A7, 0xC7C7, 0x4E54, 0xC7C8, 0x4FA8, 0xC7C9, 0x5DE7, + 0xC7CA, 0x9798, 0xC7CB, 0x64AC, 0xC7CC, 0x7FD8, 0xC7CD, 0x5CED, 0xC7CE, 0x4FCF, 0xC7CF, 0x7A8D, 0xC7D0, 0x5207, 0xC7D1, 0x8304, + 0xC7D2, 0x4E14, 0xC7D3, 0x602F, 0xC7D4, 0x7A83, 0xC7D5, 0x94A6, 0xC7D6, 0x4FB5, 0xC7D7, 0x4EB2, 0xC7D8, 0x79E6, 0xC7D9, 0x7434, + 0xC7DA, 0x52E4, 0xC7DB, 0x82B9, 0xC7DC, 0x64D2, 0xC7DD, 0x79BD, 0xC7DE, 0x5BDD, 0xC7DF, 0x6C81, 0xC7E0, 0x9752, 0xC7E1, 0x8F7B, + 0xC7E2, 0x6C22, 0xC7E3, 0x503E, 0xC7E4, 0x537F, 0xC7E5, 0x6E05, 0xC7E6, 0x64CE, 0xC7E7, 0x6674, 0xC7E8, 0x6C30, 0xC7E9, 0x60C5, + 0xC7EA, 0x9877, 0xC7EB, 0x8BF7, 0xC7EC, 0x5E86, 0xC7ED, 0x743C, 0xC7EE, 0x7A77, 0xC7EF, 0x79CB, 0xC7F0, 0x4E18, 0xC7F1, 0x90B1, + 0xC7F2, 0x7403, 0xC7F3, 0x6C42, 0xC7F4, 0x56DA, 0xC7F5, 0x914B, 0xC7F6, 0x6CC5, 0xC7F7, 0x8D8B, 0xC7F8, 0x533A, 0xC7F9, 0x86C6, + 0xC7FA, 0x66F2, 0xC7FB, 0x8EAF, 0xC7FC, 0x5C48, 0xC7FD, 0x9A71, 0xC7FE, 0x6E20, 0xC840, 0x83EE, 0xC841, 0x83EF, 0xC842, 0x83F3, + 0xC843, 0x83F4, 0xC844, 0x83F5, 0xC845, 0x83F6, 0xC846, 0x83F7, 0xC847, 0x83FA, 0xC848, 0x83FB, 0xC849, 0x83FC, 0xC84A, 0x83FE, + 0xC84B, 0x83FF, 0xC84C, 0x8400, 0xC84D, 0x8402, 0xC84E, 0x8405, 0xC84F, 0x8407, 0xC850, 0x8408, 0xC851, 0x8409, 0xC852, 0x840A, + 0xC853, 0x8410, 0xC854, 0x8412, 0xC855, 0x8413, 0xC856, 0x8414, 0xC857, 0x8415, 0xC858, 0x8416, 0xC859, 0x8417, 0xC85A, 0x8419, + 0xC85B, 0x841A, 0xC85C, 0x841B, 0xC85D, 0x841E, 0xC85E, 0x841F, 0xC85F, 0x8420, 0xC860, 0x8421, 0xC861, 0x8422, 0xC862, 0x8423, + 0xC863, 0x8429, 0xC864, 0x842A, 0xC865, 0x842B, 0xC866, 0x842C, 0xC867, 0x842D, 0xC868, 0x842E, 0xC869, 0x842F, 0xC86A, 0x8430, + 0xC86B, 0x8432, 0xC86C, 0x8433, 0xC86D, 0x8434, 0xC86E, 0x8435, 0xC86F, 0x8436, 0xC870, 0x8437, 0xC871, 0x8439, 0xC872, 0x843A, + 0xC873, 0x843B, 0xC874, 0x843E, 0xC875, 0x843F, 0xC876, 0x8440, 0xC877, 0x8441, 0xC878, 0x8442, 0xC879, 0x8443, 0xC87A, 0x8444, + 0xC87B, 0x8445, 0xC87C, 0x8447, 0xC87D, 0x8448, 0xC87E, 0x8449, 0xC880, 0x844A, 0xC881, 0x844B, 0xC882, 0x844C, 0xC883, 0x844D, + 0xC884, 0x844E, 0xC885, 0x844F, 0xC886, 0x8450, 0xC887, 0x8452, 0xC888, 0x8453, 0xC889, 0x8454, 0xC88A, 0x8455, 0xC88B, 0x8456, + 0xC88C, 0x8458, 0xC88D, 0x845D, 0xC88E, 0x845E, 0xC88F, 0x845F, 0xC890, 0x8460, 0xC891, 0x8462, 0xC892, 0x8464, 0xC893, 0x8465, + 0xC894, 0x8466, 0xC895, 0x8467, 0xC896, 0x8468, 0xC897, 0x846A, 0xC898, 0x846E, 0xC899, 0x846F, 0xC89A, 0x8470, 0xC89B, 0x8472, + 0xC89C, 0x8474, 0xC89D, 0x8477, 0xC89E, 0x8479, 0xC89F, 0x847B, 0xC8A0, 0x847C, 0xC8A1, 0x53D6, 0xC8A2, 0x5A36, 0xC8A3, 0x9F8B, + 0xC8A4, 0x8DA3, 0xC8A5, 0x53BB, 0xC8A6, 0x5708, 0xC8A7, 0x98A7, 0xC8A8, 0x6743, 0xC8A9, 0x919B, 0xC8AA, 0x6CC9, 0xC8AB, 0x5168, + 0xC8AC, 0x75CA, 0xC8AD, 0x62F3, 0xC8AE, 0x72AC, 0xC8AF, 0x5238, 0xC8B0, 0x529D, 0xC8B1, 0x7F3A, 0xC8B2, 0x7094, 0xC8B3, 0x7638, + 0xC8B4, 0x5374, 0xC8B5, 0x9E4A, 0xC8B6, 0x69B7, 0xC8B7, 0x786E, 0xC8B8, 0x96C0, 0xC8B9, 0x88D9, 0xC8BA, 0x7FA4, 0xC8BB, 0x7136, + 0xC8BC, 0x71C3, 0xC8BD, 0x5189, 0xC8BE, 0x67D3, 0xC8BF, 0x74E4, 0xC8C0, 0x58E4, 0xC8C1, 0x6518, 0xC8C2, 0x56B7, 0xC8C3, 0x8BA9, + 0xC8C4, 0x9976, 0xC8C5, 0x6270, 0xC8C6, 0x7ED5, 0xC8C7, 0x60F9, 0xC8C8, 0x70ED, 0xC8C9, 0x58EC, 0xC8CA, 0x4EC1, 0xC8CB, 0x4EBA, + 0xC8CC, 0x5FCD, 0xC8CD, 0x97E7, 0xC8CE, 0x4EFB, 0xC8CF, 0x8BA4, 0xC8D0, 0x5203, 0xC8D1, 0x598A, 0xC8D2, 0x7EAB, 0xC8D3, 0x6254, + 0xC8D4, 0x4ECD, 0xC8D5, 0x65E5, 0xC8D6, 0x620E, 0xC8D7, 0x8338, 0xC8D8, 0x84C9, 0xC8D9, 0x8363, 0xC8DA, 0x878D, 0xC8DB, 0x7194, + 0xC8DC, 0x6EB6, 0xC8DD, 0x5BB9, 0xC8DE, 0x7ED2, 0xC8DF, 0x5197, 0xC8E0, 0x63C9, 0xC8E1, 0x67D4, 0xC8E2, 0x8089, 0xC8E3, 0x8339, + 0xC8E4, 0x8815, 0xC8E5, 0x5112, 0xC8E6, 0x5B7A, 0xC8E7, 0x5982, 0xC8E8, 0x8FB1, 0xC8E9, 0x4E73, 0xC8EA, 0x6C5D, 0xC8EB, 0x5165, + 0xC8EC, 0x8925, 0xC8ED, 0x8F6F, 0xC8EE, 0x962E, 0xC8EF, 0x854A, 0xC8F0, 0x745E, 0xC8F1, 0x9510, 0xC8F2, 0x95F0, 0xC8F3, 0x6DA6, + 0xC8F4, 0x82E5, 0xC8F5, 0x5F31, 0xC8F6, 0x6492, 0xC8F7, 0x6D12, 0xC8F8, 0x8428, 0xC8F9, 0x816E, 0xC8FA, 0x9CC3, 0xC8FB, 0x585E, + 0xC8FC, 0x8D5B, 0xC8FD, 0x4E09, 0xC8FE, 0x53C1, 0xC940, 0x847D, 0xC941, 0x847E, 0xC942, 0x847F, 0xC943, 0x8480, 0xC944, 0x8481, + 0xC945, 0x8483, 0xC946, 0x8484, 0xC947, 0x8485, 0xC948, 0x8486, 0xC949, 0x848A, 0xC94A, 0x848D, 0xC94B, 0x848F, 0xC94C, 0x8490, + 0xC94D, 0x8491, 0xC94E, 0x8492, 0xC94F, 0x8493, 0xC950, 0x8494, 0xC951, 0x8495, 0xC952, 0x8496, 0xC953, 0x8498, 0xC954, 0x849A, + 0xC955, 0x849B, 0xC956, 0x849D, 0xC957, 0x849E, 0xC958, 0x849F, 0xC959, 0x84A0, 0xC95A, 0x84A2, 0xC95B, 0x84A3, 0xC95C, 0x84A4, + 0xC95D, 0x84A5, 0xC95E, 0x84A6, 0xC95F, 0x84A7, 0xC960, 0x84A8, 0xC961, 0x84A9, 0xC962, 0x84AA, 0xC963, 0x84AB, 0xC964, 0x84AC, + 0xC965, 0x84AD, 0xC966, 0x84AE, 0xC967, 0x84B0, 0xC968, 0x84B1, 0xC969, 0x84B3, 0xC96A, 0x84B5, 0xC96B, 0x84B6, 0xC96C, 0x84B7, + 0xC96D, 0x84BB, 0xC96E, 0x84BC, 0xC96F, 0x84BE, 0xC970, 0x84C0, 0xC971, 0x84C2, 0xC972, 0x84C3, 0xC973, 0x84C5, 0xC974, 0x84C6, + 0xC975, 0x84C7, 0xC976, 0x84C8, 0xC977, 0x84CB, 0xC978, 0x84CC, 0xC979, 0x84CE, 0xC97A, 0x84CF, 0xC97B, 0x84D2, 0xC97C, 0x84D4, + 0xC97D, 0x84D5, 0xC97E, 0x84D7, 0xC980, 0x84D8, 0xC981, 0x84D9, 0xC982, 0x84DA, 0xC983, 0x84DB, 0xC984, 0x84DC, 0xC985, 0x84DE, + 0xC986, 0x84E1, 0xC987, 0x84E2, 0xC988, 0x84E4, 0xC989, 0x84E7, 0xC98A, 0x84E8, 0xC98B, 0x84E9, 0xC98C, 0x84EA, 0xC98D, 0x84EB, + 0xC98E, 0x84ED, 0xC98F, 0x84EE, 0xC990, 0x84EF, 0xC991, 0x84F1, 0xC992, 0x84F2, 0xC993, 0x84F3, 0xC994, 0x84F4, 0xC995, 0x84F5, + 0xC996, 0x84F6, 0xC997, 0x84F7, 0xC998, 0x84F8, 0xC999, 0x84F9, 0xC99A, 0x84FA, 0xC99B, 0x84FB, 0xC99C, 0x84FD, 0xC99D, 0x84FE, + 0xC99E, 0x8500, 0xC99F, 0x8501, 0xC9A0, 0x8502, 0xC9A1, 0x4F1E, 0xC9A2, 0x6563, 0xC9A3, 0x6851, 0xC9A4, 0x55D3, 0xC9A5, 0x4E27, + 0xC9A6, 0x6414, 0xC9A7, 0x9A9A, 0xC9A8, 0x626B, 0xC9A9, 0x5AC2, 0xC9AA, 0x745F, 0xC9AB, 0x8272, 0xC9AC, 0x6DA9, 0xC9AD, 0x68EE, + 0xC9AE, 0x50E7, 0xC9AF, 0x838E, 0xC9B0, 0x7802, 0xC9B1, 0x6740, 0xC9B2, 0x5239, 0xC9B3, 0x6C99, 0xC9B4, 0x7EB1, 0xC9B5, 0x50BB, + 0xC9B6, 0x5565, 0xC9B7, 0x715E, 0xC9B8, 0x7B5B, 0xC9B9, 0x6652, 0xC9BA, 0x73CA, 0xC9BB, 0x82EB, 0xC9BC, 0x6749, 0xC9BD, 0x5C71, + 0xC9BE, 0x5220, 0xC9BF, 0x717D, 0xC9C0, 0x886B, 0xC9C1, 0x95EA, 0xC9C2, 0x9655, 0xC9C3, 0x64C5, 0xC9C4, 0x8D61, 0xC9C5, 0x81B3, + 0xC9C6, 0x5584, 0xC9C7, 0x6C55, 0xC9C8, 0x6247, 0xC9C9, 0x7F2E, 0xC9CA, 0x5892, 0xC9CB, 0x4F24, 0xC9CC, 0x5546, 0xC9CD, 0x8D4F, + 0xC9CE, 0x664C, 0xC9CF, 0x4E0A, 0xC9D0, 0x5C1A, 0xC9D1, 0x88F3, 0xC9D2, 0x68A2, 0xC9D3, 0x634E, 0xC9D4, 0x7A0D, 0xC9D5, 0x70E7, + 0xC9D6, 0x828D, 0xC9D7, 0x52FA, 0xC9D8, 0x97F6, 0xC9D9, 0x5C11, 0xC9DA, 0x54E8, 0xC9DB, 0x90B5, 0xC9DC, 0x7ECD, 0xC9DD, 0x5962, + 0xC9DE, 0x8D4A, 0xC9DF, 0x86C7, 0xC9E0, 0x820C, 0xC9E1, 0x820D, 0xC9E2, 0x8D66, 0xC9E3, 0x6444, 0xC9E4, 0x5C04, 0xC9E5, 0x6151, + 0xC9E6, 0x6D89, 0xC9E7, 0x793E, 0xC9E8, 0x8BBE, 0xC9E9, 0x7837, 0xC9EA, 0x7533, 0xC9EB, 0x547B, 0xC9EC, 0x4F38, 0xC9ED, 0x8EAB, + 0xC9EE, 0x6DF1, 0xC9EF, 0x5A20, 0xC9F0, 0x7EC5, 0xC9F1, 0x795E, 0xC9F2, 0x6C88, 0xC9F3, 0x5BA1, 0xC9F4, 0x5A76, 0xC9F5, 0x751A, + 0xC9F6, 0x80BE, 0xC9F7, 0x614E, 0xC9F8, 0x6E17, 0xC9F9, 0x58F0, 0xC9FA, 0x751F, 0xC9FB, 0x7525, 0xC9FC, 0x7272, 0xC9FD, 0x5347, + 0xC9FE, 0x7EF3, 0xCA40, 0x8503, 0xCA41, 0x8504, 0xCA42, 0x8505, 0xCA43, 0x8506, 0xCA44, 0x8507, 0xCA45, 0x8508, 0xCA46, 0x8509, + 0xCA47, 0x850A, 0xCA48, 0x850B, 0xCA49, 0x850D, 0xCA4A, 0x850E, 0xCA4B, 0x850F, 0xCA4C, 0x8510, 0xCA4D, 0x8512, 0xCA4E, 0x8514, + 0xCA4F, 0x8515, 0xCA50, 0x8516, 0xCA51, 0x8518, 0xCA52, 0x8519, 0xCA53, 0x851B, 0xCA54, 0x851C, 0xCA55, 0x851D, 0xCA56, 0x851E, + 0xCA57, 0x8520, 0xCA58, 0x8522, 0xCA59, 0x8523, 0xCA5A, 0x8524, 0xCA5B, 0x8525, 0xCA5C, 0x8526, 0xCA5D, 0x8527, 0xCA5E, 0x8528, + 0xCA5F, 0x8529, 0xCA60, 0x852A, 0xCA61, 0x852D, 0xCA62, 0x852E, 0xCA63, 0x852F, 0xCA64, 0x8530, 0xCA65, 0x8531, 0xCA66, 0x8532, + 0xCA67, 0x8533, 0xCA68, 0x8534, 0xCA69, 0x8535, 0xCA6A, 0x8536, 0xCA6B, 0x853E, 0xCA6C, 0x853F, 0xCA6D, 0x8540, 0xCA6E, 0x8541, + 0xCA6F, 0x8542, 0xCA70, 0x8544, 0xCA71, 0x8545, 0xCA72, 0x8546, 0xCA73, 0x8547, 0xCA74, 0x854B, 0xCA75, 0x854C, 0xCA76, 0x854D, + 0xCA77, 0x854E, 0xCA78, 0x854F, 0xCA79, 0x8550, 0xCA7A, 0x8551, 0xCA7B, 0x8552, 0xCA7C, 0x8553, 0xCA7D, 0x8554, 0xCA7E, 0x8555, + 0xCA80, 0x8557, 0xCA81, 0x8558, 0xCA82, 0x855A, 0xCA83, 0x855B, 0xCA84, 0x855C, 0xCA85, 0x855D, 0xCA86, 0x855F, 0xCA87, 0x8560, + 0xCA88, 0x8561, 0xCA89, 0x8562, 0xCA8A, 0x8563, 0xCA8B, 0x8565, 0xCA8C, 0x8566, 0xCA8D, 0x8567, 0xCA8E, 0x8569, 0xCA8F, 0x856A, + 0xCA90, 0x856B, 0xCA91, 0x856C, 0xCA92, 0x856D, 0xCA93, 0x856E, 0xCA94, 0x856F, 0xCA95, 0x8570, 0xCA96, 0x8571, 0xCA97, 0x8573, + 0xCA98, 0x8575, 0xCA99, 0x8576, 0xCA9A, 0x8577, 0xCA9B, 0x8578, 0xCA9C, 0x857C, 0xCA9D, 0x857D, 0xCA9E, 0x857F, 0xCA9F, 0x8580, + 0xCAA0, 0x8581, 0xCAA1, 0x7701, 0xCAA2, 0x76DB, 0xCAA3, 0x5269, 0xCAA4, 0x80DC, 0xCAA5, 0x5723, 0xCAA6, 0x5E08, 0xCAA7, 0x5931, + 0xCAA8, 0x72EE, 0xCAA9, 0x65BD, 0xCAAA, 0x6E7F, 0xCAAB, 0x8BD7, 0xCAAC, 0x5C38, 0xCAAD, 0x8671, 0xCAAE, 0x5341, 0xCAAF, 0x77F3, + 0xCAB0, 0x62FE, 0xCAB1, 0x65F6, 0xCAB2, 0x4EC0, 0xCAB3, 0x98DF, 0xCAB4, 0x8680, 0xCAB5, 0x5B9E, 0xCAB6, 0x8BC6, 0xCAB7, 0x53F2, + 0xCAB8, 0x77E2, 0xCAB9, 0x4F7F, 0xCABA, 0x5C4E, 0xCABB, 0x9A76, 0xCABC, 0x59CB, 0xCABD, 0x5F0F, 0xCABE, 0x793A, 0xCABF, 0x58EB, + 0xCAC0, 0x4E16, 0xCAC1, 0x67FF, 0xCAC2, 0x4E8B, 0xCAC3, 0x62ED, 0xCAC4, 0x8A93, 0xCAC5, 0x901D, 0xCAC6, 0x52BF, 0xCAC7, 0x662F, + 0xCAC8, 0x55DC, 0xCAC9, 0x566C, 0xCACA, 0x9002, 0xCACB, 0x4ED5, 0xCACC, 0x4F8D, 0xCACD, 0x91CA, 0xCACE, 0x9970, 0xCACF, 0x6C0F, + 0xCAD0, 0x5E02, 0xCAD1, 0x6043, 0xCAD2, 0x5BA4, 0xCAD3, 0x89C6, 0xCAD4, 0x8BD5, 0xCAD5, 0x6536, 0xCAD6, 0x624B, 0xCAD7, 0x9996, + 0xCAD8, 0x5B88, 0xCAD9, 0x5BFF, 0xCADA, 0x6388, 0xCADB, 0x552E, 0xCADC, 0x53D7, 0xCADD, 0x7626, 0xCADE, 0x517D, 0xCADF, 0x852C, + 0xCAE0, 0x67A2, 0xCAE1, 0x68B3, 0xCAE2, 0x6B8A, 0xCAE3, 0x6292, 0xCAE4, 0x8F93, 0xCAE5, 0x53D4, 0xCAE6, 0x8212, 0xCAE7, 0x6DD1, + 0xCAE8, 0x758F, 0xCAE9, 0x4E66, 0xCAEA, 0x8D4E, 0xCAEB, 0x5B70, 0xCAEC, 0x719F, 0xCAED, 0x85AF, 0xCAEE, 0x6691, 0xCAEF, 0x66D9, + 0xCAF0, 0x7F72, 0xCAF1, 0x8700, 0xCAF2, 0x9ECD, 0xCAF3, 0x9F20, 0xCAF4, 0x5C5E, 0xCAF5, 0x672F, 0xCAF6, 0x8FF0, 0xCAF7, 0x6811, + 0xCAF8, 0x675F, 0xCAF9, 0x620D, 0xCAFA, 0x7AD6, 0xCAFB, 0x5885, 0xCAFC, 0x5EB6, 0xCAFD, 0x6570, 0xCAFE, 0x6F31, 0xCB40, 0x8582, + 0xCB41, 0x8583, 0xCB42, 0x8586, 0xCB43, 0x8588, 0xCB44, 0x8589, 0xCB45, 0x858A, 0xCB46, 0x858B, 0xCB47, 0x858C, 0xCB48, 0x858D, + 0xCB49, 0x858E, 0xCB4A, 0x8590, 0xCB4B, 0x8591, 0xCB4C, 0x8592, 0xCB4D, 0x8593, 0xCB4E, 0x8594, 0xCB4F, 0x8595, 0xCB50, 0x8596, + 0xCB51, 0x8597, 0xCB52, 0x8598, 0xCB53, 0x8599, 0xCB54, 0x859A, 0xCB55, 0x859D, 0xCB56, 0x859E, 0xCB57, 0x859F, 0xCB58, 0x85A0, + 0xCB59, 0x85A1, 0xCB5A, 0x85A2, 0xCB5B, 0x85A3, 0xCB5C, 0x85A5, 0xCB5D, 0x85A6, 0xCB5E, 0x85A7, 0xCB5F, 0x85A9, 0xCB60, 0x85AB, + 0xCB61, 0x85AC, 0xCB62, 0x85AD, 0xCB63, 0x85B1, 0xCB64, 0x85B2, 0xCB65, 0x85B3, 0xCB66, 0x85B4, 0xCB67, 0x85B5, 0xCB68, 0x85B6, + 0xCB69, 0x85B8, 0xCB6A, 0x85BA, 0xCB6B, 0x85BB, 0xCB6C, 0x85BC, 0xCB6D, 0x85BD, 0xCB6E, 0x85BE, 0xCB6F, 0x85BF, 0xCB70, 0x85C0, + 0xCB71, 0x85C2, 0xCB72, 0x85C3, 0xCB73, 0x85C4, 0xCB74, 0x85C5, 0xCB75, 0x85C6, 0xCB76, 0x85C7, 0xCB77, 0x85C8, 0xCB78, 0x85CA, + 0xCB79, 0x85CB, 0xCB7A, 0x85CC, 0xCB7B, 0x85CD, 0xCB7C, 0x85CE, 0xCB7D, 0x85D1, 0xCB7E, 0x85D2, 0xCB80, 0x85D4, 0xCB81, 0x85D6, + 0xCB82, 0x85D7, 0xCB83, 0x85D8, 0xCB84, 0x85D9, 0xCB85, 0x85DA, 0xCB86, 0x85DB, 0xCB87, 0x85DD, 0xCB88, 0x85DE, 0xCB89, 0x85DF, + 0xCB8A, 0x85E0, 0xCB8B, 0x85E1, 0xCB8C, 0x85E2, 0xCB8D, 0x85E3, 0xCB8E, 0x85E5, 0xCB8F, 0x85E6, 0xCB90, 0x85E7, 0xCB91, 0x85E8, + 0xCB92, 0x85EA, 0xCB93, 0x85EB, 0xCB94, 0x85EC, 0xCB95, 0x85ED, 0xCB96, 0x85EE, 0xCB97, 0x85EF, 0xCB98, 0x85F0, 0xCB99, 0x85F1, + 0xCB9A, 0x85F2, 0xCB9B, 0x85F3, 0xCB9C, 0x85F4, 0xCB9D, 0x85F5, 0xCB9E, 0x85F6, 0xCB9F, 0x85F7, 0xCBA0, 0x85F8, 0xCBA1, 0x6055, + 0xCBA2, 0x5237, 0xCBA3, 0x800D, 0xCBA4, 0x6454, 0xCBA5, 0x8870, 0xCBA6, 0x7529, 0xCBA7, 0x5E05, 0xCBA8, 0x6813, 0xCBA9, 0x62F4, + 0xCBAA, 0x971C, 0xCBAB, 0x53CC, 0xCBAC, 0x723D, 0xCBAD, 0x8C01, 0xCBAE, 0x6C34, 0xCBAF, 0x7761, 0xCBB0, 0x7A0E, 0xCBB1, 0x542E, + 0xCBB2, 0x77AC, 0xCBB3, 0x987A, 0xCBB4, 0x821C, 0xCBB5, 0x8BF4, 0xCBB6, 0x7855, 0xCBB7, 0x6714, 0xCBB8, 0x70C1, 0xCBB9, 0x65AF, + 0xCBBA, 0x6495, 0xCBBB, 0x5636, 0xCBBC, 0x601D, 0xCBBD, 0x79C1, 0xCBBE, 0x53F8, 0xCBBF, 0x4E1D, 0xCBC0, 0x6B7B, 0xCBC1, 0x8086, + 0xCBC2, 0x5BFA, 0xCBC3, 0x55E3, 0xCBC4, 0x56DB, 0xCBC5, 0x4F3A, 0xCBC6, 0x4F3C, 0xCBC7, 0x9972, 0xCBC8, 0x5DF3, 0xCBC9, 0x677E, + 0xCBCA, 0x8038, 0xCBCB, 0x6002, 0xCBCC, 0x9882, 0xCBCD, 0x9001, 0xCBCE, 0x5B8B, 0xCBCF, 0x8BBC, 0xCBD0, 0x8BF5, 0xCBD1, 0x641C, + 0xCBD2, 0x8258, 0xCBD3, 0x64DE, 0xCBD4, 0x55FD, 0xCBD5, 0x82CF, 0xCBD6, 0x9165, 0xCBD7, 0x4FD7, 0xCBD8, 0x7D20, 0xCBD9, 0x901F, + 0xCBDA, 0x7C9F, 0xCBDB, 0x50F3, 0xCBDC, 0x5851, 0xCBDD, 0x6EAF, 0xCBDE, 0x5BBF, 0xCBDF, 0x8BC9, 0xCBE0, 0x8083, 0xCBE1, 0x9178, + 0xCBE2, 0x849C, 0xCBE3, 0x7B97, 0xCBE4, 0x867D, 0xCBE5, 0x968B, 0xCBE6, 0x968F, 0xCBE7, 0x7EE5, 0xCBE8, 0x9AD3, 0xCBE9, 0x788E, + 0xCBEA, 0x5C81, 0xCBEB, 0x7A57, 0xCBEC, 0x9042, 0xCBED, 0x96A7, 0xCBEE, 0x795F, 0xCBEF, 0x5B59, 0xCBF0, 0x635F, 0xCBF1, 0x7B0B, + 0xCBF2, 0x84D1, 0xCBF3, 0x68AD, 0xCBF4, 0x5506, 0xCBF5, 0x7F29, 0xCBF6, 0x7410, 0xCBF7, 0x7D22, 0xCBF8, 0x9501, 0xCBF9, 0x6240, + 0xCBFA, 0x584C, 0xCBFB, 0x4ED6, 0xCBFC, 0x5B83, 0xCBFD, 0x5979, 0xCBFE, 0x5854, 0xCC40, 0x85F9, 0xCC41, 0x85FA, 0xCC42, 0x85FC, + 0xCC43, 0x85FD, 0xCC44, 0x85FE, 0xCC45, 0x8600, 0xCC46, 0x8601, 0xCC47, 0x8602, 0xCC48, 0x8603, 0xCC49, 0x8604, 0xCC4A, 0x8606, + 0xCC4B, 0x8607, 0xCC4C, 0x8608, 0xCC4D, 0x8609, 0xCC4E, 0x860A, 0xCC4F, 0x860B, 0xCC50, 0x860C, 0xCC51, 0x860D, 0xCC52, 0x860E, + 0xCC53, 0x860F, 0xCC54, 0x8610, 0xCC55, 0x8612, 0xCC56, 0x8613, 0xCC57, 0x8614, 0xCC58, 0x8615, 0xCC59, 0x8617, 0xCC5A, 0x8618, + 0xCC5B, 0x8619, 0xCC5C, 0x861A, 0xCC5D, 0x861B, 0xCC5E, 0x861C, 0xCC5F, 0x861D, 0xCC60, 0x861E, 0xCC61, 0x861F, 0xCC62, 0x8620, + 0xCC63, 0x8621, 0xCC64, 0x8622, 0xCC65, 0x8623, 0xCC66, 0x8624, 0xCC67, 0x8625, 0xCC68, 0x8626, 0xCC69, 0x8628, 0xCC6A, 0x862A, + 0xCC6B, 0x862B, 0xCC6C, 0x862C, 0xCC6D, 0x862D, 0xCC6E, 0x862E, 0xCC6F, 0x862F, 0xCC70, 0x8630, 0xCC71, 0x8631, 0xCC72, 0x8632, + 0xCC73, 0x8633, 0xCC74, 0x8634, 0xCC75, 0x8635, 0xCC76, 0x8636, 0xCC77, 0x8637, 0xCC78, 0x8639, 0xCC79, 0x863A, 0xCC7A, 0x863B, + 0xCC7B, 0x863D, 0xCC7C, 0x863E, 0xCC7D, 0x863F, 0xCC7E, 0x8640, 0xCC80, 0x8641, 0xCC81, 0x8642, 0xCC82, 0x8643, 0xCC83, 0x8644, + 0xCC84, 0x8645, 0xCC85, 0x8646, 0xCC86, 0x8647, 0xCC87, 0x8648, 0xCC88, 0x8649, 0xCC89, 0x864A, 0xCC8A, 0x864B, 0xCC8B, 0x864C, + 0xCC8C, 0x8652, 0xCC8D, 0x8653, 0xCC8E, 0x8655, 0xCC8F, 0x8656, 0xCC90, 0x8657, 0xCC91, 0x8658, 0xCC92, 0x8659, 0xCC93, 0x865B, + 0xCC94, 0x865C, 0xCC95, 0x865D, 0xCC96, 0x865F, 0xCC97, 0x8660, 0xCC98, 0x8661, 0xCC99, 0x8663, 0xCC9A, 0x8664, 0xCC9B, 0x8665, + 0xCC9C, 0x8666, 0xCC9D, 0x8667, 0xCC9E, 0x8668, 0xCC9F, 0x8669, 0xCCA0, 0x866A, 0xCCA1, 0x736D, 0xCCA2, 0x631E, 0xCCA3, 0x8E4B, + 0xCCA4, 0x8E0F, 0xCCA5, 0x80CE, 0xCCA6, 0x82D4, 0xCCA7, 0x62AC, 0xCCA8, 0x53F0, 0xCCA9, 0x6CF0, 0xCCAA, 0x915E, 0xCCAB, 0x592A, + 0xCCAC, 0x6001, 0xCCAD, 0x6C70, 0xCCAE, 0x574D, 0xCCAF, 0x644A, 0xCCB0, 0x8D2A, 0xCCB1, 0x762B, 0xCCB2, 0x6EE9, 0xCCB3, 0x575B, + 0xCCB4, 0x6A80, 0xCCB5, 0x75F0, 0xCCB6, 0x6F6D, 0xCCB7, 0x8C2D, 0xCCB8, 0x8C08, 0xCCB9, 0x5766, 0xCCBA, 0x6BEF, 0xCCBB, 0x8892, + 0xCCBC, 0x78B3, 0xCCBD, 0x63A2, 0xCCBE, 0x53F9, 0xCCBF, 0x70AD, 0xCCC0, 0x6C64, 0xCCC1, 0x5858, 0xCCC2, 0x642A, 0xCCC3, 0x5802, + 0xCCC4, 0x68E0, 0xCCC5, 0x819B, 0xCCC6, 0x5510, 0xCCC7, 0x7CD6, 0xCCC8, 0x5018, 0xCCC9, 0x8EBA, 0xCCCA, 0x6DCC, 0xCCCB, 0x8D9F, + 0xCCCC, 0x70EB, 0xCCCD, 0x638F, 0xCCCE, 0x6D9B, 0xCCCF, 0x6ED4, 0xCCD0, 0x7EE6, 0xCCD1, 0x8404, 0xCCD2, 0x6843, 0xCCD3, 0x9003, + 0xCCD4, 0x6DD8, 0xCCD5, 0x9676, 0xCCD6, 0x8BA8, 0xCCD7, 0x5957, 0xCCD8, 0x7279, 0xCCD9, 0x85E4, 0xCCDA, 0x817E, 0xCCDB, 0x75BC, + 0xCCDC, 0x8A8A, 0xCCDD, 0x68AF, 0xCCDE, 0x5254, 0xCCDF, 0x8E22, 0xCCE0, 0x9511, 0xCCE1, 0x63D0, 0xCCE2, 0x9898, 0xCCE3, 0x8E44, + 0xCCE4, 0x557C, 0xCCE5, 0x4F53, 0xCCE6, 0x66FF, 0xCCE7, 0x568F, 0xCCE8, 0x60D5, 0xCCE9, 0x6D95, 0xCCEA, 0x5243, 0xCCEB, 0x5C49, + 0xCCEC, 0x5929, 0xCCED, 0x6DFB, 0xCCEE, 0x586B, 0xCCEF, 0x7530, 0xCCF0, 0x751C, 0xCCF1, 0x606C, 0xCCF2, 0x8214, 0xCCF3, 0x8146, + 0xCCF4, 0x6311, 0xCCF5, 0x6761, 0xCCF6, 0x8FE2, 0xCCF7, 0x773A, 0xCCF8, 0x8DF3, 0xCCF9, 0x8D34, 0xCCFA, 0x94C1, 0xCCFB, 0x5E16, + 0xCCFC, 0x5385, 0xCCFD, 0x542C, 0xCCFE, 0x70C3, 0xCD40, 0x866D, 0xCD41, 0x866F, 0xCD42, 0x8670, 0xCD43, 0x8672, 0xCD44, 0x8673, + 0xCD45, 0x8674, 0xCD46, 0x8675, 0xCD47, 0x8676, 0xCD48, 0x8677, 0xCD49, 0x8678, 0xCD4A, 0x8683, 0xCD4B, 0x8684, 0xCD4C, 0x8685, + 0xCD4D, 0x8686, 0xCD4E, 0x8687, 0xCD4F, 0x8688, 0xCD50, 0x8689, 0xCD51, 0x868E, 0xCD52, 0x868F, 0xCD53, 0x8690, 0xCD54, 0x8691, + 0xCD55, 0x8692, 0xCD56, 0x8694, 0xCD57, 0x8696, 0xCD58, 0x8697, 0xCD59, 0x8698, 0xCD5A, 0x8699, 0xCD5B, 0x869A, 0xCD5C, 0x869B, + 0xCD5D, 0x869E, 0xCD5E, 0x869F, 0xCD5F, 0x86A0, 0xCD60, 0x86A1, 0xCD61, 0x86A2, 0xCD62, 0x86A5, 0xCD63, 0x86A6, 0xCD64, 0x86AB, + 0xCD65, 0x86AD, 0xCD66, 0x86AE, 0xCD67, 0x86B2, 0xCD68, 0x86B3, 0xCD69, 0x86B7, 0xCD6A, 0x86B8, 0xCD6B, 0x86B9, 0xCD6C, 0x86BB, + 0xCD6D, 0x86BC, 0xCD6E, 0x86BD, 0xCD6F, 0x86BE, 0xCD70, 0x86BF, 0xCD71, 0x86C1, 0xCD72, 0x86C2, 0xCD73, 0x86C3, 0xCD74, 0x86C5, + 0xCD75, 0x86C8, 0xCD76, 0x86CC, 0xCD77, 0x86CD, 0xCD78, 0x86D2, 0xCD79, 0x86D3, 0xCD7A, 0x86D5, 0xCD7B, 0x86D6, 0xCD7C, 0x86D7, + 0xCD7D, 0x86DA, 0xCD7E, 0x86DC, 0xCD80, 0x86DD, 0xCD81, 0x86E0, 0xCD82, 0x86E1, 0xCD83, 0x86E2, 0xCD84, 0x86E3, 0xCD85, 0x86E5, + 0xCD86, 0x86E6, 0xCD87, 0x86E7, 0xCD88, 0x86E8, 0xCD89, 0x86EA, 0xCD8A, 0x86EB, 0xCD8B, 0x86EC, 0xCD8C, 0x86EF, 0xCD8D, 0x86F5, + 0xCD8E, 0x86F6, 0xCD8F, 0x86F7, 0xCD90, 0x86FA, 0xCD91, 0x86FB, 0xCD92, 0x86FC, 0xCD93, 0x86FD, 0xCD94, 0x86FF, 0xCD95, 0x8701, + 0xCD96, 0x8704, 0xCD97, 0x8705, 0xCD98, 0x8706, 0xCD99, 0x870B, 0xCD9A, 0x870C, 0xCD9B, 0x870E, 0xCD9C, 0x870F, 0xCD9D, 0x8710, + 0xCD9E, 0x8711, 0xCD9F, 0x8714, 0xCDA0, 0x8716, 0xCDA1, 0x6C40, 0xCDA2, 0x5EF7, 0xCDA3, 0x505C, 0xCDA4, 0x4EAD, 0xCDA5, 0x5EAD, + 0xCDA6, 0x633A, 0xCDA7, 0x8247, 0xCDA8, 0x901A, 0xCDA9, 0x6850, 0xCDAA, 0x916E, 0xCDAB, 0x77B3, 0xCDAC, 0x540C, 0xCDAD, 0x94DC, + 0xCDAE, 0x5F64, 0xCDAF, 0x7AE5, 0xCDB0, 0x6876, 0xCDB1, 0x6345, 0xCDB2, 0x7B52, 0xCDB3, 0x7EDF, 0xCDB4, 0x75DB, 0xCDB5, 0x5077, + 0xCDB6, 0x6295, 0xCDB7, 0x5934, 0xCDB8, 0x900F, 0xCDB9, 0x51F8, 0xCDBA, 0x79C3, 0xCDBB, 0x7A81, 0xCDBC, 0x56FE, 0xCDBD, 0x5F92, + 0xCDBE, 0x9014, 0xCDBF, 0x6D82, 0xCDC0, 0x5C60, 0xCDC1, 0x571F, 0xCDC2, 0x5410, 0xCDC3, 0x5154, 0xCDC4, 0x6E4D, 0xCDC5, 0x56E2, + 0xCDC6, 0x63A8, 0xCDC7, 0x9893, 0xCDC8, 0x817F, 0xCDC9, 0x8715, 0xCDCA, 0x892A, 0xCDCB, 0x9000, 0xCDCC, 0x541E, 0xCDCD, 0x5C6F, + 0xCDCE, 0x81C0, 0xCDCF, 0x62D6, 0xCDD0, 0x6258, 0xCDD1, 0x8131, 0xCDD2, 0x9E35, 0xCDD3, 0x9640, 0xCDD4, 0x9A6E, 0xCDD5, 0x9A7C, + 0xCDD6, 0x692D, 0xCDD7, 0x59A5, 0xCDD8, 0x62D3, 0xCDD9, 0x553E, 0xCDDA, 0x6316, 0xCDDB, 0x54C7, 0xCDDC, 0x86D9, 0xCDDD, 0x6D3C, + 0xCDDE, 0x5A03, 0xCDDF, 0x74E6, 0xCDE0, 0x889C, 0xCDE1, 0x6B6A, 0xCDE2, 0x5916, 0xCDE3, 0x8C4C, 0xCDE4, 0x5F2F, 0xCDE5, 0x6E7E, + 0xCDE6, 0x73A9, 0xCDE7, 0x987D, 0xCDE8, 0x4E38, 0xCDE9, 0x70F7, 0xCDEA, 0x5B8C, 0xCDEB, 0x7897, 0xCDEC, 0x633D, 0xCDED, 0x665A, + 0xCDEE, 0x7696, 0xCDEF, 0x60CB, 0xCDF0, 0x5B9B, 0xCDF1, 0x5A49, 0xCDF2, 0x4E07, 0xCDF3, 0x8155, 0xCDF4, 0x6C6A, 0xCDF5, 0x738B, + 0xCDF6, 0x4EA1, 0xCDF7, 0x6789, 0xCDF8, 0x7F51, 0xCDF9, 0x5F80, 0xCDFA, 0x65FA, 0xCDFB, 0x671B, 0xCDFC, 0x5FD8, 0xCDFD, 0x5984, + 0xCDFE, 0x5A01, 0xCE40, 0x8719, 0xCE41, 0x871B, 0xCE42, 0x871D, 0xCE43, 0x871F, 0xCE44, 0x8720, 0xCE45, 0x8724, 0xCE46, 0x8726, + 0xCE47, 0x8727, 0xCE48, 0x8728, 0xCE49, 0x872A, 0xCE4A, 0x872B, 0xCE4B, 0x872C, 0xCE4C, 0x872D, 0xCE4D, 0x872F, 0xCE4E, 0x8730, + 0xCE4F, 0x8732, 0xCE50, 0x8733, 0xCE51, 0x8735, 0xCE52, 0x8736, 0xCE53, 0x8738, 0xCE54, 0x8739, 0xCE55, 0x873A, 0xCE56, 0x873C, + 0xCE57, 0x873D, 0xCE58, 0x8740, 0xCE59, 0x8741, 0xCE5A, 0x8742, 0xCE5B, 0x8743, 0xCE5C, 0x8744, 0xCE5D, 0x8745, 0xCE5E, 0x8746, + 0xCE5F, 0x874A, 0xCE60, 0x874B, 0xCE61, 0x874D, 0xCE62, 0x874F, 0xCE63, 0x8750, 0xCE64, 0x8751, 0xCE65, 0x8752, 0xCE66, 0x8754, + 0xCE67, 0x8755, 0xCE68, 0x8756, 0xCE69, 0x8758, 0xCE6A, 0x875A, 0xCE6B, 0x875B, 0xCE6C, 0x875C, 0xCE6D, 0x875D, 0xCE6E, 0x875E, + 0xCE6F, 0x875F, 0xCE70, 0x8761, 0xCE71, 0x8762, 0xCE72, 0x8766, 0xCE73, 0x8767, 0xCE74, 0x8768, 0xCE75, 0x8769, 0xCE76, 0x876A, + 0xCE77, 0x876B, 0xCE78, 0x876C, 0xCE79, 0x876D, 0xCE7A, 0x876F, 0xCE7B, 0x8771, 0xCE7C, 0x8772, 0xCE7D, 0x8773, 0xCE7E, 0x8775, + 0xCE80, 0x8777, 0xCE81, 0x8778, 0xCE82, 0x8779, 0xCE83, 0x877A, 0xCE84, 0x877F, 0xCE85, 0x8780, 0xCE86, 0x8781, 0xCE87, 0x8784, + 0xCE88, 0x8786, 0xCE89, 0x8787, 0xCE8A, 0x8789, 0xCE8B, 0x878A, 0xCE8C, 0x878C, 0xCE8D, 0x878E, 0xCE8E, 0x878F, 0xCE8F, 0x8790, + 0xCE90, 0x8791, 0xCE91, 0x8792, 0xCE92, 0x8794, 0xCE93, 0x8795, 0xCE94, 0x8796, 0xCE95, 0x8798, 0xCE96, 0x8799, 0xCE97, 0x879A, + 0xCE98, 0x879B, 0xCE99, 0x879C, 0xCE9A, 0x879D, 0xCE9B, 0x879E, 0xCE9C, 0x87A0, 0xCE9D, 0x87A1, 0xCE9E, 0x87A2, 0xCE9F, 0x87A3, + 0xCEA0, 0x87A4, 0xCEA1, 0x5DCD, 0xCEA2, 0x5FAE, 0xCEA3, 0x5371, 0xCEA4, 0x97E6, 0xCEA5, 0x8FDD, 0xCEA6, 0x6845, 0xCEA7, 0x56F4, + 0xCEA8, 0x552F, 0xCEA9, 0x60DF, 0xCEAA, 0x4E3A, 0xCEAB, 0x6F4D, 0xCEAC, 0x7EF4, 0xCEAD, 0x82C7, 0xCEAE, 0x840E, 0xCEAF, 0x59D4, + 0xCEB0, 0x4F1F, 0xCEB1, 0x4F2A, 0xCEB2, 0x5C3E, 0xCEB3, 0x7EAC, 0xCEB4, 0x672A, 0xCEB5, 0x851A, 0xCEB6, 0x5473, 0xCEB7, 0x754F, + 0xCEB8, 0x80C3, 0xCEB9, 0x5582, 0xCEBA, 0x9B4F, 0xCEBB, 0x4F4D, 0xCEBC, 0x6E2D, 0xCEBD, 0x8C13, 0xCEBE, 0x5C09, 0xCEBF, 0x6170, + 0xCEC0, 0x536B, 0xCEC1, 0x761F, 0xCEC2, 0x6E29, 0xCEC3, 0x868A, 0xCEC4, 0x6587, 0xCEC5, 0x95FB, 0xCEC6, 0x7EB9, 0xCEC7, 0x543B, + 0xCEC8, 0x7A33, 0xCEC9, 0x7D0A, 0xCECA, 0x95EE, 0xCECB, 0x55E1, 0xCECC, 0x7FC1, 0xCECD, 0x74EE, 0xCECE, 0x631D, 0xCECF, 0x8717, + 0xCED0, 0x6DA1, 0xCED1, 0x7A9D, 0xCED2, 0x6211, 0xCED3, 0x65A1, 0xCED4, 0x5367, 0xCED5, 0x63E1, 0xCED6, 0x6C83, 0xCED7, 0x5DEB, + 0xCED8, 0x545C, 0xCED9, 0x94A8, 0xCEDA, 0x4E4C, 0xCEDB, 0x6C61, 0xCEDC, 0x8BEC, 0xCEDD, 0x5C4B, 0xCEDE, 0x65E0, 0xCEDF, 0x829C, + 0xCEE0, 0x68A7, 0xCEE1, 0x543E, 0xCEE2, 0x5434, 0xCEE3, 0x6BCB, 0xCEE4, 0x6B66, 0xCEE5, 0x4E94, 0xCEE6, 0x6342, 0xCEE7, 0x5348, + 0xCEE8, 0x821E, 0xCEE9, 0x4F0D, 0xCEEA, 0x4FAE, 0xCEEB, 0x575E, 0xCEEC, 0x620A, 0xCEED, 0x96FE, 0xCEEE, 0x6664, 0xCEEF, 0x7269, + 0xCEF0, 0x52FF, 0xCEF1, 0x52A1, 0xCEF2, 0x609F, 0xCEF3, 0x8BEF, 0xCEF4, 0x6614, 0xCEF5, 0x7199, 0xCEF6, 0x6790, 0xCEF7, 0x897F, + 0xCEF8, 0x7852, 0xCEF9, 0x77FD, 0xCEFA, 0x6670, 0xCEFB, 0x563B, 0xCEFC, 0x5438, 0xCEFD, 0x9521, 0xCEFE, 0x727A, 0xCF40, 0x87A5, + 0xCF41, 0x87A6, 0xCF42, 0x87A7, 0xCF43, 0x87A9, 0xCF44, 0x87AA, 0xCF45, 0x87AE, 0xCF46, 0x87B0, 0xCF47, 0x87B1, 0xCF48, 0x87B2, + 0xCF49, 0x87B4, 0xCF4A, 0x87B6, 0xCF4B, 0x87B7, 0xCF4C, 0x87B8, 0xCF4D, 0x87B9, 0xCF4E, 0x87BB, 0xCF4F, 0x87BC, 0xCF50, 0x87BE, + 0xCF51, 0x87BF, 0xCF52, 0x87C1, 0xCF53, 0x87C2, 0xCF54, 0x87C3, 0xCF55, 0x87C4, 0xCF56, 0x87C5, 0xCF57, 0x87C7, 0xCF58, 0x87C8, + 0xCF59, 0x87C9, 0xCF5A, 0x87CC, 0xCF5B, 0x87CD, 0xCF5C, 0x87CE, 0xCF5D, 0x87CF, 0xCF5E, 0x87D0, 0xCF5F, 0x87D4, 0xCF60, 0x87D5, + 0xCF61, 0x87D6, 0xCF62, 0x87D7, 0xCF63, 0x87D8, 0xCF64, 0x87D9, 0xCF65, 0x87DA, 0xCF66, 0x87DC, 0xCF67, 0x87DD, 0xCF68, 0x87DE, + 0xCF69, 0x87DF, 0xCF6A, 0x87E1, 0xCF6B, 0x87E2, 0xCF6C, 0x87E3, 0xCF6D, 0x87E4, 0xCF6E, 0x87E6, 0xCF6F, 0x87E7, 0xCF70, 0x87E8, + 0xCF71, 0x87E9, 0xCF72, 0x87EB, 0xCF73, 0x87EC, 0xCF74, 0x87ED, 0xCF75, 0x87EF, 0xCF76, 0x87F0, 0xCF77, 0x87F1, 0xCF78, 0x87F2, + 0xCF79, 0x87F3, 0xCF7A, 0x87F4, 0xCF7B, 0x87F5, 0xCF7C, 0x87F6, 0xCF7D, 0x87F7, 0xCF7E, 0x87F8, 0xCF80, 0x87FA, 0xCF81, 0x87FB, + 0xCF82, 0x87FC, 0xCF83, 0x87FD, 0xCF84, 0x87FF, 0xCF85, 0x8800, 0xCF86, 0x8801, 0xCF87, 0x8802, 0xCF88, 0x8804, 0xCF89, 0x8805, + 0xCF8A, 0x8806, 0xCF8B, 0x8807, 0xCF8C, 0x8808, 0xCF8D, 0x8809, 0xCF8E, 0x880B, 0xCF8F, 0x880C, 0xCF90, 0x880D, 0xCF91, 0x880E, + 0xCF92, 0x880F, 0xCF93, 0x8810, 0xCF94, 0x8811, 0xCF95, 0x8812, 0xCF96, 0x8814, 0xCF97, 0x8817, 0xCF98, 0x8818, 0xCF99, 0x8819, + 0xCF9A, 0x881A, 0xCF9B, 0x881C, 0xCF9C, 0x881D, 0xCF9D, 0x881E, 0xCF9E, 0x881F, 0xCF9F, 0x8820, 0xCFA0, 0x8823, 0xCFA1, 0x7A00, + 0xCFA2, 0x606F, 0xCFA3, 0x5E0C, 0xCFA4, 0x6089, 0xCFA5, 0x819D, 0xCFA6, 0x5915, 0xCFA7, 0x60DC, 0xCFA8, 0x7184, 0xCFA9, 0x70EF, + 0xCFAA, 0x6EAA, 0xCFAB, 0x6C50, 0xCFAC, 0x7280, 0xCFAD, 0x6A84, 0xCFAE, 0x88AD, 0xCFAF, 0x5E2D, 0xCFB0, 0x4E60, 0xCFB1, 0x5AB3, + 0xCFB2, 0x559C, 0xCFB3, 0x94E3, 0xCFB4, 0x6D17, 0xCFB5, 0x7CFB, 0xCFB6, 0x9699, 0xCFB7, 0x620F, 0xCFB8, 0x7EC6, 0xCFB9, 0x778E, + 0xCFBA, 0x867E, 0xCFBB, 0x5323, 0xCFBC, 0x971E, 0xCFBD, 0x8F96, 0xCFBE, 0x6687, 0xCFBF, 0x5CE1, 0xCFC0, 0x4FA0, 0xCFC1, 0x72ED, + 0xCFC2, 0x4E0B, 0xCFC3, 0x53A6, 0xCFC4, 0x590F, 0xCFC5, 0x5413, 0xCFC6, 0x6380, 0xCFC7, 0x9528, 0xCFC8, 0x5148, 0xCFC9, 0x4ED9, + 0xCFCA, 0x9C9C, 0xCFCB, 0x7EA4, 0xCFCC, 0x54B8, 0xCFCD, 0x8D24, 0xCFCE, 0x8854, 0xCFCF, 0x8237, 0xCFD0, 0x95F2, 0xCFD1, 0x6D8E, + 0xCFD2, 0x5F26, 0xCFD3, 0x5ACC, 0xCFD4, 0x663E, 0xCFD5, 0x9669, 0xCFD6, 0x73B0, 0xCFD7, 0x732E, 0xCFD8, 0x53BF, 0xCFD9, 0x817A, + 0xCFDA, 0x9985, 0xCFDB, 0x7FA1, 0xCFDC, 0x5BAA, 0xCFDD, 0x9677, 0xCFDE, 0x9650, 0xCFDF, 0x7EBF, 0xCFE0, 0x76F8, 0xCFE1, 0x53A2, + 0xCFE2, 0x9576, 0xCFE3, 0x9999, 0xCFE4, 0x7BB1, 0xCFE5, 0x8944, 0xCFE6, 0x6E58, 0xCFE7, 0x4E61, 0xCFE8, 0x7FD4, 0xCFE9, 0x7965, + 0xCFEA, 0x8BE6, 0xCFEB, 0x60F3, 0xCFEC, 0x54CD, 0xCFED, 0x4EAB, 0xCFEE, 0x9879, 0xCFEF, 0x5DF7, 0xCFF0, 0x6A61, 0xCFF1, 0x50CF, + 0xCFF2, 0x5411, 0xCFF3, 0x8C61, 0xCFF4, 0x8427, 0xCFF5, 0x785D, 0xCFF6, 0x9704, 0xCFF7, 0x524A, 0xCFF8, 0x54EE, 0xCFF9, 0x56A3, + 0xCFFA, 0x9500, 0xCFFB, 0x6D88, 0xCFFC, 0x5BB5, 0xCFFD, 0x6DC6, 0xCFFE, 0x6653, 0xD040, 0x8824, 0xD041, 0x8825, 0xD042, 0x8826, + 0xD043, 0x8827, 0xD044, 0x8828, 0xD045, 0x8829, 0xD046, 0x882A, 0xD047, 0x882B, 0xD048, 0x882C, 0xD049, 0x882D, 0xD04A, 0x882E, + 0xD04B, 0x882F, 0xD04C, 0x8830, 0xD04D, 0x8831, 0xD04E, 0x8833, 0xD04F, 0x8834, 0xD050, 0x8835, 0xD051, 0x8836, 0xD052, 0x8837, + 0xD053, 0x8838, 0xD054, 0x883A, 0xD055, 0x883B, 0xD056, 0x883D, 0xD057, 0x883E, 0xD058, 0x883F, 0xD059, 0x8841, 0xD05A, 0x8842, + 0xD05B, 0x8843, 0xD05C, 0x8846, 0xD05D, 0x8847, 0xD05E, 0x8848, 0xD05F, 0x8849, 0xD060, 0x884A, 0xD061, 0x884B, 0xD062, 0x884E, + 0xD063, 0x884F, 0xD064, 0x8850, 0xD065, 0x8851, 0xD066, 0x8852, 0xD067, 0x8853, 0xD068, 0x8855, 0xD069, 0x8856, 0xD06A, 0x8858, + 0xD06B, 0x885A, 0xD06C, 0x885B, 0xD06D, 0x885C, 0xD06E, 0x885D, 0xD06F, 0x885E, 0xD070, 0x885F, 0xD071, 0x8860, 0xD072, 0x8866, + 0xD073, 0x8867, 0xD074, 0x886A, 0xD075, 0x886D, 0xD076, 0x886F, 0xD077, 0x8871, 0xD078, 0x8873, 0xD079, 0x8874, 0xD07A, 0x8875, + 0xD07B, 0x8876, 0xD07C, 0x8878, 0xD07D, 0x8879, 0xD07E, 0x887A, 0xD080, 0x887B, 0xD081, 0x887C, 0xD082, 0x8880, 0xD083, 0x8883, + 0xD084, 0x8886, 0xD085, 0x8887, 0xD086, 0x8889, 0xD087, 0x888A, 0xD088, 0x888C, 0xD089, 0x888E, 0xD08A, 0x888F, 0xD08B, 0x8890, + 0xD08C, 0x8891, 0xD08D, 0x8893, 0xD08E, 0x8894, 0xD08F, 0x8895, 0xD090, 0x8897, 0xD091, 0x8898, 0xD092, 0x8899, 0xD093, 0x889A, + 0xD094, 0x889B, 0xD095, 0x889D, 0xD096, 0x889E, 0xD097, 0x889F, 0xD098, 0x88A0, 0xD099, 0x88A1, 0xD09A, 0x88A3, 0xD09B, 0x88A5, + 0xD09C, 0x88A6, 0xD09D, 0x88A7, 0xD09E, 0x88A8, 0xD09F, 0x88A9, 0xD0A0, 0x88AA, 0xD0A1, 0x5C0F, 0xD0A2, 0x5B5D, 0xD0A3, 0x6821, + 0xD0A4, 0x8096, 0xD0A5, 0x5578, 0xD0A6, 0x7B11, 0xD0A7, 0x6548, 0xD0A8, 0x6954, 0xD0A9, 0x4E9B, 0xD0AA, 0x6B47, 0xD0AB, 0x874E, + 0xD0AC, 0x978B, 0xD0AD, 0x534F, 0xD0AE, 0x631F, 0xD0AF, 0x643A, 0xD0B0, 0x90AA, 0xD0B1, 0x659C, 0xD0B2, 0x80C1, 0xD0B3, 0x8C10, + 0xD0B4, 0x5199, 0xD0B5, 0x68B0, 0xD0B6, 0x5378, 0xD0B7, 0x87F9, 0xD0B8, 0x61C8, 0xD0B9, 0x6CC4, 0xD0BA, 0x6CFB, 0xD0BB, 0x8C22, + 0xD0BC, 0x5C51, 0xD0BD, 0x85AA, 0xD0BE, 0x82AF, 0xD0BF, 0x950C, 0xD0C0, 0x6B23, 0xD0C1, 0x8F9B, 0xD0C2, 0x65B0, 0xD0C3, 0x5FFB, + 0xD0C4, 0x5FC3, 0xD0C5, 0x4FE1, 0xD0C6, 0x8845, 0xD0C7, 0x661F, 0xD0C8, 0x8165, 0xD0C9, 0x7329, 0xD0CA, 0x60FA, 0xD0CB, 0x5174, + 0xD0CC, 0x5211, 0xD0CD, 0x578B, 0xD0CE, 0x5F62, 0xD0CF, 0x90A2, 0xD0D0, 0x884C, 0xD0D1, 0x9192, 0xD0D2, 0x5E78, 0xD0D3, 0x674F, + 0xD0D4, 0x6027, 0xD0D5, 0x59D3, 0xD0D6, 0x5144, 0xD0D7, 0x51F6, 0xD0D8, 0x80F8, 0xD0D9, 0x5308, 0xD0DA, 0x6C79, 0xD0DB, 0x96C4, + 0xD0DC, 0x718A, 0xD0DD, 0x4F11, 0xD0DE, 0x4FEE, 0xD0DF, 0x7F9E, 0xD0E0, 0x673D, 0xD0E1, 0x55C5, 0xD0E2, 0x9508, 0xD0E3, 0x79C0, + 0xD0E4, 0x8896, 0xD0E5, 0x7EE3, 0xD0E6, 0x589F, 0xD0E7, 0x620C, 0xD0E8, 0x9700, 0xD0E9, 0x865A, 0xD0EA, 0x5618, 0xD0EB, 0x987B, + 0xD0EC, 0x5F90, 0xD0ED, 0x8BB8, 0xD0EE, 0x84C4, 0xD0EF, 0x9157, 0xD0F0, 0x53D9, 0xD0F1, 0x65ED, 0xD0F2, 0x5E8F, 0xD0F3, 0x755C, + 0xD0F4, 0x6064, 0xD0F5, 0x7D6E, 0xD0F6, 0x5A7F, 0xD0F7, 0x7EEA, 0xD0F8, 0x7EED, 0xD0F9, 0x8F69, 0xD0FA, 0x55A7, 0xD0FB, 0x5BA3, + 0xD0FC, 0x60AC, 0xD0FD, 0x65CB, 0xD0FE, 0x7384, 0xD140, 0x88AC, 0xD141, 0x88AE, 0xD142, 0x88AF, 0xD143, 0x88B0, 0xD144, 0x88B2, + 0xD145, 0x88B3, 0xD146, 0x88B4, 0xD147, 0x88B5, 0xD148, 0x88B6, 0xD149, 0x88B8, 0xD14A, 0x88B9, 0xD14B, 0x88BA, 0xD14C, 0x88BB, + 0xD14D, 0x88BD, 0xD14E, 0x88BE, 0xD14F, 0x88BF, 0xD150, 0x88C0, 0xD151, 0x88C3, 0xD152, 0x88C4, 0xD153, 0x88C7, 0xD154, 0x88C8, + 0xD155, 0x88CA, 0xD156, 0x88CB, 0xD157, 0x88CC, 0xD158, 0x88CD, 0xD159, 0x88CF, 0xD15A, 0x88D0, 0xD15B, 0x88D1, 0xD15C, 0x88D3, + 0xD15D, 0x88D6, 0xD15E, 0x88D7, 0xD15F, 0x88DA, 0xD160, 0x88DB, 0xD161, 0x88DC, 0xD162, 0x88DD, 0xD163, 0x88DE, 0xD164, 0x88E0, + 0xD165, 0x88E1, 0xD166, 0x88E6, 0xD167, 0x88E7, 0xD168, 0x88E9, 0xD169, 0x88EA, 0xD16A, 0x88EB, 0xD16B, 0x88EC, 0xD16C, 0x88ED, + 0xD16D, 0x88EE, 0xD16E, 0x88EF, 0xD16F, 0x88F2, 0xD170, 0x88F5, 0xD171, 0x88F6, 0xD172, 0x88F7, 0xD173, 0x88FA, 0xD174, 0x88FB, + 0xD175, 0x88FD, 0xD176, 0x88FF, 0xD177, 0x8900, 0xD178, 0x8901, 0xD179, 0x8903, 0xD17A, 0x8904, 0xD17B, 0x8905, 0xD17C, 0x8906, + 0xD17D, 0x8907, 0xD17E, 0x8908, 0xD180, 0x8909, 0xD181, 0x890B, 0xD182, 0x890C, 0xD183, 0x890D, 0xD184, 0x890E, 0xD185, 0x890F, + 0xD186, 0x8911, 0xD187, 0x8914, 0xD188, 0x8915, 0xD189, 0x8916, 0xD18A, 0x8917, 0xD18B, 0x8918, 0xD18C, 0x891C, 0xD18D, 0x891D, + 0xD18E, 0x891E, 0xD18F, 0x891F, 0xD190, 0x8920, 0xD191, 0x8922, 0xD192, 0x8923, 0xD193, 0x8924, 0xD194, 0x8926, 0xD195, 0x8927, + 0xD196, 0x8928, 0xD197, 0x8929, 0xD198, 0x892C, 0xD199, 0x892D, 0xD19A, 0x892E, 0xD19B, 0x892F, 0xD19C, 0x8931, 0xD19D, 0x8932, + 0xD19E, 0x8933, 0xD19F, 0x8935, 0xD1A0, 0x8937, 0xD1A1, 0x9009, 0xD1A2, 0x7663, 0xD1A3, 0x7729, 0xD1A4, 0x7EDA, 0xD1A5, 0x9774, + 0xD1A6, 0x859B, 0xD1A7, 0x5B66, 0xD1A8, 0x7A74, 0xD1A9, 0x96EA, 0xD1AA, 0x8840, 0xD1AB, 0x52CB, 0xD1AC, 0x718F, 0xD1AD, 0x5FAA, + 0xD1AE, 0x65EC, 0xD1AF, 0x8BE2, 0xD1B0, 0x5BFB, 0xD1B1, 0x9A6F, 0xD1B2, 0x5DE1, 0xD1B3, 0x6B89, 0xD1B4, 0x6C5B, 0xD1B5, 0x8BAD, + 0xD1B6, 0x8BAF, 0xD1B7, 0x900A, 0xD1B8, 0x8FC5, 0xD1B9, 0x538B, 0xD1BA, 0x62BC, 0xD1BB, 0x9E26, 0xD1BC, 0x9E2D, 0xD1BD, 0x5440, + 0xD1BE, 0x4E2B, 0xD1BF, 0x82BD, 0xD1C0, 0x7259, 0xD1C1, 0x869C, 0xD1C2, 0x5D16, 0xD1C3, 0x8859, 0xD1C4, 0x6DAF, 0xD1C5, 0x96C5, + 0xD1C6, 0x54D1, 0xD1C7, 0x4E9A, 0xD1C8, 0x8BB6, 0xD1C9, 0x7109, 0xD1CA, 0x54BD, 0xD1CB, 0x9609, 0xD1CC, 0x70DF, 0xD1CD, 0x6DF9, + 0xD1CE, 0x76D0, 0xD1CF, 0x4E25, 0xD1D0, 0x7814, 0xD1D1, 0x8712, 0xD1D2, 0x5CA9, 0xD1D3, 0x5EF6, 0xD1D4, 0x8A00, 0xD1D5, 0x989C, + 0xD1D6, 0x960E, 0xD1D7, 0x708E, 0xD1D8, 0x6CBF, 0xD1D9, 0x5944, 0xD1DA, 0x63A9, 0xD1DB, 0x773C, 0xD1DC, 0x884D, 0xD1DD, 0x6F14, + 0xD1DE, 0x8273, 0xD1DF, 0x5830, 0xD1E0, 0x71D5, 0xD1E1, 0x538C, 0xD1E2, 0x781A, 0xD1E3, 0x96C1, 0xD1E4, 0x5501, 0xD1E5, 0x5F66, + 0xD1E6, 0x7130, 0xD1E7, 0x5BB4, 0xD1E8, 0x8C1A, 0xD1E9, 0x9A8C, 0xD1EA, 0x6B83, 0xD1EB, 0x592E, 0xD1EC, 0x9E2F, 0xD1ED, 0x79E7, + 0xD1EE, 0x6768, 0xD1EF, 0x626C, 0xD1F0, 0x4F6F, 0xD1F1, 0x75A1, 0xD1F2, 0x7F8A, 0xD1F3, 0x6D0B, 0xD1F4, 0x9633, 0xD1F5, 0x6C27, + 0xD1F6, 0x4EF0, 0xD1F7, 0x75D2, 0xD1F8, 0x517B, 0xD1F9, 0x6837, 0xD1FA, 0x6F3E, 0xD1FB, 0x9080, 0xD1FC, 0x8170, 0xD1FD, 0x5996, + 0xD1FE, 0x7476, 0xD240, 0x8938, 0xD241, 0x8939, 0xD242, 0x893A, 0xD243, 0x893B, 0xD244, 0x893C, 0xD245, 0x893D, 0xD246, 0x893E, + 0xD247, 0x893F, 0xD248, 0x8940, 0xD249, 0x8942, 0xD24A, 0x8943, 0xD24B, 0x8945, 0xD24C, 0x8946, 0xD24D, 0x8947, 0xD24E, 0x8948, + 0xD24F, 0x8949, 0xD250, 0x894A, 0xD251, 0x894B, 0xD252, 0x894C, 0xD253, 0x894D, 0xD254, 0x894E, 0xD255, 0x894F, 0xD256, 0x8950, + 0xD257, 0x8951, 0xD258, 0x8952, 0xD259, 0x8953, 0xD25A, 0x8954, 0xD25B, 0x8955, 0xD25C, 0x8956, 0xD25D, 0x8957, 0xD25E, 0x8958, + 0xD25F, 0x8959, 0xD260, 0x895A, 0xD261, 0x895B, 0xD262, 0x895C, 0xD263, 0x895D, 0xD264, 0x8960, 0xD265, 0x8961, 0xD266, 0x8962, + 0xD267, 0x8963, 0xD268, 0x8964, 0xD269, 0x8965, 0xD26A, 0x8967, 0xD26B, 0x8968, 0xD26C, 0x8969, 0xD26D, 0x896A, 0xD26E, 0x896B, + 0xD26F, 0x896C, 0xD270, 0x896D, 0xD271, 0x896E, 0xD272, 0x896F, 0xD273, 0x8970, 0xD274, 0x8971, 0xD275, 0x8972, 0xD276, 0x8973, + 0xD277, 0x8974, 0xD278, 0x8975, 0xD279, 0x8976, 0xD27A, 0x8977, 0xD27B, 0x8978, 0xD27C, 0x8979, 0xD27D, 0x897A, 0xD27E, 0x897C, + 0xD280, 0x897D, 0xD281, 0x897E, 0xD282, 0x8980, 0xD283, 0x8982, 0xD284, 0x8984, 0xD285, 0x8985, 0xD286, 0x8987, 0xD287, 0x8988, + 0xD288, 0x8989, 0xD289, 0x898A, 0xD28A, 0x898B, 0xD28B, 0x898C, 0xD28C, 0x898D, 0xD28D, 0x898E, 0xD28E, 0x898F, 0xD28F, 0x8990, + 0xD290, 0x8991, 0xD291, 0x8992, 0xD292, 0x8993, 0xD293, 0x8994, 0xD294, 0x8995, 0xD295, 0x8996, 0xD296, 0x8997, 0xD297, 0x8998, + 0xD298, 0x8999, 0xD299, 0x899A, 0xD29A, 0x899B, 0xD29B, 0x899C, 0xD29C, 0x899D, 0xD29D, 0x899E, 0xD29E, 0x899F, 0xD29F, 0x89A0, + 0xD2A0, 0x89A1, 0xD2A1, 0x6447, 0xD2A2, 0x5C27, 0xD2A3, 0x9065, 0xD2A4, 0x7A91, 0xD2A5, 0x8C23, 0xD2A6, 0x59DA, 0xD2A7, 0x54AC, + 0xD2A8, 0x8200, 0xD2A9, 0x836F, 0xD2AA, 0x8981, 0xD2AB, 0x8000, 0xD2AC, 0x6930, 0xD2AD, 0x564E, 0xD2AE, 0x8036, 0xD2AF, 0x7237, + 0xD2B0, 0x91CE, 0xD2B1, 0x51B6, 0xD2B2, 0x4E5F, 0xD2B3, 0x9875, 0xD2B4, 0x6396, 0xD2B5, 0x4E1A, 0xD2B6, 0x53F6, 0xD2B7, 0x66F3, + 0xD2B8, 0x814B, 0xD2B9, 0x591C, 0xD2BA, 0x6DB2, 0xD2BB, 0x4E00, 0xD2BC, 0x58F9, 0xD2BD, 0x533B, 0xD2BE, 0x63D6, 0xD2BF, 0x94F1, + 0xD2C0, 0x4F9D, 0xD2C1, 0x4F0A, 0xD2C2, 0x8863, 0xD2C3, 0x9890, 0xD2C4, 0x5937, 0xD2C5, 0x9057, 0xD2C6, 0x79FB, 0xD2C7, 0x4EEA, + 0xD2C8, 0x80F0, 0xD2C9, 0x7591, 0xD2CA, 0x6C82, 0xD2CB, 0x5B9C, 0xD2CC, 0x59E8, 0xD2CD, 0x5F5D, 0xD2CE, 0x6905, 0xD2CF, 0x8681, + 0xD2D0, 0x501A, 0xD2D1, 0x5DF2, 0xD2D2, 0x4E59, 0xD2D3, 0x77E3, 0xD2D4, 0x4EE5, 0xD2D5, 0x827A, 0xD2D6, 0x6291, 0xD2D7, 0x6613, + 0xD2D8, 0x9091, 0xD2D9, 0x5C79, 0xD2DA, 0x4EBF, 0xD2DB, 0x5F79, 0xD2DC, 0x81C6, 0xD2DD, 0x9038, 0xD2DE, 0x8084, 0xD2DF, 0x75AB, + 0xD2E0, 0x4EA6, 0xD2E1, 0x88D4, 0xD2E2, 0x610F, 0xD2E3, 0x6BC5, 0xD2E4, 0x5FC6, 0xD2E5, 0x4E49, 0xD2E6, 0x76CA, 0xD2E7, 0x6EA2, + 0xD2E8, 0x8BE3, 0xD2E9, 0x8BAE, 0xD2EA, 0x8C0A, 0xD2EB, 0x8BD1, 0xD2EC, 0x5F02, 0xD2ED, 0x7FFC, 0xD2EE, 0x7FCC, 0xD2EF, 0x7ECE, + 0xD2F0, 0x8335, 0xD2F1, 0x836B, 0xD2F2, 0x56E0, 0xD2F3, 0x6BB7, 0xD2F4, 0x97F3, 0xD2F5, 0x9634, 0xD2F6, 0x59FB, 0xD2F7, 0x541F, + 0xD2F8, 0x94F6, 0xD2F9, 0x6DEB, 0xD2FA, 0x5BC5, 0xD2FB, 0x996E, 0xD2FC, 0x5C39, 0xD2FD, 0x5F15, 0xD2FE, 0x9690, 0xD340, 0x89A2, + 0xD341, 0x89A3, 0xD342, 0x89A4, 0xD343, 0x89A5, 0xD344, 0x89A6, 0xD345, 0x89A7, 0xD346, 0x89A8, 0xD347, 0x89A9, 0xD348, 0x89AA, + 0xD349, 0x89AB, 0xD34A, 0x89AC, 0xD34B, 0x89AD, 0xD34C, 0x89AE, 0xD34D, 0x89AF, 0xD34E, 0x89B0, 0xD34F, 0x89B1, 0xD350, 0x89B2, + 0xD351, 0x89B3, 0xD352, 0x89B4, 0xD353, 0x89B5, 0xD354, 0x89B6, 0xD355, 0x89B7, 0xD356, 0x89B8, 0xD357, 0x89B9, 0xD358, 0x89BA, + 0xD359, 0x89BB, 0xD35A, 0x89BC, 0xD35B, 0x89BD, 0xD35C, 0x89BE, 0xD35D, 0x89BF, 0xD35E, 0x89C0, 0xD35F, 0x89C3, 0xD360, 0x89CD, + 0xD361, 0x89D3, 0xD362, 0x89D4, 0xD363, 0x89D5, 0xD364, 0x89D7, 0xD365, 0x89D8, 0xD366, 0x89D9, 0xD367, 0x89DB, 0xD368, 0x89DD, + 0xD369, 0x89DF, 0xD36A, 0x89E0, 0xD36B, 0x89E1, 0xD36C, 0x89E2, 0xD36D, 0x89E4, 0xD36E, 0x89E7, 0xD36F, 0x89E8, 0xD370, 0x89E9, + 0xD371, 0x89EA, 0xD372, 0x89EC, 0xD373, 0x89ED, 0xD374, 0x89EE, 0xD375, 0x89F0, 0xD376, 0x89F1, 0xD377, 0x89F2, 0xD378, 0x89F4, + 0xD379, 0x89F5, 0xD37A, 0x89F6, 0xD37B, 0x89F7, 0xD37C, 0x89F8, 0xD37D, 0x89F9, 0xD37E, 0x89FA, 0xD380, 0x89FB, 0xD381, 0x89FC, + 0xD382, 0x89FD, 0xD383, 0x89FE, 0xD384, 0x89FF, 0xD385, 0x8A01, 0xD386, 0x8A02, 0xD387, 0x8A03, 0xD388, 0x8A04, 0xD389, 0x8A05, + 0xD38A, 0x8A06, 0xD38B, 0x8A08, 0xD38C, 0x8A09, 0xD38D, 0x8A0A, 0xD38E, 0x8A0B, 0xD38F, 0x8A0C, 0xD390, 0x8A0D, 0xD391, 0x8A0E, + 0xD392, 0x8A0F, 0xD393, 0x8A10, 0xD394, 0x8A11, 0xD395, 0x8A12, 0xD396, 0x8A13, 0xD397, 0x8A14, 0xD398, 0x8A15, 0xD399, 0x8A16, + 0xD39A, 0x8A17, 0xD39B, 0x8A18, 0xD39C, 0x8A19, 0xD39D, 0x8A1A, 0xD39E, 0x8A1B, 0xD39F, 0x8A1C, 0xD3A0, 0x8A1D, 0xD3A1, 0x5370, + 0xD3A2, 0x82F1, 0xD3A3, 0x6A31, 0xD3A4, 0x5A74, 0xD3A5, 0x9E70, 0xD3A6, 0x5E94, 0xD3A7, 0x7F28, 0xD3A8, 0x83B9, 0xD3A9, 0x8424, + 0xD3AA, 0x8425, 0xD3AB, 0x8367, 0xD3AC, 0x8747, 0xD3AD, 0x8FCE, 0xD3AE, 0x8D62, 0xD3AF, 0x76C8, 0xD3B0, 0x5F71, 0xD3B1, 0x9896, + 0xD3B2, 0x786C, 0xD3B3, 0x6620, 0xD3B4, 0x54DF, 0xD3B5, 0x62E5, 0xD3B6, 0x4F63, 0xD3B7, 0x81C3, 0xD3B8, 0x75C8, 0xD3B9, 0x5EB8, + 0xD3BA, 0x96CD, 0xD3BB, 0x8E0A, 0xD3BC, 0x86F9, 0xD3BD, 0x548F, 0xD3BE, 0x6CF3, 0xD3BF, 0x6D8C, 0xD3C0, 0x6C38, 0xD3C1, 0x607F, + 0xD3C2, 0x52C7, 0xD3C3, 0x7528, 0xD3C4, 0x5E7D, 0xD3C5, 0x4F18, 0xD3C6, 0x60A0, 0xD3C7, 0x5FE7, 0xD3C8, 0x5C24, 0xD3C9, 0x7531, + 0xD3CA, 0x90AE, 0xD3CB, 0x94C0, 0xD3CC, 0x72B9, 0xD3CD, 0x6CB9, 0xD3CE, 0x6E38, 0xD3CF, 0x9149, 0xD3D0, 0x6709, 0xD3D1, 0x53CB, + 0xD3D2, 0x53F3, 0xD3D3, 0x4F51, 0xD3D4, 0x91C9, 0xD3D5, 0x8BF1, 0xD3D6, 0x53C8, 0xD3D7, 0x5E7C, 0xD3D8, 0x8FC2, 0xD3D9, 0x6DE4, + 0xD3DA, 0x4E8E, 0xD3DB, 0x76C2, 0xD3DC, 0x6986, 0xD3DD, 0x865E, 0xD3DE, 0x611A, 0xD3DF, 0x8206, 0xD3E0, 0x4F59, 0xD3E1, 0x4FDE, + 0xD3E2, 0x903E, 0xD3E3, 0x9C7C, 0xD3E4, 0x6109, 0xD3E5, 0x6E1D, 0xD3E6, 0x6E14, 0xD3E7, 0x9685, 0xD3E8, 0x4E88, 0xD3E9, 0x5A31, + 0xD3EA, 0x96E8, 0xD3EB, 0x4E0E, 0xD3EC, 0x5C7F, 0xD3ED, 0x79B9, 0xD3EE, 0x5B87, 0xD3EF, 0x8BED, 0xD3F0, 0x7FBD, 0xD3F1, 0x7389, + 0xD3F2, 0x57DF, 0xD3F3, 0x828B, 0xD3F4, 0x90C1, 0xD3F5, 0x5401, 0xD3F6, 0x9047, 0xD3F7, 0x55BB, 0xD3F8, 0x5CEA, 0xD3F9, 0x5FA1, + 0xD3FA, 0x6108, 0xD3FB, 0x6B32, 0xD3FC, 0x72F1, 0xD3FD, 0x80B2, 0xD3FE, 0x8A89, 0xD440, 0x8A1E, 0xD441, 0x8A1F, 0xD442, 0x8A20, + 0xD443, 0x8A21, 0xD444, 0x8A22, 0xD445, 0x8A23, 0xD446, 0x8A24, 0xD447, 0x8A25, 0xD448, 0x8A26, 0xD449, 0x8A27, 0xD44A, 0x8A28, + 0xD44B, 0x8A29, 0xD44C, 0x8A2A, 0xD44D, 0x8A2B, 0xD44E, 0x8A2C, 0xD44F, 0x8A2D, 0xD450, 0x8A2E, 0xD451, 0x8A2F, 0xD452, 0x8A30, + 0xD453, 0x8A31, 0xD454, 0x8A32, 0xD455, 0x8A33, 0xD456, 0x8A34, 0xD457, 0x8A35, 0xD458, 0x8A36, 0xD459, 0x8A37, 0xD45A, 0x8A38, + 0xD45B, 0x8A39, 0xD45C, 0x8A3A, 0xD45D, 0x8A3B, 0xD45E, 0x8A3C, 0xD45F, 0x8A3D, 0xD460, 0x8A3F, 0xD461, 0x8A40, 0xD462, 0x8A41, + 0xD463, 0x8A42, 0xD464, 0x8A43, 0xD465, 0x8A44, 0xD466, 0x8A45, 0xD467, 0x8A46, 0xD468, 0x8A47, 0xD469, 0x8A49, 0xD46A, 0x8A4A, + 0xD46B, 0x8A4B, 0xD46C, 0x8A4C, 0xD46D, 0x8A4D, 0xD46E, 0x8A4E, 0xD46F, 0x8A4F, 0xD470, 0x8A50, 0xD471, 0x8A51, 0xD472, 0x8A52, + 0xD473, 0x8A53, 0xD474, 0x8A54, 0xD475, 0x8A55, 0xD476, 0x8A56, 0xD477, 0x8A57, 0xD478, 0x8A58, 0xD479, 0x8A59, 0xD47A, 0x8A5A, + 0xD47B, 0x8A5B, 0xD47C, 0x8A5C, 0xD47D, 0x8A5D, 0xD47E, 0x8A5E, 0xD480, 0x8A5F, 0xD481, 0x8A60, 0xD482, 0x8A61, 0xD483, 0x8A62, + 0xD484, 0x8A63, 0xD485, 0x8A64, 0xD486, 0x8A65, 0xD487, 0x8A66, 0xD488, 0x8A67, 0xD489, 0x8A68, 0xD48A, 0x8A69, 0xD48B, 0x8A6A, + 0xD48C, 0x8A6B, 0xD48D, 0x8A6C, 0xD48E, 0x8A6D, 0xD48F, 0x8A6E, 0xD490, 0x8A6F, 0xD491, 0x8A70, 0xD492, 0x8A71, 0xD493, 0x8A72, + 0xD494, 0x8A73, 0xD495, 0x8A74, 0xD496, 0x8A75, 0xD497, 0x8A76, 0xD498, 0x8A77, 0xD499, 0x8A78, 0xD49A, 0x8A7A, 0xD49B, 0x8A7B, + 0xD49C, 0x8A7C, 0xD49D, 0x8A7D, 0xD49E, 0x8A7E, 0xD49F, 0x8A7F, 0xD4A0, 0x8A80, 0xD4A1, 0x6D74, 0xD4A2, 0x5BD3, 0xD4A3, 0x88D5, + 0xD4A4, 0x9884, 0xD4A5, 0x8C6B, 0xD4A6, 0x9A6D, 0xD4A7, 0x9E33, 0xD4A8, 0x6E0A, 0xD4A9, 0x51A4, 0xD4AA, 0x5143, 0xD4AB, 0x57A3, + 0xD4AC, 0x8881, 0xD4AD, 0x539F, 0xD4AE, 0x63F4, 0xD4AF, 0x8F95, 0xD4B0, 0x56ED, 0xD4B1, 0x5458, 0xD4B2, 0x5706, 0xD4B3, 0x733F, + 0xD4B4, 0x6E90, 0xD4B5, 0x7F18, 0xD4B6, 0x8FDC, 0xD4B7, 0x82D1, 0xD4B8, 0x613F, 0xD4B9, 0x6028, 0xD4BA, 0x9662, 0xD4BB, 0x66F0, + 0xD4BC, 0x7EA6, 0xD4BD, 0x8D8A, 0xD4BE, 0x8DC3, 0xD4BF, 0x94A5, 0xD4C0, 0x5CB3, 0xD4C1, 0x7CA4, 0xD4C2, 0x6708, 0xD4C3, 0x60A6, + 0xD4C4, 0x9605, 0xD4C5, 0x8018, 0xD4C6, 0x4E91, 0xD4C7, 0x90E7, 0xD4C8, 0x5300, 0xD4C9, 0x9668, 0xD4CA, 0x5141, 0xD4CB, 0x8FD0, + 0xD4CC, 0x8574, 0xD4CD, 0x915D, 0xD4CE, 0x6655, 0xD4CF, 0x97F5, 0xD4D0, 0x5B55, 0xD4D1, 0x531D, 0xD4D2, 0x7838, 0xD4D3, 0x6742, + 0xD4D4, 0x683D, 0xD4D5, 0x54C9, 0xD4D6, 0x707E, 0xD4D7, 0x5BB0, 0xD4D8, 0x8F7D, 0xD4D9, 0x518D, 0xD4DA, 0x5728, 0xD4DB, 0x54B1, + 0xD4DC, 0x6512, 0xD4DD, 0x6682, 0xD4DE, 0x8D5E, 0xD4DF, 0x8D43, 0xD4E0, 0x810F, 0xD4E1, 0x846C, 0xD4E2, 0x906D, 0xD4E3, 0x7CDF, + 0xD4E4, 0x51FF, 0xD4E5, 0x85FB, 0xD4E6, 0x67A3, 0xD4E7, 0x65E9, 0xD4E8, 0x6FA1, 0xD4E9, 0x86A4, 0xD4EA, 0x8E81, 0xD4EB, 0x566A, + 0xD4EC, 0x9020, 0xD4ED, 0x7682, 0xD4EE, 0x7076, 0xD4EF, 0x71E5, 0xD4F0, 0x8D23, 0xD4F1, 0x62E9, 0xD4F2, 0x5219, 0xD4F3, 0x6CFD, + 0xD4F4, 0x8D3C, 0xD4F5, 0x600E, 0xD4F6, 0x589E, 0xD4F7, 0x618E, 0xD4F8, 0x66FE, 0xD4F9, 0x8D60, 0xD4FA, 0x624E, 0xD4FB, 0x55B3, + 0xD4FC, 0x6E23, 0xD4FD, 0x672D, 0xD4FE, 0x8F67, 0xD540, 0x8A81, 0xD541, 0x8A82, 0xD542, 0x8A83, 0xD543, 0x8A84, 0xD544, 0x8A85, + 0xD545, 0x8A86, 0xD546, 0x8A87, 0xD547, 0x8A88, 0xD548, 0x8A8B, 0xD549, 0x8A8C, 0xD54A, 0x8A8D, 0xD54B, 0x8A8E, 0xD54C, 0x8A8F, + 0xD54D, 0x8A90, 0xD54E, 0x8A91, 0xD54F, 0x8A92, 0xD550, 0x8A94, 0xD551, 0x8A95, 0xD552, 0x8A96, 0xD553, 0x8A97, 0xD554, 0x8A98, + 0xD555, 0x8A99, 0xD556, 0x8A9A, 0xD557, 0x8A9B, 0xD558, 0x8A9C, 0xD559, 0x8A9D, 0xD55A, 0x8A9E, 0xD55B, 0x8A9F, 0xD55C, 0x8AA0, + 0xD55D, 0x8AA1, 0xD55E, 0x8AA2, 0xD55F, 0x8AA3, 0xD560, 0x8AA4, 0xD561, 0x8AA5, 0xD562, 0x8AA6, 0xD563, 0x8AA7, 0xD564, 0x8AA8, + 0xD565, 0x8AA9, 0xD566, 0x8AAA, 0xD567, 0x8AAB, 0xD568, 0x8AAC, 0xD569, 0x8AAD, 0xD56A, 0x8AAE, 0xD56B, 0x8AAF, 0xD56C, 0x8AB0, + 0xD56D, 0x8AB1, 0xD56E, 0x8AB2, 0xD56F, 0x8AB3, 0xD570, 0x8AB4, 0xD571, 0x8AB5, 0xD572, 0x8AB6, 0xD573, 0x8AB7, 0xD574, 0x8AB8, + 0xD575, 0x8AB9, 0xD576, 0x8ABA, 0xD577, 0x8ABB, 0xD578, 0x8ABC, 0xD579, 0x8ABD, 0xD57A, 0x8ABE, 0xD57B, 0x8ABF, 0xD57C, 0x8AC0, + 0xD57D, 0x8AC1, 0xD57E, 0x8AC2, 0xD580, 0x8AC3, 0xD581, 0x8AC4, 0xD582, 0x8AC5, 0xD583, 0x8AC6, 0xD584, 0x8AC7, 0xD585, 0x8AC8, + 0xD586, 0x8AC9, 0xD587, 0x8ACA, 0xD588, 0x8ACB, 0xD589, 0x8ACC, 0xD58A, 0x8ACD, 0xD58B, 0x8ACE, 0xD58C, 0x8ACF, 0xD58D, 0x8AD0, + 0xD58E, 0x8AD1, 0xD58F, 0x8AD2, 0xD590, 0x8AD3, 0xD591, 0x8AD4, 0xD592, 0x8AD5, 0xD593, 0x8AD6, 0xD594, 0x8AD7, 0xD595, 0x8AD8, + 0xD596, 0x8AD9, 0xD597, 0x8ADA, 0xD598, 0x8ADB, 0xD599, 0x8ADC, 0xD59A, 0x8ADD, 0xD59B, 0x8ADE, 0xD59C, 0x8ADF, 0xD59D, 0x8AE0, + 0xD59E, 0x8AE1, 0xD59F, 0x8AE2, 0xD5A0, 0x8AE3, 0xD5A1, 0x94E1, 0xD5A2, 0x95F8, 0xD5A3, 0x7728, 0xD5A4, 0x6805, 0xD5A5, 0x69A8, + 0xD5A6, 0x548B, 0xD5A7, 0x4E4D, 0xD5A8, 0x70B8, 0xD5A9, 0x8BC8, 0xD5AA, 0x6458, 0xD5AB, 0x658B, 0xD5AC, 0x5B85, 0xD5AD, 0x7A84, + 0xD5AE, 0x503A, 0xD5AF, 0x5BE8, 0xD5B0, 0x77BB, 0xD5B1, 0x6BE1, 0xD5B2, 0x8A79, 0xD5B3, 0x7C98, 0xD5B4, 0x6CBE, 0xD5B5, 0x76CF, + 0xD5B6, 0x65A9, 0xD5B7, 0x8F97, 0xD5B8, 0x5D2D, 0xD5B9, 0x5C55, 0xD5BA, 0x8638, 0xD5BB, 0x6808, 0xD5BC, 0x5360, 0xD5BD, 0x6218, + 0xD5BE, 0x7AD9, 0xD5BF, 0x6E5B, 0xD5C0, 0x7EFD, 0xD5C1, 0x6A1F, 0xD5C2, 0x7AE0, 0xD5C3, 0x5F70, 0xD5C4, 0x6F33, 0xD5C5, 0x5F20, + 0xD5C6, 0x638C, 0xD5C7, 0x6DA8, 0xD5C8, 0x6756, 0xD5C9, 0x4E08, 0xD5CA, 0x5E10, 0xD5CB, 0x8D26, 0xD5CC, 0x4ED7, 0xD5CD, 0x80C0, + 0xD5CE, 0x7634, 0xD5CF, 0x969C, 0xD5D0, 0x62DB, 0xD5D1, 0x662D, 0xD5D2, 0x627E, 0xD5D3, 0x6CBC, 0xD5D4, 0x8D75, 0xD5D5, 0x7167, + 0xD5D6, 0x7F69, 0xD5D7, 0x5146, 0xD5D8, 0x8087, 0xD5D9, 0x53EC, 0xD5DA, 0x906E, 0xD5DB, 0x6298, 0xD5DC, 0x54F2, 0xD5DD, 0x86F0, + 0xD5DE, 0x8F99, 0xD5DF, 0x8005, 0xD5E0, 0x9517, 0xD5E1, 0x8517, 0xD5E2, 0x8FD9, 0xD5E3, 0x6D59, 0xD5E4, 0x73CD, 0xD5E5, 0x659F, + 0xD5E6, 0x771F, 0xD5E7, 0x7504, 0xD5E8, 0x7827, 0xD5E9, 0x81FB, 0xD5EA, 0x8D1E, 0xD5EB, 0x9488, 0xD5EC, 0x4FA6, 0xD5ED, 0x6795, + 0xD5EE, 0x75B9, 0xD5EF, 0x8BCA, 0xD5F0, 0x9707, 0xD5F1, 0x632F, 0xD5F2, 0x9547, 0xD5F3, 0x9635, 0xD5F4, 0x84B8, 0xD5F5, 0x6323, + 0xD5F6, 0x7741, 0xD5F7, 0x5F81, 0xD5F8, 0x72F0, 0xD5F9, 0x4E89, 0xD5FA, 0x6014, 0xD5FB, 0x6574, 0xD5FC, 0x62EF, 0xD5FD, 0x6B63, + 0xD5FE, 0x653F, 0xD640, 0x8AE4, 0xD641, 0x8AE5, 0xD642, 0x8AE6, 0xD643, 0x8AE7, 0xD644, 0x8AE8, 0xD645, 0x8AE9, 0xD646, 0x8AEA, + 0xD647, 0x8AEB, 0xD648, 0x8AEC, 0xD649, 0x8AED, 0xD64A, 0x8AEE, 0xD64B, 0x8AEF, 0xD64C, 0x8AF0, 0xD64D, 0x8AF1, 0xD64E, 0x8AF2, + 0xD64F, 0x8AF3, 0xD650, 0x8AF4, 0xD651, 0x8AF5, 0xD652, 0x8AF6, 0xD653, 0x8AF7, 0xD654, 0x8AF8, 0xD655, 0x8AF9, 0xD656, 0x8AFA, + 0xD657, 0x8AFB, 0xD658, 0x8AFC, 0xD659, 0x8AFD, 0xD65A, 0x8AFE, 0xD65B, 0x8AFF, 0xD65C, 0x8B00, 0xD65D, 0x8B01, 0xD65E, 0x8B02, + 0xD65F, 0x8B03, 0xD660, 0x8B04, 0xD661, 0x8B05, 0xD662, 0x8B06, 0xD663, 0x8B08, 0xD664, 0x8B09, 0xD665, 0x8B0A, 0xD666, 0x8B0B, + 0xD667, 0x8B0C, 0xD668, 0x8B0D, 0xD669, 0x8B0E, 0xD66A, 0x8B0F, 0xD66B, 0x8B10, 0xD66C, 0x8B11, 0xD66D, 0x8B12, 0xD66E, 0x8B13, + 0xD66F, 0x8B14, 0xD670, 0x8B15, 0xD671, 0x8B16, 0xD672, 0x8B17, 0xD673, 0x8B18, 0xD674, 0x8B19, 0xD675, 0x8B1A, 0xD676, 0x8B1B, + 0xD677, 0x8B1C, 0xD678, 0x8B1D, 0xD679, 0x8B1E, 0xD67A, 0x8B1F, 0xD67B, 0x8B20, 0xD67C, 0x8B21, 0xD67D, 0x8B22, 0xD67E, 0x8B23, + 0xD680, 0x8B24, 0xD681, 0x8B25, 0xD682, 0x8B27, 0xD683, 0x8B28, 0xD684, 0x8B29, 0xD685, 0x8B2A, 0xD686, 0x8B2B, 0xD687, 0x8B2C, + 0xD688, 0x8B2D, 0xD689, 0x8B2E, 0xD68A, 0x8B2F, 0xD68B, 0x8B30, 0xD68C, 0x8B31, 0xD68D, 0x8B32, 0xD68E, 0x8B33, 0xD68F, 0x8B34, + 0xD690, 0x8B35, 0xD691, 0x8B36, 0xD692, 0x8B37, 0xD693, 0x8B38, 0xD694, 0x8B39, 0xD695, 0x8B3A, 0xD696, 0x8B3B, 0xD697, 0x8B3C, + 0xD698, 0x8B3D, 0xD699, 0x8B3E, 0xD69A, 0x8B3F, 0xD69B, 0x8B40, 0xD69C, 0x8B41, 0xD69D, 0x8B42, 0xD69E, 0x8B43, 0xD69F, 0x8B44, + 0xD6A0, 0x8B45, 0xD6A1, 0x5E27, 0xD6A2, 0x75C7, 0xD6A3, 0x90D1, 0xD6A4, 0x8BC1, 0xD6A5, 0x829D, 0xD6A6, 0x679D, 0xD6A7, 0x652F, + 0xD6A8, 0x5431, 0xD6A9, 0x8718, 0xD6AA, 0x77E5, 0xD6AB, 0x80A2, 0xD6AC, 0x8102, 0xD6AD, 0x6C41, 0xD6AE, 0x4E4B, 0xD6AF, 0x7EC7, + 0xD6B0, 0x804C, 0xD6B1, 0x76F4, 0xD6B2, 0x690D, 0xD6B3, 0x6B96, 0xD6B4, 0x6267, 0xD6B5, 0x503C, 0xD6B6, 0x4F84, 0xD6B7, 0x5740, + 0xD6B8, 0x6307, 0xD6B9, 0x6B62, 0xD6BA, 0x8DBE, 0xD6BB, 0x53EA, 0xD6BC, 0x65E8, 0xD6BD, 0x7EB8, 0xD6BE, 0x5FD7, 0xD6BF, 0x631A, + 0xD6C0, 0x63B7, 0xD6C1, 0x81F3, 0xD6C2, 0x81F4, 0xD6C3, 0x7F6E, 0xD6C4, 0x5E1C, 0xD6C5, 0x5CD9, 0xD6C6, 0x5236, 0xD6C7, 0x667A, + 0xD6C8, 0x79E9, 0xD6C9, 0x7A1A, 0xD6CA, 0x8D28, 0xD6CB, 0x7099, 0xD6CC, 0x75D4, 0xD6CD, 0x6EDE, 0xD6CE, 0x6CBB, 0xD6CF, 0x7A92, + 0xD6D0, 0x4E2D, 0xD6D1, 0x76C5, 0xD6D2, 0x5FE0, 0xD6D3, 0x949F, 0xD6D4, 0x8877, 0xD6D5, 0x7EC8, 0xD6D6, 0x79CD, 0xD6D7, 0x80BF, + 0xD6D8, 0x91CD, 0xD6D9, 0x4EF2, 0xD6DA, 0x4F17, 0xD6DB, 0x821F, 0xD6DC, 0x5468, 0xD6DD, 0x5DDE, 0xD6DE, 0x6D32, 0xD6DF, 0x8BCC, + 0xD6E0, 0x7CA5, 0xD6E1, 0x8F74, 0xD6E2, 0x8098, 0xD6E3, 0x5E1A, 0xD6E4, 0x5492, 0xD6E5, 0x76B1, 0xD6E6, 0x5B99, 0xD6E7, 0x663C, + 0xD6E8, 0x9AA4, 0xD6E9, 0x73E0, 0xD6EA, 0x682A, 0xD6EB, 0x86DB, 0xD6EC, 0x6731, 0xD6ED, 0x732A, 0xD6EE, 0x8BF8, 0xD6EF, 0x8BDB, + 0xD6F0, 0x9010, 0xD6F1, 0x7AF9, 0xD6F2, 0x70DB, 0xD6F3, 0x716E, 0xD6F4, 0x62C4, 0xD6F5, 0x77A9, 0xD6F6, 0x5631, 0xD6F7, 0x4E3B, + 0xD6F8, 0x8457, 0xD6F9, 0x67F1, 0xD6FA, 0x52A9, 0xD6FB, 0x86C0, 0xD6FC, 0x8D2E, 0xD6FD, 0x94F8, 0xD6FE, 0x7B51, 0xD740, 0x8B46, + 0xD741, 0x8B47, 0xD742, 0x8B48, 0xD743, 0x8B49, 0xD744, 0x8B4A, 0xD745, 0x8B4B, 0xD746, 0x8B4C, 0xD747, 0x8B4D, 0xD748, 0x8B4E, + 0xD749, 0x8B4F, 0xD74A, 0x8B50, 0xD74B, 0x8B51, 0xD74C, 0x8B52, 0xD74D, 0x8B53, 0xD74E, 0x8B54, 0xD74F, 0x8B55, 0xD750, 0x8B56, + 0xD751, 0x8B57, 0xD752, 0x8B58, 0xD753, 0x8B59, 0xD754, 0x8B5A, 0xD755, 0x8B5B, 0xD756, 0x8B5C, 0xD757, 0x8B5D, 0xD758, 0x8B5E, + 0xD759, 0x8B5F, 0xD75A, 0x8B60, 0xD75B, 0x8B61, 0xD75C, 0x8B62, 0xD75D, 0x8B63, 0xD75E, 0x8B64, 0xD75F, 0x8B65, 0xD760, 0x8B67, + 0xD761, 0x8B68, 0xD762, 0x8B69, 0xD763, 0x8B6A, 0xD764, 0x8B6B, 0xD765, 0x8B6D, 0xD766, 0x8B6E, 0xD767, 0x8B6F, 0xD768, 0x8B70, + 0xD769, 0x8B71, 0xD76A, 0x8B72, 0xD76B, 0x8B73, 0xD76C, 0x8B74, 0xD76D, 0x8B75, 0xD76E, 0x8B76, 0xD76F, 0x8B77, 0xD770, 0x8B78, + 0xD771, 0x8B79, 0xD772, 0x8B7A, 0xD773, 0x8B7B, 0xD774, 0x8B7C, 0xD775, 0x8B7D, 0xD776, 0x8B7E, 0xD777, 0x8B7F, 0xD778, 0x8B80, + 0xD779, 0x8B81, 0xD77A, 0x8B82, 0xD77B, 0x8B83, 0xD77C, 0x8B84, 0xD77D, 0x8B85, 0xD77E, 0x8B86, 0xD780, 0x8B87, 0xD781, 0x8B88, + 0xD782, 0x8B89, 0xD783, 0x8B8A, 0xD784, 0x8B8B, 0xD785, 0x8B8C, 0xD786, 0x8B8D, 0xD787, 0x8B8E, 0xD788, 0x8B8F, 0xD789, 0x8B90, + 0xD78A, 0x8B91, 0xD78B, 0x8B92, 0xD78C, 0x8B93, 0xD78D, 0x8B94, 0xD78E, 0x8B95, 0xD78F, 0x8B96, 0xD790, 0x8B97, 0xD791, 0x8B98, + 0xD792, 0x8B99, 0xD793, 0x8B9A, 0xD794, 0x8B9B, 0xD795, 0x8B9C, 0xD796, 0x8B9D, 0xD797, 0x8B9E, 0xD798, 0x8B9F, 0xD799, 0x8BAC, + 0xD79A, 0x8BB1, 0xD79B, 0x8BBB, 0xD79C, 0x8BC7, 0xD79D, 0x8BD0, 0xD79E, 0x8BEA, 0xD79F, 0x8C09, 0xD7A0, 0x8C1E, 0xD7A1, 0x4F4F, + 0xD7A2, 0x6CE8, 0xD7A3, 0x795D, 0xD7A4, 0x9A7B, 0xD7A5, 0x6293, 0xD7A6, 0x722A, 0xD7A7, 0x62FD, 0xD7A8, 0x4E13, 0xD7A9, 0x7816, + 0xD7AA, 0x8F6C, 0xD7AB, 0x64B0, 0xD7AC, 0x8D5A, 0xD7AD, 0x7BC6, 0xD7AE, 0x6869, 0xD7AF, 0x5E84, 0xD7B0, 0x88C5, 0xD7B1, 0x5986, + 0xD7B2, 0x649E, 0xD7B3, 0x58EE, 0xD7B4, 0x72B6, 0xD7B5, 0x690E, 0xD7B6, 0x9525, 0xD7B7, 0x8FFD, 0xD7B8, 0x8D58, 0xD7B9, 0x5760, + 0xD7BA, 0x7F00, 0xD7BB, 0x8C06, 0xD7BC, 0x51C6, 0xD7BD, 0x6349, 0xD7BE, 0x62D9, 0xD7BF, 0x5353, 0xD7C0, 0x684C, 0xD7C1, 0x7422, + 0xD7C2, 0x8301, 0xD7C3, 0x914C, 0xD7C4, 0x5544, 0xD7C5, 0x7740, 0xD7C6, 0x707C, 0xD7C7, 0x6D4A, 0xD7C8, 0x5179, 0xD7C9, 0x54A8, + 0xD7CA, 0x8D44, 0xD7CB, 0x59FF, 0xD7CC, 0x6ECB, 0xD7CD, 0x6DC4, 0xD7CE, 0x5B5C, 0xD7CF, 0x7D2B, 0xD7D0, 0x4ED4, 0xD7D1, 0x7C7D, + 0xD7D2, 0x6ED3, 0xD7D3, 0x5B50, 0xD7D4, 0x81EA, 0xD7D5, 0x6E0D, 0xD7D6, 0x5B57, 0xD7D7, 0x9B03, 0xD7D8, 0x68D5, 0xD7D9, 0x8E2A, + 0xD7DA, 0x5B97, 0xD7DB, 0x7EFC, 0xD7DC, 0x603B, 0xD7DD, 0x7EB5, 0xD7DE, 0x90B9, 0xD7DF, 0x8D70, 0xD7E0, 0x594F, 0xD7E1, 0x63CD, + 0xD7E2, 0x79DF, 0xD7E3, 0x8DB3, 0xD7E4, 0x5352, 0xD7E5, 0x65CF, 0xD7E6, 0x7956, 0xD7E7, 0x8BC5, 0xD7E8, 0x963B, 0xD7E9, 0x7EC4, + 0xD7EA, 0x94BB, 0xD7EB, 0x7E82, 0xD7EC, 0x5634, 0xD7ED, 0x9189, 0xD7EE, 0x6700, 0xD7EF, 0x7F6A, 0xD7F0, 0x5C0A, 0xD7F1, 0x9075, + 0xD7F2, 0x6628, 0xD7F3, 0x5DE6, 0xD7F4, 0x4F50, 0xD7F5, 0x67DE, 0xD7F6, 0x505A, 0xD7F7, 0x4F5C, 0xD7F8, 0x5750, 0xD7F9, 0x5EA7, + 0xD840, 0x8C38, 0xD841, 0x8C39, 0xD842, 0x8C3A, 0xD843, 0x8C3B, 0xD844, 0x8C3C, 0xD845, 0x8C3D, 0xD846, 0x8C3E, 0xD847, 0x8C3F, + 0xD848, 0x8C40, 0xD849, 0x8C42, 0xD84A, 0x8C43, 0xD84B, 0x8C44, 0xD84C, 0x8C45, 0xD84D, 0x8C48, 0xD84E, 0x8C4A, 0xD84F, 0x8C4B, + 0xD850, 0x8C4D, 0xD851, 0x8C4E, 0xD852, 0x8C4F, 0xD853, 0x8C50, 0xD854, 0x8C51, 0xD855, 0x8C52, 0xD856, 0x8C53, 0xD857, 0x8C54, + 0xD858, 0x8C56, 0xD859, 0x8C57, 0xD85A, 0x8C58, 0xD85B, 0x8C59, 0xD85C, 0x8C5B, 0xD85D, 0x8C5C, 0xD85E, 0x8C5D, 0xD85F, 0x8C5E, + 0xD860, 0x8C5F, 0xD861, 0x8C60, 0xD862, 0x8C63, 0xD863, 0x8C64, 0xD864, 0x8C65, 0xD865, 0x8C66, 0xD866, 0x8C67, 0xD867, 0x8C68, + 0xD868, 0x8C69, 0xD869, 0x8C6C, 0xD86A, 0x8C6D, 0xD86B, 0x8C6E, 0xD86C, 0x8C6F, 0xD86D, 0x8C70, 0xD86E, 0x8C71, 0xD86F, 0x8C72, + 0xD870, 0x8C74, 0xD871, 0x8C75, 0xD872, 0x8C76, 0xD873, 0x8C77, 0xD874, 0x8C7B, 0xD875, 0x8C7C, 0xD876, 0x8C7D, 0xD877, 0x8C7E, + 0xD878, 0x8C7F, 0xD879, 0x8C80, 0xD87A, 0x8C81, 0xD87B, 0x8C83, 0xD87C, 0x8C84, 0xD87D, 0x8C86, 0xD87E, 0x8C87, 0xD880, 0x8C88, + 0xD881, 0x8C8B, 0xD882, 0x8C8D, 0xD883, 0x8C8E, 0xD884, 0x8C8F, 0xD885, 0x8C90, 0xD886, 0x8C91, 0xD887, 0x8C92, 0xD888, 0x8C93, + 0xD889, 0x8C95, 0xD88A, 0x8C96, 0xD88B, 0x8C97, 0xD88C, 0x8C99, 0xD88D, 0x8C9A, 0xD88E, 0x8C9B, 0xD88F, 0x8C9C, 0xD890, 0x8C9D, + 0xD891, 0x8C9E, 0xD892, 0x8C9F, 0xD893, 0x8CA0, 0xD894, 0x8CA1, 0xD895, 0x8CA2, 0xD896, 0x8CA3, 0xD897, 0x8CA4, 0xD898, 0x8CA5, + 0xD899, 0x8CA6, 0xD89A, 0x8CA7, 0xD89B, 0x8CA8, 0xD89C, 0x8CA9, 0xD89D, 0x8CAA, 0xD89E, 0x8CAB, 0xD89F, 0x8CAC, 0xD8A0, 0x8CAD, + 0xD8A1, 0x4E8D, 0xD8A2, 0x4E0C, 0xD8A3, 0x5140, 0xD8A4, 0x4E10, 0xD8A5, 0x5EFF, 0xD8A6, 0x5345, 0xD8A7, 0x4E15, 0xD8A8, 0x4E98, + 0xD8A9, 0x4E1E, 0xD8AA, 0x9B32, 0xD8AB, 0x5B6C, 0xD8AC, 0x5669, 0xD8AD, 0x4E28, 0xD8AE, 0x79BA, 0xD8AF, 0x4E3F, 0xD8B0, 0x5315, + 0xD8B1, 0x4E47, 0xD8B2, 0x592D, 0xD8B3, 0x723B, 0xD8B4, 0x536E, 0xD8B5, 0x6C10, 0xD8B6, 0x56DF, 0xD8B7, 0x80E4, 0xD8B8, 0x9997, + 0xD8B9, 0x6BD3, 0xD8BA, 0x777E, 0xD8BB, 0x9F17, 0xD8BC, 0x4E36, 0xD8BD, 0x4E9F, 0xD8BE, 0x9F10, 0xD8BF, 0x4E5C, 0xD8C0, 0x4E69, + 0xD8C1, 0x4E93, 0xD8C2, 0x8288, 0xD8C3, 0x5B5B, 0xD8C4, 0x556C, 0xD8C5, 0x560F, 0xD8C6, 0x4EC4, 0xD8C7, 0x538D, 0xD8C8, 0x539D, + 0xD8C9, 0x53A3, 0xD8CA, 0x53A5, 0xD8CB, 0x53AE, 0xD8CC, 0x9765, 0xD8CD, 0x8D5D, 0xD8CE, 0x531A, 0xD8CF, 0x53F5, 0xD8D0, 0x5326, + 0xD8D1, 0x532E, 0xD8D2, 0x533E, 0xD8D3, 0x8D5C, 0xD8D4, 0x5366, 0xD8D5, 0x5363, 0xD8D6, 0x5202, 0xD8D7, 0x5208, 0xD8D8, 0x520E, + 0xD8D9, 0x522D, 0xD8DA, 0x5233, 0xD8DB, 0x523F, 0xD8DC, 0x5240, 0xD8DD, 0x524C, 0xD8DE, 0x525E, 0xD8DF, 0x5261, 0xD8E0, 0x525C, + 0xD8E1, 0x84AF, 0xD8E2, 0x527D, 0xD8E3, 0x5282, 0xD8E4, 0x5281, 0xD8E5, 0x5290, 0xD8E6, 0x5293, 0xD8E7, 0x5182, 0xD8E8, 0x7F54, + 0xD8E9, 0x4EBB, 0xD8EA, 0x4EC3, 0xD8EB, 0x4EC9, 0xD8EC, 0x4EC2, 0xD8ED, 0x4EE8, 0xD8EE, 0x4EE1, 0xD8EF, 0x4EEB, 0xD8F0, 0x4EDE, + 0xD8F1, 0x4F1B, 0xD8F2, 0x4EF3, 0xD8F3, 0x4F22, 0xD8F4, 0x4F64, 0xD8F5, 0x4EF5, 0xD8F6, 0x4F25, 0xD8F7, 0x4F27, 0xD8F8, 0x4F09, + 0xD8F9, 0x4F2B, 0xD8FA, 0x4F5E, 0xD8FB, 0x4F67, 0xD8FC, 0x6538, 0xD8FD, 0x4F5A, 0xD8FE, 0x4F5D, 0xD940, 0x8CAE, 0xD941, 0x8CAF, + 0xD942, 0x8CB0, 0xD943, 0x8CB1, 0xD944, 0x8CB2, 0xD945, 0x8CB3, 0xD946, 0x8CB4, 0xD947, 0x8CB5, 0xD948, 0x8CB6, 0xD949, 0x8CB7, + 0xD94A, 0x8CB8, 0xD94B, 0x8CB9, 0xD94C, 0x8CBA, 0xD94D, 0x8CBB, 0xD94E, 0x8CBC, 0xD94F, 0x8CBD, 0xD950, 0x8CBE, 0xD951, 0x8CBF, + 0xD952, 0x8CC0, 0xD953, 0x8CC1, 0xD954, 0x8CC2, 0xD955, 0x8CC3, 0xD956, 0x8CC4, 0xD957, 0x8CC5, 0xD958, 0x8CC6, 0xD959, 0x8CC7, + 0xD95A, 0x8CC8, 0xD95B, 0x8CC9, 0xD95C, 0x8CCA, 0xD95D, 0x8CCB, 0xD95E, 0x8CCC, 0xD95F, 0x8CCD, 0xD960, 0x8CCE, 0xD961, 0x8CCF, + 0xD962, 0x8CD0, 0xD963, 0x8CD1, 0xD964, 0x8CD2, 0xD965, 0x8CD3, 0xD966, 0x8CD4, 0xD967, 0x8CD5, 0xD968, 0x8CD6, 0xD969, 0x8CD7, + 0xD96A, 0x8CD8, 0xD96B, 0x8CD9, 0xD96C, 0x8CDA, 0xD96D, 0x8CDB, 0xD96E, 0x8CDC, 0xD96F, 0x8CDD, 0xD970, 0x8CDE, 0xD971, 0x8CDF, + 0xD972, 0x8CE0, 0xD973, 0x8CE1, 0xD974, 0x8CE2, 0xD975, 0x8CE3, 0xD976, 0x8CE4, 0xD977, 0x8CE5, 0xD978, 0x8CE6, 0xD979, 0x8CE7, + 0xD97A, 0x8CE8, 0xD97B, 0x8CE9, 0xD97C, 0x8CEA, 0xD97D, 0x8CEB, 0xD97E, 0x8CEC, 0xD980, 0x8CED, 0xD981, 0x8CEE, 0xD982, 0x8CEF, + 0xD983, 0x8CF0, 0xD984, 0x8CF1, 0xD985, 0x8CF2, 0xD986, 0x8CF3, 0xD987, 0x8CF4, 0xD988, 0x8CF5, 0xD989, 0x8CF6, 0xD98A, 0x8CF7, + 0xD98B, 0x8CF8, 0xD98C, 0x8CF9, 0xD98D, 0x8CFA, 0xD98E, 0x8CFB, 0xD98F, 0x8CFC, 0xD990, 0x8CFD, 0xD991, 0x8CFE, 0xD992, 0x8CFF, + 0xD993, 0x8D00, 0xD994, 0x8D01, 0xD995, 0x8D02, 0xD996, 0x8D03, 0xD997, 0x8D04, 0xD998, 0x8D05, 0xD999, 0x8D06, 0xD99A, 0x8D07, + 0xD99B, 0x8D08, 0xD99C, 0x8D09, 0xD99D, 0x8D0A, 0xD99E, 0x8D0B, 0xD99F, 0x8D0C, 0xD9A0, 0x8D0D, 0xD9A1, 0x4F5F, 0xD9A2, 0x4F57, + 0xD9A3, 0x4F32, 0xD9A4, 0x4F3D, 0xD9A5, 0x4F76, 0xD9A6, 0x4F74, 0xD9A7, 0x4F91, 0xD9A8, 0x4F89, 0xD9A9, 0x4F83, 0xD9AA, 0x4F8F, + 0xD9AB, 0x4F7E, 0xD9AC, 0x4F7B, 0xD9AD, 0x4FAA, 0xD9AE, 0x4F7C, 0xD9AF, 0x4FAC, 0xD9B0, 0x4F94, 0xD9B1, 0x4FE6, 0xD9B2, 0x4FE8, + 0xD9B3, 0x4FEA, 0xD9B4, 0x4FC5, 0xD9B5, 0x4FDA, 0xD9B6, 0x4FE3, 0xD9B7, 0x4FDC, 0xD9B8, 0x4FD1, 0xD9B9, 0x4FDF, 0xD9BA, 0x4FF8, + 0xD9BB, 0x5029, 0xD9BC, 0x504C, 0xD9BD, 0x4FF3, 0xD9BE, 0x502C, 0xD9BF, 0x500F, 0xD9C0, 0x502E, 0xD9C1, 0x502D, 0xD9C2, 0x4FFE, + 0xD9C3, 0x501C, 0xD9C4, 0x500C, 0xD9C5, 0x5025, 0xD9C6, 0x5028, 0xD9C7, 0x507E, 0xD9C8, 0x5043, 0xD9C9, 0x5055, 0xD9CA, 0x5048, + 0xD9CB, 0x504E, 0xD9CC, 0x506C, 0xD9CD, 0x507B, 0xD9CE, 0x50A5, 0xD9CF, 0x50A7, 0xD9D0, 0x50A9, 0xD9D1, 0x50BA, 0xD9D2, 0x50D6, + 0xD9D3, 0x5106, 0xD9D4, 0x50ED, 0xD9D5, 0x50EC, 0xD9D6, 0x50E6, 0xD9D7, 0x50EE, 0xD9D8, 0x5107, 0xD9D9, 0x510B, 0xD9DA, 0x4EDD, + 0xD9DB, 0x6C3D, 0xD9DC, 0x4F58, 0xD9DD, 0x4F65, 0xD9DE, 0x4FCE, 0xD9DF, 0x9FA0, 0xD9E0, 0x6C46, 0xD9E1, 0x7C74, 0xD9E2, 0x516E, + 0xD9E3, 0x5DFD, 0xD9E4, 0x9EC9, 0xD9E5, 0x9998, 0xD9E6, 0x5181, 0xD9E7, 0x5914, 0xD9E8, 0x52F9, 0xD9E9, 0x530D, 0xD9EA, 0x8A07, + 0xD9EB, 0x5310, 0xD9EC, 0x51EB, 0xD9ED, 0x5919, 0xD9EE, 0x5155, 0xD9EF, 0x4EA0, 0xD9F0, 0x5156, 0xD9F1, 0x4EB3, 0xD9F2, 0x886E, + 0xD9F3, 0x88A4, 0xD9F4, 0x4EB5, 0xD9F5, 0x8114, 0xD9F6, 0x88D2, 0xD9F7, 0x7980, 0xD9F8, 0x5B34, 0xD9F9, 0x8803, 0xD9FA, 0x7FB8, + 0xD9FB, 0x51AB, 0xD9FC, 0x51B1, 0xD9FD, 0x51BD, 0xD9FE, 0x51BC, 0xDA40, 0x8D0E, 0xDA41, 0x8D0F, 0xDA42, 0x8D10, 0xDA43, 0x8D11, + 0xDA44, 0x8D12, 0xDA45, 0x8D13, 0xDA46, 0x8D14, 0xDA47, 0x8D15, 0xDA48, 0x8D16, 0xDA49, 0x8D17, 0xDA4A, 0x8D18, 0xDA4B, 0x8D19, + 0xDA4C, 0x8D1A, 0xDA4D, 0x8D1B, 0xDA4E, 0x8D1C, 0xDA4F, 0x8D20, 0xDA50, 0x8D51, 0xDA51, 0x8D52, 0xDA52, 0x8D57, 0xDA53, 0x8D5F, + 0xDA54, 0x8D65, 0xDA55, 0x8D68, 0xDA56, 0x8D69, 0xDA57, 0x8D6A, 0xDA58, 0x8D6C, 0xDA59, 0x8D6E, 0xDA5A, 0x8D6F, 0xDA5B, 0x8D71, + 0xDA5C, 0x8D72, 0xDA5D, 0x8D78, 0xDA5E, 0x8D79, 0xDA5F, 0x8D7A, 0xDA60, 0x8D7B, 0xDA61, 0x8D7C, 0xDA62, 0x8D7D, 0xDA63, 0x8D7E, + 0xDA64, 0x8D7F, 0xDA65, 0x8D80, 0xDA66, 0x8D82, 0xDA67, 0x8D83, 0xDA68, 0x8D86, 0xDA69, 0x8D87, 0xDA6A, 0x8D88, 0xDA6B, 0x8D89, + 0xDA6C, 0x8D8C, 0xDA6D, 0x8D8D, 0xDA6E, 0x8D8E, 0xDA6F, 0x8D8F, 0xDA70, 0x8D90, 0xDA71, 0x8D92, 0xDA72, 0x8D93, 0xDA73, 0x8D95, + 0xDA74, 0x8D96, 0xDA75, 0x8D97, 0xDA76, 0x8D98, 0xDA77, 0x8D99, 0xDA78, 0x8D9A, 0xDA79, 0x8D9B, 0xDA7A, 0x8D9C, 0xDA7B, 0x8D9D, + 0xDA7C, 0x8D9E, 0xDA7D, 0x8DA0, 0xDA7E, 0x8DA1, 0xDA80, 0x8DA2, 0xDA81, 0x8DA4, 0xDA82, 0x8DA5, 0xDA83, 0x8DA6, 0xDA84, 0x8DA7, + 0xDA85, 0x8DA8, 0xDA86, 0x8DA9, 0xDA87, 0x8DAA, 0xDA88, 0x8DAB, 0xDA89, 0x8DAC, 0xDA8A, 0x8DAD, 0xDA8B, 0x8DAE, 0xDA8C, 0x8DAF, + 0xDA8D, 0x8DB0, 0xDA8E, 0x8DB2, 0xDA8F, 0x8DB6, 0xDA90, 0x8DB7, 0xDA91, 0x8DB9, 0xDA92, 0x8DBB, 0xDA93, 0x8DBD, 0xDA94, 0x8DC0, + 0xDA95, 0x8DC1, 0xDA96, 0x8DC2, 0xDA97, 0x8DC5, 0xDA98, 0x8DC7, 0xDA99, 0x8DC8, 0xDA9A, 0x8DC9, 0xDA9B, 0x8DCA, 0xDA9C, 0x8DCD, + 0xDA9D, 0x8DD0, 0xDA9E, 0x8DD2, 0xDA9F, 0x8DD3, 0xDAA0, 0x8DD4, 0xDAA1, 0x51C7, 0xDAA2, 0x5196, 0xDAA3, 0x51A2, 0xDAA4, 0x51A5, + 0xDAA5, 0x8BA0, 0xDAA6, 0x8BA6, 0xDAA7, 0x8BA7, 0xDAA8, 0x8BAA, 0xDAA9, 0x8BB4, 0xDAAA, 0x8BB5, 0xDAAB, 0x8BB7, 0xDAAC, 0x8BC2, + 0xDAAD, 0x8BC3, 0xDAAE, 0x8BCB, 0xDAAF, 0x8BCF, 0xDAB0, 0x8BCE, 0xDAB1, 0x8BD2, 0xDAB2, 0x8BD3, 0xDAB3, 0x8BD4, 0xDAB4, 0x8BD6, + 0xDAB5, 0x8BD8, 0xDAB6, 0x8BD9, 0xDAB7, 0x8BDC, 0xDAB8, 0x8BDF, 0xDAB9, 0x8BE0, 0xDABA, 0x8BE4, 0xDABB, 0x8BE8, 0xDABC, 0x8BE9, + 0xDABD, 0x8BEE, 0xDABE, 0x8BF0, 0xDABF, 0x8BF3, 0xDAC0, 0x8BF6, 0xDAC1, 0x8BF9, 0xDAC2, 0x8BFC, 0xDAC3, 0x8BFF, 0xDAC4, 0x8C00, + 0xDAC5, 0x8C02, 0xDAC6, 0x8C04, 0xDAC7, 0x8C07, 0xDAC8, 0x8C0C, 0xDAC9, 0x8C0F, 0xDACA, 0x8C11, 0xDACB, 0x8C12, 0xDACC, 0x8C14, + 0xDACD, 0x8C15, 0xDACE, 0x8C16, 0xDACF, 0x8C19, 0xDAD0, 0x8C1B, 0xDAD1, 0x8C18, 0xDAD2, 0x8C1D, 0xDAD3, 0x8C1F, 0xDAD4, 0x8C20, + 0xDAD5, 0x8C21, 0xDAD6, 0x8C25, 0xDAD7, 0x8C27, 0xDAD8, 0x8C2A, 0xDAD9, 0x8C2B, 0xDADA, 0x8C2E, 0xDADB, 0x8C2F, 0xDADC, 0x8C32, + 0xDADD, 0x8C33, 0xDADE, 0x8C35, 0xDADF, 0x8C36, 0xDAE0, 0x5369, 0xDAE1, 0x537A, 0xDAE2, 0x961D, 0xDAE3, 0x9622, 0xDAE4, 0x9621, + 0xDAE5, 0x9631, 0xDAE6, 0x962A, 0xDAE7, 0x963D, 0xDAE8, 0x963C, 0xDAE9, 0x9642, 0xDAEA, 0x9649, 0xDAEB, 0x9654, 0xDAEC, 0x965F, + 0xDAED, 0x9667, 0xDAEE, 0x966C, 0xDAEF, 0x9672, 0xDAF0, 0x9674, 0xDAF1, 0x9688, 0xDAF2, 0x968D, 0xDAF3, 0x9697, 0xDAF4, 0x96B0, + 0xDAF5, 0x9097, 0xDAF6, 0x909B, 0xDAF7, 0x909D, 0xDAF8, 0x9099, 0xDAF9, 0x90AC, 0xDAFA, 0x90A1, 0xDAFB, 0x90B4, 0xDAFC, 0x90B3, + 0xDAFD, 0x90B6, 0xDAFE, 0x90BA, 0xDB40, 0x8DD5, 0xDB41, 0x8DD8, 0xDB42, 0x8DD9, 0xDB43, 0x8DDC, 0xDB44, 0x8DE0, 0xDB45, 0x8DE1, + 0xDB46, 0x8DE2, 0xDB47, 0x8DE5, 0xDB48, 0x8DE6, 0xDB49, 0x8DE7, 0xDB4A, 0x8DE9, 0xDB4B, 0x8DED, 0xDB4C, 0x8DEE, 0xDB4D, 0x8DF0, + 0xDB4E, 0x8DF1, 0xDB4F, 0x8DF2, 0xDB50, 0x8DF4, 0xDB51, 0x8DF6, 0xDB52, 0x8DFC, 0xDB53, 0x8DFE, 0xDB54, 0x8DFF, 0xDB55, 0x8E00, + 0xDB56, 0x8E01, 0xDB57, 0x8E02, 0xDB58, 0x8E03, 0xDB59, 0x8E04, 0xDB5A, 0x8E06, 0xDB5B, 0x8E07, 0xDB5C, 0x8E08, 0xDB5D, 0x8E0B, + 0xDB5E, 0x8E0D, 0xDB5F, 0x8E0E, 0xDB60, 0x8E10, 0xDB61, 0x8E11, 0xDB62, 0x8E12, 0xDB63, 0x8E13, 0xDB64, 0x8E15, 0xDB65, 0x8E16, + 0xDB66, 0x8E17, 0xDB67, 0x8E18, 0xDB68, 0x8E19, 0xDB69, 0x8E1A, 0xDB6A, 0x8E1B, 0xDB6B, 0x8E1C, 0xDB6C, 0x8E20, 0xDB6D, 0x8E21, + 0xDB6E, 0x8E24, 0xDB6F, 0x8E25, 0xDB70, 0x8E26, 0xDB71, 0x8E27, 0xDB72, 0x8E28, 0xDB73, 0x8E2B, 0xDB74, 0x8E2D, 0xDB75, 0x8E30, + 0xDB76, 0x8E32, 0xDB77, 0x8E33, 0xDB78, 0x8E34, 0xDB79, 0x8E36, 0xDB7A, 0x8E37, 0xDB7B, 0x8E38, 0xDB7C, 0x8E3B, 0xDB7D, 0x8E3C, + 0xDB7E, 0x8E3E, 0xDB80, 0x8E3F, 0xDB81, 0x8E43, 0xDB82, 0x8E45, 0xDB83, 0x8E46, 0xDB84, 0x8E4C, 0xDB85, 0x8E4D, 0xDB86, 0x8E4E, + 0xDB87, 0x8E4F, 0xDB88, 0x8E50, 0xDB89, 0x8E53, 0xDB8A, 0x8E54, 0xDB8B, 0x8E55, 0xDB8C, 0x8E56, 0xDB8D, 0x8E57, 0xDB8E, 0x8E58, + 0xDB8F, 0x8E5A, 0xDB90, 0x8E5B, 0xDB91, 0x8E5C, 0xDB92, 0x8E5D, 0xDB93, 0x8E5E, 0xDB94, 0x8E5F, 0xDB95, 0x8E60, 0xDB96, 0x8E61, + 0xDB97, 0x8E62, 0xDB98, 0x8E63, 0xDB99, 0x8E64, 0xDB9A, 0x8E65, 0xDB9B, 0x8E67, 0xDB9C, 0x8E68, 0xDB9D, 0x8E6A, 0xDB9E, 0x8E6B, + 0xDB9F, 0x8E6E, 0xDBA0, 0x8E71, 0xDBA1, 0x90B8, 0xDBA2, 0x90B0, 0xDBA3, 0x90CF, 0xDBA4, 0x90C5, 0xDBA5, 0x90BE, 0xDBA6, 0x90D0, + 0xDBA7, 0x90C4, 0xDBA8, 0x90C7, 0xDBA9, 0x90D3, 0xDBAA, 0x90E6, 0xDBAB, 0x90E2, 0xDBAC, 0x90DC, 0xDBAD, 0x90D7, 0xDBAE, 0x90DB, + 0xDBAF, 0x90EB, 0xDBB0, 0x90EF, 0xDBB1, 0x90FE, 0xDBB2, 0x9104, 0xDBB3, 0x9122, 0xDBB4, 0x911E, 0xDBB5, 0x9123, 0xDBB6, 0x9131, + 0xDBB7, 0x912F, 0xDBB8, 0x9139, 0xDBB9, 0x9143, 0xDBBA, 0x9146, 0xDBBB, 0x520D, 0xDBBC, 0x5942, 0xDBBD, 0x52A2, 0xDBBE, 0x52AC, + 0xDBBF, 0x52AD, 0xDBC0, 0x52BE, 0xDBC1, 0x54FF, 0xDBC2, 0x52D0, 0xDBC3, 0x52D6, 0xDBC4, 0x52F0, 0xDBC5, 0x53DF, 0xDBC6, 0x71EE, + 0xDBC7, 0x77CD, 0xDBC8, 0x5EF4, 0xDBC9, 0x51F5, 0xDBCA, 0x51FC, 0xDBCB, 0x9B2F, 0xDBCC, 0x53B6, 0xDBCD, 0x5F01, 0xDBCE, 0x755A, + 0xDBCF, 0x5DEF, 0xDBD0, 0x574C, 0xDBD1, 0x57A9, 0xDBD2, 0x57A1, 0xDBD3, 0x587E, 0xDBD4, 0x58BC, 0xDBD5, 0x58C5, 0xDBD6, 0x58D1, + 0xDBD7, 0x5729, 0xDBD8, 0x572C, 0xDBD9, 0x572A, 0xDBDA, 0x5733, 0xDBDB, 0x5739, 0xDBDC, 0x572E, 0xDBDD, 0x572F, 0xDBDE, 0x575C, + 0xDBDF, 0x573B, 0xDBE0, 0x5742, 0xDBE1, 0x5769, 0xDBE2, 0x5785, 0xDBE3, 0x576B, 0xDBE4, 0x5786, 0xDBE5, 0x577C, 0xDBE6, 0x577B, + 0xDBE7, 0x5768, 0xDBE8, 0x576D, 0xDBE9, 0x5776, 0xDBEA, 0x5773, 0xDBEB, 0x57AD, 0xDBEC, 0x57A4, 0xDBED, 0x578C, 0xDBEE, 0x57B2, + 0xDBEF, 0x57CF, 0xDBF0, 0x57A7, 0xDBF1, 0x57B4, 0xDBF2, 0x5793, 0xDBF3, 0x57A0, 0xDBF4, 0x57D5, 0xDBF5, 0x57D8, 0xDBF6, 0x57DA, + 0xDBF7, 0x57D9, 0xDBF8, 0x57D2, 0xDBF9, 0x57B8, 0xDBFA, 0x57F4, 0xDBFB, 0x57EF, 0xDBFC, 0x57F8, 0xDBFD, 0x57E4, 0xDBFE, 0x57DD, + 0xDC40, 0x8E73, 0xDC41, 0x8E75, 0xDC42, 0x8E77, 0xDC43, 0x8E78, 0xDC44, 0x8E79, 0xDC45, 0x8E7A, 0xDC46, 0x8E7B, 0xDC47, 0x8E7D, + 0xDC48, 0x8E7E, 0xDC49, 0x8E80, 0xDC4A, 0x8E82, 0xDC4B, 0x8E83, 0xDC4C, 0x8E84, 0xDC4D, 0x8E86, 0xDC4E, 0x8E88, 0xDC4F, 0x8E89, + 0xDC50, 0x8E8A, 0xDC51, 0x8E8B, 0xDC52, 0x8E8C, 0xDC53, 0x8E8D, 0xDC54, 0x8E8E, 0xDC55, 0x8E91, 0xDC56, 0x8E92, 0xDC57, 0x8E93, + 0xDC58, 0x8E95, 0xDC59, 0x8E96, 0xDC5A, 0x8E97, 0xDC5B, 0x8E98, 0xDC5C, 0x8E99, 0xDC5D, 0x8E9A, 0xDC5E, 0x8E9B, 0xDC5F, 0x8E9D, + 0xDC60, 0x8E9F, 0xDC61, 0x8EA0, 0xDC62, 0x8EA1, 0xDC63, 0x8EA2, 0xDC64, 0x8EA3, 0xDC65, 0x8EA4, 0xDC66, 0x8EA5, 0xDC67, 0x8EA6, + 0xDC68, 0x8EA7, 0xDC69, 0x8EA8, 0xDC6A, 0x8EA9, 0xDC6B, 0x8EAA, 0xDC6C, 0x8EAD, 0xDC6D, 0x8EAE, 0xDC6E, 0x8EB0, 0xDC6F, 0x8EB1, + 0xDC70, 0x8EB3, 0xDC71, 0x8EB4, 0xDC72, 0x8EB5, 0xDC73, 0x8EB6, 0xDC74, 0x8EB7, 0xDC75, 0x8EB8, 0xDC76, 0x8EB9, 0xDC77, 0x8EBB, + 0xDC78, 0x8EBC, 0xDC79, 0x8EBD, 0xDC7A, 0x8EBE, 0xDC7B, 0x8EBF, 0xDC7C, 0x8EC0, 0xDC7D, 0x8EC1, 0xDC7E, 0x8EC2, 0xDC80, 0x8EC3, + 0xDC81, 0x8EC4, 0xDC82, 0x8EC5, 0xDC83, 0x8EC6, 0xDC84, 0x8EC7, 0xDC85, 0x8EC8, 0xDC86, 0x8EC9, 0xDC87, 0x8ECA, 0xDC88, 0x8ECB, + 0xDC89, 0x8ECC, 0xDC8A, 0x8ECD, 0xDC8B, 0x8ECF, 0xDC8C, 0x8ED0, 0xDC8D, 0x8ED1, 0xDC8E, 0x8ED2, 0xDC8F, 0x8ED3, 0xDC90, 0x8ED4, + 0xDC91, 0x8ED5, 0xDC92, 0x8ED6, 0xDC93, 0x8ED7, 0xDC94, 0x8ED8, 0xDC95, 0x8ED9, 0xDC96, 0x8EDA, 0xDC97, 0x8EDB, 0xDC98, 0x8EDC, + 0xDC99, 0x8EDD, 0xDC9A, 0x8EDE, 0xDC9B, 0x8EDF, 0xDC9C, 0x8EE0, 0xDC9D, 0x8EE1, 0xDC9E, 0x8EE2, 0xDC9F, 0x8EE3, 0xDCA0, 0x8EE4, + 0xDCA1, 0x580B, 0xDCA2, 0x580D, 0xDCA3, 0x57FD, 0xDCA4, 0x57ED, 0xDCA5, 0x5800, 0xDCA6, 0x581E, 0xDCA7, 0x5819, 0xDCA8, 0x5844, + 0xDCA9, 0x5820, 0xDCAA, 0x5865, 0xDCAB, 0x586C, 0xDCAC, 0x5881, 0xDCAD, 0x5889, 0xDCAE, 0x589A, 0xDCAF, 0x5880, 0xDCB0, 0x99A8, + 0xDCB1, 0x9F19, 0xDCB2, 0x61FF, 0xDCB3, 0x8279, 0xDCB4, 0x827D, 0xDCB5, 0x827F, 0xDCB6, 0x828F, 0xDCB7, 0x828A, 0xDCB8, 0x82A8, + 0xDCB9, 0x8284, 0xDCBA, 0x828E, 0xDCBB, 0x8291, 0xDCBC, 0x8297, 0xDCBD, 0x8299, 0xDCBE, 0x82AB, 0xDCBF, 0x82B8, 0xDCC0, 0x82BE, + 0xDCC1, 0x82B0, 0xDCC2, 0x82C8, 0xDCC3, 0x82CA, 0xDCC4, 0x82E3, 0xDCC5, 0x8298, 0xDCC6, 0x82B7, 0xDCC7, 0x82AE, 0xDCC8, 0x82CB, + 0xDCC9, 0x82CC, 0xDCCA, 0x82C1, 0xDCCB, 0x82A9, 0xDCCC, 0x82B4, 0xDCCD, 0x82A1, 0xDCCE, 0x82AA, 0xDCCF, 0x829F, 0xDCD0, 0x82C4, + 0xDCD1, 0x82CE, 0xDCD2, 0x82A4, 0xDCD3, 0x82E1, 0xDCD4, 0x8309, 0xDCD5, 0x82F7, 0xDCD6, 0x82E4, 0xDCD7, 0x830F, 0xDCD8, 0x8307, + 0xDCD9, 0x82DC, 0xDCDA, 0x82F4, 0xDCDB, 0x82D2, 0xDCDC, 0x82D8, 0xDCDD, 0x830C, 0xDCDE, 0x82FB, 0xDCDF, 0x82D3, 0xDCE0, 0x8311, + 0xDCE1, 0x831A, 0xDCE2, 0x8306, 0xDCE3, 0x8314, 0xDCE4, 0x8315, 0xDCE5, 0x82E0, 0xDCE6, 0x82D5, 0xDCE7, 0x831C, 0xDCE8, 0x8351, + 0xDCE9, 0x835B, 0xDCEA, 0x835C, 0xDCEB, 0x8308, 0xDCEC, 0x8392, 0xDCED, 0x833C, 0xDCEE, 0x8334, 0xDCEF, 0x8331, 0xDCF0, 0x839B, + 0xDCF1, 0x835E, 0xDCF2, 0x832F, 0xDCF3, 0x834F, 0xDCF4, 0x8347, 0xDCF5, 0x8343, 0xDCF6, 0x835F, 0xDCF7, 0x8340, 0xDCF8, 0x8317, + 0xDCF9, 0x8360, 0xDCFA, 0x832D, 0xDCFB, 0x833A, 0xDCFC, 0x8333, 0xDCFD, 0x8366, 0xDCFE, 0x8365, 0xDD40, 0x8EE5, 0xDD41, 0x8EE6, + 0xDD42, 0x8EE7, 0xDD43, 0x8EE8, 0xDD44, 0x8EE9, 0xDD45, 0x8EEA, 0xDD46, 0x8EEB, 0xDD47, 0x8EEC, 0xDD48, 0x8EED, 0xDD49, 0x8EEE, + 0xDD4A, 0x8EEF, 0xDD4B, 0x8EF0, 0xDD4C, 0x8EF1, 0xDD4D, 0x8EF2, 0xDD4E, 0x8EF3, 0xDD4F, 0x8EF4, 0xDD50, 0x8EF5, 0xDD51, 0x8EF6, + 0xDD52, 0x8EF7, 0xDD53, 0x8EF8, 0xDD54, 0x8EF9, 0xDD55, 0x8EFA, 0xDD56, 0x8EFB, 0xDD57, 0x8EFC, 0xDD58, 0x8EFD, 0xDD59, 0x8EFE, + 0xDD5A, 0x8EFF, 0xDD5B, 0x8F00, 0xDD5C, 0x8F01, 0xDD5D, 0x8F02, 0xDD5E, 0x8F03, 0xDD5F, 0x8F04, 0xDD60, 0x8F05, 0xDD61, 0x8F06, + 0xDD62, 0x8F07, 0xDD63, 0x8F08, 0xDD64, 0x8F09, 0xDD65, 0x8F0A, 0xDD66, 0x8F0B, 0xDD67, 0x8F0C, 0xDD68, 0x8F0D, 0xDD69, 0x8F0E, + 0xDD6A, 0x8F0F, 0xDD6B, 0x8F10, 0xDD6C, 0x8F11, 0xDD6D, 0x8F12, 0xDD6E, 0x8F13, 0xDD6F, 0x8F14, 0xDD70, 0x8F15, 0xDD71, 0x8F16, + 0xDD72, 0x8F17, 0xDD73, 0x8F18, 0xDD74, 0x8F19, 0xDD75, 0x8F1A, 0xDD76, 0x8F1B, 0xDD77, 0x8F1C, 0xDD78, 0x8F1D, 0xDD79, 0x8F1E, + 0xDD7A, 0x8F1F, 0xDD7B, 0x8F20, 0xDD7C, 0x8F21, 0xDD7D, 0x8F22, 0xDD7E, 0x8F23, 0xDD80, 0x8F24, 0xDD81, 0x8F25, 0xDD82, 0x8F26, + 0xDD83, 0x8F27, 0xDD84, 0x8F28, 0xDD85, 0x8F29, 0xDD86, 0x8F2A, 0xDD87, 0x8F2B, 0xDD88, 0x8F2C, 0xDD89, 0x8F2D, 0xDD8A, 0x8F2E, + 0xDD8B, 0x8F2F, 0xDD8C, 0x8F30, 0xDD8D, 0x8F31, 0xDD8E, 0x8F32, 0xDD8F, 0x8F33, 0xDD90, 0x8F34, 0xDD91, 0x8F35, 0xDD92, 0x8F36, + 0xDD93, 0x8F37, 0xDD94, 0x8F38, 0xDD95, 0x8F39, 0xDD96, 0x8F3A, 0xDD97, 0x8F3B, 0xDD98, 0x8F3C, 0xDD99, 0x8F3D, 0xDD9A, 0x8F3E, + 0xDD9B, 0x8F3F, 0xDD9C, 0x8F40, 0xDD9D, 0x8F41, 0xDD9E, 0x8F42, 0xDD9F, 0x8F43, 0xDDA0, 0x8F44, 0xDDA1, 0x8368, 0xDDA2, 0x831B, + 0xDDA3, 0x8369, 0xDDA4, 0x836C, 0xDDA5, 0x836A, 0xDDA6, 0x836D, 0xDDA7, 0x836E, 0xDDA8, 0x83B0, 0xDDA9, 0x8378, 0xDDAA, 0x83B3, + 0xDDAB, 0x83B4, 0xDDAC, 0x83A0, 0xDDAD, 0x83AA, 0xDDAE, 0x8393, 0xDDAF, 0x839C, 0xDDB0, 0x8385, 0xDDB1, 0x837C, 0xDDB2, 0x83B6, + 0xDDB3, 0x83A9, 0xDDB4, 0x837D, 0xDDB5, 0x83B8, 0xDDB6, 0x837B, 0xDDB7, 0x8398, 0xDDB8, 0x839E, 0xDDB9, 0x83A8, 0xDDBA, 0x83BA, + 0xDDBB, 0x83BC, 0xDDBC, 0x83C1, 0xDDBD, 0x8401, 0xDDBE, 0x83E5, 0xDDBF, 0x83D8, 0xDDC0, 0x5807, 0xDDC1, 0x8418, 0xDDC2, 0x840B, + 0xDDC3, 0x83DD, 0xDDC4, 0x83FD, 0xDDC5, 0x83D6, 0xDDC6, 0x841C, 0xDDC7, 0x8438, 0xDDC8, 0x8411, 0xDDC9, 0x8406, 0xDDCA, 0x83D4, + 0xDDCB, 0x83DF, 0xDDCC, 0x840F, 0xDDCD, 0x8403, 0xDDCE, 0x83F8, 0xDDCF, 0x83F9, 0xDDD0, 0x83EA, 0xDDD1, 0x83C5, 0xDDD2, 0x83C0, + 0xDDD3, 0x8426, 0xDDD4, 0x83F0, 0xDDD5, 0x83E1, 0xDDD6, 0x845C, 0xDDD7, 0x8451, 0xDDD8, 0x845A, 0xDDD9, 0x8459, 0xDDDA, 0x8473, + 0xDDDB, 0x8487, 0xDDDC, 0x8488, 0xDDDD, 0x847A, 0xDDDE, 0x8489, 0xDDDF, 0x8478, 0xDDE0, 0x843C, 0xDDE1, 0x8446, 0xDDE2, 0x8469, + 0xDDE3, 0x8476, 0xDDE4, 0x848C, 0xDDE5, 0x848E, 0xDDE6, 0x8431, 0xDDE7, 0x846D, 0xDDE8, 0x84C1, 0xDDE9, 0x84CD, 0xDDEA, 0x84D0, + 0xDDEB, 0x84E6, 0xDDEC, 0x84BD, 0xDDED, 0x84D3, 0xDDEE, 0x84CA, 0xDDEF, 0x84BF, 0xDDF0, 0x84BA, 0xDDF1, 0x84E0, 0xDDF2, 0x84A1, + 0xDDF3, 0x84B9, 0xDDF4, 0x84B4, 0xDDF5, 0x8497, 0xDDF6, 0x84E5, 0xDDF7, 0x84E3, 0xDDF8, 0x850C, 0xDDF9, 0x750D, 0xDDFA, 0x8538, + 0xDDFB, 0x84F0, 0xDDFC, 0x8539, 0xDDFD, 0x851F, 0xDDFE, 0x853A, 0xDE40, 0x8F45, 0xDE41, 0x8F46, 0xDE42, 0x8F47, 0xDE43, 0x8F48, + 0xDE44, 0x8F49, 0xDE45, 0x8F4A, 0xDE46, 0x8F4B, 0xDE47, 0x8F4C, 0xDE48, 0x8F4D, 0xDE49, 0x8F4E, 0xDE4A, 0x8F4F, 0xDE4B, 0x8F50, + 0xDE4C, 0x8F51, 0xDE4D, 0x8F52, 0xDE4E, 0x8F53, 0xDE4F, 0x8F54, 0xDE50, 0x8F55, 0xDE51, 0x8F56, 0xDE52, 0x8F57, 0xDE53, 0x8F58, + 0xDE54, 0x8F59, 0xDE55, 0x8F5A, 0xDE56, 0x8F5B, 0xDE57, 0x8F5C, 0xDE58, 0x8F5D, 0xDE59, 0x8F5E, 0xDE5A, 0x8F5F, 0xDE5B, 0x8F60, + 0xDE5C, 0x8F61, 0xDE5D, 0x8F62, 0xDE5E, 0x8F63, 0xDE5F, 0x8F64, 0xDE60, 0x8F65, 0xDE61, 0x8F6A, 0xDE62, 0x8F80, 0xDE63, 0x8F8C, + 0xDE64, 0x8F92, 0xDE65, 0x8F9D, 0xDE66, 0x8FA0, 0xDE67, 0x8FA1, 0xDE68, 0x8FA2, 0xDE69, 0x8FA4, 0xDE6A, 0x8FA5, 0xDE6B, 0x8FA6, + 0xDE6C, 0x8FA7, 0xDE6D, 0x8FAA, 0xDE6E, 0x8FAC, 0xDE6F, 0x8FAD, 0xDE70, 0x8FAE, 0xDE71, 0x8FAF, 0xDE72, 0x8FB2, 0xDE73, 0x8FB3, + 0xDE74, 0x8FB4, 0xDE75, 0x8FB5, 0xDE76, 0x8FB7, 0xDE77, 0x8FB8, 0xDE78, 0x8FBA, 0xDE79, 0x8FBB, 0xDE7A, 0x8FBC, 0xDE7B, 0x8FBF, + 0xDE7C, 0x8FC0, 0xDE7D, 0x8FC3, 0xDE7E, 0x8FC6, 0xDE80, 0x8FC9, 0xDE81, 0x8FCA, 0xDE82, 0x8FCB, 0xDE83, 0x8FCC, 0xDE84, 0x8FCD, + 0xDE85, 0x8FCF, 0xDE86, 0x8FD2, 0xDE87, 0x8FD6, 0xDE88, 0x8FD7, 0xDE89, 0x8FDA, 0xDE8A, 0x8FE0, 0xDE8B, 0x8FE1, 0xDE8C, 0x8FE3, + 0xDE8D, 0x8FE7, 0xDE8E, 0x8FEC, 0xDE8F, 0x8FEF, 0xDE90, 0x8FF1, 0xDE91, 0x8FF2, 0xDE92, 0x8FF4, 0xDE93, 0x8FF5, 0xDE94, 0x8FF6, + 0xDE95, 0x8FFA, 0xDE96, 0x8FFB, 0xDE97, 0x8FFC, 0xDE98, 0x8FFE, 0xDE99, 0x8FFF, 0xDE9A, 0x9007, 0xDE9B, 0x9008, 0xDE9C, 0x900C, + 0xDE9D, 0x900E, 0xDE9E, 0x9013, 0xDE9F, 0x9015, 0xDEA0, 0x9018, 0xDEA1, 0x8556, 0xDEA2, 0x853B, 0xDEA3, 0x84FF, 0xDEA4, 0x84FC, + 0xDEA5, 0x8559, 0xDEA6, 0x8548, 0xDEA7, 0x8568, 0xDEA8, 0x8564, 0xDEA9, 0x855E, 0xDEAA, 0x857A, 0xDEAB, 0x77A2, 0xDEAC, 0x8543, + 0xDEAD, 0x8572, 0xDEAE, 0x857B, 0xDEAF, 0x85A4, 0xDEB0, 0x85A8, 0xDEB1, 0x8587, 0xDEB2, 0x858F, 0xDEB3, 0x8579, 0xDEB4, 0x85AE, + 0xDEB5, 0x859C, 0xDEB6, 0x8585, 0xDEB7, 0x85B9, 0xDEB8, 0x85B7, 0xDEB9, 0x85B0, 0xDEBA, 0x85D3, 0xDEBB, 0x85C1, 0xDEBC, 0x85DC, + 0xDEBD, 0x85FF, 0xDEBE, 0x8627, 0xDEBF, 0x8605, 0xDEC0, 0x8629, 0xDEC1, 0x8616, 0xDEC2, 0x863C, 0xDEC3, 0x5EFE, 0xDEC4, 0x5F08, + 0xDEC5, 0x593C, 0xDEC6, 0x5941, 0xDEC7, 0x8037, 0xDEC8, 0x5955, 0xDEC9, 0x595A, 0xDECA, 0x5958, 0xDECB, 0x530F, 0xDECC, 0x5C22, + 0xDECD, 0x5C25, 0xDECE, 0x5C2C, 0xDECF, 0x5C34, 0xDED0, 0x624C, 0xDED1, 0x626A, 0xDED2, 0x629F, 0xDED3, 0x62BB, 0xDED4, 0x62CA, + 0xDED5, 0x62DA, 0xDED6, 0x62D7, 0xDED7, 0x62EE, 0xDED8, 0x6322, 0xDED9, 0x62F6, 0xDEDA, 0x6339, 0xDEDB, 0x634B, 0xDEDC, 0x6343, + 0xDEDD, 0x63AD, 0xDEDE, 0x63F6, 0xDEDF, 0x6371, 0xDEE0, 0x637A, 0xDEE1, 0x638E, 0xDEE2, 0x63B4, 0xDEE3, 0x636D, 0xDEE4, 0x63AC, + 0xDEE5, 0x638A, 0xDEE6, 0x6369, 0xDEE7, 0x63AE, 0xDEE8, 0x63BC, 0xDEE9, 0x63F2, 0xDEEA, 0x63F8, 0xDEEB, 0x63E0, 0xDEEC, 0x63FF, + 0xDEED, 0x63C4, 0xDEEE, 0x63DE, 0xDEEF, 0x63CE, 0xDEF0, 0x6452, 0xDEF1, 0x63C6, 0xDEF2, 0x63BE, 0xDEF3, 0x6445, 0xDEF4, 0x6441, + 0xDEF5, 0x640B, 0xDEF6, 0x641B, 0xDEF7, 0x6420, 0xDEF8, 0x640C, 0xDEF9, 0x6426, 0xDEFA, 0x6421, 0xDEFB, 0x645E, 0xDEFC, 0x6484, + 0xDEFD, 0x646D, 0xDEFE, 0x6496, 0xDF40, 0x9019, 0xDF41, 0x901C, 0xDF42, 0x9023, 0xDF43, 0x9024, 0xDF44, 0x9025, 0xDF45, 0x9027, + 0xDF46, 0x9028, 0xDF47, 0x9029, 0xDF48, 0x902A, 0xDF49, 0x902B, 0xDF4A, 0x902C, 0xDF4B, 0x9030, 0xDF4C, 0x9031, 0xDF4D, 0x9032, + 0xDF4E, 0x9033, 0xDF4F, 0x9034, 0xDF50, 0x9037, 0xDF51, 0x9039, 0xDF52, 0x903A, 0xDF53, 0x903D, 0xDF54, 0x903F, 0xDF55, 0x9040, + 0xDF56, 0x9043, 0xDF57, 0x9045, 0xDF58, 0x9046, 0xDF59, 0x9048, 0xDF5A, 0x9049, 0xDF5B, 0x904A, 0xDF5C, 0x904B, 0xDF5D, 0x904C, + 0xDF5E, 0x904E, 0xDF5F, 0x9054, 0xDF60, 0x9055, 0xDF61, 0x9056, 0xDF62, 0x9059, 0xDF63, 0x905A, 0xDF64, 0x905C, 0xDF65, 0x905D, + 0xDF66, 0x905E, 0xDF67, 0x905F, 0xDF68, 0x9060, 0xDF69, 0x9061, 0xDF6A, 0x9064, 0xDF6B, 0x9066, 0xDF6C, 0x9067, 0xDF6D, 0x9069, + 0xDF6E, 0x906A, 0xDF6F, 0x906B, 0xDF70, 0x906C, 0xDF71, 0x906F, 0xDF72, 0x9070, 0xDF73, 0x9071, 0xDF74, 0x9072, 0xDF75, 0x9073, + 0xDF76, 0x9076, 0xDF77, 0x9077, 0xDF78, 0x9078, 0xDF79, 0x9079, 0xDF7A, 0x907A, 0xDF7B, 0x907B, 0xDF7C, 0x907C, 0xDF7D, 0x907E, + 0xDF7E, 0x9081, 0xDF80, 0x9084, 0xDF81, 0x9085, 0xDF82, 0x9086, 0xDF83, 0x9087, 0xDF84, 0x9089, 0xDF85, 0x908A, 0xDF86, 0x908C, + 0xDF87, 0x908D, 0xDF88, 0x908E, 0xDF89, 0x908F, 0xDF8A, 0x9090, 0xDF8B, 0x9092, 0xDF8C, 0x9094, 0xDF8D, 0x9096, 0xDF8E, 0x9098, + 0xDF8F, 0x909A, 0xDF90, 0x909C, 0xDF91, 0x909E, 0xDF92, 0x909F, 0xDF93, 0x90A0, 0xDF94, 0x90A4, 0xDF95, 0x90A5, 0xDF96, 0x90A7, + 0xDF97, 0x90A8, 0xDF98, 0x90A9, 0xDF99, 0x90AB, 0xDF9A, 0x90AD, 0xDF9B, 0x90B2, 0xDF9C, 0x90B7, 0xDF9D, 0x90BC, 0xDF9E, 0x90BD, + 0xDF9F, 0x90BF, 0xDFA0, 0x90C0, 0xDFA1, 0x647A, 0xDFA2, 0x64B7, 0xDFA3, 0x64B8, 0xDFA4, 0x6499, 0xDFA5, 0x64BA, 0xDFA6, 0x64C0, + 0xDFA7, 0x64D0, 0xDFA8, 0x64D7, 0xDFA9, 0x64E4, 0xDFAA, 0x64E2, 0xDFAB, 0x6509, 0xDFAC, 0x6525, 0xDFAD, 0x652E, 0xDFAE, 0x5F0B, + 0xDFAF, 0x5FD2, 0xDFB0, 0x7519, 0xDFB1, 0x5F11, 0xDFB2, 0x535F, 0xDFB3, 0x53F1, 0xDFB4, 0x53FD, 0xDFB5, 0x53E9, 0xDFB6, 0x53E8, + 0xDFB7, 0x53FB, 0xDFB8, 0x5412, 0xDFB9, 0x5416, 0xDFBA, 0x5406, 0xDFBB, 0x544B, 0xDFBC, 0x5452, 0xDFBD, 0x5453, 0xDFBE, 0x5454, + 0xDFBF, 0x5456, 0xDFC0, 0x5443, 0xDFC1, 0x5421, 0xDFC2, 0x5457, 0xDFC3, 0x5459, 0xDFC4, 0x5423, 0xDFC5, 0x5432, 0xDFC6, 0x5482, + 0xDFC7, 0x5494, 0xDFC8, 0x5477, 0xDFC9, 0x5471, 0xDFCA, 0x5464, 0xDFCB, 0x549A, 0xDFCC, 0x549B, 0xDFCD, 0x5484, 0xDFCE, 0x5476, + 0xDFCF, 0x5466, 0xDFD0, 0x549D, 0xDFD1, 0x54D0, 0xDFD2, 0x54AD, 0xDFD3, 0x54C2, 0xDFD4, 0x54B4, 0xDFD5, 0x54D2, 0xDFD6, 0x54A7, + 0xDFD7, 0x54A6, 0xDFD8, 0x54D3, 0xDFD9, 0x54D4, 0xDFDA, 0x5472, 0xDFDB, 0x54A3, 0xDFDC, 0x54D5, 0xDFDD, 0x54BB, 0xDFDE, 0x54BF, + 0xDFDF, 0x54CC, 0xDFE0, 0x54D9, 0xDFE1, 0x54DA, 0xDFE2, 0x54DC, 0xDFE3, 0x54A9, 0xDFE4, 0x54AA, 0xDFE5, 0x54A4, 0xDFE6, 0x54DD, + 0xDFE7, 0x54CF, 0xDFE8, 0x54DE, 0xDFE9, 0x551B, 0xDFEA, 0x54E7, 0xDFEB, 0x5520, 0xDFEC, 0x54FD, 0xDFED, 0x5514, 0xDFEE, 0x54F3, + 0xDFEF, 0x5522, 0xDFF0, 0x5523, 0xDFF1, 0x550F, 0xDFF2, 0x5511, 0xDFF3, 0x5527, 0xDFF4, 0x552A, 0xDFF5, 0x5567, 0xDFF6, 0x558F, + 0xDFF7, 0x55B5, 0xDFF8, 0x5549, 0xDFF9, 0x556D, 0xDFFA, 0x5541, 0xDFFB, 0x5555, 0xDFFC, 0x553F, 0xDFFD, 0x5550, 0xDFFE, 0x553C, + 0xE040, 0x90C2, 0xE041, 0x90C3, 0xE042, 0x90C6, 0xE043, 0x90C8, 0xE044, 0x90C9, 0xE045, 0x90CB, 0xE046, 0x90CC, 0xE047, 0x90CD, + 0xE048, 0x90D2, 0xE049, 0x90D4, 0xE04A, 0x90D5, 0xE04B, 0x90D6, 0xE04C, 0x90D8, 0xE04D, 0x90D9, 0xE04E, 0x90DA, 0xE04F, 0x90DE, + 0xE050, 0x90DF, 0xE051, 0x90E0, 0xE052, 0x90E3, 0xE053, 0x90E4, 0xE054, 0x90E5, 0xE055, 0x90E9, 0xE056, 0x90EA, 0xE057, 0x90EC, + 0xE058, 0x90EE, 0xE059, 0x90F0, 0xE05A, 0x90F1, 0xE05B, 0x90F2, 0xE05C, 0x90F3, 0xE05D, 0x90F5, 0xE05E, 0x90F6, 0xE05F, 0x90F7, + 0xE060, 0x90F9, 0xE061, 0x90FA, 0xE062, 0x90FB, 0xE063, 0x90FC, 0xE064, 0x90FF, 0xE065, 0x9100, 0xE066, 0x9101, 0xE067, 0x9103, + 0xE068, 0x9105, 0xE069, 0x9106, 0xE06A, 0x9107, 0xE06B, 0x9108, 0xE06C, 0x9109, 0xE06D, 0x910A, 0xE06E, 0x910B, 0xE06F, 0x910C, + 0xE070, 0x910D, 0xE071, 0x910E, 0xE072, 0x910F, 0xE073, 0x9110, 0xE074, 0x9111, 0xE075, 0x9112, 0xE076, 0x9113, 0xE077, 0x9114, + 0xE078, 0x9115, 0xE079, 0x9116, 0xE07A, 0x9117, 0xE07B, 0x9118, 0xE07C, 0x911A, 0xE07D, 0x911B, 0xE07E, 0x911C, 0xE080, 0x911D, + 0xE081, 0x911F, 0xE082, 0x9120, 0xE083, 0x9121, 0xE084, 0x9124, 0xE085, 0x9125, 0xE086, 0x9126, 0xE087, 0x9127, 0xE088, 0x9128, + 0xE089, 0x9129, 0xE08A, 0x912A, 0xE08B, 0x912B, 0xE08C, 0x912C, 0xE08D, 0x912D, 0xE08E, 0x912E, 0xE08F, 0x9130, 0xE090, 0x9132, + 0xE091, 0x9133, 0xE092, 0x9134, 0xE093, 0x9135, 0xE094, 0x9136, 0xE095, 0x9137, 0xE096, 0x9138, 0xE097, 0x913A, 0xE098, 0x913B, + 0xE099, 0x913C, 0xE09A, 0x913D, 0xE09B, 0x913E, 0xE09C, 0x913F, 0xE09D, 0x9140, 0xE09E, 0x9141, 0xE09F, 0x9142, 0xE0A0, 0x9144, + 0xE0A1, 0x5537, 0xE0A2, 0x5556, 0xE0A3, 0x5575, 0xE0A4, 0x5576, 0xE0A5, 0x5577, 0xE0A6, 0x5533, 0xE0A7, 0x5530, 0xE0A8, 0x555C, + 0xE0A9, 0x558B, 0xE0AA, 0x55D2, 0xE0AB, 0x5583, 0xE0AC, 0x55B1, 0xE0AD, 0x55B9, 0xE0AE, 0x5588, 0xE0AF, 0x5581, 0xE0B0, 0x559F, + 0xE0B1, 0x557E, 0xE0B2, 0x55D6, 0xE0B3, 0x5591, 0xE0B4, 0x557B, 0xE0B5, 0x55DF, 0xE0B6, 0x55BD, 0xE0B7, 0x55BE, 0xE0B8, 0x5594, + 0xE0B9, 0x5599, 0xE0BA, 0x55EA, 0xE0BB, 0x55F7, 0xE0BC, 0x55C9, 0xE0BD, 0x561F, 0xE0BE, 0x55D1, 0xE0BF, 0x55EB, 0xE0C0, 0x55EC, + 0xE0C1, 0x55D4, 0xE0C2, 0x55E6, 0xE0C3, 0x55DD, 0xE0C4, 0x55C4, 0xE0C5, 0x55EF, 0xE0C6, 0x55E5, 0xE0C7, 0x55F2, 0xE0C8, 0x55F3, + 0xE0C9, 0x55CC, 0xE0CA, 0x55CD, 0xE0CB, 0x55E8, 0xE0CC, 0x55F5, 0xE0CD, 0x55E4, 0xE0CE, 0x8F94, 0xE0CF, 0x561E, 0xE0D0, 0x5608, + 0xE0D1, 0x560C, 0xE0D2, 0x5601, 0xE0D3, 0x5624, 0xE0D4, 0x5623, 0xE0D5, 0x55FE, 0xE0D6, 0x5600, 0xE0D7, 0x5627, 0xE0D8, 0x562D, + 0xE0D9, 0x5658, 0xE0DA, 0x5639, 0xE0DB, 0x5657, 0xE0DC, 0x562C, 0xE0DD, 0x564D, 0xE0DE, 0x5662, 0xE0DF, 0x5659, 0xE0E0, 0x565C, + 0xE0E1, 0x564C, 0xE0E2, 0x5654, 0xE0E3, 0x5686, 0xE0E4, 0x5664, 0xE0E5, 0x5671, 0xE0E6, 0x566B, 0xE0E7, 0x567B, 0xE0E8, 0x567C, + 0xE0E9, 0x5685, 0xE0EA, 0x5693, 0xE0EB, 0x56AF, 0xE0EC, 0x56D4, 0xE0ED, 0x56D7, 0xE0EE, 0x56DD, 0xE0EF, 0x56E1, 0xE0F0, 0x56F5, + 0xE0F1, 0x56EB, 0xE0F2, 0x56F9, 0xE0F3, 0x56FF, 0xE0F4, 0x5704, 0xE0F5, 0x570A, 0xE0F6, 0x5709, 0xE0F7, 0x571C, 0xE0F8, 0x5E0F, + 0xE0F9, 0x5E19, 0xE0FA, 0x5E14, 0xE0FB, 0x5E11, 0xE0FC, 0x5E31, 0xE0FD, 0x5E3B, 0xE0FE, 0x5E3C, 0xE140, 0x9145, 0xE141, 0x9147, + 0xE142, 0x9148, 0xE143, 0x9151, 0xE144, 0x9153, 0xE145, 0x9154, 0xE146, 0x9155, 0xE147, 0x9156, 0xE148, 0x9158, 0xE149, 0x9159, + 0xE14A, 0x915B, 0xE14B, 0x915C, 0xE14C, 0x915F, 0xE14D, 0x9160, 0xE14E, 0x9166, 0xE14F, 0x9167, 0xE150, 0x9168, 0xE151, 0x916B, + 0xE152, 0x916D, 0xE153, 0x9173, 0xE154, 0x917A, 0xE155, 0x917B, 0xE156, 0x917C, 0xE157, 0x9180, 0xE158, 0x9181, 0xE159, 0x9182, + 0xE15A, 0x9183, 0xE15B, 0x9184, 0xE15C, 0x9186, 0xE15D, 0x9188, 0xE15E, 0x918A, 0xE15F, 0x918E, 0xE160, 0x918F, 0xE161, 0x9193, + 0xE162, 0x9194, 0xE163, 0x9195, 0xE164, 0x9196, 0xE165, 0x9197, 0xE166, 0x9198, 0xE167, 0x9199, 0xE168, 0x919C, 0xE169, 0x919D, + 0xE16A, 0x919E, 0xE16B, 0x919F, 0xE16C, 0x91A0, 0xE16D, 0x91A1, 0xE16E, 0x91A4, 0xE16F, 0x91A5, 0xE170, 0x91A6, 0xE171, 0x91A7, + 0xE172, 0x91A8, 0xE173, 0x91A9, 0xE174, 0x91AB, 0xE175, 0x91AC, 0xE176, 0x91B0, 0xE177, 0x91B1, 0xE178, 0x91B2, 0xE179, 0x91B3, + 0xE17A, 0x91B6, 0xE17B, 0x91B7, 0xE17C, 0x91B8, 0xE17D, 0x91B9, 0xE17E, 0x91BB, 0xE180, 0x91BC, 0xE181, 0x91BD, 0xE182, 0x91BE, + 0xE183, 0x91BF, 0xE184, 0x91C0, 0xE185, 0x91C1, 0xE186, 0x91C2, 0xE187, 0x91C3, 0xE188, 0x91C4, 0xE189, 0x91C5, 0xE18A, 0x91C6, + 0xE18B, 0x91C8, 0xE18C, 0x91CB, 0xE18D, 0x91D0, 0xE18E, 0x91D2, 0xE18F, 0x91D3, 0xE190, 0x91D4, 0xE191, 0x91D5, 0xE192, 0x91D6, + 0xE193, 0x91D7, 0xE194, 0x91D8, 0xE195, 0x91D9, 0xE196, 0x91DA, 0xE197, 0x91DB, 0xE198, 0x91DD, 0xE199, 0x91DE, 0xE19A, 0x91DF, + 0xE19B, 0x91E0, 0xE19C, 0x91E1, 0xE19D, 0x91E2, 0xE19E, 0x91E3, 0xE19F, 0x91E4, 0xE1A0, 0x91E5, 0xE1A1, 0x5E37, 0xE1A2, 0x5E44, + 0xE1A3, 0x5E54, 0xE1A4, 0x5E5B, 0xE1A5, 0x5E5E, 0xE1A6, 0x5E61, 0xE1A7, 0x5C8C, 0xE1A8, 0x5C7A, 0xE1A9, 0x5C8D, 0xE1AA, 0x5C90, + 0xE1AB, 0x5C96, 0xE1AC, 0x5C88, 0xE1AD, 0x5C98, 0xE1AE, 0x5C99, 0xE1AF, 0x5C91, 0xE1B0, 0x5C9A, 0xE1B1, 0x5C9C, 0xE1B2, 0x5CB5, + 0xE1B3, 0x5CA2, 0xE1B4, 0x5CBD, 0xE1B5, 0x5CAC, 0xE1B6, 0x5CAB, 0xE1B7, 0x5CB1, 0xE1B8, 0x5CA3, 0xE1B9, 0x5CC1, 0xE1BA, 0x5CB7, + 0xE1BB, 0x5CC4, 0xE1BC, 0x5CD2, 0xE1BD, 0x5CE4, 0xE1BE, 0x5CCB, 0xE1BF, 0x5CE5, 0xE1C0, 0x5D02, 0xE1C1, 0x5D03, 0xE1C2, 0x5D27, + 0xE1C3, 0x5D26, 0xE1C4, 0x5D2E, 0xE1C5, 0x5D24, 0xE1C6, 0x5D1E, 0xE1C7, 0x5D06, 0xE1C8, 0x5D1B, 0xE1C9, 0x5D58, 0xE1CA, 0x5D3E, + 0xE1CB, 0x5D34, 0xE1CC, 0x5D3D, 0xE1CD, 0x5D6C, 0xE1CE, 0x5D5B, 0xE1CF, 0x5D6F, 0xE1D0, 0x5D5D, 0xE1D1, 0x5D6B, 0xE1D2, 0x5D4B, + 0xE1D3, 0x5D4A, 0xE1D4, 0x5D69, 0xE1D5, 0x5D74, 0xE1D6, 0x5D82, 0xE1D7, 0x5D99, 0xE1D8, 0x5D9D, 0xE1D9, 0x8C73, 0xE1DA, 0x5DB7, + 0xE1DB, 0x5DC5, 0xE1DC, 0x5F73, 0xE1DD, 0x5F77, 0xE1DE, 0x5F82, 0xE1DF, 0x5F87, 0xE1E0, 0x5F89, 0xE1E1, 0x5F8C, 0xE1E2, 0x5F95, + 0xE1E3, 0x5F99, 0xE1E4, 0x5F9C, 0xE1E5, 0x5FA8, 0xE1E6, 0x5FAD, 0xE1E7, 0x5FB5, 0xE1E8, 0x5FBC, 0xE1E9, 0x8862, 0xE1EA, 0x5F61, + 0xE1EB, 0x72AD, 0xE1EC, 0x72B0, 0xE1ED, 0x72B4, 0xE1EE, 0x72B7, 0xE1EF, 0x72B8, 0xE1F0, 0x72C3, 0xE1F1, 0x72C1, 0xE1F2, 0x72CE, + 0xE1F3, 0x72CD, 0xE1F4, 0x72D2, 0xE1F5, 0x72E8, 0xE1F6, 0x72EF, 0xE1F7, 0x72E9, 0xE1F8, 0x72F2, 0xE1F9, 0x72F4, 0xE1FA, 0x72F7, + 0xE1FB, 0x7301, 0xE1FC, 0x72F3, 0xE1FD, 0x7303, 0xE1FE, 0x72FA, 0xE240, 0x91E6, 0xE241, 0x91E7, 0xE242, 0x91E8, 0xE243, 0x91E9, + 0xE244, 0x91EA, 0xE245, 0x91EB, 0xE246, 0x91EC, 0xE247, 0x91ED, 0xE248, 0x91EE, 0xE249, 0x91EF, 0xE24A, 0x91F0, 0xE24B, 0x91F1, + 0xE24C, 0x91F2, 0xE24D, 0x91F3, 0xE24E, 0x91F4, 0xE24F, 0x91F5, 0xE250, 0x91F6, 0xE251, 0x91F7, 0xE252, 0x91F8, 0xE253, 0x91F9, + 0xE254, 0x91FA, 0xE255, 0x91FB, 0xE256, 0x91FC, 0xE257, 0x91FD, 0xE258, 0x91FE, 0xE259, 0x91FF, 0xE25A, 0x9200, 0xE25B, 0x9201, + 0xE25C, 0x9202, 0xE25D, 0x9203, 0xE25E, 0x9204, 0xE25F, 0x9205, 0xE260, 0x9206, 0xE261, 0x9207, 0xE262, 0x9208, 0xE263, 0x9209, + 0xE264, 0x920A, 0xE265, 0x920B, 0xE266, 0x920C, 0xE267, 0x920D, 0xE268, 0x920E, 0xE269, 0x920F, 0xE26A, 0x9210, 0xE26B, 0x9211, + 0xE26C, 0x9212, 0xE26D, 0x9213, 0xE26E, 0x9214, 0xE26F, 0x9215, 0xE270, 0x9216, 0xE271, 0x9217, 0xE272, 0x9218, 0xE273, 0x9219, + 0xE274, 0x921A, 0xE275, 0x921B, 0xE276, 0x921C, 0xE277, 0x921D, 0xE278, 0x921E, 0xE279, 0x921F, 0xE27A, 0x9220, 0xE27B, 0x9221, + 0xE27C, 0x9222, 0xE27D, 0x9223, 0xE27E, 0x9224, 0xE280, 0x9225, 0xE281, 0x9226, 0xE282, 0x9227, 0xE283, 0x9228, 0xE284, 0x9229, + 0xE285, 0x922A, 0xE286, 0x922B, 0xE287, 0x922C, 0xE288, 0x922D, 0xE289, 0x922E, 0xE28A, 0x922F, 0xE28B, 0x9230, 0xE28C, 0x9231, + 0xE28D, 0x9232, 0xE28E, 0x9233, 0xE28F, 0x9234, 0xE290, 0x9235, 0xE291, 0x9236, 0xE292, 0x9237, 0xE293, 0x9238, 0xE294, 0x9239, + 0xE295, 0x923A, 0xE296, 0x923B, 0xE297, 0x923C, 0xE298, 0x923D, 0xE299, 0x923E, 0xE29A, 0x923F, 0xE29B, 0x9240, 0xE29C, 0x9241, + 0xE29D, 0x9242, 0xE29E, 0x9243, 0xE29F, 0x9244, 0xE2A0, 0x9245, 0xE2A1, 0x72FB, 0xE2A2, 0x7317, 0xE2A3, 0x7313, 0xE2A4, 0x7321, + 0xE2A5, 0x730A, 0xE2A6, 0x731E, 0xE2A7, 0x731D, 0xE2A8, 0x7315, 0xE2A9, 0x7322, 0xE2AA, 0x7339, 0xE2AB, 0x7325, 0xE2AC, 0x732C, + 0xE2AD, 0x7338, 0xE2AE, 0x7331, 0xE2AF, 0x7350, 0xE2B0, 0x734D, 0xE2B1, 0x7357, 0xE2B2, 0x7360, 0xE2B3, 0x736C, 0xE2B4, 0x736F, + 0xE2B5, 0x737E, 0xE2B6, 0x821B, 0xE2B7, 0x5925, 0xE2B8, 0x98E7, 0xE2B9, 0x5924, 0xE2BA, 0x5902, 0xE2BB, 0x9963, 0xE2BC, 0x9967, + 0xE2BD, 0x9968, 0xE2BE, 0x9969, 0xE2BF, 0x996A, 0xE2C0, 0x996B, 0xE2C1, 0x996C, 0xE2C2, 0x9974, 0xE2C3, 0x9977, 0xE2C4, 0x997D, + 0xE2C5, 0x9980, 0xE2C6, 0x9984, 0xE2C7, 0x9987, 0xE2C8, 0x998A, 0xE2C9, 0x998D, 0xE2CA, 0x9990, 0xE2CB, 0x9991, 0xE2CC, 0x9993, + 0xE2CD, 0x9994, 0xE2CE, 0x9995, 0xE2CF, 0x5E80, 0xE2D0, 0x5E91, 0xE2D1, 0x5E8B, 0xE2D2, 0x5E96, 0xE2D3, 0x5EA5, 0xE2D4, 0x5EA0, + 0xE2D5, 0x5EB9, 0xE2D6, 0x5EB5, 0xE2D7, 0x5EBE, 0xE2D8, 0x5EB3, 0xE2D9, 0x8D53, 0xE2DA, 0x5ED2, 0xE2DB, 0x5ED1, 0xE2DC, 0x5EDB, + 0xE2DD, 0x5EE8, 0xE2DE, 0x5EEA, 0xE2DF, 0x81BA, 0xE2E0, 0x5FC4, 0xE2E1, 0x5FC9, 0xE2E2, 0x5FD6, 0xE2E3, 0x5FCF, 0xE2E4, 0x6003, + 0xE2E5, 0x5FEE, 0xE2E6, 0x6004, 0xE2E7, 0x5FE1, 0xE2E8, 0x5FE4, 0xE2E9, 0x5FFE, 0xE2EA, 0x6005, 0xE2EB, 0x6006, 0xE2EC, 0x5FEA, + 0xE2ED, 0x5FED, 0xE2EE, 0x5FF8, 0xE2EF, 0x6019, 0xE2F0, 0x6035, 0xE2F1, 0x6026, 0xE2F2, 0x601B, 0xE2F3, 0x600F, 0xE2F4, 0x600D, + 0xE2F5, 0x6029, 0xE2F6, 0x602B, 0xE2F7, 0x600A, 0xE2F8, 0x603F, 0xE2F9, 0x6021, 0xE2FA, 0x6078, 0xE2FB, 0x6079, 0xE2FC, 0x607B, + 0xE2FD, 0x607A, 0xE2FE, 0x6042, 0xE340, 0x9246, 0xE341, 0x9247, 0xE342, 0x9248, 0xE343, 0x9249, 0xE344, 0x924A, 0xE345, 0x924B, + 0xE346, 0x924C, 0xE347, 0x924D, 0xE348, 0x924E, 0xE349, 0x924F, 0xE34A, 0x9250, 0xE34B, 0x9251, 0xE34C, 0x9252, 0xE34D, 0x9253, + 0xE34E, 0x9254, 0xE34F, 0x9255, 0xE350, 0x9256, 0xE351, 0x9257, 0xE352, 0x9258, 0xE353, 0x9259, 0xE354, 0x925A, 0xE355, 0x925B, + 0xE356, 0x925C, 0xE357, 0x925D, 0xE358, 0x925E, 0xE359, 0x925F, 0xE35A, 0x9260, 0xE35B, 0x9261, 0xE35C, 0x9262, 0xE35D, 0x9263, + 0xE35E, 0x9264, 0xE35F, 0x9265, 0xE360, 0x9266, 0xE361, 0x9267, 0xE362, 0x9268, 0xE363, 0x9269, 0xE364, 0x926A, 0xE365, 0x926B, + 0xE366, 0x926C, 0xE367, 0x926D, 0xE368, 0x926E, 0xE369, 0x926F, 0xE36A, 0x9270, 0xE36B, 0x9271, 0xE36C, 0x9272, 0xE36D, 0x9273, + 0xE36E, 0x9275, 0xE36F, 0x9276, 0xE370, 0x9277, 0xE371, 0x9278, 0xE372, 0x9279, 0xE373, 0x927A, 0xE374, 0x927B, 0xE375, 0x927C, + 0xE376, 0x927D, 0xE377, 0x927E, 0xE378, 0x927F, 0xE379, 0x9280, 0xE37A, 0x9281, 0xE37B, 0x9282, 0xE37C, 0x9283, 0xE37D, 0x9284, + 0xE37E, 0x9285, 0xE380, 0x9286, 0xE381, 0x9287, 0xE382, 0x9288, 0xE383, 0x9289, 0xE384, 0x928A, 0xE385, 0x928B, 0xE386, 0x928C, + 0xE387, 0x928D, 0xE388, 0x928F, 0xE389, 0x9290, 0xE38A, 0x9291, 0xE38B, 0x9292, 0xE38C, 0x9293, 0xE38D, 0x9294, 0xE38E, 0x9295, + 0xE38F, 0x9296, 0xE390, 0x9297, 0xE391, 0x9298, 0xE392, 0x9299, 0xE393, 0x929A, 0xE394, 0x929B, 0xE395, 0x929C, 0xE396, 0x929D, + 0xE397, 0x929E, 0xE398, 0x929F, 0xE399, 0x92A0, 0xE39A, 0x92A1, 0xE39B, 0x92A2, 0xE39C, 0x92A3, 0xE39D, 0x92A4, 0xE39E, 0x92A5, + 0xE39F, 0x92A6, 0xE3A0, 0x92A7, 0xE3A1, 0x606A, 0xE3A2, 0x607D, 0xE3A3, 0x6096, 0xE3A4, 0x609A, 0xE3A5, 0x60AD, 0xE3A6, 0x609D, + 0xE3A7, 0x6083, 0xE3A8, 0x6092, 0xE3A9, 0x608C, 0xE3AA, 0x609B, 0xE3AB, 0x60EC, 0xE3AC, 0x60BB, 0xE3AD, 0x60B1, 0xE3AE, 0x60DD, + 0xE3AF, 0x60D8, 0xE3B0, 0x60C6, 0xE3B1, 0x60DA, 0xE3B2, 0x60B4, 0xE3B3, 0x6120, 0xE3B4, 0x6126, 0xE3B5, 0x6115, 0xE3B6, 0x6123, + 0xE3B7, 0x60F4, 0xE3B8, 0x6100, 0xE3B9, 0x610E, 0xE3BA, 0x612B, 0xE3BB, 0x614A, 0xE3BC, 0x6175, 0xE3BD, 0x61AC, 0xE3BE, 0x6194, + 0xE3BF, 0x61A7, 0xE3C0, 0x61B7, 0xE3C1, 0x61D4, 0xE3C2, 0x61F5, 0xE3C3, 0x5FDD, 0xE3C4, 0x96B3, 0xE3C5, 0x95E9, 0xE3C6, 0x95EB, + 0xE3C7, 0x95F1, 0xE3C8, 0x95F3, 0xE3C9, 0x95F5, 0xE3CA, 0x95F6, 0xE3CB, 0x95FC, 0xE3CC, 0x95FE, 0xE3CD, 0x9603, 0xE3CE, 0x9604, + 0xE3CF, 0x9606, 0xE3D0, 0x9608, 0xE3D1, 0x960A, 0xE3D2, 0x960B, 0xE3D3, 0x960C, 0xE3D4, 0x960D, 0xE3D5, 0x960F, 0xE3D6, 0x9612, + 0xE3D7, 0x9615, 0xE3D8, 0x9616, 0xE3D9, 0x9617, 0xE3DA, 0x9619, 0xE3DB, 0x961A, 0xE3DC, 0x4E2C, 0xE3DD, 0x723F, 0xE3DE, 0x6215, + 0xE3DF, 0x6C35, 0xE3E0, 0x6C54, 0xE3E1, 0x6C5C, 0xE3E2, 0x6C4A, 0xE3E3, 0x6CA3, 0xE3E4, 0x6C85, 0xE3E5, 0x6C90, 0xE3E6, 0x6C94, + 0xE3E7, 0x6C8C, 0xE3E8, 0x6C68, 0xE3E9, 0x6C69, 0xE3EA, 0x6C74, 0xE3EB, 0x6C76, 0xE3EC, 0x6C86, 0xE3ED, 0x6CA9, 0xE3EE, 0x6CD0, + 0xE3EF, 0x6CD4, 0xE3F0, 0x6CAD, 0xE3F1, 0x6CF7, 0xE3F2, 0x6CF8, 0xE3F3, 0x6CF1, 0xE3F4, 0x6CD7, 0xE3F5, 0x6CB2, 0xE3F6, 0x6CE0, + 0xE3F7, 0x6CD6, 0xE3F8, 0x6CFA, 0xE3F9, 0x6CEB, 0xE3FA, 0x6CEE, 0xE3FB, 0x6CB1, 0xE3FC, 0x6CD3, 0xE3FD, 0x6CEF, 0xE3FE, 0x6CFE, + 0xE440, 0x92A8, 0xE441, 0x92A9, 0xE442, 0x92AA, 0xE443, 0x92AB, 0xE444, 0x92AC, 0xE445, 0x92AD, 0xE446, 0x92AF, 0xE447, 0x92B0, + 0xE448, 0x92B1, 0xE449, 0x92B2, 0xE44A, 0x92B3, 0xE44B, 0x92B4, 0xE44C, 0x92B5, 0xE44D, 0x92B6, 0xE44E, 0x92B7, 0xE44F, 0x92B8, + 0xE450, 0x92B9, 0xE451, 0x92BA, 0xE452, 0x92BB, 0xE453, 0x92BC, 0xE454, 0x92BD, 0xE455, 0x92BE, 0xE456, 0x92BF, 0xE457, 0x92C0, + 0xE458, 0x92C1, 0xE459, 0x92C2, 0xE45A, 0x92C3, 0xE45B, 0x92C4, 0xE45C, 0x92C5, 0xE45D, 0x92C6, 0xE45E, 0x92C7, 0xE45F, 0x92C9, + 0xE460, 0x92CA, 0xE461, 0x92CB, 0xE462, 0x92CC, 0xE463, 0x92CD, 0xE464, 0x92CE, 0xE465, 0x92CF, 0xE466, 0x92D0, 0xE467, 0x92D1, + 0xE468, 0x92D2, 0xE469, 0x92D3, 0xE46A, 0x92D4, 0xE46B, 0x92D5, 0xE46C, 0x92D6, 0xE46D, 0x92D7, 0xE46E, 0x92D8, 0xE46F, 0x92D9, + 0xE470, 0x92DA, 0xE471, 0x92DB, 0xE472, 0x92DC, 0xE473, 0x92DD, 0xE474, 0x92DE, 0xE475, 0x92DF, 0xE476, 0x92E0, 0xE477, 0x92E1, + 0xE478, 0x92E2, 0xE479, 0x92E3, 0xE47A, 0x92E4, 0xE47B, 0x92E5, 0xE47C, 0x92E6, 0xE47D, 0x92E7, 0xE47E, 0x92E8, 0xE480, 0x92E9, + 0xE481, 0x92EA, 0xE482, 0x92EB, 0xE483, 0x92EC, 0xE484, 0x92ED, 0xE485, 0x92EE, 0xE486, 0x92EF, 0xE487, 0x92F0, 0xE488, 0x92F1, + 0xE489, 0x92F2, 0xE48A, 0x92F3, 0xE48B, 0x92F4, 0xE48C, 0x92F5, 0xE48D, 0x92F6, 0xE48E, 0x92F7, 0xE48F, 0x92F8, 0xE490, 0x92F9, + 0xE491, 0x92FA, 0xE492, 0x92FB, 0xE493, 0x92FC, 0xE494, 0x92FD, 0xE495, 0x92FE, 0xE496, 0x92FF, 0xE497, 0x9300, 0xE498, 0x9301, + 0xE499, 0x9302, 0xE49A, 0x9303, 0xE49B, 0x9304, 0xE49C, 0x9305, 0xE49D, 0x9306, 0xE49E, 0x9307, 0xE49F, 0x9308, 0xE4A0, 0x9309, + 0xE4A1, 0x6D39, 0xE4A2, 0x6D27, 0xE4A3, 0x6D0C, 0xE4A4, 0x6D43, 0xE4A5, 0x6D48, 0xE4A6, 0x6D07, 0xE4A7, 0x6D04, 0xE4A8, 0x6D19, + 0xE4A9, 0x6D0E, 0xE4AA, 0x6D2B, 0xE4AB, 0x6D4D, 0xE4AC, 0x6D2E, 0xE4AD, 0x6D35, 0xE4AE, 0x6D1A, 0xE4AF, 0x6D4F, 0xE4B0, 0x6D52, + 0xE4B1, 0x6D54, 0xE4B2, 0x6D33, 0xE4B3, 0x6D91, 0xE4B4, 0x6D6F, 0xE4B5, 0x6D9E, 0xE4B6, 0x6DA0, 0xE4B7, 0x6D5E, 0xE4B8, 0x6D93, + 0xE4B9, 0x6D94, 0xE4BA, 0x6D5C, 0xE4BB, 0x6D60, 0xE4BC, 0x6D7C, 0xE4BD, 0x6D63, 0xE4BE, 0x6E1A, 0xE4BF, 0x6DC7, 0xE4C0, 0x6DC5, + 0xE4C1, 0x6DDE, 0xE4C2, 0x6E0E, 0xE4C3, 0x6DBF, 0xE4C4, 0x6DE0, 0xE4C5, 0x6E11, 0xE4C6, 0x6DE6, 0xE4C7, 0x6DDD, 0xE4C8, 0x6DD9, + 0xE4C9, 0x6E16, 0xE4CA, 0x6DAB, 0xE4CB, 0x6E0C, 0xE4CC, 0x6DAE, 0xE4CD, 0x6E2B, 0xE4CE, 0x6E6E, 0xE4CF, 0x6E4E, 0xE4D0, 0x6E6B, + 0xE4D1, 0x6EB2, 0xE4D2, 0x6E5F, 0xE4D3, 0x6E86, 0xE4D4, 0x6E53, 0xE4D5, 0x6E54, 0xE4D6, 0x6E32, 0xE4D7, 0x6E25, 0xE4D8, 0x6E44, + 0xE4D9, 0x6EDF, 0xE4DA, 0x6EB1, 0xE4DB, 0x6E98, 0xE4DC, 0x6EE0, 0xE4DD, 0x6F2D, 0xE4DE, 0x6EE2, 0xE4DF, 0x6EA5, 0xE4E0, 0x6EA7, + 0xE4E1, 0x6EBD, 0xE4E2, 0x6EBB, 0xE4E3, 0x6EB7, 0xE4E4, 0x6ED7, 0xE4E5, 0x6EB4, 0xE4E6, 0x6ECF, 0xE4E7, 0x6E8F, 0xE4E8, 0x6EC2, + 0xE4E9, 0x6E9F, 0xE4EA, 0x6F62, 0xE4EB, 0x6F46, 0xE4EC, 0x6F47, 0xE4ED, 0x6F24, 0xE4EE, 0x6F15, 0xE4EF, 0x6EF9, 0xE4F0, 0x6F2F, + 0xE4F1, 0x6F36, 0xE4F2, 0x6F4B, 0xE4F3, 0x6F74, 0xE4F4, 0x6F2A, 0xE4F5, 0x6F09, 0xE4F6, 0x6F29, 0xE4F7, 0x6F89, 0xE4F8, 0x6F8D, + 0xE4F9, 0x6F8C, 0xE4FA, 0x6F78, 0xE4FB, 0x6F72, 0xE4FC, 0x6F7C, 0xE4FD, 0x6F7A, 0xE4FE, 0x6FD1, 0xE540, 0x930A, 0xE541, 0x930B, + 0xE542, 0x930C, 0xE543, 0x930D, 0xE544, 0x930E, 0xE545, 0x930F, 0xE546, 0x9310, 0xE547, 0x9311, 0xE548, 0x9312, 0xE549, 0x9313, + 0xE54A, 0x9314, 0xE54B, 0x9315, 0xE54C, 0x9316, 0xE54D, 0x9317, 0xE54E, 0x9318, 0xE54F, 0x9319, 0xE550, 0x931A, 0xE551, 0x931B, + 0xE552, 0x931C, 0xE553, 0x931D, 0xE554, 0x931E, 0xE555, 0x931F, 0xE556, 0x9320, 0xE557, 0x9321, 0xE558, 0x9322, 0xE559, 0x9323, + 0xE55A, 0x9324, 0xE55B, 0x9325, 0xE55C, 0x9326, 0xE55D, 0x9327, 0xE55E, 0x9328, 0xE55F, 0x9329, 0xE560, 0x932A, 0xE561, 0x932B, + 0xE562, 0x932C, 0xE563, 0x932D, 0xE564, 0x932E, 0xE565, 0x932F, 0xE566, 0x9330, 0xE567, 0x9331, 0xE568, 0x9332, 0xE569, 0x9333, + 0xE56A, 0x9334, 0xE56B, 0x9335, 0xE56C, 0x9336, 0xE56D, 0x9337, 0xE56E, 0x9338, 0xE56F, 0x9339, 0xE570, 0x933A, 0xE571, 0x933B, + 0xE572, 0x933C, 0xE573, 0x933D, 0xE574, 0x933F, 0xE575, 0x9340, 0xE576, 0x9341, 0xE577, 0x9342, 0xE578, 0x9343, 0xE579, 0x9344, + 0xE57A, 0x9345, 0xE57B, 0x9346, 0xE57C, 0x9347, 0xE57D, 0x9348, 0xE57E, 0x9349, 0xE580, 0x934A, 0xE581, 0x934B, 0xE582, 0x934C, + 0xE583, 0x934D, 0xE584, 0x934E, 0xE585, 0x934F, 0xE586, 0x9350, 0xE587, 0x9351, 0xE588, 0x9352, 0xE589, 0x9353, 0xE58A, 0x9354, + 0xE58B, 0x9355, 0xE58C, 0x9356, 0xE58D, 0x9357, 0xE58E, 0x9358, 0xE58F, 0x9359, 0xE590, 0x935A, 0xE591, 0x935B, 0xE592, 0x935C, + 0xE593, 0x935D, 0xE594, 0x935E, 0xE595, 0x935F, 0xE596, 0x9360, 0xE597, 0x9361, 0xE598, 0x9362, 0xE599, 0x9363, 0xE59A, 0x9364, + 0xE59B, 0x9365, 0xE59C, 0x9366, 0xE59D, 0x9367, 0xE59E, 0x9368, 0xE59F, 0x9369, 0xE5A0, 0x936B, 0xE5A1, 0x6FC9, 0xE5A2, 0x6FA7, + 0xE5A3, 0x6FB9, 0xE5A4, 0x6FB6, 0xE5A5, 0x6FC2, 0xE5A6, 0x6FE1, 0xE5A7, 0x6FEE, 0xE5A8, 0x6FDE, 0xE5A9, 0x6FE0, 0xE5AA, 0x6FEF, + 0xE5AB, 0x701A, 0xE5AC, 0x7023, 0xE5AD, 0x701B, 0xE5AE, 0x7039, 0xE5AF, 0x7035, 0xE5B0, 0x704F, 0xE5B1, 0x705E, 0xE5B2, 0x5B80, + 0xE5B3, 0x5B84, 0xE5B4, 0x5B95, 0xE5B5, 0x5B93, 0xE5B6, 0x5BA5, 0xE5B7, 0x5BB8, 0xE5B8, 0x752F, 0xE5B9, 0x9A9E, 0xE5BA, 0x6434, + 0xE5BB, 0x5BE4, 0xE5BC, 0x5BEE, 0xE5BD, 0x8930, 0xE5BE, 0x5BF0, 0xE5BF, 0x8E47, 0xE5C0, 0x8B07, 0xE5C1, 0x8FB6, 0xE5C2, 0x8FD3, + 0xE5C3, 0x8FD5, 0xE5C4, 0x8FE5, 0xE5C5, 0x8FEE, 0xE5C6, 0x8FE4, 0xE5C7, 0x8FE9, 0xE5C8, 0x8FE6, 0xE5C9, 0x8FF3, 0xE5CA, 0x8FE8, + 0xE5CB, 0x9005, 0xE5CC, 0x9004, 0xE5CD, 0x900B, 0xE5CE, 0x9026, 0xE5CF, 0x9011, 0xE5D0, 0x900D, 0xE5D1, 0x9016, 0xE5D2, 0x9021, + 0xE5D3, 0x9035, 0xE5D4, 0x9036, 0xE5D5, 0x902D, 0xE5D6, 0x902F, 0xE5D7, 0x9044, 0xE5D8, 0x9051, 0xE5D9, 0x9052, 0xE5DA, 0x9050, + 0xE5DB, 0x9068, 0xE5DC, 0x9058, 0xE5DD, 0x9062, 0xE5DE, 0x905B, 0xE5DF, 0x66B9, 0xE5E0, 0x9074, 0xE5E1, 0x907D, 0xE5E2, 0x9082, + 0xE5E3, 0x9088, 0xE5E4, 0x9083, 0xE5E5, 0x908B, 0xE5E6, 0x5F50, 0xE5E7, 0x5F57, 0xE5E8, 0x5F56, 0xE5E9, 0x5F58, 0xE5EA, 0x5C3B, + 0xE5EB, 0x54AB, 0xE5EC, 0x5C50, 0xE5ED, 0x5C59, 0xE5EE, 0x5B71, 0xE5EF, 0x5C63, 0xE5F0, 0x5C66, 0xE5F1, 0x7FBC, 0xE5F2, 0x5F2A, + 0xE5F3, 0x5F29, 0xE5F4, 0x5F2D, 0xE5F5, 0x8274, 0xE5F6, 0x5F3C, 0xE5F7, 0x9B3B, 0xE5F8, 0x5C6E, 0xE5F9, 0x5981, 0xE5FA, 0x5983, + 0xE5FB, 0x598D, 0xE5FC, 0x59A9, 0xE5FD, 0x59AA, 0xE5FE, 0x59A3, 0xE640, 0x936C, 0xE641, 0x936D, 0xE642, 0x936E, 0xE643, 0x936F, + 0xE644, 0x9370, 0xE645, 0x9371, 0xE646, 0x9372, 0xE647, 0x9373, 0xE648, 0x9374, 0xE649, 0x9375, 0xE64A, 0x9376, 0xE64B, 0x9377, + 0xE64C, 0x9378, 0xE64D, 0x9379, 0xE64E, 0x937A, 0xE64F, 0x937B, 0xE650, 0x937C, 0xE651, 0x937D, 0xE652, 0x937E, 0xE653, 0x937F, + 0xE654, 0x9380, 0xE655, 0x9381, 0xE656, 0x9382, 0xE657, 0x9383, 0xE658, 0x9384, 0xE659, 0x9385, 0xE65A, 0x9386, 0xE65B, 0x9387, + 0xE65C, 0x9388, 0xE65D, 0x9389, 0xE65E, 0x938A, 0xE65F, 0x938B, 0xE660, 0x938C, 0xE661, 0x938D, 0xE662, 0x938E, 0xE663, 0x9390, + 0xE664, 0x9391, 0xE665, 0x9392, 0xE666, 0x9393, 0xE667, 0x9394, 0xE668, 0x9395, 0xE669, 0x9396, 0xE66A, 0x9397, 0xE66B, 0x9398, + 0xE66C, 0x9399, 0xE66D, 0x939A, 0xE66E, 0x939B, 0xE66F, 0x939C, 0xE670, 0x939D, 0xE671, 0x939E, 0xE672, 0x939F, 0xE673, 0x93A0, + 0xE674, 0x93A1, 0xE675, 0x93A2, 0xE676, 0x93A3, 0xE677, 0x93A4, 0xE678, 0x93A5, 0xE679, 0x93A6, 0xE67A, 0x93A7, 0xE67B, 0x93A8, + 0xE67C, 0x93A9, 0xE67D, 0x93AA, 0xE67E, 0x93AB, 0xE680, 0x93AC, 0xE681, 0x93AD, 0xE682, 0x93AE, 0xE683, 0x93AF, 0xE684, 0x93B0, + 0xE685, 0x93B1, 0xE686, 0x93B2, 0xE687, 0x93B3, 0xE688, 0x93B4, 0xE689, 0x93B5, 0xE68A, 0x93B6, 0xE68B, 0x93B7, 0xE68C, 0x93B8, + 0xE68D, 0x93B9, 0xE68E, 0x93BA, 0xE68F, 0x93BB, 0xE690, 0x93BC, 0xE691, 0x93BD, 0xE692, 0x93BE, 0xE693, 0x93BF, 0xE694, 0x93C0, + 0xE695, 0x93C1, 0xE696, 0x93C2, 0xE697, 0x93C3, 0xE698, 0x93C4, 0xE699, 0x93C5, 0xE69A, 0x93C6, 0xE69B, 0x93C7, 0xE69C, 0x93C8, + 0xE69D, 0x93C9, 0xE69E, 0x93CB, 0xE69F, 0x93CC, 0xE6A0, 0x93CD, 0xE6A1, 0x5997, 0xE6A2, 0x59CA, 0xE6A3, 0x59AB, 0xE6A4, 0x599E, + 0xE6A5, 0x59A4, 0xE6A6, 0x59D2, 0xE6A7, 0x59B2, 0xE6A8, 0x59AF, 0xE6A9, 0x59D7, 0xE6AA, 0x59BE, 0xE6AB, 0x5A05, 0xE6AC, 0x5A06, + 0xE6AD, 0x59DD, 0xE6AE, 0x5A08, 0xE6AF, 0x59E3, 0xE6B0, 0x59D8, 0xE6B1, 0x59F9, 0xE6B2, 0x5A0C, 0xE6B3, 0x5A09, 0xE6B4, 0x5A32, + 0xE6B5, 0x5A34, 0xE6B6, 0x5A11, 0xE6B7, 0x5A23, 0xE6B8, 0x5A13, 0xE6B9, 0x5A40, 0xE6BA, 0x5A67, 0xE6BB, 0x5A4A, 0xE6BC, 0x5A55, + 0xE6BD, 0x5A3C, 0xE6BE, 0x5A62, 0xE6BF, 0x5A75, 0xE6C0, 0x80EC, 0xE6C1, 0x5AAA, 0xE6C2, 0x5A9B, 0xE6C3, 0x5A77, 0xE6C4, 0x5A7A, + 0xE6C5, 0x5ABE, 0xE6C6, 0x5AEB, 0xE6C7, 0x5AB2, 0xE6C8, 0x5AD2, 0xE6C9, 0x5AD4, 0xE6CA, 0x5AB8, 0xE6CB, 0x5AE0, 0xE6CC, 0x5AE3, + 0xE6CD, 0x5AF1, 0xE6CE, 0x5AD6, 0xE6CF, 0x5AE6, 0xE6D0, 0x5AD8, 0xE6D1, 0x5ADC, 0xE6D2, 0x5B09, 0xE6D3, 0x5B17, 0xE6D4, 0x5B16, + 0xE6D5, 0x5B32, 0xE6D6, 0x5B37, 0xE6D7, 0x5B40, 0xE6D8, 0x5C15, 0xE6D9, 0x5C1C, 0xE6DA, 0x5B5A, 0xE6DB, 0x5B65, 0xE6DC, 0x5B73, + 0xE6DD, 0x5B51, 0xE6DE, 0x5B53, 0xE6DF, 0x5B62, 0xE6E0, 0x9A75, 0xE6E1, 0x9A77, 0xE6E2, 0x9A78, 0xE6E3, 0x9A7A, 0xE6E4, 0x9A7F, + 0xE6E5, 0x9A7D, 0xE6E6, 0x9A80, 0xE6E7, 0x9A81, 0xE6E8, 0x9A85, 0xE6E9, 0x9A88, 0xE6EA, 0x9A8A, 0xE6EB, 0x9A90, 0xE6EC, 0x9A92, + 0xE6ED, 0x9A93, 0xE6EE, 0x9A96, 0xE6EF, 0x9A98, 0xE6F0, 0x9A9B, 0xE6F1, 0x9A9C, 0xE6F2, 0x9A9D, 0xE6F3, 0x9A9F, 0xE6F4, 0x9AA0, + 0xE6F5, 0x9AA2, 0xE6F6, 0x9AA3, 0xE6F7, 0x9AA5, 0xE6F8, 0x9AA7, 0xE6F9, 0x7E9F, 0xE6FA, 0x7EA1, 0xE6FB, 0x7EA3, 0xE6FC, 0x7EA5, + 0xE6FD, 0x7EA8, 0xE6FE, 0x7EA9, 0xE740, 0x93CE, 0xE741, 0x93CF, 0xE742, 0x93D0, 0xE743, 0x93D1, 0xE744, 0x93D2, 0xE745, 0x93D3, + 0xE746, 0x93D4, 0xE747, 0x93D5, 0xE748, 0x93D7, 0xE749, 0x93D8, 0xE74A, 0x93D9, 0xE74B, 0x93DA, 0xE74C, 0x93DB, 0xE74D, 0x93DC, + 0xE74E, 0x93DD, 0xE74F, 0x93DE, 0xE750, 0x93DF, 0xE751, 0x93E0, 0xE752, 0x93E1, 0xE753, 0x93E2, 0xE754, 0x93E3, 0xE755, 0x93E4, + 0xE756, 0x93E5, 0xE757, 0x93E6, 0xE758, 0x93E7, 0xE759, 0x93E8, 0xE75A, 0x93E9, 0xE75B, 0x93EA, 0xE75C, 0x93EB, 0xE75D, 0x93EC, + 0xE75E, 0x93ED, 0xE75F, 0x93EE, 0xE760, 0x93EF, 0xE761, 0x93F0, 0xE762, 0x93F1, 0xE763, 0x93F2, 0xE764, 0x93F3, 0xE765, 0x93F4, + 0xE766, 0x93F5, 0xE767, 0x93F6, 0xE768, 0x93F7, 0xE769, 0x93F8, 0xE76A, 0x93F9, 0xE76B, 0x93FA, 0xE76C, 0x93FB, 0xE76D, 0x93FC, + 0xE76E, 0x93FD, 0xE76F, 0x93FE, 0xE770, 0x93FF, 0xE771, 0x9400, 0xE772, 0x9401, 0xE773, 0x9402, 0xE774, 0x9403, 0xE775, 0x9404, + 0xE776, 0x9405, 0xE777, 0x9406, 0xE778, 0x9407, 0xE779, 0x9408, 0xE77A, 0x9409, 0xE77B, 0x940A, 0xE77C, 0x940B, 0xE77D, 0x940C, + 0xE77E, 0x940D, 0xE780, 0x940E, 0xE781, 0x940F, 0xE782, 0x9410, 0xE783, 0x9411, 0xE784, 0x9412, 0xE785, 0x9413, 0xE786, 0x9414, + 0xE787, 0x9415, 0xE788, 0x9416, 0xE789, 0x9417, 0xE78A, 0x9418, 0xE78B, 0x9419, 0xE78C, 0x941A, 0xE78D, 0x941B, 0xE78E, 0x941C, + 0xE78F, 0x941D, 0xE790, 0x941E, 0xE791, 0x941F, 0xE792, 0x9420, 0xE793, 0x9421, 0xE794, 0x9422, 0xE795, 0x9423, 0xE796, 0x9424, + 0xE797, 0x9425, 0xE798, 0x9426, 0xE799, 0x9427, 0xE79A, 0x9428, 0xE79B, 0x9429, 0xE79C, 0x942A, 0xE79D, 0x942B, 0xE79E, 0x942C, + 0xE79F, 0x942D, 0xE7A0, 0x942E, 0xE7A1, 0x7EAD, 0xE7A2, 0x7EB0, 0xE7A3, 0x7EBE, 0xE7A4, 0x7EC0, 0xE7A5, 0x7EC1, 0xE7A6, 0x7EC2, + 0xE7A7, 0x7EC9, 0xE7A8, 0x7ECB, 0xE7A9, 0x7ECC, 0xE7AA, 0x7ED0, 0xE7AB, 0x7ED4, 0xE7AC, 0x7ED7, 0xE7AD, 0x7EDB, 0xE7AE, 0x7EE0, + 0xE7AF, 0x7EE1, 0xE7B0, 0x7EE8, 0xE7B1, 0x7EEB, 0xE7B2, 0x7EEE, 0xE7B3, 0x7EEF, 0xE7B4, 0x7EF1, 0xE7B5, 0x7EF2, 0xE7B6, 0x7F0D, + 0xE7B7, 0x7EF6, 0xE7B8, 0x7EFA, 0xE7B9, 0x7EFB, 0xE7BA, 0x7EFE, 0xE7BB, 0x7F01, 0xE7BC, 0x7F02, 0xE7BD, 0x7F03, 0xE7BE, 0x7F07, + 0xE7BF, 0x7F08, 0xE7C0, 0x7F0B, 0xE7C1, 0x7F0C, 0xE7C2, 0x7F0F, 0xE7C3, 0x7F11, 0xE7C4, 0x7F12, 0xE7C5, 0x7F17, 0xE7C6, 0x7F19, + 0xE7C7, 0x7F1C, 0xE7C8, 0x7F1B, 0xE7C9, 0x7F1F, 0xE7CA, 0x7F21, 0xE7CB, 0x7F22, 0xE7CC, 0x7F23, 0xE7CD, 0x7F24, 0xE7CE, 0x7F25, + 0xE7CF, 0x7F26, 0xE7D0, 0x7F27, 0xE7D1, 0x7F2A, 0xE7D2, 0x7F2B, 0xE7D3, 0x7F2C, 0xE7D4, 0x7F2D, 0xE7D5, 0x7F2F, 0xE7D6, 0x7F30, + 0xE7D7, 0x7F31, 0xE7D8, 0x7F32, 0xE7D9, 0x7F33, 0xE7DA, 0x7F35, 0xE7DB, 0x5E7A, 0xE7DC, 0x757F, 0xE7DD, 0x5DDB, 0xE7DE, 0x753E, + 0xE7DF, 0x9095, 0xE7E0, 0x738E, 0xE7E1, 0x7391, 0xE7E2, 0x73AE, 0xE7E3, 0x73A2, 0xE7E4, 0x739F, 0xE7E5, 0x73CF, 0xE7E6, 0x73C2, + 0xE7E7, 0x73D1, 0xE7E8, 0x73B7, 0xE7E9, 0x73B3, 0xE7EA, 0x73C0, 0xE7EB, 0x73C9, 0xE7EC, 0x73C8, 0xE7ED, 0x73E5, 0xE7EE, 0x73D9, + 0xE7EF, 0x987C, 0xE7F0, 0x740A, 0xE7F1, 0x73E9, 0xE7F2, 0x73E7, 0xE7F3, 0x73DE, 0xE7F4, 0x73BA, 0xE7F5, 0x73F2, 0xE7F6, 0x740F, + 0xE7F7, 0x742A, 0xE7F8, 0x745B, 0xE7F9, 0x7426, 0xE7FA, 0x7425, 0xE7FB, 0x7428, 0xE7FC, 0x7430, 0xE7FD, 0x742E, 0xE7FE, 0x742C, + 0xE840, 0x942F, 0xE841, 0x9430, 0xE842, 0x9431, 0xE843, 0x9432, 0xE844, 0x9433, 0xE845, 0x9434, 0xE846, 0x9435, 0xE847, 0x9436, + 0xE848, 0x9437, 0xE849, 0x9438, 0xE84A, 0x9439, 0xE84B, 0x943A, 0xE84C, 0x943B, 0xE84D, 0x943C, 0xE84E, 0x943D, 0xE84F, 0x943F, + 0xE850, 0x9440, 0xE851, 0x9441, 0xE852, 0x9442, 0xE853, 0x9443, 0xE854, 0x9444, 0xE855, 0x9445, 0xE856, 0x9446, 0xE857, 0x9447, + 0xE858, 0x9448, 0xE859, 0x9449, 0xE85A, 0x944A, 0xE85B, 0x944B, 0xE85C, 0x944C, 0xE85D, 0x944D, 0xE85E, 0x944E, 0xE85F, 0x944F, + 0xE860, 0x9450, 0xE861, 0x9451, 0xE862, 0x9452, 0xE863, 0x9453, 0xE864, 0x9454, 0xE865, 0x9455, 0xE866, 0x9456, 0xE867, 0x9457, + 0xE868, 0x9458, 0xE869, 0x9459, 0xE86A, 0x945A, 0xE86B, 0x945B, 0xE86C, 0x945C, 0xE86D, 0x945D, 0xE86E, 0x945E, 0xE86F, 0x945F, + 0xE870, 0x9460, 0xE871, 0x9461, 0xE872, 0x9462, 0xE873, 0x9463, 0xE874, 0x9464, 0xE875, 0x9465, 0xE876, 0x9466, 0xE877, 0x9467, + 0xE878, 0x9468, 0xE879, 0x9469, 0xE87A, 0x946A, 0xE87B, 0x946C, 0xE87C, 0x946D, 0xE87D, 0x946E, 0xE87E, 0x946F, 0xE880, 0x9470, + 0xE881, 0x9471, 0xE882, 0x9472, 0xE883, 0x9473, 0xE884, 0x9474, 0xE885, 0x9475, 0xE886, 0x9476, 0xE887, 0x9477, 0xE888, 0x9478, + 0xE889, 0x9479, 0xE88A, 0x947A, 0xE88B, 0x947B, 0xE88C, 0x947C, 0xE88D, 0x947D, 0xE88E, 0x947E, 0xE88F, 0x947F, 0xE890, 0x9480, + 0xE891, 0x9481, 0xE892, 0x9482, 0xE893, 0x9483, 0xE894, 0x9484, 0xE895, 0x9491, 0xE896, 0x9496, 0xE897, 0x9498, 0xE898, 0x94C7, + 0xE899, 0x94CF, 0xE89A, 0x94D3, 0xE89B, 0x94D4, 0xE89C, 0x94DA, 0xE89D, 0x94E6, 0xE89E, 0x94FB, 0xE89F, 0x951C, 0xE8A0, 0x9520, + 0xE8A1, 0x741B, 0xE8A2, 0x741A, 0xE8A3, 0x7441, 0xE8A4, 0x745C, 0xE8A5, 0x7457, 0xE8A6, 0x7455, 0xE8A7, 0x7459, 0xE8A8, 0x7477, + 0xE8A9, 0x746D, 0xE8AA, 0x747E, 0xE8AB, 0x749C, 0xE8AC, 0x748E, 0xE8AD, 0x7480, 0xE8AE, 0x7481, 0xE8AF, 0x7487, 0xE8B0, 0x748B, + 0xE8B1, 0x749E, 0xE8B2, 0x74A8, 0xE8B3, 0x74A9, 0xE8B4, 0x7490, 0xE8B5, 0x74A7, 0xE8B6, 0x74D2, 0xE8B7, 0x74BA, 0xE8B8, 0x97EA, + 0xE8B9, 0x97EB, 0xE8BA, 0x97EC, 0xE8BB, 0x674C, 0xE8BC, 0x6753, 0xE8BD, 0x675E, 0xE8BE, 0x6748, 0xE8BF, 0x6769, 0xE8C0, 0x67A5, + 0xE8C1, 0x6787, 0xE8C2, 0x676A, 0xE8C3, 0x6773, 0xE8C4, 0x6798, 0xE8C5, 0x67A7, 0xE8C6, 0x6775, 0xE8C7, 0x67A8, 0xE8C8, 0x679E, + 0xE8C9, 0x67AD, 0xE8CA, 0x678B, 0xE8CB, 0x6777, 0xE8CC, 0x677C, 0xE8CD, 0x67F0, 0xE8CE, 0x6809, 0xE8CF, 0x67D8, 0xE8D0, 0x680A, + 0xE8D1, 0x67E9, 0xE8D2, 0x67B0, 0xE8D3, 0x680C, 0xE8D4, 0x67D9, 0xE8D5, 0x67B5, 0xE8D6, 0x67DA, 0xE8D7, 0x67B3, 0xE8D8, 0x67DD, + 0xE8D9, 0x6800, 0xE8DA, 0x67C3, 0xE8DB, 0x67B8, 0xE8DC, 0x67E2, 0xE8DD, 0x680E, 0xE8DE, 0x67C1, 0xE8DF, 0x67FD, 0xE8E0, 0x6832, + 0xE8E1, 0x6833, 0xE8E2, 0x6860, 0xE8E3, 0x6861, 0xE8E4, 0x684E, 0xE8E5, 0x6862, 0xE8E6, 0x6844, 0xE8E7, 0x6864, 0xE8E8, 0x6883, + 0xE8E9, 0x681D, 0xE8EA, 0x6855, 0xE8EB, 0x6866, 0xE8EC, 0x6841, 0xE8ED, 0x6867, 0xE8EE, 0x6840, 0xE8EF, 0x683E, 0xE8F0, 0x684A, + 0xE8F1, 0x6849, 0xE8F2, 0x6829, 0xE8F3, 0x68B5, 0xE8F4, 0x688F, 0xE8F5, 0x6874, 0xE8F6, 0x6877, 0xE8F7, 0x6893, 0xE8F8, 0x686B, + 0xE8F9, 0x68C2, 0xE8FA, 0x696E, 0xE8FB, 0x68FC, 0xE8FC, 0x691F, 0xE8FD, 0x6920, 0xE8FE, 0x68F9, 0xE940, 0x9527, 0xE941, 0x9533, + 0xE942, 0x953D, 0xE943, 0x9543, 0xE944, 0x9548, 0xE945, 0x954B, 0xE946, 0x9555, 0xE947, 0x955A, 0xE948, 0x9560, 0xE949, 0x956E, + 0xE94A, 0x9574, 0xE94B, 0x9575, 0xE94C, 0x9577, 0xE94D, 0x9578, 0xE94E, 0x9579, 0xE94F, 0x957A, 0xE950, 0x957B, 0xE951, 0x957C, + 0xE952, 0x957D, 0xE953, 0x957E, 0xE954, 0x9580, 0xE955, 0x9581, 0xE956, 0x9582, 0xE957, 0x9583, 0xE958, 0x9584, 0xE959, 0x9585, + 0xE95A, 0x9586, 0xE95B, 0x9587, 0xE95C, 0x9588, 0xE95D, 0x9589, 0xE95E, 0x958A, 0xE95F, 0x958B, 0xE960, 0x958C, 0xE961, 0x958D, + 0xE962, 0x958E, 0xE963, 0x958F, 0xE964, 0x9590, 0xE965, 0x9591, 0xE966, 0x9592, 0xE967, 0x9593, 0xE968, 0x9594, 0xE969, 0x9595, + 0xE96A, 0x9596, 0xE96B, 0x9597, 0xE96C, 0x9598, 0xE96D, 0x9599, 0xE96E, 0x959A, 0xE96F, 0x959B, 0xE970, 0x959C, 0xE971, 0x959D, + 0xE972, 0x959E, 0xE973, 0x959F, 0xE974, 0x95A0, 0xE975, 0x95A1, 0xE976, 0x95A2, 0xE977, 0x95A3, 0xE978, 0x95A4, 0xE979, 0x95A5, + 0xE97A, 0x95A6, 0xE97B, 0x95A7, 0xE97C, 0x95A8, 0xE97D, 0x95A9, 0xE97E, 0x95AA, 0xE980, 0x95AB, 0xE981, 0x95AC, 0xE982, 0x95AD, + 0xE983, 0x95AE, 0xE984, 0x95AF, 0xE985, 0x95B0, 0xE986, 0x95B1, 0xE987, 0x95B2, 0xE988, 0x95B3, 0xE989, 0x95B4, 0xE98A, 0x95B5, + 0xE98B, 0x95B6, 0xE98C, 0x95B7, 0xE98D, 0x95B8, 0xE98E, 0x95B9, 0xE98F, 0x95BA, 0xE990, 0x95BB, 0xE991, 0x95BC, 0xE992, 0x95BD, + 0xE993, 0x95BE, 0xE994, 0x95BF, 0xE995, 0x95C0, 0xE996, 0x95C1, 0xE997, 0x95C2, 0xE998, 0x95C3, 0xE999, 0x95C4, 0xE99A, 0x95C5, + 0xE99B, 0x95C6, 0xE99C, 0x95C7, 0xE99D, 0x95C8, 0xE99E, 0x95C9, 0xE99F, 0x95CA, 0xE9A0, 0x95CB, 0xE9A1, 0x6924, 0xE9A2, 0x68F0, + 0xE9A3, 0x690B, 0xE9A4, 0x6901, 0xE9A5, 0x6957, 0xE9A6, 0x68E3, 0xE9A7, 0x6910, 0xE9A8, 0x6971, 0xE9A9, 0x6939, 0xE9AA, 0x6960, + 0xE9AB, 0x6942, 0xE9AC, 0x695D, 0xE9AD, 0x6984, 0xE9AE, 0x696B, 0xE9AF, 0x6980, 0xE9B0, 0x6998, 0xE9B1, 0x6978, 0xE9B2, 0x6934, + 0xE9B3, 0x69CC, 0xE9B4, 0x6987, 0xE9B5, 0x6988, 0xE9B6, 0x69CE, 0xE9B7, 0x6989, 0xE9B8, 0x6966, 0xE9B9, 0x6963, 0xE9BA, 0x6979, + 0xE9BB, 0x699B, 0xE9BC, 0x69A7, 0xE9BD, 0x69BB, 0xE9BE, 0x69AB, 0xE9BF, 0x69AD, 0xE9C0, 0x69D4, 0xE9C1, 0x69B1, 0xE9C2, 0x69C1, + 0xE9C3, 0x69CA, 0xE9C4, 0x69DF, 0xE9C5, 0x6995, 0xE9C6, 0x69E0, 0xE9C7, 0x698D, 0xE9C8, 0x69FF, 0xE9C9, 0x6A2F, 0xE9CA, 0x69ED, + 0xE9CB, 0x6A17, 0xE9CC, 0x6A18, 0xE9CD, 0x6A65, 0xE9CE, 0x69F2, 0xE9CF, 0x6A44, 0xE9D0, 0x6A3E, 0xE9D1, 0x6AA0, 0xE9D2, 0x6A50, + 0xE9D3, 0x6A5B, 0xE9D4, 0x6A35, 0xE9D5, 0x6A8E, 0xE9D6, 0x6A79, 0xE9D7, 0x6A3D, 0xE9D8, 0x6A28, 0xE9D9, 0x6A58, 0xE9DA, 0x6A7C, + 0xE9DB, 0x6A91, 0xE9DC, 0x6A90, 0xE9DD, 0x6AA9, 0xE9DE, 0x6A97, 0xE9DF, 0x6AAB, 0xE9E0, 0x7337, 0xE9E1, 0x7352, 0xE9E2, 0x6B81, + 0xE9E3, 0x6B82, 0xE9E4, 0x6B87, 0xE9E5, 0x6B84, 0xE9E6, 0x6B92, 0xE9E7, 0x6B93, 0xE9E8, 0x6B8D, 0xE9E9, 0x6B9A, 0xE9EA, 0x6B9B, + 0xE9EB, 0x6BA1, 0xE9EC, 0x6BAA, 0xE9ED, 0x8F6B, 0xE9EE, 0x8F6D, 0xE9EF, 0x8F71, 0xE9F0, 0x8F72, 0xE9F1, 0x8F73, 0xE9F2, 0x8F75, + 0xE9F3, 0x8F76, 0xE9F4, 0x8F78, 0xE9F5, 0x8F77, 0xE9F6, 0x8F79, 0xE9F7, 0x8F7A, 0xE9F8, 0x8F7C, 0xE9F9, 0x8F7E, 0xE9FA, 0x8F81, + 0xE9FB, 0x8F82, 0xE9FC, 0x8F84, 0xE9FD, 0x8F87, 0xE9FE, 0x8F8B, 0xEA40, 0x95CC, 0xEA41, 0x95CD, 0xEA42, 0x95CE, 0xEA43, 0x95CF, + 0xEA44, 0x95D0, 0xEA45, 0x95D1, 0xEA46, 0x95D2, 0xEA47, 0x95D3, 0xEA48, 0x95D4, 0xEA49, 0x95D5, 0xEA4A, 0x95D6, 0xEA4B, 0x95D7, + 0xEA4C, 0x95D8, 0xEA4D, 0x95D9, 0xEA4E, 0x95DA, 0xEA4F, 0x95DB, 0xEA50, 0x95DC, 0xEA51, 0x95DD, 0xEA52, 0x95DE, 0xEA53, 0x95DF, + 0xEA54, 0x95E0, 0xEA55, 0x95E1, 0xEA56, 0x95E2, 0xEA57, 0x95E3, 0xEA58, 0x95E4, 0xEA59, 0x95E5, 0xEA5A, 0x95E6, 0xEA5B, 0x95E7, + 0xEA5C, 0x95EC, 0xEA5D, 0x95FF, 0xEA5E, 0x9607, 0xEA5F, 0x9613, 0xEA60, 0x9618, 0xEA61, 0x961B, 0xEA62, 0x961E, 0xEA63, 0x9620, + 0xEA64, 0x9623, 0xEA65, 0x9624, 0xEA66, 0x9625, 0xEA67, 0x9626, 0xEA68, 0x9627, 0xEA69, 0x9628, 0xEA6A, 0x9629, 0xEA6B, 0x962B, + 0xEA6C, 0x962C, 0xEA6D, 0x962D, 0xEA6E, 0x962F, 0xEA6F, 0x9630, 0xEA70, 0x9637, 0xEA71, 0x9638, 0xEA72, 0x9639, 0xEA73, 0x963A, + 0xEA74, 0x963E, 0xEA75, 0x9641, 0xEA76, 0x9643, 0xEA77, 0x964A, 0xEA78, 0x964E, 0xEA79, 0x964F, 0xEA7A, 0x9651, 0xEA7B, 0x9652, + 0xEA7C, 0x9653, 0xEA7D, 0x9656, 0xEA7E, 0x9657, 0xEA80, 0x9658, 0xEA81, 0x9659, 0xEA82, 0x965A, 0xEA83, 0x965C, 0xEA84, 0x965D, + 0xEA85, 0x965E, 0xEA86, 0x9660, 0xEA87, 0x9663, 0xEA88, 0x9665, 0xEA89, 0x9666, 0xEA8A, 0x966B, 0xEA8B, 0x966D, 0xEA8C, 0x966E, + 0xEA8D, 0x966F, 0xEA8E, 0x9670, 0xEA8F, 0x9671, 0xEA90, 0x9673, 0xEA91, 0x9678, 0xEA92, 0x9679, 0xEA93, 0x967A, 0xEA94, 0x967B, + 0xEA95, 0x967C, 0xEA96, 0x967D, 0xEA97, 0x967E, 0xEA98, 0x967F, 0xEA99, 0x9680, 0xEA9A, 0x9681, 0xEA9B, 0x9682, 0xEA9C, 0x9683, + 0xEA9D, 0x9684, 0xEA9E, 0x9687, 0xEA9F, 0x9689, 0xEAA0, 0x968A, 0xEAA1, 0x8F8D, 0xEAA2, 0x8F8E, 0xEAA3, 0x8F8F, 0xEAA4, 0x8F98, + 0xEAA5, 0x8F9A, 0xEAA6, 0x8ECE, 0xEAA7, 0x620B, 0xEAA8, 0x6217, 0xEAA9, 0x621B, 0xEAAA, 0x621F, 0xEAAB, 0x6222, 0xEAAC, 0x6221, + 0xEAAD, 0x6225, 0xEAAE, 0x6224, 0xEAAF, 0x622C, 0xEAB0, 0x81E7, 0xEAB1, 0x74EF, 0xEAB2, 0x74F4, 0xEAB3, 0x74FF, 0xEAB4, 0x750F, + 0xEAB5, 0x7511, 0xEAB6, 0x7513, 0xEAB7, 0x6534, 0xEAB8, 0x65EE, 0xEAB9, 0x65EF, 0xEABA, 0x65F0, 0xEABB, 0x660A, 0xEABC, 0x6619, + 0xEABD, 0x6772, 0xEABE, 0x6603, 0xEABF, 0x6615, 0xEAC0, 0x6600, 0xEAC1, 0x7085, 0xEAC2, 0x66F7, 0xEAC3, 0x661D, 0xEAC4, 0x6634, + 0xEAC5, 0x6631, 0xEAC6, 0x6636, 0xEAC7, 0x6635, 0xEAC8, 0x8006, 0xEAC9, 0x665F, 0xEACA, 0x6654, 0xEACB, 0x6641, 0xEACC, 0x664F, + 0xEACD, 0x6656, 0xEACE, 0x6661, 0xEACF, 0x6657, 0xEAD0, 0x6677, 0xEAD1, 0x6684, 0xEAD2, 0x668C, 0xEAD3, 0x66A7, 0xEAD4, 0x669D, + 0xEAD5, 0x66BE, 0xEAD6, 0x66DB, 0xEAD7, 0x66DC, 0xEAD8, 0x66E6, 0xEAD9, 0x66E9, 0xEADA, 0x8D32, 0xEADB, 0x8D33, 0xEADC, 0x8D36, + 0xEADD, 0x8D3B, 0xEADE, 0x8D3D, 0xEADF, 0x8D40, 0xEAE0, 0x8D45, 0xEAE1, 0x8D46, 0xEAE2, 0x8D48, 0xEAE3, 0x8D49, 0xEAE4, 0x8D47, + 0xEAE5, 0x8D4D, 0xEAE6, 0x8D55, 0xEAE7, 0x8D59, 0xEAE8, 0x89C7, 0xEAE9, 0x89CA, 0xEAEA, 0x89CB, 0xEAEB, 0x89CC, 0xEAEC, 0x89CE, + 0xEAED, 0x89CF, 0xEAEE, 0x89D0, 0xEAEF, 0x89D1, 0xEAF0, 0x726E, 0xEAF1, 0x729F, 0xEAF2, 0x725D, 0xEAF3, 0x7266, 0xEAF4, 0x726F, + 0xEAF5, 0x727E, 0xEAF6, 0x727F, 0xEAF7, 0x7284, 0xEAF8, 0x728B, 0xEAF9, 0x728D, 0xEAFA, 0x728F, 0xEAFB, 0x7292, 0xEAFC, 0x6308, + 0xEAFD, 0x6332, 0xEAFE, 0x63B0, 0xEB40, 0x968C, 0xEB41, 0x968E, 0xEB42, 0x9691, 0xEB43, 0x9692, 0xEB44, 0x9693, 0xEB45, 0x9695, + 0xEB46, 0x9696, 0xEB47, 0x969A, 0xEB48, 0x969B, 0xEB49, 0x969D, 0xEB4A, 0x969E, 0xEB4B, 0x969F, 0xEB4C, 0x96A0, 0xEB4D, 0x96A1, + 0xEB4E, 0x96A2, 0xEB4F, 0x96A3, 0xEB50, 0x96A4, 0xEB51, 0x96A5, 0xEB52, 0x96A6, 0xEB53, 0x96A8, 0xEB54, 0x96A9, 0xEB55, 0x96AA, + 0xEB56, 0x96AB, 0xEB57, 0x96AC, 0xEB58, 0x96AD, 0xEB59, 0x96AE, 0xEB5A, 0x96AF, 0xEB5B, 0x96B1, 0xEB5C, 0x96B2, 0xEB5D, 0x96B4, + 0xEB5E, 0x96B5, 0xEB5F, 0x96B7, 0xEB60, 0x96B8, 0xEB61, 0x96BA, 0xEB62, 0x96BB, 0xEB63, 0x96BF, 0xEB64, 0x96C2, 0xEB65, 0x96C3, + 0xEB66, 0x96C8, 0xEB67, 0x96CA, 0xEB68, 0x96CB, 0xEB69, 0x96D0, 0xEB6A, 0x96D1, 0xEB6B, 0x96D3, 0xEB6C, 0x96D4, 0xEB6D, 0x96D6, + 0xEB6E, 0x96D7, 0xEB6F, 0x96D8, 0xEB70, 0x96D9, 0xEB71, 0x96DA, 0xEB72, 0x96DB, 0xEB73, 0x96DC, 0xEB74, 0x96DD, 0xEB75, 0x96DE, + 0xEB76, 0x96DF, 0xEB77, 0x96E1, 0xEB78, 0x96E2, 0xEB79, 0x96E3, 0xEB7A, 0x96E4, 0xEB7B, 0x96E5, 0xEB7C, 0x96E6, 0xEB7D, 0x96E7, + 0xEB7E, 0x96EB, 0xEB80, 0x96EC, 0xEB81, 0x96ED, 0xEB82, 0x96EE, 0xEB83, 0x96F0, 0xEB84, 0x96F1, 0xEB85, 0x96F2, 0xEB86, 0x96F4, + 0xEB87, 0x96F5, 0xEB88, 0x96F8, 0xEB89, 0x96FA, 0xEB8A, 0x96FB, 0xEB8B, 0x96FC, 0xEB8C, 0x96FD, 0xEB8D, 0x96FF, 0xEB8E, 0x9702, + 0xEB8F, 0x9703, 0xEB90, 0x9705, 0xEB91, 0x970A, 0xEB92, 0x970B, 0xEB93, 0x970C, 0xEB94, 0x9710, 0xEB95, 0x9711, 0xEB96, 0x9712, + 0xEB97, 0x9714, 0xEB98, 0x9715, 0xEB99, 0x9717, 0xEB9A, 0x9718, 0xEB9B, 0x9719, 0xEB9C, 0x971A, 0xEB9D, 0x971B, 0xEB9E, 0x971D, + 0xEB9F, 0x971F, 0xEBA0, 0x9720, 0xEBA1, 0x643F, 0xEBA2, 0x64D8, 0xEBA3, 0x8004, 0xEBA4, 0x6BEA, 0xEBA5, 0x6BF3, 0xEBA6, 0x6BFD, + 0xEBA7, 0x6BF5, 0xEBA8, 0x6BF9, 0xEBA9, 0x6C05, 0xEBAA, 0x6C07, 0xEBAB, 0x6C06, 0xEBAC, 0x6C0D, 0xEBAD, 0x6C15, 0xEBAE, 0x6C18, + 0xEBAF, 0x6C19, 0xEBB0, 0x6C1A, 0xEBB1, 0x6C21, 0xEBB2, 0x6C29, 0xEBB3, 0x6C24, 0xEBB4, 0x6C2A, 0xEBB5, 0x6C32, 0xEBB6, 0x6535, + 0xEBB7, 0x6555, 0xEBB8, 0x656B, 0xEBB9, 0x724D, 0xEBBA, 0x7252, 0xEBBB, 0x7256, 0xEBBC, 0x7230, 0xEBBD, 0x8662, 0xEBBE, 0x5216, + 0xEBBF, 0x809F, 0xEBC0, 0x809C, 0xEBC1, 0x8093, 0xEBC2, 0x80BC, 0xEBC3, 0x670A, 0xEBC4, 0x80BD, 0xEBC5, 0x80B1, 0xEBC6, 0x80AB, + 0xEBC7, 0x80AD, 0xEBC8, 0x80B4, 0xEBC9, 0x80B7, 0xEBCA, 0x80E7, 0xEBCB, 0x80E8, 0xEBCC, 0x80E9, 0xEBCD, 0x80EA, 0xEBCE, 0x80DB, + 0xEBCF, 0x80C2, 0xEBD0, 0x80C4, 0xEBD1, 0x80D9, 0xEBD2, 0x80CD, 0xEBD3, 0x80D7, 0xEBD4, 0x6710, 0xEBD5, 0x80DD, 0xEBD6, 0x80EB, + 0xEBD7, 0x80F1, 0xEBD8, 0x80F4, 0xEBD9, 0x80ED, 0xEBDA, 0x810D, 0xEBDB, 0x810E, 0xEBDC, 0x80F2, 0xEBDD, 0x80FC, 0xEBDE, 0x6715, + 0xEBDF, 0x8112, 0xEBE0, 0x8C5A, 0xEBE1, 0x8136, 0xEBE2, 0x811E, 0xEBE3, 0x812C, 0xEBE4, 0x8118, 0xEBE5, 0x8132, 0xEBE6, 0x8148, + 0xEBE7, 0x814C, 0xEBE8, 0x8153, 0xEBE9, 0x8174, 0xEBEA, 0x8159, 0xEBEB, 0x815A, 0xEBEC, 0x8171, 0xEBED, 0x8160, 0xEBEE, 0x8169, + 0xEBEF, 0x817C, 0xEBF0, 0x817D, 0xEBF1, 0x816D, 0xEBF2, 0x8167, 0xEBF3, 0x584D, 0xEBF4, 0x5AB5, 0xEBF5, 0x8188, 0xEBF6, 0x8182, + 0xEBF7, 0x8191, 0xEBF8, 0x6ED5, 0xEBF9, 0x81A3, 0xEBFA, 0x81AA, 0xEBFB, 0x81CC, 0xEBFC, 0x6726, 0xEBFD, 0x81CA, 0xEBFE, 0x81BB, + 0xEC40, 0x9721, 0xEC41, 0x9722, 0xEC42, 0x9723, 0xEC43, 0x9724, 0xEC44, 0x9725, 0xEC45, 0x9726, 0xEC46, 0x9727, 0xEC47, 0x9728, + 0xEC48, 0x9729, 0xEC49, 0x972B, 0xEC4A, 0x972C, 0xEC4B, 0x972E, 0xEC4C, 0x972F, 0xEC4D, 0x9731, 0xEC4E, 0x9733, 0xEC4F, 0x9734, + 0xEC50, 0x9735, 0xEC51, 0x9736, 0xEC52, 0x9737, 0xEC53, 0x973A, 0xEC54, 0x973B, 0xEC55, 0x973C, 0xEC56, 0x973D, 0xEC57, 0x973F, + 0xEC58, 0x9740, 0xEC59, 0x9741, 0xEC5A, 0x9742, 0xEC5B, 0x9743, 0xEC5C, 0x9744, 0xEC5D, 0x9745, 0xEC5E, 0x9746, 0xEC5F, 0x9747, + 0xEC60, 0x9748, 0xEC61, 0x9749, 0xEC62, 0x974A, 0xEC63, 0x974B, 0xEC64, 0x974C, 0xEC65, 0x974D, 0xEC66, 0x974E, 0xEC67, 0x974F, + 0xEC68, 0x9750, 0xEC69, 0x9751, 0xEC6A, 0x9754, 0xEC6B, 0x9755, 0xEC6C, 0x9757, 0xEC6D, 0x9758, 0xEC6E, 0x975A, 0xEC6F, 0x975C, + 0xEC70, 0x975D, 0xEC71, 0x975F, 0xEC72, 0x9763, 0xEC73, 0x9764, 0xEC74, 0x9766, 0xEC75, 0x9767, 0xEC76, 0x9768, 0xEC77, 0x976A, + 0xEC78, 0x976B, 0xEC79, 0x976C, 0xEC7A, 0x976D, 0xEC7B, 0x976E, 0xEC7C, 0x976F, 0xEC7D, 0x9770, 0xEC7E, 0x9771, 0xEC80, 0x9772, + 0xEC81, 0x9775, 0xEC82, 0x9777, 0xEC83, 0x9778, 0xEC84, 0x9779, 0xEC85, 0x977A, 0xEC86, 0x977B, 0xEC87, 0x977D, 0xEC88, 0x977E, + 0xEC89, 0x977F, 0xEC8A, 0x9780, 0xEC8B, 0x9781, 0xEC8C, 0x9782, 0xEC8D, 0x9783, 0xEC8E, 0x9784, 0xEC8F, 0x9786, 0xEC90, 0x9787, + 0xEC91, 0x9788, 0xEC92, 0x9789, 0xEC93, 0x978A, 0xEC94, 0x978C, 0xEC95, 0x978E, 0xEC96, 0x978F, 0xEC97, 0x9790, 0xEC98, 0x9793, + 0xEC99, 0x9795, 0xEC9A, 0x9796, 0xEC9B, 0x9797, 0xEC9C, 0x9799, 0xEC9D, 0x979A, 0xEC9E, 0x979B, 0xEC9F, 0x979C, 0xECA0, 0x979D, + 0xECA1, 0x81C1, 0xECA2, 0x81A6, 0xECA3, 0x6B24, 0xECA4, 0x6B37, 0xECA5, 0x6B39, 0xECA6, 0x6B43, 0xECA7, 0x6B46, 0xECA8, 0x6B59, + 0xECA9, 0x98D1, 0xECAA, 0x98D2, 0xECAB, 0x98D3, 0xECAC, 0x98D5, 0xECAD, 0x98D9, 0xECAE, 0x98DA, 0xECAF, 0x6BB3, 0xECB0, 0x5F40, + 0xECB1, 0x6BC2, 0xECB2, 0x89F3, 0xECB3, 0x6590, 0xECB4, 0x9F51, 0xECB5, 0x6593, 0xECB6, 0x65BC, 0xECB7, 0x65C6, 0xECB8, 0x65C4, + 0xECB9, 0x65C3, 0xECBA, 0x65CC, 0xECBB, 0x65CE, 0xECBC, 0x65D2, 0xECBD, 0x65D6, 0xECBE, 0x7080, 0xECBF, 0x709C, 0xECC0, 0x7096, + 0xECC1, 0x709D, 0xECC2, 0x70BB, 0xECC3, 0x70C0, 0xECC4, 0x70B7, 0xECC5, 0x70AB, 0xECC6, 0x70B1, 0xECC7, 0x70E8, 0xECC8, 0x70CA, + 0xECC9, 0x7110, 0xECCA, 0x7113, 0xECCB, 0x7116, 0xECCC, 0x712F, 0xECCD, 0x7131, 0xECCE, 0x7173, 0xECCF, 0x715C, 0xECD0, 0x7168, + 0xECD1, 0x7145, 0xECD2, 0x7172, 0xECD3, 0x714A, 0xECD4, 0x7178, 0xECD5, 0x717A, 0xECD6, 0x7198, 0xECD7, 0x71B3, 0xECD8, 0x71B5, + 0xECD9, 0x71A8, 0xECDA, 0x71A0, 0xECDB, 0x71E0, 0xECDC, 0x71D4, 0xECDD, 0x71E7, 0xECDE, 0x71F9, 0xECDF, 0x721D, 0xECE0, 0x7228, + 0xECE1, 0x706C, 0xECE2, 0x7118, 0xECE3, 0x7166, 0xECE4, 0x71B9, 0xECE5, 0x623E, 0xECE6, 0x623D, 0xECE7, 0x6243, 0xECE8, 0x6248, + 0xECE9, 0x6249, 0xECEA, 0x793B, 0xECEB, 0x7940, 0xECEC, 0x7946, 0xECED, 0x7949, 0xECEE, 0x795B, 0xECEF, 0x795C, 0xECF0, 0x7953, + 0xECF1, 0x795A, 0xECF2, 0x7962, 0xECF3, 0x7957, 0xECF4, 0x7960, 0xECF5, 0x796F, 0xECF6, 0x7967, 0xECF7, 0x797A, 0xECF8, 0x7985, + 0xECF9, 0x798A, 0xECFA, 0x799A, 0xECFB, 0x79A7, 0xECFC, 0x79B3, 0xECFD, 0x5FD1, 0xECFE, 0x5FD0, 0xED40, 0x979E, 0xED41, 0x979F, + 0xED42, 0x97A1, 0xED43, 0x97A2, 0xED44, 0x97A4, 0xED45, 0x97A5, 0xED46, 0x97A6, 0xED47, 0x97A7, 0xED48, 0x97A8, 0xED49, 0x97A9, + 0xED4A, 0x97AA, 0xED4B, 0x97AC, 0xED4C, 0x97AE, 0xED4D, 0x97B0, 0xED4E, 0x97B1, 0xED4F, 0x97B3, 0xED50, 0x97B5, 0xED51, 0x97B6, + 0xED52, 0x97B7, 0xED53, 0x97B8, 0xED54, 0x97B9, 0xED55, 0x97BA, 0xED56, 0x97BB, 0xED57, 0x97BC, 0xED58, 0x97BD, 0xED59, 0x97BE, + 0xED5A, 0x97BF, 0xED5B, 0x97C0, 0xED5C, 0x97C1, 0xED5D, 0x97C2, 0xED5E, 0x97C3, 0xED5F, 0x97C4, 0xED60, 0x97C5, 0xED61, 0x97C6, + 0xED62, 0x97C7, 0xED63, 0x97C8, 0xED64, 0x97C9, 0xED65, 0x97CA, 0xED66, 0x97CB, 0xED67, 0x97CC, 0xED68, 0x97CD, 0xED69, 0x97CE, + 0xED6A, 0x97CF, 0xED6B, 0x97D0, 0xED6C, 0x97D1, 0xED6D, 0x97D2, 0xED6E, 0x97D3, 0xED6F, 0x97D4, 0xED70, 0x97D5, 0xED71, 0x97D6, + 0xED72, 0x97D7, 0xED73, 0x97D8, 0xED74, 0x97D9, 0xED75, 0x97DA, 0xED76, 0x97DB, 0xED77, 0x97DC, 0xED78, 0x97DD, 0xED79, 0x97DE, + 0xED7A, 0x97DF, 0xED7B, 0x97E0, 0xED7C, 0x97E1, 0xED7D, 0x97E2, 0xED7E, 0x97E3, 0xED80, 0x97E4, 0xED81, 0x97E5, 0xED82, 0x97E8, + 0xED83, 0x97EE, 0xED84, 0x97EF, 0xED85, 0x97F0, 0xED86, 0x97F1, 0xED87, 0x97F2, 0xED88, 0x97F4, 0xED89, 0x97F7, 0xED8A, 0x97F8, + 0xED8B, 0x97F9, 0xED8C, 0x97FA, 0xED8D, 0x97FB, 0xED8E, 0x97FC, 0xED8F, 0x97FD, 0xED90, 0x97FE, 0xED91, 0x97FF, 0xED92, 0x9800, + 0xED93, 0x9801, 0xED94, 0x9802, 0xED95, 0x9803, 0xED96, 0x9804, 0xED97, 0x9805, 0xED98, 0x9806, 0xED99, 0x9807, 0xED9A, 0x9808, + 0xED9B, 0x9809, 0xED9C, 0x980A, 0xED9D, 0x980B, 0xED9E, 0x980C, 0xED9F, 0x980D, 0xEDA0, 0x980E, 0xEDA1, 0x603C, 0xEDA2, 0x605D, + 0xEDA3, 0x605A, 0xEDA4, 0x6067, 0xEDA5, 0x6041, 0xEDA6, 0x6059, 0xEDA7, 0x6063, 0xEDA8, 0x60AB, 0xEDA9, 0x6106, 0xEDAA, 0x610D, + 0xEDAB, 0x615D, 0xEDAC, 0x61A9, 0xEDAD, 0x619D, 0xEDAE, 0x61CB, 0xEDAF, 0x61D1, 0xEDB0, 0x6206, 0xEDB1, 0x8080, 0xEDB2, 0x807F, + 0xEDB3, 0x6C93, 0xEDB4, 0x6CF6, 0xEDB5, 0x6DFC, 0xEDB6, 0x77F6, 0xEDB7, 0x77F8, 0xEDB8, 0x7800, 0xEDB9, 0x7809, 0xEDBA, 0x7817, + 0xEDBB, 0x7818, 0xEDBC, 0x7811, 0xEDBD, 0x65AB, 0xEDBE, 0x782D, 0xEDBF, 0x781C, 0xEDC0, 0x781D, 0xEDC1, 0x7839, 0xEDC2, 0x783A, + 0xEDC3, 0x783B, 0xEDC4, 0x781F, 0xEDC5, 0x783C, 0xEDC6, 0x7825, 0xEDC7, 0x782C, 0xEDC8, 0x7823, 0xEDC9, 0x7829, 0xEDCA, 0x784E, + 0xEDCB, 0x786D, 0xEDCC, 0x7856, 0xEDCD, 0x7857, 0xEDCE, 0x7826, 0xEDCF, 0x7850, 0xEDD0, 0x7847, 0xEDD1, 0x784C, 0xEDD2, 0x786A, + 0xEDD3, 0x789B, 0xEDD4, 0x7893, 0xEDD5, 0x789A, 0xEDD6, 0x7887, 0xEDD7, 0x789C, 0xEDD8, 0x78A1, 0xEDD9, 0x78A3, 0xEDDA, 0x78B2, + 0xEDDB, 0x78B9, 0xEDDC, 0x78A5, 0xEDDD, 0x78D4, 0xEDDE, 0x78D9, 0xEDDF, 0x78C9, 0xEDE0, 0x78EC, 0xEDE1, 0x78F2, 0xEDE2, 0x7905, + 0xEDE3, 0x78F4, 0xEDE4, 0x7913, 0xEDE5, 0x7924, 0xEDE6, 0x791E, 0xEDE7, 0x7934, 0xEDE8, 0x9F9B, 0xEDE9, 0x9EF9, 0xEDEA, 0x9EFB, + 0xEDEB, 0x9EFC, 0xEDEC, 0x76F1, 0xEDED, 0x7704, 0xEDEE, 0x770D, 0xEDEF, 0x76F9, 0xEDF0, 0x7707, 0xEDF1, 0x7708, 0xEDF2, 0x771A, + 0xEDF3, 0x7722, 0xEDF4, 0x7719, 0xEDF5, 0x772D, 0xEDF6, 0x7726, 0xEDF7, 0x7735, 0xEDF8, 0x7738, 0xEDF9, 0x7750, 0xEDFA, 0x7751, + 0xEDFB, 0x7747, 0xEDFC, 0x7743, 0xEDFD, 0x775A, 0xEDFE, 0x7768, 0xEE40, 0x980F, 0xEE41, 0x9810, 0xEE42, 0x9811, 0xEE43, 0x9812, + 0xEE44, 0x9813, 0xEE45, 0x9814, 0xEE46, 0x9815, 0xEE47, 0x9816, 0xEE48, 0x9817, 0xEE49, 0x9818, 0xEE4A, 0x9819, 0xEE4B, 0x981A, + 0xEE4C, 0x981B, 0xEE4D, 0x981C, 0xEE4E, 0x981D, 0xEE4F, 0x981E, 0xEE50, 0x981F, 0xEE51, 0x9820, 0xEE52, 0x9821, 0xEE53, 0x9822, + 0xEE54, 0x9823, 0xEE55, 0x9824, 0xEE56, 0x9825, 0xEE57, 0x9826, 0xEE58, 0x9827, 0xEE59, 0x9828, 0xEE5A, 0x9829, 0xEE5B, 0x982A, + 0xEE5C, 0x982B, 0xEE5D, 0x982C, 0xEE5E, 0x982D, 0xEE5F, 0x982E, 0xEE60, 0x982F, 0xEE61, 0x9830, 0xEE62, 0x9831, 0xEE63, 0x9832, + 0xEE64, 0x9833, 0xEE65, 0x9834, 0xEE66, 0x9835, 0xEE67, 0x9836, 0xEE68, 0x9837, 0xEE69, 0x9838, 0xEE6A, 0x9839, 0xEE6B, 0x983A, + 0xEE6C, 0x983B, 0xEE6D, 0x983C, 0xEE6E, 0x983D, 0xEE6F, 0x983E, 0xEE70, 0x983F, 0xEE71, 0x9840, 0xEE72, 0x9841, 0xEE73, 0x9842, + 0xEE74, 0x9843, 0xEE75, 0x9844, 0xEE76, 0x9845, 0xEE77, 0x9846, 0xEE78, 0x9847, 0xEE79, 0x9848, 0xEE7A, 0x9849, 0xEE7B, 0x984A, + 0xEE7C, 0x984B, 0xEE7D, 0x984C, 0xEE7E, 0x984D, 0xEE80, 0x984E, 0xEE81, 0x984F, 0xEE82, 0x9850, 0xEE83, 0x9851, 0xEE84, 0x9852, + 0xEE85, 0x9853, 0xEE86, 0x9854, 0xEE87, 0x9855, 0xEE88, 0x9856, 0xEE89, 0x9857, 0xEE8A, 0x9858, 0xEE8B, 0x9859, 0xEE8C, 0x985A, + 0xEE8D, 0x985B, 0xEE8E, 0x985C, 0xEE8F, 0x985D, 0xEE90, 0x985E, 0xEE91, 0x985F, 0xEE92, 0x9860, 0xEE93, 0x9861, 0xEE94, 0x9862, + 0xEE95, 0x9863, 0xEE96, 0x9864, 0xEE97, 0x9865, 0xEE98, 0x9866, 0xEE99, 0x9867, 0xEE9A, 0x9868, 0xEE9B, 0x9869, 0xEE9C, 0x986A, + 0xEE9D, 0x986B, 0xEE9E, 0x986C, 0xEE9F, 0x986D, 0xEEA0, 0x986E, 0xEEA1, 0x7762, 0xEEA2, 0x7765, 0xEEA3, 0x777F, 0xEEA4, 0x778D, + 0xEEA5, 0x777D, 0xEEA6, 0x7780, 0xEEA7, 0x778C, 0xEEA8, 0x7791, 0xEEA9, 0x779F, 0xEEAA, 0x77A0, 0xEEAB, 0x77B0, 0xEEAC, 0x77B5, + 0xEEAD, 0x77BD, 0xEEAE, 0x753A, 0xEEAF, 0x7540, 0xEEB0, 0x754E, 0xEEB1, 0x754B, 0xEEB2, 0x7548, 0xEEB3, 0x755B, 0xEEB4, 0x7572, + 0xEEB5, 0x7579, 0xEEB6, 0x7583, 0xEEB7, 0x7F58, 0xEEB8, 0x7F61, 0xEEB9, 0x7F5F, 0xEEBA, 0x8A48, 0xEEBB, 0x7F68, 0xEEBC, 0x7F74, + 0xEEBD, 0x7F71, 0xEEBE, 0x7F79, 0xEEBF, 0x7F81, 0xEEC0, 0x7F7E, 0xEEC1, 0x76CD, 0xEEC2, 0x76E5, 0xEEC3, 0x8832, 0xEEC4, 0x9485, + 0xEEC5, 0x9486, 0xEEC6, 0x9487, 0xEEC7, 0x948B, 0xEEC8, 0x948A, 0xEEC9, 0x948C, 0xEECA, 0x948D, 0xEECB, 0x948F, 0xEECC, 0x9490, + 0xEECD, 0x9494, 0xEECE, 0x9497, 0xEECF, 0x9495, 0xEED0, 0x949A, 0xEED1, 0x949B, 0xEED2, 0x949C, 0xEED3, 0x94A3, 0xEED4, 0x94A4, + 0xEED5, 0x94AB, 0xEED6, 0x94AA, 0xEED7, 0x94AD, 0xEED8, 0x94AC, 0xEED9, 0x94AF, 0xEEDA, 0x94B0, 0xEEDB, 0x94B2, 0xEEDC, 0x94B4, + 0xEEDD, 0x94B6, 0xEEDE, 0x94B7, 0xEEDF, 0x94B8, 0xEEE0, 0x94B9, 0xEEE1, 0x94BA, 0xEEE2, 0x94BC, 0xEEE3, 0x94BD, 0xEEE4, 0x94BF, + 0xEEE5, 0x94C4, 0xEEE6, 0x94C8, 0xEEE7, 0x94C9, 0xEEE8, 0x94CA, 0xEEE9, 0x94CB, 0xEEEA, 0x94CC, 0xEEEB, 0x94CD, 0xEEEC, 0x94CE, + 0xEEED, 0x94D0, 0xEEEE, 0x94D1, 0xEEEF, 0x94D2, 0xEEF0, 0x94D5, 0xEEF1, 0x94D6, 0xEEF2, 0x94D7, 0xEEF3, 0x94D9, 0xEEF4, 0x94D8, + 0xEEF5, 0x94DB, 0xEEF6, 0x94DE, 0xEEF7, 0x94DF, 0xEEF8, 0x94E0, 0xEEF9, 0x94E2, 0xEEFA, 0x94E4, 0xEEFB, 0x94E5, 0xEEFC, 0x94E7, + 0xEEFD, 0x94E8, 0xEEFE, 0x94EA, 0xEF40, 0x986F, 0xEF41, 0x9870, 0xEF42, 0x9871, 0xEF43, 0x9872, 0xEF44, 0x9873, 0xEF45, 0x9874, + 0xEF46, 0x988B, 0xEF47, 0x988E, 0xEF48, 0x9892, 0xEF49, 0x9895, 0xEF4A, 0x9899, 0xEF4B, 0x98A3, 0xEF4C, 0x98A8, 0xEF4D, 0x98A9, + 0xEF4E, 0x98AA, 0xEF4F, 0x98AB, 0xEF50, 0x98AC, 0xEF51, 0x98AD, 0xEF52, 0x98AE, 0xEF53, 0x98AF, 0xEF54, 0x98B0, 0xEF55, 0x98B1, + 0xEF56, 0x98B2, 0xEF57, 0x98B3, 0xEF58, 0x98B4, 0xEF59, 0x98B5, 0xEF5A, 0x98B6, 0xEF5B, 0x98B7, 0xEF5C, 0x98B8, 0xEF5D, 0x98B9, + 0xEF5E, 0x98BA, 0xEF5F, 0x98BB, 0xEF60, 0x98BC, 0xEF61, 0x98BD, 0xEF62, 0x98BE, 0xEF63, 0x98BF, 0xEF64, 0x98C0, 0xEF65, 0x98C1, + 0xEF66, 0x98C2, 0xEF67, 0x98C3, 0xEF68, 0x98C4, 0xEF69, 0x98C5, 0xEF6A, 0x98C6, 0xEF6B, 0x98C7, 0xEF6C, 0x98C8, 0xEF6D, 0x98C9, + 0xEF6E, 0x98CA, 0xEF6F, 0x98CB, 0xEF70, 0x98CC, 0xEF71, 0x98CD, 0xEF72, 0x98CF, 0xEF73, 0x98D0, 0xEF74, 0x98D4, 0xEF75, 0x98D6, + 0xEF76, 0x98D7, 0xEF77, 0x98DB, 0xEF78, 0x98DC, 0xEF79, 0x98DD, 0xEF7A, 0x98E0, 0xEF7B, 0x98E1, 0xEF7C, 0x98E2, 0xEF7D, 0x98E3, + 0xEF7E, 0x98E4, 0xEF80, 0x98E5, 0xEF81, 0x98E6, 0xEF82, 0x98E9, 0xEF83, 0x98EA, 0xEF84, 0x98EB, 0xEF85, 0x98EC, 0xEF86, 0x98ED, + 0xEF87, 0x98EE, 0xEF88, 0x98EF, 0xEF89, 0x98F0, 0xEF8A, 0x98F1, 0xEF8B, 0x98F2, 0xEF8C, 0x98F3, 0xEF8D, 0x98F4, 0xEF8E, 0x98F5, + 0xEF8F, 0x98F6, 0xEF90, 0x98F7, 0xEF91, 0x98F8, 0xEF92, 0x98F9, 0xEF93, 0x98FA, 0xEF94, 0x98FB, 0xEF95, 0x98FC, 0xEF96, 0x98FD, + 0xEF97, 0x98FE, 0xEF98, 0x98FF, 0xEF99, 0x9900, 0xEF9A, 0x9901, 0xEF9B, 0x9902, 0xEF9C, 0x9903, 0xEF9D, 0x9904, 0xEF9E, 0x9905, + 0xEF9F, 0x9906, 0xEFA0, 0x9907, 0xEFA1, 0x94E9, 0xEFA2, 0x94EB, 0xEFA3, 0x94EE, 0xEFA4, 0x94EF, 0xEFA5, 0x94F3, 0xEFA6, 0x94F4, + 0xEFA7, 0x94F5, 0xEFA8, 0x94F7, 0xEFA9, 0x94F9, 0xEFAA, 0x94FC, 0xEFAB, 0x94FD, 0xEFAC, 0x94FF, 0xEFAD, 0x9503, 0xEFAE, 0x9502, + 0xEFAF, 0x9506, 0xEFB0, 0x9507, 0xEFB1, 0x9509, 0xEFB2, 0x950A, 0xEFB3, 0x950D, 0xEFB4, 0x950E, 0xEFB5, 0x950F, 0xEFB6, 0x9512, + 0xEFB7, 0x9513, 0xEFB8, 0x9514, 0xEFB9, 0x9515, 0xEFBA, 0x9516, 0xEFBB, 0x9518, 0xEFBC, 0x951B, 0xEFBD, 0x951D, 0xEFBE, 0x951E, + 0xEFBF, 0x951F, 0xEFC0, 0x9522, 0xEFC1, 0x952A, 0xEFC2, 0x952B, 0xEFC3, 0x9529, 0xEFC4, 0x952C, 0xEFC5, 0x9531, 0xEFC6, 0x9532, + 0xEFC7, 0x9534, 0xEFC8, 0x9536, 0xEFC9, 0x9537, 0xEFCA, 0x9538, 0xEFCB, 0x953C, 0xEFCC, 0x953E, 0xEFCD, 0x953F, 0xEFCE, 0x9542, + 0xEFCF, 0x9535, 0xEFD0, 0x9544, 0xEFD1, 0x9545, 0xEFD2, 0x9546, 0xEFD3, 0x9549, 0xEFD4, 0x954C, 0xEFD5, 0x954E, 0xEFD6, 0x954F, + 0xEFD7, 0x9552, 0xEFD8, 0x9553, 0xEFD9, 0x9554, 0xEFDA, 0x9556, 0xEFDB, 0x9557, 0xEFDC, 0x9558, 0xEFDD, 0x9559, 0xEFDE, 0x955B, + 0xEFDF, 0x955E, 0xEFE0, 0x955F, 0xEFE1, 0x955D, 0xEFE2, 0x9561, 0xEFE3, 0x9562, 0xEFE4, 0x9564, 0xEFE5, 0x9565, 0xEFE6, 0x9566, + 0xEFE7, 0x9567, 0xEFE8, 0x9568, 0xEFE9, 0x9569, 0xEFEA, 0x956A, 0xEFEB, 0x956B, 0xEFEC, 0x956C, 0xEFED, 0x956F, 0xEFEE, 0x9571, + 0xEFEF, 0x9572, 0xEFF0, 0x9573, 0xEFF1, 0x953A, 0xEFF2, 0x77E7, 0xEFF3, 0x77EC, 0xEFF4, 0x96C9, 0xEFF5, 0x79D5, 0xEFF6, 0x79ED, + 0xEFF7, 0x79E3, 0xEFF8, 0x79EB, 0xEFF9, 0x7A06, 0xEFFA, 0x5D47, 0xEFFB, 0x7A03, 0xEFFC, 0x7A02, 0xEFFD, 0x7A1E, 0xEFFE, 0x7A14, + 0xF040, 0x9908, 0xF041, 0x9909, 0xF042, 0x990A, 0xF043, 0x990B, 0xF044, 0x990C, 0xF045, 0x990E, 0xF046, 0x990F, 0xF047, 0x9911, + 0xF048, 0x9912, 0xF049, 0x9913, 0xF04A, 0x9914, 0xF04B, 0x9915, 0xF04C, 0x9916, 0xF04D, 0x9917, 0xF04E, 0x9918, 0xF04F, 0x9919, + 0xF050, 0x991A, 0xF051, 0x991B, 0xF052, 0x991C, 0xF053, 0x991D, 0xF054, 0x991E, 0xF055, 0x991F, 0xF056, 0x9920, 0xF057, 0x9921, + 0xF058, 0x9922, 0xF059, 0x9923, 0xF05A, 0x9924, 0xF05B, 0x9925, 0xF05C, 0x9926, 0xF05D, 0x9927, 0xF05E, 0x9928, 0xF05F, 0x9929, + 0xF060, 0x992A, 0xF061, 0x992B, 0xF062, 0x992C, 0xF063, 0x992D, 0xF064, 0x992F, 0xF065, 0x9930, 0xF066, 0x9931, 0xF067, 0x9932, + 0xF068, 0x9933, 0xF069, 0x9934, 0xF06A, 0x9935, 0xF06B, 0x9936, 0xF06C, 0x9937, 0xF06D, 0x9938, 0xF06E, 0x9939, 0xF06F, 0x993A, + 0xF070, 0x993B, 0xF071, 0x993C, 0xF072, 0x993D, 0xF073, 0x993E, 0xF074, 0x993F, 0xF075, 0x9940, 0xF076, 0x9941, 0xF077, 0x9942, + 0xF078, 0x9943, 0xF079, 0x9944, 0xF07A, 0x9945, 0xF07B, 0x9946, 0xF07C, 0x9947, 0xF07D, 0x9948, 0xF07E, 0x9949, 0xF080, 0x994A, + 0xF081, 0x994B, 0xF082, 0x994C, 0xF083, 0x994D, 0xF084, 0x994E, 0xF085, 0x994F, 0xF086, 0x9950, 0xF087, 0x9951, 0xF088, 0x9952, + 0xF089, 0x9953, 0xF08A, 0x9956, 0xF08B, 0x9957, 0xF08C, 0x9958, 0xF08D, 0x9959, 0xF08E, 0x995A, 0xF08F, 0x995B, 0xF090, 0x995C, + 0xF091, 0x995D, 0xF092, 0x995E, 0xF093, 0x995F, 0xF094, 0x9960, 0xF095, 0x9961, 0xF096, 0x9962, 0xF097, 0x9964, 0xF098, 0x9966, + 0xF099, 0x9973, 0xF09A, 0x9978, 0xF09B, 0x9979, 0xF09C, 0x997B, 0xF09D, 0x997E, 0xF09E, 0x9982, 0xF09F, 0x9983, 0xF0A0, 0x9989, + 0xF0A1, 0x7A39, 0xF0A2, 0x7A37, 0xF0A3, 0x7A51, 0xF0A4, 0x9ECF, 0xF0A5, 0x99A5, 0xF0A6, 0x7A70, 0xF0A7, 0x7688, 0xF0A8, 0x768E, + 0xF0A9, 0x7693, 0xF0AA, 0x7699, 0xF0AB, 0x76A4, 0xF0AC, 0x74DE, 0xF0AD, 0x74E0, 0xF0AE, 0x752C, 0xF0AF, 0x9E20, 0xF0B0, 0x9E22, + 0xF0B1, 0x9E28, 0xF0B2, 0x9E29, 0xF0B3, 0x9E2A, 0xF0B4, 0x9E2B, 0xF0B5, 0x9E2C, 0xF0B6, 0x9E32, 0xF0B7, 0x9E31, 0xF0B8, 0x9E36, + 0xF0B9, 0x9E38, 0xF0BA, 0x9E37, 0xF0BB, 0x9E39, 0xF0BC, 0x9E3A, 0xF0BD, 0x9E3E, 0xF0BE, 0x9E41, 0xF0BF, 0x9E42, 0xF0C0, 0x9E44, + 0xF0C1, 0x9E46, 0xF0C2, 0x9E47, 0xF0C3, 0x9E48, 0xF0C4, 0x9E49, 0xF0C5, 0x9E4B, 0xF0C6, 0x9E4C, 0xF0C7, 0x9E4E, 0xF0C8, 0x9E51, + 0xF0C9, 0x9E55, 0xF0CA, 0x9E57, 0xF0CB, 0x9E5A, 0xF0CC, 0x9E5B, 0xF0CD, 0x9E5C, 0xF0CE, 0x9E5E, 0xF0CF, 0x9E63, 0xF0D0, 0x9E66, + 0xF0D1, 0x9E67, 0xF0D2, 0x9E68, 0xF0D3, 0x9E69, 0xF0D4, 0x9E6A, 0xF0D5, 0x9E6B, 0xF0D6, 0x9E6C, 0xF0D7, 0x9E71, 0xF0D8, 0x9E6D, + 0xF0D9, 0x9E73, 0xF0DA, 0x7592, 0xF0DB, 0x7594, 0xF0DC, 0x7596, 0xF0DD, 0x75A0, 0xF0DE, 0x759D, 0xF0DF, 0x75AC, 0xF0E0, 0x75A3, + 0xF0E1, 0x75B3, 0xF0E2, 0x75B4, 0xF0E3, 0x75B8, 0xF0E4, 0x75C4, 0xF0E5, 0x75B1, 0xF0E6, 0x75B0, 0xF0E7, 0x75C3, 0xF0E8, 0x75C2, + 0xF0E9, 0x75D6, 0xF0EA, 0x75CD, 0xF0EB, 0x75E3, 0xF0EC, 0x75E8, 0xF0ED, 0x75E6, 0xF0EE, 0x75E4, 0xF0EF, 0x75EB, 0xF0F0, 0x75E7, + 0xF0F1, 0x7603, 0xF0F2, 0x75F1, 0xF0F3, 0x75FC, 0xF0F4, 0x75FF, 0xF0F5, 0x7610, 0xF0F6, 0x7600, 0xF0F7, 0x7605, 0xF0F8, 0x760C, + 0xF0F9, 0x7617, 0xF0FA, 0x760A, 0xF0FB, 0x7625, 0xF0FC, 0x7618, 0xF0FD, 0x7615, 0xF0FE, 0x7619, 0xF140, 0x998C, 0xF141, 0x998E, + 0xF142, 0x999A, 0xF143, 0x999B, 0xF144, 0x999C, 0xF145, 0x999D, 0xF146, 0x999E, 0xF147, 0x999F, 0xF148, 0x99A0, 0xF149, 0x99A1, + 0xF14A, 0x99A2, 0xF14B, 0x99A3, 0xF14C, 0x99A4, 0xF14D, 0x99A6, 0xF14E, 0x99A7, 0xF14F, 0x99A9, 0xF150, 0x99AA, 0xF151, 0x99AB, + 0xF152, 0x99AC, 0xF153, 0x99AD, 0xF154, 0x99AE, 0xF155, 0x99AF, 0xF156, 0x99B0, 0xF157, 0x99B1, 0xF158, 0x99B2, 0xF159, 0x99B3, + 0xF15A, 0x99B4, 0xF15B, 0x99B5, 0xF15C, 0x99B6, 0xF15D, 0x99B7, 0xF15E, 0x99B8, 0xF15F, 0x99B9, 0xF160, 0x99BA, 0xF161, 0x99BB, + 0xF162, 0x99BC, 0xF163, 0x99BD, 0xF164, 0x99BE, 0xF165, 0x99BF, 0xF166, 0x99C0, 0xF167, 0x99C1, 0xF168, 0x99C2, 0xF169, 0x99C3, + 0xF16A, 0x99C4, 0xF16B, 0x99C5, 0xF16C, 0x99C6, 0xF16D, 0x99C7, 0xF16E, 0x99C8, 0xF16F, 0x99C9, 0xF170, 0x99CA, 0xF171, 0x99CB, + 0xF172, 0x99CC, 0xF173, 0x99CD, 0xF174, 0x99CE, 0xF175, 0x99CF, 0xF176, 0x99D0, 0xF177, 0x99D1, 0xF178, 0x99D2, 0xF179, 0x99D3, + 0xF17A, 0x99D4, 0xF17B, 0x99D5, 0xF17C, 0x99D6, 0xF17D, 0x99D7, 0xF17E, 0x99D8, 0xF180, 0x99D9, 0xF181, 0x99DA, 0xF182, 0x99DB, + 0xF183, 0x99DC, 0xF184, 0x99DD, 0xF185, 0x99DE, 0xF186, 0x99DF, 0xF187, 0x99E0, 0xF188, 0x99E1, 0xF189, 0x99E2, 0xF18A, 0x99E3, + 0xF18B, 0x99E4, 0xF18C, 0x99E5, 0xF18D, 0x99E6, 0xF18E, 0x99E7, 0xF18F, 0x99E8, 0xF190, 0x99E9, 0xF191, 0x99EA, 0xF192, 0x99EB, + 0xF193, 0x99EC, 0xF194, 0x99ED, 0xF195, 0x99EE, 0xF196, 0x99EF, 0xF197, 0x99F0, 0xF198, 0x99F1, 0xF199, 0x99F2, 0xF19A, 0x99F3, + 0xF19B, 0x99F4, 0xF19C, 0x99F5, 0xF19D, 0x99F6, 0xF19E, 0x99F7, 0xF19F, 0x99F8, 0xF1A0, 0x99F9, 0xF1A1, 0x761B, 0xF1A2, 0x763C, + 0xF1A3, 0x7622, 0xF1A4, 0x7620, 0xF1A5, 0x7640, 0xF1A6, 0x762D, 0xF1A7, 0x7630, 0xF1A8, 0x763F, 0xF1A9, 0x7635, 0xF1AA, 0x7643, + 0xF1AB, 0x763E, 0xF1AC, 0x7633, 0xF1AD, 0x764D, 0xF1AE, 0x765E, 0xF1AF, 0x7654, 0xF1B0, 0x765C, 0xF1B1, 0x7656, 0xF1B2, 0x766B, + 0xF1B3, 0x766F, 0xF1B4, 0x7FCA, 0xF1B5, 0x7AE6, 0xF1B6, 0x7A78, 0xF1B7, 0x7A79, 0xF1B8, 0x7A80, 0xF1B9, 0x7A86, 0xF1BA, 0x7A88, + 0xF1BB, 0x7A95, 0xF1BC, 0x7AA6, 0xF1BD, 0x7AA0, 0xF1BE, 0x7AAC, 0xF1BF, 0x7AA8, 0xF1C0, 0x7AAD, 0xF1C1, 0x7AB3, 0xF1C2, 0x8864, + 0xF1C3, 0x8869, 0xF1C4, 0x8872, 0xF1C5, 0x887D, 0xF1C6, 0x887F, 0xF1C7, 0x8882, 0xF1C8, 0x88A2, 0xF1C9, 0x88C6, 0xF1CA, 0x88B7, + 0xF1CB, 0x88BC, 0xF1CC, 0x88C9, 0xF1CD, 0x88E2, 0xF1CE, 0x88CE, 0xF1CF, 0x88E3, 0xF1D0, 0x88E5, 0xF1D1, 0x88F1, 0xF1D2, 0x891A, + 0xF1D3, 0x88FC, 0xF1D4, 0x88E8, 0xF1D5, 0x88FE, 0xF1D6, 0x88F0, 0xF1D7, 0x8921, 0xF1D8, 0x8919, 0xF1D9, 0x8913, 0xF1DA, 0x891B, + 0xF1DB, 0x890A, 0xF1DC, 0x8934, 0xF1DD, 0x892B, 0xF1DE, 0x8936, 0xF1DF, 0x8941, 0xF1E0, 0x8966, 0xF1E1, 0x897B, 0xF1E2, 0x758B, + 0xF1E3, 0x80E5, 0xF1E4, 0x76B2, 0xF1E5, 0x76B4, 0xF1E6, 0x77DC, 0xF1E7, 0x8012, 0xF1E8, 0x8014, 0xF1E9, 0x8016, 0xF1EA, 0x801C, + 0xF1EB, 0x8020, 0xF1EC, 0x8022, 0xF1ED, 0x8025, 0xF1EE, 0x8026, 0xF1EF, 0x8027, 0xF1F0, 0x8029, 0xF1F1, 0x8028, 0xF1F2, 0x8031, + 0xF1F3, 0x800B, 0xF1F4, 0x8035, 0xF1F5, 0x8043, 0xF1F6, 0x8046, 0xF1F7, 0x804D, 0xF1F8, 0x8052, 0xF1F9, 0x8069, 0xF1FA, 0x8071, + 0xF1FB, 0x8983, 0xF1FC, 0x9878, 0xF1FD, 0x9880, 0xF1FE, 0x9883, 0xF240, 0x99FA, 0xF241, 0x99FB, 0xF242, 0x99FC, 0xF243, 0x99FD, + 0xF244, 0x99FE, 0xF245, 0x99FF, 0xF246, 0x9A00, 0xF247, 0x9A01, 0xF248, 0x9A02, 0xF249, 0x9A03, 0xF24A, 0x9A04, 0xF24B, 0x9A05, + 0xF24C, 0x9A06, 0xF24D, 0x9A07, 0xF24E, 0x9A08, 0xF24F, 0x9A09, 0xF250, 0x9A0A, 0xF251, 0x9A0B, 0xF252, 0x9A0C, 0xF253, 0x9A0D, + 0xF254, 0x9A0E, 0xF255, 0x9A0F, 0xF256, 0x9A10, 0xF257, 0x9A11, 0xF258, 0x9A12, 0xF259, 0x9A13, 0xF25A, 0x9A14, 0xF25B, 0x9A15, + 0xF25C, 0x9A16, 0xF25D, 0x9A17, 0xF25E, 0x9A18, 0xF25F, 0x9A19, 0xF260, 0x9A1A, 0xF261, 0x9A1B, 0xF262, 0x9A1C, 0xF263, 0x9A1D, + 0xF264, 0x9A1E, 0xF265, 0x9A1F, 0xF266, 0x9A20, 0xF267, 0x9A21, 0xF268, 0x9A22, 0xF269, 0x9A23, 0xF26A, 0x9A24, 0xF26B, 0x9A25, + 0xF26C, 0x9A26, 0xF26D, 0x9A27, 0xF26E, 0x9A28, 0xF26F, 0x9A29, 0xF270, 0x9A2A, 0xF271, 0x9A2B, 0xF272, 0x9A2C, 0xF273, 0x9A2D, + 0xF274, 0x9A2E, 0xF275, 0x9A2F, 0xF276, 0x9A30, 0xF277, 0x9A31, 0xF278, 0x9A32, 0xF279, 0x9A33, 0xF27A, 0x9A34, 0xF27B, 0x9A35, + 0xF27C, 0x9A36, 0xF27D, 0x9A37, 0xF27E, 0x9A38, 0xF280, 0x9A39, 0xF281, 0x9A3A, 0xF282, 0x9A3B, 0xF283, 0x9A3C, 0xF284, 0x9A3D, + 0xF285, 0x9A3E, 0xF286, 0x9A3F, 0xF287, 0x9A40, 0xF288, 0x9A41, 0xF289, 0x9A42, 0xF28A, 0x9A43, 0xF28B, 0x9A44, 0xF28C, 0x9A45, + 0xF28D, 0x9A46, 0xF28E, 0x9A47, 0xF28F, 0x9A48, 0xF290, 0x9A49, 0xF291, 0x9A4A, 0xF292, 0x9A4B, 0xF293, 0x9A4C, 0xF294, 0x9A4D, + 0xF295, 0x9A4E, 0xF296, 0x9A4F, 0xF297, 0x9A50, 0xF298, 0x9A51, 0xF299, 0x9A52, 0xF29A, 0x9A53, 0xF29B, 0x9A54, 0xF29C, 0x9A55, + 0xF29D, 0x9A56, 0xF29E, 0x9A57, 0xF29F, 0x9A58, 0xF2A0, 0x9A59, 0xF2A1, 0x9889, 0xF2A2, 0x988C, 0xF2A3, 0x988D, 0xF2A4, 0x988F, + 0xF2A5, 0x9894, 0xF2A6, 0x989A, 0xF2A7, 0x989B, 0xF2A8, 0x989E, 0xF2A9, 0x989F, 0xF2AA, 0x98A1, 0xF2AB, 0x98A2, 0xF2AC, 0x98A5, + 0xF2AD, 0x98A6, 0xF2AE, 0x864D, 0xF2AF, 0x8654, 0xF2B0, 0x866C, 0xF2B1, 0x866E, 0xF2B2, 0x867F, 0xF2B3, 0x867A, 0xF2B4, 0x867C, + 0xF2B5, 0x867B, 0xF2B6, 0x86A8, 0xF2B7, 0x868D, 0xF2B8, 0x868B, 0xF2B9, 0x86AC, 0xF2BA, 0x869D, 0xF2BB, 0x86A7, 0xF2BC, 0x86A3, + 0xF2BD, 0x86AA, 0xF2BE, 0x8693, 0xF2BF, 0x86A9, 0xF2C0, 0x86B6, 0xF2C1, 0x86C4, 0xF2C2, 0x86B5, 0xF2C3, 0x86CE, 0xF2C4, 0x86B0, + 0xF2C5, 0x86BA, 0xF2C6, 0x86B1, 0xF2C7, 0x86AF, 0xF2C8, 0x86C9, 0xF2C9, 0x86CF, 0xF2CA, 0x86B4, 0xF2CB, 0x86E9, 0xF2CC, 0x86F1, + 0xF2CD, 0x86F2, 0xF2CE, 0x86ED, 0xF2CF, 0x86F3, 0xF2D0, 0x86D0, 0xF2D1, 0x8713, 0xF2D2, 0x86DE, 0xF2D3, 0x86F4, 0xF2D4, 0x86DF, + 0xF2D5, 0x86D8, 0xF2D6, 0x86D1, 0xF2D7, 0x8703, 0xF2D8, 0x8707, 0xF2D9, 0x86F8, 0xF2DA, 0x8708, 0xF2DB, 0x870A, 0xF2DC, 0x870D, + 0xF2DD, 0x8709, 0xF2DE, 0x8723, 0xF2DF, 0x873B, 0xF2E0, 0x871E, 0xF2E1, 0x8725, 0xF2E2, 0x872E, 0xF2E3, 0x871A, 0xF2E4, 0x873E, + 0xF2E5, 0x8748, 0xF2E6, 0x8734, 0xF2E7, 0x8731, 0xF2E8, 0x8729, 0xF2E9, 0x8737, 0xF2EA, 0x873F, 0xF2EB, 0x8782, 0xF2EC, 0x8722, + 0xF2ED, 0x877D, 0xF2EE, 0x877E, 0xF2EF, 0x877B, 0xF2F0, 0x8760, 0xF2F1, 0x8770, 0xF2F2, 0x874C, 0xF2F3, 0x876E, 0xF2F4, 0x878B, + 0xF2F5, 0x8753, 0xF2F6, 0x8763, 0xF2F7, 0x877C, 0xF2F8, 0x8764, 0xF2F9, 0x8759, 0xF2FA, 0x8765, 0xF2FB, 0x8793, 0xF2FC, 0x87AF, + 0xF2FD, 0x87A8, 0xF2FE, 0x87D2, 0xF340, 0x9A5A, 0xF341, 0x9A5B, 0xF342, 0x9A5C, 0xF343, 0x9A5D, 0xF344, 0x9A5E, 0xF345, 0x9A5F, + 0xF346, 0x9A60, 0xF347, 0x9A61, 0xF348, 0x9A62, 0xF349, 0x9A63, 0xF34A, 0x9A64, 0xF34B, 0x9A65, 0xF34C, 0x9A66, 0xF34D, 0x9A67, + 0xF34E, 0x9A68, 0xF34F, 0x9A69, 0xF350, 0x9A6A, 0xF351, 0x9A6B, 0xF352, 0x9A72, 0xF353, 0x9A83, 0xF354, 0x9A89, 0xF355, 0x9A8D, + 0xF356, 0x9A8E, 0xF357, 0x9A94, 0xF358, 0x9A95, 0xF359, 0x9A99, 0xF35A, 0x9AA6, 0xF35B, 0x9AA9, 0xF35C, 0x9AAA, 0xF35D, 0x9AAB, + 0xF35E, 0x9AAC, 0xF35F, 0x9AAD, 0xF360, 0x9AAE, 0xF361, 0x9AAF, 0xF362, 0x9AB2, 0xF363, 0x9AB3, 0xF364, 0x9AB4, 0xF365, 0x9AB5, + 0xF366, 0x9AB9, 0xF367, 0x9ABB, 0xF368, 0x9ABD, 0xF369, 0x9ABE, 0xF36A, 0x9ABF, 0xF36B, 0x9AC3, 0xF36C, 0x9AC4, 0xF36D, 0x9AC6, + 0xF36E, 0x9AC7, 0xF36F, 0x9AC8, 0xF370, 0x9AC9, 0xF371, 0x9ACA, 0xF372, 0x9ACD, 0xF373, 0x9ACE, 0xF374, 0x9ACF, 0xF375, 0x9AD0, + 0xF376, 0x9AD2, 0xF377, 0x9AD4, 0xF378, 0x9AD5, 0xF379, 0x9AD6, 0xF37A, 0x9AD7, 0xF37B, 0x9AD9, 0xF37C, 0x9ADA, 0xF37D, 0x9ADB, + 0xF37E, 0x9ADC, 0xF380, 0x9ADD, 0xF381, 0x9ADE, 0xF382, 0x9AE0, 0xF383, 0x9AE2, 0xF384, 0x9AE3, 0xF385, 0x9AE4, 0xF386, 0x9AE5, + 0xF387, 0x9AE7, 0xF388, 0x9AE8, 0xF389, 0x9AE9, 0xF38A, 0x9AEA, 0xF38B, 0x9AEC, 0xF38C, 0x9AEE, 0xF38D, 0x9AF0, 0xF38E, 0x9AF1, + 0xF38F, 0x9AF2, 0xF390, 0x9AF3, 0xF391, 0x9AF4, 0xF392, 0x9AF5, 0xF393, 0x9AF6, 0xF394, 0x9AF7, 0xF395, 0x9AF8, 0xF396, 0x9AFA, + 0xF397, 0x9AFC, 0xF398, 0x9AFD, 0xF399, 0x9AFE, 0xF39A, 0x9AFF, 0xF39B, 0x9B00, 0xF39C, 0x9B01, 0xF39D, 0x9B02, 0xF39E, 0x9B04, + 0xF39F, 0x9B05, 0xF3A0, 0x9B06, 0xF3A1, 0x87C6, 0xF3A2, 0x8788, 0xF3A3, 0x8785, 0xF3A4, 0x87AD, 0xF3A5, 0x8797, 0xF3A6, 0x8783, + 0xF3A7, 0x87AB, 0xF3A8, 0x87E5, 0xF3A9, 0x87AC, 0xF3AA, 0x87B5, 0xF3AB, 0x87B3, 0xF3AC, 0x87CB, 0xF3AD, 0x87D3, 0xF3AE, 0x87BD, + 0xF3AF, 0x87D1, 0xF3B0, 0x87C0, 0xF3B1, 0x87CA, 0xF3B2, 0x87DB, 0xF3B3, 0x87EA, 0xF3B4, 0x87E0, 0xF3B5, 0x87EE, 0xF3B6, 0x8816, + 0xF3B7, 0x8813, 0xF3B8, 0x87FE, 0xF3B9, 0x880A, 0xF3BA, 0x881B, 0xF3BB, 0x8821, 0xF3BC, 0x8839, 0xF3BD, 0x883C, 0xF3BE, 0x7F36, + 0xF3BF, 0x7F42, 0xF3C0, 0x7F44, 0xF3C1, 0x7F45, 0xF3C2, 0x8210, 0xF3C3, 0x7AFA, 0xF3C4, 0x7AFD, 0xF3C5, 0x7B08, 0xF3C6, 0x7B03, + 0xF3C7, 0x7B04, 0xF3C8, 0x7B15, 0xF3C9, 0x7B0A, 0xF3CA, 0x7B2B, 0xF3CB, 0x7B0F, 0xF3CC, 0x7B47, 0xF3CD, 0x7B38, 0xF3CE, 0x7B2A, + 0xF3CF, 0x7B19, 0xF3D0, 0x7B2E, 0xF3D1, 0x7B31, 0xF3D2, 0x7B20, 0xF3D3, 0x7B25, 0xF3D4, 0x7B24, 0xF3D5, 0x7B33, 0xF3D6, 0x7B3E, + 0xF3D7, 0x7B1E, 0xF3D8, 0x7B58, 0xF3D9, 0x7B5A, 0xF3DA, 0x7B45, 0xF3DB, 0x7B75, 0xF3DC, 0x7B4C, 0xF3DD, 0x7B5D, 0xF3DE, 0x7B60, + 0xF3DF, 0x7B6E, 0xF3E0, 0x7B7B, 0xF3E1, 0x7B62, 0xF3E2, 0x7B72, 0xF3E3, 0x7B71, 0xF3E4, 0x7B90, 0xF3E5, 0x7BA6, 0xF3E6, 0x7BA7, + 0xF3E7, 0x7BB8, 0xF3E8, 0x7BAC, 0xF3E9, 0x7B9D, 0xF3EA, 0x7BA8, 0xF3EB, 0x7B85, 0xF3EC, 0x7BAA, 0xF3ED, 0x7B9C, 0xF3EE, 0x7BA2, + 0xF3EF, 0x7BAB, 0xF3F0, 0x7BB4, 0xF3F1, 0x7BD1, 0xF3F2, 0x7BC1, 0xF3F3, 0x7BCC, 0xF3F4, 0x7BDD, 0xF3F5, 0x7BDA, 0xF3F6, 0x7BE5, + 0xF3F7, 0x7BE6, 0xF3F8, 0x7BEA, 0xF3F9, 0x7C0C, 0xF3FA, 0x7BFE, 0xF3FB, 0x7BFC, 0xF3FC, 0x7C0F, 0xF3FD, 0x7C16, 0xF3FE, 0x7C0B, + 0xF440, 0x9B07, 0xF441, 0x9B09, 0xF442, 0x9B0A, 0xF443, 0x9B0B, 0xF444, 0x9B0C, 0xF445, 0x9B0D, 0xF446, 0x9B0E, 0xF447, 0x9B10, + 0xF448, 0x9B11, 0xF449, 0x9B12, 0xF44A, 0x9B14, 0xF44B, 0x9B15, 0xF44C, 0x9B16, 0xF44D, 0x9B17, 0xF44E, 0x9B18, 0xF44F, 0x9B19, + 0xF450, 0x9B1A, 0xF451, 0x9B1B, 0xF452, 0x9B1C, 0xF453, 0x9B1D, 0xF454, 0x9B1E, 0xF455, 0x9B20, 0xF456, 0x9B21, 0xF457, 0x9B22, + 0xF458, 0x9B24, 0xF459, 0x9B25, 0xF45A, 0x9B26, 0xF45B, 0x9B27, 0xF45C, 0x9B28, 0xF45D, 0x9B29, 0xF45E, 0x9B2A, 0xF45F, 0x9B2B, + 0xF460, 0x9B2C, 0xF461, 0x9B2D, 0xF462, 0x9B2E, 0xF463, 0x9B30, 0xF464, 0x9B31, 0xF465, 0x9B33, 0xF466, 0x9B34, 0xF467, 0x9B35, + 0xF468, 0x9B36, 0xF469, 0x9B37, 0xF46A, 0x9B38, 0xF46B, 0x9B39, 0xF46C, 0x9B3A, 0xF46D, 0x9B3D, 0xF46E, 0x9B3E, 0xF46F, 0x9B3F, + 0xF470, 0x9B40, 0xF471, 0x9B46, 0xF472, 0x9B4A, 0xF473, 0x9B4B, 0xF474, 0x9B4C, 0xF475, 0x9B4E, 0xF476, 0x9B50, 0xF477, 0x9B52, + 0xF478, 0x9B53, 0xF479, 0x9B55, 0xF47A, 0x9B56, 0xF47B, 0x9B57, 0xF47C, 0x9B58, 0xF47D, 0x9B59, 0xF47E, 0x9B5A, 0xF480, 0x9B5B, + 0xF481, 0x9B5C, 0xF482, 0x9B5D, 0xF483, 0x9B5E, 0xF484, 0x9B5F, 0xF485, 0x9B60, 0xF486, 0x9B61, 0xF487, 0x9B62, 0xF488, 0x9B63, + 0xF489, 0x9B64, 0xF48A, 0x9B65, 0xF48B, 0x9B66, 0xF48C, 0x9B67, 0xF48D, 0x9B68, 0xF48E, 0x9B69, 0xF48F, 0x9B6A, 0xF490, 0x9B6B, + 0xF491, 0x9B6C, 0xF492, 0x9B6D, 0xF493, 0x9B6E, 0xF494, 0x9B6F, 0xF495, 0x9B70, 0xF496, 0x9B71, 0xF497, 0x9B72, 0xF498, 0x9B73, + 0xF499, 0x9B74, 0xF49A, 0x9B75, 0xF49B, 0x9B76, 0xF49C, 0x9B77, 0xF49D, 0x9B78, 0xF49E, 0x9B79, 0xF49F, 0x9B7A, 0xF4A0, 0x9B7B, + 0xF4A1, 0x7C1F, 0xF4A2, 0x7C2A, 0xF4A3, 0x7C26, 0xF4A4, 0x7C38, 0xF4A5, 0x7C41, 0xF4A6, 0x7C40, 0xF4A7, 0x81FE, 0xF4A8, 0x8201, + 0xF4A9, 0x8202, 0xF4AA, 0x8204, 0xF4AB, 0x81EC, 0xF4AC, 0x8844, 0xF4AD, 0x8221, 0xF4AE, 0x8222, 0xF4AF, 0x8223, 0xF4B0, 0x822D, + 0xF4B1, 0x822F, 0xF4B2, 0x8228, 0xF4B3, 0x822B, 0xF4B4, 0x8238, 0xF4B5, 0x823B, 0xF4B6, 0x8233, 0xF4B7, 0x8234, 0xF4B8, 0x823E, + 0xF4B9, 0x8244, 0xF4BA, 0x8249, 0xF4BB, 0x824B, 0xF4BC, 0x824F, 0xF4BD, 0x825A, 0xF4BE, 0x825F, 0xF4BF, 0x8268, 0xF4C0, 0x887E, + 0xF4C1, 0x8885, 0xF4C2, 0x8888, 0xF4C3, 0x88D8, 0xF4C4, 0x88DF, 0xF4C5, 0x895E, 0xF4C6, 0x7F9D, 0xF4C7, 0x7F9F, 0xF4C8, 0x7FA7, + 0xF4C9, 0x7FAF, 0xF4CA, 0x7FB0, 0xF4CB, 0x7FB2, 0xF4CC, 0x7C7C, 0xF4CD, 0x6549, 0xF4CE, 0x7C91, 0xF4CF, 0x7C9D, 0xF4D0, 0x7C9C, + 0xF4D1, 0x7C9E, 0xF4D2, 0x7CA2, 0xF4D3, 0x7CB2, 0xF4D4, 0x7CBC, 0xF4D5, 0x7CBD, 0xF4D6, 0x7CC1, 0xF4D7, 0x7CC7, 0xF4D8, 0x7CCC, + 0xF4D9, 0x7CCD, 0xF4DA, 0x7CC8, 0xF4DB, 0x7CC5, 0xF4DC, 0x7CD7, 0xF4DD, 0x7CE8, 0xF4DE, 0x826E, 0xF4DF, 0x66A8, 0xF4E0, 0x7FBF, + 0xF4E1, 0x7FCE, 0xF4E2, 0x7FD5, 0xF4E3, 0x7FE5, 0xF4E4, 0x7FE1, 0xF4E5, 0x7FE6, 0xF4E6, 0x7FE9, 0xF4E7, 0x7FEE, 0xF4E8, 0x7FF3, + 0xF4E9, 0x7CF8, 0xF4EA, 0x7D77, 0xF4EB, 0x7DA6, 0xF4EC, 0x7DAE, 0xF4ED, 0x7E47, 0xF4EE, 0x7E9B, 0xF4EF, 0x9EB8, 0xF4F0, 0x9EB4, + 0xF4F1, 0x8D73, 0xF4F2, 0x8D84, 0xF4F3, 0x8D94, 0xF4F4, 0x8D91, 0xF4F5, 0x8DB1, 0xF4F6, 0x8D67, 0xF4F7, 0x8D6D, 0xF4F8, 0x8C47, + 0xF4F9, 0x8C49, 0xF4FA, 0x914A, 0xF4FB, 0x9150, 0xF4FC, 0x914E, 0xF4FD, 0x914F, 0xF4FE, 0x9164, 0xF540, 0x9B7C, 0xF541, 0x9B7D, + 0xF542, 0x9B7E, 0xF543, 0x9B7F, 0xF544, 0x9B80, 0xF545, 0x9B81, 0xF546, 0x9B82, 0xF547, 0x9B83, 0xF548, 0x9B84, 0xF549, 0x9B85, + 0xF54A, 0x9B86, 0xF54B, 0x9B87, 0xF54C, 0x9B88, 0xF54D, 0x9B89, 0xF54E, 0x9B8A, 0xF54F, 0x9B8B, 0xF550, 0x9B8C, 0xF551, 0x9B8D, + 0xF552, 0x9B8E, 0xF553, 0x9B8F, 0xF554, 0x9B90, 0xF555, 0x9B91, 0xF556, 0x9B92, 0xF557, 0x9B93, 0xF558, 0x9B94, 0xF559, 0x9B95, + 0xF55A, 0x9B96, 0xF55B, 0x9B97, 0xF55C, 0x9B98, 0xF55D, 0x9B99, 0xF55E, 0x9B9A, 0xF55F, 0x9B9B, 0xF560, 0x9B9C, 0xF561, 0x9B9D, + 0xF562, 0x9B9E, 0xF563, 0x9B9F, 0xF564, 0x9BA0, 0xF565, 0x9BA1, 0xF566, 0x9BA2, 0xF567, 0x9BA3, 0xF568, 0x9BA4, 0xF569, 0x9BA5, + 0xF56A, 0x9BA6, 0xF56B, 0x9BA7, 0xF56C, 0x9BA8, 0xF56D, 0x9BA9, 0xF56E, 0x9BAA, 0xF56F, 0x9BAB, 0xF570, 0x9BAC, 0xF571, 0x9BAD, + 0xF572, 0x9BAE, 0xF573, 0x9BAF, 0xF574, 0x9BB0, 0xF575, 0x9BB1, 0xF576, 0x9BB2, 0xF577, 0x9BB3, 0xF578, 0x9BB4, 0xF579, 0x9BB5, + 0xF57A, 0x9BB6, 0xF57B, 0x9BB7, 0xF57C, 0x9BB8, 0xF57D, 0x9BB9, 0xF57E, 0x9BBA, 0xF580, 0x9BBB, 0xF581, 0x9BBC, 0xF582, 0x9BBD, + 0xF583, 0x9BBE, 0xF584, 0x9BBF, 0xF585, 0x9BC0, 0xF586, 0x9BC1, 0xF587, 0x9BC2, 0xF588, 0x9BC3, 0xF589, 0x9BC4, 0xF58A, 0x9BC5, + 0xF58B, 0x9BC6, 0xF58C, 0x9BC7, 0xF58D, 0x9BC8, 0xF58E, 0x9BC9, 0xF58F, 0x9BCA, 0xF590, 0x9BCB, 0xF591, 0x9BCC, 0xF592, 0x9BCD, + 0xF593, 0x9BCE, 0xF594, 0x9BCF, 0xF595, 0x9BD0, 0xF596, 0x9BD1, 0xF597, 0x9BD2, 0xF598, 0x9BD3, 0xF599, 0x9BD4, 0xF59A, 0x9BD5, + 0xF59B, 0x9BD6, 0xF59C, 0x9BD7, 0xF59D, 0x9BD8, 0xF59E, 0x9BD9, 0xF59F, 0x9BDA, 0xF5A0, 0x9BDB, 0xF5A1, 0x9162, 0xF5A2, 0x9161, + 0xF5A3, 0x9170, 0xF5A4, 0x9169, 0xF5A5, 0x916F, 0xF5A6, 0x917D, 0xF5A7, 0x917E, 0xF5A8, 0x9172, 0xF5A9, 0x9174, 0xF5AA, 0x9179, + 0xF5AB, 0x918C, 0xF5AC, 0x9185, 0xF5AD, 0x9190, 0xF5AE, 0x918D, 0xF5AF, 0x9191, 0xF5B0, 0x91A2, 0xF5B1, 0x91A3, 0xF5B2, 0x91AA, + 0xF5B3, 0x91AD, 0xF5B4, 0x91AE, 0xF5B5, 0x91AF, 0xF5B6, 0x91B5, 0xF5B7, 0x91B4, 0xF5B8, 0x91BA, 0xF5B9, 0x8C55, 0xF5BA, 0x9E7E, + 0xF5BB, 0x8DB8, 0xF5BC, 0x8DEB, 0xF5BD, 0x8E05, 0xF5BE, 0x8E59, 0xF5BF, 0x8E69, 0xF5C0, 0x8DB5, 0xF5C1, 0x8DBF, 0xF5C2, 0x8DBC, + 0xF5C3, 0x8DBA, 0xF5C4, 0x8DC4, 0xF5C5, 0x8DD6, 0xF5C6, 0x8DD7, 0xF5C7, 0x8DDA, 0xF5C8, 0x8DDE, 0xF5C9, 0x8DCE, 0xF5CA, 0x8DCF, + 0xF5CB, 0x8DDB, 0xF5CC, 0x8DC6, 0xF5CD, 0x8DEC, 0xF5CE, 0x8DF7, 0xF5CF, 0x8DF8, 0xF5D0, 0x8DE3, 0xF5D1, 0x8DF9, 0xF5D2, 0x8DFB, + 0xF5D3, 0x8DE4, 0xF5D4, 0x8E09, 0xF5D5, 0x8DFD, 0xF5D6, 0x8E14, 0xF5D7, 0x8E1D, 0xF5D8, 0x8E1F, 0xF5D9, 0x8E2C, 0xF5DA, 0x8E2E, + 0xF5DB, 0x8E23, 0xF5DC, 0x8E2F, 0xF5DD, 0x8E3A, 0xF5DE, 0x8E40, 0xF5DF, 0x8E39, 0xF5E0, 0x8E35, 0xF5E1, 0x8E3D, 0xF5E2, 0x8E31, + 0xF5E3, 0x8E49, 0xF5E4, 0x8E41, 0xF5E5, 0x8E42, 0xF5E6, 0x8E51, 0xF5E7, 0x8E52, 0xF5E8, 0x8E4A, 0xF5E9, 0x8E70, 0xF5EA, 0x8E76, + 0xF5EB, 0x8E7C, 0xF5EC, 0x8E6F, 0xF5ED, 0x8E74, 0xF5EE, 0x8E85, 0xF5EF, 0x8E8F, 0xF5F0, 0x8E94, 0xF5F1, 0x8E90, 0xF5F2, 0x8E9C, + 0xF5F3, 0x8E9E, 0xF5F4, 0x8C78, 0xF5F5, 0x8C82, 0xF5F6, 0x8C8A, 0xF5F7, 0x8C85, 0xF5F8, 0x8C98, 0xF5F9, 0x8C94, 0xF5FA, 0x659B, + 0xF5FB, 0x89D6, 0xF5FC, 0x89DE, 0xF5FD, 0x89DA, 0xF5FE, 0x89DC, 0xF640, 0x9BDC, 0xF641, 0x9BDD, 0xF642, 0x9BDE, 0xF643, 0x9BDF, + 0xF644, 0x9BE0, 0xF645, 0x9BE1, 0xF646, 0x9BE2, 0xF647, 0x9BE3, 0xF648, 0x9BE4, 0xF649, 0x9BE5, 0xF64A, 0x9BE6, 0xF64B, 0x9BE7, + 0xF64C, 0x9BE8, 0xF64D, 0x9BE9, 0xF64E, 0x9BEA, 0xF64F, 0x9BEB, 0xF650, 0x9BEC, 0xF651, 0x9BED, 0xF652, 0x9BEE, 0xF653, 0x9BEF, + 0xF654, 0x9BF0, 0xF655, 0x9BF1, 0xF656, 0x9BF2, 0xF657, 0x9BF3, 0xF658, 0x9BF4, 0xF659, 0x9BF5, 0xF65A, 0x9BF6, 0xF65B, 0x9BF7, + 0xF65C, 0x9BF8, 0xF65D, 0x9BF9, 0xF65E, 0x9BFA, 0xF65F, 0x9BFB, 0xF660, 0x9BFC, 0xF661, 0x9BFD, 0xF662, 0x9BFE, 0xF663, 0x9BFF, + 0xF664, 0x9C00, 0xF665, 0x9C01, 0xF666, 0x9C02, 0xF667, 0x9C03, 0xF668, 0x9C04, 0xF669, 0x9C05, 0xF66A, 0x9C06, 0xF66B, 0x9C07, + 0xF66C, 0x9C08, 0xF66D, 0x9C09, 0xF66E, 0x9C0A, 0xF66F, 0x9C0B, 0xF670, 0x9C0C, 0xF671, 0x9C0D, 0xF672, 0x9C0E, 0xF673, 0x9C0F, + 0xF674, 0x9C10, 0xF675, 0x9C11, 0xF676, 0x9C12, 0xF677, 0x9C13, 0xF678, 0x9C14, 0xF679, 0x9C15, 0xF67A, 0x9C16, 0xF67B, 0x9C17, + 0xF67C, 0x9C18, 0xF67D, 0x9C19, 0xF67E, 0x9C1A, 0xF680, 0x9C1B, 0xF681, 0x9C1C, 0xF682, 0x9C1D, 0xF683, 0x9C1E, 0xF684, 0x9C1F, + 0xF685, 0x9C20, 0xF686, 0x9C21, 0xF687, 0x9C22, 0xF688, 0x9C23, 0xF689, 0x9C24, 0xF68A, 0x9C25, 0xF68B, 0x9C26, 0xF68C, 0x9C27, + 0xF68D, 0x9C28, 0xF68E, 0x9C29, 0xF68F, 0x9C2A, 0xF690, 0x9C2B, 0xF691, 0x9C2C, 0xF692, 0x9C2D, 0xF693, 0x9C2E, 0xF694, 0x9C2F, + 0xF695, 0x9C30, 0xF696, 0x9C31, 0xF697, 0x9C32, 0xF698, 0x9C33, 0xF699, 0x9C34, 0xF69A, 0x9C35, 0xF69B, 0x9C36, 0xF69C, 0x9C37, + 0xF69D, 0x9C38, 0xF69E, 0x9C39, 0xF69F, 0x9C3A, 0xF6A0, 0x9C3B, 0xF6A1, 0x89E5, 0xF6A2, 0x89EB, 0xF6A3, 0x89EF, 0xF6A4, 0x8A3E, + 0xF6A5, 0x8B26, 0xF6A6, 0x9753, 0xF6A7, 0x96E9, 0xF6A8, 0x96F3, 0xF6A9, 0x96EF, 0xF6AA, 0x9706, 0xF6AB, 0x9701, 0xF6AC, 0x9708, + 0xF6AD, 0x970F, 0xF6AE, 0x970E, 0xF6AF, 0x972A, 0xF6B0, 0x972D, 0xF6B1, 0x9730, 0xF6B2, 0x973E, 0xF6B3, 0x9F80, 0xF6B4, 0x9F83, + 0xF6B5, 0x9F85, 0xF6B6, 0x9F86, 0xF6B7, 0x9F87, 0xF6B8, 0x9F88, 0xF6B9, 0x9F89, 0xF6BA, 0x9F8A, 0xF6BB, 0x9F8C, 0xF6BC, 0x9EFE, + 0xF6BD, 0x9F0B, 0xF6BE, 0x9F0D, 0xF6BF, 0x96B9, 0xF6C0, 0x96BC, 0xF6C1, 0x96BD, 0xF6C2, 0x96CE, 0xF6C3, 0x96D2, 0xF6C4, 0x77BF, + 0xF6C5, 0x96E0, 0xF6C6, 0x928E, 0xF6C7, 0x92AE, 0xF6C8, 0x92C8, 0xF6C9, 0x933E, 0xF6CA, 0x936A, 0xF6CB, 0x93CA, 0xF6CC, 0x938F, + 0xF6CD, 0x943E, 0xF6CE, 0x946B, 0xF6CF, 0x9C7F, 0xF6D0, 0x9C82, 0xF6D1, 0x9C85, 0xF6D2, 0x9C86, 0xF6D3, 0x9C87, 0xF6D4, 0x9C88, + 0xF6D5, 0x7A23, 0xF6D6, 0x9C8B, 0xF6D7, 0x9C8E, 0xF6D8, 0x9C90, 0xF6D9, 0x9C91, 0xF6DA, 0x9C92, 0xF6DB, 0x9C94, 0xF6DC, 0x9C95, + 0xF6DD, 0x9C9A, 0xF6DE, 0x9C9B, 0xF6DF, 0x9C9E, 0xF6E0, 0x9C9F, 0xF6E1, 0x9CA0, 0xF6E2, 0x9CA1, 0xF6E3, 0x9CA2, 0xF6E4, 0x9CA3, + 0xF6E5, 0x9CA5, 0xF6E6, 0x9CA6, 0xF6E7, 0x9CA7, 0xF6E8, 0x9CA8, 0xF6E9, 0x9CA9, 0xF6EA, 0x9CAB, 0xF6EB, 0x9CAD, 0xF6EC, 0x9CAE, + 0xF6ED, 0x9CB0, 0xF6EE, 0x9CB1, 0xF6EF, 0x9CB2, 0xF6F0, 0x9CB3, 0xF6F1, 0x9CB4, 0xF6F2, 0x9CB5, 0xF6F3, 0x9CB6, 0xF6F4, 0x9CB7, + 0xF6F5, 0x9CBA, 0xF6F6, 0x9CBB, 0xF6F7, 0x9CBC, 0xF6F8, 0x9CBD, 0xF6F9, 0x9CC4, 0xF6FA, 0x9CC5, 0xF6FB, 0x9CC6, 0xF6FC, 0x9CC7, + 0xF6FD, 0x9CCA, 0xF6FE, 0x9CCB, 0xF740, 0x9C3C, 0xF741, 0x9C3D, 0xF742, 0x9C3E, 0xF743, 0x9C3F, 0xF744, 0x9C40, 0xF745, 0x9C41, + 0xF746, 0x9C42, 0xF747, 0x9C43, 0xF748, 0x9C44, 0xF749, 0x9C45, 0xF74A, 0x9C46, 0xF74B, 0x9C47, 0xF74C, 0x9C48, 0xF74D, 0x9C49, + 0xF74E, 0x9C4A, 0xF74F, 0x9C4B, 0xF750, 0x9C4C, 0xF751, 0x9C4D, 0xF752, 0x9C4E, 0xF753, 0x9C4F, 0xF754, 0x9C50, 0xF755, 0x9C51, + 0xF756, 0x9C52, 0xF757, 0x9C53, 0xF758, 0x9C54, 0xF759, 0x9C55, 0xF75A, 0x9C56, 0xF75B, 0x9C57, 0xF75C, 0x9C58, 0xF75D, 0x9C59, + 0xF75E, 0x9C5A, 0xF75F, 0x9C5B, 0xF760, 0x9C5C, 0xF761, 0x9C5D, 0xF762, 0x9C5E, 0xF763, 0x9C5F, 0xF764, 0x9C60, 0xF765, 0x9C61, + 0xF766, 0x9C62, 0xF767, 0x9C63, 0xF768, 0x9C64, 0xF769, 0x9C65, 0xF76A, 0x9C66, 0xF76B, 0x9C67, 0xF76C, 0x9C68, 0xF76D, 0x9C69, + 0xF76E, 0x9C6A, 0xF76F, 0x9C6B, 0xF770, 0x9C6C, 0xF771, 0x9C6D, 0xF772, 0x9C6E, 0xF773, 0x9C6F, 0xF774, 0x9C70, 0xF775, 0x9C71, + 0xF776, 0x9C72, 0xF777, 0x9C73, 0xF778, 0x9C74, 0xF779, 0x9C75, 0xF77A, 0x9C76, 0xF77B, 0x9C77, 0xF77C, 0x9C78, 0xF77D, 0x9C79, + 0xF77E, 0x9C7A, 0xF780, 0x9C7B, 0xF781, 0x9C7D, 0xF782, 0x9C7E, 0xF783, 0x9C80, 0xF784, 0x9C83, 0xF785, 0x9C84, 0xF786, 0x9C89, + 0xF787, 0x9C8A, 0xF788, 0x9C8C, 0xF789, 0x9C8F, 0xF78A, 0x9C93, 0xF78B, 0x9C96, 0xF78C, 0x9C97, 0xF78D, 0x9C98, 0xF78E, 0x9C99, + 0xF78F, 0x9C9D, 0xF790, 0x9CAA, 0xF791, 0x9CAC, 0xF792, 0x9CAF, 0xF793, 0x9CB9, 0xF794, 0x9CBE, 0xF795, 0x9CBF, 0xF796, 0x9CC0, + 0xF797, 0x9CC1, 0xF798, 0x9CC2, 0xF799, 0x9CC8, 0xF79A, 0x9CC9, 0xF79B, 0x9CD1, 0xF79C, 0x9CD2, 0xF79D, 0x9CDA, 0xF79E, 0x9CDB, + 0xF79F, 0x9CE0, 0xF7A0, 0x9CE1, 0xF7A1, 0x9CCC, 0xF7A2, 0x9CCD, 0xF7A3, 0x9CCE, 0xF7A4, 0x9CCF, 0xF7A5, 0x9CD0, 0xF7A6, 0x9CD3, + 0xF7A7, 0x9CD4, 0xF7A8, 0x9CD5, 0xF7A9, 0x9CD7, 0xF7AA, 0x9CD8, 0xF7AB, 0x9CD9, 0xF7AC, 0x9CDC, 0xF7AD, 0x9CDD, 0xF7AE, 0x9CDF, + 0xF7AF, 0x9CE2, 0xF7B0, 0x977C, 0xF7B1, 0x9785, 0xF7B2, 0x9791, 0xF7B3, 0x9792, 0xF7B4, 0x9794, 0xF7B5, 0x97AF, 0xF7B6, 0x97AB, + 0xF7B7, 0x97A3, 0xF7B8, 0x97B2, 0xF7B9, 0x97B4, 0xF7BA, 0x9AB1, 0xF7BB, 0x9AB0, 0xF7BC, 0x9AB7, 0xF7BD, 0x9E58, 0xF7BE, 0x9AB6, + 0xF7BF, 0x9ABA, 0xF7C0, 0x9ABC, 0xF7C1, 0x9AC1, 0xF7C2, 0x9AC0, 0xF7C3, 0x9AC5, 0xF7C4, 0x9AC2, 0xF7C5, 0x9ACB, 0xF7C6, 0x9ACC, + 0xF7C7, 0x9AD1, 0xF7C8, 0x9B45, 0xF7C9, 0x9B43, 0xF7CA, 0x9B47, 0xF7CB, 0x9B49, 0xF7CC, 0x9B48, 0xF7CD, 0x9B4D, 0xF7CE, 0x9B51, + 0xF7CF, 0x98E8, 0xF7D0, 0x990D, 0xF7D1, 0x992E, 0xF7D2, 0x9955, 0xF7D3, 0x9954, 0xF7D4, 0x9ADF, 0xF7D5, 0x9AE1, 0xF7D6, 0x9AE6, + 0xF7D7, 0x9AEF, 0xF7D8, 0x9AEB, 0xF7D9, 0x9AFB, 0xF7DA, 0x9AED, 0xF7DB, 0x9AF9, 0xF7DC, 0x9B08, 0xF7DD, 0x9B0F, 0xF7DE, 0x9B13, + 0xF7DF, 0x9B1F, 0xF7E0, 0x9B23, 0xF7E1, 0x9EBD, 0xF7E2, 0x9EBE, 0xF7E3, 0x7E3B, 0xF7E4, 0x9E82, 0xF7E5, 0x9E87, 0xF7E6, 0x9E88, + 0xF7E7, 0x9E8B, 0xF7E8, 0x9E92, 0xF7E9, 0x93D6, 0xF7EA, 0x9E9D, 0xF7EB, 0x9E9F, 0xF7EC, 0x9EDB, 0xF7ED, 0x9EDC, 0xF7EE, 0x9EDD, + 0xF7EF, 0x9EE0, 0xF7F0, 0x9EDF, 0xF7F1, 0x9EE2, 0xF7F2, 0x9EE9, 0xF7F3, 0x9EE7, 0xF7F4, 0x9EE5, 0xF7F5, 0x9EEA, 0xF7F6, 0x9EEF, + 0xF7F7, 0x9F22, 0xF7F8, 0x9F2C, 0xF7F9, 0x9F2F, 0xF7FA, 0x9F39, 0xF7FB, 0x9F37, 0xF7FC, 0x9F3D, 0xF7FD, 0x9F3E, 0xF7FE, 0x9F44, + 0xF840, 0x9CE3, 0xF841, 0x9CE4, 0xF842, 0x9CE5, 0xF843, 0x9CE6, 0xF844, 0x9CE7, 0xF845, 0x9CE8, 0xF846, 0x9CE9, 0xF847, 0x9CEA, + 0xF848, 0x9CEB, 0xF849, 0x9CEC, 0xF84A, 0x9CED, 0xF84B, 0x9CEE, 0xF84C, 0x9CEF, 0xF84D, 0x9CF0, 0xF84E, 0x9CF1, 0xF84F, 0x9CF2, + 0xF850, 0x9CF3, 0xF851, 0x9CF4, 0xF852, 0x9CF5, 0xF853, 0x9CF6, 0xF854, 0x9CF7, 0xF855, 0x9CF8, 0xF856, 0x9CF9, 0xF857, 0x9CFA, + 0xF858, 0x9CFB, 0xF859, 0x9CFC, 0xF85A, 0x9CFD, 0xF85B, 0x9CFE, 0xF85C, 0x9CFF, 0xF85D, 0x9D00, 0xF85E, 0x9D01, 0xF85F, 0x9D02, + 0xF860, 0x9D03, 0xF861, 0x9D04, 0xF862, 0x9D05, 0xF863, 0x9D06, 0xF864, 0x9D07, 0xF865, 0x9D08, 0xF866, 0x9D09, 0xF867, 0x9D0A, + 0xF868, 0x9D0B, 0xF869, 0x9D0C, 0xF86A, 0x9D0D, 0xF86B, 0x9D0E, 0xF86C, 0x9D0F, 0xF86D, 0x9D10, 0xF86E, 0x9D11, 0xF86F, 0x9D12, + 0xF870, 0x9D13, 0xF871, 0x9D14, 0xF872, 0x9D15, 0xF873, 0x9D16, 0xF874, 0x9D17, 0xF875, 0x9D18, 0xF876, 0x9D19, 0xF877, 0x9D1A, + 0xF878, 0x9D1B, 0xF879, 0x9D1C, 0xF87A, 0x9D1D, 0xF87B, 0x9D1E, 0xF87C, 0x9D1F, 0xF87D, 0x9D20, 0xF87E, 0x9D21, 0xF880, 0x9D22, + 0xF881, 0x9D23, 0xF882, 0x9D24, 0xF883, 0x9D25, 0xF884, 0x9D26, 0xF885, 0x9D27, 0xF886, 0x9D28, 0xF887, 0x9D29, 0xF888, 0x9D2A, + 0xF889, 0x9D2B, 0xF88A, 0x9D2C, 0xF88B, 0x9D2D, 0xF88C, 0x9D2E, 0xF88D, 0x9D2F, 0xF88E, 0x9D30, 0xF88F, 0x9D31, 0xF890, 0x9D32, + 0xF891, 0x9D33, 0xF892, 0x9D34, 0xF893, 0x9D35, 0xF894, 0x9D36, 0xF895, 0x9D37, 0xF896, 0x9D38, 0xF897, 0x9D39, 0xF898, 0x9D3A, + 0xF899, 0x9D3B, 0xF89A, 0x9D3C, 0xF89B, 0x9D3D, 0xF89C, 0x9D3E, 0xF89D, 0x9D3F, 0xF89E, 0x9D40, 0xF89F, 0x9D41, 0xF8A0, 0x9D42, + 0xF940, 0x9D43, 0xF941, 0x9D44, 0xF942, 0x9D45, 0xF943, 0x9D46, 0xF944, 0x9D47, 0xF945, 0x9D48, 0xF946, 0x9D49, 0xF947, 0x9D4A, + 0xF948, 0x9D4B, 0xF949, 0x9D4C, 0xF94A, 0x9D4D, 0xF94B, 0x9D4E, 0xF94C, 0x9D4F, 0xF94D, 0x9D50, 0xF94E, 0x9D51, 0xF94F, 0x9D52, + 0xF950, 0x9D53, 0xF951, 0x9D54, 0xF952, 0x9D55, 0xF953, 0x9D56, 0xF954, 0x9D57, 0xF955, 0x9D58, 0xF956, 0x9D59, 0xF957, 0x9D5A, + 0xF958, 0x9D5B, 0xF959, 0x9D5C, 0xF95A, 0x9D5D, 0xF95B, 0x9D5E, 0xF95C, 0x9D5F, 0xF95D, 0x9D60, 0xF95E, 0x9D61, 0xF95F, 0x9D62, + 0xF960, 0x9D63, 0xF961, 0x9D64, 0xF962, 0x9D65, 0xF963, 0x9D66, 0xF964, 0x9D67, 0xF965, 0x9D68, 0xF966, 0x9D69, 0xF967, 0x9D6A, + 0xF968, 0x9D6B, 0xF969, 0x9D6C, 0xF96A, 0x9D6D, 0xF96B, 0x9D6E, 0xF96C, 0x9D6F, 0xF96D, 0x9D70, 0xF96E, 0x9D71, 0xF96F, 0x9D72, + 0xF970, 0x9D73, 0xF971, 0x9D74, 0xF972, 0x9D75, 0xF973, 0x9D76, 0xF974, 0x9D77, 0xF975, 0x9D78, 0xF976, 0x9D79, 0xF977, 0x9D7A, + 0xF978, 0x9D7B, 0xF979, 0x9D7C, 0xF97A, 0x9D7D, 0xF97B, 0x9D7E, 0xF97C, 0x9D7F, 0xF97D, 0x9D80, 0xF97E, 0x9D81, 0xF980, 0x9D82, + 0xF981, 0x9D83, 0xF982, 0x9D84, 0xF983, 0x9D85, 0xF984, 0x9D86, 0xF985, 0x9D87, 0xF986, 0x9D88, 0xF987, 0x9D89, 0xF988, 0x9D8A, + 0xF989, 0x9D8B, 0xF98A, 0x9D8C, 0xF98B, 0x9D8D, 0xF98C, 0x9D8E, 0xF98D, 0x9D8F, 0xF98E, 0x9D90, 0xF98F, 0x9D91, 0xF990, 0x9D92, + 0xF991, 0x9D93, 0xF992, 0x9D94, 0xF993, 0x9D95, 0xF994, 0x9D96, 0xF995, 0x9D97, 0xF996, 0x9D98, 0xF997, 0x9D99, 0xF998, 0x9D9A, + 0xF999, 0x9D9B, 0xF99A, 0x9D9C, 0xF99B, 0x9D9D, 0xF99C, 0x9D9E, 0xF99D, 0x9D9F, 0xF99E, 0x9DA0, 0xF99F, 0x9DA1, 0xF9A0, 0x9DA2, + 0xFA40, 0x9DA3, 0xFA41, 0x9DA4, 0xFA42, 0x9DA5, 0xFA43, 0x9DA6, 0xFA44, 0x9DA7, 0xFA45, 0x9DA8, 0xFA46, 0x9DA9, 0xFA47, 0x9DAA, + 0xFA48, 0x9DAB, 0xFA49, 0x9DAC, 0xFA4A, 0x9DAD, 0xFA4B, 0x9DAE, 0xFA4C, 0x9DAF, 0xFA4D, 0x9DB0, 0xFA4E, 0x9DB1, 0xFA4F, 0x9DB2, + 0xFA50, 0x9DB3, 0xFA51, 0x9DB4, 0xFA52, 0x9DB5, 0xFA53, 0x9DB6, 0xFA54, 0x9DB7, 0xFA55, 0x9DB8, 0xFA56, 0x9DB9, 0xFA57, 0x9DBA, + 0xFA58, 0x9DBB, 0xFA59, 0x9DBC, 0xFA5A, 0x9DBD, 0xFA5B, 0x9DBE, 0xFA5C, 0x9DBF, 0xFA5D, 0x9DC0, 0xFA5E, 0x9DC1, 0xFA5F, 0x9DC2, + 0xFA60, 0x9DC3, 0xFA61, 0x9DC4, 0xFA62, 0x9DC5, 0xFA63, 0x9DC6, 0xFA64, 0x9DC7, 0xFA65, 0x9DC8, 0xFA66, 0x9DC9, 0xFA67, 0x9DCA, + 0xFA68, 0x9DCB, 0xFA69, 0x9DCC, 0xFA6A, 0x9DCD, 0xFA6B, 0x9DCE, 0xFA6C, 0x9DCF, 0xFA6D, 0x9DD0, 0xFA6E, 0x9DD1, 0xFA6F, 0x9DD2, + 0xFA70, 0x9DD3, 0xFA71, 0x9DD4, 0xFA72, 0x9DD5, 0xFA73, 0x9DD6, 0xFA74, 0x9DD7, 0xFA75, 0x9DD8, 0xFA76, 0x9DD9, 0xFA77, 0x9DDA, + 0xFA78, 0x9DDB, 0xFA79, 0x9DDC, 0xFA7A, 0x9DDD, 0xFA7B, 0x9DDE, 0xFA7C, 0x9DDF, 0xFA7D, 0x9DE0, 0xFA7E, 0x9DE1, 0xFA80, 0x9DE2, + 0xFA81, 0x9DE3, 0xFA82, 0x9DE4, 0xFA83, 0x9DE5, 0xFA84, 0x9DE6, 0xFA85, 0x9DE7, 0xFA86, 0x9DE8, 0xFA87, 0x9DE9, 0xFA88, 0x9DEA, + 0xFA89, 0x9DEB, 0xFA8A, 0x9DEC, 0xFA8B, 0x9DED, 0xFA8C, 0x9DEE, 0xFA8D, 0x9DEF, 0xFA8E, 0x9DF0, 0xFA8F, 0x9DF1, 0xFA90, 0x9DF2, + 0xFA91, 0x9DF3, 0xFA92, 0x9DF4, 0xFA93, 0x9DF5, 0xFA94, 0x9DF6, 0xFA95, 0x9DF7, 0xFA96, 0x9DF8, 0xFA97, 0x9DF9, 0xFA98, 0x9DFA, + 0xFA99, 0x9DFB, 0xFA9A, 0x9DFC, 0xFA9B, 0x9DFD, 0xFA9C, 0x9DFE, 0xFA9D, 0x9DFF, 0xFA9E, 0x9E00, 0xFA9F, 0x9E01, 0xFAA0, 0x9E02, + 0xFB40, 0x9E03, 0xFB41, 0x9E04, 0xFB42, 0x9E05, 0xFB43, 0x9E06, 0xFB44, 0x9E07, 0xFB45, 0x9E08, 0xFB46, 0x9E09, 0xFB47, 0x9E0A, + 0xFB48, 0x9E0B, 0xFB49, 0x9E0C, 0xFB4A, 0x9E0D, 0xFB4B, 0x9E0E, 0xFB4C, 0x9E0F, 0xFB4D, 0x9E10, 0xFB4E, 0x9E11, 0xFB4F, 0x9E12, + 0xFB50, 0x9E13, 0xFB51, 0x9E14, 0xFB52, 0x9E15, 0xFB53, 0x9E16, 0xFB54, 0x9E17, 0xFB55, 0x9E18, 0xFB56, 0x9E19, 0xFB57, 0x9E1A, + 0xFB58, 0x9E1B, 0xFB59, 0x9E1C, 0xFB5A, 0x9E1D, 0xFB5B, 0x9E1E, 0xFB5C, 0x9E24, 0xFB5D, 0x9E27, 0xFB5E, 0x9E2E, 0xFB5F, 0x9E30, + 0xFB60, 0x9E34, 0xFB61, 0x9E3B, 0xFB62, 0x9E3C, 0xFB63, 0x9E40, 0xFB64, 0x9E4D, 0xFB65, 0x9E50, 0xFB66, 0x9E52, 0xFB67, 0x9E53, + 0xFB68, 0x9E54, 0xFB69, 0x9E56, 0xFB6A, 0x9E59, 0xFB6B, 0x9E5D, 0xFB6C, 0x9E5F, 0xFB6D, 0x9E60, 0xFB6E, 0x9E61, 0xFB6F, 0x9E62, + 0xFB70, 0x9E65, 0xFB71, 0x9E6E, 0xFB72, 0x9E6F, 0xFB73, 0x9E72, 0xFB74, 0x9E74, 0xFB75, 0x9E75, 0xFB76, 0x9E76, 0xFB77, 0x9E77, + 0xFB78, 0x9E78, 0xFB79, 0x9E79, 0xFB7A, 0x9E7A, 0xFB7B, 0x9E7B, 0xFB7C, 0x9E7C, 0xFB7D, 0x9E7D, 0xFB7E, 0x9E80, 0xFB80, 0x9E81, + 0xFB81, 0x9E83, 0xFB82, 0x9E84, 0xFB83, 0x9E85, 0xFB84, 0x9E86, 0xFB85, 0x9E89, 0xFB86, 0x9E8A, 0xFB87, 0x9E8C, 0xFB88, 0x9E8D, + 0xFB89, 0x9E8E, 0xFB8A, 0x9E8F, 0xFB8B, 0x9E90, 0xFB8C, 0x9E91, 0xFB8D, 0x9E94, 0xFB8E, 0x9E95, 0xFB8F, 0x9E96, 0xFB90, 0x9E97, + 0xFB91, 0x9E98, 0xFB92, 0x9E99, 0xFB93, 0x9E9A, 0xFB94, 0x9E9B, 0xFB95, 0x9E9C, 0xFB96, 0x9E9E, 0xFB97, 0x9EA0, 0xFB98, 0x9EA1, + 0xFB99, 0x9EA2, 0xFB9A, 0x9EA3, 0xFB9B, 0x9EA4, 0xFB9C, 0x9EA5, 0xFB9D, 0x9EA7, 0xFB9E, 0x9EA8, 0xFB9F, 0x9EA9, 0xFBA0, 0x9EAA, + 0xFC40, 0x9EAB, 0xFC41, 0x9EAC, 0xFC42, 0x9EAD, 0xFC43, 0x9EAE, 0xFC44, 0x9EAF, 0xFC45, 0x9EB0, 0xFC46, 0x9EB1, 0xFC47, 0x9EB2, + 0xFC48, 0x9EB3, 0xFC49, 0x9EB5, 0xFC4A, 0x9EB6, 0xFC4B, 0x9EB7, 0xFC4C, 0x9EB9, 0xFC4D, 0x9EBA, 0xFC4E, 0x9EBC, 0xFC4F, 0x9EBF, + 0xFC50, 0x9EC0, 0xFC51, 0x9EC1, 0xFC52, 0x9EC2, 0xFC53, 0x9EC3, 0xFC54, 0x9EC5, 0xFC55, 0x9EC6, 0xFC56, 0x9EC7, 0xFC57, 0x9EC8, + 0xFC58, 0x9ECA, 0xFC59, 0x9ECB, 0xFC5A, 0x9ECC, 0xFC5B, 0x9ED0, 0xFC5C, 0x9ED2, 0xFC5D, 0x9ED3, 0xFC5E, 0x9ED5, 0xFC5F, 0x9ED6, + 0xFC60, 0x9ED7, 0xFC61, 0x9ED9, 0xFC62, 0x9EDA, 0xFC63, 0x9EDE, 0xFC64, 0x9EE1, 0xFC65, 0x9EE3, 0xFC66, 0x9EE4, 0xFC67, 0x9EE6, + 0xFC68, 0x9EE8, 0xFC69, 0x9EEB, 0xFC6A, 0x9EEC, 0xFC6B, 0x9EED, 0xFC6C, 0x9EEE, 0xFC6D, 0x9EF0, 0xFC6E, 0x9EF1, 0xFC6F, 0x9EF2, + 0xFC70, 0x9EF3, 0xFC71, 0x9EF4, 0xFC72, 0x9EF5, 0xFC73, 0x9EF6, 0xFC74, 0x9EF7, 0xFC75, 0x9EF8, 0xFC76, 0x9EFA, 0xFC77, 0x9EFD, + 0xFC78, 0x9EFF, 0xFC79, 0x9F00, 0xFC7A, 0x9F01, 0xFC7B, 0x9F02, 0xFC7C, 0x9F03, 0xFC7D, 0x9F04, 0xFC7E, 0x9F05, 0xFC80, 0x9F06, + 0xFC81, 0x9F07, 0xFC82, 0x9F08, 0xFC83, 0x9F09, 0xFC84, 0x9F0A, 0xFC85, 0x9F0C, 0xFC86, 0x9F0F, 0xFC87, 0x9F11, 0xFC88, 0x9F12, + 0xFC89, 0x9F14, 0xFC8A, 0x9F15, 0xFC8B, 0x9F16, 0xFC8C, 0x9F18, 0xFC8D, 0x9F1A, 0xFC8E, 0x9F1B, 0xFC8F, 0x9F1C, 0xFC90, 0x9F1D, + 0xFC91, 0x9F1E, 0xFC92, 0x9F1F, 0xFC93, 0x9F21, 0xFC94, 0x9F23, 0xFC95, 0x9F24, 0xFC96, 0x9F25, 0xFC97, 0x9F26, 0xFC98, 0x9F27, + 0xFC99, 0x9F28, 0xFC9A, 0x9F29, 0xFC9B, 0x9F2A, 0xFC9C, 0x9F2B, 0xFC9D, 0x9F2D, 0xFC9E, 0x9F2E, 0xFC9F, 0x9F30, 0xFCA0, 0x9F31, + 0xFD40, 0x9F32, 0xFD41, 0x9F33, 0xFD42, 0x9F34, 0xFD43, 0x9F35, 0xFD44, 0x9F36, 0xFD45, 0x9F38, 0xFD46, 0x9F3A, 0xFD47, 0x9F3C, + 0xFD48, 0x9F3F, 0xFD49, 0x9F40, 0xFD4A, 0x9F41, 0xFD4B, 0x9F42, 0xFD4C, 0x9F43, 0xFD4D, 0x9F45, 0xFD4E, 0x9F46, 0xFD4F, 0x9F47, + 0xFD50, 0x9F48, 0xFD51, 0x9F49, 0xFD52, 0x9F4A, 0xFD53, 0x9F4B, 0xFD54, 0x9F4C, 0xFD55, 0x9F4D, 0xFD56, 0x9F4E, 0xFD57, 0x9F4F, + 0xFD58, 0x9F52, 0xFD59, 0x9F53, 0xFD5A, 0x9F54, 0xFD5B, 0x9F55, 0xFD5C, 0x9F56, 0xFD5D, 0x9F57, 0xFD5E, 0x9F58, 0xFD5F, 0x9F59, + 0xFD60, 0x9F5A, 0xFD61, 0x9F5B, 0xFD62, 0x9F5C, 0xFD63, 0x9F5D, 0xFD64, 0x9F5E, 0xFD65, 0x9F5F, 0xFD66, 0x9F60, 0xFD67, 0x9F61, + 0xFD68, 0x9F62, 0xFD69, 0x9F63, 0xFD6A, 0x9F64, 0xFD6B, 0x9F65, 0xFD6C, 0x9F66, 0xFD6D, 0x9F67, 0xFD6E, 0x9F68, 0xFD6F, 0x9F69, + 0xFD70, 0x9F6A, 0xFD71, 0x9F6B, 0xFD72, 0x9F6C, 0xFD73, 0x9F6D, 0xFD74, 0x9F6E, 0xFD75, 0x9F6F, 0xFD76, 0x9F70, 0xFD77, 0x9F71, + 0xFD78, 0x9F72, 0xFD79, 0x9F73, 0xFD7A, 0x9F74, 0xFD7B, 0x9F75, 0xFD7C, 0x9F76, 0xFD7D, 0x9F77, 0xFD7E, 0x9F78, 0xFD80, 0x9F79, + 0xFD81, 0x9F7A, 0xFD82, 0x9F7B, 0xFD83, 0x9F7C, 0xFD84, 0x9F7D, 0xFD85, 0x9F7E, 0xFD86, 0x9F81, 0xFD87, 0x9F82, 0xFD88, 0x9F8D, + 0xFD89, 0x9F8E, 0xFD8A, 0x9F8F, 0xFD8B, 0x9F90, 0xFD8C, 0x9F91, 0xFD8D, 0x9F92, 0xFD8E, 0x9F93, 0xFD8F, 0x9F94, 0xFD90, 0x9F95, + 0xFD91, 0x9F96, 0xFD92, 0x9F97, 0xFD93, 0x9F98, 0xFD94, 0x9F9C, 0xFD95, 0x9F9D, 0xFD96, 0x9F9E, 0xFD97, 0x9FA1, 0xFD98, 0x9FA2, + 0xFD99, 0x9FA3, 0xFD9A, 0x9FA4, 0xFD9B, 0x9FA5, 0xFD9C, 0xF92C, 0xFD9D, 0xF979, 0xFD9E, 0xF995, 0xFD9F, 0xF9E7, 0xFDA0, 0xF9F1, + 0xFE40, 0xFA0C, 0xFE41, 0xFA0D, 0xFE42, 0xFA0E, 0xFE43, 0xFA0F, 0xFE44, 0xFA11, 0xFE45, 0xFA13, 0xFE46, 0xFA14, 0xFE47, 0xFA18, + 0xFE48, 0xFA1F, 0xFE49, 0xFA20, 0xFE4A, 0xFA21, 0xFE4B, 0xFA23, 0xFE4C, 0xFA24, 0xFE4D, 0xFA27, 0xFE4E, 0xFA28, 0xFE4F, 0xFA29, + 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 949 || FF_CODE_PAGE == 0 /* Korean */ +static const WCHAR uni2oem949[] = { /* Unicode --> Korean pairs */ + 0x00A1, 0xA2AE, 0x00A4, 0xA2B4, 0x00A7, 0xA1D7, 0x00A8, 0xA1A7, 0x00AA, 0xA8A3, 0x00AD, 0xA1A9, 0x00AE, 0xA2E7, 0x00B0, 0xA1C6, + 0x00B1, 0xA1BE, 0x00B2, 0xA9F7, 0x00B3, 0xA9F8, 0x00B4, 0xA2A5, 0x00B6, 0xA2D2, 0x00B7, 0xA1A4, 0x00B8, 0xA2AC, 0x00B9, 0xA9F6, + 0x00BA, 0xA8AC, 0x00BC, 0xA8F9, 0x00BD, 0xA8F6, 0x00BE, 0xA8FA, 0x00BF, 0xA2AF, 0x00C6, 0xA8A1, 0x00D0, 0xA8A2, 0x00D7, 0xA1BF, + 0x00D8, 0xA8AA, 0x00DE, 0xA8AD, 0x00DF, 0xA9AC, 0x00E6, 0xA9A1, 0x00F0, 0xA9A3, 0x00F7, 0xA1C0, 0x00F8, 0xA9AA, 0x00FE, 0xA9AD, + 0x0111, 0xA9A2, 0x0126, 0xA8A4, 0x0127, 0xA9A4, 0x0131, 0xA9A5, 0x0132, 0xA8A6, 0x0133, 0xA9A6, 0x0138, 0xA9A7, 0x013F, 0xA8A8, + 0x0140, 0xA9A8, 0x0141, 0xA8A9, 0x0142, 0xA9A9, 0x0149, 0xA9B0, 0x014A, 0xA8AF, 0x014B, 0xA9AF, 0x0152, 0xA8AB, 0x0153, 0xA9AB, + 0x0166, 0xA8AE, 0x0167, 0xA9AE, 0x02C7, 0xA2A7, 0x02D0, 0xA2B0, 0x02D8, 0xA2A8, 0x02D9, 0xA2AB, 0x02DA, 0xA2AA, 0x02DB, 0xA2AD, + 0x02DD, 0xA2A9, 0x0391, 0xA5C1, 0x0392, 0xA5C2, 0x0393, 0xA5C3, 0x0394, 0xA5C4, 0x0395, 0xA5C5, 0x0396, 0xA5C6, 0x0397, 0xA5C7, + 0x0398, 0xA5C8, 0x0399, 0xA5C9, 0x039A, 0xA5CA, 0x039B, 0xA5CB, 0x039C, 0xA5CC, 0x039D, 0xA5CD, 0x039E, 0xA5CE, 0x039F, 0xA5CF, + 0x03A0, 0xA5D0, 0x03A1, 0xA5D1, 0x03A3, 0xA5D2, 0x03A4, 0xA5D3, 0x03A5, 0xA5D4, 0x03A6, 0xA5D5, 0x03A7, 0xA5D6, 0x03A8, 0xA5D7, + 0x03A9, 0xA5D8, 0x03B1, 0xA5E1, 0x03B2, 0xA5E2, 0x03B3, 0xA5E3, 0x03B4, 0xA5E4, 0x03B5, 0xA5E5, 0x03B6, 0xA5E6, 0x03B7, 0xA5E7, + 0x03B8, 0xA5E8, 0x03B9, 0xA5E9, 0x03BA, 0xA5EA, 0x03BB, 0xA5EB, 0x03BC, 0xA5EC, 0x03BD, 0xA5ED, 0x03BE, 0xA5EE, 0x03BF, 0xA5EF, + 0x03C0, 0xA5F0, 0x03C1, 0xA5F1, 0x03C3, 0xA5F2, 0x03C4, 0xA5F3, 0x03C5, 0xA5F4, 0x03C6, 0xA5F5, 0x03C7, 0xA5F6, 0x03C8, 0xA5F7, + 0x03C9, 0xA5F8, 0x0401, 0xACA7, 0x0410, 0xACA1, 0x0411, 0xACA2, 0x0412, 0xACA3, 0x0413, 0xACA4, 0x0414, 0xACA5, 0x0415, 0xACA6, + 0x0416, 0xACA8, 0x0417, 0xACA9, 0x0418, 0xACAA, 0x0419, 0xACAB, 0x041A, 0xACAC, 0x041B, 0xACAD, 0x041C, 0xACAE, 0x041D, 0xACAF, + 0x041E, 0xACB0, 0x041F, 0xACB1, 0x0420, 0xACB2, 0x0421, 0xACB3, 0x0422, 0xACB4, 0x0423, 0xACB5, 0x0424, 0xACB6, 0x0425, 0xACB7, + 0x0426, 0xACB8, 0x0427, 0xACB9, 0x0428, 0xACBA, 0x0429, 0xACBB, 0x042A, 0xACBC, 0x042B, 0xACBD, 0x042C, 0xACBE, 0x042D, 0xACBF, + 0x042E, 0xACC0, 0x042F, 0xACC1, 0x0430, 0xACD1, 0x0431, 0xACD2, 0x0432, 0xACD3, 0x0433, 0xACD4, 0x0434, 0xACD5, 0x0435, 0xACD6, + 0x0436, 0xACD8, 0x0437, 0xACD9, 0x0438, 0xACDA, 0x0439, 0xACDB, 0x043A, 0xACDC, 0x043B, 0xACDD, 0x043C, 0xACDE, 0x043D, 0xACDF, + 0x043E, 0xACE0, 0x043F, 0xACE1, 0x0440, 0xACE2, 0x0441, 0xACE3, 0x0442, 0xACE4, 0x0443, 0xACE5, 0x0444, 0xACE6, 0x0445, 0xACE7, + 0x0446, 0xACE8, 0x0447, 0xACE9, 0x0448, 0xACEA, 0x0449, 0xACEB, 0x044A, 0xACEC, 0x044B, 0xACED, 0x044C, 0xACEE, 0x044D, 0xACEF, + 0x044E, 0xACF0, 0x044F, 0xACF1, 0x0451, 0xACD7, 0x2015, 0xA1AA, 0x2018, 0xA1AE, 0x2019, 0xA1AF, 0x201C, 0xA1B0, 0x201D, 0xA1B1, + 0x2020, 0xA2D3, 0x2021, 0xA2D4, 0x2025, 0xA1A5, 0x2026, 0xA1A6, 0x2030, 0xA2B6, 0x2032, 0xA1C7, 0x2033, 0xA1C8, 0x203B, 0xA1D8, + 0x2074, 0xA9F9, 0x207F, 0xA9FA, 0x2081, 0xA9FB, 0x2082, 0xA9FC, 0x2083, 0xA9FD, 0x2084, 0xA9FE, 0x20AC, 0xA2E6, 0x2103, 0xA1C9, + 0x2109, 0xA2B5, 0x2113, 0xA7A4, 0x2116, 0xA2E0, 0x2121, 0xA2E5, 0x2122, 0xA2E2, 0x2126, 0xA7D9, 0x212B, 0xA1CA, 0x2153, 0xA8F7, + 0x2154, 0xA8F8, 0x215B, 0xA8FB, 0x215C, 0xA8FC, 0x215D, 0xA8FD, 0x215E, 0xA8FE, 0x2160, 0xA5B0, 0x2161, 0xA5B1, 0x2162, 0xA5B2, + 0x2163, 0xA5B3, 0x2164, 0xA5B4, 0x2165, 0xA5B5, 0x2166, 0xA5B6, 0x2167, 0xA5B7, 0x2168, 0xA5B8, 0x2169, 0xA5B9, 0x2170, 0xA5A1, + 0x2171, 0xA5A2, 0x2172, 0xA5A3, 0x2173, 0xA5A4, 0x2174, 0xA5A5, 0x2175, 0xA5A6, 0x2176, 0xA5A7, 0x2177, 0xA5A8, 0x2178, 0xA5A9, + 0x2179, 0xA5AA, 0x2190, 0xA1E7, 0x2191, 0xA1E8, 0x2192, 0xA1E6, 0x2193, 0xA1E9, 0x2194, 0xA1EA, 0x2195, 0xA2D5, 0x2196, 0xA2D8, + 0x2197, 0xA2D6, 0x2198, 0xA2D9, 0x2199, 0xA2D7, 0x21D2, 0xA2A1, 0x21D4, 0xA2A2, 0x2200, 0xA2A3, 0x2202, 0xA1D3, 0x2203, 0xA2A4, + 0x2207, 0xA1D4, 0x2208, 0xA1F4, 0x220B, 0xA1F5, 0x220F, 0xA2B3, 0x2211, 0xA2B2, 0x221A, 0xA1EE, 0x221D, 0xA1F0, 0x221E, 0xA1C4, + 0x2220, 0xA1D0, 0x2225, 0xA1AB, 0x2227, 0xA1FC, 0x2228, 0xA1FD, 0x2229, 0xA1FB, 0x222A, 0xA1FA, 0x222B, 0xA1F2, 0x222C, 0xA1F3, + 0x222E, 0xA2B1, 0x2234, 0xA1C5, 0x2235, 0xA1F1, 0x223C, 0xA1AD, 0x223D, 0xA1EF, 0x2252, 0xA1D6, 0x2260, 0xA1C1, 0x2261, 0xA1D5, + 0x2264, 0xA1C2, 0x2265, 0xA1C3, 0x226A, 0xA1EC, 0x226B, 0xA1ED, 0x2282, 0xA1F8, 0x2283, 0xA1F9, 0x2286, 0xA1F6, 0x2287, 0xA1F7, + 0x2299, 0xA2C1, 0x22A5, 0xA1D1, 0x2312, 0xA1D2, 0x2460, 0xA8E7, 0x2461, 0xA8E8, 0x2462, 0xA8E9, 0x2463, 0xA8EA, 0x2464, 0xA8EB, + 0x2465, 0xA8EC, 0x2466, 0xA8ED, 0x2467, 0xA8EE, 0x2468, 0xA8EF, 0x2469, 0xA8F0, 0x246A, 0xA8F1, 0x246B, 0xA8F2, 0x246C, 0xA8F3, + 0x246D, 0xA8F4, 0x246E, 0xA8F5, 0x2474, 0xA9E7, 0x2475, 0xA9E8, 0x2476, 0xA9E9, 0x2477, 0xA9EA, 0x2478, 0xA9EB, 0x2479, 0xA9EC, + 0x247A, 0xA9ED, 0x247B, 0xA9EE, 0x247C, 0xA9EF, 0x247D, 0xA9F0, 0x247E, 0xA9F1, 0x247F, 0xA9F2, 0x2480, 0xA9F3, 0x2481, 0xA9F4, + 0x2482, 0xA9F5, 0x249C, 0xA9CD, 0x249D, 0xA9CE, 0x249E, 0xA9CF, 0x249F, 0xA9D0, 0x24A0, 0xA9D1, 0x24A1, 0xA9D2, 0x24A2, 0xA9D3, + 0x24A3, 0xA9D4, 0x24A4, 0xA9D5, 0x24A5, 0xA9D6, 0x24A6, 0xA9D7, 0x24A7, 0xA9D8, 0x24A8, 0xA9D9, 0x24A9, 0xA9DA, 0x24AA, 0xA9DB, + 0x24AB, 0xA9DC, 0x24AC, 0xA9DD, 0x24AD, 0xA9DE, 0x24AE, 0xA9DF, 0x24AF, 0xA9E0, 0x24B0, 0xA9E1, 0x24B1, 0xA9E2, 0x24B2, 0xA9E3, + 0x24B3, 0xA9E4, 0x24B4, 0xA9E5, 0x24B5, 0xA9E6, 0x24D0, 0xA8CD, 0x24D1, 0xA8CE, 0x24D2, 0xA8CF, 0x24D3, 0xA8D0, 0x24D4, 0xA8D1, + 0x24D5, 0xA8D2, 0x24D6, 0xA8D3, 0x24D7, 0xA8D4, 0x24D8, 0xA8D5, 0x24D9, 0xA8D6, 0x24DA, 0xA8D7, 0x24DB, 0xA8D8, 0x24DC, 0xA8D9, + 0x24DD, 0xA8DA, 0x24DE, 0xA8DB, 0x24DF, 0xA8DC, 0x24E0, 0xA8DD, 0x24E1, 0xA8DE, 0x24E2, 0xA8DF, 0x24E3, 0xA8E0, 0x24E4, 0xA8E1, + 0x24E5, 0xA8E2, 0x24E6, 0xA8E3, 0x24E7, 0xA8E4, 0x24E8, 0xA8E5, 0x24E9, 0xA8E6, 0x2500, 0xA6A1, 0x2501, 0xA6AC, 0x2502, 0xA6A2, + 0x2503, 0xA6AD, 0x250C, 0xA6A3, 0x250D, 0xA6C8, 0x250E, 0xA6C7, 0x250F, 0xA6AE, 0x2510, 0xA6A4, 0x2511, 0xA6C2, 0x2512, 0xA6C1, + 0x2513, 0xA6AF, 0x2514, 0xA6A6, 0x2515, 0xA6C6, 0x2516, 0xA6C5, 0x2517, 0xA6B1, 0x2518, 0xA6A5, 0x2519, 0xA6C4, 0x251A, 0xA6C3, + 0x251B, 0xA6B0, 0x251C, 0xA6A7, 0x251D, 0xA6BC, 0x251E, 0xA6C9, 0x251F, 0xA6CA, 0x2520, 0xA6B7, 0x2521, 0xA6CB, 0x2522, 0xA6CC, + 0x2523, 0xA6B2, 0x2524, 0xA6A9, 0x2525, 0xA6BE, 0x2526, 0xA6CD, 0x2527, 0xA6CE, 0x2528, 0xA6B9, 0x2529, 0xA6CF, 0x252A, 0xA6D0, + 0x252B, 0xA6B4, 0x252C, 0xA6A8, 0x252D, 0xA6D1, 0x252E, 0xA6D2, 0x252F, 0xA6B8, 0x2530, 0xA6BD, 0x2531, 0xA6D3, 0x2532, 0xA6D4, + 0x2533, 0xA6B3, 0x2534, 0xA6AA, 0x2535, 0xA6D5, 0x2536, 0xA6D6, 0x2537, 0xA6BA, 0x2538, 0xA6BF, 0x2539, 0xA6D7, 0x253A, 0xA6D8, + 0x253B, 0xA6B5, 0x253C, 0xA6AB, 0x253D, 0xA6D9, 0x253E, 0xA6DA, 0x253F, 0xA6BB, 0x2540, 0xA6DB, 0x2541, 0xA6DC, 0x2542, 0xA6C0, + 0x2543, 0xA6DD, 0x2544, 0xA6DE, 0x2545, 0xA6DF, 0x2546, 0xA6E0, 0x2547, 0xA6E1, 0x2548, 0xA6E2, 0x2549, 0xA6E3, 0x254A, 0xA6E4, + 0x254B, 0xA6B6, 0x2592, 0xA2C6, 0x25A0, 0xA1E1, 0x25A1, 0xA1E0, 0x25A3, 0xA2C3, 0x25A4, 0xA2C7, 0x25A5, 0xA2C8, 0x25A6, 0xA2CB, + 0x25A7, 0xA2CA, 0x25A8, 0xA2C9, 0x25A9, 0xA2CC, 0x25B2, 0xA1E3, 0x25B3, 0xA1E2, 0x25B6, 0xA2BA, 0x25B7, 0xA2B9, 0x25BC, 0xA1E5, + 0x25BD, 0xA1E4, 0x25C0, 0xA2B8, 0x25C1, 0xA2B7, 0x25C6, 0xA1DF, 0x25C7, 0xA1DE, 0x25C8, 0xA2C2, 0x25CB, 0xA1DB, 0x25CE, 0xA1DD, + 0x25CF, 0xA1DC, 0x25D0, 0xA2C4, 0x25D1, 0xA2C5, 0x2605, 0xA1DA, 0x2606, 0xA1D9, 0x260E, 0xA2CF, 0x260F, 0xA2CE, 0x261C, 0xA2D0, + 0x261E, 0xA2D1, 0x2640, 0xA1CF, 0x2642, 0xA1CE, 0x2660, 0xA2BC, 0x2661, 0xA2BD, 0x2663, 0xA2C0, 0x2664, 0xA2BB, 0x2665, 0xA2BE, + 0x2667, 0xA2BF, 0x2668, 0xA2CD, 0x2669, 0xA2DB, 0x266A, 0xA2DC, 0x266C, 0xA2DD, 0x266D, 0xA2DA, 0x3000, 0xA1A1, 0x3001, 0xA1A2, + 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3008, 0xA1B4, 0x3009, 0xA1B5, 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9, + 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BC, 0x3011, 0xA1BD, 0x3013, 0xA1EB, 0x3014, 0xA1B2, 0x3015, 0xA1B3, 0x3041, 0xAAA1, + 0x3042, 0xAAA2, 0x3043, 0xAAA3, 0x3044, 0xAAA4, 0x3045, 0xAAA5, 0x3046, 0xAAA6, 0x3047, 0xAAA7, 0x3048, 0xAAA8, 0x3049, 0xAAA9, + 0x304A, 0xAAAA, 0x304B, 0xAAAB, 0x304C, 0xAAAC, 0x304D, 0xAAAD, 0x304E, 0xAAAE, 0x304F, 0xAAAF, 0x3050, 0xAAB0, 0x3051, 0xAAB1, + 0x3052, 0xAAB2, 0x3053, 0xAAB3, 0x3054, 0xAAB4, 0x3055, 0xAAB5, 0x3056, 0xAAB6, 0x3057, 0xAAB7, 0x3058, 0xAAB8, 0x3059, 0xAAB9, + 0x305A, 0xAABA, 0x305B, 0xAABB, 0x305C, 0xAABC, 0x305D, 0xAABD, 0x305E, 0xAABE, 0x305F, 0xAABF, 0x3060, 0xAAC0, 0x3061, 0xAAC1, + 0x3062, 0xAAC2, 0x3063, 0xAAC3, 0x3064, 0xAAC4, 0x3065, 0xAAC5, 0x3066, 0xAAC6, 0x3067, 0xAAC7, 0x3068, 0xAAC8, 0x3069, 0xAAC9, + 0x306A, 0xAACA, 0x306B, 0xAACB, 0x306C, 0xAACC, 0x306D, 0xAACD, 0x306E, 0xAACE, 0x306F, 0xAACF, 0x3070, 0xAAD0, 0x3071, 0xAAD1, + 0x3072, 0xAAD2, 0x3073, 0xAAD3, 0x3074, 0xAAD4, 0x3075, 0xAAD5, 0x3076, 0xAAD6, 0x3077, 0xAAD7, 0x3078, 0xAAD8, 0x3079, 0xAAD9, + 0x307A, 0xAADA, 0x307B, 0xAADB, 0x307C, 0xAADC, 0x307D, 0xAADD, 0x307E, 0xAADE, 0x307F, 0xAADF, 0x3080, 0xAAE0, 0x3081, 0xAAE1, + 0x3082, 0xAAE2, 0x3083, 0xAAE3, 0x3084, 0xAAE4, 0x3085, 0xAAE5, 0x3086, 0xAAE6, 0x3087, 0xAAE7, 0x3088, 0xAAE8, 0x3089, 0xAAE9, + 0x308A, 0xAAEA, 0x308B, 0xAAEB, 0x308C, 0xAAEC, 0x308D, 0xAAED, 0x308E, 0xAAEE, 0x308F, 0xAAEF, 0x3090, 0xAAF0, 0x3091, 0xAAF1, + 0x3092, 0xAAF2, 0x3093, 0xAAF3, 0x30A1, 0xABA1, 0x30A2, 0xABA2, 0x30A3, 0xABA3, 0x30A4, 0xABA4, 0x30A5, 0xABA5, 0x30A6, 0xABA6, + 0x30A7, 0xABA7, 0x30A8, 0xABA8, 0x30A9, 0xABA9, 0x30AA, 0xABAA, 0x30AB, 0xABAB, 0x30AC, 0xABAC, 0x30AD, 0xABAD, 0x30AE, 0xABAE, + 0x30AF, 0xABAF, 0x30B0, 0xABB0, 0x30B1, 0xABB1, 0x30B2, 0xABB2, 0x30B3, 0xABB3, 0x30B4, 0xABB4, 0x30B5, 0xABB5, 0x30B6, 0xABB6, + 0x30B7, 0xABB7, 0x30B8, 0xABB8, 0x30B9, 0xABB9, 0x30BA, 0xABBA, 0x30BB, 0xABBB, 0x30BC, 0xABBC, 0x30BD, 0xABBD, 0x30BE, 0xABBE, + 0x30BF, 0xABBF, 0x30C0, 0xABC0, 0x30C1, 0xABC1, 0x30C2, 0xABC2, 0x30C3, 0xABC3, 0x30C4, 0xABC4, 0x30C5, 0xABC5, 0x30C6, 0xABC6, + 0x30C7, 0xABC7, 0x30C8, 0xABC8, 0x30C9, 0xABC9, 0x30CA, 0xABCA, 0x30CB, 0xABCB, 0x30CC, 0xABCC, 0x30CD, 0xABCD, 0x30CE, 0xABCE, + 0x30CF, 0xABCF, 0x30D0, 0xABD0, 0x30D1, 0xABD1, 0x30D2, 0xABD2, 0x30D3, 0xABD3, 0x30D4, 0xABD4, 0x30D5, 0xABD5, 0x30D6, 0xABD6, + 0x30D7, 0xABD7, 0x30D8, 0xABD8, 0x30D9, 0xABD9, 0x30DA, 0xABDA, 0x30DB, 0xABDB, 0x30DC, 0xABDC, 0x30DD, 0xABDD, 0x30DE, 0xABDE, + 0x30DF, 0xABDF, 0x30E0, 0xABE0, 0x30E1, 0xABE1, 0x30E2, 0xABE2, 0x30E3, 0xABE3, 0x30E4, 0xABE4, 0x30E5, 0xABE5, 0x30E6, 0xABE6, + 0x30E7, 0xABE7, 0x30E8, 0xABE8, 0x30E9, 0xABE9, 0x30EA, 0xABEA, 0x30EB, 0xABEB, 0x30EC, 0xABEC, 0x30ED, 0xABED, 0x30EE, 0xABEE, + 0x30EF, 0xABEF, 0x30F0, 0xABF0, 0x30F1, 0xABF1, 0x30F2, 0xABF2, 0x30F3, 0xABF3, 0x30F4, 0xABF4, 0x30F5, 0xABF5, 0x30F6, 0xABF6, + 0x3131, 0xA4A1, 0x3132, 0xA4A2, 0x3133, 0xA4A3, 0x3134, 0xA4A4, 0x3135, 0xA4A5, 0x3136, 0xA4A6, 0x3137, 0xA4A7, 0x3138, 0xA4A8, + 0x3139, 0xA4A9, 0x313A, 0xA4AA, 0x313B, 0xA4AB, 0x313C, 0xA4AC, 0x313D, 0xA4AD, 0x313E, 0xA4AE, 0x313F, 0xA4AF, 0x3140, 0xA4B0, + 0x3141, 0xA4B1, 0x3142, 0xA4B2, 0x3143, 0xA4B3, 0x3144, 0xA4B4, 0x3145, 0xA4B5, 0x3146, 0xA4B6, 0x3147, 0xA4B7, 0x3148, 0xA4B8, + 0x3149, 0xA4B9, 0x314A, 0xA4BA, 0x314B, 0xA4BB, 0x314C, 0xA4BC, 0x314D, 0xA4BD, 0x314E, 0xA4BE, 0x314F, 0xA4BF, 0x3150, 0xA4C0, + 0x3151, 0xA4C1, 0x3152, 0xA4C2, 0x3153, 0xA4C3, 0x3154, 0xA4C4, 0x3155, 0xA4C5, 0x3156, 0xA4C6, 0x3157, 0xA4C7, 0x3158, 0xA4C8, + 0x3159, 0xA4C9, 0x315A, 0xA4CA, 0x315B, 0xA4CB, 0x315C, 0xA4CC, 0x315D, 0xA4CD, 0x315E, 0xA4CE, 0x315F, 0xA4CF, 0x3160, 0xA4D0, + 0x3161, 0xA4D1, 0x3162, 0xA4D2, 0x3163, 0xA4D3, 0x3164, 0xA4D4, 0x3165, 0xA4D5, 0x3166, 0xA4D6, 0x3167, 0xA4D7, 0x3168, 0xA4D8, + 0x3169, 0xA4D9, 0x316A, 0xA4DA, 0x316B, 0xA4DB, 0x316C, 0xA4DC, 0x316D, 0xA4DD, 0x316E, 0xA4DE, 0x316F, 0xA4DF, 0x3170, 0xA4E0, + 0x3171, 0xA4E1, 0x3172, 0xA4E2, 0x3173, 0xA4E3, 0x3174, 0xA4E4, 0x3175, 0xA4E5, 0x3176, 0xA4E6, 0x3177, 0xA4E7, 0x3178, 0xA4E8, + 0x3179, 0xA4E9, 0x317A, 0xA4EA, 0x317B, 0xA4EB, 0x317C, 0xA4EC, 0x317D, 0xA4ED, 0x317E, 0xA4EE, 0x317F, 0xA4EF, 0x3180, 0xA4F0, + 0x3181, 0xA4F1, 0x3182, 0xA4F2, 0x3183, 0xA4F3, 0x3184, 0xA4F4, 0x3185, 0xA4F5, 0x3186, 0xA4F6, 0x3187, 0xA4F7, 0x3188, 0xA4F8, + 0x3189, 0xA4F9, 0x318A, 0xA4FA, 0x318B, 0xA4FB, 0x318C, 0xA4FC, 0x318D, 0xA4FD, 0x318E, 0xA4FE, 0x3200, 0xA9B1, 0x3201, 0xA9B2, + 0x3202, 0xA9B3, 0x3203, 0xA9B4, 0x3204, 0xA9B5, 0x3205, 0xA9B6, 0x3206, 0xA9B7, 0x3207, 0xA9B8, 0x3208, 0xA9B9, 0x3209, 0xA9BA, + 0x320A, 0xA9BB, 0x320B, 0xA9BC, 0x320C, 0xA9BD, 0x320D, 0xA9BE, 0x320E, 0xA9BF, 0x320F, 0xA9C0, 0x3210, 0xA9C1, 0x3211, 0xA9C2, + 0x3212, 0xA9C3, 0x3213, 0xA9C4, 0x3214, 0xA9C5, 0x3215, 0xA9C6, 0x3216, 0xA9C7, 0x3217, 0xA9C8, 0x3218, 0xA9C9, 0x3219, 0xA9CA, + 0x321A, 0xA9CB, 0x321B, 0xA9CC, 0x321C, 0xA2DF, 0x3260, 0xA8B1, 0x3261, 0xA8B2, 0x3262, 0xA8B3, 0x3263, 0xA8B4, 0x3264, 0xA8B5, + 0x3265, 0xA8B6, 0x3266, 0xA8B7, 0x3267, 0xA8B8, 0x3268, 0xA8B9, 0x3269, 0xA8BA, 0x326A, 0xA8BB, 0x326B, 0xA8BC, 0x326C, 0xA8BD, + 0x326D, 0xA8BE, 0x326E, 0xA8BF, 0x326F, 0xA8C0, 0x3270, 0xA8C1, 0x3271, 0xA8C2, 0x3272, 0xA8C3, 0x3273, 0xA8C4, 0x3274, 0xA8C5, + 0x3275, 0xA8C6, 0x3276, 0xA8C7, 0x3277, 0xA8C8, 0x3278, 0xA8C9, 0x3279, 0xA8CA, 0x327A, 0xA8CB, 0x327B, 0xA8CC, 0x327F, 0xA2DE, + 0x3380, 0xA7C9, 0x3381, 0xA7CA, 0x3382, 0xA7CB, 0x3383, 0xA7CC, 0x3384, 0xA7CD, 0x3388, 0xA7BA, 0x3389, 0xA7BB, 0x338A, 0xA7DC, + 0x338B, 0xA7DD, 0x338C, 0xA7DE, 0x338D, 0xA7B6, 0x338E, 0xA7B7, 0x338F, 0xA7B8, 0x3390, 0xA7D4, 0x3391, 0xA7D5, 0x3392, 0xA7D6, + 0x3393, 0xA7D7, 0x3394, 0xA7D8, 0x3395, 0xA7A1, 0x3396, 0xA7A2, 0x3397, 0xA7A3, 0x3398, 0xA7A5, 0x3399, 0xA7AB, 0x339A, 0xA7AC, + 0x339B, 0xA7AD, 0x339C, 0xA7AE, 0x339D, 0xA7AF, 0x339E, 0xA7B0, 0x339F, 0xA7B1, 0x33A0, 0xA7B2, 0x33A1, 0xA7B3, 0x33A2, 0xA7B4, + 0x33A3, 0xA7A7, 0x33A4, 0xA7A8, 0x33A5, 0xA7A9, 0x33A6, 0xA7AA, 0x33A7, 0xA7BD, 0x33A8, 0xA7BE, 0x33A9, 0xA7E5, 0x33AA, 0xA7E6, + 0x33AB, 0xA7E7, 0x33AC, 0xA7E8, 0x33AD, 0xA7E1, 0x33AE, 0xA7E2, 0x33AF, 0xA7E3, 0x33B0, 0xA7BF, 0x33B1, 0xA7C0, 0x33B2, 0xA7C1, + 0x33B3, 0xA7C2, 0x33B4, 0xA7C3, 0x33B5, 0xA7C4, 0x33B6, 0xA7C5, 0x33B7, 0xA7C6, 0x33B8, 0xA7C7, 0x33B9, 0xA7C8, 0x33BA, 0xA7CE, + 0x33BB, 0xA7CF, 0x33BC, 0xA7D0, 0x33BD, 0xA7D1, 0x33BE, 0xA7D2, 0x33BF, 0xA7D3, 0x33C0, 0xA7DA, 0x33C1, 0xA7DB, 0x33C2, 0xA2E3, + 0x33C3, 0xA7EC, 0x33C4, 0xA7A6, 0x33C5, 0xA7E0, 0x33C6, 0xA7EF, 0x33C7, 0xA2E1, 0x33C8, 0xA7BC, 0x33C9, 0xA7ED, 0x33CA, 0xA7B5, + 0x33CF, 0xA7B9, 0x33D0, 0xA7EA, 0x33D3, 0xA7EB, 0x33D6, 0xA7DF, 0x33D8, 0xA2E4, 0x33DB, 0xA7E4, 0x33DC, 0xA7EE, 0x33DD, 0xA7E9, + 0x4E00, 0xECE9, 0x4E01, 0xEFCB, 0x4E03, 0xF6D2, 0x4E07, 0xD8B2, 0x4E08, 0xEDDB, 0x4E09, 0xDFB2, 0x4E0A, 0xDFBE, 0x4E0B, 0xF9BB, + 0x4E0D, 0xDCF4, 0x4E11, 0xF5E4, 0x4E14, 0xF3A6, 0x4E15, 0xDDE0, 0x4E16, 0xE1A6, 0x4E18, 0xCEF8, 0x4E19, 0xDCB0, 0x4E1E, 0xE3AA, + 0x4E2D, 0xF1E9, 0x4E32, 0xCDFA, 0x4E38, 0xFCAF, 0x4E39, 0xD3A1, 0x4E3B, 0xF1AB, 0x4E42, 0xE7D1, 0x4E43, 0xD2AC, 0x4E45, 0xCEF9, + 0x4E4B, 0xF1FD, 0x4E4D, 0xDEBF, 0x4E4E, 0xFBBA, 0x4E4F, 0xF9B9, 0x4E56, 0xCED2, 0x4E58, 0xE3AB, 0x4E59, 0xEBE0, 0x4E5D, 0xCEFA, + 0x4E5E, 0xCBF7, 0x4E5F, 0xE5A5, 0x4E6B, 0xCAE1, 0x4E6D, 0xD4CC, 0x4E73, 0xEAE1, 0x4E76, 0xDCE3, 0x4E77, 0xDFAD, 0x4E7E, 0xCBEB, + 0x4E82, 0xD5AF, 0x4E86, 0xD6F5, 0x4E88, 0xE5F8, 0x4E8B, 0xDEC0, 0x4E8C, 0xECA3, 0x4E8E, 0xE9CD, 0x4E90, 0xEAA7, 0x4E91, 0xE9F6, + 0x4E92, 0xFBBB, 0x4E94, 0xE7E9, 0x4E95, 0xEFCC, 0x4E98, 0xD0E6, 0x4E9B, 0xDEC1, 0x4E9E, 0xE4AC, 0x4EA1, 0xD8CC, 0x4EA2, 0xF9F1, + 0x4EA4, 0xCEDF, 0x4EA5, 0xFAA4, 0x4EA6, 0xE6B2, 0x4EA8, 0xFAFB, 0x4EAB, 0xFABD, 0x4EAC, 0xCCC8, 0x4EAD, 0xEFCD, 0x4EAE, 0xD5D5, + 0x4EB6, 0xD3A2, 0x4EBA, 0xECD1, 0x4EC0, 0xE4A7, 0x4EC1, 0xECD2, 0x4EC4, 0xF6B1, 0x4EC7, 0xCEFB, 0x4ECA, 0xD0D1, 0x4ECB, 0xCBBF, + 0x4ECD, 0xEDA4, 0x4ED4, 0xEDA8, 0x4ED5, 0xDEC2, 0x4ED6, 0xF6E2, 0x4ED7, 0xEDDC, 0x4ED8, 0xDCF5, 0x4ED9, 0xE0B9, 0x4EDD, 0xD4CE, + 0x4EDF, 0xF4B5, 0x4EE3, 0xD3DB, 0x4EE4, 0xD6B5, 0x4EE5, 0xECA4, 0x4EF0, 0xE4E6, 0x4EF2, 0xF1EA, 0x4EF6, 0xCBEC, 0x4EF7, 0xCBC0, + 0x4EFB, 0xECF2, 0x4F01, 0xD0EA, 0x4F09, 0xF9F2, 0x4F0A, 0xECA5, 0x4F0B, 0xD0DF, 0x4F0D, 0xE7EA, 0x4F0E, 0xD0EB, 0x4F0F, 0xDCD1, + 0x4F10, 0xDBE9, 0x4F11, 0xFDCC, 0x4F2F, 0xDBD7, 0x4F34, 0xDAE1, 0x4F36, 0xD6B6, 0x4F38, 0xE3DF, 0x4F3A, 0xDEC3, 0x4F3C, 0xDEC4, + 0x4F3D, 0xCAA1, 0x4F43, 0xEEEC, 0x4F46, 0xD3A3, 0x4F47, 0xEEB7, 0x4F48, 0xF8CF, 0x4F4D, 0xEAC8, 0x4F4E, 0xEEB8, 0x4F4F, 0xF1AC, + 0x4F50, 0xF1A5, 0x4F51, 0xE9CE, 0x4F55, 0xF9BC, 0x4F59, 0xE5F9, 0x4F5A, 0xECEA, 0x4F5B, 0xDDD6, 0x4F5C, 0xEDC2, 0x4F69, 0xF8A5, + 0x4F6F, 0xE5BA, 0x4F70, 0xDBD8, 0x4F73, 0xCAA2, 0x4F76, 0xD1CD, 0x4F7A, 0xEEED, 0x4F7E, 0xECEB, 0x4F7F, 0xDEC5, 0x4F81, 0xE3E0, + 0x4F83, 0xCAC9, 0x4F84, 0xF2E9, 0x4F86, 0xD5CE, 0x4F88, 0xF6B6, 0x4F8A, 0xCEC2, 0x4F8B, 0xD6C7, 0x4F8D, 0xE3B4, 0x4F8F, 0xF1AD, + 0x4F91, 0xEAE2, 0x4F96, 0xD7C2, 0x4F98, 0xF3A7, 0x4F9B, 0xCDEA, 0x4F9D, 0xEBEE, 0x4FAE, 0xD9B2, 0x4FAF, 0xFDA5, 0x4FB5, 0xF6D5, + 0x4FB6, 0xD5E2, 0x4FBF, 0xF8B5, 0x4FC2, 0xCCF5, 0x4FC3, 0xF5B5, 0x4FC4, 0xE4AD, 0x4FC9, 0xE7EB, 0x4FCA, 0xF1D5, 0x4FCE, 0xF0BB, + 0x4FD1, 0xE9B5, 0x4FD3, 0xCCC9, 0x4FD4, 0xFAD5, 0x4FD7, 0xE1D4, 0x4FDA, 0xD7D6, 0x4FDD, 0xDCC1, 0x4FDF, 0xDEC6, 0x4FE0, 0xFAEF, + 0x4FE1, 0xE3E1, 0x4FEE, 0xE1F3, 0x4FEF, 0xDCF6, 0x4FF1, 0xCEFC, 0x4FF3, 0xDBC4, 0x4FF5, 0xF8F1, 0x4FF8, 0xDCE4, 0x4FFA, 0xE5EF, + 0x5002, 0xDCB1, 0x5006, 0xD5D6, 0x5009, 0xF3DA, 0x500B, 0xCBC1, 0x500D, 0xDBC3, 0x5011, 0xD9FA, 0x5012, 0xD3EE, 0x5016, 0xFAB8, + 0x5019, 0xFDA6, 0x501A, 0xEBEF, 0x501C, 0xF4A6, 0x501E, 0xCCCA, 0x501F, 0xF3A8, 0x5021, 0xF3DB, 0x5023, 0xDBA7, 0x5024, 0xF6B7, + 0x5026, 0xCFE6, 0x5027, 0xF0F2, 0x5028, 0xCBDA, 0x502A, 0xE7D2, 0x502B, 0xD7C3, 0x502C, 0xF6F0, 0x502D, 0xE8DE, 0x503B, 0xE5A6, + 0x5043, 0xE5E7, 0x5047, 0xCAA3, 0x5048, 0xCCA7, 0x5049, 0xEAC9, 0x504F, 0xF8B6, 0x5055, 0xFAA5, 0x505A, 0xF1AE, 0x505C, 0xEFCE, + 0x5065, 0xCBED, 0x5074, 0xF6B0, 0x5075, 0xEFCF, 0x5076, 0xE9CF, 0x5078, 0xF7DE, 0x5080, 0xCED3, 0x5085, 0xDCF7, 0x508D, 0xDBA8, + 0x5091, 0xCBF8, 0x5098, 0xDFA1, 0x5099, 0xDDE1, 0x50AC, 0xF5CA, 0x50AD, 0xE9B6, 0x50B2, 0xE7EC, 0x50B3, 0xEEEE, 0x50B5, 0xF3F0, + 0x50B7, 0xDFBF, 0x50BE, 0xCCCB, 0x50C5, 0xD0C1, 0x50C9, 0xF4D2, 0x50CA, 0xE0BA, 0x50CF, 0xDFC0, 0x50D1, 0xCEE0, 0x50D5, 0xDCD2, + 0x50D6, 0xFDEA, 0x50DA, 0xD6F6, 0x50DE, 0xEACA, 0x50E5, 0xE8E9, 0x50E7, 0xE3AC, 0x50ED, 0xF3D0, 0x50F9, 0xCAA4, 0x50FB, 0xDBF8, + 0x50FF, 0xDEC7, 0x5100, 0xEBF0, 0x5101, 0xF1D6, 0x5104, 0xE5E2, 0x5106, 0xCCCC, 0x5109, 0xCBFB, 0x5112, 0xEAE3, 0x511F, 0xDFC1, + 0x5121, 0xD6ED, 0x512A, 0xE9D0, 0x5132, 0xEEB9, 0x5137, 0xD5E3, 0x513A, 0xD1D3, 0x513C, 0xE5F0, 0x5140, 0xE8B4, 0x5141, 0xEBC3, + 0x5143, 0xEAAA, 0x5144, 0xFAFC, 0x5145, 0xF5F6, 0x5146, 0xF0BC, 0x5147, 0xFDD4, 0x5148, 0xE0BB, 0x5149, 0xCEC3, 0x514B, 0xD0BA, + 0x514C, 0xF7BA, 0x514D, 0xD8F3, 0x514E, 0xF7CD, 0x5152, 0xE4AE, 0x515C, 0xD4DF, 0x5162, 0xD0E7, 0x5165, 0xECFD, 0x5167, 0xD2AE, + 0x5168, 0xEEEF, 0x5169, 0xD5D7, 0x516A, 0xEAE4, 0x516B, 0xF8A2, 0x516C, 0xCDEB, 0x516D, 0xD7BF, 0x516E, 0xFBB1, 0x5171, 0xCDEC, + 0x5175, 0xDCB2, 0x5176, 0xD0EC, 0x5177, 0xCEFD, 0x5178, 0xEEF0, 0x517C, 0xCCC2, 0x5180, 0xD0ED, 0x5186, 0xE5F7, 0x518A, 0xF3FC, + 0x518D, 0xEEA2, 0x5192, 0xD9B3, 0x5195, 0xD8F4, 0x5197, 0xE9B7, 0x51A0, 0xCEAE, 0x51A5, 0xD9A2, 0x51AA, 0xD8F1, 0x51AC, 0xD4CF, + 0x51B6, 0xE5A7, 0x51B7, 0xD5D2, 0x51BD, 0xD6A9, 0x51C4, 0xF4A2, 0x51C6, 0xF1D7, 0x51C9, 0xD5D8, 0x51CB, 0xF0BD, 0x51CC, 0xD7D0, + 0x51CD, 0xD4D0, 0x51DC, 0xD7CF, 0x51DD, 0xEBEA, 0x51DE, 0xFDEB, 0x51E1, 0xDBED, 0x51F0, 0xFCC5, 0x51F1, 0xCBC2, 0x51F6, 0xFDD5, + 0x51F8, 0xF4C8, 0x51F9, 0xE8EA, 0x51FA, 0xF5F3, 0x51FD, 0xF9DE, 0x5200, 0xD3EF, 0x5203, 0xECD3, 0x5206, 0xDDC2, 0x5207, 0xEFB7, + 0x5208, 0xE7D4, 0x520A, 0xCACA, 0x520E, 0xD9FB, 0x5211, 0xFAFD, 0x5217, 0xD6AA, 0x521D, 0xF4F8, 0x5224, 0xF7F7, 0x5225, 0xDCAC, + 0x5229, 0xD7D7, 0x522A, 0xDFA2, 0x522E, 0xCEBE, 0x5230, 0xD3F0, 0x5236, 0xF0A4, 0x5237, 0xE1EC, 0x5238, 0xCFE7, 0x5239, 0xF3CB, + 0x523A, 0xEDA9, 0x523B, 0xCABE, 0x5243, 0xF4EF, 0x5247, 0xF6CE, 0x524A, 0xDEFB, 0x524B, 0xD0BB, 0x524C, 0xD5B7, 0x524D, 0xEEF1, + 0x5254, 0xF4A8, 0x5256, 0xDCF8, 0x525B, 0xCBA7, 0x525D, 0xDACE, 0x5261, 0xE0E6, 0x5269, 0xEDA5, 0x526A, 0xEEF2, 0x526F, 0xDCF9, + 0x5272, 0xF9DC, 0x5275, 0xF3DC, 0x527D, 0xF8F2, 0x527F, 0xF4F9, 0x5283, 0xFCF1, 0x5287, 0xD0BC, 0x5288, 0xDBF9, 0x5289, 0xD7B1, + 0x528D, 0xCBFC, 0x5291, 0xF0A5, 0x5292, 0xCBFD, 0x529B, 0xD5F4, 0x529F, 0xCDED, 0x52A0, 0xCAA5, 0x52A3, 0xD6AB, 0x52A4, 0xD0C2, + 0x52A9, 0xF0BE, 0x52AA, 0xD2BD, 0x52AB, 0xCCA4, 0x52BE, 0xFAB6, 0x52C1, 0xCCCD, 0x52C3, 0xDAFA, 0x52C5, 0xF6CF, 0x52C7, 0xE9B8, + 0x52C9, 0xD8F5, 0x52CD, 0xCCCE, 0x52D2, 0xD7CD, 0x52D5, 0xD4D1, 0x52D6, 0xE9ED, 0x52D8, 0xCAEB, 0x52D9, 0xD9E2, 0x52DB, 0xFDB2, + 0x52DD, 0xE3AD, 0x52DE, 0xD6CC, 0x52DF, 0xD9B4, 0x52E2, 0xE1A7, 0x52E3, 0xEED3, 0x52E4, 0xD0C3, 0x52F3, 0xFDB3, 0x52F5, 0xD5E4, + 0x52F8, 0xCFE8, 0x52FA, 0xEDC3, 0x52FB, 0xD0B2, 0x52FE, 0xCEFE, 0x52FF, 0xDAA8, 0x5305, 0xF8D0, 0x5308, 0xFDD6, 0x530D, 0xF8D1, + 0x530F, 0xF8D2, 0x5310, 0xDCD3, 0x5315, 0xDDE2, 0x5316, 0xFBF9, 0x5317, 0xDDC1, 0x5319, 0xE3B5, 0x5320, 0xEDDD, 0x5321, 0xCEC4, + 0x5323, 0xCBA1, 0x532A, 0xDDE3, 0x532F, 0xFCDD, 0x5339, 0xF9AF, 0x533F, 0xD2FB, 0x5340, 0xCFA1, 0x5341, 0xE4A8, 0x5343, 0xF4B6, + 0x5344, 0xECFE, 0x5347, 0xE3AE, 0x5348, 0xE7ED, 0x5349, 0xFDC1, 0x534A, 0xDAE2, 0x534D, 0xD8B3, 0x5351, 0xDDE4, 0x5352, 0xF0EF, + 0x5353, 0xF6F1, 0x5354, 0xFAF0, 0x5357, 0xD1F5, 0x535A, 0xDACF, 0x535C, 0xDCD4, 0x535E, 0xDCA6, 0x5360, 0xEFBF, 0x5366, 0xCECF, + 0x5368, 0xE0D9, 0x536F, 0xD9D6, 0x5370, 0xECD4, 0x5371, 0xEACB, 0x5374, 0xCABF, 0x5375, 0xD5B0, 0x5377, 0xCFE9, 0x537D, 0xF1ED, + 0x537F, 0xCCCF, 0x5384, 0xE4F8, 0x5393, 0xE4ED, 0x5398, 0xD7D8, 0x539A, 0xFDA7, 0x539F, 0xEAAB, 0x53A0, 0xF6B2, 0x53A5, 0xCFF0, + 0x53A6, 0xF9BD, 0x53AD, 0xE6F4, 0x53BB, 0xCBDB, 0x53C3, 0xF3D1, 0x53C8, 0xE9D1, 0x53C9, 0xF3A9, 0x53CA, 0xD0E0, 0x53CB, 0xE9D2, + 0x53CD, 0xDAE3, 0x53D4, 0xE2D2, 0x53D6, 0xF6A2, 0x53D7, 0xE1F4, 0x53DB, 0xDAE4, 0x53E1, 0xE7D5, 0x53E2, 0xF5BF, 0x53E3, 0xCFA2, + 0x53E4, 0xCDAF, 0x53E5, 0xCFA3, 0x53E9, 0xCDB0, 0x53EA, 0xF1FE, 0x53EB, 0xD0A3, 0x53EC, 0xE1AF, 0x53ED, 0xF8A3, 0x53EF, 0xCAA6, + 0x53F0, 0xF7BB, 0x53F1, 0xF2EA, 0x53F2, 0xDEC8, 0x53F3, 0xE9D3, 0x53F8, 0xDEC9, 0x5403, 0xFDDE, 0x5404, 0xCAC0, 0x5408, 0xF9EA, + 0x5409, 0xD1CE, 0x540A, 0xEED4, 0x540C, 0xD4D2, 0x540D, 0xD9A3, 0x540E, 0xFDA8, 0x540F, 0xD7D9, 0x5410, 0xF7CE, 0x5411, 0xFABE, + 0x541B, 0xCFD6, 0x541D, 0xD7F0, 0x541F, 0xEBE1, 0x5420, 0xF8C5, 0x5426, 0xDCFA, 0x5429, 0xDDC3, 0x542B, 0xF9DF, 0x5433, 0xE7EF, + 0x5438, 0xFDE5, 0x5439, 0xF6A3, 0x543B, 0xD9FC, 0x543C, 0xFDA9, 0x543E, 0xE7EE, 0x5442, 0xD5E5, 0x5448, 0xEFD0, 0x544A, 0xCDB1, + 0x5451, 0xF7A2, 0x5468, 0xF1B2, 0x546A, 0xF1B1, 0x5471, 0xCDB2, 0x5473, 0xDAAB, 0x5475, 0xCAA7, 0x547B, 0xE3E2, 0x547C, 0xFBBC, + 0x547D, 0xD9A4, 0x5480, 0xEEBA, 0x5486, 0xF8D3, 0x548C, 0xFBFA, 0x548E, 0xCFA4, 0x5490, 0xDCFB, 0x54A4, 0xF6E3, 0x54A8, 0xEDAA, + 0x54AB, 0xF2A1, 0x54AC, 0xCEE1, 0x54B3, 0xFAA6, 0x54B8, 0xF9E0, 0x54BD, 0xECD6, 0x54C0, 0xE4EE, 0x54C1, 0xF9A1, 0x54C4, 0xFBEF, + 0x54C8, 0xF9EB, 0x54C9, 0xEEA3, 0x54E1, 0xEAAC, 0x54E5, 0xCAA8, 0x54E8, 0xF4FA, 0x54ED, 0xCDD6, 0x54EE, 0xFCF6, 0x54F2, 0xF4C9, + 0x54FA, 0xF8D4, 0x5504, 0xF8A6, 0x5506, 0xDECA, 0x5507, 0xF2C6, 0x550E, 0xD7DA, 0x5510, 0xD3D0, 0x551C, 0xD8C5, 0x552F, 0xEAE6, + 0x5531, 0xF3DD, 0x5535, 0xE4DA, 0x553E, 0xF6E4, 0x5544, 0xF6F2, 0x5546, 0xDFC2, 0x554F, 0xD9FD, 0x5553, 0xCCF6, 0x5556, 0xD3BA, + 0x555E, 0xE4AF, 0x5563, 0xF9E1, 0x557C, 0xF0A6, 0x5580, 0xCBD3, 0x5584, 0xE0BC, 0x5586, 0xF4CA, 0x5587, 0xD4FA, 0x5589, 0xFDAA, + 0x558A, 0xF9E2, 0x5598, 0xF4B7, 0x5599, 0xFDC2, 0x559A, 0xFCB0, 0x559C, 0xFDEC, 0x559D, 0xCAE2, 0x55A7, 0xFDBD, 0x55A9, 0xEAE7, + 0x55AA, 0xDFC3, 0x55AB, 0xD1D2, 0x55AC, 0xCEE2, 0x55AE, 0xD3A4, 0x55C5, 0xFDAB, 0x55C7, 0xDFE0, 0x55D4, 0xF2C7, 0x55DA, 0xE7F0, + 0x55DC, 0xD0EE, 0x55DF, 0xF3AA, 0x55E3, 0xDECB, 0x55E4, 0xF6B8, 0x55FD, 0xE1F5, 0x55FE, 0xF1B3, 0x5606, 0xF7A3, 0x5609, 0xCAA9, + 0x5614, 0xCFA5, 0x5617, 0xDFC4, 0x562F, 0xE1B0, 0x5632, 0xF0BF, 0x5634, 0xF6A4, 0x5636, 0xE3B6, 0x5653, 0xFAC6, 0x5668, 0xD0EF, + 0x566B, 0xFDED, 0x5674, 0xDDC4, 0x5686, 0xFCF7, 0x56A5, 0xE6BF, 0x56AC, 0xDEAD, 0x56AE, 0xFABF, 0x56B4, 0xE5F1, 0x56BC, 0xEDC4, + 0x56CA, 0xD2A5, 0x56CD, 0xFDEE, 0x56D1, 0xF5B6, 0x56DA, 0xE1F6, 0x56DB, 0xDECC, 0x56DE, 0xFCDE, 0x56E0, 0xECD7, 0x56F0, 0xCDDD, + 0x56F9, 0xD6B7, 0x56FA, 0xCDB3, 0x5703, 0xF8D5, 0x5704, 0xE5D8, 0x5708, 0xCFEA, 0x570B, 0xCFD0, 0x570D, 0xEACC, 0x5712, 0xEAAE, + 0x5713, 0xEAAD, 0x5716, 0xD3F1, 0x5718, 0xD3A5, 0x571F, 0xF7CF, 0x5728, 0xEEA4, 0x572D, 0xD0A4, 0x5730, 0xF2A2, 0x573B, 0xD0F0, + 0x5740, 0xF2A3, 0x5742, 0xF7F8, 0x5747, 0xD0B3, 0x574A, 0xDBA9, 0x574D, 0xD3BB, 0x574E, 0xCAEC, 0x5750, 0xF1A6, 0x5751, 0xCBD5, + 0x5761, 0xF7E7, 0x5764, 0xCDDE, 0x5766, 0xF7A4, 0x576A, 0xF8C0, 0x576E, 0xD3DD, 0x5770, 0xCCD0, 0x5775, 0xCFA6, 0x577C, 0xF6F3, + 0x5782, 0xE1F7, 0x5788, 0xD3DC, 0x578B, 0xFAFE, 0x5793, 0xFAA7, 0x57A0, 0xEBD9, 0x57A2, 0xCFA7, 0x57A3, 0xEAAF, 0x57C3, 0xE4EF, + 0x57C7, 0xE9B9, 0x57C8, 0xF1D8, 0x57CB, 0xD8D8, 0x57CE, 0xE0F2, 0x57DF, 0xE6B4, 0x57E0, 0xDCFC, 0x57F0, 0xF3F1, 0x57F4, 0xE3D0, + 0x57F7, 0xF2FB, 0x57F9, 0xDBC6, 0x57FA, 0xD0F1, 0x57FC, 0xD0F2, 0x5800, 0xCFDC, 0x5802, 0xD3D1, 0x5805, 0xCCB1, 0x5806, 0xF7D8, + 0x5808, 0xCBA8, 0x5809, 0xEBBC, 0x580A, 0xE4BE, 0x581E, 0xF4DC, 0x5821, 0xDCC2, 0x5824, 0xF0A7, 0x5827, 0xE6C0, 0x582A, 0xCAED, + 0x582F, 0xE8EB, 0x5830, 0xE5E8, 0x5831, 0xDCC3, 0x5834, 0xEDDE, 0x5835, 0xD3F2, 0x583A, 0xCCF7, 0x584A, 0xCED4, 0x584B, 0xE7AB, + 0x584F, 0xCBC3, 0x5851, 0xE1B1, 0x5854, 0xF7B2, 0x5857, 0xD3F3, 0x5858, 0xD3D2, 0x585A, 0xF5C0, 0x585E, 0xDFDD, 0x5861, 0xEEF3, + 0x5862, 0xE7F1, 0x5864, 0xFDB4, 0x5875, 0xF2C8, 0x5879, 0xF3D2, 0x587C, 0xEEF4, 0x587E, 0xE2D3, 0x5883, 0xCCD1, 0x5885, 0xDFEA, + 0x5889, 0xE9BA, 0x5893, 0xD9D7, 0x589C, 0xF5CD, 0x589E, 0xF1F2, 0x589F, 0xFAC7, 0x58A8, 0xD9F8, 0x58A9, 0xD4C2, 0x58AE, 0xF6E5, + 0x58B3, 0xDDC5, 0x58BA, 0xE7F2, 0x58BB, 0xEDDF, 0x58BE, 0xCACB, 0x58C1, 0xDBFA, 0x58C5, 0xE8B5, 0x58C7, 0xD3A6, 0x58CE, 0xFDB5, + 0x58D1, 0xF9C9, 0x58D3, 0xE4E2, 0x58D5, 0xFBBD, 0x58D8, 0xD7A4, 0x58D9, 0xCEC5, 0x58DE, 0xCED5, 0x58DF, 0xD6E6, 0x58E4, 0xE5BD, + 0x58EB, 0xDECD, 0x58EC, 0xECF3, 0x58EF, 0xEDE0, 0x58F9, 0xECEC, 0x58FA, 0xFBBE, 0x58FB, 0xDFEB, 0x58FD, 0xE1F8, 0x590F, 0xF9BE, + 0x5914, 0xD0F3, 0x5915, 0xE0AA, 0x5916, 0xE8E2, 0x5919, 0xE2D4, 0x591A, 0xD2FD, 0x591C, 0xE5A8, 0x5922, 0xD9D3, 0x5927, 0xD3DE, + 0x5929, 0xF4B8, 0x592A, 0xF7BC, 0x592B, 0xDCFD, 0x592D, 0xE8EC, 0x592E, 0xE4E7, 0x5931, 0xE3F7, 0x5937, 0xECA8, 0x593E, 0xFAF1, + 0x5944, 0xE5F2, 0x5947, 0xD0F4, 0x5948, 0xD2AF, 0x5949, 0xDCE5, 0x594E, 0xD0A5, 0x594F, 0xF1B4, 0x5950, 0xFCB1, 0x5951, 0xCCF8, + 0x5954, 0xDDC6, 0x5955, 0xFAD1, 0x5957, 0xF7DF, 0x595A, 0xFAA8, 0x5960, 0xEEF5, 0x5962, 0xDECE, 0x5967, 0xE7F3, 0x596A, 0xF7AC, + 0x596B, 0xEBC4, 0x596C, 0xEDE1, 0x596D, 0xE0AB, 0x596E, 0xDDC7, 0x5973, 0xD2B3, 0x5974, 0xD2BF, 0x5978, 0xCACC, 0x597D, 0xFBBF, + 0x5982, 0xE5FD, 0x5983, 0xDDE5, 0x5984, 0xD8CD, 0x598A, 0xECF4, 0x5993, 0xD0F5, 0x5996, 0xE8ED, 0x5997, 0xD0D2, 0x5999, 0xD9D8, + 0x59A5, 0xF6E6, 0x59A8, 0xDBAA, 0x59AC, 0xF7E0, 0x59B9, 0xD8D9, 0x59BB, 0xF4A3, 0x59BE, 0xF4DD, 0x59C3, 0xEFD1, 0x59C6, 0xD9B5, + 0x59C9, 0xEDAB, 0x59CB, 0xE3B7, 0x59D0, 0xEEBB, 0x59D1, 0xCDB4, 0x59D3, 0xE0F3, 0x59D4, 0xEACD, 0x59D9, 0xECF5, 0x59DA, 0xE8EE, + 0x59DC, 0xCBA9, 0x59DD, 0xF1AF, 0x59E6, 0xCACD, 0x59E8, 0xECA9, 0x59EA, 0xF2EB, 0x59EC, 0xFDEF, 0x59EE, 0xF9F3, 0x59F8, 0xE6C1, + 0x59FB, 0xECD8, 0x59FF, 0xEDAC, 0x5A01, 0xEACE, 0x5A03, 0xE8DF, 0x5A11, 0xDECF, 0x5A18, 0xD2A6, 0x5A1B, 0xE7F4, 0x5A1C, 0xD1D6, + 0x5A1F, 0xE6C2, 0x5A20, 0xE3E3, 0x5A25, 0xE4B0, 0x5A29, 0xD8B4, 0x5A36, 0xF6A5, 0x5A3C, 0xF3DE, 0x5A41, 0xD7A5, 0x5A46, 0xF7E8, + 0x5A49, 0xE8C6, 0x5A5A, 0xFBE6, 0x5A62, 0xDDE6, 0x5A66, 0xDCFE, 0x5A92, 0xD8DA, 0x5A9A, 0xDAAC, 0x5A9B, 0xEAB0, 0x5AA4, 0xE3B8, + 0x5AC1, 0xCAAA, 0x5AC2, 0xE1F9, 0x5AC4, 0xEAB1, 0x5AC9, 0xF2EC, 0x5ACC, 0xFAEE, 0x5AE1, 0xEED5, 0x5AE6, 0xF9F4, 0x5AE9, 0xD2EC, + 0x5B05, 0xFBFB, 0x5B09, 0xFDF0, 0x5B0B, 0xE0BD, 0x5B0C, 0xCEE3, 0x5B16, 0xF8C6, 0x5B2A, 0xDEAE, 0x5B40, 0xDFC5, 0x5B43, 0xE5BE, + 0x5B50, 0xEDAD, 0x5B51, 0xFAEA, 0x5B54, 0xCDEE, 0x5B55, 0xEDA6, 0x5B57, 0xEDAE, 0x5B58, 0xF0ED, 0x5B5A, 0xDDA1, 0x5B5C, 0xEDAF, + 0x5B5D, 0xFCF8, 0x5B5F, 0xD8EB, 0x5B63, 0xCCF9, 0x5B64, 0xCDB5, 0x5B69, 0xFAA9, 0x5B6B, 0xE1DD, 0x5B70, 0xE2D5, 0x5B71, 0xEDCF, + 0x5B75, 0xDDA2, 0x5B78, 0xF9CA, 0x5B7A, 0xEAE8, 0x5B7C, 0xE5ED, 0x5B85, 0xD3EB, 0x5B87, 0xE9D4, 0x5B88, 0xE1FA, 0x5B89, 0xE4CC, + 0x5B8B, 0xE1E4, 0x5B8C, 0xE8C7, 0x5B8F, 0xCEDB, 0x5B93, 0xDCD5, 0x5B95, 0xF7B5, 0x5B96, 0xFCF3, 0x5B97, 0xF0F3, 0x5B98, 0xCEAF, + 0x5B99, 0xF1B5, 0x5B9A, 0xEFD2, 0x5B9B, 0xE8C8, 0x5B9C, 0xEBF1, 0x5BA2, 0xCBD4, 0x5BA3, 0xE0BE, 0x5BA4, 0xE3F8, 0x5BA5, 0xEAE9, + 0x5BA6, 0xFCB2, 0x5BAC, 0xE0F4, 0x5BAE, 0xCFE0, 0x5BB0, 0xEEA5, 0x5BB3, 0xFAAA, 0x5BB4, 0xE6C3, 0x5BB5, 0xE1B2, 0x5BB6, 0xCAAB, + 0x5BB8, 0xE3E4, 0x5BB9, 0xE9BB, 0x5BBF, 0xE2D6, 0x5BC0, 0xF3F2, 0x5BC2, 0xEED6, 0x5BC3, 0xEAB2, 0x5BC4, 0xD0F6, 0x5BC5, 0xECD9, + 0x5BC6, 0xDACB, 0x5BC7, 0xCFA8, 0x5BCC, 0xDDA3, 0x5BD0, 0xD8DB, 0x5BD2, 0xF9CE, 0x5BD3, 0xE9D5, 0x5BD4, 0xE3D1, 0x5BD7, 0xD2BC, + 0x5BDE, 0xD8AC, 0x5BDF, 0xF3CC, 0x5BE1, 0xCDFB, 0x5BE2, 0xF6D6, 0x5BE4, 0xE7F5, 0x5BE5, 0xE8EF, 0x5BE6, 0xE3F9, 0x5BE7, 0xD2BB, + 0x5BE8, 0xF3F3, 0x5BE9, 0xE3FB, 0x5BEB, 0xDED0, 0x5BEC, 0xCEB0, 0x5BEE, 0xD6F7, 0x5BEF, 0xF1D9, 0x5BF5, 0xF5C1, 0x5BF6, 0xDCC4, + 0x5BF8, 0xF5BB, 0x5BFA, 0xDED1, 0x5C01, 0xDCE6, 0x5C04, 0xDED2, 0x5C07, 0xEDE2, 0x5C08, 0xEEF6, 0x5C09, 0xEACF, 0x5C0A, 0xF0EE, + 0x5C0B, 0xE3FC, 0x5C0D, 0xD3DF, 0x5C0E, 0xD3F4, 0x5C0F, 0xE1B3, 0x5C11, 0xE1B4, 0x5C16, 0xF4D3, 0x5C19, 0xDFC6, 0x5C24, 0xE9D6, + 0x5C28, 0xDBAB, 0x5C31, 0xF6A6, 0x5C38, 0xE3B9, 0x5C39, 0xEBC5, 0x5C3A, 0xF4A9, 0x5C3B, 0xCDB6, 0x5C3C, 0xD2F9, 0x5C3E, 0xDAAD, + 0x5C3F, 0xD2E3, 0x5C40, 0xCFD1, 0x5C45, 0xCBDC, 0x5C46, 0xCCFA, 0x5C48, 0xCFDD, 0x5C4B, 0xE8A9, 0x5C4D, 0xE3BB, 0x5C4E, 0xE3BA, + 0x5C51, 0xE0DA, 0x5C55, 0xEEF7, 0x5C5B, 0xDCB3, 0x5C60, 0xD3F5, 0x5C62, 0xD7A6, 0x5C64, 0xF6B5, 0x5C65, 0xD7DB, 0x5C6C, 0xE1D5, + 0x5C6F, 0xD4EA, 0x5C71, 0xDFA3, 0x5C79, 0xFDDF, 0x5C90, 0xD0F7, 0x5C91, 0xEDD4, 0x5CA1, 0xCBAA, 0x5CA9, 0xE4DB, 0x5CAB, 0xE1FB, + 0x5CAC, 0xCBA2, 0x5CB1, 0xD3E0, 0x5CB3, 0xE4BF, 0x5CB5, 0xFBC0, 0x5CB7, 0xDABE, 0x5CB8, 0xE4CD, 0x5CBA, 0xD6B9, 0x5CBE, 0xEFC0, + 0x5CC0, 0xE1FC, 0x5CD9, 0xF6B9, 0x5CE0, 0xDFC7, 0x5CE8, 0xE4B1, 0x5CEF, 0xDCE7, 0x5CF0, 0xDCE8, 0x5CF4, 0xFAD6, 0x5CF6, 0xD3F6, + 0x5CFB, 0xF1DA, 0x5CFD, 0xFAF2, 0x5D07, 0xE2FD, 0x5D0D, 0xD5CF, 0x5D0E, 0xD0F8, 0x5D11, 0xCDDF, 0x5D14, 0xF5CB, 0x5D16, 0xE4F0, + 0x5D17, 0xCBAB, 0x5D19, 0xD7C4, 0x5D27, 0xE2FE, 0x5D29, 0xDDDA, 0x5D4B, 0xDAAE, 0x5D4C, 0xCAEE, 0x5D50, 0xD5B9, 0x5D69, 0xE3A1, + 0x5D6C, 0xE8E3, 0x5D6F, 0xF3AB, 0x5D87, 0xCFA9, 0x5D8B, 0xD3F7, 0x5D9D, 0xD4F1, 0x5DA0, 0xCEE4, 0x5DA2, 0xE8F2, 0x5DAA, 0xE5F5, + 0x5DB8, 0xE7AE, 0x5DBA, 0xD6BA, 0x5DBC, 0xDFEC, 0x5DBD, 0xE4C0, 0x5DCD, 0xE8E4, 0x5DD2, 0xD8B5, 0x5DD6, 0xE4DC, 0x5DDD, 0xF4B9, + 0x5DDE, 0xF1B6, 0x5DE1, 0xE2DE, 0x5DE2, 0xE1B5, 0x5DE5, 0xCDEF, 0x5DE6, 0xF1A7, 0x5DE7, 0xCEE5, 0x5DE8, 0xCBDD, 0x5DEB, 0xD9E3, + 0x5DEE, 0xF3AC, 0x5DF1, 0xD0F9, 0x5DF2, 0xECAB, 0x5DF3, 0xDED3, 0x5DF4, 0xF7E9, 0x5DF7, 0xF9F5, 0x5DFD, 0xE1DE, 0x5DFE, 0xCBEE, + 0x5E02, 0xE3BC, 0x5E03, 0xF8D6, 0x5E06, 0xDBEE, 0x5E0C, 0xFDF1, 0x5E11, 0xF7B6, 0x5E16, 0xF4DE, 0x5E19, 0xF2ED, 0x5E1B, 0xDBD9, + 0x5E1D, 0xF0A8, 0x5E25, 0xE1FD, 0x5E2B, 0xDED4, 0x5E2D, 0xE0AC, 0x5E33, 0xEDE3, 0x5E36, 0xD3E1, 0x5E38, 0xDFC8, 0x5E3D, 0xD9B6, + 0x5E3F, 0xFDAC, 0x5E40, 0xEFD3, 0x5E44, 0xE4C1, 0x5E45, 0xF8EB, 0x5E47, 0xDBAC, 0x5E4C, 0xFCC6, 0x5E55, 0xD8AD, 0x5E5F, 0xF6BA, + 0x5E61, 0xDBDF, 0x5E62, 0xD3D3, 0x5E63, 0xF8C7, 0x5E72, 0xCACE, 0x5E73, 0xF8C1, 0x5E74, 0xD2B4, 0x5E77, 0xDCB4, 0x5E78, 0xFAB9, + 0x5E79, 0xCACF, 0x5E7B, 0xFCB3, 0x5E7C, 0xEAEA, 0x5E7D, 0xEAEB, 0x5E7E, 0xD0FA, 0x5E84, 0xEDE4, 0x5E87, 0xDDE7, 0x5E8A, 0xDFC9, + 0x5E8F, 0xDFED, 0x5E95, 0xEEBC, 0x5E97, 0xEFC1, 0x5E9A, 0xCCD2, 0x5E9C, 0xDDA4, 0x5EA0, 0xDFCA, 0x5EA6, 0xD3F8, 0x5EA7, 0xF1A8, + 0x5EAB, 0xCDB7, 0x5EAD, 0xEFD4, 0x5EB5, 0xE4DD, 0x5EB6, 0xDFEE, 0x5EB7, 0xCBAC, 0x5EB8, 0xE9BC, 0x5EBE, 0xEAEC, 0x5EC2, 0xDFCB, + 0x5EC8, 0xF9BF, 0x5EC9, 0xD6AF, 0x5ECA, 0xD5C6, 0x5ED0, 0xCFAA, 0x5ED3, 0xCEA9, 0x5ED6, 0xD6F8, 0x5EDA, 0xF1B7, 0x5EDB, 0xEEF8, + 0x5EDF, 0xD9D9, 0x5EE0, 0xF3DF, 0x5EE2, 0xF8C8, 0x5EE3, 0xCEC6, 0x5EEC, 0xD5E6, 0x5EF3, 0xF4E6, 0x5EF6, 0xE6C5, 0x5EF7, 0xEFD5, + 0x5EFA, 0xCBEF, 0x5EFB, 0xFCDF, 0x5F01, 0xDCA7, 0x5F04, 0xD6E7, 0x5F0A, 0xF8C9, 0x5F0F, 0xE3D2, 0x5F11, 0xE3BD, 0x5F13, 0xCFE1, + 0x5F14, 0xF0C0, 0x5F15, 0xECDA, 0x5F17, 0xDDD7, 0x5F18, 0xFBF0, 0x5F1B, 0xECAC, 0x5F1F, 0xF0A9, 0x5F26, 0xFAD7, 0x5F27, 0xFBC1, + 0x5F29, 0xD2C0, 0x5F31, 0xE5B0, 0x5F35, 0xEDE5, 0x5F3A, 0xCBAD, 0x5F3C, 0xF9B0, 0x5F48, 0xF7A5, 0x5F4A, 0xCBAE, 0x5F4C, 0xDAAF, + 0x5F4E, 0xD8B6, 0x5F56, 0xD3A7, 0x5F57, 0xFBB2, 0x5F59, 0xFDC4, 0x5F5B, 0xECAD, 0x5F62, 0xFBA1, 0x5F66, 0xE5E9, 0x5F67, 0xE9EE, + 0x5F69, 0xF3F4, 0x5F6A, 0xF8F3, 0x5F6B, 0xF0C1, 0x5F6C, 0xDEAF, 0x5F6D, 0xF8B0, 0x5F70, 0xF3E0, 0x5F71, 0xE7AF, 0x5F77, 0xDBAD, + 0x5F79, 0xE6B5, 0x5F7C, 0xF9A8, 0x5F7F, 0xDDD8, 0x5F80, 0xE8D9, 0x5F81, 0xEFD6, 0x5F85, 0xD3E2, 0x5F87, 0xE2DF, 0x5F8A, 0xFCE0, + 0x5F8B, 0xD7C8, 0x5F8C, 0xFDAD, 0x5F90, 0xDFEF, 0x5F91, 0xCCD3, 0x5F92, 0xD3F9, 0x5F97, 0xD4F0, 0x5F98, 0xDBC7, 0x5F99, 0xDED5, + 0x5F9E, 0xF0F4, 0x5FA0, 0xD5D0, 0x5FA1, 0xE5D9, 0x5FA8, 0xFCC7, 0x5FA9, 0xDCD6, 0x5FAA, 0xE2E0, 0x5FAE, 0xDAB0, 0x5FB5, 0xF3A3, + 0x5FB7, 0xD3EC, 0x5FB9, 0xF4CB, 0x5FBD, 0xFDC5, 0x5FC3, 0xE3FD, 0x5FC5, 0xF9B1, 0x5FCC, 0xD0FB, 0x5FCD, 0xECDB, 0x5FD6, 0xF5BC, + 0x5FD7, 0xF2A4, 0x5FD8, 0xD8CE, 0x5FD9, 0xD8CF, 0x5FE0, 0xF5F7, 0x5FEB, 0xF6E1, 0x5FF5, 0xD2B7, 0x5FFD, 0xFBEC, 0x5FFF, 0xDDC8, + 0x600F, 0xE4E8, 0x6012, 0xD2C1, 0x6016, 0xF8D7, 0x601C, 0xD6BB, 0x601D, 0xDED6, 0x6020, 0xF7BD, 0x6021, 0xECAE, 0x6025, 0xD0E1, + 0x6027, 0xE0F5, 0x6028, 0xEAB3, 0x602A, 0xCED6, 0x602F, 0xCCA5, 0x6041, 0xECF6, 0x6042, 0xE2E1, 0x6043, 0xE3BE, 0x604D, 0xFCC8, + 0x6050, 0xCDF0, 0x6052, 0xF9F6, 0x6055, 0xDFF0, 0x6059, 0xE5BF, 0x605D, 0xCEBF, 0x6062, 0xFCE1, 0x6063, 0xEDB0, 0x6064, 0xFDD1, + 0x6065, 0xF6BB, 0x6068, 0xF9CF, 0x6069, 0xEBDA, 0x606A, 0xCAC1, 0x606C, 0xD2B8, 0x606D, 0xCDF1, 0x606F, 0xE3D3, 0x6070, 0xFDE6, + 0x6085, 0xE6ED, 0x6089, 0xE3FA, 0x608C, 0xF0AA, 0x608D, 0xF9D0, 0x6094, 0xFCE2, 0x6096, 0xF8A7, 0x609A, 0xE1E5, 0x609B, 0xEEF9, + 0x609F, 0xE7F6, 0x60A0, 0xEAED, 0x60A3, 0xFCB4, 0x60A4, 0xF5C2, 0x60A7, 0xD7DC, 0x60B0, 0xF0F5, 0x60B2, 0xDDE8, 0x60B3, 0xD3ED, + 0x60B4, 0xF5FC, 0x60B6, 0xDABF, 0x60B8, 0xCCFB, 0x60BC, 0xD3FA, 0x60BD, 0xF4A4, 0x60C5, 0xEFD7, 0x60C7, 0xD4C3, 0x60D1, 0xFBE3, + 0x60DA, 0xFBED, 0x60DC, 0xE0AD, 0x60DF, 0xEAEE, 0x60E0, 0xFBB3, 0x60E1, 0xE4C2, 0x60F0, 0xF6E7, 0x60F1, 0xD2DD, 0x60F3, 0xDFCC, + 0x60F6, 0xFCC9, 0x60F9, 0xE5A9, 0x60FA, 0xE0F6, 0x60FB, 0xF6B3, 0x6101, 0xE1FE, 0x6106, 0xCBF0, 0x6108, 0xEAEF, 0x6109, 0xEAF0, + 0x610D, 0xDAC0, 0x610E, 0xF8B4, 0x610F, 0xEBF2, 0x6115, 0xE4C3, 0x611A, 0xE9D7, 0x611B, 0xE4F1, 0x611F, 0xCAEF, 0x6127, 0xCED7, + 0x6130, 0xFCCA, 0x6134, 0xF3E1, 0x6137, 0xCBC4, 0x613C, 0xE3E5, 0x613E, 0xCBC5, 0x613F, 0xEAB4, 0x6142, 0xE9BD, 0x6144, 0xD7C9, + 0x6147, 0xEBDB, 0x6148, 0xEDB1, 0x614A, 0xCCC3, 0x614B, 0xF7BE, 0x614C, 0xFCCB, 0x6153, 0xF8F4, 0x6155, 0xD9B7, 0x6158, 0xF3D3, + 0x6159, 0xF3D4, 0x615D, 0xF7E4, 0x615F, 0xF7D1, 0x6162, 0xD8B7, 0x6163, 0xCEB1, 0x6164, 0xCAC2, 0x6167, 0xFBB4, 0x6168, 0xCBC6, + 0x616B, 0xF0F6, 0x616E, 0xD5E7, 0x6170, 0xEAD0, 0x6176, 0xCCD4, 0x6177, 0xCBAF, 0x617D, 0xF4AA, 0x617E, 0xE9AF, 0x6181, 0xF5C3, + 0x6182, 0xE9D8, 0x618A, 0xDDE9, 0x618E, 0xF1F3, 0x6190, 0xD5FB, 0x6191, 0xDEBB, 0x6194, 0xF4FB, 0x6198, 0xFDF3, 0x6199, 0xFDF2, + 0x619A, 0xF7A6, 0x61A4, 0xDDC9, 0x61A7, 0xD4D3, 0x61A9, 0xCCA8, 0x61AB, 0xDAC1, 0x61AC, 0xCCD5, 0x61AE, 0xD9E4, 0x61B2, 0xFACA, + 0x61B6, 0xE5E3, 0x61BA, 0xD3BC, 0x61BE, 0xCAF0, 0x61C3, 0xD0C4, 0x61C7, 0xCAD0, 0x61C8, 0xFAAB, 0x61C9, 0xEBEB, 0x61CA, 0xE7F8, + 0x61CB, 0xD9E5, 0x61E6, 0xD1D7, 0x61F2, 0xF3A4, 0x61F6, 0xD4FB, 0x61F7, 0xFCE3, 0x61F8, 0xFAD8, 0x61FA, 0xF3D5, 0x61FC, 0xCFAB, + 0x61FF, 0xEBF3, 0x6200, 0xD5FC, 0x6207, 0xD3D4, 0x6208, 0xCDFC, 0x620A, 0xD9E6, 0x620C, 0xE2F9, 0x620D, 0xE2A1, 0x620E, 0xEBD4, + 0x6210, 0xE0F7, 0x6211, 0xE4B2, 0x6212, 0xCCFC, 0x6216, 0xFBE4, 0x621A, 0xF4AB, 0x621F, 0xD0BD, 0x6221, 0xCAF1, 0x622A, 0xEFB8, + 0x622E, 0xD7C0, 0x6230, 0xEEFA, 0x6231, 0xFDF4, 0x6234, 0xD3E3, 0x6236, 0xFBC2, 0x623E, 0xD5E8, 0x623F, 0xDBAE, 0x6240, 0xE1B6, + 0x6241, 0xF8B7, 0x6247, 0xE0BF, 0x6248, 0xFBC3, 0x6249, 0xDDEA, 0x624B, 0xE2A2, 0x624D, 0xEEA6, 0x6253, 0xF6E8, 0x6258, 0xF6F5, + 0x626E, 0xDDCA, 0x6271, 0xD0E2, 0x6276, 0xDDA6, 0x6279, 0xDDEB, 0x627C, 0xE4F9, 0x627F, 0xE3AF, 0x6280, 0xD0FC, 0x6284, 0xF4FC, + 0x6289, 0xCCBC, 0x628A, 0xF7EA, 0x6291, 0xE5E4, 0x6292, 0xDFF1, 0x6295, 0xF7E1, 0x6297, 0xF9F7, 0x6298, 0xEFB9, 0x629B, 0xF8D8, + 0x62AB, 0xF9A9, 0x62B1, 0xF8D9, 0x62B5, 0xEEBD, 0x62B9, 0xD8C6, 0x62BC, 0xE4E3, 0x62BD, 0xF5CE, 0x62C2, 0xDDD9, 0x62C7, 0xD9E7, + 0x62C8, 0xD2B9, 0x62C9, 0xD5C3, 0x62CC, 0xDAE5, 0x62CD, 0xDAD0, 0x62CF, 0xD1D9, 0x62D0, 0xCED8, 0x62D2, 0xCBDE, 0x62D3, 0xF4AC, + 0x62D4, 0xDAFB, 0x62D6, 0xF6E9, 0x62D7, 0xE8F3, 0x62D8, 0xCFAC, 0x62D9, 0xF0F0, 0x62DB, 0xF4FD, 0x62DC, 0xDBC8, 0x62EC, 0xCEC0, + 0x62ED, 0xE3D4, 0x62EE, 0xD1CF, 0x62EF, 0xF1F5, 0x62F1, 0xCDF2, 0x62F3, 0xCFEB, 0x62F7, 0xCDB8, 0x62FE, 0xE3A6, 0x62FF, 0xD1DA, + 0x6301, 0xF2A5, 0x6307, 0xF2A6, 0x6309, 0xE4CE, 0x6311, 0xD3FB, 0x632B, 0xF1A9, 0x632F, 0xF2C9, 0x633A, 0xEFD8, 0x633B, 0xE6C9, + 0x633D, 0xD8B8, 0x633E, 0xFAF3, 0x6349, 0xF3B5, 0x634C, 0xF8A4, 0x634F, 0xD1F3, 0x6350, 0xE6C8, 0x6355, 0xF8DA, 0x6367, 0xDCE9, + 0x6368, 0xDED7, 0x636E, 0xCBDF, 0x6372, 0xCFEC, 0x6377, 0xF4DF, 0x637A, 0xD1F4, 0x637B, 0xD2BA, 0x637F, 0xDFF2, 0x6383, 0xE1B7, + 0x6388, 0xE2A3, 0x6389, 0xD3FC, 0x638C, 0xEDE6, 0x6392, 0xDBC9, 0x6396, 0xE4FA, 0x6398, 0xCFDE, 0x639B, 0xCED0, 0x63A0, 0xD5D3, + 0x63A1, 0xF3F5, 0x63A2, 0xF7AE, 0x63A5, 0xEFC8, 0x63A7, 0xCDF3, 0x63A8, 0xF5CF, 0x63A9, 0xE5F3, 0x63AA, 0xF0C2, 0x63C0, 0xCAD1, + 0x63C4, 0xEAF1, 0x63C6, 0xD0A6, 0x63CF, 0xD9DA, 0x63D0, 0xF0AB, 0x63D6, 0xEBE7, 0x63DA, 0xE5C0, 0x63DB, 0xFCB5, 0x63E1, 0xE4C4, + 0x63ED, 0xCCA9, 0x63EE, 0xFDC6, 0x63F4, 0xEAB5, 0x63F6, 0xE5AA, 0x63F7, 0xDFBA, 0x640D, 0xE1DF, 0x640F, 0xDAD1, 0x6414, 0xE1B8, + 0x6416, 0xE8F4, 0x6417, 0xD3FD, 0x641C, 0xE2A4, 0x6422, 0xF2CA, 0x642C, 0xDAE6, 0x642D, 0xF7B3, 0x643A, 0xFDCD, 0x643E, 0xF3B6, + 0x6458, 0xEED7, 0x6460, 0xF5C4, 0x6469, 0xD8A4, 0x646F, 0xF2A7, 0x6478, 0xD9B8, 0x6479, 0xD9B9, 0x647A, 0xEFC9, 0x6488, 0xD6CE, + 0x6491, 0xF7CB, 0x6492, 0xDFAE, 0x6493, 0xE8F5, 0x649A, 0xD2B5, 0x649E, 0xD3D5, 0x64A4, 0xF4CC, 0x64A5, 0xDAFC, 0x64AB, 0xD9E8, + 0x64AD, 0xF7EB, 0x64AE, 0xF5C9, 0x64B0, 0xF3BC, 0x64B2, 0xDAD2, 0x64BB, 0xD3B5, 0x64C1, 0xE8B6, 0x64C4, 0xD6CF, 0x64C5, 0xF4BA, + 0x64C7, 0xF7C9, 0x64CA, 0xCCAA, 0x64CD, 0xF0C3, 0x64CE, 0xCCD6, 0x64D2, 0xD0D3, 0x64D4, 0xD3BD, 0x64D8, 0xDBFB, 0x64DA, 0xCBE0, + 0x64E1, 0xD3E4, 0x64E2, 0xF6F7, 0x64E5, 0xD5BA, 0x64E6, 0xF3CD, 0x64E7, 0xCBE1, 0x64EC, 0xEBF4, 0x64F2, 0xF4AD, 0x64F4, 0xFCAA, + 0x64FA, 0xF7EC, 0x64FE, 0xE8F6, 0x6500, 0xDAE7, 0x6504, 0xF7CC, 0x6518, 0xE5C1, 0x651D, 0xE0EE, 0x6523, 0xD5FD, 0x652A, 0xCEE6, + 0x652B, 0xFCAB, 0x652C, 0xD5BB, 0x652F, 0xF2A8, 0x6536, 0xE2A5, 0x6537, 0xCDB9, 0x6538, 0xEAF2, 0x6539, 0xCBC7, 0x653B, 0xCDF4, + 0x653E, 0xDBAF, 0x653F, 0xEFD9, 0x6545, 0xCDBA, 0x6548, 0xFCF9, 0x654D, 0xDFF3, 0x654E, 0xCEE7, 0x654F, 0xDAC2, 0x6551, 0xCFAD, + 0x6556, 0xE7F9, 0x6557, 0xF8A8, 0x655E, 0xF3E2, 0x6562, 0xCAF2, 0x6563, 0xDFA4, 0x6566, 0xD4C4, 0x656C, 0xCCD7, 0x656D, 0xE5C2, + 0x6572, 0xCDBB, 0x6574, 0xEFDA, 0x6575, 0xEED8, 0x6577, 0xDDA7, 0x6578, 0xE2A6, 0x657E, 0xE0C0, 0x6582, 0xD6B0, 0x6583, 0xF8CA, + 0x6585, 0xFCFA, 0x6587, 0xD9FE, 0x658C, 0xDEB0, 0x6590, 0xDDEC, 0x6591, 0xDAE8, 0x6597, 0xD4E0, 0x6599, 0xD6F9, 0x659B, 0xCDD7, + 0x659C, 0xDED8, 0x659F, 0xF2F8, 0x65A1, 0xE4D6, 0x65A4, 0xD0C5, 0x65A5, 0xF4AE, 0x65A7, 0xDDA8, 0x65AB, 0xEDC5, 0x65AC, 0xF3D6, + 0x65AF, 0xDED9, 0x65B0, 0xE3E6, 0x65B7, 0xD3A8, 0x65B9, 0xDBB0, 0x65BC, 0xE5DA, 0x65BD, 0xE3BF, 0x65C1, 0xDBB1, 0x65C5, 0xD5E9, + 0x65CB, 0xE0C1, 0x65CC, 0xEFDB, 0x65CF, 0xF0E9, 0x65D2, 0xD7B2, 0x65D7, 0xD0FD, 0x65E0, 0xD9E9, 0x65E3, 0xD0FE, 0x65E5, 0xECED, + 0x65E6, 0xD3A9, 0x65E8, 0xF2A9, 0x65E9, 0xF0C4, 0x65EC, 0xE2E2, 0x65ED, 0xE9EF, 0x65F1, 0xF9D1, 0x65F4, 0xE9D9, 0x65FA, 0xE8DA, + 0x65FB, 0xDAC3, 0x65FC, 0xDAC4, 0x65FD, 0xD4C5, 0x65FF, 0xE7FA, 0x6606, 0xCDE0, 0x6607, 0xE3B0, 0x6609, 0xDBB2, 0x660A, 0xFBC4, + 0x660C, 0xF3E3, 0x660E, 0xD9A5, 0x660F, 0xFBE7, 0x6610, 0xDDCB, 0x6611, 0xD0D4, 0x6613, 0xE6B6, 0x6614, 0xE0AE, 0x6615, 0xFDDA, + 0x661E, 0xDCB5, 0x661F, 0xE0F8, 0x6620, 0xE7B1, 0x6625, 0xF5F0, 0x6627, 0xD8DC, 0x6628, 0xEDC6, 0x662D, 0xE1B9, 0x662F, 0xE3C0, + 0x6630, 0xF9C0, 0x6631, 0xE9F0, 0x6634, 0xD9DB, 0x6636, 0xF3E4, 0x663A, 0xDCB6, 0x663B, 0xE4E9, 0x6641, 0xF0C5, 0x6642, 0xE3C1, + 0x6643, 0xFCCC, 0x6644, 0xFCCD, 0x6649, 0xF2CB, 0x664B, 0xF2CC, 0x664F, 0xE4CF, 0x6659, 0xF1DB, 0x665B, 0xFAD9, 0x665D, 0xF1B8, + 0x665E, 0xFDF5, 0x665F, 0xE0F9, 0x6664, 0xE7FB, 0x6665, 0xFCB7, 0x6666, 0xFCE4, 0x6667, 0xFBC5, 0x6668, 0xE3E7, 0x6669, 0xD8B9, + 0x666B, 0xF6F8, 0x666E, 0xDCC5, 0x666F, 0xCCD8, 0x6673, 0xE0AF, 0x6674, 0xF4E7, 0x6676, 0xEFDC, 0x6677, 0xCFFC, 0x6678, 0xEFDD, + 0x667A, 0xF2AA, 0x6684, 0xFDBE, 0x6687, 0xCAAC, 0x6688, 0xFDBB, 0x6689, 0xFDC7, 0x668E, 0xE7B2, 0x6690, 0xEAD1, 0x6691, 0xDFF4, + 0x6696, 0xD1EC, 0x6697, 0xE4DE, 0x6698, 0xE5C3, 0x669D, 0xD9A6, 0x66A0, 0xCDBC, 0x66A2, 0xF3E5, 0x66AB, 0xEDD5, 0x66AE, 0xD9BA, + 0x66B2, 0xEDE7, 0x66B3, 0xFBB5, 0x66B4, 0xF8EC, 0x66B9, 0xE0E7, 0x66BB, 0xCCD9, 0x66BE, 0xD4C6, 0x66C4, 0xE7A5, 0x66C6, 0xD5F5, + 0x66C7, 0xD3BE, 0x66C9, 0xFCFB, 0x66D6, 0xE4F2, 0x66D9, 0xDFF5, 0x66DC, 0xE8F8, 0x66DD, 0xF8ED, 0x66E0, 0xCEC7, 0x66E6, 0xFDF6, + 0x66F0, 0xE8D8, 0x66F2, 0xCDD8, 0x66F3, 0xE7D6, 0x66F4, 0xCCDA, 0x66F7, 0xCAE3, 0x66F8, 0xDFF6, 0x66F9, 0xF0C7, 0x66FA, 0xF0C6, + 0x66FC, 0xD8BA, 0x66FE, 0xF1F4, 0x66FF, 0xF4F0, 0x6700, 0xF5CC, 0x6703, 0xFCE5, 0x6708, 0xEAC5, 0x6709, 0xEAF3, 0x670B, 0xDDDB, + 0x670D, 0xDCD7, 0x6714, 0xDEFD, 0x6715, 0xF2F9, 0x6717, 0xD5C7, 0x671B, 0xD8D0, 0x671D, 0xF0C8, 0x671E, 0xD1A1, 0x671F, 0xD1A2, + 0x6726, 0xD9D4, 0x6727, 0xD6E8, 0x6728, 0xD9CA, 0x672A, 0xDAB1, 0x672B, 0xD8C7, 0x672C, 0xDCE2, 0x672D, 0xF3CE, 0x672E, 0xF5F4, + 0x6731, 0xF1B9, 0x6734, 0xDAD3, 0x6736, 0xF6EA, 0x673A, 0xCFF5, 0x673D, 0xFDAE, 0x6746, 0xCAD2, 0x6749, 0xDFB4, 0x674E, 0xD7DD, + 0x674F, 0xFABA, 0x6750, 0xEEA7, 0x6751, 0xF5BD, 0x6753, 0xF8F5, 0x6756, 0xEDE8, 0x675C, 0xD4E1, 0x675E, 0xD1A3, 0x675F, 0xE1D6, + 0x676D, 0xF9F8, 0x676F, 0xDBCA, 0x6770, 0xCBF9, 0x6771, 0xD4D4, 0x6773, 0xD9DC, 0x6775, 0xEEBE, 0x6777, 0xF7ED, 0x677B, 0xD2EE, + 0x677E, 0xE1E6, 0x677F, 0xF7F9, 0x6787, 0xDDED, 0x6789, 0xE8DB, 0x678B, 0xDBB3, 0x678F, 0xD1F7, 0x6790, 0xE0B0, 0x6793, 0xD4E2, + 0x6795, 0xF6D7, 0x6797, 0xD7F9, 0x679A, 0xD8DD, 0x679C, 0xCDFD, 0x679D, 0xF2AB, 0x67AF, 0xCDBD, 0x67B0, 0xF8C2, 0x67B3, 0xF2AC, + 0x67B6, 0xCAAD, 0x67B7, 0xCAAE, 0x67B8, 0xCFAE, 0x67BE, 0xE3C2, 0x67C4, 0xDCB7, 0x67CF, 0xDBDA, 0x67D0, 0xD9BB, 0x67D1, 0xCAF3, + 0x67D2, 0xF6D3, 0x67D3, 0xE6F8, 0x67D4, 0xEAF5, 0x67DA, 0xEAF6, 0x67DD, 0xF6F9, 0x67E9, 0xCFAF, 0x67EC, 0xCAD3, 0x67EF, 0xCAAF, + 0x67F0, 0xD2B0, 0x67F1, 0xF1BA, 0x67F3, 0xD7B3, 0x67F4, 0xE3C3, 0x67F5, 0xF3FD, 0x67F6, 0xDEDA, 0x67FB, 0xDEDB, 0x67FE, 0xEFDE, + 0x6812, 0xE2E3, 0x6813, 0xEEFB, 0x6816, 0xDFF7, 0x6817, 0xD7CA, 0x6821, 0xCEE8, 0x6822, 0xDBDB, 0x682A, 0xF1BB, 0x682F, 0xE9F1, + 0x6838, 0xFAB7, 0x6839, 0xD0C6, 0x683C, 0xCCAB, 0x683D, 0xEEA8, 0x6840, 0xCBFA, 0x6841, 0xF9F9, 0x6842, 0xCCFD, 0x6843, 0xD3FE, + 0x6848, 0xE4D0, 0x684E, 0xF2EE, 0x6850, 0xD4D5, 0x6851, 0xDFCD, 0x6853, 0xFCB8, 0x6854, 0xD1D0, 0x686D, 0xF2CD, 0x6876, 0xF7D2, + 0x687F, 0xCAD4, 0x6881, 0xD5D9, 0x6885, 0xD8DE, 0x688F, 0xCDD9, 0x6893, 0xEEA9, 0x6894, 0xF6BC, 0x6897, 0xCCDB, 0x689D, 0xF0C9, + 0x689F, 0xFCFC, 0x68A1, 0xE8C9, 0x68A2, 0xF4FE, 0x68A7, 0xE7FC, 0x68A8, 0xD7DE, 0x68AD, 0xDEDC, 0x68AF, 0xF0AC, 0x68B0, 0xCCFE, + 0x68B1, 0xCDE1, 0x68B3, 0xE1BA, 0x68B5, 0xDBEF, 0x68B6, 0xDAB2, 0x68C4, 0xD1A5, 0x68C5, 0xDCB8, 0x68C9, 0xD8F6, 0x68CB, 0xD1A4, + 0x68CD, 0xCDE2, 0x68D2, 0xDCEA, 0x68D5, 0xF0F7, 0x68D7, 0xF0CA, 0x68D8, 0xD0BE, 0x68DA, 0xDDDC, 0x68DF, 0xD4D6, 0x68E0, 0xD3D6, + 0x68E7, 0xEDD0, 0x68E8, 0xCDA1, 0x68EE, 0xDFB5, 0x68F2, 0xDFF8, 0x68F9, 0xD4A1, 0x68FA, 0xCEB2, 0x6900, 0xE8CA, 0x6905, 0xEBF5, + 0x690D, 0xE3D5, 0x690E, 0xF5D0, 0x6912, 0xF5A1, 0x6927, 0xD9A7, 0x6930, 0xE5AB, 0x693D, 0xE6CB, 0x693F, 0xF5F1, 0x694A, 0xE5C5, + 0x6953, 0xF9A3, 0x6954, 0xE0DB, 0x6955, 0xF6EB, 0x6957, 0xCBF1, 0x6959, 0xD9EA, 0x695A, 0xF5A2, 0x695E, 0xD7D1, 0x6960, 0xD1F8, + 0x6961, 0xEAF8, 0x6962, 0xEAF9, 0x6963, 0xDAB3, 0x6968, 0xEFDF, 0x696B, 0xF1EF, 0x696D, 0xE5F6, 0x696E, 0xEEBF, 0x696F, 0xE2E4, + 0x6975, 0xD0BF, 0x6977, 0xFAAC, 0x6978, 0xF5D1, 0x6979, 0xE7B3, 0x6995, 0xE9BE, 0x699B, 0xF2CE, 0x699C, 0xDBB4, 0x69A5, 0xFCCE, + 0x69A7, 0xDDEE, 0x69AE, 0xE7B4, 0x69B4, 0xD7B4, 0x69BB, 0xF7B4, 0x69C1, 0xCDBE, 0x69C3, 0xDAE9, 0x69CB, 0xCFB0, 0x69CC, 0xF7D9, + 0x69CD, 0xF3E6, 0x69D0, 0xCED9, 0x69E8, 0xCEAA, 0x69EA, 0xCBC8, 0x69FB, 0xD0A7, 0x69FD, 0xF0CB, 0x69FF, 0xD0C7, 0x6A02, 0xE4C5, + 0x6A0A, 0xDBE0, 0x6A11, 0xD5DA, 0x6A13, 0xD7A7, 0x6A17, 0xEEC0, 0x6A19, 0xF8F6, 0x6A1E, 0xF5D2, 0x6A1F, 0xEDE9, 0x6A21, 0xD9BC, + 0x6A23, 0xE5C6, 0x6A35, 0xF5A3, 0x6A38, 0xDAD4, 0x6A39, 0xE2A7, 0x6A3A, 0xFBFC, 0x6A3D, 0xF1DC, 0x6A44, 0xCAF4, 0x6A48, 0xE8FA, + 0x6A4B, 0xCEE9, 0x6A52, 0xE9F8, 0x6A53, 0xE2E5, 0x6A58, 0xD0B9, 0x6A59, 0xD4F2, 0x6A5F, 0xD1A6, 0x6A61, 0xDFCE, 0x6A6B, 0xFCF4, + 0x6A80, 0xD3AA, 0x6A84, 0xCCAC, 0x6A89, 0xEFE0, 0x6A8D, 0xE5E5, 0x6A8E, 0xD0D5, 0x6A97, 0xDBFC, 0x6A9C, 0xFCE6, 0x6AA2, 0xCBFE, + 0x6AA3, 0xEDEA, 0x6AB3, 0xDEB1, 0x6ABB, 0xF9E3, 0x6AC2, 0xD4A2, 0x6AC3, 0xCFF6, 0x6AD3, 0xD6D0, 0x6ADA, 0xD5EA, 0x6ADB, 0xF1EE, + 0x6AF6, 0xFACB, 0x6AFB, 0xE5A1, 0x6B04, 0xD5B1, 0x6B0A, 0xCFED, 0x6B0C, 0xEDEB, 0x6B12, 0xD5B2, 0x6B16, 0xD5BC, 0x6B20, 0xFDE2, + 0x6B21, 0xF3AD, 0x6B23, 0xFDDB, 0x6B32, 0xE9B0, 0x6B3A, 0xD1A7, 0x6B3D, 0xFDE3, 0x6B3E, 0xCEB3, 0x6B46, 0xFDE4, 0x6B47, 0xFACE, + 0x6B4C, 0xCAB0, 0x6B4E, 0xF7A7, 0x6B50, 0xCFB1, 0x6B5F, 0xE6A2, 0x6B61, 0xFCB6, 0x6B62, 0xF2AD, 0x6B63, 0xEFE1, 0x6B64, 0xF3AE, + 0x6B65, 0xDCC6, 0x6B66, 0xD9EB, 0x6B6A, 0xE8E0, 0x6B72, 0xE1A8, 0x6B77, 0xD5F6, 0x6B78, 0xCFFD, 0x6B7B, 0xDEDD, 0x6B7F, 0xD9D1, + 0x6B83, 0xE4EA, 0x6B84, 0xF2CF, 0x6B86, 0xF7BF, 0x6B89, 0xE2E6, 0x6B8A, 0xE2A8, 0x6B96, 0xE3D6, 0x6B98, 0xEDD1, 0x6B9E, 0xE9F9, + 0x6BAE, 0xD6B1, 0x6BAF, 0xDEB2, 0x6BB2, 0xE0E8, 0x6BB5, 0xD3AB, 0x6BB7, 0xEBDC, 0x6BBA, 0xDFAF, 0x6BBC, 0xCAC3, 0x6BBF, 0xEEFC, + 0x6BC1, 0xFDC3, 0x6BC5, 0xEBF6, 0x6BC6, 0xCFB2, 0x6BCB, 0xD9EC, 0x6BCD, 0xD9BD, 0x6BCF, 0xD8DF, 0x6BD2, 0xD4B8, 0x6BD3, 0xEBBE, + 0x6BD4, 0xDDEF, 0x6BD6, 0xDDF0, 0x6BD7, 0xDDF1, 0x6BD8, 0xDDF2, 0x6BDB, 0xD9BE, 0x6BEB, 0xFBC6, 0x6BEC, 0xCFB3, 0x6C08, 0xEEFD, + 0x6C0F, 0xE4AB, 0x6C11, 0xDAC5, 0x6C13, 0xD8EC, 0x6C23, 0xD1A8, 0x6C34, 0xE2A9, 0x6C37, 0xDEBC, 0x6C38, 0xE7B5, 0x6C3E, 0xDBF0, + 0x6C40, 0xEFE2, 0x6C41, 0xF1F0, 0x6C42, 0xCFB4, 0x6C4E, 0xDBF1, 0x6C50, 0xE0B1, 0x6C55, 0xDFA5, 0x6C57, 0xF9D2, 0x6C5A, 0xE7FD, + 0x6C5D, 0xE6A3, 0x6C5E, 0xFBF1, 0x6C5F, 0xCBB0, 0x6C60, 0xF2AE, 0x6C68, 0xCDE7, 0x6C6A, 0xE8DC, 0x6C6D, 0xE7D7, 0x6C70, 0xF7C0, + 0x6C72, 0xD0E3, 0x6C76, 0xDAA1, 0x6C7A, 0xCCBD, 0x6C7D, 0xD1A9, 0x6C7E, 0xDDCC, 0x6C81, 0xE3FE, 0x6C82, 0xD1AA, 0x6C83, 0xE8AA, + 0x6C85, 0xEAB6, 0x6C86, 0xF9FA, 0x6C87, 0xE6CC, 0x6C88, 0xF6D8, 0x6C8C, 0xD4C7, 0x6C90, 0xD9CB, 0x6C92, 0xD9D2, 0x6C93, 0xD3CB, + 0x6C94, 0xD8F7, 0x6C95, 0xDAA9, 0x6C96, 0xF5F8, 0x6C99, 0xDEDE, 0x6C9A, 0xF2AF, 0x6C9B, 0xF8A9, 0x6CAB, 0xD8C8, 0x6CAE, 0xEEC1, + 0x6CB3, 0xF9C1, 0x6CB8, 0xDDF3, 0x6CB9, 0xEAFA, 0x6CBB, 0xF6BD, 0x6CBC, 0xE1BB, 0x6CBD, 0xCDBF, 0x6CBE, 0xF4D4, 0x6CBF, 0xE6CD, + 0x6CC1, 0xFCCF, 0x6CC2, 0xFBA2, 0x6CC4, 0xE0DC, 0x6CC9, 0xF4BB, 0x6CCA, 0xDAD5, 0x6CCC, 0xF9B2, 0x6CD3, 0xFBF2, 0x6CD5, 0xDBF6, + 0x6CD7, 0xDEDF, 0x6CDB, 0xDBF2, 0x6CE1, 0xF8DC, 0x6CE2, 0xF7EE, 0x6CE3, 0xEBE8, 0x6CE5, 0xD2FA, 0x6CE8, 0xF1BC, 0x6CEB, 0xFADA, + 0x6CEE, 0xDAEA, 0x6CEF, 0xDAC6, 0x6CF0, 0xF7C1, 0x6CF3, 0xE7B6, 0x6D0B, 0xE5C7, 0x6D0C, 0xD6AC, 0x6D11, 0xDCC7, 0x6D17, 0xE1A9, + 0x6D19, 0xE2AA, 0x6D1B, 0xD5A6, 0x6D1E, 0xD4D7, 0x6D25, 0xF2D0, 0x6D27, 0xEAFB, 0x6D29, 0xE0DD, 0x6D2A, 0xFBF3, 0x6D32, 0xF1BD, + 0x6D35, 0xE2E7, 0x6D36, 0xFDD7, 0x6D38, 0xCEC8, 0x6D39, 0xEAB7, 0x6D3B, 0xFCC0, 0x6D3D, 0xFDE7, 0x6D3E, 0xF7EF, 0x6D41, 0xD7B5, + 0x6D59, 0xEFBA, 0x6D5A, 0xF1DD, 0x6D5C, 0xDEB3, 0x6D63, 0xE8CB, 0x6D66, 0xF8DD, 0x6D69, 0xFBC7, 0x6D6A, 0xD5C8, 0x6D6C, 0xD7DF, + 0x6D6E, 0xDDA9, 0x6D74, 0xE9B1, 0x6D77, 0xFAAD, 0x6D78, 0xF6D9, 0x6D79, 0xFAF4, 0x6D7F, 0xF8AA, 0x6D85, 0xE6EE, 0x6D87, 0xCCDC, + 0x6D88, 0xE1BC, 0x6D89, 0xE0EF, 0x6D8C, 0xE9BF, 0x6D8D, 0xFCFD, 0x6D8E, 0xE6CE, 0x6D91, 0xE1D7, 0x6D93, 0xE6CF, 0x6D95, 0xF4F1, + 0x6DAF, 0xE4F3, 0x6DB2, 0xE4FB, 0x6DB5, 0xF9E4, 0x6DC0, 0xEFE3, 0x6DC3, 0xCFEE, 0x6DC4, 0xF6BE, 0x6DC5, 0xE0B2, 0x6DC6, 0xFCFE, + 0x6DC7, 0xD1AB, 0x6DCB, 0xD7FA, 0x6DCF, 0xFBC8, 0x6DD1, 0xE2D7, 0x6DD8, 0xD4A3, 0x6DD9, 0xF0F8, 0x6DDA, 0xD7A8, 0x6DDE, 0xE1E7, + 0x6DE1, 0xD3BF, 0x6DE8, 0xEFE4, 0x6DEA, 0xD7C5, 0x6DEB, 0xEBE2, 0x6DEE, 0xFCE7, 0x6DF1, 0xE4A2, 0x6DF3, 0xE2E8, 0x6DF5, 0xE6D0, + 0x6DF7, 0xFBE8, 0x6DF8, 0xF4E8, 0x6DF9, 0xE5F4, 0x6DFA, 0xF4BC, 0x6DFB, 0xF4D5, 0x6E17, 0xDFB6, 0x6E19, 0xFCB9, 0x6E1A, 0xEEC2, + 0x6E1B, 0xCAF5, 0x6E1F, 0xEFE5, 0x6E20, 0xCBE2, 0x6E21, 0xD4A4, 0x6E23, 0xDEE0, 0x6E24, 0xDAFD, 0x6E25, 0xE4C6, 0x6E26, 0xE8BE, + 0x6E2B, 0xE0DE, 0x6E2C, 0xF6B4, 0x6E2D, 0xEAD2, 0x6E2F, 0xF9FB, 0x6E32, 0xE0C2, 0x6E34, 0xCAE4, 0x6E36, 0xE7B7, 0x6E38, 0xEAFD, + 0x6E3A, 0xD9DD, 0x6E3C, 0xDAB4, 0x6E3D, 0xEEAA, 0x6E3E, 0xFBE9, 0x6E43, 0xDBCB, 0x6E44, 0xDAB5, 0x6E4A, 0xF1BE, 0x6E4D, 0xD3AC, + 0x6E56, 0xFBC9, 0x6E58, 0xDFCF, 0x6E5B, 0xD3C0, 0x6E5C, 0xE3D7, 0x6E5E, 0xEFE6, 0x6E5F, 0xFCD0, 0x6E67, 0xE9C0, 0x6E6B, 0xF5D3, + 0x6E6E, 0xECDC, 0x6E6F, 0xF7B7, 0x6E72, 0xEAB8, 0x6E73, 0xD1F9, 0x6E7A, 0xDCC8, 0x6E90, 0xEAB9, 0x6E96, 0xF1DE, 0x6E9C, 0xD7B6, + 0x6E9D, 0xCFB5, 0x6E9F, 0xD9A8, 0x6EA2, 0xECEE, 0x6EA5, 0xDDAA, 0x6EAA, 0xCDA2, 0x6EAB, 0xE8AE, 0x6EAF, 0xE1BD, 0x6EB1, 0xF2D1, + 0x6EB6, 0xE9C1, 0x6EBA, 0xD2FC, 0x6EC2, 0xDBB5, 0x6EC4, 0xF3E7, 0x6EC5, 0xD8FE, 0x6EC9, 0xFCD1, 0x6ECB, 0xEDB2, 0x6ECC, 0xF4AF, + 0x6ECE, 0xFBA3, 0x6ED1, 0xFCC1, 0x6ED3, 0xEEAB, 0x6ED4, 0xD4A5, 0x6EEF, 0xF4F2, 0x6EF4, 0xEED9, 0x6EF8, 0xFBCA, 0x6EFE, 0xCDE3, + 0x6EFF, 0xD8BB, 0x6F01, 0xE5DB, 0x6F02, 0xF8F7, 0x6F06, 0xF6D4, 0x6F0F, 0xD7A9, 0x6F11, 0xCBC9, 0x6F14, 0xE6D1, 0x6F15, 0xF0CC, + 0x6F20, 0xD8AE, 0x6F22, 0xF9D3, 0x6F23, 0xD5FE, 0x6F2B, 0xD8BC, 0x6F2C, 0xF2B0, 0x6F31, 0xE2AB, 0x6F32, 0xF3E8, 0x6F38, 0xEFC2, + 0x6F3F, 0xEDEC, 0x6F41, 0xE7B8, 0x6F51, 0xDAFE, 0x6F54, 0xCCBE, 0x6F57, 0xF2FC, 0x6F58, 0xDAEB, 0x6F5A, 0xE2D8, 0x6F5B, 0xEDD6, + 0x6F5E, 0xD6D1, 0x6F5F, 0xE0B3, 0x6F62, 0xFCD2, 0x6F64, 0xEBC8, 0x6F6D, 0xD3C1, 0x6F6E, 0xF0CD, 0x6F70, 0xCFF7, 0x6F7A, 0xEDD2, + 0x6F7C, 0xD4D8, 0x6F7D, 0xDCC9, 0x6F7E, 0xD7F1, 0x6F81, 0xDFBB, 0x6F84, 0xF3A5, 0x6F88, 0xF4CD, 0x6F8D, 0xF1BF, 0x6F8E, 0xF8B1, + 0x6F90, 0xE9FA, 0x6F94, 0xFBCB, 0x6F97, 0xCAD5, 0x6FA3, 0xF9D4, 0x6FA4, 0xF7CA, 0x6FA7, 0xD6C8, 0x6FAE, 0xFCE8, 0x6FAF, 0xF3BD, + 0x6FB1, 0xEEFE, 0x6FB3, 0xE7FE, 0x6FB9, 0xD3C2, 0x6FBE, 0xD3B6, 0x6FC0, 0xCCAD, 0x6FC1, 0xF6FA, 0x6FC2, 0xD6B2, 0x6FC3, 0xD2D8, + 0x6FCA, 0xE7D8, 0x6FD5, 0xE3A5, 0x6FDA, 0xE7B9, 0x6FDF, 0xF0AD, 0x6FE0, 0xFBCC, 0x6FE1, 0xEBA1, 0x6FE4, 0xD4A6, 0x6FE9, 0xFBCD, + 0x6FEB, 0xD5BD, 0x6FEC, 0xF1DF, 0x6FEF, 0xF6FB, 0x6FF1, 0xDEB4, 0x6FFE, 0xD5EB, 0x7001, 0xE5C8, 0x7005, 0xFBA4, 0x7006, 0xD4B9, + 0x7009, 0xDEE1, 0x700B, 0xE4A3, 0x700F, 0xD7B7, 0x7011, 0xF8EE, 0x7015, 0xDEB5, 0x7018, 0xD6D2, 0x701A, 0xF9D5, 0x701B, 0xE7BA, + 0x701C, 0xEBD5, 0x701D, 0xD5F7, 0x701E, 0xEFE7, 0x701F, 0xE1BE, 0x7023, 0xFAAE, 0x7027, 0xD6E9, 0x7028, 0xD6EE, 0x702F, 0xE7BB, + 0x7037, 0xECCB, 0x703E, 0xD5B3, 0x704C, 0xCEB4, 0x7050, 0xFBA5, 0x7051, 0xE1EE, 0x7058, 0xF7A8, 0x705D, 0xFBCE, 0x7063, 0xD8BD, + 0x706B, 0xFBFD, 0x7070, 0xFCE9, 0x7078, 0xCFB6, 0x707C, 0xEDC7, 0x707D, 0xEEAC, 0x7085, 0xCCDD, 0x708A, 0xF6A7, 0x708E, 0xE6FA, + 0x7092, 0xF5A4, 0x7098, 0xFDDC, 0x7099, 0xEDB3, 0x709A, 0xCEC9, 0x70A1, 0xEFE8, 0x70A4, 0xE1BF, 0x70AB, 0xFADB, 0x70AC, 0xCBE3, + 0x70AD, 0xF7A9, 0x70AF, 0xFBA6, 0x70B3, 0xDCB9, 0x70B7, 0xF1C0, 0x70B8, 0xEDC8, 0x70B9, 0xEFC3, 0x70C8, 0xD6AD, 0x70CB, 0xFDCE, + 0x70CF, 0xE8A1, 0x70D8, 0xFBF4, 0x70D9, 0xD5A7, 0x70DD, 0xF1F6, 0x70DF, 0xE6D3, 0x70F1, 0xCCDE, 0x70F9, 0xF8B2, 0x70FD, 0xDCEB, + 0x7104, 0xFDB6, 0x7109, 0xE5EA, 0x710C, 0xF1E0, 0x7119, 0xDBCC, 0x711A, 0xDDCD, 0x711E, 0xD4C8, 0x7121, 0xD9ED, 0x7126, 0xF5A5, + 0x7130, 0xE6FB, 0x7136, 0xE6D4, 0x7147, 0xFDC8, 0x7149, 0xD6A1, 0x714A, 0xFDBF, 0x714C, 0xFCD3, 0x714E, 0xEFA1, 0x7150, 0xE7BC, + 0x7156, 0xD1EE, 0x7159, 0xE6D5, 0x715C, 0xE9F2, 0x715E, 0xDFB0, 0x7164, 0xD8E0, 0x7165, 0xFCBA, 0x7166, 0xFDAF, 0x7167, 0xF0CE, + 0x7169, 0xDBE1, 0x716C, 0xE5C9, 0x716E, 0xEDB4, 0x717D, 0xE0C3, 0x7184, 0xE3D8, 0x7189, 0xE9FB, 0x718A, 0xEAA8, 0x718F, 0xFDB7, + 0x7192, 0xFBA7, 0x7194, 0xE9C2, 0x7199, 0xFDF7, 0x719F, 0xE2D9, 0x71A2, 0xDCEC, 0x71AC, 0xE8A2, 0x71B1, 0xE6F0, 0x71B9, 0xFDF8, + 0x71BA, 0xFDF9, 0x71BE, 0xF6BF, 0x71C1, 0xE7A7, 0x71C3, 0xE6D7, 0x71C8, 0xD4F3, 0x71C9, 0xD4C9, 0x71CE, 0xD6FA, 0x71D0, 0xD7F2, + 0x71D2, 0xE1C0, 0x71D4, 0xDBE2, 0x71D5, 0xE6D8, 0x71DF, 0xE7BD, 0x71E5, 0xF0CF, 0x71E6, 0xF3BE, 0x71E7, 0xE2AC, 0x71ED, 0xF5B7, + 0x71EE, 0xE0F0, 0x71FB, 0xFDB8, 0x71FC, 0xE3E8, 0x71FE, 0xD4A7, 0x71FF, 0xE8FC, 0x7200, 0xFAD2, 0x7206, 0xF8EF, 0x7210, 0xD6D3, + 0x721B, 0xD5B4, 0x722A, 0xF0D0, 0x722C, 0xF7F0, 0x722D, 0xEEB3, 0x7230, 0xEABA, 0x7232, 0xEAD3, 0x7235, 0xEDC9, 0x7236, 0xDDAB, + 0x723A, 0xE5AC, 0x723B, 0xFDA1, 0x723D, 0xDFD0, 0x723E, 0xECB3, 0x7240, 0xDFD1, 0x7246, 0xEDED, 0x7247, 0xF8B8, 0x7248, 0xF7FA, + 0x724C, 0xF8AB, 0x7252, 0xF4E0, 0x7258, 0xD4BA, 0x7259, 0xE4B3, 0x725B, 0xE9DA, 0x725D, 0xDEB6, 0x725F, 0xD9BF, 0x7261, 0xD9C0, + 0x7262, 0xD6EF, 0x7267, 0xD9CC, 0x7269, 0xDAAA, 0x7272, 0xDFE5, 0x7279, 0xF7E5, 0x727D, 0xCCB2, 0x7280, 0xDFF9, 0x7281, 0xD7E0, + 0x72A2, 0xD4BB, 0x72A7, 0xFDFA, 0x72AC, 0xCCB3, 0x72AF, 0xDBF3, 0x72C0, 0xDFD2, 0x72C2, 0xCECA, 0x72C4, 0xEEDA, 0x72CE, 0xE4E4, + 0x72D0, 0xFBCF, 0x72D7, 0xCFB7, 0x72D9, 0xEEC3, 0x72E1, 0xCEEA, 0x72E9, 0xE2AD, 0x72F8, 0xD7E1, 0x72F9, 0xFAF5, 0x72FC, 0xD5C9, + 0x72FD, 0xF8AC, 0x730A, 0xE7D9, 0x7316, 0xF3E9, 0x731B, 0xD8ED, 0x731C, 0xE3C4, 0x731D, 0xF0F1, 0x7325, 0xE8E5, 0x7329, 0xE0FA, + 0x732A, 0xEEC4, 0x732B, 0xD9DE, 0x7336, 0xEBA2, 0x7337, 0xEBA3, 0x733E, 0xFCC2, 0x733F, 0xEABB, 0x7344, 0xE8AB, 0x7345, 0xDEE2, + 0x7350, 0xEDEF, 0x7352, 0xE8A3, 0x7357, 0xCFF1, 0x7368, 0xD4BC, 0x736A, 0xFCEA, 0x7370, 0xE7BE, 0x7372, 0xFCF2, 0x7375, 0xD6B4, + 0x7378, 0xE2AE, 0x737A, 0xD3B7, 0x737B, 0xFACC, 0x7384, 0xFADC, 0x7386, 0xEDB5, 0x7387, 0xE1E3, 0x7389, 0xE8AC, 0x738B, 0xE8DD, + 0x738E, 0xEFE9, 0x7394, 0xF4BD, 0x7396, 0xCFB8, 0x7397, 0xE9DB, 0x7398, 0xD1AC, 0x739F, 0xDAC7, 0x73A7, 0xEBC9, 0x73A9, 0xE8CC, + 0x73AD, 0xDEB7, 0x73B2, 0xD6BC, 0x73B3, 0xD3E5, 0x73B9, 0xFADD, 0x73C0, 0xDAD6, 0x73C2, 0xCAB1, 0x73C9, 0xDAC8, 0x73CA, 0xDFA6, + 0x73CC, 0xF9B3, 0x73CD, 0xF2D2, 0x73CF, 0xCAC4, 0x73D6, 0xCECB, 0x73D9, 0xCDF5, 0x73DD, 0xFDB0, 0x73DE, 0xD5A8, 0x73E0, 0xF1C1, + 0x73E3, 0xE2E9, 0x73E4, 0xDCCA, 0x73E5, 0xECB4, 0x73E6, 0xFAC0, 0x73E9, 0xFBA8, 0x73EA, 0xD0A8, 0x73ED, 0xDAEC, 0x73F7, 0xD9EE, + 0x73F9, 0xE0FB, 0x73FD, 0xEFEA, 0x73FE, 0xFADE, 0x7401, 0xE0C4, 0x7403, 0xCFB9, 0x7405, 0xD5CA, 0x7406, 0xD7E2, 0x7407, 0xE2AF, + 0x7409, 0xD7B8, 0x7413, 0xE8CD, 0x741B, 0xF6DA, 0x7420, 0xEFA2, 0x7421, 0xE2DA, 0x7422, 0xF6FC, 0x7425, 0xFBD0, 0x7426, 0xD1AD, + 0x7428, 0xCDE4, 0x742A, 0xD1AE, 0x742B, 0xDCED, 0x742C, 0xE8CE, 0x742E, 0xF0F9, 0x742F, 0xCEB5, 0x7430, 0xE6FC, 0x7433, 0xD7FB, + 0x7434, 0xD0D6, 0x7435, 0xDDF5, 0x7436, 0xF7F1, 0x7438, 0xF6FD, 0x743A, 0xDBF7, 0x743F, 0xFBEA, 0x7440, 0xE9DC, 0x7441, 0xD9C1, + 0x7443, 0xF5F2, 0x7444, 0xE0C5, 0x744B, 0xEAD4, 0x7455, 0xF9C2, 0x7457, 0xEABC, 0x7459, 0xD2C5, 0x745A, 0xFBD1, 0x745B, 0xE7C0, + 0x745C, 0xEBA5, 0x745E, 0xDFFA, 0x745F, 0xE3A2, 0x7460, 0xD7B9, 0x7462, 0xE9C3, 0x7464, 0xE8FD, 0x7465, 0xE8AF, 0x7468, 0xF2D3, + 0x7469, 0xFBA9, 0x746A, 0xD8A5, 0x746F, 0xD5CB, 0x747E, 0xD0C8, 0x7482, 0xD1AF, 0x7483, 0xD7E3, 0x7487, 0xE0C6, 0x7489, 0xD6A2, + 0x748B, 0xEDF0, 0x7498, 0xD7F3, 0x749C, 0xFCD4, 0x749E, 0xDAD7, 0x749F, 0xCCDF, 0x74A1, 0xF2D4, 0x74A3, 0xD1B0, 0x74A5, 0xCCE0, + 0x74A7, 0xDBFD, 0x74A8, 0xF3BF, 0x74AA, 0xF0D1, 0x74B0, 0xFCBB, 0x74B2, 0xE2B0, 0x74B5, 0xE6A5, 0x74B9, 0xE2DB, 0x74BD, 0xDFDE, + 0x74BF, 0xE0C7, 0x74C6, 0xF2EF, 0x74CA, 0xCCE1, 0x74CF, 0xD6EA, 0x74D4, 0xE7C2, 0x74D8, 0xCEB6, 0x74DA, 0xF3C0, 0x74DC, 0xCDFE, + 0x74E0, 0xFBD2, 0x74E2, 0xF8F8, 0x74E3, 0xF7FB, 0x74E6, 0xE8BF, 0x74EE, 0xE8B7, 0x74F7, 0xEDB6, 0x7501, 0xDCBA, 0x7504, 0xCCB4, + 0x7511, 0xF1F7, 0x7515, 0xE8B8, 0x7518, 0xCAF6, 0x751A, 0xE4A4, 0x751B, 0xF4D6, 0x751F, 0xDFE6, 0x7523, 0xDFA7, 0x7525, 0xDFE7, + 0x7526, 0xE1C1, 0x7528, 0xE9C4, 0x752B, 0xDCCB, 0x752C, 0xE9C5, 0x7530, 0xEFA3, 0x7531, 0xEBA6, 0x7532, 0xCBA3, 0x7533, 0xE3E9, + 0x7537, 0xD1FB, 0x7538, 0xEFA4, 0x753A, 0xEFEB, 0x7547, 0xD0B4, 0x754C, 0xCDA3, 0x754F, 0xE8E6, 0x7551, 0xEFA5, 0x7553, 0xD3CC, + 0x7554, 0xDAED, 0x7559, 0xD7BA, 0x755B, 0xF2D5, 0x755C, 0xF5E5, 0x755D, 0xD9EF, 0x7562, 0xF9B4, 0x7565, 0xD5D4, 0x7566, 0xFDCF, + 0x756A, 0xDBE3, 0x756F, 0xF1E1, 0x7570, 0xECB6, 0x7575, 0xFBFE, 0x7576, 0xD3D7, 0x7578, 0xD1B1, 0x757A, 0xCBB1, 0x757F, 0xD1B2, + 0x7586, 0xCBB2, 0x7587, 0xF1C2, 0x758A, 0xF4E1, 0x758B, 0xF9B5, 0x758E, 0xE1C3, 0x758F, 0xE1C2, 0x7591, 0xEBF7, 0x759D, 0xDFA8, + 0x75A5, 0xCBCA, 0x75AB, 0xE6B9, 0x75B1, 0xF8DE, 0x75B2, 0xF9AA, 0x75B3, 0xCAF7, 0x75B5, 0xEDB7, 0x75B8, 0xD3B8, 0x75B9, 0xF2D6, + 0x75BC, 0xD4D9, 0x75BD, 0xEEC5, 0x75BE, 0xF2F0, 0x75C2, 0xCAB2, 0x75C5, 0xDCBB, 0x75C7, 0xF1F8, 0x75CD, 0xECB7, 0x75D2, 0xE5CA, + 0x75D4, 0xF6C0, 0x75D5, 0xFDDD, 0x75D8, 0xD4E3, 0x75D9, 0xCCE2, 0x75DB, 0xF7D4, 0x75E2, 0xD7E5, 0x75F0, 0xD3C3, 0x75F2, 0xD8A6, + 0x75F4, 0xF6C1, 0x75FA, 0xDDF6, 0x75FC, 0xCDC0, 0x7600, 0xE5DC, 0x760D, 0xE5CB, 0x7619, 0xE1C4, 0x761F, 0xE8B0, 0x7620, 0xF4B0, + 0x7621, 0xF3EA, 0x7622, 0xDAEE, 0x7624, 0xD7BB, 0x7626, 0xE2B1, 0x763B, 0xD7AA, 0x7642, 0xD6FB, 0x764C, 0xE4DF, 0x764E, 0xCAD6, + 0x7652, 0xEBA8, 0x7656, 0xDBFE, 0x7661, 0xF6C2, 0x7664, 0xEFBB, 0x7669, 0xD4FD, 0x766C, 0xE0C8, 0x7670, 0xE8B9, 0x7672, 0xEFA6, + 0x7678, 0xCDA4, 0x767B, 0xD4F4, 0x767C, 0xDBA1, 0x767D, 0xDBDC, 0x767E, 0xDBDD, 0x7684, 0xEEDC, 0x7686, 0xCBCB, 0x7687, 0xFCD5, + 0x768E, 0xCEEB, 0x7690, 0xCDC1, 0x7693, 0xFBD3, 0x76AE, 0xF9AB, 0x76BA, 0xF5D4, 0x76BF, 0xD9A9, 0x76C2, 0xE9DD, 0x76C3, 0xDBCD, + 0x76C6, 0xDDCE, 0x76C8, 0xE7C3, 0x76CA, 0xECCC, 0x76D2, 0xF9EC, 0x76D6, 0xCBCC, 0x76DB, 0xE0FC, 0x76DC, 0xD4A8, 0x76DE, 0xEDD3, + 0x76DF, 0xD8EF, 0x76E1, 0xF2D7, 0x76E3, 0xCAF8, 0x76E4, 0xDAEF, 0x76E7, 0xD6D4, 0x76EE, 0xD9CD, 0x76F2, 0xD8EE, 0x76F4, 0xF2C1, + 0x76F8, 0xDFD3, 0x76FC, 0xDAF0, 0x76FE, 0xE2EA, 0x7701, 0xE0FD, 0x7704, 0xD8F8, 0x7708, 0xF7AF, 0x7709, 0xDAB6, 0x770B, 0xCAD7, + 0x771E, 0xF2D8, 0x7720, 0xD8F9, 0x7729, 0xFADF, 0x7737, 0xCFEF, 0x7738, 0xD9C2, 0x773A, 0xF0D2, 0x773C, 0xE4D1, 0x7740, 0xF3B7, + 0x774D, 0xFAE0, 0x775B, 0xEFEC, 0x7761, 0xE2B2, 0x7763, 0xD4BD, 0x7766, 0xD9CE, 0x776B, 0xF4E2, 0x7779, 0xD4A9, 0x777E, 0xCDC2, + 0x777F, 0xE7DA, 0x778B, 0xF2D9, 0x7791, 0xD9AA, 0x779E, 0xD8BE, 0x77A5, 0xDCAD, 0x77AC, 0xE2EB, 0x77AD, 0xD6FC, 0x77B0, 0xCAF9, + 0x77B3, 0xD4DA, 0x77BB, 0xF4D7, 0x77BC, 0xCCA1, 0x77BF, 0xCFBA, 0x77D7, 0xF5B8, 0x77DB, 0xD9C3, 0x77DC, 0xD0E8, 0x77E2, 0xE3C5, + 0x77E3, 0xEBF8, 0x77E5, 0xF2B1, 0x77E9, 0xCFBB, 0x77ED, 0xD3AD, 0x77EE, 0xE8E1, 0x77EF, 0xCEEC, 0x77F3, 0xE0B4, 0x7802, 0xDEE3, + 0x7812, 0xDDF7, 0x7825, 0xF2B2, 0x7826, 0xF3F6, 0x7827, 0xF6DB, 0x782C, 0xD7FE, 0x7832, 0xF8DF, 0x7834, 0xF7F2, 0x7845, 0xD0A9, + 0x784F, 0xE6DA, 0x785D, 0xF5A6, 0x786B, 0xD7BC, 0x786C, 0xCCE3, 0x786F, 0xE6DB, 0x787C, 0xDDDD, 0x7881, 0xD1B3, 0x7887, 0xEFED, + 0x788C, 0xD6DE, 0x788D, 0xE4F4, 0x788E, 0xE1EF, 0x7891, 0xDDF8, 0x7897, 0xE8CF, 0x78A3, 0xCAE5, 0x78A7, 0xDCA1, 0x78A9, 0xE0B5, + 0x78BA, 0xFCAC, 0x78BB, 0xFCAD, 0x78BC, 0xD8A7, 0x78C1, 0xEDB8, 0x78C5, 0xDBB6, 0x78CA, 0xD6F0, 0x78CB, 0xF3AF, 0x78CE, 0xCDA5, + 0x78D0, 0xDAF1, 0x78E8, 0xD8A8, 0x78EC, 0xCCE4, 0x78EF, 0xD1B4, 0x78F5, 0xCAD8, 0x78FB, 0xDAF2, 0x7901, 0xF5A7, 0x790E, 0xF5A8, + 0x7916, 0xE6A6, 0x792A, 0xD5EC, 0x792B, 0xD5F8, 0x792C, 0xDAF3, 0x793A, 0xE3C6, 0x793E, 0xDEE4, 0x7940, 0xDEE5, 0x7941, 0xD1B5, + 0x7947, 0xD1B6, 0x7948, 0xD1B7, 0x7949, 0xF2B3, 0x7950, 0xE9DE, 0x7956, 0xF0D3, 0x7957, 0xF2B4, 0x795A, 0xF0D4, 0x795B, 0xCBE4, + 0x795C, 0xFBD4, 0x795D, 0xF5E6, 0x795E, 0xE3EA, 0x7960, 0xDEE6, 0x7965, 0xDFD4, 0x7968, 0xF8F9, 0x796D, 0xF0AE, 0x797A, 0xD1B8, + 0x797F, 0xD6DF, 0x7981, 0xD0D7, 0x798D, 0xFCA1, 0x798E, 0xEFEE, 0x798F, 0xDCD8, 0x7991, 0xE9DF, 0x79A6, 0xE5DD, 0x79A7, 0xFDFB, + 0x79AA, 0xE0C9, 0x79AE, 0xD6C9, 0x79B1, 0xD4AA, 0x79B3, 0xE5CC, 0x79B9, 0xE9E0, 0x79BD, 0xD0D8, 0x79BE, 0xFCA2, 0x79BF, 0xD4BE, + 0x79C0, 0xE2B3, 0x79C1, 0xDEE7, 0x79C9, 0xDCBC, 0x79CA, 0xD2B6, 0x79CB, 0xF5D5, 0x79D1, 0xCEA1, 0x79D2, 0xF5A9, 0x79D5, 0xDDF9, + 0x79D8, 0xDDFA, 0x79DF, 0xF0D5, 0x79E4, 0xF6DF, 0x79E6, 0xF2DA, 0x79E7, 0xE4EB, 0x79E9, 0xF2F1, 0x79FB, 0xECB9, 0x7A00, 0xFDFC, + 0x7A05, 0xE1AA, 0x7A08, 0xCAD9, 0x7A0B, 0xEFEF, 0x7A0D, 0xF5AA, 0x7A14, 0xECF9, 0x7A17, 0xF8AD, 0x7A19, 0xF2C2, 0x7A1A, 0xF6C3, + 0x7A1C, 0xD7D2, 0x7A1F, 0xF9A2, 0x7A20, 0xF0D6, 0x7A2E, 0xF0FA, 0x7A31, 0xF6E0, 0x7A36, 0xE9F3, 0x7A37, 0xF2C3, 0x7A3B, 0xD4AB, + 0x7A3C, 0xCAB3, 0x7A3D, 0xCDA6, 0x7A3F, 0xCDC3, 0x7A40, 0xCDDA, 0x7A46, 0xD9CF, 0x7A49, 0xF6C4, 0x7A4D, 0xEEDD, 0x7A4E, 0xE7C4, + 0x7A57, 0xE2B4, 0x7A61, 0xDFE2, 0x7A62, 0xE7DB, 0x7A69, 0xE8B1, 0x7A6B, 0xFCAE, 0x7A70, 0xE5CD, 0x7A74, 0xFAEB, 0x7A76, 0xCFBC, + 0x7A79, 0xCFE2, 0x7A7A, 0xCDF6, 0x7A7D, 0xEFF0, 0x7A7F, 0xF4BE, 0x7A81, 0xD4CD, 0x7A84, 0xF3B8, 0x7A88, 0xE9A1, 0x7A92, 0xF2F2, + 0x7A93, 0xF3EB, 0x7A95, 0xF0D7, 0x7A98, 0xCFD7, 0x7A9F, 0xCFDF, 0x7AA9, 0xE8C0, 0x7AAA, 0xE8C1, 0x7AAE, 0xCFE3, 0x7AAF, 0xE9A2, + 0x7ABA, 0xD0AA, 0x7AC4, 0xF3C1, 0x7AC5, 0xD0AB, 0x7AC7, 0xD4E4, 0x7ACA, 0xEFBC, 0x7ACB, 0xD8A1, 0x7AD7, 0xD9DF, 0x7AD9, 0xF3D7, + 0x7ADD, 0xDCBD, 0x7ADF, 0xCCE5, 0x7AE0, 0xEDF1, 0x7AE3, 0xF1E2, 0x7AE5, 0xD4DB, 0x7AEA, 0xE2B5, 0x7AED, 0xCAE6, 0x7AEF, 0xD3AE, + 0x7AF6, 0xCCE6, 0x7AF9, 0xF1D3, 0x7AFA, 0xF5E7, 0x7AFF, 0xCADA, 0x7B0F, 0xFBEE, 0x7B11, 0xE1C5, 0x7B19, 0xDFE9, 0x7B1B, 0xEEDE, + 0x7B1E, 0xF7C2, 0x7B20, 0xD8A2, 0x7B26, 0xDDAC, 0x7B2C, 0xF0AF, 0x7B2D, 0xD6BD, 0x7B39, 0xE1AB, 0x7B46, 0xF9B6, 0x7B49, 0xD4F5, + 0x7B4B, 0xD0C9, 0x7B4C, 0xEFA7, 0x7B4D, 0xE2EC, 0x7B4F, 0xDBEA, 0x7B50, 0xCECC, 0x7B51, 0xF5E8, 0x7B52, 0xF7D5, 0x7B54, 0xD3CD, + 0x7B56, 0xF3FE, 0x7B60, 0xD0B5, 0x7B6C, 0xE0FE, 0x7B6E, 0xDFFB, 0x7B75, 0xE6DD, 0x7B7D, 0xE8A4, 0x7B87, 0xCBCD, 0x7B8B, 0xEFA8, + 0x7B8F, 0xEEB4, 0x7B94, 0xDAD8, 0x7B95, 0xD1B9, 0x7B97, 0xDFA9, 0x7B9A, 0xF3B0, 0x7B9D, 0xCCC4, 0x7BA1, 0xCEB7, 0x7BAD, 0xEFA9, + 0x7BB1, 0xDFD5, 0x7BB4, 0xEDD7, 0x7BB8, 0xEEC6, 0x7BC0, 0xEFBD, 0x7BC1, 0xFCD6, 0x7BC4, 0xDBF4, 0x7BC6, 0xEFAA, 0x7BC7, 0xF8B9, + 0x7BC9, 0xF5E9, 0x7BD2, 0xE3D9, 0x7BE0, 0xE1C6, 0x7BE4, 0xD4BF, 0x7BE9, 0xDEE8, 0x7C07, 0xF0EA, 0x7C12, 0xF3C2, 0x7C1E, 0xD3AF, + 0x7C21, 0xCADB, 0x7C27, 0xFCD7, 0x7C2A, 0xEDD8, 0x7C2B, 0xE1C7, 0x7C3D, 0xF4D8, 0x7C3E, 0xD6B3, 0x7C3F, 0xDDAD, 0x7C43, 0xD5BE, + 0x7C4C, 0xF1C3, 0x7C4D, 0xEEDF, 0x7C60, 0xD6EB, 0x7C64, 0xF4D9, 0x7C6C, 0xD7E6, 0x7C73, 0xDAB7, 0x7C83, 0xDDFB, 0x7C89, 0xDDCF, + 0x7C92, 0xD8A3, 0x7C95, 0xDAD9, 0x7C97, 0xF0D8, 0x7C98, 0xEFC4, 0x7C9F, 0xE1D8, 0x7CA5, 0xF1D4, 0x7CA7, 0xEDF2, 0x7CAE, 0xD5DB, + 0x7CB1, 0xD5DC, 0x7CB2, 0xF3C4, 0x7CB3, 0xCBD7, 0x7CB9, 0xE2B6, 0x7CBE, 0xEFF1, 0x7CCA, 0xFBD5, 0x7CD6, 0xD3D8, 0x7CDE, 0xDDD0, + 0x7CDF, 0xF0D9, 0x7CE0, 0xCBB3, 0x7CE7, 0xD5DD, 0x7CFB, 0xCDA7, 0x7CFE, 0xD0AC, 0x7D00, 0xD1BA, 0x7D02, 0xF1C4, 0x7D04, 0xE5B3, + 0x7D05, 0xFBF5, 0x7D06, 0xE9E1, 0x7D07, 0xFDE0, 0x7D08, 0xFCBC, 0x7D0A, 0xDAA2, 0x7D0B, 0xDAA3, 0x7D0D, 0xD2A1, 0x7D10, 0xD2EF, + 0x7D14, 0xE2ED, 0x7D17, 0xDEE9, 0x7D18, 0xCEDC, 0x7D19, 0xF2B5, 0x7D1A, 0xD0E4, 0x7D1B, 0xDDD1, 0x7D20, 0xE1C8, 0x7D21, 0xDBB7, + 0x7D22, 0xDFE3, 0x7D2B, 0xEDB9, 0x7D2C, 0xF1C5, 0x7D2E, 0xF3CF, 0x7D2F, 0xD7AB, 0x7D30, 0xE1AC, 0x7D33, 0xE3EB, 0x7D35, 0xEEC7, + 0x7D39, 0xE1C9, 0x7D3A, 0xCAFA, 0x7D42, 0xF0FB, 0x7D43, 0xFAE1, 0x7D44, 0xF0DA, 0x7D45, 0xCCE7, 0x7D46, 0xDAF4, 0x7D50, 0xCCBF, + 0x7D5E, 0xCEED, 0x7D61, 0xD5A9, 0x7D62, 0xFAE2, 0x7D66, 0xD0E5, 0x7D68, 0xEBD6, 0x7D6A, 0xECDF, 0x7D6E, 0xDFFC, 0x7D71, 0xF7D6, + 0x7D72, 0xDEEA, 0x7D73, 0xCBB4, 0x7D76, 0xEFBE, 0x7D79, 0xCCB5, 0x7D7F, 0xCFBD, 0x7D8E, 0xEFF2, 0x7D8F, 0xE2B7, 0x7D93, 0xCCE8, + 0x7D9C, 0xF0FC, 0x7DA0, 0xD6E0, 0x7DA2, 0xF1C6, 0x7DAC, 0xE2B8, 0x7DAD, 0xEBAB, 0x7DB1, 0xCBB5, 0x7DB2, 0xD8D1, 0x7DB4, 0xF4CE, + 0x7DB5, 0xF3F7, 0x7DB8, 0xD7C6, 0x7DBA, 0xD1BB, 0x7DBB, 0xF7AA, 0x7DBD, 0xEDCA, 0x7DBE, 0xD7D3, 0x7DBF, 0xD8FA, 0x7DC7, 0xF6C5, + 0x7DCA, 0xD1CC, 0x7DCB, 0xDDFC, 0x7DD6, 0xDFFD, 0x7DD8, 0xF9E5, 0x7DDA, 0xE0CA, 0x7DDD, 0xF2FD, 0x7DDE, 0xD3B0, 0x7DE0, 0xF4F3, + 0x7DE1, 0xDAC9, 0x7DE3, 0xE6DE, 0x7DE8, 0xF8BA, 0x7DE9, 0xE8D0, 0x7DEC, 0xD8FB, 0x7DEF, 0xEAD5, 0x7DF4, 0xD6A3, 0x7DFB, 0xF6C6, + 0x7E09, 0xF2DB, 0x7E0A, 0xE4FC, 0x7E15, 0xE8B2, 0x7E1B, 0xDADA, 0x7E1D, 0xF2DC, 0x7E1E, 0xFBD6, 0x7E1F, 0xE9B2, 0x7E21, 0xEEAD, + 0x7E23, 0xFAE3, 0x7E2B, 0xDCEE, 0x7E2E, 0xF5EA, 0x7E2F, 0xE6E0, 0x7E31, 0xF0FD, 0x7E37, 0xD7AC, 0x7E3D, 0xF5C5, 0x7E3E, 0xEEE0, + 0x7E41, 0xDBE5, 0x7E43, 0xDDDE, 0x7E46, 0xD9F0, 0x7E47, 0xE9A3, 0x7E52, 0xF1F9, 0x7E54, 0xF2C4, 0x7E55, 0xE0CB, 0x7E5E, 0xE9A4, + 0x7E61, 0xE2B9, 0x7E69, 0xE3B1, 0x7E6A, 0xFCEB, 0x7E6B, 0xCDA8, 0x7E6D, 0xCCB6, 0x7E70, 0xF0DB, 0x7E79, 0xE6BA, 0x7E7C, 0xCDA9, + 0x7E82, 0xF3C3, 0x7E8C, 0xE1D9, 0x7E8F, 0xEFAB, 0x7E93, 0xE7C5, 0x7E96, 0xE0E9, 0x7E98, 0xF3C5, 0x7E9B, 0xD4C0, 0x7E9C, 0xD5BF, + 0x7F36, 0xDDAE, 0x7F38, 0xF9FC, 0x7F3A, 0xCCC0, 0x7F4C, 0xE5A2, 0x7F50, 0xCEB8, 0x7F54, 0xD8D2, 0x7F55, 0xF9D6, 0x7F6A, 0xF1AA, + 0x7F6B, 0xCED1, 0x7F6E, 0xF6C7, 0x7F70, 0xDBEB, 0x7F72, 0xDFFE, 0x7F75, 0xD8E1, 0x7F77, 0xF7F3, 0x7F79, 0xD7E7, 0x7F85, 0xD4FE, + 0x7F88, 0xD1BC, 0x7F8A, 0xE5CF, 0x7F8C, 0xCBB6, 0x7F8E, 0xDAB8, 0x7F94, 0xCDC4, 0x7F9A, 0xD6BE, 0x7F9E, 0xE2BA, 0x7FA4, 0xCFD8, + 0x7FA8, 0xE0CC, 0x7FA9, 0xEBF9, 0x7FB2, 0xFDFD, 0x7FB8, 0xD7E8, 0x7FB9, 0xCBD8, 0x7FBD, 0xE9E2, 0x7FC1, 0xE8BA, 0x7FC5, 0xE3C7, + 0x7FCA, 0xECCD, 0x7FCC, 0xECCE, 0x7FCE, 0xD6BF, 0x7FD2, 0xE3A7, 0x7FD4, 0xDFD6, 0x7FD5, 0xFDE8, 0x7FDF, 0xEEE1, 0x7FE0, 0xF6A8, + 0x7FE1, 0xDDFD, 0x7FE9, 0xF8BB, 0x7FEB, 0xE8D1, 0x7FF0, 0xF9D7, 0x7FF9, 0xCEEE, 0x7FFC, 0xECCF, 0x8000, 0xE9A5, 0x8001, 0xD6D5, + 0x8003, 0xCDC5, 0x8005, 0xEDBA, 0x8006, 0xD1BD, 0x8009, 0xCFBE, 0x800C, 0xECBB, 0x8010, 0xD2B1, 0x8015, 0xCCE9, 0x8017, 0xD9C4, + 0x8018, 0xE9FC, 0x802D, 0xD1BE, 0x8033, 0xECBC, 0x8036, 0xE5AD, 0x803D, 0xF7B0, 0x803F, 0xCCEA, 0x8043, 0xD3C4, 0x8046, 0xD6C0, + 0x804A, 0xD6FD, 0x8056, 0xE1A1, 0x8058, 0xDEBD, 0x805A, 0xF6A9, 0x805E, 0xDAA4, 0x806F, 0xD6A4, 0x8070, 0xF5C6, 0x8072, 0xE1A2, + 0x8073, 0xE9C6, 0x8077, 0xF2C5, 0x807D, 0xF4E9, 0x807E, 0xD6EC, 0x807F, 0xEBD3, 0x8084, 0xECBD, 0x8085, 0xE2DC, 0x8086, 0xDEEB, + 0x8087, 0xF0DC, 0x8089, 0xEBBF, 0x808B, 0xD7CE, 0x808C, 0xD1BF, 0x8096, 0xF5AB, 0x809B, 0xF9FD, 0x809D, 0xCADC, 0x80A1, 0xCDC6, + 0x80A2, 0xF2B6, 0x80A5, 0xDDFE, 0x80A9, 0xCCB7, 0x80AA, 0xDBB8, 0x80AF, 0xD0E9, 0x80B1, 0xCEDD, 0x80B2, 0xEBC0, 0x80B4, 0xFDA2, + 0x80BA, 0xF8CB, 0x80C3, 0xEAD6, 0x80C4, 0xF1B0, 0x80CC, 0xDBCE, 0x80CE, 0xF7C3, 0x80DA, 0xDBCF, 0x80DB, 0xCBA4, 0x80DE, 0xF8E0, + 0x80E1, 0xFBD7, 0x80E4, 0xEBCA, 0x80E5, 0xE0A1, 0x80F1, 0xCECD, 0x80F4, 0xD4DC, 0x80F8, 0xFDD8, 0x80FD, 0xD2F6, 0x8102, 0xF2B7, + 0x8105, 0xFAF6, 0x8106, 0xF6AA, 0x8107, 0xFAF7, 0x8108, 0xD8E6, 0x810A, 0xF4B1, 0x8118, 0xE8D2, 0x811A, 0xCAC5, 0x811B, 0xCCEB, + 0x8123, 0xE2EE, 0x8129, 0xE2BB, 0x812B, 0xF7AD, 0x812F, 0xF8E1, 0x8139, 0xF3EC, 0x813E, 0xDEA1, 0x814B, 0xE4FD, 0x814E, 0xE3EC, + 0x8150, 0xDDAF, 0x8151, 0xDDB0, 0x8154, 0xCBB7, 0x8155, 0xE8D3, 0x8165, 0xE1A3, 0x8166, 0xD2E0, 0x816B, 0xF0FE, 0x8170, 0xE9A6, + 0x8171, 0xCBF2, 0x8178, 0xEDF3, 0x8179, 0xDCD9, 0x817A, 0xE0CD, 0x817F, 0xF7DA, 0x8180, 0xDBB9, 0x8188, 0xCCAE, 0x818A, 0xDADB, + 0x818F, 0xCDC7, 0x819A, 0xDDB1, 0x819C, 0xD8AF, 0x819D, 0xE3A3, 0x81A0, 0xCEEF, 0x81A3, 0xF2F3, 0x81A8, 0xF8B3, 0x81B3, 0xE0CE, + 0x81B5, 0xF5FD, 0x81BA, 0xEBEC, 0x81BD, 0xD3C5, 0x81BE, 0xFCEC, 0x81BF, 0xD2DB, 0x81C0, 0xD4EB, 0x81C2, 0xDEA2, 0x81C6, 0xE5E6, + 0x81CD, 0xF0B0, 0x81D8, 0xD5C4, 0x81DF, 0xEDF4, 0x81E3, 0xE3ED, 0x81E5, 0xE8C2, 0x81E7, 0xEDF5, 0x81E8, 0xD7FC, 0x81EA, 0xEDBB, + 0x81ED, 0xF6AB, 0x81F3, 0xF2B8, 0x81F4, 0xF6C8, 0x81FA, 0xD3E6, 0x81FB, 0xF2DD, 0x81FC, 0xCFBF, 0x81FE, 0xEBAC, 0x8205, 0xCFC0, + 0x8207, 0xE6A8, 0x8208, 0xFDE9, 0x820A, 0xCFC1, 0x820C, 0xE0DF, 0x820D, 0xDEEC, 0x8212, 0xE0A2, 0x821B, 0xF4BF, 0x821C, 0xE2EF, + 0x821E, 0xD9F1, 0x821F, 0xF1C7, 0x8221, 0xCBB8, 0x822A, 0xF9FE, 0x822B, 0xDBBA, 0x822C, 0xDAF5, 0x8235, 0xF6EC, 0x8236, 0xDADC, + 0x8237, 0xFAE4, 0x8239, 0xE0CF, 0x8240, 0xDDB2, 0x8245, 0xE6A9, 0x8247, 0xEFF3, 0x8259, 0xF3ED, 0x8264, 0xEBFA, 0x8266, 0xF9E6, + 0x826E, 0xCADD, 0x826F, 0xD5DE, 0x8271, 0xCADE, 0x8272, 0xDFE4, 0x8276, 0xE6FD, 0x8278, 0xF5AC, 0x827E, 0xE4F5, 0x828B, 0xE9E3, + 0x828D, 0xEDCB, 0x828E, 0xCFE4, 0x8292, 0xD8D3, 0x8299, 0xDDB3, 0x829A, 0xD4EC, 0x829D, 0xF2B9, 0x829F, 0xDFB7, 0x82A5, 0xCBCE, + 0x82A6, 0xFBD8, 0x82A9, 0xD0D9, 0x82AC, 0xDDD2, 0x82AD, 0xF7F4, 0x82AE, 0xE7DC, 0x82AF, 0xE4A5, 0x82B1, 0xFCA3, 0x82B3, 0xDBBB, + 0x82B7, 0xF2BA, 0x82B8, 0xE9FD, 0x82B9, 0xD0CA, 0x82BB, 0xF5D6, 0x82BC, 0xD9C5, 0x82BD, 0xE4B4, 0x82BF, 0xEDA7, 0x82D1, 0xEABD, + 0x82D2, 0xE6FE, 0x82D4, 0xF7C4, 0x82D5, 0xF5AD, 0x82D7, 0xD9E0, 0x82DB, 0xCAB4, 0x82DE, 0xF8E2, 0x82DF, 0xCFC2, 0x82E1, 0xECBE, + 0x82E5, 0xE5B4, 0x82E6, 0xCDC8, 0x82E7, 0xEEC8, 0x82F1, 0xE7C8, 0x82FD, 0xCDC9, 0x82FE, 0xF9B7, 0x8301, 0xF1E8, 0x8302, 0xD9F2, + 0x8303, 0xDBF5, 0x8304, 0xCAB5, 0x8305, 0xD9C6, 0x8309, 0xD8C9, 0x8317, 0xD9AB, 0x8328, 0xEDBC, 0x832B, 0xD8D4, 0x832F, 0xDCDA, + 0x8331, 0xE2BC, 0x8334, 0xFCED, 0x8335, 0xECE0, 0x8336, 0xD2FE, 0x8338, 0xE9C7, 0x8339, 0xE6AA, 0x8340, 0xE2F0, 0x8347, 0xFABB, + 0x8349, 0xF5AE, 0x834A, 0xFBAA, 0x834F, 0xECFB, 0x8351, 0xECBF, 0x8352, 0xFCD8, 0x8373, 0xD4E5, 0x8377, 0xF9C3, 0x837B, 0xEEE2, + 0x8389, 0xD7E9, 0x838A, 0xEDF6, 0x838E, 0xDEED, 0x8396, 0xCCEC, 0x8398, 0xE3EE, 0x839E, 0xE8D4, 0x83A2, 0xFAF8, 0x83A9, 0xDDB4, + 0x83AA, 0xE4B5, 0x83AB, 0xD8B0, 0x83BD, 0xD8D5, 0x83C1, 0xF4EA, 0x83C5, 0xCEB9, 0x83C9, 0xD6E1, 0x83CA, 0xCFD2, 0x83CC, 0xD0B6, + 0x83D3, 0xCEA2, 0x83D6, 0xF3EE, 0x83DC, 0xF3F8, 0x83E9, 0xDCCC, 0x83EB, 0xD0CB, 0x83EF, 0xFCA4, 0x83F0, 0xCDCA, 0x83F1, 0xD7D4, + 0x83F2, 0xDEA3, 0x83F4, 0xE4E0, 0x83F9, 0xEEC9, 0x83FD, 0xE2DD, 0x8403, 0xF5FE, 0x8404, 0xD4AC, 0x840A, 0xD5D1, 0x840C, 0xD8F0, + 0x840D, 0xF8C3, 0x840E, 0xEAD7, 0x8429, 0xF5D7, 0x842C, 0xD8BF, 0x8431, 0xFDC0, 0x8438, 0xEBAD, 0x843D, 0xD5AA, 0x8449, 0xE7A8, + 0x8457, 0xEECA, 0x845B, 0xCAE7, 0x8461, 0xF8E3, 0x8463, 0xD4DD, 0x8466, 0xEAD8, 0x846B, 0xFBD9, 0x846C, 0xEDF7, 0x846F, 0xE5B5, + 0x8475, 0xD0AD, 0x847A, 0xF1F1, 0x8490, 0xE2BD, 0x8494, 0xE3C8, 0x8499, 0xD9D5, 0x849C, 0xDFAA, 0x84A1, 0xDBBC, 0x84B2, 0xF8E4, + 0x84B8, 0xF1FA, 0x84BB, 0xE5B6, 0x84BC, 0xF3EF, 0x84BF, 0xFBDA, 0x84C0, 0xE1E0, 0x84C2, 0xD9AC, 0x84C4, 0xF5EB, 0x84C6, 0xE0B6, + 0x84C9, 0xE9C8, 0x84CB, 0xCBCF, 0x84CD, 0xE3C9, 0x84D1, 0xDEEE, 0x84DA, 0xE2BE, 0x84EC, 0xDCEF, 0x84EE, 0xD6A5, 0x84F4, 0xE2F1, + 0x84FC, 0xD6FE, 0x8511, 0xD9A1, 0x8513, 0xD8C0, 0x8514, 0xDCDB, 0x8517, 0xEDBD, 0x8518, 0xDFB8, 0x851A, 0xEAA5, 0x851E, 0xD7AD, + 0x8521, 0xF3F9, 0x8523, 0xEDF8, 0x8525, 0xF5C7, 0x852C, 0xE1CA, 0x852D, 0xEBE3, 0x852F, 0xF2DE, 0x853D, 0xF8CC, 0x853F, 0xEAD9, + 0x8541, 0xD3C6, 0x8543, 0xDBE6, 0x8549, 0xF5AF, 0x854E, 0xCEF0, 0x8553, 0xE9FE, 0x8559, 0xFBB6, 0x8563, 0xE2F2, 0x8568, 0xCFF2, + 0x8569, 0xF7B9, 0x856A, 0xD9F3, 0x856D, 0xE1CB, 0x8584, 0xDADD, 0x8587, 0xDAB9, 0x858F, 0xEBFB, 0x8591, 0xCBB9, 0x8594, 0xEDF9, + 0x859B, 0xE0E0, 0x85A6, 0xF4C0, 0x85A8, 0xFDBC, 0x85A9, 0xDFB1, 0x85AA, 0xE3EF, 0x85AF, 0xE0A3, 0x85B0, 0xFDB9, 0x85BA, 0xF0B1, + 0x85C1, 0xCDCB, 0x85C9, 0xEDBE, 0x85CD, 0xD5C0, 0x85CE, 0xE3F0, 0x85CF, 0xEDFA, 0x85D5, 0xE9E4, 0x85DC, 0xD5ED, 0x85DD, 0xE7DD, + 0x85E4, 0xD4F6, 0x85E5, 0xE5B7, 0x85E9, 0xDBE7, 0x85EA, 0xE2BF, 0x85F7, 0xEECB, 0x85FA, 0xD7F4, 0x85FB, 0xF0DD, 0x85FF, 0xCEAB, + 0x8602, 0xE7DE, 0x8606, 0xD6D6, 0x8607, 0xE1CC, 0x860A, 0xE8B3, 0x8616, 0xE5EE, 0x8617, 0xDCA2, 0x861A, 0xE0D0, 0x862D, 0xD5B5, + 0x863F, 0xD5A1, 0x864E, 0xFBDB, 0x8650, 0xF9CB, 0x8654, 0xCBF3, 0x8655, 0xF4A5, 0x865B, 0xFAC8, 0x865C, 0xD6D7, 0x865E, 0xE9E5, + 0x865F, 0xFBDC, 0x8667, 0xFDD0, 0x8679, 0xFBF6, 0x868A, 0xDAA5, 0x868C, 0xDBBD, 0x8693, 0xECE2, 0x86A3, 0xCDF7, 0x86A4, 0xF0DE, + 0x86A9, 0xF6C9, 0x86C7, 0xDEEF, 0x86CB, 0xD3B1, 0x86D4, 0xFCEE, 0x86D9, 0xE8C3, 0x86DB, 0xF1C8, 0x86DF, 0xCEF1, 0x86E4, 0xF9ED, + 0x86ED, 0xF2F4, 0x86FE, 0xE4B6, 0x8700, 0xF5B9, 0x8702, 0xDCF0, 0x8703, 0xE3F1, 0x8708, 0xE8A5, 0x8718, 0xF2BB, 0x871A, 0xDEA4, + 0x871C, 0xDACC, 0x874E, 0xCAE9, 0x8755, 0xE3DA, 0x8757, 0xFCD9, 0x875F, 0xEADA, 0x8766, 0xF9C4, 0x8768, 0xE3A4, 0x8774, 0xFBDD, + 0x8776, 0xEFCA, 0x8778, 0xE8C4, 0x8782, 0xD5CC, 0x878D, 0xEBD7, 0x879F, 0xD9AD, 0x87A2, 0xFBAB, 0x87B3, 0xD3D9, 0x87BA, 0xD5A2, + 0x87C4, 0xF6DE, 0x87E0, 0xDAF6, 0x87EC, 0xE0D1, 0x87EF, 0xE9A8, 0x87F2, 0xF5F9, 0x87F9, 0xFAAF, 0x87FB, 0xEBFC, 0x87FE, 0xE0EA, + 0x8805, 0xE3B2, 0x881F, 0xD5C5, 0x8822, 0xF1E3, 0x8823, 0xD5EE, 0x8831, 0xCDCC, 0x8836, 0xEDD9, 0x883B, 0xD8C1, 0x8840, 0xFAEC, + 0x8846, 0xF1EB, 0x884C, 0xFABC, 0x884D, 0xE6E2, 0x8852, 0xFAE5, 0x8853, 0xE2FA, 0x8857, 0xCAB6, 0x8859, 0xE4B7, 0x885B, 0xEADB, + 0x885D, 0xF5FA, 0x8861, 0xFBAC, 0x8862, 0xCFC3, 0x8863, 0xEBFD, 0x8868, 0xF8FA, 0x886B, 0xDFB9, 0x8870, 0xE1F1, 0x8872, 0xD2A4, + 0x8877, 0xF5FB, 0x887E, 0xD0DA, 0x887F, 0xD0DB, 0x8881, 0xEABE, 0x8882, 0xD9B1, 0x8888, 0xCAB7, 0x888B, 0xD3E7, 0x888D, 0xF8E5, + 0x8892, 0xD3B2, 0x8896, 0xE2C0, 0x8897, 0xF2DF, 0x889E, 0xCDE5, 0x88AB, 0xF9AC, 0x88B4, 0xCDCD, 0x88C1, 0xEEAE, 0x88C2, 0xD6AE, + 0x88CF, 0xD7EA, 0x88D4, 0xE7E0, 0x88D5, 0xEBAE, 0x88D9, 0xCFD9, 0x88DC, 0xDCCD, 0x88DD, 0xEDFB, 0x88DF, 0xDEF0, 0x88E1, 0xD7EB, + 0x88E8, 0xDEA5, 0x88F3, 0xDFD7, 0x88F4, 0xDBD0, 0x88F5, 0xDBD1, 0x88F8, 0xD5A3, 0x88FD, 0xF0B2, 0x8907, 0xDCDC, 0x8910, 0xCAE8, + 0x8912, 0xF8E6, 0x8913, 0xDCCE, 0x8918, 0xEADC, 0x8919, 0xDBD2, 0x8925, 0xE9B3, 0x892A, 0xF7DB, 0x8936, 0xE3A8, 0x8938, 0xD7AE, + 0x893B, 0xE0E1, 0x8941, 0xCBBA, 0x8944, 0xE5D1, 0x895F, 0xD0DC, 0x8964, 0xD5C1, 0x896A, 0xD8CA, 0x8972, 0xE3A9, 0x897F, 0xE0A4, + 0x8981, 0xE9A9, 0x8983, 0xD3C7, 0x8986, 0xDCDD, 0x8987, 0xF8AE, 0x898B, 0xCCB8, 0x898F, 0xD0AE, 0x8993, 0xD8F2, 0x8996, 0xE3CA, + 0x89A1, 0xCCAF, 0x89A9, 0xD4AD, 0x89AA, 0xF6D1, 0x89B2, 0xD0CC, 0x89BA, 0xCAC6, 0x89BD, 0xD5C2, 0x89C0, 0xCEBA, 0x89D2, 0xCAC7, + 0x89E3, 0xFAB0, 0x89F4, 0xDFD8, 0x89F8, 0xF5BA, 0x8A00, 0xE5EB, 0x8A02, 0xEFF4, 0x8A03, 0xDDB5, 0x8A08, 0xCDAA, 0x8A0A, 0xE3F2, + 0x8A0C, 0xFBF7, 0x8A0E, 0xF7D0, 0x8A13, 0xFDBA, 0x8A16, 0xFDE1, 0x8A17, 0xF6FE, 0x8A18, 0xD1C0, 0x8A1B, 0xE8C5, 0x8A1D, 0xE4B8, + 0x8A1F, 0xE1E8, 0x8A23, 0xCCC1, 0x8A25, 0xD2ED, 0x8A2A, 0xDBBE, 0x8A2D, 0xE0E2, 0x8A31, 0xFAC9, 0x8A34, 0xE1CD, 0x8A36, 0xCAB8, + 0x8A3A, 0xF2E0, 0x8A3B, 0xF1C9, 0x8A50, 0xDEF1, 0x8A54, 0xF0DF, 0x8A55, 0xF8C4, 0x8A5B, 0xEECC, 0x8A5E, 0xDEF2, 0x8A60, 0xE7C9, + 0x8A62, 0xE2F3, 0x8A63, 0xE7E1, 0x8A66, 0xE3CB, 0x8A69, 0xE3CC, 0x8A6D, 0xCFF8, 0x8A6E, 0xEFAC, 0x8A70, 0xFDFE, 0x8A71, 0xFCA5, + 0x8A72, 0xFAB1, 0x8A73, 0xDFD9, 0x8A75, 0xE0D2, 0x8A79, 0xF4DA, 0x8A85, 0xF1CA, 0x8A87, 0xCEA3, 0x8A8C, 0xF2BC, 0x8A8D, 0xECE3, + 0x8A93, 0xE0A5, 0x8A95, 0xF7AB, 0x8A98, 0xEBAF, 0x8A9E, 0xE5DE, 0x8AA0, 0xE1A4, 0x8AA1, 0xCDAB, 0x8AA3, 0xD9F4, 0x8AA4, 0xE8A6, + 0x8AA5, 0xCDCE, 0x8AA6, 0xE1E9, 0x8AA8, 0xFCEF, 0x8AAA, 0xE0E3, 0x8AB0, 0xE2C1, 0x8AB2, 0xCEA4, 0x8AB9, 0xDEA6, 0x8ABC, 0xEBFE, + 0x8ABE, 0xEBDD, 0x8ABF, 0xF0E0, 0x8AC2, 0xF4DB, 0x8AC4, 0xE2F4, 0x8AC7, 0xD3C8, 0x8ACB, 0xF4EB, 0x8ACD, 0xEEB5, 0x8ACF, 0xF5D8, + 0x8AD2, 0xD5DF, 0x8AD6, 0xD6E5, 0x8ADB, 0xEBB0, 0x8ADC, 0xF4E3, 0x8AE1, 0xE3CD, 0x8AE6, 0xF4F4, 0x8AE7, 0xFAB2, 0x8AEA, 0xEFF5, + 0x8AEB, 0xCADF, 0x8AED, 0xEBB1, 0x8AEE, 0xEDBF, 0x8AF1, 0xFDC9, 0x8AF6, 0xE4A6, 0x8AF7, 0xF9A4, 0x8AF8, 0xF0B3, 0x8AFA, 0xE5EC, + 0x8AFE, 0xD1E7, 0x8B00, 0xD9C7, 0x8B01, 0xE4D7, 0x8B02, 0xEADD, 0x8B04, 0xD4F7, 0x8B0E, 0xDABA, 0x8B10, 0xDACD, 0x8B14, 0xF9CC, + 0x8B16, 0xE1DA, 0x8B17, 0xDBBF, 0x8B19, 0xCCC5, 0x8B1A, 0xECD0, 0x8B1B, 0xCBBB, 0x8B1D, 0xDEF3, 0x8B20, 0xE9AA, 0x8B28, 0xD9C8, + 0x8B2B, 0xEEE3, 0x8B2C, 0xD7BD, 0x8B33, 0xCFC4, 0x8B39, 0xD0CD, 0x8B41, 0xFCA6, 0x8B49, 0xF1FB, 0x8B4E, 0xFDD2, 0x8B4F, 0xD1C1, + 0x8B58, 0xE3DB, 0x8B5A, 0xD3C9, 0x8B5C, 0xDCCF, 0x8B66, 0xCCED, 0x8B6C, 0xDEA7, 0x8B6F, 0xE6BB, 0x8B70, 0xECA1, 0x8B74, 0xCCB9, + 0x8B77, 0xFBDE, 0x8B7D, 0xE7E2, 0x8B80, 0xD4C1, 0x8B8A, 0xDCA8, 0x8B90, 0xE2C2, 0x8B92, 0xF3D8, 0x8B93, 0xE5D3, 0x8B96, 0xF3D9, + 0x8B9A, 0xF3C6, 0x8C37, 0xCDDB, 0x8C3F, 0xCDAC, 0x8C41, 0xFCC3, 0x8C46, 0xD4E7, 0x8C48, 0xD1C2, 0x8C4A, 0xF9A5, 0x8C4C, 0xE8D5, + 0x8C55, 0xE3CE, 0x8C5A, 0xD4CA, 0x8C61, 0xDFDA, 0x8C6A, 0xFBDF, 0x8C6B, 0xE7E3, 0x8C79, 0xF8FB, 0x8C7A, 0xE3CF, 0x8C82, 0xF5B0, + 0x8C8A, 0xD8E7, 0x8C8C, 0xD9C9, 0x8C9D, 0xF8AF, 0x8C9E, 0xEFF6, 0x8CA0, 0xDDB6, 0x8CA1, 0xEEAF, 0x8CA2, 0xCDF8, 0x8CA7, 0xDEB8, + 0x8CA8, 0xFCA7, 0x8CA9, 0xF7FC, 0x8CAA, 0xF7B1, 0x8CAB, 0xCEBB, 0x8CAC, 0xF4A1, 0x8CAF, 0xEECD, 0x8CB0, 0xE1AE, 0x8CB3, 0xECC3, + 0x8CB4, 0xCFFE, 0x8CB6, 0xF8BF, 0x8CB7, 0xD8E2, 0x8CB8, 0xD3E8, 0x8CBB, 0xDEA8, 0x8CBC, 0xF4E4, 0x8CBD, 0xECC2, 0x8CBF, 0xD9F5, + 0x8CC0, 0xF9C5, 0x8CC1, 0xDDD3, 0x8CC2, 0xD6F1, 0x8CC3, 0xECFC, 0x8CC4, 0xFCF0, 0x8CC7, 0xEDC0, 0x8CC8, 0xCAB9, 0x8CCA, 0xEEE4, + 0x8CD1, 0xF2E1, 0x8CD3, 0xDEB9, 0x8CDA, 0xD6F2, 0x8CDC, 0xDEF4, 0x8CDE, 0xDFDB, 0x8CE0, 0xDBD3, 0x8CE2, 0xFAE7, 0x8CE3, 0xD8E3, + 0x8CE4, 0xF4C1, 0x8CE6, 0xDDB7, 0x8CEA, 0xF2F5, 0x8CED, 0xD4AE, 0x8CF4, 0xD6F3, 0x8CFB, 0xDDB8, 0x8CFC, 0xCFC5, 0x8CFD, 0xDFDF, + 0x8D04, 0xF2BE, 0x8D05, 0xF6A1, 0x8D07, 0xEBCB, 0x8D08, 0xF1FC, 0x8D0A, 0xF3C7, 0x8D0D, 0xE0EB, 0x8D13, 0xEDFC, 0x8D16, 0xE1DB, + 0x8D64, 0xEEE5, 0x8D66, 0xDEF5, 0x8D6B, 0xFAD3, 0x8D70, 0xF1CB, 0x8D73, 0xD0AF, 0x8D74, 0xDDB9, 0x8D77, 0xD1C3, 0x8D85, 0xF5B1, + 0x8D8A, 0xEAC6, 0x8D99, 0xF0E1, 0x8DA3, 0xF6AC, 0x8DA8, 0xF5D9, 0x8DB3, 0xF0EB, 0x8DBA, 0xDDBA, 0x8DBE, 0xF2BF, 0x8DC6, 0xF7C5, + 0x8DCB, 0xDBA2, 0x8DCC, 0xF2F6, 0x8DCF, 0xCABA, 0x8DDB, 0xF7F5, 0x8DDD, 0xCBE5, 0x8DE1, 0xEEE6, 0x8DE3, 0xE0D3, 0x8DE8, 0xCEA5, + 0x8DEF, 0xD6D8, 0x8DF3, 0xD4AF, 0x8E0A, 0xE9C9, 0x8E0F, 0xD3CE, 0x8E10, 0xF4C2, 0x8E1E, 0xCBE6, 0x8E2A, 0xF1A1, 0x8E30, 0xEBB2, + 0x8E35, 0xF1A2, 0x8E42, 0xEBB3, 0x8E44, 0xF0B4, 0x8E47, 0xCBF4, 0x8E48, 0xD4B0, 0x8E49, 0xF3B2, 0x8E4A, 0xFBB7, 0x8E59, 0xF5EC, + 0x8E5F, 0xEEE7, 0x8E60, 0xF4B2, 0x8E74, 0xF5ED, 0x8E76, 0xCFF3, 0x8E81, 0xF0E2, 0x8E87, 0xEECE, 0x8E8A, 0xF1CC, 0x8E8D, 0xE5B8, + 0x8EAA, 0xD7F5, 0x8EAB, 0xE3F3, 0x8EAC, 0xCFE5, 0x8EC0, 0xCFC6, 0x8ECA, 0xF3B3, 0x8ECB, 0xE4D8, 0x8ECC, 0xCFF9, 0x8ECD, 0xCFDA, + 0x8ED2, 0xFACD, 0x8EDF, 0xE6E3, 0x8EEB, 0xF2E2, 0x8EF8, 0xF5EE, 0x8EFB, 0xCABB, 0x8EFE, 0xE3DC, 0x8F03, 0xCEF2, 0x8F05, 0xD6D9, + 0x8F09, 0xEEB0, 0x8F12, 0xF4E5, 0x8F13, 0xD8C2, 0x8F14, 0xDCD0, 0x8F15, 0xCCEE, 0x8F1B, 0xD5E0, 0x8F1C, 0xF6CA, 0x8F1D, 0xFDCA, + 0x8F1E, 0xD8D6, 0x8F1F, 0xF4CF, 0x8F26, 0xD6A6, 0x8F27, 0xDCBE, 0x8F29, 0xDBD4, 0x8F2A, 0xD7C7, 0x8F2F, 0xF2FE, 0x8F33, 0xF1CD, + 0x8F38, 0xE2C3, 0x8F39, 0xDCDE, 0x8F3B, 0xDCDF, 0x8F3E, 0xEFAD, 0x8F3F, 0xE6AB, 0x8F44, 0xF9DD, 0x8F45, 0xEABF, 0x8F49, 0xEFAE, + 0x8F4D, 0xF4D0, 0x8F4E, 0xCEF3, 0x8F5D, 0xE6AC, 0x8F5F, 0xCEDE, 0x8F62, 0xD5F9, 0x8F9B, 0xE3F4, 0x8F9C, 0xCDD0, 0x8FA3, 0xD5B8, + 0x8FA6, 0xF7FD, 0x8FA8, 0xDCA9, 0x8FAD, 0xDEF6, 0x8FAF, 0xDCAA, 0x8FB0, 0xF2E3, 0x8FB1, 0xE9B4, 0x8FB2, 0xD2DC, 0x8FC2, 0xE9E6, + 0x8FC5, 0xE3F6, 0x8FCE, 0xE7CA, 0x8FD1, 0xD0CE, 0x8FD4, 0xDAF7, 0x8FE6, 0xCABC, 0x8FEA, 0xEEE8, 0x8FEB, 0xDADE, 0x8FED, 0xF2F7, + 0x8FF0, 0xE2FB, 0x8FF2, 0xCCA6, 0x8FF7, 0xDABB, 0x8FF9, 0xEEE9, 0x8FFD, 0xF5DA, 0x9000, 0xF7DC, 0x9001, 0xE1EA, 0x9002, 0xCEC1, + 0x9003, 0xD4B1, 0x9005, 0xFDB1, 0x9006, 0xE6BD, 0x9008, 0xFBAD, 0x900B, 0xF8E7, 0x900D, 0xE1CE, 0x900F, 0xF7E2, 0x9010, 0xF5EF, + 0x9011, 0xCFC7, 0x9014, 0xD4B2, 0x9015, 0xCCEF, 0x9017, 0xD4E8, 0x9019, 0xEECF, 0x901A, 0xF7D7, 0x901D, 0xE0A6, 0x901E, 0xD6C1, + 0x901F, 0xE1DC, 0x9020, 0xF0E3, 0x9021, 0xF1E4, 0x9022, 0xDCF1, 0x9023, 0xD6A7, 0x902E, 0xF4F5, 0x9031, 0xF1CE, 0x9032, 0xF2E4, + 0x9035, 0xD0B0, 0x9038, 0xECEF, 0x903C, 0xF9BA, 0x903E, 0xEBB5, 0x9041, 0xD4ED, 0x9042, 0xE2C4, 0x9047, 0xE9E7, 0x904A, 0xEBB4, + 0x904B, 0xEAA1, 0x904D, 0xF8BC, 0x904E, 0xCEA6, 0x9050, 0xF9C6, 0x9051, 0xFCDA, 0x9053, 0xD4B3, 0x9054, 0xD3B9, 0x9055, 0xEADE, + 0x9059, 0xE9AB, 0x905C, 0xE1E1, 0x905D, 0xD3CF, 0x905E, 0xF4F6, 0x9060, 0xEAC0, 0x9061, 0xE1CF, 0x9063, 0xCCBA, 0x9069, 0xEEEA, + 0x906D, 0xF0E4, 0x906E, 0xF3B4, 0x906F, 0xD4EE, 0x9072, 0xF2C0, 0x9075, 0xF1E5, 0x9077, 0xF4C3, 0x9078, 0xE0D4, 0x907A, 0xEBB6, + 0x907C, 0xD7A1, 0x907D, 0xCBE8, 0x907F, 0xF9AD, 0x9080, 0xE9AD, 0x9081, 0xD8E4, 0x9082, 0xFAB3, 0x9083, 0xE2C5, 0x9084, 0xFCBD, + 0x9087, 0xECC4, 0x9088, 0xD8B1, 0x908A, 0xDCAB, 0x908F, 0xD5A4, 0x9091, 0xEBE9, 0x9095, 0xE8BB, 0x9099, 0xD8D7, 0x90A2, 0xFBAE, + 0x90A3, 0xD1E1, 0x90A6, 0xDBC0, 0x90A8, 0xF5BE, 0x90AA, 0xDEF7, 0x90AF, 0xCAFB, 0x90B0, 0xF7C6, 0x90B1, 0xCFC8, 0x90B5, 0xE1D0, + 0x90B8, 0xEED0, 0x90C1, 0xE9F4, 0x90CA, 0xCEF4, 0x90DE, 0xD5CD, 0x90E1, 0xCFDB, 0x90E8, 0xDDBB, 0x90ED, 0xCEAC, 0x90F5, 0xE9E8, + 0x90FD, 0xD4B4, 0x9102, 0xE4C7, 0x9112, 0xF5DB, 0x9115, 0xFAC1, 0x9119, 0xDEA9, 0x9127, 0xD4F8, 0x912D, 0xEFF7, 0x9132, 0xD3B3, + 0x9149, 0xEBB7, 0x914A, 0xEFF8, 0x914B, 0xF5DC, 0x914C, 0xEDCC, 0x914D, 0xDBD5, 0x914E, 0xF1CF, 0x9152, 0xF1D0, 0x9162, 0xF5B2, + 0x9169, 0xD9AE, 0x916A, 0xD5AC, 0x916C, 0xE2C6, 0x9175, 0xFDA3, 0x9177, 0xFBE5, 0x9178, 0xDFAB, 0x9187, 0xE2F5, 0x9189, 0xF6AD, + 0x918B, 0xF5B3, 0x918D, 0xF0B5, 0x9192, 0xE1A5, 0x919C, 0xF5DD, 0x91AB, 0xECA2, 0x91AC, 0xEDFD, 0x91AE, 0xF5B4, 0x91AF, 0xFBB8, + 0x91B1, 0xDBA3, 0x91B4, 0xD6CA, 0x91B5, 0xCBD9, 0x91C0, 0xE5D4, 0x91C7, 0xF3FA, 0x91C9, 0xEBB8, 0x91CB, 0xE0B7, 0x91CC, 0xD7EC, + 0x91CD, 0xF1EC, 0x91CE, 0xE5AF, 0x91CF, 0xD5E1, 0x91D0, 0xD7ED, 0x91D1, 0xD1D1, 0x91D7, 0xE1F2, 0x91D8, 0xEFF9, 0x91DC, 0xDDBC, + 0x91DD, 0xF6DC, 0x91E3, 0xF0E5, 0x91E7, 0xF4C4, 0x91EA, 0xE9E9, 0x91F5, 0xF3FB, 0x920D, 0xD4EF, 0x9210, 0xCCA2, 0x9211, 0xF7FE, + 0x9212, 0xDFBC, 0x9217, 0xEBCD, 0x921E, 0xD0B7, 0x9234, 0xD6C2, 0x923A, 0xE8AD, 0x923F, 0xEFAF, 0x9240, 0xCBA5, 0x9245, 0xCBE9, + 0x9249, 0xFAE8, 0x9257, 0xCCC6, 0x925B, 0xE6E7, 0x925E, 0xEAC7, 0x9262, 0xDBA4, 0x9264, 0xCFC9, 0x9265, 0xE2FC, 0x9266, 0xEFFA, + 0x9280, 0xEBDE, 0x9283, 0xF5C8, 0x9285, 0xD4DE, 0x9291, 0xE0D5, 0x9293, 0xEFB0, 0x9296, 0xE2C7, 0x9298, 0xD9AF, 0x929C, 0xF9E7, + 0x92B3, 0xE7E5, 0x92B6, 0xCFCA, 0x92B7, 0xE1D1, 0x92B9, 0xE2C8, 0x92CC, 0xEFFB, 0x92CF, 0xFAF9, 0x92D2, 0xDCF2, 0x92E4, 0xE0A7, + 0x92EA, 0xF8E8, 0x92F8, 0xCBEA, 0x92FC, 0xCBBC, 0x9304, 0xD6E2, 0x9310, 0xF5DE, 0x9318, 0xF5DF, 0x931A, 0xEEB6, 0x931E, 0xE2F6, + 0x931F, 0xD3CA, 0x9320, 0xEFFC, 0x9321, 0xD1C4, 0x9322, 0xEFB1, 0x9324, 0xD1C5, 0x9326, 0xD0DE, 0x9328, 0xD9E1, 0x932B, 0xE0B8, + 0x932E, 0xCDD1, 0x932F, 0xF3B9, 0x9348, 0xE7CC, 0x934A, 0xD6A8, 0x934B, 0xCEA7, 0x934D, 0xD4B5, 0x9354, 0xE4C8, 0x935B, 0xD3B4, + 0x936E, 0xEBB9, 0x9375, 0xCBF5, 0x937C, 0xF6DD, 0x937E, 0xF1A3, 0x938C, 0xCCC7, 0x9394, 0xE9CA, 0x9396, 0xE1F0, 0x939A, 0xF5E0, + 0x93A3, 0xFBAF, 0x93A7, 0xCBD1, 0x93AC, 0xFBE0, 0x93AD, 0xF2E5, 0x93B0, 0xECF0, 0x93C3, 0xF0EC, 0x93D1, 0xEEEB, 0x93DE, 0xE9CB, + 0x93E1, 0xCCF0, 0x93E4, 0xD7AF, 0x93F6, 0xF3A1, 0x9404, 0xFCF5, 0x9418, 0xF1A4, 0x9425, 0xE0D6, 0x942B, 0xEFB2, 0x9435, 0xF4D1, + 0x9438, 0xF7A1, 0x9444, 0xF1D1, 0x9451, 0xCAFC, 0x9452, 0xCAFD, 0x945B, 0xCECE, 0x947D, 0xF3C8, 0x947F, 0xF3BA, 0x9577, 0xEDFE, + 0x9580, 0xDAA6, 0x9583, 0xE0EC, 0x9589, 0xF8CD, 0x958B, 0xCBD2, 0x958F, 0xEBCE, 0x9591, 0xF9D8, 0x9592, 0xF9D9, 0x9593, 0xCAE0, + 0x9594, 0xDACA, 0x9598, 0xCBA6, 0x95A3, 0xCAC8, 0x95A4, 0xF9EE, 0x95A5, 0xDBEC, 0x95A8, 0xD0B1, 0x95AD, 0xD5EF, 0x95B1, 0xE6F3, + 0x95BB, 0xE7A2, 0x95BC, 0xE4D9, 0x95C7, 0xE4E1, 0x95CA, 0xFCC4, 0x95D4, 0xF9EF, 0x95D5, 0xCFF4, 0x95D6, 0xF7E6, 0x95DC, 0xCEBC, + 0x95E1, 0xF4C5, 0x95E2, 0xDCA3, 0x961C, 0xDDBD, 0x9621, 0xF4C6, 0x962A, 0xF8A1, 0x962E, 0xE8D6, 0x9632, 0xDBC1, 0x963B, 0xF0E6, + 0x963F, 0xE4B9, 0x9640, 0xF6ED, 0x9642, 0xF9AE, 0x9644, 0xDDBE, 0x964B, 0xD7B0, 0x964C, 0xD8E8, 0x964D, 0xCBBD, 0x9650, 0xF9DA, + 0x965B, 0xF8CE, 0x965C, 0xF9F0, 0x965D, 0xE0ED, 0x965E, 0xE3B3, 0x965F, 0xF4B3, 0x9662, 0xEAC2, 0x9663, 0xF2E6, 0x9664, 0xF0B6, + 0x966A, 0xDBD6, 0x9670, 0xEBE4, 0x9673, 0xF2E7, 0x9675, 0xD7D5, 0x9676, 0xD4B6, 0x9677, 0xF9E8, 0x9678, 0xD7C1, 0x967D, 0xE5D5, + 0x9685, 0xE9EA, 0x9686, 0xD7CC, 0x968A, 0xD3E9, 0x968B, 0xE2C9, 0x968D, 0xFCDB, 0x968E, 0xCDAD, 0x9694, 0xCCB0, 0x9695, 0xEAA2, + 0x9698, 0xE4F6, 0x9699, 0xD0C0, 0x969B, 0xF0B7, 0x969C, 0xEEA1, 0x96A3, 0xD7F6, 0x96A7, 0xE2CA, 0x96A8, 0xE2CB, 0x96AA, 0xFACF, + 0x96B1, 0xEBDF, 0x96B7, 0xD6CB, 0x96BB, 0xF4B4, 0x96C0, 0xEDCD, 0x96C1, 0xE4D2, 0x96C4, 0xEAA9, 0x96C5, 0xE4BA, 0x96C6, 0xF3A2, + 0x96C7, 0xCDD2, 0x96C9, 0xF6CB, 0x96CB, 0xF1E6, 0x96CC, 0xEDC1, 0x96CD, 0xE8BC, 0x96CE, 0xEED1, 0x96D5, 0xF0E7, 0x96D6, 0xE2CC, + 0x96D9, 0xE4AA, 0x96DB, 0xF5E1, 0x96DC, 0xEDDA, 0x96E2, 0xD7EE, 0x96E3, 0xD1F1, 0x96E8, 0xE9EB, 0x96E9, 0xE9EC, 0x96EA, 0xE0E4, + 0x96EF, 0xDAA7, 0x96F0, 0xDDD4, 0x96F2, 0xEAA3, 0x96F6, 0xD6C3, 0x96F7, 0xD6F4, 0x96F9, 0xDADF, 0x96FB, 0xEFB3, 0x9700, 0xE2CD, + 0x9706, 0xEFFD, 0x9707, 0xF2E8, 0x9711, 0xEFC5, 0x9713, 0xE7E7, 0x9716, 0xD7FD, 0x9719, 0xE7CE, 0x971C, 0xDFDC, 0x971E, 0xF9C7, + 0x9727, 0xD9F6, 0x9730, 0xDFAC, 0x9732, 0xD6DA, 0x9739, 0xDCA4, 0x973D, 0xF0B8, 0x9742, 0xD5FA, 0x9744, 0xE4F7, 0x9748, 0xD6C4, + 0x9751, 0xF4EC, 0x9756, 0xEFFE, 0x975C, 0xF0A1, 0x975E, 0xDEAA, 0x9761, 0xDABC, 0x9762, 0xD8FC, 0x9769, 0xFAD4, 0x976D, 0xECE5, + 0x9774, 0xFCA8, 0x9777, 0xECE6, 0x977A, 0xD8CB, 0x978B, 0xFBB9, 0x978D, 0xE4D3, 0x978F, 0xCDF9, 0x97A0, 0xCFD3, 0x97A8, 0xCAEA, + 0x97AB, 0xCFD4, 0x97AD, 0xF8BD, 0x97C6, 0xF4C7, 0x97CB, 0xEADF, 0x97D3, 0xF9DB, 0x97DC, 0xD4B7, 0x97F3, 0xEBE5, 0x97F6, 0xE1D2, + 0x97FB, 0xEAA4, 0x97FF, 0xFAC2, 0x9800, 0xFBE1, 0x9801, 0xFAED, 0x9802, 0xF0A2, 0x9803, 0xCCF1, 0x9805, 0xFAA3, 0x9806, 0xE2F7, + 0x9808, 0xE2CE, 0x980A, 0xE9F5, 0x980C, 0xE1EB, 0x9810, 0xE7E8, 0x9811, 0xE8D7, 0x9812, 0xDAF8, 0x9813, 0xD4CB, 0x9817, 0xF7F6, + 0x9818, 0xD6C5, 0x982D, 0xD4E9, 0x9830, 0xFAFA, 0x9838, 0xCCF2, 0x9839, 0xF7DD, 0x983B, 0xDEBA, 0x9846, 0xCEA8, 0x984C, 0xF0B9, + 0x984D, 0xE4FE, 0x984E, 0xE4C9, 0x9854, 0xE4D4, 0x9858, 0xEAC3, 0x985A, 0xEFB4, 0x985E, 0xD7BE, 0x9865, 0xFBE2, 0x9867, 0xCDD3, + 0x986B, 0xEFB5, 0x986F, 0xFAE9, 0x98A8, 0xF9A6, 0x98AF, 0xDFBD, 0x98B1, 0xF7C7, 0x98C4, 0xF8FD, 0x98C7, 0xF8FC, 0x98DB, 0xDEAB, + 0x98DC, 0xDBE8, 0x98DF, 0xE3DD, 0x98E1, 0xE1E2, 0x98E2, 0xD1C6, 0x98ED, 0xF6D0, 0x98EE, 0xEBE6, 0x98EF, 0xDAF9, 0x98F4, 0xECC7, + 0x98FC, 0xDEF8, 0x98FD, 0xF8E9, 0x98FE, 0xE3DE, 0x9903, 0xCEF5, 0x9909, 0xFAC3, 0x990A, 0xE5D7, 0x990C, 0xECC8, 0x9910, 0xF3C9, + 0x9913, 0xE4BB, 0x9918, 0xE6AE, 0x991E, 0xEFB6, 0x9920, 0xDCBF, 0x9928, 0xCEBD, 0x9945, 0xD8C3, 0x9949, 0xD0CF, 0x994B, 0xCFFA, + 0x994C, 0xF3CA, 0x994D, 0xE0D7, 0x9951, 0xD1C7, 0x9952, 0xE9AE, 0x9954, 0xE8BD, 0x9957, 0xFAC4, 0x9996, 0xE2CF, 0x9999, 0xFAC5, + 0x999D, 0xF9B8, 0x99A5, 0xDCE0, 0x99A8, 0xFBB0, 0x99AC, 0xD8A9, 0x99AD, 0xE5DF, 0x99AE, 0xF9A7, 0x99B1, 0xF6EE, 0x99B3, 0xF6CC, + 0x99B4, 0xE2F8, 0x99B9, 0xECF1, 0x99C1, 0xDAE0, 0x99D0, 0xF1D2, 0x99D1, 0xD2CC, 0x99D2, 0xCFCB, 0x99D5, 0xCABD, 0x99D9, 0xDDBF, + 0x99DD, 0xF6EF, 0x99DF, 0xDEF9, 0x99ED, 0xFAB4, 0x99F1, 0xD5AD, 0x99FF, 0xF1E7, 0x9A01, 0xDEBE, 0x9A08, 0xDCC0, 0x9A0E, 0xD1C8, + 0x9A0F, 0xD1C9, 0x9A19, 0xF8BE, 0x9A2B, 0xCBF6, 0x9A30, 0xD4F9, 0x9A36, 0xF5E2, 0x9A37, 0xE1D3, 0x9A40, 0xD8E9, 0x9A43, 0xF8FE, + 0x9A45, 0xCFCC, 0x9A4D, 0xFDA4, 0x9A55, 0xCEF6, 0x9A57, 0xFAD0, 0x9A5A, 0xCCF3, 0x9A5B, 0xE6BE, 0x9A5F, 0xF6AE, 0x9A62, 0xD5F0, + 0x9A65, 0xD1CA, 0x9A69, 0xFCBE, 0x9A6A, 0xD5F1, 0x9AA8, 0xCDE9, 0x9AB8, 0xFAB5, 0x9AD3, 0xE2D0, 0x9AD4, 0xF4F7, 0x9AD8, 0xCDD4, + 0x9AE5, 0xE7A3, 0x9AEE, 0xDBA5, 0x9B1A, 0xE2D1, 0x9B27, 0xD7A2, 0x9B2A, 0xF7E3, 0x9B31, 0xEAA6, 0x9B3C, 0xD0A1, 0x9B41, 0xCEDA, + 0x9B42, 0xFBEB, 0x9B43, 0xDBA6, 0x9B44, 0xDBDE, 0x9B45, 0xD8E5, 0x9B4F, 0xEAE0, 0x9B54, 0xD8AA, 0x9B5A, 0xE5E0, 0x9B6F, 0xD6DB, + 0x9B8E, 0xEFC6, 0x9B91, 0xF8EA, 0x9B9F, 0xE4D5, 0x9BAB, 0xCEF7, 0x9BAE, 0xE0D8, 0x9BC9, 0xD7EF, 0x9BD6, 0xF4ED, 0x9BE4, 0xCDE6, + 0x9BE8, 0xCCF4, 0x9C0D, 0xF5E3, 0x9C10, 0xE4CA, 0x9C12, 0xDCE1, 0x9C15, 0xF9C8, 0x9C25, 0xFCBF, 0x9C32, 0xE8A7, 0x9C3B, 0xD8C4, + 0x9C47, 0xCBBE, 0x9C49, 0xDCAE, 0x9C57, 0xD7F7, 0x9CE5, 0xF0E8, 0x9CE7, 0xDDC0, 0x9CE9, 0xCFCD, 0x9CF3, 0xDCF3, 0x9CF4, 0xD9B0, + 0x9CF6, 0xE6E9, 0x9D09, 0xE4BC, 0x9D1B, 0xEAC4, 0x9D26, 0xE4EC, 0x9D28, 0xE4E5, 0x9D3B, 0xFBF8, 0x9D51, 0xCCBB, 0x9D5D, 0xE4BD, + 0x9D60, 0xCDDC, 0x9D61, 0xD9F7, 0x9D6C, 0xDDDF, 0x9D72, 0xEDCE, 0x9DA9, 0xD9D0, 0x9DAF, 0xE5A3, 0x9DB4, 0xF9CD, 0x9DC4, 0xCDAE, + 0x9DD7, 0xCFCE, 0x9DF2, 0xF6AF, 0x9DF8, 0xFDD3, 0x9DF9, 0xEBED, 0x9DFA, 0xD6DC, 0x9E1A, 0xE5A4, 0x9E1E, 0xD5B6, 0x9E75, 0xD6DD, + 0x9E79, 0xF9E9, 0x9E7D, 0xE7A4, 0x9E7F, 0xD6E3, 0x9E92, 0xD1CB, 0x9E93, 0xD6E4, 0x9E97, 0xD5F2, 0x9E9D, 0xDEFA, 0x9E9F, 0xD7F8, + 0x9EA5, 0xD8EA, 0x9EB4, 0xCFD5, 0x9EB5, 0xD8FD, 0x9EBB, 0xD8AB, 0x9EBE, 0xFDCB, 0x9EC3, 0xFCDC, 0x9ECD, 0xE0A8, 0x9ECE, 0xD5F3, + 0x9ED1, 0xFDD9, 0x9ED4, 0xCCA3, 0x9ED8, 0xD9F9, 0x9EDB, 0xD3EA, 0x9EDC, 0xF5F5, 0x9EDE, 0xEFC7, 0x9EE8, 0xD3DA, 0x9EF4, 0xDABD, + 0x9F07, 0xE8A8, 0x9F08, 0xDCAF, 0x9F0E, 0xF0A3, 0x9F13, 0xCDD5, 0x9F20, 0xE0A9, 0x9F3B, 0xDEAC, 0x9F4A, 0xF0BA, 0x9F4B, 0xEEB1, + 0x9F4E, 0xEEB2, 0x9F52, 0xF6CD, 0x9F5F, 0xEED2, 0x9F61, 0xD6C6, 0x9F67, 0xE0E5, 0x9F6A, 0xF3BB, 0x9F6C, 0xE5E1, 0x9F77, 0xE4CB, + 0x9F8D, 0xD7A3, 0x9F90, 0xDBC2, 0x9F95, 0xCAFE, 0x9F9C, 0xCFCF, 0xAC00, 0xB0A1, 0xAC01, 0xB0A2, 0xAC02, 0x8141, 0xAC03, 0x8142, + 0xAC04, 0xB0A3, 0xAC05, 0x8143, 0xAC06, 0x8144, 0xAC07, 0xB0A4, 0xAC08, 0xB0A5, 0xAC09, 0xB0A6, 0xAC0A, 0xB0A7, 0xAC0B, 0x8145, + 0xAC0C, 0x8146, 0xAC0D, 0x8147, 0xAC0E, 0x8148, 0xAC0F, 0x8149, 0xAC10, 0xB0A8, 0xAC11, 0xB0A9, 0xAC12, 0xB0AA, 0xAC13, 0xB0AB, + 0xAC14, 0xB0AC, 0xAC15, 0xB0AD, 0xAC16, 0xB0AE, 0xAC17, 0xB0AF, 0xAC18, 0x814A, 0xAC19, 0xB0B0, 0xAC1A, 0xB0B1, 0xAC1B, 0xB0B2, + 0xAC1C, 0xB0B3, 0xAC1D, 0xB0B4, 0xAC1E, 0x814B, 0xAC1F, 0x814C, 0xAC20, 0xB0B5, 0xAC21, 0x814D, 0xAC22, 0x814E, 0xAC23, 0x814F, + 0xAC24, 0xB0B6, 0xAC25, 0x8150, 0xAC26, 0x8151, 0xAC27, 0x8152, 0xAC28, 0x8153, 0xAC29, 0x8154, 0xAC2A, 0x8155, 0xAC2B, 0x8156, + 0xAC2C, 0xB0B7, 0xAC2D, 0xB0B8, 0xAC2E, 0x8157, 0xAC2F, 0xB0B9, 0xAC30, 0xB0BA, 0xAC31, 0xB0BB, 0xAC32, 0x8158, 0xAC33, 0x8159, + 0xAC34, 0x815A, 0xAC35, 0x8161, 0xAC36, 0x8162, 0xAC37, 0x8163, 0xAC38, 0xB0BC, 0xAC39, 0xB0BD, 0xAC3A, 0x8164, 0xAC3B, 0x8165, + 0xAC3C, 0xB0BE, 0xAC3D, 0x8166, 0xAC3E, 0x8167, 0xAC3F, 0x8168, 0xAC40, 0xB0BF, 0xAC41, 0x8169, 0xAC42, 0x816A, 0xAC43, 0x816B, + 0xAC44, 0x816C, 0xAC45, 0x816D, 0xAC46, 0x816E, 0xAC47, 0x816F, 0xAC48, 0x8170, 0xAC49, 0x8171, 0xAC4A, 0x8172, 0xAC4B, 0xB0C0, + 0xAC4C, 0x8173, 0xAC4D, 0xB0C1, 0xAC4E, 0x8174, 0xAC4F, 0x8175, 0xAC50, 0x8176, 0xAC51, 0x8177, 0xAC52, 0x8178, 0xAC53, 0x8179, + 0xAC54, 0xB0C2, 0xAC55, 0x817A, 0xAC56, 0x8181, 0xAC57, 0x8182, 0xAC58, 0xB0C3, 0xAC59, 0x8183, 0xAC5A, 0x8184, 0xAC5B, 0x8185, + 0xAC5C, 0xB0C4, 0xAC5D, 0x8186, 0xAC5E, 0x8187, 0xAC5F, 0x8188, 0xAC60, 0x8189, 0xAC61, 0x818A, 0xAC62, 0x818B, 0xAC63, 0x818C, + 0xAC64, 0x818D, 0xAC65, 0x818E, 0xAC66, 0x818F, 0xAC67, 0x8190, 0xAC68, 0x8191, 0xAC69, 0x8192, 0xAC6A, 0x8193, 0xAC6B, 0x8194, + 0xAC6C, 0x8195, 0xAC6D, 0x8196, 0xAC6E, 0x8197, 0xAC6F, 0x8198, 0xAC70, 0xB0C5, 0xAC71, 0xB0C6, 0xAC72, 0x8199, 0xAC73, 0x819A, + 0xAC74, 0xB0C7, 0xAC75, 0x819B, 0xAC76, 0x819C, 0xAC77, 0xB0C8, 0xAC78, 0xB0C9, 0xAC79, 0x819D, 0xAC7A, 0xB0CA, 0xAC7B, 0x819E, + 0xAC7C, 0x819F, 0xAC7D, 0x81A0, 0xAC7E, 0x81A1, 0xAC7F, 0x81A2, 0xAC80, 0xB0CB, 0xAC81, 0xB0CC, 0xAC82, 0x81A3, 0xAC83, 0xB0CD, + 0xAC84, 0xB0CE, 0xAC85, 0xB0CF, 0xAC86, 0xB0D0, 0xAC87, 0x81A4, 0xAC88, 0x81A5, 0xAC89, 0xB0D1, 0xAC8A, 0xB0D2, 0xAC8B, 0xB0D3, + 0xAC8C, 0xB0D4, 0xAC8D, 0x81A6, 0xAC8E, 0x81A7, 0xAC8F, 0x81A8, 0xAC90, 0xB0D5, 0xAC91, 0x81A9, 0xAC92, 0x81AA, 0xAC93, 0x81AB, + 0xAC94, 0xB0D6, 0xAC95, 0x81AC, 0xAC96, 0x81AD, 0xAC97, 0x81AE, 0xAC98, 0x81AF, 0xAC99, 0x81B0, 0xAC9A, 0x81B1, 0xAC9B, 0x81B2, + 0xAC9C, 0xB0D7, 0xAC9D, 0xB0D8, 0xAC9E, 0x81B3, 0xAC9F, 0xB0D9, 0xACA0, 0xB0DA, 0xACA1, 0xB0DB, 0xACA2, 0x81B4, 0xACA3, 0x81B5, + 0xACA4, 0x81B6, 0xACA5, 0x81B7, 0xACA6, 0x81B8, 0xACA7, 0x81B9, 0xACA8, 0xB0DC, 0xACA9, 0xB0DD, 0xACAA, 0xB0DE, 0xACAB, 0x81BA, + 0xACAC, 0xB0DF, 0xACAD, 0x81BB, 0xACAE, 0x81BC, 0xACAF, 0xB0E0, 0xACB0, 0xB0E1, 0xACB1, 0x81BD, 0xACB2, 0x81BE, 0xACB3, 0x81BF, + 0xACB4, 0x81C0, 0xACB5, 0x81C1, 0xACB6, 0x81C2, 0xACB7, 0x81C3, 0xACB8, 0xB0E2, 0xACB9, 0xB0E3, 0xACBA, 0x81C4, 0xACBB, 0xB0E4, + 0xACBC, 0xB0E5, 0xACBD, 0xB0E6, 0xACBE, 0x81C5, 0xACBF, 0x81C6, 0xACC0, 0x81C7, 0xACC1, 0xB0E7, 0xACC2, 0x81C8, 0xACC3, 0x81C9, + 0xACC4, 0xB0E8, 0xACC5, 0x81CA, 0xACC6, 0x81CB, 0xACC7, 0x81CC, 0xACC8, 0xB0E9, 0xACC9, 0x81CD, 0xACCA, 0x81CE, 0xACCB, 0x81CF, + 0xACCC, 0xB0EA, 0xACCD, 0x81D0, 0xACCE, 0x81D1, 0xACCF, 0x81D2, 0xACD0, 0x81D3, 0xACD1, 0x81D4, 0xACD2, 0x81D5, 0xACD3, 0x81D6, + 0xACD4, 0x81D7, 0xACD5, 0xB0EB, 0xACD6, 0x81D8, 0xACD7, 0xB0EC, 0xACD8, 0x81D9, 0xACD9, 0x81DA, 0xACDA, 0x81DB, 0xACDB, 0x81DC, + 0xACDC, 0x81DD, 0xACDD, 0x81DE, 0xACDE, 0x81DF, 0xACDF, 0x81E0, 0xACE0, 0xB0ED, 0xACE1, 0xB0EE, 0xACE2, 0x81E1, 0xACE3, 0x81E2, + 0xACE4, 0xB0EF, 0xACE5, 0x81E3, 0xACE6, 0x81E4, 0xACE7, 0xB0F0, 0xACE8, 0xB0F1, 0xACE9, 0x81E5, 0xACEA, 0xB0F2, 0xACEB, 0x81E6, + 0xACEC, 0xB0F3, 0xACED, 0x81E7, 0xACEE, 0x81E8, 0xACEF, 0xB0F4, 0xACF0, 0xB0F5, 0xACF1, 0xB0F6, 0xACF2, 0x81E9, 0xACF3, 0xB0F7, + 0xACF4, 0x81EA, 0xACF5, 0xB0F8, 0xACF6, 0xB0F9, 0xACF7, 0x81EB, 0xACF8, 0x81EC, 0xACF9, 0x81ED, 0xACFA, 0x81EE, 0xACFB, 0x81EF, + 0xACFC, 0xB0FA, 0xACFD, 0xB0FB, 0xACFE, 0x81F0, 0xACFF, 0x81F1, 0xAD00, 0xB0FC, 0xAD01, 0x81F2, 0xAD02, 0x81F3, 0xAD03, 0x81F4, + 0xAD04, 0xB0FD, 0xAD05, 0x81F5, 0xAD06, 0xB0FE, 0xAD07, 0x81F6, 0xAD08, 0x81F7, 0xAD09, 0x81F8, 0xAD0A, 0x81F9, 0xAD0B, 0x81FA, + 0xAD0C, 0xB1A1, 0xAD0D, 0xB1A2, 0xAD0E, 0x81FB, 0xAD0F, 0xB1A3, 0xAD10, 0x81FC, 0xAD11, 0xB1A4, 0xAD12, 0x81FD, 0xAD13, 0x81FE, + 0xAD14, 0x8241, 0xAD15, 0x8242, 0xAD16, 0x8243, 0xAD17, 0x8244, 0xAD18, 0xB1A5, 0xAD19, 0x8245, 0xAD1A, 0x8246, 0xAD1B, 0x8247, + 0xAD1C, 0xB1A6, 0xAD1D, 0x8248, 0xAD1E, 0x8249, 0xAD1F, 0x824A, 0xAD20, 0xB1A7, 0xAD21, 0x824B, 0xAD22, 0x824C, 0xAD23, 0x824D, + 0xAD24, 0x824E, 0xAD25, 0x824F, 0xAD26, 0x8250, 0xAD27, 0x8251, 0xAD28, 0x8252, 0xAD29, 0xB1A8, 0xAD2A, 0x8253, 0xAD2B, 0x8254, + 0xAD2C, 0xB1A9, 0xAD2D, 0xB1AA, 0xAD2E, 0x8255, 0xAD2F, 0x8256, 0xAD30, 0x8257, 0xAD31, 0x8258, 0xAD32, 0x8259, 0xAD33, 0x825A, + 0xAD34, 0xB1AB, 0xAD35, 0xB1AC, 0xAD36, 0x8261, 0xAD37, 0x8262, 0xAD38, 0xB1AD, 0xAD39, 0x8263, 0xAD3A, 0x8264, 0xAD3B, 0x8265, + 0xAD3C, 0xB1AE, 0xAD3D, 0x8266, 0xAD3E, 0x8267, 0xAD3F, 0x8268, 0xAD40, 0x8269, 0xAD41, 0x826A, 0xAD42, 0x826B, 0xAD43, 0x826C, + 0xAD44, 0xB1AF, 0xAD45, 0xB1B0, 0xAD46, 0x826D, 0xAD47, 0xB1B1, 0xAD48, 0x826E, 0xAD49, 0xB1B2, 0xAD4A, 0x826F, 0xAD4B, 0x8270, + 0xAD4C, 0x8271, 0xAD4D, 0x8272, 0xAD4E, 0x8273, 0xAD4F, 0x8274, 0xAD50, 0xB1B3, 0xAD51, 0x8275, 0xAD52, 0x8276, 0xAD53, 0x8277, + 0xAD54, 0xB1B4, 0xAD55, 0x8278, 0xAD56, 0x8279, 0xAD57, 0x827A, 0xAD58, 0xB1B5, 0xAD59, 0x8281, 0xAD5A, 0x8282, 0xAD5B, 0x8283, + 0xAD5C, 0x8284, 0xAD5D, 0x8285, 0xAD5E, 0x8286, 0xAD5F, 0x8287, 0xAD60, 0x8288, 0xAD61, 0xB1B6, 0xAD62, 0x8289, 0xAD63, 0xB1B7, + 0xAD64, 0x828A, 0xAD65, 0x828B, 0xAD66, 0x828C, 0xAD67, 0x828D, 0xAD68, 0x828E, 0xAD69, 0x828F, 0xAD6A, 0x8290, 0xAD6B, 0x8291, + 0xAD6C, 0xB1B8, 0xAD6D, 0xB1B9, 0xAD6E, 0x8292, 0xAD6F, 0x8293, 0xAD70, 0xB1BA, 0xAD71, 0x8294, 0xAD72, 0x8295, 0xAD73, 0xB1BB, + 0xAD74, 0xB1BC, 0xAD75, 0xB1BD, 0xAD76, 0xB1BE, 0xAD77, 0x8296, 0xAD78, 0x8297, 0xAD79, 0x8298, 0xAD7A, 0x8299, 0xAD7B, 0xB1BF, + 0xAD7C, 0xB1C0, 0xAD7D, 0xB1C1, 0xAD7E, 0x829A, 0xAD7F, 0xB1C2, 0xAD80, 0x829B, 0xAD81, 0xB1C3, 0xAD82, 0xB1C4, 0xAD83, 0x829C, + 0xAD84, 0x829D, 0xAD85, 0x829E, 0xAD86, 0x829F, 0xAD87, 0x82A0, 0xAD88, 0xB1C5, 0xAD89, 0xB1C6, 0xAD8A, 0x82A1, 0xAD8B, 0x82A2, + 0xAD8C, 0xB1C7, 0xAD8D, 0x82A3, 0xAD8E, 0x82A4, 0xAD8F, 0x82A5, 0xAD90, 0xB1C8, 0xAD91, 0x82A6, 0xAD92, 0x82A7, 0xAD93, 0x82A8, + 0xAD94, 0x82A9, 0xAD95, 0x82AA, 0xAD96, 0x82AB, 0xAD97, 0x82AC, 0xAD98, 0x82AD, 0xAD99, 0x82AE, 0xAD9A, 0x82AF, 0xAD9B, 0x82B0, + 0xAD9C, 0xB1C9, 0xAD9D, 0xB1CA, 0xAD9E, 0x82B1, 0xAD9F, 0x82B2, 0xADA0, 0x82B3, 0xADA1, 0x82B4, 0xADA2, 0x82B5, 0xADA3, 0x82B6, + 0xADA4, 0xB1CB, 0xADA5, 0x82B7, 0xADA6, 0x82B8, 0xADA7, 0x82B9, 0xADA8, 0x82BA, 0xADA9, 0x82BB, 0xADAA, 0x82BC, 0xADAB, 0x82BD, + 0xADAC, 0x82BE, 0xADAD, 0x82BF, 0xADAE, 0x82C0, 0xADAF, 0x82C1, 0xADB0, 0x82C2, 0xADB1, 0x82C3, 0xADB2, 0x82C4, 0xADB3, 0x82C5, + 0xADB4, 0x82C6, 0xADB5, 0x82C7, 0xADB6, 0x82C8, 0xADB7, 0xB1CC, 0xADB8, 0x82C9, 0xADB9, 0x82CA, 0xADBA, 0x82CB, 0xADBB, 0x82CC, + 0xADBC, 0x82CD, 0xADBD, 0x82CE, 0xADBE, 0x82CF, 0xADBF, 0x82D0, 0xADC0, 0xB1CD, 0xADC1, 0xB1CE, 0xADC2, 0x82D1, 0xADC3, 0x82D2, + 0xADC4, 0xB1CF, 0xADC5, 0x82D3, 0xADC6, 0x82D4, 0xADC7, 0x82D5, 0xADC8, 0xB1D0, 0xADC9, 0x82D6, 0xADCA, 0x82D7, 0xADCB, 0x82D8, + 0xADCC, 0x82D9, 0xADCD, 0x82DA, 0xADCE, 0x82DB, 0xADCF, 0x82DC, 0xADD0, 0xB1D1, 0xADD1, 0xB1D2, 0xADD2, 0x82DD, 0xADD3, 0xB1D3, + 0xADD4, 0x82DE, 0xADD5, 0x82DF, 0xADD6, 0x82E0, 0xADD7, 0x82E1, 0xADD8, 0x82E2, 0xADD9, 0x82E3, 0xADDA, 0x82E4, 0xADDB, 0x82E5, + 0xADDC, 0xB1D4, 0xADDD, 0x82E6, 0xADDE, 0x82E7, 0xADDF, 0x82E8, 0xADE0, 0xB1D5, 0xADE1, 0x82E9, 0xADE2, 0x82EA, 0xADE3, 0x82EB, + 0xADE4, 0xB1D6, 0xADE5, 0x82EC, 0xADE6, 0x82ED, 0xADE7, 0x82EE, 0xADE8, 0x82EF, 0xADE9, 0x82F0, 0xADEA, 0x82F1, 0xADEB, 0x82F2, + 0xADEC, 0x82F3, 0xADED, 0x82F4, 0xADEE, 0x82F5, 0xADEF, 0x82F6, 0xADF0, 0x82F7, 0xADF1, 0x82F8, 0xADF2, 0x82F9, 0xADF3, 0x82FA, + 0xADF4, 0x82FB, 0xADF5, 0x82FC, 0xADF6, 0x82FD, 0xADF7, 0x82FE, 0xADF8, 0xB1D7, 0xADF9, 0xB1D8, 0xADFA, 0x8341, 0xADFB, 0x8342, + 0xADFC, 0xB1D9, 0xADFD, 0x8343, 0xADFE, 0x8344, 0xADFF, 0xB1DA, 0xAE00, 0xB1DB, 0xAE01, 0xB1DC, 0xAE02, 0x8345, 0xAE03, 0x8346, + 0xAE04, 0x8347, 0xAE05, 0x8348, 0xAE06, 0x8349, 0xAE07, 0x834A, 0xAE08, 0xB1DD, 0xAE09, 0xB1DE, 0xAE0A, 0x834B, 0xAE0B, 0xB1DF, + 0xAE0C, 0x834C, 0xAE0D, 0xB1E0, 0xAE0E, 0x834D, 0xAE0F, 0x834E, 0xAE10, 0x834F, 0xAE11, 0x8350, 0xAE12, 0x8351, 0xAE13, 0x8352, + 0xAE14, 0xB1E1, 0xAE15, 0x8353, 0xAE16, 0x8354, 0xAE17, 0x8355, 0xAE18, 0x8356, 0xAE19, 0x8357, 0xAE1A, 0x8358, 0xAE1B, 0x8359, + 0xAE1C, 0x835A, 0xAE1D, 0x8361, 0xAE1E, 0x8362, 0xAE1F, 0x8363, 0xAE20, 0x8364, 0xAE21, 0x8365, 0xAE22, 0x8366, 0xAE23, 0x8367, + 0xAE24, 0x8368, 0xAE25, 0x8369, 0xAE26, 0x836A, 0xAE27, 0x836B, 0xAE28, 0x836C, 0xAE29, 0x836D, 0xAE2A, 0x836E, 0xAE2B, 0x836F, + 0xAE2C, 0x8370, 0xAE2D, 0x8371, 0xAE2E, 0x8372, 0xAE2F, 0x8373, 0xAE30, 0xB1E2, 0xAE31, 0xB1E3, 0xAE32, 0x8374, 0xAE33, 0x8375, + 0xAE34, 0xB1E4, 0xAE35, 0x8376, 0xAE36, 0x8377, 0xAE37, 0xB1E5, 0xAE38, 0xB1E6, 0xAE39, 0x8378, 0xAE3A, 0xB1E7, 0xAE3B, 0x8379, + 0xAE3C, 0x837A, 0xAE3D, 0x8381, 0xAE3E, 0x8382, 0xAE3F, 0x8383, 0xAE40, 0xB1E8, 0xAE41, 0xB1E9, 0xAE42, 0x8384, 0xAE43, 0xB1EA, + 0xAE44, 0x8385, 0xAE45, 0xB1EB, 0xAE46, 0xB1EC, 0xAE47, 0x8386, 0xAE48, 0x8387, 0xAE49, 0x8388, 0xAE4A, 0xB1ED, 0xAE4B, 0x8389, + 0xAE4C, 0xB1EE, 0xAE4D, 0xB1EF, 0xAE4E, 0xB1F0, 0xAE4F, 0x838A, 0xAE50, 0xB1F1, 0xAE51, 0x838B, 0xAE52, 0x838C, 0xAE53, 0x838D, + 0xAE54, 0xB1F2, 0xAE55, 0x838E, 0xAE56, 0xB1F3, 0xAE57, 0x838F, 0xAE58, 0x8390, 0xAE59, 0x8391, 0xAE5A, 0x8392, 0xAE5B, 0x8393, + 0xAE5C, 0xB1F4, 0xAE5D, 0xB1F5, 0xAE5E, 0x8394, 0xAE5F, 0xB1F6, 0xAE60, 0xB1F7, 0xAE61, 0xB1F8, 0xAE62, 0x8395, 0xAE63, 0x8396, + 0xAE64, 0x8397, 0xAE65, 0xB1F9, 0xAE66, 0x8398, 0xAE67, 0x8399, 0xAE68, 0xB1FA, 0xAE69, 0xB1FB, 0xAE6A, 0x839A, 0xAE6B, 0x839B, + 0xAE6C, 0xB1FC, 0xAE6D, 0x839C, 0xAE6E, 0x839D, 0xAE6F, 0x839E, 0xAE70, 0xB1FD, 0xAE71, 0x839F, 0xAE72, 0x83A0, 0xAE73, 0x83A1, + 0xAE74, 0x83A2, 0xAE75, 0x83A3, 0xAE76, 0x83A4, 0xAE77, 0x83A5, 0xAE78, 0xB1FE, 0xAE79, 0xB2A1, 0xAE7A, 0x83A6, 0xAE7B, 0xB2A2, + 0xAE7C, 0xB2A3, 0xAE7D, 0xB2A4, 0xAE7E, 0x83A7, 0xAE7F, 0x83A8, 0xAE80, 0x83A9, 0xAE81, 0x83AA, 0xAE82, 0x83AB, 0xAE83, 0x83AC, + 0xAE84, 0xB2A5, 0xAE85, 0xB2A6, 0xAE86, 0x83AD, 0xAE87, 0x83AE, 0xAE88, 0x83AF, 0xAE89, 0x83B0, 0xAE8A, 0x83B1, 0xAE8B, 0x83B2, + 0xAE8C, 0xB2A7, 0xAE8D, 0x83B3, 0xAE8E, 0x83B4, 0xAE8F, 0x83B5, 0xAE90, 0x83B6, 0xAE91, 0x83B7, 0xAE92, 0x83B8, 0xAE93, 0x83B9, + 0xAE94, 0x83BA, 0xAE95, 0x83BB, 0xAE96, 0x83BC, 0xAE97, 0x83BD, 0xAE98, 0x83BE, 0xAE99, 0x83BF, 0xAE9A, 0x83C0, 0xAE9B, 0x83C1, + 0xAE9C, 0x83C2, 0xAE9D, 0x83C3, 0xAE9E, 0x83C4, 0xAE9F, 0x83C5, 0xAEA0, 0x83C6, 0xAEA1, 0x83C7, 0xAEA2, 0x83C8, 0xAEA3, 0x83C9, + 0xAEA4, 0x83CA, 0xAEA5, 0x83CB, 0xAEA6, 0x83CC, 0xAEA7, 0x83CD, 0xAEA8, 0x83CE, 0xAEA9, 0x83CF, 0xAEAA, 0x83D0, 0xAEAB, 0x83D1, + 0xAEAC, 0x83D2, 0xAEAD, 0x83D3, 0xAEAE, 0x83D4, 0xAEAF, 0x83D5, 0xAEB0, 0x83D6, 0xAEB1, 0x83D7, 0xAEB2, 0x83D8, 0xAEB3, 0x83D9, + 0xAEB4, 0x83DA, 0xAEB5, 0x83DB, 0xAEB6, 0x83DC, 0xAEB7, 0x83DD, 0xAEB8, 0x83DE, 0xAEB9, 0x83DF, 0xAEBA, 0x83E0, 0xAEBB, 0x83E1, + 0xAEBC, 0xB2A8, 0xAEBD, 0xB2A9, 0xAEBE, 0xB2AA, 0xAEBF, 0x83E2, 0xAEC0, 0xB2AB, 0xAEC1, 0x83E3, 0xAEC2, 0x83E4, 0xAEC3, 0x83E5, + 0xAEC4, 0xB2AC, 0xAEC5, 0x83E6, 0xAEC6, 0x83E7, 0xAEC7, 0x83E8, 0xAEC8, 0x83E9, 0xAEC9, 0x83EA, 0xAECA, 0x83EB, 0xAECB, 0x83EC, + 0xAECC, 0xB2AD, 0xAECD, 0xB2AE, 0xAECE, 0x83ED, 0xAECF, 0xB2AF, 0xAED0, 0xB2B0, 0xAED1, 0xB2B1, 0xAED2, 0x83EE, 0xAED3, 0x83EF, + 0xAED4, 0x83F0, 0xAED5, 0x83F1, 0xAED6, 0x83F2, 0xAED7, 0x83F3, 0xAED8, 0xB2B2, 0xAED9, 0xB2B3, 0xAEDA, 0x83F4, 0xAEDB, 0x83F5, + 0xAEDC, 0xB2B4, 0xAEDD, 0x83F6, 0xAEDE, 0x83F7, 0xAEDF, 0x83F8, 0xAEE0, 0x83F9, 0xAEE1, 0x83FA, 0xAEE2, 0x83FB, 0xAEE3, 0x83FC, + 0xAEE4, 0x83FD, 0xAEE5, 0x83FE, 0xAEE6, 0x8441, 0xAEE7, 0x8442, 0xAEE8, 0xB2B5, 0xAEE9, 0x8443, 0xAEEA, 0x8444, 0xAEEB, 0xB2B6, + 0xAEEC, 0x8445, 0xAEED, 0xB2B7, 0xAEEE, 0x8446, 0xAEEF, 0x8447, 0xAEF0, 0x8448, 0xAEF1, 0x8449, 0xAEF2, 0x844A, 0xAEF3, 0x844B, + 0xAEF4, 0xB2B8, 0xAEF5, 0x844C, 0xAEF6, 0x844D, 0xAEF7, 0x844E, 0xAEF8, 0xB2B9, 0xAEF9, 0x844F, 0xAEFA, 0x8450, 0xAEFB, 0x8451, + 0xAEFC, 0xB2BA, 0xAEFD, 0x8452, 0xAEFE, 0x8453, 0xAEFF, 0x8454, 0xAF00, 0x8455, 0xAF01, 0x8456, 0xAF02, 0x8457, 0xAF03, 0x8458, + 0xAF04, 0x8459, 0xAF05, 0x845A, 0xAF06, 0x8461, 0xAF07, 0xB2BB, 0xAF08, 0xB2BC, 0xAF09, 0x8462, 0xAF0A, 0x8463, 0xAF0B, 0x8464, + 0xAF0C, 0x8465, 0xAF0D, 0xB2BD, 0xAF0E, 0x8466, 0xAF0F, 0x8467, 0xAF10, 0xB2BE, 0xAF11, 0x8468, 0xAF12, 0x8469, 0xAF13, 0x846A, + 0xAF14, 0x846B, 0xAF15, 0x846C, 0xAF16, 0x846D, 0xAF17, 0x846E, 0xAF18, 0x846F, 0xAF19, 0x8470, 0xAF1A, 0x8471, 0xAF1B, 0x8472, + 0xAF1C, 0x8473, 0xAF1D, 0x8474, 0xAF1E, 0x8475, 0xAF1F, 0x8476, 0xAF20, 0x8477, 0xAF21, 0x8478, 0xAF22, 0x8479, 0xAF23, 0x847A, + 0xAF24, 0x8481, 0xAF25, 0x8482, 0xAF26, 0x8483, 0xAF27, 0x8484, 0xAF28, 0x8485, 0xAF29, 0x8486, 0xAF2A, 0x8487, 0xAF2B, 0x8488, + 0xAF2C, 0xB2BF, 0xAF2D, 0xB2C0, 0xAF2E, 0x8489, 0xAF2F, 0x848A, 0xAF30, 0xB2C1, 0xAF31, 0x848B, 0xAF32, 0xB2C2, 0xAF33, 0x848C, + 0xAF34, 0xB2C3, 0xAF35, 0x848D, 0xAF36, 0x848E, 0xAF37, 0x848F, 0xAF38, 0x8490, 0xAF39, 0x8491, 0xAF3A, 0x8492, 0xAF3B, 0x8493, + 0xAF3C, 0xB2C4, 0xAF3D, 0xB2C5, 0xAF3E, 0x8494, 0xAF3F, 0xB2C6, 0xAF40, 0x8495, 0xAF41, 0xB2C7, 0xAF42, 0xB2C8, 0xAF43, 0xB2C9, + 0xAF44, 0x8496, 0xAF45, 0x8497, 0xAF46, 0x8498, 0xAF47, 0x8499, 0xAF48, 0xB2CA, 0xAF49, 0xB2CB, 0xAF4A, 0x849A, 0xAF4B, 0x849B, + 0xAF4C, 0x849C, 0xAF4D, 0x849D, 0xAF4E, 0x849E, 0xAF4F, 0x849F, 0xAF50, 0xB2CC, 0xAF51, 0x84A0, 0xAF52, 0x84A1, 0xAF53, 0x84A2, + 0xAF54, 0x84A3, 0xAF55, 0x84A4, 0xAF56, 0x84A5, 0xAF57, 0x84A6, 0xAF58, 0x84A7, 0xAF59, 0x84A8, 0xAF5A, 0x84A9, 0xAF5B, 0x84AA, + 0xAF5C, 0xB2CD, 0xAF5D, 0xB2CE, 0xAF5E, 0x84AB, 0xAF5F, 0x84AC, 0xAF60, 0x84AD, 0xAF61, 0x84AE, 0xAF62, 0x84AF, 0xAF63, 0x84B0, + 0xAF64, 0xB2CF, 0xAF65, 0xB2D0, 0xAF66, 0x84B1, 0xAF67, 0x84B2, 0xAF68, 0x84B3, 0xAF69, 0x84B4, 0xAF6A, 0x84B5, 0xAF6B, 0x84B6, + 0xAF6C, 0x84B7, 0xAF6D, 0x84B8, 0xAF6E, 0x84B9, 0xAF6F, 0x84BA, 0xAF70, 0x84BB, 0xAF71, 0x84BC, 0xAF72, 0x84BD, 0xAF73, 0x84BE, + 0xAF74, 0x84BF, 0xAF75, 0x84C0, 0xAF76, 0x84C1, 0xAF77, 0x84C2, 0xAF78, 0x84C3, 0xAF79, 0xB2D1, 0xAF7A, 0x84C4, 0xAF7B, 0x84C5, + 0xAF7C, 0x84C6, 0xAF7D, 0x84C7, 0xAF7E, 0x84C8, 0xAF7F, 0x84C9, 0xAF80, 0xB2D2, 0xAF81, 0x84CA, 0xAF82, 0x84CB, 0xAF83, 0x84CC, + 0xAF84, 0xB2D3, 0xAF85, 0x84CD, 0xAF86, 0x84CE, 0xAF87, 0x84CF, 0xAF88, 0xB2D4, 0xAF89, 0x84D0, 0xAF8A, 0x84D1, 0xAF8B, 0x84D2, + 0xAF8C, 0x84D3, 0xAF8D, 0x84D4, 0xAF8E, 0x84D5, 0xAF8F, 0x84D6, 0xAF90, 0xB2D5, 0xAF91, 0xB2D6, 0xAF92, 0x84D7, 0xAF93, 0x84D8, + 0xAF94, 0x84D9, 0xAF95, 0xB2D7, 0xAF96, 0x84DA, 0xAF97, 0x84DB, 0xAF98, 0x84DC, 0xAF99, 0x84DD, 0xAF9A, 0x84DE, 0xAF9B, 0x84DF, + 0xAF9C, 0xB2D8, 0xAF9D, 0x84E0, 0xAF9E, 0x84E1, 0xAF9F, 0x84E2, 0xAFA0, 0x84E3, 0xAFA1, 0x84E4, 0xAFA2, 0x84E5, 0xAFA3, 0x84E6, + 0xAFA4, 0x84E7, 0xAFA5, 0x84E8, 0xAFA6, 0x84E9, 0xAFA7, 0x84EA, 0xAFA8, 0x84EB, 0xAFA9, 0x84EC, 0xAFAA, 0x84ED, 0xAFAB, 0x84EE, + 0xAFAC, 0x84EF, 0xAFAD, 0x84F0, 0xAFAE, 0x84F1, 0xAFAF, 0x84F2, 0xAFB0, 0x84F3, 0xAFB1, 0x84F4, 0xAFB2, 0x84F5, 0xAFB3, 0x84F6, + 0xAFB4, 0x84F7, 0xAFB5, 0x84F8, 0xAFB6, 0x84F9, 0xAFB7, 0x84FA, 0xAFB8, 0xB2D9, 0xAFB9, 0xB2DA, 0xAFBA, 0x84FB, 0xAFBB, 0x84FC, + 0xAFBC, 0xB2DB, 0xAFBD, 0x84FD, 0xAFBE, 0x84FE, 0xAFBF, 0x8541, 0xAFC0, 0xB2DC, 0xAFC1, 0x8542, 0xAFC2, 0x8543, 0xAFC3, 0x8544, + 0xAFC4, 0x8545, 0xAFC5, 0x8546, 0xAFC6, 0x8547, 0xAFC7, 0xB2DD, 0xAFC8, 0xB2DE, 0xAFC9, 0xB2DF, 0xAFCA, 0x8548, 0xAFCB, 0xB2E0, + 0xAFCC, 0x8549, 0xAFCD, 0xB2E1, 0xAFCE, 0xB2E2, 0xAFCF, 0x854A, 0xAFD0, 0x854B, 0xAFD1, 0x854C, 0xAFD2, 0x854D, 0xAFD3, 0x854E, + 0xAFD4, 0xB2E3, 0xAFD5, 0x854F, 0xAFD6, 0x8550, 0xAFD7, 0x8551, 0xAFD8, 0x8552, 0xAFD9, 0x8553, 0xAFDA, 0x8554, 0xAFDB, 0x8555, + 0xAFDC, 0xB2E4, 0xAFDD, 0x8556, 0xAFDE, 0x8557, 0xAFDF, 0x8558, 0xAFE0, 0x8559, 0xAFE1, 0x855A, 0xAFE2, 0x8561, 0xAFE3, 0x8562, + 0xAFE4, 0x8563, 0xAFE5, 0x8564, 0xAFE6, 0x8565, 0xAFE7, 0x8566, 0xAFE8, 0xB2E5, 0xAFE9, 0xB2E6, 0xAFEA, 0x8567, 0xAFEB, 0x8568, + 0xAFEC, 0x8569, 0xAFED, 0x856A, 0xAFEE, 0x856B, 0xAFEF, 0x856C, 0xAFF0, 0xB2E7, 0xAFF1, 0xB2E8, 0xAFF2, 0x856D, 0xAFF3, 0x856E, + 0xAFF4, 0xB2E9, 0xAFF5, 0x856F, 0xAFF6, 0x8570, 0xAFF7, 0x8571, 0xAFF8, 0xB2EA, 0xAFF9, 0x8572, 0xAFFA, 0x8573, 0xAFFB, 0x8574, + 0xAFFC, 0x8575, 0xAFFD, 0x8576, 0xAFFE, 0x8577, 0xAFFF, 0x8578, 0xB000, 0xB2EB, 0xB001, 0xB2EC, 0xB002, 0x8579, 0xB003, 0x857A, + 0xB004, 0xB2ED, 0xB005, 0x8581, 0xB006, 0x8582, 0xB007, 0x8583, 0xB008, 0x8584, 0xB009, 0x8585, 0xB00A, 0x8586, 0xB00B, 0x8587, + 0xB00C, 0xB2EE, 0xB00D, 0x8588, 0xB00E, 0x8589, 0xB00F, 0x858A, 0xB010, 0xB2EF, 0xB011, 0x858B, 0xB012, 0x858C, 0xB013, 0x858D, + 0xB014, 0xB2F0, 0xB015, 0x858E, 0xB016, 0x858F, 0xB017, 0x8590, 0xB018, 0x8591, 0xB019, 0x8592, 0xB01A, 0x8593, 0xB01B, 0x8594, + 0xB01C, 0xB2F1, 0xB01D, 0xB2F2, 0xB01E, 0x8595, 0xB01F, 0x8596, 0xB020, 0x8597, 0xB021, 0x8598, 0xB022, 0x8599, 0xB023, 0x859A, + 0xB024, 0x859B, 0xB025, 0x859C, 0xB026, 0x859D, 0xB027, 0x859E, 0xB028, 0xB2F3, 0xB029, 0x859F, 0xB02A, 0x85A0, 0xB02B, 0x85A1, + 0xB02C, 0x85A2, 0xB02D, 0x85A3, 0xB02E, 0x85A4, 0xB02F, 0x85A5, 0xB030, 0x85A6, 0xB031, 0x85A7, 0xB032, 0x85A8, 0xB033, 0x85A9, + 0xB034, 0x85AA, 0xB035, 0x85AB, 0xB036, 0x85AC, 0xB037, 0x85AD, 0xB038, 0x85AE, 0xB039, 0x85AF, 0xB03A, 0x85B0, 0xB03B, 0x85B1, + 0xB03C, 0x85B2, 0xB03D, 0x85B3, 0xB03E, 0x85B4, 0xB03F, 0x85B5, 0xB040, 0x85B6, 0xB041, 0x85B7, 0xB042, 0x85B8, 0xB043, 0x85B9, + 0xB044, 0xB2F4, 0xB045, 0xB2F5, 0xB046, 0x85BA, 0xB047, 0x85BB, 0xB048, 0xB2F6, 0xB049, 0x85BC, 0xB04A, 0xB2F7, 0xB04B, 0x85BD, + 0xB04C, 0xB2F8, 0xB04D, 0x85BE, 0xB04E, 0xB2F9, 0xB04F, 0x85BF, 0xB050, 0x85C0, 0xB051, 0x85C1, 0xB052, 0x85C2, 0xB053, 0xB2FA, + 0xB054, 0xB2FB, 0xB055, 0xB2FC, 0xB056, 0x85C3, 0xB057, 0xB2FD, 0xB058, 0x85C4, 0xB059, 0xB2FE, 0xB05A, 0x85C5, 0xB05B, 0x85C6, + 0xB05C, 0x85C7, 0xB05D, 0xB3A1, 0xB05E, 0x85C8, 0xB05F, 0x85C9, 0xB060, 0x85CA, 0xB061, 0x85CB, 0xB062, 0x85CC, 0xB063, 0x85CD, + 0xB064, 0x85CE, 0xB065, 0x85CF, 0xB066, 0x85D0, 0xB067, 0x85D1, 0xB068, 0x85D2, 0xB069, 0x85D3, 0xB06A, 0x85D4, 0xB06B, 0x85D5, + 0xB06C, 0x85D6, 0xB06D, 0x85D7, 0xB06E, 0x85D8, 0xB06F, 0x85D9, 0xB070, 0x85DA, 0xB071, 0x85DB, 0xB072, 0x85DC, 0xB073, 0x85DD, + 0xB074, 0x85DE, 0xB075, 0x85DF, 0xB076, 0x85E0, 0xB077, 0x85E1, 0xB078, 0x85E2, 0xB079, 0x85E3, 0xB07A, 0x85E4, 0xB07B, 0x85E5, + 0xB07C, 0xB3A2, 0xB07D, 0xB3A3, 0xB07E, 0x85E6, 0xB07F, 0x85E7, 0xB080, 0xB3A4, 0xB081, 0x85E8, 0xB082, 0x85E9, 0xB083, 0x85EA, + 0xB084, 0xB3A5, 0xB085, 0x85EB, 0xB086, 0x85EC, 0xB087, 0x85ED, 0xB088, 0x85EE, 0xB089, 0x85EF, 0xB08A, 0x85F0, 0xB08B, 0x85F1, + 0xB08C, 0xB3A6, 0xB08D, 0xB3A7, 0xB08E, 0x85F2, 0xB08F, 0xB3A8, 0xB090, 0x85F3, 0xB091, 0xB3A9, 0xB092, 0x85F4, 0xB093, 0x85F5, + 0xB094, 0x85F6, 0xB095, 0x85F7, 0xB096, 0x85F8, 0xB097, 0x85F9, 0xB098, 0xB3AA, 0xB099, 0xB3AB, 0xB09A, 0xB3AC, 0xB09B, 0x85FA, + 0xB09C, 0xB3AD, 0xB09D, 0x85FB, 0xB09E, 0x85FC, 0xB09F, 0xB3AE, 0xB0A0, 0xB3AF, 0xB0A1, 0xB3B0, 0xB0A2, 0xB3B1, 0xB0A3, 0x85FD, + 0xB0A4, 0x85FE, 0xB0A5, 0x8641, 0xB0A6, 0x8642, 0xB0A7, 0x8643, 0xB0A8, 0xB3B2, 0xB0A9, 0xB3B3, 0xB0AA, 0x8644, 0xB0AB, 0xB3B4, + 0xB0AC, 0xB3B5, 0xB0AD, 0xB3B6, 0xB0AE, 0xB3B7, 0xB0AF, 0xB3B8, 0xB0B0, 0x8645, 0xB0B1, 0xB3B9, 0xB0B2, 0x8646, 0xB0B3, 0xB3BA, + 0xB0B4, 0xB3BB, 0xB0B5, 0xB3BC, 0xB0B6, 0x8647, 0xB0B7, 0x8648, 0xB0B8, 0xB3BD, 0xB0B9, 0x8649, 0xB0BA, 0x864A, 0xB0BB, 0x864B, + 0xB0BC, 0xB3BE, 0xB0BD, 0x864C, 0xB0BE, 0x864D, 0xB0BF, 0x864E, 0xB0C0, 0x864F, 0xB0C1, 0x8650, 0xB0C2, 0x8651, 0xB0C3, 0x8652, + 0xB0C4, 0xB3BF, 0xB0C5, 0xB3C0, 0xB0C6, 0x8653, 0xB0C7, 0xB3C1, 0xB0C8, 0xB3C2, 0xB0C9, 0xB3C3, 0xB0CA, 0x8654, 0xB0CB, 0x8655, + 0xB0CC, 0x8656, 0xB0CD, 0x8657, 0xB0CE, 0x8658, 0xB0CF, 0x8659, 0xB0D0, 0xB3C4, 0xB0D1, 0xB3C5, 0xB0D2, 0x865A, 0xB0D3, 0x8661, + 0xB0D4, 0xB3C6, 0xB0D5, 0x8662, 0xB0D6, 0x8663, 0xB0D7, 0x8664, 0xB0D8, 0xB3C7, 0xB0D9, 0x8665, 0xB0DA, 0x8666, 0xB0DB, 0x8667, + 0xB0DC, 0x8668, 0xB0DD, 0x8669, 0xB0DE, 0x866A, 0xB0DF, 0x866B, 0xB0E0, 0xB3C8, 0xB0E1, 0x866C, 0xB0E2, 0x866D, 0xB0E3, 0x866E, + 0xB0E4, 0x866F, 0xB0E5, 0xB3C9, 0xB0E6, 0x8670, 0xB0E7, 0x8671, 0xB0E8, 0x8672, 0xB0E9, 0x8673, 0xB0EA, 0x8674, 0xB0EB, 0x8675, + 0xB0EC, 0x8676, 0xB0ED, 0x8677, 0xB0EE, 0x8678, 0xB0EF, 0x8679, 0xB0F0, 0x867A, 0xB0F1, 0x8681, 0xB0F2, 0x8682, 0xB0F3, 0x8683, + 0xB0F4, 0x8684, 0xB0F5, 0x8685, 0xB0F6, 0x8686, 0xB0F7, 0x8687, 0xB0F8, 0x8688, 0xB0F9, 0x8689, 0xB0FA, 0x868A, 0xB0FB, 0x868B, + 0xB0FC, 0x868C, 0xB0FD, 0x868D, 0xB0FE, 0x868E, 0xB0FF, 0x868F, 0xB100, 0x8690, 0xB101, 0x8691, 0xB102, 0x8692, 0xB103, 0x8693, + 0xB104, 0x8694, 0xB105, 0x8695, 0xB106, 0x8696, 0xB107, 0x8697, 0xB108, 0xB3CA, 0xB109, 0xB3CB, 0xB10A, 0x8698, 0xB10B, 0xB3CC, + 0xB10C, 0xB3CD, 0xB10D, 0x8699, 0xB10E, 0x869A, 0xB10F, 0x869B, 0xB110, 0xB3CE, 0xB111, 0x869C, 0xB112, 0xB3CF, 0xB113, 0xB3D0, + 0xB114, 0x869D, 0xB115, 0x869E, 0xB116, 0x869F, 0xB117, 0x86A0, 0xB118, 0xB3D1, 0xB119, 0xB3D2, 0xB11A, 0x86A1, 0xB11B, 0xB3D3, + 0xB11C, 0xB3D4, 0xB11D, 0xB3D5, 0xB11E, 0x86A2, 0xB11F, 0x86A3, 0xB120, 0x86A4, 0xB121, 0x86A5, 0xB122, 0x86A6, 0xB123, 0xB3D6, + 0xB124, 0xB3D7, 0xB125, 0xB3D8, 0xB126, 0x86A7, 0xB127, 0x86A8, 0xB128, 0xB3D9, 0xB129, 0x86A9, 0xB12A, 0x86AA, 0xB12B, 0x86AB, + 0xB12C, 0xB3DA, 0xB12D, 0x86AC, 0xB12E, 0x86AD, 0xB12F, 0x86AE, 0xB130, 0x86AF, 0xB131, 0x86B0, 0xB132, 0x86B1, 0xB133, 0x86B2, + 0xB134, 0xB3DB, 0xB135, 0xB3DC, 0xB136, 0x86B3, 0xB137, 0xB3DD, 0xB138, 0xB3DE, 0xB139, 0xB3DF, 0xB13A, 0x86B4, 0xB13B, 0x86B5, + 0xB13C, 0x86B6, 0xB13D, 0x86B7, 0xB13E, 0x86B8, 0xB13F, 0x86B9, 0xB140, 0xB3E0, 0xB141, 0xB3E1, 0xB142, 0x86BA, 0xB143, 0x86BB, + 0xB144, 0xB3E2, 0xB145, 0x86BC, 0xB146, 0x86BD, 0xB147, 0x86BE, 0xB148, 0xB3E3, 0xB149, 0x86BF, 0xB14A, 0x86C0, 0xB14B, 0x86C1, + 0xB14C, 0x86C2, 0xB14D, 0x86C3, 0xB14E, 0x86C4, 0xB14F, 0x86C5, 0xB150, 0xB3E4, 0xB151, 0xB3E5, 0xB152, 0x86C6, 0xB153, 0x86C7, + 0xB154, 0xB3E6, 0xB155, 0xB3E7, 0xB156, 0x86C8, 0xB157, 0x86C9, 0xB158, 0xB3E8, 0xB159, 0x86CA, 0xB15A, 0x86CB, 0xB15B, 0x86CC, + 0xB15C, 0xB3E9, 0xB15D, 0x86CD, 0xB15E, 0x86CE, 0xB15F, 0x86CF, 0xB160, 0xB3EA, 0xB161, 0x86D0, 0xB162, 0x86D1, 0xB163, 0x86D2, + 0xB164, 0x86D3, 0xB165, 0x86D4, 0xB166, 0x86D5, 0xB167, 0x86D6, 0xB168, 0x86D7, 0xB169, 0x86D8, 0xB16A, 0x86D9, 0xB16B, 0x86DA, + 0xB16C, 0x86DB, 0xB16D, 0x86DC, 0xB16E, 0x86DD, 0xB16F, 0x86DE, 0xB170, 0x86DF, 0xB171, 0x86E0, 0xB172, 0x86E1, 0xB173, 0x86E2, + 0xB174, 0x86E3, 0xB175, 0x86E4, 0xB176, 0x86E5, 0xB177, 0x86E6, 0xB178, 0xB3EB, 0xB179, 0xB3EC, 0xB17A, 0x86E7, 0xB17B, 0x86E8, + 0xB17C, 0xB3ED, 0xB17D, 0x86E9, 0xB17E, 0x86EA, 0xB17F, 0x86EB, 0xB180, 0xB3EE, 0xB181, 0x86EC, 0xB182, 0xB3EF, 0xB183, 0x86ED, + 0xB184, 0x86EE, 0xB185, 0x86EF, 0xB186, 0x86F0, 0xB187, 0x86F1, 0xB188, 0xB3F0, 0xB189, 0xB3F1, 0xB18A, 0x86F2, 0xB18B, 0xB3F2, + 0xB18C, 0x86F3, 0xB18D, 0xB3F3, 0xB18E, 0x86F4, 0xB18F, 0x86F5, 0xB190, 0x86F6, 0xB191, 0x86F7, 0xB192, 0xB3F4, 0xB193, 0xB3F5, + 0xB194, 0xB3F6, 0xB195, 0x86F8, 0xB196, 0x86F9, 0xB197, 0x86FA, 0xB198, 0xB3F7, 0xB199, 0x86FB, 0xB19A, 0x86FC, 0xB19B, 0x86FD, + 0xB19C, 0xB3F8, 0xB19D, 0x86FE, 0xB19E, 0x8741, 0xB19F, 0x8742, 0xB1A0, 0x8743, 0xB1A1, 0x8744, 0xB1A2, 0x8745, 0xB1A3, 0x8746, + 0xB1A4, 0x8747, 0xB1A5, 0x8748, 0xB1A6, 0x8749, 0xB1A7, 0x874A, 0xB1A8, 0xB3F9, 0xB1A9, 0x874B, 0xB1AA, 0x874C, 0xB1AB, 0x874D, + 0xB1AC, 0x874E, 0xB1AD, 0x874F, 0xB1AE, 0x8750, 0xB1AF, 0x8751, 0xB1B0, 0x8752, 0xB1B1, 0x8753, 0xB1B2, 0x8754, 0xB1B3, 0x8755, + 0xB1B4, 0x8756, 0xB1B5, 0x8757, 0xB1B6, 0x8758, 0xB1B7, 0x8759, 0xB1B8, 0x875A, 0xB1B9, 0x8761, 0xB1BA, 0x8762, 0xB1BB, 0x8763, + 0xB1BC, 0x8764, 0xB1BD, 0x8765, 0xB1BE, 0x8766, 0xB1BF, 0x8767, 0xB1C0, 0x8768, 0xB1C1, 0x8769, 0xB1C2, 0x876A, 0xB1C3, 0x876B, + 0xB1C4, 0x876C, 0xB1C5, 0x876D, 0xB1C6, 0x876E, 0xB1C7, 0x876F, 0xB1C8, 0x8770, 0xB1C9, 0x8771, 0xB1CA, 0x8772, 0xB1CB, 0x8773, + 0xB1CC, 0xB3FA, 0xB1CD, 0x8774, 0xB1CE, 0x8775, 0xB1CF, 0x8776, 0xB1D0, 0xB3FB, 0xB1D1, 0x8777, 0xB1D2, 0x8778, 0xB1D3, 0x8779, + 0xB1D4, 0xB3FC, 0xB1D5, 0x877A, 0xB1D6, 0x8781, 0xB1D7, 0x8782, 0xB1D8, 0x8783, 0xB1D9, 0x8784, 0xB1DA, 0x8785, 0xB1DB, 0x8786, + 0xB1DC, 0xB3FD, 0xB1DD, 0xB3FE, 0xB1DE, 0x8787, 0xB1DF, 0xB4A1, 0xB1E0, 0x8788, 0xB1E1, 0x8789, 0xB1E2, 0x878A, 0xB1E3, 0x878B, + 0xB1E4, 0x878C, 0xB1E5, 0x878D, 0xB1E6, 0x878E, 0xB1E7, 0x878F, 0xB1E8, 0xB4A2, 0xB1E9, 0xB4A3, 0xB1EA, 0x8790, 0xB1EB, 0x8791, + 0xB1EC, 0xB4A4, 0xB1ED, 0x8792, 0xB1EE, 0x8793, 0xB1EF, 0x8794, 0xB1F0, 0xB4A5, 0xB1F1, 0x8795, 0xB1F2, 0x8796, 0xB1F3, 0x8797, + 0xB1F4, 0x8798, 0xB1F5, 0x8799, 0xB1F6, 0x879A, 0xB1F7, 0x879B, 0xB1F8, 0x879C, 0xB1F9, 0xB4A6, 0xB1FA, 0x879D, 0xB1FB, 0xB4A7, + 0xB1FC, 0x879E, 0xB1FD, 0xB4A8, 0xB1FE, 0x879F, 0xB1FF, 0x87A0, 0xB200, 0x87A1, 0xB201, 0x87A2, 0xB202, 0x87A3, 0xB203, 0x87A4, + 0xB204, 0xB4A9, 0xB205, 0xB4AA, 0xB206, 0x87A5, 0xB207, 0x87A6, 0xB208, 0xB4AB, 0xB209, 0x87A7, 0xB20A, 0x87A8, 0xB20B, 0xB4AC, + 0xB20C, 0xB4AD, 0xB20D, 0x87A9, 0xB20E, 0x87AA, 0xB20F, 0x87AB, 0xB210, 0x87AC, 0xB211, 0x87AD, 0xB212, 0x87AE, 0xB213, 0x87AF, + 0xB214, 0xB4AE, 0xB215, 0xB4AF, 0xB216, 0x87B0, 0xB217, 0xB4B0, 0xB218, 0x87B1, 0xB219, 0xB4B1, 0xB21A, 0x87B2, 0xB21B, 0x87B3, + 0xB21C, 0x87B4, 0xB21D, 0x87B5, 0xB21E, 0x87B6, 0xB21F, 0x87B7, 0xB220, 0xB4B2, 0xB221, 0x87B8, 0xB222, 0x87B9, 0xB223, 0x87BA, + 0xB224, 0x87BB, 0xB225, 0x87BC, 0xB226, 0x87BD, 0xB227, 0x87BE, 0xB228, 0x87BF, 0xB229, 0x87C0, 0xB22A, 0x87C1, 0xB22B, 0x87C2, + 0xB22C, 0x87C3, 0xB22D, 0x87C4, 0xB22E, 0x87C5, 0xB22F, 0x87C6, 0xB230, 0x87C7, 0xB231, 0x87C8, 0xB232, 0x87C9, 0xB233, 0x87CA, + 0xB234, 0xB4B3, 0xB235, 0x87CB, 0xB236, 0x87CC, 0xB237, 0x87CD, 0xB238, 0x87CE, 0xB239, 0x87CF, 0xB23A, 0x87D0, 0xB23B, 0x87D1, + 0xB23C, 0xB4B4, 0xB23D, 0x87D2, 0xB23E, 0x87D3, 0xB23F, 0x87D4, 0xB240, 0x87D5, 0xB241, 0x87D6, 0xB242, 0x87D7, 0xB243, 0x87D8, + 0xB244, 0x87D9, 0xB245, 0x87DA, 0xB246, 0x87DB, 0xB247, 0x87DC, 0xB248, 0x87DD, 0xB249, 0x87DE, 0xB24A, 0x87DF, 0xB24B, 0x87E0, + 0xB24C, 0x87E1, 0xB24D, 0x87E2, 0xB24E, 0x87E3, 0xB24F, 0x87E4, 0xB250, 0x87E5, 0xB251, 0x87E6, 0xB252, 0x87E7, 0xB253, 0x87E8, + 0xB254, 0x87E9, 0xB255, 0x87EA, 0xB256, 0x87EB, 0xB257, 0x87EC, 0xB258, 0xB4B5, 0xB259, 0x87ED, 0xB25A, 0x87EE, 0xB25B, 0x87EF, + 0xB25C, 0xB4B6, 0xB25D, 0x87F0, 0xB25E, 0x87F1, 0xB25F, 0x87F2, 0xB260, 0xB4B7, 0xB261, 0x87F3, 0xB262, 0x87F4, 0xB263, 0x87F5, + 0xB264, 0x87F6, 0xB265, 0x87F7, 0xB266, 0x87F8, 0xB267, 0x87F9, 0xB268, 0xB4B8, 0xB269, 0xB4B9, 0xB26A, 0x87FA, 0xB26B, 0x87FB, + 0xB26C, 0x87FC, 0xB26D, 0x87FD, 0xB26E, 0x87FE, 0xB26F, 0x8841, 0xB270, 0x8842, 0xB271, 0x8843, 0xB272, 0x8844, 0xB273, 0x8845, + 0xB274, 0xB4BA, 0xB275, 0xB4BB, 0xB276, 0x8846, 0xB277, 0x8847, 0xB278, 0x8848, 0xB279, 0x8849, 0xB27A, 0x884A, 0xB27B, 0x884B, + 0xB27C, 0xB4BC, 0xB27D, 0x884C, 0xB27E, 0x884D, 0xB27F, 0x884E, 0xB280, 0x884F, 0xB281, 0x8850, 0xB282, 0x8851, 0xB283, 0x8852, + 0xB284, 0xB4BD, 0xB285, 0xB4BE, 0xB286, 0x8853, 0xB287, 0x8854, 0xB288, 0x8855, 0xB289, 0xB4BF, 0xB28A, 0x8856, 0xB28B, 0x8857, + 0xB28C, 0x8858, 0xB28D, 0x8859, 0xB28E, 0x885A, 0xB28F, 0x8861, 0xB290, 0xB4C0, 0xB291, 0xB4C1, 0xB292, 0x8862, 0xB293, 0x8863, + 0xB294, 0xB4C2, 0xB295, 0x8864, 0xB296, 0x8865, 0xB297, 0x8866, 0xB298, 0xB4C3, 0xB299, 0xB4C4, 0xB29A, 0xB4C5, 0xB29B, 0x8867, + 0xB29C, 0x8868, 0xB29D, 0x8869, 0xB29E, 0x886A, 0xB29F, 0x886B, 0xB2A0, 0xB4C6, 0xB2A1, 0xB4C7, 0xB2A2, 0x886C, 0xB2A3, 0xB4C8, + 0xB2A4, 0x886D, 0xB2A5, 0xB4C9, 0xB2A6, 0xB4CA, 0xB2A7, 0x886E, 0xB2A8, 0x886F, 0xB2A9, 0x8870, 0xB2AA, 0xB4CB, 0xB2AB, 0x8871, + 0xB2AC, 0xB4CC, 0xB2AD, 0x8872, 0xB2AE, 0x8873, 0xB2AF, 0x8874, 0xB2B0, 0xB4CD, 0xB2B1, 0x8875, 0xB2B2, 0x8876, 0xB2B3, 0x8877, + 0xB2B4, 0xB4CE, 0xB2B5, 0x8878, 0xB2B6, 0x8879, 0xB2B7, 0x887A, 0xB2B8, 0x8881, 0xB2B9, 0x8882, 0xB2BA, 0x8883, 0xB2BB, 0x8884, + 0xB2BC, 0x8885, 0xB2BD, 0x8886, 0xB2BE, 0x8887, 0xB2BF, 0x8888, 0xB2C0, 0x8889, 0xB2C1, 0x888A, 0xB2C2, 0x888B, 0xB2C3, 0x888C, + 0xB2C4, 0x888D, 0xB2C5, 0x888E, 0xB2C6, 0x888F, 0xB2C7, 0x8890, 0xB2C8, 0xB4CF, 0xB2C9, 0xB4D0, 0xB2CA, 0x8891, 0xB2CB, 0x8892, + 0xB2CC, 0xB4D1, 0xB2CD, 0x8893, 0xB2CE, 0x8894, 0xB2CF, 0x8895, 0xB2D0, 0xB4D2, 0xB2D1, 0x8896, 0xB2D2, 0xB4D3, 0xB2D3, 0x8897, + 0xB2D4, 0x8898, 0xB2D5, 0x8899, 0xB2D6, 0x889A, 0xB2D7, 0x889B, 0xB2D8, 0xB4D4, 0xB2D9, 0xB4D5, 0xB2DA, 0x889C, 0xB2DB, 0xB4D6, + 0xB2DC, 0x889D, 0xB2DD, 0xB4D7, 0xB2DE, 0x889E, 0xB2DF, 0x889F, 0xB2E0, 0x88A0, 0xB2E1, 0x88A1, 0xB2E2, 0xB4D8, 0xB2E3, 0x88A2, + 0xB2E4, 0xB4D9, 0xB2E5, 0xB4DA, 0xB2E6, 0xB4DB, 0xB2E7, 0x88A3, 0xB2E8, 0xB4DC, 0xB2E9, 0x88A4, 0xB2EA, 0x88A5, 0xB2EB, 0xB4DD, + 0xB2EC, 0xB4DE, 0xB2ED, 0xB4DF, 0xB2EE, 0xB4E0, 0xB2EF, 0xB4E1, 0xB2F0, 0x88A6, 0xB2F1, 0x88A7, 0xB2F2, 0x88A8, 0xB2F3, 0xB4E2, + 0xB2F4, 0xB4E3, 0xB2F5, 0xB4E4, 0xB2F6, 0x88A9, 0xB2F7, 0xB4E5, 0xB2F8, 0xB4E6, 0xB2F9, 0xB4E7, 0xB2FA, 0xB4E8, 0xB2FB, 0xB4E9, + 0xB2FC, 0x88AA, 0xB2FD, 0x88AB, 0xB2FE, 0x88AC, 0xB2FF, 0xB4EA, 0xB300, 0xB4EB, 0xB301, 0xB4EC, 0xB302, 0x88AD, 0xB303, 0x88AE, + 0xB304, 0xB4ED, 0xB305, 0x88AF, 0xB306, 0x88B0, 0xB307, 0x88B1, 0xB308, 0xB4EE, 0xB309, 0x88B2, 0xB30A, 0x88B3, 0xB30B, 0x88B4, + 0xB30C, 0x88B5, 0xB30D, 0x88B6, 0xB30E, 0x88B7, 0xB30F, 0x88B8, 0xB310, 0xB4EF, 0xB311, 0xB4F0, 0xB312, 0x88B9, 0xB313, 0xB4F1, + 0xB314, 0xB4F2, 0xB315, 0xB4F3, 0xB316, 0x88BA, 0xB317, 0x88BB, 0xB318, 0x88BC, 0xB319, 0x88BD, 0xB31A, 0x88BE, 0xB31B, 0x88BF, + 0xB31C, 0xB4F4, 0xB31D, 0x88C0, 0xB31E, 0x88C1, 0xB31F, 0x88C2, 0xB320, 0x88C3, 0xB321, 0x88C4, 0xB322, 0x88C5, 0xB323, 0x88C6, + 0xB324, 0x88C7, 0xB325, 0x88C8, 0xB326, 0x88C9, 0xB327, 0x88CA, 0xB328, 0x88CB, 0xB329, 0x88CC, 0xB32A, 0x88CD, 0xB32B, 0x88CE, + 0xB32C, 0x88CF, 0xB32D, 0x88D0, 0xB32E, 0x88D1, 0xB32F, 0x88D2, 0xB330, 0x88D3, 0xB331, 0x88D4, 0xB332, 0x88D5, 0xB333, 0x88D6, + 0xB334, 0x88D7, 0xB335, 0x88D8, 0xB336, 0x88D9, 0xB337, 0x88DA, 0xB338, 0x88DB, 0xB339, 0x88DC, 0xB33A, 0x88DD, 0xB33B, 0x88DE, + 0xB33C, 0x88DF, 0xB33D, 0x88E0, 0xB33E, 0x88E1, 0xB33F, 0x88E2, 0xB340, 0x88E3, 0xB341, 0x88E4, 0xB342, 0x88E5, 0xB343, 0x88E6, + 0xB344, 0x88E7, 0xB345, 0x88E8, 0xB346, 0x88E9, 0xB347, 0x88EA, 0xB348, 0x88EB, 0xB349, 0x88EC, 0xB34A, 0x88ED, 0xB34B, 0x88EE, + 0xB34C, 0x88EF, 0xB34D, 0x88F0, 0xB34E, 0x88F1, 0xB34F, 0x88F2, 0xB350, 0x88F3, 0xB351, 0x88F4, 0xB352, 0x88F5, 0xB353, 0x88F6, + 0xB354, 0xB4F5, 0xB355, 0xB4F6, 0xB356, 0xB4F7, 0xB357, 0x88F7, 0xB358, 0xB4F8, 0xB359, 0x88F8, 0xB35A, 0x88F9, 0xB35B, 0xB4F9, + 0xB35C, 0xB4FA, 0xB35D, 0x88FA, 0xB35E, 0xB4FB, 0xB35F, 0xB4FC, 0xB360, 0x88FB, 0xB361, 0x88FC, 0xB362, 0x88FD, 0xB363, 0x88FE, + 0xB364, 0xB4FD, 0xB365, 0xB4FE, 0xB366, 0x8941, 0xB367, 0xB5A1, 0xB368, 0x8942, 0xB369, 0xB5A2, 0xB36A, 0x8943, 0xB36B, 0xB5A3, + 0xB36C, 0x8944, 0xB36D, 0x8945, 0xB36E, 0xB5A4, 0xB36F, 0x8946, 0xB370, 0xB5A5, 0xB371, 0xB5A6, 0xB372, 0x8947, 0xB373, 0x8948, + 0xB374, 0xB5A7, 0xB375, 0x8949, 0xB376, 0x894A, 0xB377, 0x894B, 0xB378, 0xB5A8, 0xB379, 0x894C, 0xB37A, 0x894D, 0xB37B, 0x894E, + 0xB37C, 0x894F, 0xB37D, 0x8950, 0xB37E, 0x8951, 0xB37F, 0x8952, 0xB380, 0xB5A9, 0xB381, 0xB5AA, 0xB382, 0x8953, 0xB383, 0xB5AB, + 0xB384, 0xB5AC, 0xB385, 0xB5AD, 0xB386, 0x8954, 0xB387, 0x8955, 0xB388, 0x8956, 0xB389, 0x8957, 0xB38A, 0x8958, 0xB38B, 0x8959, + 0xB38C, 0xB5AE, 0xB38D, 0x895A, 0xB38E, 0x8961, 0xB38F, 0x8962, 0xB390, 0xB5AF, 0xB391, 0x8963, 0xB392, 0x8964, 0xB393, 0x8965, + 0xB394, 0xB5B0, 0xB395, 0x8966, 0xB396, 0x8967, 0xB397, 0x8968, 0xB398, 0x8969, 0xB399, 0x896A, 0xB39A, 0x896B, 0xB39B, 0x896C, + 0xB39C, 0x896D, 0xB39D, 0x896E, 0xB39E, 0x896F, 0xB39F, 0x8970, 0xB3A0, 0xB5B1, 0xB3A1, 0xB5B2, 0xB3A2, 0x8971, 0xB3A3, 0x8972, + 0xB3A4, 0x8973, 0xB3A5, 0x8974, 0xB3A6, 0x8975, 0xB3A7, 0x8976, 0xB3A8, 0xB5B3, 0xB3A9, 0x8977, 0xB3AA, 0x8978, 0xB3AB, 0x8979, + 0xB3AC, 0xB5B4, 0xB3AD, 0x897A, 0xB3AE, 0x8981, 0xB3AF, 0x8982, 0xB3B0, 0x8983, 0xB3B1, 0x8984, 0xB3B2, 0x8985, 0xB3B3, 0x8986, + 0xB3B4, 0x8987, 0xB3B5, 0x8988, 0xB3B6, 0x8989, 0xB3B7, 0x898A, 0xB3B8, 0x898B, 0xB3B9, 0x898C, 0xB3BA, 0x898D, 0xB3BB, 0x898E, + 0xB3BC, 0x898F, 0xB3BD, 0x8990, 0xB3BE, 0x8991, 0xB3BF, 0x8992, 0xB3C0, 0x8993, 0xB3C1, 0x8994, 0xB3C2, 0x8995, 0xB3C3, 0x8996, + 0xB3C4, 0xB5B5, 0xB3C5, 0xB5B6, 0xB3C6, 0x8997, 0xB3C7, 0x8998, 0xB3C8, 0xB5B7, 0xB3C9, 0x8999, 0xB3CA, 0x899A, 0xB3CB, 0xB5B8, + 0xB3CC, 0xB5B9, 0xB3CD, 0x899B, 0xB3CE, 0xB5BA, 0xB3CF, 0x899C, 0xB3D0, 0xB5BB, 0xB3D1, 0x899D, 0xB3D2, 0x899E, 0xB3D3, 0x899F, + 0xB3D4, 0xB5BC, 0xB3D5, 0xB5BD, 0xB3D6, 0x89A0, 0xB3D7, 0xB5BE, 0xB3D8, 0x89A1, 0xB3D9, 0xB5BF, 0xB3DA, 0x89A2, 0xB3DB, 0xB5C0, + 0xB3DC, 0x89A3, 0xB3DD, 0xB5C1, 0xB3DE, 0x89A4, 0xB3DF, 0x89A5, 0xB3E0, 0xB5C2, 0xB3E1, 0x89A6, 0xB3E2, 0x89A7, 0xB3E3, 0x89A8, + 0xB3E4, 0xB5C3, 0xB3E5, 0x89A9, 0xB3E6, 0x89AA, 0xB3E7, 0x89AB, 0xB3E8, 0xB5C4, 0xB3E9, 0x89AC, 0xB3EA, 0x89AD, 0xB3EB, 0x89AE, + 0xB3EC, 0x89AF, 0xB3ED, 0x89B0, 0xB3EE, 0x89B1, 0xB3EF, 0x89B2, 0xB3F0, 0x89B3, 0xB3F1, 0x89B4, 0xB3F2, 0x89B5, 0xB3F3, 0x89B6, + 0xB3F4, 0x89B7, 0xB3F5, 0x89B8, 0xB3F6, 0x89B9, 0xB3F7, 0x89BA, 0xB3F8, 0x89BB, 0xB3F9, 0x89BC, 0xB3FA, 0x89BD, 0xB3FB, 0x89BE, + 0xB3FC, 0xB5C5, 0xB3FD, 0x89BF, 0xB3FE, 0x89C0, 0xB3FF, 0x89C1, 0xB400, 0x89C2, 0xB401, 0x89C3, 0xB402, 0x89C4, 0xB403, 0x89C5, + 0xB404, 0x89C6, 0xB405, 0x89C7, 0xB406, 0x89C8, 0xB407, 0x89C9, 0xB408, 0x89CA, 0xB409, 0x89CB, 0xB40A, 0x89CC, 0xB40B, 0x89CD, + 0xB40C, 0x89CE, 0xB40D, 0x89CF, 0xB40E, 0x89D0, 0xB40F, 0x89D1, 0xB410, 0xB5C6, 0xB411, 0x89D2, 0xB412, 0x89D3, 0xB413, 0x89D4, + 0xB414, 0x89D5, 0xB415, 0x89D6, 0xB416, 0x89D7, 0xB417, 0x89D8, 0xB418, 0xB5C7, 0xB419, 0x89D9, 0xB41A, 0x89DA, 0xB41B, 0x89DB, + 0xB41C, 0xB5C8, 0xB41D, 0x89DC, 0xB41E, 0x89DD, 0xB41F, 0x89DE, 0xB420, 0xB5C9, 0xB421, 0x89DF, 0xB422, 0x89E0, 0xB423, 0x89E1, + 0xB424, 0x89E2, 0xB425, 0x89E3, 0xB426, 0x89E4, 0xB427, 0x89E5, 0xB428, 0xB5CA, 0xB429, 0xB5CB, 0xB42A, 0x89E6, 0xB42B, 0xB5CC, + 0xB42C, 0x89E7, 0xB42D, 0x89E8, 0xB42E, 0x89E9, 0xB42F, 0x89EA, 0xB430, 0x89EB, 0xB431, 0x89EC, 0xB432, 0x89ED, 0xB433, 0x89EE, + 0xB434, 0xB5CD, 0xB435, 0x89EF, 0xB436, 0x89F0, 0xB437, 0x89F1, 0xB438, 0x89F2, 0xB439, 0x89F3, 0xB43A, 0x89F4, 0xB43B, 0x89F5, + 0xB43C, 0x89F6, 0xB43D, 0x89F7, 0xB43E, 0x89F8, 0xB43F, 0x89F9, 0xB440, 0x89FA, 0xB441, 0x89FB, 0xB442, 0x89FC, 0xB443, 0x89FD, + 0xB444, 0x89FE, 0xB445, 0x8A41, 0xB446, 0x8A42, 0xB447, 0x8A43, 0xB448, 0x8A44, 0xB449, 0x8A45, 0xB44A, 0x8A46, 0xB44B, 0x8A47, + 0xB44C, 0x8A48, 0xB44D, 0x8A49, 0xB44E, 0x8A4A, 0xB44F, 0x8A4B, 0xB450, 0xB5CE, 0xB451, 0xB5CF, 0xB452, 0x8A4C, 0xB453, 0x8A4D, + 0xB454, 0xB5D0, 0xB455, 0x8A4E, 0xB456, 0x8A4F, 0xB457, 0x8A50, 0xB458, 0xB5D1, 0xB459, 0x8A51, 0xB45A, 0x8A52, 0xB45B, 0x8A53, + 0xB45C, 0x8A54, 0xB45D, 0x8A55, 0xB45E, 0x8A56, 0xB45F, 0x8A57, 0xB460, 0xB5D2, 0xB461, 0xB5D3, 0xB462, 0x8A58, 0xB463, 0xB5D4, + 0xB464, 0x8A59, 0xB465, 0xB5D5, 0xB466, 0x8A5A, 0xB467, 0x8A61, 0xB468, 0x8A62, 0xB469, 0x8A63, 0xB46A, 0x8A64, 0xB46B, 0x8A65, + 0xB46C, 0xB5D6, 0xB46D, 0x8A66, 0xB46E, 0x8A67, 0xB46F, 0x8A68, 0xB470, 0x8A69, 0xB471, 0x8A6A, 0xB472, 0x8A6B, 0xB473, 0x8A6C, + 0xB474, 0x8A6D, 0xB475, 0x8A6E, 0xB476, 0x8A6F, 0xB477, 0x8A70, 0xB478, 0x8A71, 0xB479, 0x8A72, 0xB47A, 0x8A73, 0xB47B, 0x8A74, + 0xB47C, 0x8A75, 0xB47D, 0x8A76, 0xB47E, 0x8A77, 0xB47F, 0x8A78, 0xB480, 0xB5D7, 0xB481, 0x8A79, 0xB482, 0x8A7A, 0xB483, 0x8A81, + 0xB484, 0x8A82, 0xB485, 0x8A83, 0xB486, 0x8A84, 0xB487, 0x8A85, 0xB488, 0xB5D8, 0xB489, 0x8A86, 0xB48A, 0x8A87, 0xB48B, 0x8A88, + 0xB48C, 0x8A89, 0xB48D, 0x8A8A, 0xB48E, 0x8A8B, 0xB48F, 0x8A8C, 0xB490, 0x8A8D, 0xB491, 0x8A8E, 0xB492, 0x8A8F, 0xB493, 0x8A90, + 0xB494, 0x8A91, 0xB495, 0x8A92, 0xB496, 0x8A93, 0xB497, 0x8A94, 0xB498, 0x8A95, 0xB499, 0x8A96, 0xB49A, 0x8A97, 0xB49B, 0x8A98, + 0xB49C, 0x8A99, 0xB49D, 0xB5D9, 0xB49E, 0x8A9A, 0xB49F, 0x8A9B, 0xB4A0, 0x8A9C, 0xB4A1, 0x8A9D, 0xB4A2, 0x8A9E, 0xB4A3, 0x8A9F, + 0xB4A4, 0xB5DA, 0xB4A5, 0x8AA0, 0xB4A6, 0x8AA1, 0xB4A7, 0x8AA2, 0xB4A8, 0xB5DB, 0xB4A9, 0x8AA3, 0xB4AA, 0x8AA4, 0xB4AB, 0x8AA5, + 0xB4AC, 0xB5DC, 0xB4AD, 0x8AA6, 0xB4AE, 0x8AA7, 0xB4AF, 0x8AA8, 0xB4B0, 0x8AA9, 0xB4B1, 0x8AAA, 0xB4B2, 0x8AAB, 0xB4B3, 0x8AAC, + 0xB4B4, 0x8AAD, 0xB4B5, 0xB5DD, 0xB4B6, 0x8AAE, 0xB4B7, 0xB5DE, 0xB4B8, 0x8AAF, 0xB4B9, 0xB5DF, 0xB4BA, 0x8AB0, 0xB4BB, 0x8AB1, + 0xB4BC, 0x8AB2, 0xB4BD, 0x8AB3, 0xB4BE, 0x8AB4, 0xB4BF, 0x8AB5, 0xB4C0, 0xB5E0, 0xB4C1, 0x8AB6, 0xB4C2, 0x8AB7, 0xB4C3, 0x8AB8, + 0xB4C4, 0xB5E1, 0xB4C5, 0x8AB9, 0xB4C6, 0x8ABA, 0xB4C7, 0x8ABB, 0xB4C8, 0xB5E2, 0xB4C9, 0x8ABC, 0xB4CA, 0x8ABD, 0xB4CB, 0x8ABE, + 0xB4CC, 0x8ABF, 0xB4CD, 0x8AC0, 0xB4CE, 0x8AC1, 0xB4CF, 0x8AC2, 0xB4D0, 0xB5E3, 0xB4D1, 0x8AC3, 0xB4D2, 0x8AC4, 0xB4D3, 0x8AC5, + 0xB4D4, 0x8AC6, 0xB4D5, 0xB5E4, 0xB4D6, 0x8AC7, 0xB4D7, 0x8AC8, 0xB4D8, 0x8AC9, 0xB4D9, 0x8ACA, 0xB4DA, 0x8ACB, 0xB4DB, 0x8ACC, + 0xB4DC, 0xB5E5, 0xB4DD, 0xB5E6, 0xB4DE, 0x8ACD, 0xB4DF, 0x8ACE, 0xB4E0, 0xB5E7, 0xB4E1, 0x8ACF, 0xB4E2, 0x8AD0, 0xB4E3, 0xB5E8, + 0xB4E4, 0xB5E9, 0xB4E5, 0x8AD1, 0xB4E6, 0xB5EA, 0xB4E7, 0x8AD2, 0xB4E8, 0x8AD3, 0xB4E9, 0x8AD4, 0xB4EA, 0x8AD5, 0xB4EB, 0x8AD6, + 0xB4EC, 0xB5EB, 0xB4ED, 0xB5EC, 0xB4EE, 0x8AD7, 0xB4EF, 0xB5ED, 0xB4F0, 0x8AD8, 0xB4F1, 0xB5EE, 0xB4F2, 0x8AD9, 0xB4F3, 0x8ADA, + 0xB4F4, 0x8ADB, 0xB4F5, 0x8ADC, 0xB4F6, 0x8ADD, 0xB4F7, 0x8ADE, 0xB4F8, 0xB5EF, 0xB4F9, 0x8ADF, 0xB4FA, 0x8AE0, 0xB4FB, 0x8AE1, + 0xB4FC, 0x8AE2, 0xB4FD, 0x8AE3, 0xB4FE, 0x8AE4, 0xB4FF, 0x8AE5, 0xB500, 0x8AE6, 0xB501, 0x8AE7, 0xB502, 0x8AE8, 0xB503, 0x8AE9, + 0xB504, 0x8AEA, 0xB505, 0x8AEB, 0xB506, 0x8AEC, 0xB507, 0x8AED, 0xB508, 0x8AEE, 0xB509, 0x8AEF, 0xB50A, 0x8AF0, 0xB50B, 0x8AF1, + 0xB50C, 0x8AF2, 0xB50D, 0x8AF3, 0xB50E, 0x8AF4, 0xB50F, 0x8AF5, 0xB510, 0x8AF6, 0xB511, 0x8AF7, 0xB512, 0x8AF8, 0xB513, 0x8AF9, + 0xB514, 0xB5F0, 0xB515, 0xB5F1, 0xB516, 0x8AFA, 0xB517, 0x8AFB, 0xB518, 0xB5F2, 0xB519, 0x8AFC, 0xB51A, 0x8AFD, 0xB51B, 0xB5F3, + 0xB51C, 0xB5F4, 0xB51D, 0x8AFE, 0xB51E, 0x8B41, 0xB51F, 0x8B42, 0xB520, 0x8B43, 0xB521, 0x8B44, 0xB522, 0x8B45, 0xB523, 0x8B46, + 0xB524, 0xB5F5, 0xB525, 0xB5F6, 0xB526, 0x8B47, 0xB527, 0xB5F7, 0xB528, 0xB5F8, 0xB529, 0xB5F9, 0xB52A, 0xB5FA, 0xB52B, 0x8B48, + 0xB52C, 0x8B49, 0xB52D, 0x8B4A, 0xB52E, 0x8B4B, 0xB52F, 0x8B4C, 0xB530, 0xB5FB, 0xB531, 0xB5FC, 0xB532, 0x8B4D, 0xB533, 0x8B4E, + 0xB534, 0xB5FD, 0xB535, 0x8B4F, 0xB536, 0x8B50, 0xB537, 0x8B51, 0xB538, 0xB5FE, 0xB539, 0x8B52, 0xB53A, 0x8B53, 0xB53B, 0x8B54, + 0xB53C, 0x8B55, 0xB53D, 0x8B56, 0xB53E, 0x8B57, 0xB53F, 0x8B58, 0xB540, 0xB6A1, 0xB541, 0xB6A2, 0xB542, 0x8B59, 0xB543, 0xB6A3, + 0xB544, 0xB6A4, 0xB545, 0xB6A5, 0xB546, 0x8B5A, 0xB547, 0x8B61, 0xB548, 0x8B62, 0xB549, 0x8B63, 0xB54A, 0x8B64, 0xB54B, 0xB6A6, + 0xB54C, 0xB6A7, 0xB54D, 0xB6A8, 0xB54E, 0x8B65, 0xB54F, 0x8B66, 0xB550, 0xB6A9, 0xB551, 0x8B67, 0xB552, 0x8B68, 0xB553, 0x8B69, + 0xB554, 0xB6AA, 0xB555, 0x8B6A, 0xB556, 0x8B6B, 0xB557, 0x8B6C, 0xB558, 0x8B6D, 0xB559, 0x8B6E, 0xB55A, 0x8B6F, 0xB55B, 0x8B70, + 0xB55C, 0xB6AB, 0xB55D, 0xB6AC, 0xB55E, 0x8B71, 0xB55F, 0xB6AD, 0xB560, 0xB6AE, 0xB561, 0xB6AF, 0xB562, 0x8B72, 0xB563, 0x8B73, + 0xB564, 0x8B74, 0xB565, 0x8B75, 0xB566, 0x8B76, 0xB567, 0x8B77, 0xB568, 0x8B78, 0xB569, 0x8B79, 0xB56A, 0x8B7A, 0xB56B, 0x8B81, + 0xB56C, 0x8B82, 0xB56D, 0x8B83, 0xB56E, 0x8B84, 0xB56F, 0x8B85, 0xB570, 0x8B86, 0xB571, 0x8B87, 0xB572, 0x8B88, 0xB573, 0x8B89, + 0xB574, 0x8B8A, 0xB575, 0x8B8B, 0xB576, 0x8B8C, 0xB577, 0x8B8D, 0xB578, 0x8B8E, 0xB579, 0x8B8F, 0xB57A, 0x8B90, 0xB57B, 0x8B91, + 0xB57C, 0x8B92, 0xB57D, 0x8B93, 0xB57E, 0x8B94, 0xB57F, 0x8B95, 0xB580, 0x8B96, 0xB581, 0x8B97, 0xB582, 0x8B98, 0xB583, 0x8B99, + 0xB584, 0x8B9A, 0xB585, 0x8B9B, 0xB586, 0x8B9C, 0xB587, 0x8B9D, 0xB588, 0x8B9E, 0xB589, 0x8B9F, 0xB58A, 0x8BA0, 0xB58B, 0x8BA1, + 0xB58C, 0x8BA2, 0xB58D, 0x8BA3, 0xB58E, 0x8BA4, 0xB58F, 0x8BA5, 0xB590, 0x8BA6, 0xB591, 0x8BA7, 0xB592, 0x8BA8, 0xB593, 0x8BA9, + 0xB594, 0x8BAA, 0xB595, 0x8BAB, 0xB596, 0x8BAC, 0xB597, 0x8BAD, 0xB598, 0x8BAE, 0xB599, 0x8BAF, 0xB59A, 0x8BB0, 0xB59B, 0x8BB1, + 0xB59C, 0x8BB2, 0xB59D, 0x8BB3, 0xB59E, 0x8BB4, 0xB59F, 0x8BB5, 0xB5A0, 0xB6B0, 0xB5A1, 0xB6B1, 0xB5A2, 0x8BB6, 0xB5A3, 0x8BB7, + 0xB5A4, 0xB6B2, 0xB5A5, 0x8BB8, 0xB5A6, 0x8BB9, 0xB5A7, 0x8BBA, 0xB5A8, 0xB6B3, 0xB5A9, 0x8BBB, 0xB5AA, 0xB6B4, 0xB5AB, 0xB6B5, + 0xB5AC, 0x8BBC, 0xB5AD, 0x8BBD, 0xB5AE, 0x8BBE, 0xB5AF, 0x8BBF, 0xB5B0, 0xB6B6, 0xB5B1, 0xB6B7, 0xB5B2, 0x8BC0, 0xB5B3, 0xB6B8, + 0xB5B4, 0xB6B9, 0xB5B5, 0xB6BA, 0xB5B6, 0x8BC1, 0xB5B7, 0x8BC2, 0xB5B8, 0x8BC3, 0xB5B9, 0x8BC4, 0xB5BA, 0x8BC5, 0xB5BB, 0xB6BB, + 0xB5BC, 0xB6BC, 0xB5BD, 0xB6BD, 0xB5BE, 0x8BC6, 0xB5BF, 0x8BC7, 0xB5C0, 0xB6BE, 0xB5C1, 0x8BC8, 0xB5C2, 0x8BC9, 0xB5C3, 0x8BCA, + 0xB5C4, 0xB6BF, 0xB5C5, 0x8BCB, 0xB5C6, 0x8BCC, 0xB5C7, 0x8BCD, 0xB5C8, 0x8BCE, 0xB5C9, 0x8BCF, 0xB5CA, 0x8BD0, 0xB5CB, 0x8BD1, + 0xB5CC, 0xB6C0, 0xB5CD, 0xB6C1, 0xB5CE, 0x8BD2, 0xB5CF, 0xB6C2, 0xB5D0, 0xB6C3, 0xB5D1, 0xB6C4, 0xB5D2, 0x8BD3, 0xB5D3, 0x8BD4, + 0xB5D4, 0x8BD5, 0xB5D5, 0x8BD6, 0xB5D6, 0x8BD7, 0xB5D7, 0x8BD8, 0xB5D8, 0xB6C5, 0xB5D9, 0x8BD9, 0xB5DA, 0x8BDA, 0xB5DB, 0x8BDB, + 0xB5DC, 0x8BDC, 0xB5DD, 0x8BDD, 0xB5DE, 0x8BDE, 0xB5DF, 0x8BDF, 0xB5E0, 0x8BE0, 0xB5E1, 0x8BE1, 0xB5E2, 0x8BE2, 0xB5E3, 0x8BE3, + 0xB5E4, 0x8BE4, 0xB5E5, 0x8BE5, 0xB5E6, 0x8BE6, 0xB5E7, 0x8BE7, 0xB5E8, 0x8BE8, 0xB5E9, 0x8BE9, 0xB5EA, 0x8BEA, 0xB5EB, 0x8BEB, + 0xB5EC, 0xB6C6, 0xB5ED, 0x8BEC, 0xB5EE, 0x8BED, 0xB5EF, 0x8BEE, 0xB5F0, 0x8BEF, 0xB5F1, 0x8BF0, 0xB5F2, 0x8BF1, 0xB5F3, 0x8BF2, + 0xB5F4, 0x8BF3, 0xB5F5, 0x8BF4, 0xB5F6, 0x8BF5, 0xB5F7, 0x8BF6, 0xB5F8, 0x8BF7, 0xB5F9, 0x8BF8, 0xB5FA, 0x8BF9, 0xB5FB, 0x8BFA, + 0xB5FC, 0x8BFB, 0xB5FD, 0x8BFC, 0xB5FE, 0x8BFD, 0xB5FF, 0x8BFE, 0xB600, 0x8C41, 0xB601, 0x8C42, 0xB602, 0x8C43, 0xB603, 0x8C44, + 0xB604, 0x8C45, 0xB605, 0x8C46, 0xB606, 0x8C47, 0xB607, 0x8C48, 0xB608, 0x8C49, 0xB609, 0x8C4A, 0xB60A, 0x8C4B, 0xB60B, 0x8C4C, + 0xB60C, 0x8C4D, 0xB60D, 0x8C4E, 0xB60E, 0x8C4F, 0xB60F, 0x8C50, 0xB610, 0xB6C7, 0xB611, 0xB6C8, 0xB612, 0x8C51, 0xB613, 0x8C52, + 0xB614, 0xB6C9, 0xB615, 0x8C53, 0xB616, 0x8C54, 0xB617, 0x8C55, 0xB618, 0xB6CA, 0xB619, 0x8C56, 0xB61A, 0x8C57, 0xB61B, 0x8C58, + 0xB61C, 0x8C59, 0xB61D, 0x8C5A, 0xB61E, 0x8C61, 0xB61F, 0x8C62, 0xB620, 0x8C63, 0xB621, 0x8C64, 0xB622, 0x8C65, 0xB623, 0x8C66, + 0xB624, 0x8C67, 0xB625, 0xB6CB, 0xB626, 0x8C68, 0xB627, 0x8C69, 0xB628, 0x8C6A, 0xB629, 0x8C6B, 0xB62A, 0x8C6C, 0xB62B, 0x8C6D, + 0xB62C, 0xB6CC, 0xB62D, 0x8C6E, 0xB62E, 0x8C6F, 0xB62F, 0x8C70, 0xB630, 0x8C71, 0xB631, 0x8C72, 0xB632, 0x8C73, 0xB633, 0x8C74, + 0xB634, 0xB6CD, 0xB635, 0x8C75, 0xB636, 0x8C76, 0xB637, 0x8C77, 0xB638, 0x8C78, 0xB639, 0x8C79, 0xB63A, 0x8C7A, 0xB63B, 0x8C81, + 0xB63C, 0x8C82, 0xB63D, 0x8C83, 0xB63E, 0x8C84, 0xB63F, 0x8C85, 0xB640, 0x8C86, 0xB641, 0x8C87, 0xB642, 0x8C88, 0xB643, 0x8C89, + 0xB644, 0x8C8A, 0xB645, 0x8C8B, 0xB646, 0x8C8C, 0xB647, 0x8C8D, 0xB648, 0xB6CE, 0xB649, 0x8C8E, 0xB64A, 0x8C8F, 0xB64B, 0x8C90, + 0xB64C, 0x8C91, 0xB64D, 0x8C92, 0xB64E, 0x8C93, 0xB64F, 0x8C94, 0xB650, 0x8C95, 0xB651, 0x8C96, 0xB652, 0x8C97, 0xB653, 0x8C98, + 0xB654, 0x8C99, 0xB655, 0x8C9A, 0xB656, 0x8C9B, 0xB657, 0x8C9C, 0xB658, 0x8C9D, 0xB659, 0x8C9E, 0xB65A, 0x8C9F, 0xB65B, 0x8CA0, + 0xB65C, 0x8CA1, 0xB65D, 0x8CA2, 0xB65E, 0x8CA3, 0xB65F, 0x8CA4, 0xB660, 0x8CA5, 0xB661, 0x8CA6, 0xB662, 0x8CA7, 0xB663, 0x8CA8, + 0xB664, 0xB6CF, 0xB665, 0x8CA9, 0xB666, 0x8CAA, 0xB667, 0x8CAB, 0xB668, 0xB6D0, 0xB669, 0x8CAC, 0xB66A, 0x8CAD, 0xB66B, 0x8CAE, + 0xB66C, 0x8CAF, 0xB66D, 0x8CB0, 0xB66E, 0x8CB1, 0xB66F, 0x8CB2, 0xB670, 0x8CB3, 0xB671, 0x8CB4, 0xB672, 0x8CB5, 0xB673, 0x8CB6, + 0xB674, 0x8CB7, 0xB675, 0x8CB8, 0xB676, 0x8CB9, 0xB677, 0x8CBA, 0xB678, 0x8CBB, 0xB679, 0x8CBC, 0xB67A, 0x8CBD, 0xB67B, 0x8CBE, + 0xB67C, 0x8CBF, 0xB67D, 0x8CC0, 0xB67E, 0x8CC1, 0xB67F, 0x8CC2, 0xB680, 0x8CC3, 0xB681, 0x8CC4, 0xB682, 0x8CC5, 0xB683, 0x8CC6, + 0xB684, 0x8CC7, 0xB685, 0x8CC8, 0xB686, 0x8CC9, 0xB687, 0x8CCA, 0xB688, 0x8CCB, 0xB689, 0x8CCC, 0xB68A, 0x8CCD, 0xB68B, 0x8CCE, + 0xB68C, 0x8CCF, 0xB68D, 0x8CD0, 0xB68E, 0x8CD1, 0xB68F, 0x8CD2, 0xB690, 0x8CD3, 0xB691, 0x8CD4, 0xB692, 0x8CD5, 0xB693, 0x8CD6, + 0xB694, 0x8CD7, 0xB695, 0x8CD8, 0xB696, 0x8CD9, 0xB697, 0x8CDA, 0xB698, 0x8CDB, 0xB699, 0x8CDC, 0xB69A, 0x8CDD, 0xB69B, 0x8CDE, + 0xB69C, 0xB6D1, 0xB69D, 0xB6D2, 0xB69E, 0x8CDF, 0xB69F, 0x8CE0, 0xB6A0, 0xB6D3, 0xB6A1, 0x8CE1, 0xB6A2, 0x8CE2, 0xB6A3, 0x8CE3, + 0xB6A4, 0xB6D4, 0xB6A5, 0x8CE4, 0xB6A6, 0x8CE5, 0xB6A7, 0x8CE6, 0xB6A8, 0x8CE7, 0xB6A9, 0x8CE8, 0xB6AA, 0x8CE9, 0xB6AB, 0xB6D5, + 0xB6AC, 0xB6D6, 0xB6AD, 0x8CEA, 0xB6AE, 0x8CEB, 0xB6AF, 0x8CEC, 0xB6B0, 0x8CED, 0xB6B1, 0xB6D7, 0xB6B2, 0x8CEE, 0xB6B3, 0x8CEF, + 0xB6B4, 0x8CF0, 0xB6B5, 0x8CF1, 0xB6B6, 0x8CF2, 0xB6B7, 0x8CF3, 0xB6B8, 0x8CF4, 0xB6B9, 0x8CF5, 0xB6BA, 0x8CF6, 0xB6BB, 0x8CF7, + 0xB6BC, 0x8CF8, 0xB6BD, 0x8CF9, 0xB6BE, 0x8CFA, 0xB6BF, 0x8CFB, 0xB6C0, 0x8CFC, 0xB6C1, 0x8CFD, 0xB6C2, 0x8CFE, 0xB6C3, 0x8D41, + 0xB6C4, 0x8D42, 0xB6C5, 0x8D43, 0xB6C6, 0x8D44, 0xB6C7, 0x8D45, 0xB6C8, 0x8D46, 0xB6C9, 0x8D47, 0xB6CA, 0x8D48, 0xB6CB, 0x8D49, + 0xB6CC, 0x8D4A, 0xB6CD, 0x8D4B, 0xB6CE, 0x8D4C, 0xB6CF, 0x8D4D, 0xB6D0, 0x8D4E, 0xB6D1, 0x8D4F, 0xB6D2, 0x8D50, 0xB6D3, 0x8D51, + 0xB6D4, 0xB6D8, 0xB6D5, 0x8D52, 0xB6D6, 0x8D53, 0xB6D7, 0x8D54, 0xB6D8, 0x8D55, 0xB6D9, 0x8D56, 0xB6DA, 0x8D57, 0xB6DB, 0x8D58, + 0xB6DC, 0x8D59, 0xB6DD, 0x8D5A, 0xB6DE, 0x8D61, 0xB6DF, 0x8D62, 0xB6E0, 0x8D63, 0xB6E1, 0x8D64, 0xB6E2, 0x8D65, 0xB6E3, 0x8D66, + 0xB6E4, 0x8D67, 0xB6E5, 0x8D68, 0xB6E6, 0x8D69, 0xB6E7, 0x8D6A, 0xB6E8, 0x8D6B, 0xB6E9, 0x8D6C, 0xB6EA, 0x8D6D, 0xB6EB, 0x8D6E, + 0xB6EC, 0x8D6F, 0xB6ED, 0x8D70, 0xB6EE, 0x8D71, 0xB6EF, 0x8D72, 0xB6F0, 0xB6D9, 0xB6F1, 0x8D73, 0xB6F2, 0x8D74, 0xB6F3, 0x8D75, + 0xB6F4, 0xB6DA, 0xB6F5, 0x8D76, 0xB6F6, 0x8D77, 0xB6F7, 0x8D78, 0xB6F8, 0xB6DB, 0xB6F9, 0x8D79, 0xB6FA, 0x8D7A, 0xB6FB, 0x8D81, + 0xB6FC, 0x8D82, 0xB6FD, 0x8D83, 0xB6FE, 0x8D84, 0xB6FF, 0x8D85, 0xB700, 0xB6DC, 0xB701, 0xB6DD, 0xB702, 0x8D86, 0xB703, 0x8D87, + 0xB704, 0x8D88, 0xB705, 0xB6DE, 0xB706, 0x8D89, 0xB707, 0x8D8A, 0xB708, 0x8D8B, 0xB709, 0x8D8C, 0xB70A, 0x8D8D, 0xB70B, 0x8D8E, + 0xB70C, 0x8D8F, 0xB70D, 0x8D90, 0xB70E, 0x8D91, 0xB70F, 0x8D92, 0xB710, 0x8D93, 0xB711, 0x8D94, 0xB712, 0x8D95, 0xB713, 0x8D96, + 0xB714, 0x8D97, 0xB715, 0x8D98, 0xB716, 0x8D99, 0xB717, 0x8D9A, 0xB718, 0x8D9B, 0xB719, 0x8D9C, 0xB71A, 0x8D9D, 0xB71B, 0x8D9E, + 0xB71C, 0x8D9F, 0xB71D, 0x8DA0, 0xB71E, 0x8DA1, 0xB71F, 0x8DA2, 0xB720, 0x8DA3, 0xB721, 0x8DA4, 0xB722, 0x8DA5, 0xB723, 0x8DA6, + 0xB724, 0x8DA7, 0xB725, 0x8DA8, 0xB726, 0x8DA9, 0xB727, 0x8DAA, 0xB728, 0xB6DF, 0xB729, 0xB6E0, 0xB72A, 0x8DAB, 0xB72B, 0x8DAC, + 0xB72C, 0xB6E1, 0xB72D, 0x8DAD, 0xB72E, 0x8DAE, 0xB72F, 0xB6E2, 0xB730, 0xB6E3, 0xB731, 0x8DAF, 0xB732, 0x8DB0, 0xB733, 0x8DB1, + 0xB734, 0x8DB2, 0xB735, 0x8DB3, 0xB736, 0x8DB4, 0xB737, 0x8DB5, 0xB738, 0xB6E4, 0xB739, 0xB6E5, 0xB73A, 0x8DB6, 0xB73B, 0xB6E6, + 0xB73C, 0x8DB7, 0xB73D, 0x8DB8, 0xB73E, 0x8DB9, 0xB73F, 0x8DBA, 0xB740, 0x8DBB, 0xB741, 0x8DBC, 0xB742, 0x8DBD, 0xB743, 0x8DBE, + 0xB744, 0xB6E7, 0xB745, 0x8DBF, 0xB746, 0x8DC0, 0xB747, 0x8DC1, 0xB748, 0xB6E8, 0xB749, 0x8DC2, 0xB74A, 0x8DC3, 0xB74B, 0x8DC4, + 0xB74C, 0xB6E9, 0xB74D, 0x8DC5, 0xB74E, 0x8DC6, 0xB74F, 0x8DC7, 0xB750, 0x8DC8, 0xB751, 0x8DC9, 0xB752, 0x8DCA, 0xB753, 0x8DCB, + 0xB754, 0xB6EA, 0xB755, 0xB6EB, 0xB756, 0x8DCC, 0xB757, 0x8DCD, 0xB758, 0x8DCE, 0xB759, 0x8DCF, 0xB75A, 0x8DD0, 0xB75B, 0x8DD1, + 0xB75C, 0x8DD2, 0xB75D, 0x8DD3, 0xB75E, 0x8DD4, 0xB75F, 0x8DD5, 0xB760, 0xB6EC, 0xB761, 0x8DD6, 0xB762, 0x8DD7, 0xB763, 0x8DD8, + 0xB764, 0xB6ED, 0xB765, 0x8DD9, 0xB766, 0x8DDA, 0xB767, 0x8DDB, 0xB768, 0xB6EE, 0xB769, 0x8DDC, 0xB76A, 0x8DDD, 0xB76B, 0x8DDE, + 0xB76C, 0x8DDF, 0xB76D, 0x8DE0, 0xB76E, 0x8DE1, 0xB76F, 0x8DE2, 0xB770, 0xB6EF, 0xB771, 0xB6F0, 0xB772, 0x8DE3, 0xB773, 0xB6F1, + 0xB774, 0x8DE4, 0xB775, 0xB6F2, 0xB776, 0x8DE5, 0xB777, 0x8DE6, 0xB778, 0x8DE7, 0xB779, 0x8DE8, 0xB77A, 0x8DE9, 0xB77B, 0x8DEA, + 0xB77C, 0xB6F3, 0xB77D, 0xB6F4, 0xB77E, 0x8DEB, 0xB77F, 0x8DEC, 0xB780, 0xB6F5, 0xB781, 0x8DED, 0xB782, 0x8DEE, 0xB783, 0x8DEF, + 0xB784, 0xB6F6, 0xB785, 0x8DF0, 0xB786, 0x8DF1, 0xB787, 0x8DF2, 0xB788, 0x8DF3, 0xB789, 0x8DF4, 0xB78A, 0x8DF5, 0xB78B, 0x8DF6, + 0xB78C, 0xB6F7, 0xB78D, 0xB6F8, 0xB78E, 0x8DF7, 0xB78F, 0xB6F9, 0xB790, 0xB6FA, 0xB791, 0xB6FB, 0xB792, 0xB6FC, 0xB793, 0x8DF8, + 0xB794, 0x8DF9, 0xB795, 0x8DFA, 0xB796, 0xB6FD, 0xB797, 0xB6FE, 0xB798, 0xB7A1, 0xB799, 0xB7A2, 0xB79A, 0x8DFB, 0xB79B, 0x8DFC, + 0xB79C, 0xB7A3, 0xB79D, 0x8DFD, 0xB79E, 0x8DFE, 0xB79F, 0x8E41, 0xB7A0, 0xB7A4, 0xB7A1, 0x8E42, 0xB7A2, 0x8E43, 0xB7A3, 0x8E44, + 0xB7A4, 0x8E45, 0xB7A5, 0x8E46, 0xB7A6, 0x8E47, 0xB7A7, 0x8E48, 0xB7A8, 0xB7A5, 0xB7A9, 0xB7A6, 0xB7AA, 0x8E49, 0xB7AB, 0xB7A7, + 0xB7AC, 0xB7A8, 0xB7AD, 0xB7A9, 0xB7AE, 0x8E4A, 0xB7AF, 0x8E4B, 0xB7B0, 0x8E4C, 0xB7B1, 0x8E4D, 0xB7B2, 0x8E4E, 0xB7B3, 0x8E4F, + 0xB7B4, 0xB7AA, 0xB7B5, 0xB7AB, 0xB7B6, 0x8E50, 0xB7B7, 0x8E51, 0xB7B8, 0xB7AC, 0xB7B9, 0x8E52, 0xB7BA, 0x8E53, 0xB7BB, 0x8E54, + 0xB7BC, 0x8E55, 0xB7BD, 0x8E56, 0xB7BE, 0x8E57, 0xB7BF, 0x8E58, 0xB7C0, 0x8E59, 0xB7C1, 0x8E5A, 0xB7C2, 0x8E61, 0xB7C3, 0x8E62, + 0xB7C4, 0x8E63, 0xB7C5, 0x8E64, 0xB7C6, 0x8E65, 0xB7C7, 0xB7AD, 0xB7C8, 0x8E66, 0xB7C9, 0xB7AE, 0xB7CA, 0x8E67, 0xB7CB, 0x8E68, + 0xB7CC, 0x8E69, 0xB7CD, 0x8E6A, 0xB7CE, 0x8E6B, 0xB7CF, 0x8E6C, 0xB7D0, 0x8E6D, 0xB7D1, 0x8E6E, 0xB7D2, 0x8E6F, 0xB7D3, 0x8E70, + 0xB7D4, 0x8E71, 0xB7D5, 0x8E72, 0xB7D6, 0x8E73, 0xB7D7, 0x8E74, 0xB7D8, 0x8E75, 0xB7D9, 0x8E76, 0xB7DA, 0x8E77, 0xB7DB, 0x8E78, + 0xB7DC, 0x8E79, 0xB7DD, 0x8E7A, 0xB7DE, 0x8E81, 0xB7DF, 0x8E82, 0xB7E0, 0x8E83, 0xB7E1, 0x8E84, 0xB7E2, 0x8E85, 0xB7E3, 0x8E86, + 0xB7E4, 0x8E87, 0xB7E5, 0x8E88, 0xB7E6, 0x8E89, 0xB7E7, 0x8E8A, 0xB7E8, 0x8E8B, 0xB7E9, 0x8E8C, 0xB7EA, 0x8E8D, 0xB7EB, 0x8E8E, + 0xB7EC, 0xB7AF, 0xB7ED, 0xB7B0, 0xB7EE, 0x8E8F, 0xB7EF, 0x8E90, 0xB7F0, 0xB7B1, 0xB7F1, 0x8E91, 0xB7F2, 0x8E92, 0xB7F3, 0x8E93, + 0xB7F4, 0xB7B2, 0xB7F5, 0x8E94, 0xB7F6, 0x8E95, 0xB7F7, 0x8E96, 0xB7F8, 0x8E97, 0xB7F9, 0x8E98, 0xB7FA, 0x8E99, 0xB7FB, 0x8E9A, + 0xB7FC, 0xB7B3, 0xB7FD, 0xB7B4, 0xB7FE, 0x8E9B, 0xB7FF, 0xB7B5, 0xB800, 0xB7B6, 0xB801, 0xB7B7, 0xB802, 0x8E9C, 0xB803, 0x8E9D, + 0xB804, 0x8E9E, 0xB805, 0x8E9F, 0xB806, 0x8EA0, 0xB807, 0xB7B8, 0xB808, 0xB7B9, 0xB809, 0xB7BA, 0xB80A, 0x8EA1, 0xB80B, 0x8EA2, + 0xB80C, 0xB7BB, 0xB80D, 0x8EA3, 0xB80E, 0x8EA4, 0xB80F, 0x8EA5, 0xB810, 0xB7BC, 0xB811, 0x8EA6, 0xB812, 0x8EA7, 0xB813, 0x8EA8, + 0xB814, 0x8EA9, 0xB815, 0x8EAA, 0xB816, 0x8EAB, 0xB817, 0x8EAC, 0xB818, 0xB7BD, 0xB819, 0xB7BE, 0xB81A, 0x8EAD, 0xB81B, 0xB7BF, + 0xB81C, 0x8EAE, 0xB81D, 0xB7C0, 0xB81E, 0x8EAF, 0xB81F, 0x8EB0, 0xB820, 0x8EB1, 0xB821, 0x8EB2, 0xB822, 0x8EB3, 0xB823, 0x8EB4, + 0xB824, 0xB7C1, 0xB825, 0xB7C2, 0xB826, 0x8EB5, 0xB827, 0x8EB6, 0xB828, 0xB7C3, 0xB829, 0x8EB7, 0xB82A, 0x8EB8, 0xB82B, 0x8EB9, + 0xB82C, 0xB7C4, 0xB82D, 0x8EBA, 0xB82E, 0x8EBB, 0xB82F, 0x8EBC, 0xB830, 0x8EBD, 0xB831, 0x8EBE, 0xB832, 0x8EBF, 0xB833, 0x8EC0, + 0xB834, 0xB7C5, 0xB835, 0xB7C6, 0xB836, 0x8EC1, 0xB837, 0xB7C7, 0xB838, 0xB7C8, 0xB839, 0xB7C9, 0xB83A, 0x8EC2, 0xB83B, 0x8EC3, + 0xB83C, 0x8EC4, 0xB83D, 0x8EC5, 0xB83E, 0x8EC6, 0xB83F, 0x8EC7, 0xB840, 0xB7CA, 0xB841, 0x8EC8, 0xB842, 0x8EC9, 0xB843, 0x8ECA, + 0xB844, 0xB7CB, 0xB845, 0x8ECB, 0xB846, 0x8ECC, 0xB847, 0x8ECD, 0xB848, 0x8ECE, 0xB849, 0x8ECF, 0xB84A, 0x8ED0, 0xB84B, 0x8ED1, + 0xB84C, 0x8ED2, 0xB84D, 0x8ED3, 0xB84E, 0x8ED4, 0xB84F, 0x8ED5, 0xB850, 0x8ED6, 0xB851, 0xB7CC, 0xB852, 0x8ED7, 0xB853, 0xB7CD, + 0xB854, 0x8ED8, 0xB855, 0x8ED9, 0xB856, 0x8EDA, 0xB857, 0x8EDB, 0xB858, 0x8EDC, 0xB859, 0x8EDD, 0xB85A, 0x8EDE, 0xB85B, 0x8EDF, + 0xB85C, 0xB7CE, 0xB85D, 0xB7CF, 0xB85E, 0x8EE0, 0xB85F, 0x8EE1, 0xB860, 0xB7D0, 0xB861, 0x8EE2, 0xB862, 0x8EE3, 0xB863, 0x8EE4, + 0xB864, 0xB7D1, 0xB865, 0x8EE5, 0xB866, 0x8EE6, 0xB867, 0x8EE7, 0xB868, 0x8EE8, 0xB869, 0x8EE9, 0xB86A, 0x8EEA, 0xB86B, 0x8EEB, + 0xB86C, 0xB7D2, 0xB86D, 0xB7D3, 0xB86E, 0x8EEC, 0xB86F, 0xB7D4, 0xB870, 0x8EED, 0xB871, 0xB7D5, 0xB872, 0x8EEE, 0xB873, 0x8EEF, + 0xB874, 0x8EF0, 0xB875, 0x8EF1, 0xB876, 0x8EF2, 0xB877, 0x8EF3, 0xB878, 0xB7D6, 0xB879, 0x8EF4, 0xB87A, 0x8EF5, 0xB87B, 0x8EF6, + 0xB87C, 0xB7D7, 0xB87D, 0x8EF7, 0xB87E, 0x8EF8, 0xB87F, 0x8EF9, 0xB880, 0x8EFA, 0xB881, 0x8EFB, 0xB882, 0x8EFC, 0xB883, 0x8EFD, + 0xB884, 0x8EFE, 0xB885, 0x8F41, 0xB886, 0x8F42, 0xB887, 0x8F43, 0xB888, 0x8F44, 0xB889, 0x8F45, 0xB88A, 0x8F46, 0xB88B, 0x8F47, + 0xB88C, 0x8F48, 0xB88D, 0xB7D8, 0xB88E, 0x8F49, 0xB88F, 0x8F4A, 0xB890, 0x8F4B, 0xB891, 0x8F4C, 0xB892, 0x8F4D, 0xB893, 0x8F4E, + 0xB894, 0x8F4F, 0xB895, 0x8F50, 0xB896, 0x8F51, 0xB897, 0x8F52, 0xB898, 0x8F53, 0xB899, 0x8F54, 0xB89A, 0x8F55, 0xB89B, 0x8F56, + 0xB89C, 0x8F57, 0xB89D, 0x8F58, 0xB89E, 0x8F59, 0xB89F, 0x8F5A, 0xB8A0, 0x8F61, 0xB8A1, 0x8F62, 0xB8A2, 0x8F63, 0xB8A3, 0x8F64, + 0xB8A4, 0x8F65, 0xB8A5, 0x8F66, 0xB8A6, 0x8F67, 0xB8A7, 0x8F68, 0xB8A8, 0xB7D9, 0xB8A9, 0x8F69, 0xB8AA, 0x8F6A, 0xB8AB, 0x8F6B, + 0xB8AC, 0x8F6C, 0xB8AD, 0x8F6D, 0xB8AE, 0x8F6E, 0xB8AF, 0x8F6F, 0xB8B0, 0xB7DA, 0xB8B1, 0x8F70, 0xB8B2, 0x8F71, 0xB8B3, 0x8F72, + 0xB8B4, 0xB7DB, 0xB8B5, 0x8F73, 0xB8B6, 0x8F74, 0xB8B7, 0x8F75, 0xB8B8, 0xB7DC, 0xB8B9, 0x8F76, 0xB8BA, 0x8F77, 0xB8BB, 0x8F78, + 0xB8BC, 0x8F79, 0xB8BD, 0x8F7A, 0xB8BE, 0x8F81, 0xB8BF, 0x8F82, 0xB8C0, 0xB7DD, 0xB8C1, 0xB7DE, 0xB8C2, 0x8F83, 0xB8C3, 0xB7DF, + 0xB8C4, 0x8F84, 0xB8C5, 0xB7E0, 0xB8C6, 0x8F85, 0xB8C7, 0x8F86, 0xB8C8, 0x8F87, 0xB8C9, 0x8F88, 0xB8CA, 0x8F89, 0xB8CB, 0x8F8A, + 0xB8CC, 0xB7E1, 0xB8CD, 0x8F8B, 0xB8CE, 0x8F8C, 0xB8CF, 0x8F8D, 0xB8D0, 0xB7E2, 0xB8D1, 0x8F8E, 0xB8D2, 0x8F8F, 0xB8D3, 0x8F90, + 0xB8D4, 0xB7E3, 0xB8D5, 0x8F91, 0xB8D6, 0x8F92, 0xB8D7, 0x8F93, 0xB8D8, 0x8F94, 0xB8D9, 0x8F95, 0xB8DA, 0x8F96, 0xB8DB, 0x8F97, + 0xB8DC, 0x8F98, 0xB8DD, 0xB7E4, 0xB8DE, 0x8F99, 0xB8DF, 0xB7E5, 0xB8E0, 0x8F9A, 0xB8E1, 0xB7E6, 0xB8E2, 0x8F9B, 0xB8E3, 0x8F9C, + 0xB8E4, 0x8F9D, 0xB8E5, 0x8F9E, 0xB8E6, 0x8F9F, 0xB8E7, 0x8FA0, 0xB8E8, 0xB7E7, 0xB8E9, 0xB7E8, 0xB8EA, 0x8FA1, 0xB8EB, 0x8FA2, + 0xB8EC, 0xB7E9, 0xB8ED, 0x8FA3, 0xB8EE, 0x8FA4, 0xB8EF, 0x8FA5, 0xB8F0, 0xB7EA, 0xB8F1, 0x8FA6, 0xB8F2, 0x8FA7, 0xB8F3, 0x8FA8, + 0xB8F4, 0x8FA9, 0xB8F5, 0x8FAA, 0xB8F6, 0x8FAB, 0xB8F7, 0x8FAC, 0xB8F8, 0xB7EB, 0xB8F9, 0xB7EC, 0xB8FA, 0x8FAD, 0xB8FB, 0xB7ED, + 0xB8FC, 0x8FAE, 0xB8FD, 0xB7EE, 0xB8FE, 0x8FAF, 0xB8FF, 0x8FB0, 0xB900, 0x8FB1, 0xB901, 0x8FB2, 0xB902, 0x8FB3, 0xB903, 0x8FB4, + 0xB904, 0xB7EF, 0xB905, 0x8FB5, 0xB906, 0x8FB6, 0xB907, 0x8FB7, 0xB908, 0x8FB8, 0xB909, 0x8FB9, 0xB90A, 0x8FBA, 0xB90B, 0x8FBB, + 0xB90C, 0x8FBC, 0xB90D, 0x8FBD, 0xB90E, 0x8FBE, 0xB90F, 0x8FBF, 0xB910, 0x8FC0, 0xB911, 0x8FC1, 0xB912, 0x8FC2, 0xB913, 0x8FC3, + 0xB914, 0x8FC4, 0xB915, 0x8FC5, 0xB916, 0x8FC6, 0xB917, 0x8FC7, 0xB918, 0xB7F0, 0xB919, 0x8FC8, 0xB91A, 0x8FC9, 0xB91B, 0x8FCA, + 0xB91C, 0x8FCB, 0xB91D, 0x8FCC, 0xB91E, 0x8FCD, 0xB91F, 0x8FCE, 0xB920, 0xB7F1, 0xB921, 0x8FCF, 0xB922, 0x8FD0, 0xB923, 0x8FD1, + 0xB924, 0x8FD2, 0xB925, 0x8FD3, 0xB926, 0x8FD4, 0xB927, 0x8FD5, 0xB928, 0x8FD6, 0xB929, 0x8FD7, 0xB92A, 0x8FD8, 0xB92B, 0x8FD9, + 0xB92C, 0x8FDA, 0xB92D, 0x8FDB, 0xB92E, 0x8FDC, 0xB92F, 0x8FDD, 0xB930, 0x8FDE, 0xB931, 0x8FDF, 0xB932, 0x8FE0, 0xB933, 0x8FE1, + 0xB934, 0x8FE2, 0xB935, 0x8FE3, 0xB936, 0x8FE4, 0xB937, 0x8FE5, 0xB938, 0x8FE6, 0xB939, 0x8FE7, 0xB93A, 0x8FE8, 0xB93B, 0x8FE9, + 0xB93C, 0xB7F2, 0xB93D, 0xB7F3, 0xB93E, 0x8FEA, 0xB93F, 0x8FEB, 0xB940, 0xB7F4, 0xB941, 0x8FEC, 0xB942, 0x8FED, 0xB943, 0x8FEE, + 0xB944, 0xB7F5, 0xB945, 0x8FEF, 0xB946, 0x8FF0, 0xB947, 0x8FF1, 0xB948, 0x8FF2, 0xB949, 0x8FF3, 0xB94A, 0x8FF4, 0xB94B, 0x8FF5, + 0xB94C, 0xB7F6, 0xB94D, 0x8FF6, 0xB94E, 0x8FF7, 0xB94F, 0xB7F7, 0xB950, 0x8FF8, 0xB951, 0xB7F8, 0xB952, 0x8FF9, 0xB953, 0x8FFA, + 0xB954, 0x8FFB, 0xB955, 0x8FFC, 0xB956, 0x8FFD, 0xB957, 0x8FFE, 0xB958, 0xB7F9, 0xB959, 0xB7FA, 0xB95A, 0x9041, 0xB95B, 0x9042, + 0xB95C, 0xB7FB, 0xB95D, 0x9043, 0xB95E, 0x9044, 0xB95F, 0x9045, 0xB960, 0xB7FC, 0xB961, 0x9046, 0xB962, 0x9047, 0xB963, 0x9048, + 0xB964, 0x9049, 0xB965, 0x904A, 0xB966, 0x904B, 0xB967, 0x904C, 0xB968, 0xB7FD, 0xB969, 0xB7FE, 0xB96A, 0x904D, 0xB96B, 0xB8A1, + 0xB96C, 0x904E, 0xB96D, 0xB8A2, 0xB96E, 0x904F, 0xB96F, 0x9050, 0xB970, 0x9051, 0xB971, 0x9052, 0xB972, 0x9053, 0xB973, 0x9054, + 0xB974, 0xB8A3, 0xB975, 0xB8A4, 0xB976, 0x9055, 0xB977, 0x9056, 0xB978, 0xB8A5, 0xB979, 0x9057, 0xB97A, 0x9058, 0xB97B, 0x9059, + 0xB97C, 0xB8A6, 0xB97D, 0x905A, 0xB97E, 0x9061, 0xB97F, 0x9062, 0xB980, 0x9063, 0xB981, 0x9064, 0xB982, 0x9065, 0xB983, 0x9066, + 0xB984, 0xB8A7, 0xB985, 0xB8A8, 0xB986, 0x9067, 0xB987, 0xB8A9, 0xB988, 0x9068, 0xB989, 0xB8AA, 0xB98A, 0xB8AB, 0xB98B, 0x9069, + 0xB98C, 0x906A, 0xB98D, 0xB8AC, 0xB98E, 0xB8AD, 0xB98F, 0x906B, 0xB990, 0x906C, 0xB991, 0x906D, 0xB992, 0x906E, 0xB993, 0x906F, + 0xB994, 0x9070, 0xB995, 0x9071, 0xB996, 0x9072, 0xB997, 0x9073, 0xB998, 0x9074, 0xB999, 0x9075, 0xB99A, 0x9076, 0xB99B, 0x9077, + 0xB99C, 0x9078, 0xB99D, 0x9079, 0xB99E, 0x907A, 0xB99F, 0x9081, 0xB9A0, 0x9082, 0xB9A1, 0x9083, 0xB9A2, 0x9084, 0xB9A3, 0x9085, + 0xB9A4, 0x9086, 0xB9A5, 0x9087, 0xB9A6, 0x9088, 0xB9A7, 0x9089, 0xB9A8, 0x908A, 0xB9A9, 0x908B, 0xB9AA, 0x908C, 0xB9AB, 0x908D, + 0xB9AC, 0xB8AE, 0xB9AD, 0xB8AF, 0xB9AE, 0x908E, 0xB9AF, 0x908F, 0xB9B0, 0xB8B0, 0xB9B1, 0x9090, 0xB9B2, 0x9091, 0xB9B3, 0x9092, + 0xB9B4, 0xB8B1, 0xB9B5, 0x9093, 0xB9B6, 0x9094, 0xB9B7, 0x9095, 0xB9B8, 0x9096, 0xB9B9, 0x9097, 0xB9BA, 0x9098, 0xB9BB, 0x9099, + 0xB9BC, 0xB8B2, 0xB9BD, 0xB8B3, 0xB9BE, 0x909A, 0xB9BF, 0xB8B4, 0xB9C0, 0x909B, 0xB9C1, 0xB8B5, 0xB9C2, 0x909C, 0xB9C3, 0x909D, + 0xB9C4, 0x909E, 0xB9C5, 0x909F, 0xB9C6, 0x90A0, 0xB9C7, 0x90A1, 0xB9C8, 0xB8B6, 0xB9C9, 0xB8B7, 0xB9CA, 0x90A2, 0xB9CB, 0x90A3, + 0xB9CC, 0xB8B8, 0xB9CD, 0x90A4, 0xB9CE, 0xB8B9, 0xB9CF, 0xB8BA, 0xB9D0, 0xB8BB, 0xB9D1, 0xB8BC, 0xB9D2, 0xB8BD, 0xB9D3, 0x90A5, + 0xB9D4, 0x90A6, 0xB9D5, 0x90A7, 0xB9D6, 0x90A8, 0xB9D7, 0x90A9, 0xB9D8, 0xB8BE, 0xB9D9, 0xB8BF, 0xB9DA, 0x90AA, 0xB9DB, 0xB8C0, + 0xB9DC, 0x90AB, 0xB9DD, 0xB8C1, 0xB9DE, 0xB8C2, 0xB9DF, 0x90AC, 0xB9E0, 0x90AD, 0xB9E1, 0xB8C3, 0xB9E2, 0x90AE, 0xB9E3, 0xB8C4, + 0xB9E4, 0xB8C5, 0xB9E5, 0xB8C6, 0xB9E6, 0x90AF, 0xB9E7, 0x90B0, 0xB9E8, 0xB8C7, 0xB9E9, 0x90B1, 0xB9EA, 0x90B2, 0xB9EB, 0x90B3, + 0xB9EC, 0xB8C8, 0xB9ED, 0x90B4, 0xB9EE, 0x90B5, 0xB9EF, 0x90B6, 0xB9F0, 0x90B7, 0xB9F1, 0x90B8, 0xB9F2, 0x90B9, 0xB9F3, 0x90BA, + 0xB9F4, 0xB8C9, 0xB9F5, 0xB8CA, 0xB9F6, 0x90BB, 0xB9F7, 0xB8CB, 0xB9F8, 0xB8CC, 0xB9F9, 0xB8CD, 0xB9FA, 0xB8CE, 0xB9FB, 0x90BC, + 0xB9FC, 0x90BD, 0xB9FD, 0x90BE, 0xB9FE, 0x90BF, 0xB9FF, 0x90C0, 0xBA00, 0xB8CF, 0xBA01, 0xB8D0, 0xBA02, 0x90C1, 0xBA03, 0x90C2, + 0xBA04, 0x90C3, 0xBA05, 0x90C4, 0xBA06, 0x90C5, 0xBA07, 0x90C6, 0xBA08, 0xB8D1, 0xBA09, 0x90C7, 0xBA0A, 0x90C8, 0xBA0B, 0x90C9, + 0xBA0C, 0x90CA, 0xBA0D, 0x90CB, 0xBA0E, 0x90CC, 0xBA0F, 0x90CD, 0xBA10, 0x90CE, 0xBA11, 0x90CF, 0xBA12, 0x90D0, 0xBA13, 0x90D1, + 0xBA14, 0x90D2, 0xBA15, 0xB8D2, 0xBA16, 0x90D3, 0xBA17, 0x90D4, 0xBA18, 0x90D5, 0xBA19, 0x90D6, 0xBA1A, 0x90D7, 0xBA1B, 0x90D8, + 0xBA1C, 0x90D9, 0xBA1D, 0x90DA, 0xBA1E, 0x90DB, 0xBA1F, 0x90DC, 0xBA20, 0x90DD, 0xBA21, 0x90DE, 0xBA22, 0x90DF, 0xBA23, 0x90E0, + 0xBA24, 0x90E1, 0xBA25, 0x90E2, 0xBA26, 0x90E3, 0xBA27, 0x90E4, 0xBA28, 0x90E5, 0xBA29, 0x90E6, 0xBA2A, 0x90E7, 0xBA2B, 0x90E8, + 0xBA2C, 0x90E9, 0xBA2D, 0x90EA, 0xBA2E, 0x90EB, 0xBA2F, 0x90EC, 0xBA30, 0x90ED, 0xBA31, 0x90EE, 0xBA32, 0x90EF, 0xBA33, 0x90F0, + 0xBA34, 0x90F1, 0xBA35, 0x90F2, 0xBA36, 0x90F3, 0xBA37, 0x90F4, 0xBA38, 0xB8D3, 0xBA39, 0xB8D4, 0xBA3A, 0x90F5, 0xBA3B, 0x90F6, + 0xBA3C, 0xB8D5, 0xBA3D, 0x90F7, 0xBA3E, 0x90F8, 0xBA3F, 0x90F9, 0xBA40, 0xB8D6, 0xBA41, 0x90FA, 0xBA42, 0xB8D7, 0xBA43, 0x90FB, + 0xBA44, 0x90FC, 0xBA45, 0x90FD, 0xBA46, 0x90FE, 0xBA47, 0x9141, 0xBA48, 0xB8D8, 0xBA49, 0xB8D9, 0xBA4A, 0x9142, 0xBA4B, 0xB8DA, + 0xBA4C, 0x9143, 0xBA4D, 0xB8DB, 0xBA4E, 0xB8DC, 0xBA4F, 0x9144, 0xBA50, 0x9145, 0xBA51, 0x9146, 0xBA52, 0x9147, 0xBA53, 0xB8DD, + 0xBA54, 0xB8DE, 0xBA55, 0xB8DF, 0xBA56, 0x9148, 0xBA57, 0x9149, 0xBA58, 0xB8E0, 0xBA59, 0x914A, 0xBA5A, 0x914B, 0xBA5B, 0x914C, + 0xBA5C, 0xB8E1, 0xBA5D, 0x914D, 0xBA5E, 0x914E, 0xBA5F, 0x914F, 0xBA60, 0x9150, 0xBA61, 0x9151, 0xBA62, 0x9152, 0xBA63, 0x9153, + 0xBA64, 0xB8E2, 0xBA65, 0xB8E3, 0xBA66, 0x9154, 0xBA67, 0xB8E4, 0xBA68, 0xB8E5, 0xBA69, 0xB8E6, 0xBA6A, 0x9155, 0xBA6B, 0x9156, + 0xBA6C, 0x9157, 0xBA6D, 0x9158, 0xBA6E, 0x9159, 0xBA6F, 0x915A, 0xBA70, 0xB8E7, 0xBA71, 0xB8E8, 0xBA72, 0x9161, 0xBA73, 0x9162, + 0xBA74, 0xB8E9, 0xBA75, 0x9163, 0xBA76, 0x9164, 0xBA77, 0x9165, 0xBA78, 0xB8EA, 0xBA79, 0x9166, 0xBA7A, 0x9167, 0xBA7B, 0x9168, + 0xBA7C, 0x9169, 0xBA7D, 0x916A, 0xBA7E, 0x916B, 0xBA7F, 0x916C, 0xBA80, 0x916D, 0xBA81, 0x916E, 0xBA82, 0x916F, 0xBA83, 0xB8EB, + 0xBA84, 0xB8EC, 0xBA85, 0xB8ED, 0xBA86, 0x9170, 0xBA87, 0xB8EE, 0xBA88, 0x9171, 0xBA89, 0x9172, 0xBA8A, 0x9173, 0xBA8B, 0x9174, + 0xBA8C, 0xB8EF, 0xBA8D, 0x9175, 0xBA8E, 0x9176, 0xBA8F, 0x9177, 0xBA90, 0x9178, 0xBA91, 0x9179, 0xBA92, 0x917A, 0xBA93, 0x9181, + 0xBA94, 0x9182, 0xBA95, 0x9183, 0xBA96, 0x9184, 0xBA97, 0x9185, 0xBA98, 0x9186, 0xBA99, 0x9187, 0xBA9A, 0x9188, 0xBA9B, 0x9189, + 0xBA9C, 0x918A, 0xBA9D, 0x918B, 0xBA9E, 0x918C, 0xBA9F, 0x918D, 0xBAA0, 0x918E, 0xBAA1, 0x918F, 0xBAA2, 0x9190, 0xBAA3, 0x9191, + 0xBAA4, 0x9192, 0xBAA5, 0x9193, 0xBAA6, 0x9194, 0xBAA7, 0x9195, 0xBAA8, 0xB8F0, 0xBAA9, 0xB8F1, 0xBAAA, 0x9196, 0xBAAB, 0xB8F2, + 0xBAAC, 0xB8F3, 0xBAAD, 0x9197, 0xBAAE, 0x9198, 0xBAAF, 0x9199, 0xBAB0, 0xB8F4, 0xBAB1, 0x919A, 0xBAB2, 0xB8F5, 0xBAB3, 0x919B, + 0xBAB4, 0x919C, 0xBAB5, 0x919D, 0xBAB6, 0x919E, 0xBAB7, 0x919F, 0xBAB8, 0xB8F6, 0xBAB9, 0xB8F7, 0xBABA, 0x91A0, 0xBABB, 0xB8F8, + 0xBABC, 0x91A1, 0xBABD, 0xB8F9, 0xBABE, 0x91A2, 0xBABF, 0x91A3, 0xBAC0, 0x91A4, 0xBAC1, 0x91A5, 0xBAC2, 0x91A6, 0xBAC3, 0x91A7, + 0xBAC4, 0xB8FA, 0xBAC5, 0x91A8, 0xBAC6, 0x91A9, 0xBAC7, 0x91AA, 0xBAC8, 0xB8FB, 0xBAC9, 0x91AB, 0xBACA, 0x91AC, 0xBACB, 0x91AD, + 0xBACC, 0x91AE, 0xBACD, 0x91AF, 0xBACE, 0x91B0, 0xBACF, 0x91B1, 0xBAD0, 0x91B2, 0xBAD1, 0x91B3, 0xBAD2, 0x91B4, 0xBAD3, 0x91B5, + 0xBAD4, 0x91B6, 0xBAD5, 0x91B7, 0xBAD6, 0x91B8, 0xBAD7, 0x91B9, 0xBAD8, 0xB8FC, 0xBAD9, 0xB8FD, 0xBADA, 0x91BA, 0xBADB, 0x91BB, + 0xBADC, 0x91BC, 0xBADD, 0x91BD, 0xBADE, 0x91BE, 0xBADF, 0x91BF, 0xBAE0, 0x91C0, 0xBAE1, 0x91C1, 0xBAE2, 0x91C2, 0xBAE3, 0x91C3, + 0xBAE4, 0x91C4, 0xBAE5, 0x91C5, 0xBAE6, 0x91C6, 0xBAE7, 0x91C7, 0xBAE8, 0x91C8, 0xBAE9, 0x91C9, 0xBAEA, 0x91CA, 0xBAEB, 0x91CB, + 0xBAEC, 0x91CC, 0xBAED, 0x91CD, 0xBAEE, 0x91CE, 0xBAEF, 0x91CF, 0xBAF0, 0x91D0, 0xBAF1, 0x91D1, 0xBAF2, 0x91D2, 0xBAF3, 0x91D3, + 0xBAF4, 0x91D4, 0xBAF5, 0x91D5, 0xBAF6, 0x91D6, 0xBAF7, 0x91D7, 0xBAF8, 0x91D8, 0xBAF9, 0x91D9, 0xBAFA, 0x91DA, 0xBAFB, 0x91DB, + 0xBAFC, 0xB8FE, 0xBAFD, 0x91DC, 0xBAFE, 0x91DD, 0xBAFF, 0x91DE, 0xBB00, 0xB9A1, 0xBB01, 0x91DF, 0xBB02, 0x91E0, 0xBB03, 0x91E1, + 0xBB04, 0xB9A2, 0xBB05, 0x91E2, 0xBB06, 0x91E3, 0xBB07, 0x91E4, 0xBB08, 0x91E5, 0xBB09, 0x91E6, 0xBB0A, 0x91E7, 0xBB0B, 0x91E8, + 0xBB0C, 0x91E9, 0xBB0D, 0xB9A3, 0xBB0E, 0x91EA, 0xBB0F, 0xB9A4, 0xBB10, 0x91EB, 0xBB11, 0xB9A5, 0xBB12, 0x91EC, 0xBB13, 0x91ED, + 0xBB14, 0x91EE, 0xBB15, 0x91EF, 0xBB16, 0x91F0, 0xBB17, 0x91F1, 0xBB18, 0xB9A6, 0xBB19, 0x91F2, 0xBB1A, 0x91F3, 0xBB1B, 0x91F4, + 0xBB1C, 0xB9A7, 0xBB1D, 0x91F5, 0xBB1E, 0x91F6, 0xBB1F, 0x91F7, 0xBB20, 0xB9A8, 0xBB21, 0x91F8, 0xBB22, 0x91F9, 0xBB23, 0x91FA, + 0xBB24, 0x91FB, 0xBB25, 0x91FC, 0xBB26, 0x91FD, 0xBB27, 0x91FE, 0xBB28, 0x9241, 0xBB29, 0xB9A9, 0xBB2A, 0x9242, 0xBB2B, 0xB9AA, + 0xBB2C, 0x9243, 0xBB2D, 0x9244, 0xBB2E, 0x9245, 0xBB2F, 0x9246, 0xBB30, 0x9247, 0xBB31, 0x9248, 0xBB32, 0x9249, 0xBB33, 0x924A, + 0xBB34, 0xB9AB, 0xBB35, 0xB9AC, 0xBB36, 0xB9AD, 0xBB37, 0x924B, 0xBB38, 0xB9AE, 0xBB39, 0x924C, 0xBB3A, 0x924D, 0xBB3B, 0xB9AF, + 0xBB3C, 0xB9B0, 0xBB3D, 0xB9B1, 0xBB3E, 0xB9B2, 0xBB3F, 0x924E, 0xBB40, 0x924F, 0xBB41, 0x9250, 0xBB42, 0x9251, 0xBB43, 0x9252, + 0xBB44, 0xB9B3, 0xBB45, 0xB9B4, 0xBB46, 0x9253, 0xBB47, 0xB9B5, 0xBB48, 0x9254, 0xBB49, 0xB9B6, 0xBB4A, 0x9255, 0xBB4B, 0x9256, + 0xBB4C, 0x9257, 0xBB4D, 0xB9B7, 0xBB4E, 0x9258, 0xBB4F, 0xB9B8, 0xBB50, 0xB9B9, 0xBB51, 0x9259, 0xBB52, 0x925A, 0xBB53, 0x9261, + 0xBB54, 0xB9BA, 0xBB55, 0x9262, 0xBB56, 0x9263, 0xBB57, 0x9264, 0xBB58, 0xB9BB, 0xBB59, 0x9265, 0xBB5A, 0x9266, 0xBB5B, 0x9267, + 0xBB5C, 0x9268, 0xBB5D, 0x9269, 0xBB5E, 0x926A, 0xBB5F, 0x926B, 0xBB60, 0x926C, 0xBB61, 0xB9BC, 0xBB62, 0x926D, 0xBB63, 0xB9BD, + 0xBB64, 0x926E, 0xBB65, 0x926F, 0xBB66, 0x9270, 0xBB67, 0x9271, 0xBB68, 0x9272, 0xBB69, 0x9273, 0xBB6A, 0x9274, 0xBB6B, 0x9275, + 0xBB6C, 0xB9BE, 0xBB6D, 0x9276, 0xBB6E, 0x9277, 0xBB6F, 0x9278, 0xBB70, 0x9279, 0xBB71, 0x927A, 0xBB72, 0x9281, 0xBB73, 0x9282, + 0xBB74, 0x9283, 0xBB75, 0x9284, 0xBB76, 0x9285, 0xBB77, 0x9286, 0xBB78, 0x9287, 0xBB79, 0x9288, 0xBB7A, 0x9289, 0xBB7B, 0x928A, + 0xBB7C, 0x928B, 0xBB7D, 0x928C, 0xBB7E, 0x928D, 0xBB7F, 0x928E, 0xBB80, 0x928F, 0xBB81, 0x9290, 0xBB82, 0x9291, 0xBB83, 0x9292, + 0xBB84, 0x9293, 0xBB85, 0x9294, 0xBB86, 0x9295, 0xBB87, 0x9296, 0xBB88, 0xB9BF, 0xBB89, 0x9297, 0xBB8A, 0x9298, 0xBB8B, 0x9299, + 0xBB8C, 0xB9C0, 0xBB8D, 0x929A, 0xBB8E, 0x929B, 0xBB8F, 0x929C, 0xBB90, 0xB9C1, 0xBB91, 0x929D, 0xBB92, 0x929E, 0xBB93, 0x929F, + 0xBB94, 0x92A0, 0xBB95, 0x92A1, 0xBB96, 0x92A2, 0xBB97, 0x92A3, 0xBB98, 0x92A4, 0xBB99, 0x92A5, 0xBB9A, 0x92A6, 0xBB9B, 0x92A7, + 0xBB9C, 0x92A8, 0xBB9D, 0x92A9, 0xBB9E, 0x92AA, 0xBB9F, 0x92AB, 0xBBA0, 0x92AC, 0xBBA1, 0x92AD, 0xBBA2, 0x92AE, 0xBBA3, 0x92AF, + 0xBBA4, 0xB9C2, 0xBBA5, 0x92B0, 0xBBA6, 0x92B1, 0xBBA7, 0x92B2, 0xBBA8, 0xB9C3, 0xBBA9, 0x92B3, 0xBBAA, 0x92B4, 0xBBAB, 0x92B5, + 0xBBAC, 0xB9C4, 0xBBAD, 0x92B6, 0xBBAE, 0x92B7, 0xBBAF, 0x92B8, 0xBBB0, 0x92B9, 0xBBB1, 0x92BA, 0xBBB2, 0x92BB, 0xBBB3, 0x92BC, + 0xBBB4, 0xB9C5, 0xBBB5, 0x92BD, 0xBBB6, 0x92BE, 0xBBB7, 0xB9C6, 0xBBB8, 0x92BF, 0xBBB9, 0x92C0, 0xBBBA, 0x92C1, 0xBBBB, 0x92C2, + 0xBBBC, 0x92C3, 0xBBBD, 0x92C4, 0xBBBE, 0x92C5, 0xBBBF, 0x92C6, 0xBBC0, 0xB9C7, 0xBBC1, 0x92C7, 0xBBC2, 0x92C8, 0xBBC3, 0x92C9, + 0xBBC4, 0xB9C8, 0xBBC5, 0x92CA, 0xBBC6, 0x92CB, 0xBBC7, 0x92CC, 0xBBC8, 0xB9C9, 0xBBC9, 0x92CD, 0xBBCA, 0x92CE, 0xBBCB, 0x92CF, + 0xBBCC, 0x92D0, 0xBBCD, 0x92D1, 0xBBCE, 0x92D2, 0xBBCF, 0x92D3, 0xBBD0, 0xB9CA, 0xBBD1, 0x92D4, 0xBBD2, 0x92D5, 0xBBD3, 0xB9CB, + 0xBBD4, 0x92D6, 0xBBD5, 0x92D7, 0xBBD6, 0x92D8, 0xBBD7, 0x92D9, 0xBBD8, 0x92DA, 0xBBD9, 0x92DB, 0xBBDA, 0x92DC, 0xBBDB, 0x92DD, + 0xBBDC, 0x92DE, 0xBBDD, 0x92DF, 0xBBDE, 0x92E0, 0xBBDF, 0x92E1, 0xBBE0, 0x92E2, 0xBBE1, 0x92E3, 0xBBE2, 0x92E4, 0xBBE3, 0x92E5, + 0xBBE4, 0x92E6, 0xBBE5, 0x92E7, 0xBBE6, 0x92E8, 0xBBE7, 0x92E9, 0xBBE8, 0x92EA, 0xBBE9, 0x92EB, 0xBBEA, 0x92EC, 0xBBEB, 0x92ED, + 0xBBEC, 0x92EE, 0xBBED, 0x92EF, 0xBBEE, 0x92F0, 0xBBEF, 0x92F1, 0xBBF0, 0x92F2, 0xBBF1, 0x92F3, 0xBBF2, 0x92F4, 0xBBF3, 0x92F5, + 0xBBF4, 0x92F6, 0xBBF5, 0x92F7, 0xBBF6, 0x92F8, 0xBBF7, 0x92F9, 0xBBF8, 0xB9CC, 0xBBF9, 0xB9CD, 0xBBFA, 0x92FA, 0xBBFB, 0x92FB, + 0xBBFC, 0xB9CE, 0xBBFD, 0x92FC, 0xBBFE, 0x92FD, 0xBBFF, 0xB9CF, 0xBC00, 0xB9D0, 0xBC01, 0x92FE, 0xBC02, 0xB9D1, 0xBC03, 0x9341, + 0xBC04, 0x9342, 0xBC05, 0x9343, 0xBC06, 0x9344, 0xBC07, 0x9345, 0xBC08, 0xB9D2, 0xBC09, 0xB9D3, 0xBC0A, 0x9346, 0xBC0B, 0xB9D4, + 0xBC0C, 0xB9D5, 0xBC0D, 0xB9D6, 0xBC0E, 0x9347, 0xBC0F, 0xB9D7, 0xBC10, 0x9348, 0xBC11, 0xB9D8, 0xBC12, 0x9349, 0xBC13, 0x934A, + 0xBC14, 0xB9D9, 0xBC15, 0xB9DA, 0xBC16, 0xB9DB, 0xBC17, 0xB9DC, 0xBC18, 0xB9DD, 0xBC19, 0x934B, 0xBC1A, 0x934C, 0xBC1B, 0xB9DE, + 0xBC1C, 0xB9DF, 0xBC1D, 0xB9E0, 0xBC1E, 0xB9E1, 0xBC1F, 0xB9E2, 0xBC20, 0x934D, 0xBC21, 0x934E, 0xBC22, 0x934F, 0xBC23, 0x9350, + 0xBC24, 0xB9E3, 0xBC25, 0xB9E4, 0xBC26, 0x9351, 0xBC27, 0xB9E5, 0xBC28, 0x9352, 0xBC29, 0xB9E6, 0xBC2A, 0x9353, 0xBC2B, 0x9354, + 0xBC2C, 0x9355, 0xBC2D, 0xB9E7, 0xBC2E, 0x9356, 0xBC2F, 0x9357, 0xBC30, 0xB9E8, 0xBC31, 0xB9E9, 0xBC32, 0x9358, 0xBC33, 0x9359, + 0xBC34, 0xB9EA, 0xBC35, 0x935A, 0xBC36, 0x9361, 0xBC37, 0x9362, 0xBC38, 0xB9EB, 0xBC39, 0x9363, 0xBC3A, 0x9364, 0xBC3B, 0x9365, + 0xBC3C, 0x9366, 0xBC3D, 0x9367, 0xBC3E, 0x9368, 0xBC3F, 0x9369, 0xBC40, 0xB9EC, 0xBC41, 0xB9ED, 0xBC42, 0x936A, 0xBC43, 0xB9EE, + 0xBC44, 0xB9EF, 0xBC45, 0xB9F0, 0xBC46, 0x936B, 0xBC47, 0x936C, 0xBC48, 0x936D, 0xBC49, 0xB9F1, 0xBC4A, 0x936E, 0xBC4B, 0x936F, + 0xBC4C, 0xB9F2, 0xBC4D, 0xB9F3, 0xBC4E, 0x9370, 0xBC4F, 0x9371, 0xBC50, 0xB9F4, 0xBC51, 0x9372, 0xBC52, 0x9373, 0xBC53, 0x9374, + 0xBC54, 0x9375, 0xBC55, 0x9376, 0xBC56, 0x9377, 0xBC57, 0x9378, 0xBC58, 0x9379, 0xBC59, 0x937A, 0xBC5A, 0x9381, 0xBC5B, 0x9382, + 0xBC5C, 0x9383, 0xBC5D, 0xB9F5, 0xBC5E, 0x9384, 0xBC5F, 0x9385, 0xBC60, 0x9386, 0xBC61, 0x9387, 0xBC62, 0x9388, 0xBC63, 0x9389, + 0xBC64, 0x938A, 0xBC65, 0x938B, 0xBC66, 0x938C, 0xBC67, 0x938D, 0xBC68, 0x938E, 0xBC69, 0x938F, 0xBC6A, 0x9390, 0xBC6B, 0x9391, + 0xBC6C, 0x9392, 0xBC6D, 0x9393, 0xBC6E, 0x9394, 0xBC6F, 0x9395, 0xBC70, 0x9396, 0xBC71, 0x9397, 0xBC72, 0x9398, 0xBC73, 0x9399, + 0xBC74, 0x939A, 0xBC75, 0x939B, 0xBC76, 0x939C, 0xBC77, 0x939D, 0xBC78, 0x939E, 0xBC79, 0x939F, 0xBC7A, 0x93A0, 0xBC7B, 0x93A1, + 0xBC7C, 0x93A2, 0xBC7D, 0x93A3, 0xBC7E, 0x93A4, 0xBC7F, 0x93A5, 0xBC80, 0x93A6, 0xBC81, 0x93A7, 0xBC82, 0x93A8, 0xBC83, 0x93A9, + 0xBC84, 0xB9F6, 0xBC85, 0xB9F7, 0xBC86, 0x93AA, 0xBC87, 0x93AB, 0xBC88, 0xB9F8, 0xBC89, 0x93AC, 0xBC8A, 0x93AD, 0xBC8B, 0xB9F9, + 0xBC8C, 0xB9FA, 0xBC8D, 0x93AE, 0xBC8E, 0xB9FB, 0xBC8F, 0x93AF, 0xBC90, 0x93B0, 0xBC91, 0x93B1, 0xBC92, 0x93B2, 0xBC93, 0x93B3, + 0xBC94, 0xB9FC, 0xBC95, 0xB9FD, 0xBC96, 0x93B4, 0xBC97, 0xB9FE, 0xBC98, 0x93B5, 0xBC99, 0xBAA1, 0xBC9A, 0xBAA2, 0xBC9B, 0x93B6, + 0xBC9C, 0x93B7, 0xBC9D, 0x93B8, 0xBC9E, 0x93B9, 0xBC9F, 0x93BA, 0xBCA0, 0xBAA3, 0xBCA1, 0xBAA4, 0xBCA2, 0x93BB, 0xBCA3, 0x93BC, + 0xBCA4, 0xBAA5, 0xBCA5, 0x93BD, 0xBCA6, 0x93BE, 0xBCA7, 0xBAA6, 0xBCA8, 0xBAA7, 0xBCA9, 0x93BF, 0xBCAA, 0x93C0, 0xBCAB, 0x93C1, + 0xBCAC, 0x93C2, 0xBCAD, 0x93C3, 0xBCAE, 0x93C4, 0xBCAF, 0x93C5, 0xBCB0, 0xBAA8, 0xBCB1, 0xBAA9, 0xBCB2, 0x93C6, 0xBCB3, 0xBAAA, + 0xBCB4, 0xBAAB, 0xBCB5, 0xBAAC, 0xBCB6, 0x93C7, 0xBCB7, 0x93C8, 0xBCB8, 0x93C9, 0xBCB9, 0x93CA, 0xBCBA, 0x93CB, 0xBCBB, 0x93CC, + 0xBCBC, 0xBAAD, 0xBCBD, 0xBAAE, 0xBCBE, 0x93CD, 0xBCBF, 0x93CE, 0xBCC0, 0xBAAF, 0xBCC1, 0x93CF, 0xBCC2, 0x93D0, 0xBCC3, 0x93D1, + 0xBCC4, 0xBAB0, 0xBCC5, 0x93D2, 0xBCC6, 0x93D3, 0xBCC7, 0x93D4, 0xBCC8, 0x93D5, 0xBCC9, 0x93D6, 0xBCCA, 0x93D7, 0xBCCB, 0x93D8, + 0xBCCC, 0x93D9, 0xBCCD, 0xBAB1, 0xBCCE, 0x93DA, 0xBCCF, 0xBAB2, 0xBCD0, 0xBAB3, 0xBCD1, 0xBAB4, 0xBCD2, 0x93DB, 0xBCD3, 0x93DC, + 0xBCD4, 0x93DD, 0xBCD5, 0xBAB5, 0xBCD6, 0x93DE, 0xBCD7, 0x93DF, 0xBCD8, 0xBAB6, 0xBCD9, 0x93E0, 0xBCDA, 0x93E1, 0xBCDB, 0x93E2, + 0xBCDC, 0xBAB7, 0xBCDD, 0x93E3, 0xBCDE, 0x93E4, 0xBCDF, 0x93E5, 0xBCE0, 0x93E6, 0xBCE1, 0x93E7, 0xBCE2, 0x93E8, 0xBCE3, 0x93E9, + 0xBCE4, 0x93EA, 0xBCE5, 0x93EB, 0xBCE6, 0x93EC, 0xBCE7, 0x93ED, 0xBCE8, 0x93EE, 0xBCE9, 0x93EF, 0xBCEA, 0x93F0, 0xBCEB, 0x93F1, + 0xBCEC, 0x93F2, 0xBCED, 0x93F3, 0xBCEE, 0x93F4, 0xBCEF, 0x93F5, 0xBCF0, 0x93F6, 0xBCF1, 0x93F7, 0xBCF2, 0x93F8, 0xBCF3, 0x93F9, + 0xBCF4, 0xBAB8, 0xBCF5, 0xBAB9, 0xBCF6, 0xBABA, 0xBCF7, 0x93FA, 0xBCF8, 0xBABB, 0xBCF9, 0x93FB, 0xBCFA, 0x93FC, 0xBCFB, 0x93FD, + 0xBCFC, 0xBABC, 0xBCFD, 0x93FE, 0xBCFE, 0x9441, 0xBCFF, 0x9442, 0xBD00, 0x9443, 0xBD01, 0x9444, 0xBD02, 0x9445, 0xBD03, 0x9446, + 0xBD04, 0xBABD, 0xBD05, 0xBABE, 0xBD06, 0x9447, 0xBD07, 0xBABF, 0xBD08, 0x9448, 0xBD09, 0xBAC0, 0xBD0A, 0x9449, 0xBD0B, 0x944A, + 0xBD0C, 0x944B, 0xBD0D, 0x944C, 0xBD0E, 0x944D, 0xBD0F, 0x944E, 0xBD10, 0xBAC1, 0xBD11, 0x944F, 0xBD12, 0x9450, 0xBD13, 0x9451, + 0xBD14, 0xBAC2, 0xBD15, 0x9452, 0xBD16, 0x9453, 0xBD17, 0x9454, 0xBD18, 0x9455, 0xBD19, 0x9456, 0xBD1A, 0x9457, 0xBD1B, 0x9458, + 0xBD1C, 0x9459, 0xBD1D, 0x945A, 0xBD1E, 0x9461, 0xBD1F, 0x9462, 0xBD20, 0x9463, 0xBD21, 0x9464, 0xBD22, 0x9465, 0xBD23, 0x9466, + 0xBD24, 0xBAC3, 0xBD25, 0x9467, 0xBD26, 0x9468, 0xBD27, 0x9469, 0xBD28, 0x946A, 0xBD29, 0x946B, 0xBD2A, 0x946C, 0xBD2B, 0x946D, + 0xBD2C, 0xBAC4, 0xBD2D, 0x946E, 0xBD2E, 0x946F, 0xBD2F, 0x9470, 0xBD30, 0x9471, 0xBD31, 0x9472, 0xBD32, 0x9473, 0xBD33, 0x9474, + 0xBD34, 0x9475, 0xBD35, 0x9476, 0xBD36, 0x9477, 0xBD37, 0x9478, 0xBD38, 0x9479, 0xBD39, 0x947A, 0xBD3A, 0x9481, 0xBD3B, 0x9482, + 0xBD3C, 0x9483, 0xBD3D, 0x9484, 0xBD3E, 0x9485, 0xBD3F, 0x9486, 0xBD40, 0xBAC5, 0xBD41, 0x9487, 0xBD42, 0x9488, 0xBD43, 0x9489, + 0xBD44, 0x948A, 0xBD45, 0x948B, 0xBD46, 0x948C, 0xBD47, 0x948D, 0xBD48, 0xBAC6, 0xBD49, 0xBAC7, 0xBD4A, 0x948E, 0xBD4B, 0x948F, + 0xBD4C, 0xBAC8, 0xBD4D, 0x9490, 0xBD4E, 0x9491, 0xBD4F, 0x9492, 0xBD50, 0xBAC9, 0xBD51, 0x9493, 0xBD52, 0x9494, 0xBD53, 0x9495, + 0xBD54, 0x9496, 0xBD55, 0x9497, 0xBD56, 0x9498, 0xBD57, 0x9499, 0xBD58, 0xBACA, 0xBD59, 0xBACB, 0xBD5A, 0x949A, 0xBD5B, 0x949B, + 0xBD5C, 0x949C, 0xBD5D, 0x949D, 0xBD5E, 0x949E, 0xBD5F, 0x949F, 0xBD60, 0x94A0, 0xBD61, 0x94A1, 0xBD62, 0x94A2, 0xBD63, 0x94A3, + 0xBD64, 0xBACC, 0xBD65, 0x94A4, 0xBD66, 0x94A5, 0xBD67, 0x94A6, 0xBD68, 0xBACD, 0xBD69, 0x94A7, 0xBD6A, 0x94A8, 0xBD6B, 0x94A9, + 0xBD6C, 0x94AA, 0xBD6D, 0x94AB, 0xBD6E, 0x94AC, 0xBD6F, 0x94AD, 0xBD70, 0x94AE, 0xBD71, 0x94AF, 0xBD72, 0x94B0, 0xBD73, 0x94B1, + 0xBD74, 0x94B2, 0xBD75, 0x94B3, 0xBD76, 0x94B4, 0xBD77, 0x94B5, 0xBD78, 0x94B6, 0xBD79, 0x94B7, 0xBD7A, 0x94B8, 0xBD7B, 0x94B9, + 0xBD7C, 0x94BA, 0xBD7D, 0x94BB, 0xBD7E, 0x94BC, 0xBD7F, 0x94BD, 0xBD80, 0xBACE, 0xBD81, 0xBACF, 0xBD82, 0x94BE, 0xBD83, 0x94BF, + 0xBD84, 0xBAD0, 0xBD85, 0x94C0, 0xBD86, 0x94C1, 0xBD87, 0xBAD1, 0xBD88, 0xBAD2, 0xBD89, 0xBAD3, 0xBD8A, 0xBAD4, 0xBD8B, 0x94C2, + 0xBD8C, 0x94C3, 0xBD8D, 0x94C4, 0xBD8E, 0x94C5, 0xBD8F, 0x94C6, 0xBD90, 0xBAD5, 0xBD91, 0xBAD6, 0xBD92, 0x94C7, 0xBD93, 0xBAD7, + 0xBD94, 0x94C8, 0xBD95, 0xBAD8, 0xBD96, 0x94C9, 0xBD97, 0x94CA, 0xBD98, 0x94CB, 0xBD99, 0xBAD9, 0xBD9A, 0xBADA, 0xBD9B, 0x94CC, + 0xBD9C, 0xBADB, 0xBD9D, 0x94CD, 0xBD9E, 0x94CE, 0xBD9F, 0x94CF, 0xBDA0, 0x94D0, 0xBDA1, 0x94D1, 0xBDA2, 0x94D2, 0xBDA3, 0x94D3, + 0xBDA4, 0xBADC, 0xBDA5, 0x94D4, 0xBDA6, 0x94D5, 0xBDA7, 0x94D6, 0xBDA8, 0x94D7, 0xBDA9, 0x94D8, 0xBDAA, 0x94D9, 0xBDAB, 0x94DA, + 0xBDAC, 0x94DB, 0xBDAD, 0x94DC, 0xBDAE, 0x94DD, 0xBDAF, 0x94DE, 0xBDB0, 0xBADD, 0xBDB1, 0x94DF, 0xBDB2, 0x94E0, 0xBDB3, 0x94E1, + 0xBDB4, 0x94E2, 0xBDB5, 0x94E3, 0xBDB6, 0x94E4, 0xBDB7, 0x94E5, 0xBDB8, 0xBADE, 0xBDB9, 0x94E6, 0xBDBA, 0x94E7, 0xBDBB, 0x94E8, + 0xBDBC, 0x94E9, 0xBDBD, 0x94EA, 0xBDBE, 0x94EB, 0xBDBF, 0x94EC, 0xBDC0, 0x94ED, 0xBDC1, 0x94EE, 0xBDC2, 0x94EF, 0xBDC3, 0x94F0, + 0xBDC4, 0x94F1, 0xBDC5, 0x94F2, 0xBDC6, 0x94F3, 0xBDC7, 0x94F4, 0xBDC8, 0x94F5, 0xBDC9, 0x94F6, 0xBDCA, 0x94F7, 0xBDCB, 0x94F8, + 0xBDCC, 0x94F9, 0xBDCD, 0x94FA, 0xBDCE, 0x94FB, 0xBDCF, 0x94FC, 0xBDD0, 0x94FD, 0xBDD1, 0x94FE, 0xBDD2, 0x9541, 0xBDD3, 0x9542, + 0xBDD4, 0xBADF, 0xBDD5, 0xBAE0, 0xBDD6, 0x9543, 0xBDD7, 0x9544, 0xBDD8, 0xBAE1, 0xBDD9, 0x9545, 0xBDDA, 0x9546, 0xBDDB, 0x9547, + 0xBDDC, 0xBAE2, 0xBDDD, 0x9548, 0xBDDE, 0x9549, 0xBDDF, 0x954A, 0xBDE0, 0x954B, 0xBDE1, 0x954C, 0xBDE2, 0x954D, 0xBDE3, 0x954E, + 0xBDE4, 0x954F, 0xBDE5, 0x9550, 0xBDE6, 0x9551, 0xBDE7, 0x9552, 0xBDE8, 0x9553, 0xBDE9, 0xBAE3, 0xBDEA, 0x9554, 0xBDEB, 0x9555, + 0xBDEC, 0x9556, 0xBDED, 0x9557, 0xBDEE, 0x9558, 0xBDEF, 0x9559, 0xBDF0, 0xBAE4, 0xBDF1, 0x955A, 0xBDF2, 0x9561, 0xBDF3, 0x9562, + 0xBDF4, 0xBAE5, 0xBDF5, 0x9563, 0xBDF6, 0x9564, 0xBDF7, 0x9565, 0xBDF8, 0xBAE6, 0xBDF9, 0x9566, 0xBDFA, 0x9567, 0xBDFB, 0x9568, + 0xBDFC, 0x9569, 0xBDFD, 0x956A, 0xBDFE, 0x956B, 0xBDFF, 0x956C, 0xBE00, 0xBAE7, 0xBE01, 0x956D, 0xBE02, 0x956E, 0xBE03, 0xBAE8, + 0xBE04, 0x956F, 0xBE05, 0xBAE9, 0xBE06, 0x9570, 0xBE07, 0x9571, 0xBE08, 0x9572, 0xBE09, 0x9573, 0xBE0A, 0x9574, 0xBE0B, 0x9575, + 0xBE0C, 0xBAEA, 0xBE0D, 0xBAEB, 0xBE0E, 0x9576, 0xBE0F, 0x9577, 0xBE10, 0xBAEC, 0xBE11, 0x9578, 0xBE12, 0x9579, 0xBE13, 0x957A, + 0xBE14, 0xBAED, 0xBE15, 0x9581, 0xBE16, 0x9582, 0xBE17, 0x9583, 0xBE18, 0x9584, 0xBE19, 0x9585, 0xBE1A, 0x9586, 0xBE1B, 0x9587, + 0xBE1C, 0xBAEE, 0xBE1D, 0xBAEF, 0xBE1E, 0x9588, 0xBE1F, 0xBAF0, 0xBE20, 0x9589, 0xBE21, 0x958A, 0xBE22, 0x958B, 0xBE23, 0x958C, + 0xBE24, 0x958D, 0xBE25, 0x958E, 0xBE26, 0x958F, 0xBE27, 0x9590, 0xBE28, 0x9591, 0xBE29, 0x9592, 0xBE2A, 0x9593, 0xBE2B, 0x9594, + 0xBE2C, 0x9595, 0xBE2D, 0x9596, 0xBE2E, 0x9597, 0xBE2F, 0x9598, 0xBE30, 0x9599, 0xBE31, 0x959A, 0xBE32, 0x959B, 0xBE33, 0x959C, + 0xBE34, 0x959D, 0xBE35, 0x959E, 0xBE36, 0x959F, 0xBE37, 0x95A0, 0xBE38, 0x95A1, 0xBE39, 0x95A2, 0xBE3A, 0x95A3, 0xBE3B, 0x95A4, + 0xBE3C, 0x95A5, 0xBE3D, 0x95A6, 0xBE3E, 0x95A7, 0xBE3F, 0x95A8, 0xBE40, 0x95A9, 0xBE41, 0x95AA, 0xBE42, 0x95AB, 0xBE43, 0x95AC, + 0xBE44, 0xBAF1, 0xBE45, 0xBAF2, 0xBE46, 0x95AD, 0xBE47, 0x95AE, 0xBE48, 0xBAF3, 0xBE49, 0x95AF, 0xBE4A, 0x95B0, 0xBE4B, 0x95B1, + 0xBE4C, 0xBAF4, 0xBE4D, 0x95B2, 0xBE4E, 0xBAF5, 0xBE4F, 0x95B3, 0xBE50, 0x95B4, 0xBE51, 0x95B5, 0xBE52, 0x95B6, 0xBE53, 0x95B7, + 0xBE54, 0xBAF6, 0xBE55, 0xBAF7, 0xBE56, 0x95B8, 0xBE57, 0xBAF8, 0xBE58, 0x95B9, 0xBE59, 0xBAF9, 0xBE5A, 0xBAFA, 0xBE5B, 0xBAFB, + 0xBE5C, 0x95BA, 0xBE5D, 0x95BB, 0xBE5E, 0x95BC, 0xBE5F, 0x95BD, 0xBE60, 0xBAFC, 0xBE61, 0xBAFD, 0xBE62, 0x95BE, 0xBE63, 0x95BF, + 0xBE64, 0xBAFE, 0xBE65, 0x95C0, 0xBE66, 0x95C1, 0xBE67, 0x95C2, 0xBE68, 0xBBA1, 0xBE69, 0x95C3, 0xBE6A, 0xBBA2, 0xBE6B, 0x95C4, + 0xBE6C, 0x95C5, 0xBE6D, 0x95C6, 0xBE6E, 0x95C7, 0xBE6F, 0x95C8, 0xBE70, 0xBBA3, 0xBE71, 0xBBA4, 0xBE72, 0x95C9, 0xBE73, 0xBBA5, + 0xBE74, 0xBBA6, 0xBE75, 0xBBA7, 0xBE76, 0x95CA, 0xBE77, 0x95CB, 0xBE78, 0x95CC, 0xBE79, 0x95CD, 0xBE7A, 0x95CE, 0xBE7B, 0xBBA8, + 0xBE7C, 0xBBA9, 0xBE7D, 0xBBAA, 0xBE7E, 0x95CF, 0xBE7F, 0x95D0, 0xBE80, 0xBBAB, 0xBE81, 0x95D1, 0xBE82, 0x95D2, 0xBE83, 0x95D3, + 0xBE84, 0xBBAC, 0xBE85, 0x95D4, 0xBE86, 0x95D5, 0xBE87, 0x95D6, 0xBE88, 0x95D7, 0xBE89, 0x95D8, 0xBE8A, 0x95D9, 0xBE8B, 0x95DA, + 0xBE8C, 0xBBAD, 0xBE8D, 0xBBAE, 0xBE8E, 0x95DB, 0xBE8F, 0xBBAF, 0xBE90, 0xBBB0, 0xBE91, 0xBBB1, 0xBE92, 0x95DC, 0xBE93, 0x95DD, + 0xBE94, 0x95DE, 0xBE95, 0x95DF, 0xBE96, 0x95E0, 0xBE97, 0x95E1, 0xBE98, 0xBBB2, 0xBE99, 0xBBB3, 0xBE9A, 0x95E2, 0xBE9B, 0x95E3, + 0xBE9C, 0x95E4, 0xBE9D, 0x95E5, 0xBE9E, 0x95E6, 0xBE9F, 0x95E7, 0xBEA0, 0x95E8, 0xBEA1, 0x95E9, 0xBEA2, 0x95EA, 0xBEA3, 0x95EB, + 0xBEA4, 0x95EC, 0xBEA5, 0x95ED, 0xBEA6, 0x95EE, 0xBEA7, 0x95EF, 0xBEA8, 0xBBB4, 0xBEA9, 0x95F0, 0xBEAA, 0x95F1, 0xBEAB, 0x95F2, + 0xBEAC, 0x95F3, 0xBEAD, 0x95F4, 0xBEAE, 0x95F5, 0xBEAF, 0x95F6, 0xBEB0, 0x95F7, 0xBEB1, 0x95F8, 0xBEB2, 0x95F9, 0xBEB3, 0x95FA, + 0xBEB4, 0x95FB, 0xBEB5, 0x95FC, 0xBEB6, 0x95FD, 0xBEB7, 0x95FE, 0xBEB8, 0x9641, 0xBEB9, 0x9642, 0xBEBA, 0x9643, 0xBEBB, 0x9644, + 0xBEBC, 0x9645, 0xBEBD, 0x9646, 0xBEBE, 0x9647, 0xBEBF, 0x9648, 0xBEC0, 0x9649, 0xBEC1, 0x964A, 0xBEC2, 0x964B, 0xBEC3, 0x964C, + 0xBEC4, 0x964D, 0xBEC5, 0x964E, 0xBEC6, 0x964F, 0xBEC7, 0x9650, 0xBEC8, 0x9651, 0xBEC9, 0x9652, 0xBECA, 0x9653, 0xBECB, 0x9654, + 0xBECC, 0x9655, 0xBECD, 0x9656, 0xBECE, 0x9657, 0xBECF, 0x9658, 0xBED0, 0xBBB5, 0xBED1, 0xBBB6, 0xBED2, 0x9659, 0xBED3, 0x965A, + 0xBED4, 0xBBB7, 0xBED5, 0x9661, 0xBED6, 0x9662, 0xBED7, 0xBBB8, 0xBED8, 0xBBB9, 0xBED9, 0x9663, 0xBEDA, 0x9664, 0xBEDB, 0x9665, + 0xBEDC, 0x9666, 0xBEDD, 0x9667, 0xBEDE, 0x9668, 0xBEDF, 0x9669, 0xBEE0, 0xBBBA, 0xBEE1, 0x966A, 0xBEE2, 0x966B, 0xBEE3, 0xBBBB, + 0xBEE4, 0xBBBC, 0xBEE5, 0xBBBD, 0xBEE6, 0x966C, 0xBEE7, 0x966D, 0xBEE8, 0x966E, 0xBEE9, 0x966F, 0xBEEA, 0x9670, 0xBEEB, 0x9671, + 0xBEEC, 0xBBBE, 0xBEED, 0x9672, 0xBEEE, 0x9673, 0xBEEF, 0x9674, 0xBEF0, 0x9675, 0xBEF1, 0x9676, 0xBEF2, 0x9677, 0xBEF3, 0x9678, + 0xBEF4, 0x9679, 0xBEF5, 0x967A, 0xBEF6, 0x9681, 0xBEF7, 0x9682, 0xBEF8, 0x9683, 0xBEF9, 0x9684, 0xBEFA, 0x9685, 0xBEFB, 0x9686, + 0xBEFC, 0x9687, 0xBEFD, 0x9688, 0xBEFE, 0x9689, 0xBEFF, 0x968A, 0xBF00, 0x968B, 0xBF01, 0xBBBF, 0xBF02, 0x968C, 0xBF03, 0x968D, + 0xBF04, 0x968E, 0xBF05, 0x968F, 0xBF06, 0x9690, 0xBF07, 0x9691, 0xBF08, 0xBBC0, 0xBF09, 0xBBC1, 0xBF0A, 0x9692, 0xBF0B, 0x9693, + 0xBF0C, 0x9694, 0xBF0D, 0x9695, 0xBF0E, 0x9696, 0xBF0F, 0x9697, 0xBF10, 0x9698, 0xBF11, 0x9699, 0xBF12, 0x969A, 0xBF13, 0x969B, + 0xBF14, 0x969C, 0xBF15, 0x969D, 0xBF16, 0x969E, 0xBF17, 0x969F, 0xBF18, 0xBBC2, 0xBF19, 0xBBC3, 0xBF1A, 0x96A0, 0xBF1B, 0xBBC4, + 0xBF1C, 0xBBC5, 0xBF1D, 0xBBC6, 0xBF1E, 0x96A1, 0xBF1F, 0x96A2, 0xBF20, 0x96A3, 0xBF21, 0x96A4, 0xBF22, 0x96A5, 0xBF23, 0x96A6, + 0xBF24, 0x96A7, 0xBF25, 0x96A8, 0xBF26, 0x96A9, 0xBF27, 0x96AA, 0xBF28, 0x96AB, 0xBF29, 0x96AC, 0xBF2A, 0x96AD, 0xBF2B, 0x96AE, + 0xBF2C, 0x96AF, 0xBF2D, 0x96B0, 0xBF2E, 0x96B1, 0xBF2F, 0x96B2, 0xBF30, 0x96B3, 0xBF31, 0x96B4, 0xBF32, 0x96B5, 0xBF33, 0x96B6, + 0xBF34, 0x96B7, 0xBF35, 0x96B8, 0xBF36, 0x96B9, 0xBF37, 0x96BA, 0xBF38, 0x96BB, 0xBF39, 0x96BC, 0xBF3A, 0x96BD, 0xBF3B, 0x96BE, + 0xBF3C, 0x96BF, 0xBF3D, 0x96C0, 0xBF3E, 0x96C1, 0xBF3F, 0x96C2, 0xBF40, 0xBBC7, 0xBF41, 0xBBC8, 0xBF42, 0x96C3, 0xBF43, 0x96C4, + 0xBF44, 0xBBC9, 0xBF45, 0x96C5, 0xBF46, 0x96C6, 0xBF47, 0x96C7, 0xBF48, 0xBBCA, 0xBF49, 0x96C8, 0xBF4A, 0x96C9, 0xBF4B, 0x96CA, + 0xBF4C, 0x96CB, 0xBF4D, 0x96CC, 0xBF4E, 0x96CD, 0xBF4F, 0x96CE, 0xBF50, 0xBBCB, 0xBF51, 0xBBCC, 0xBF52, 0x96CF, 0xBF53, 0x96D0, + 0xBF54, 0x96D1, 0xBF55, 0xBBCD, 0xBF56, 0x96D2, 0xBF57, 0x96D3, 0xBF58, 0x96D4, 0xBF59, 0x96D5, 0xBF5A, 0x96D6, 0xBF5B, 0x96D7, + 0xBF5C, 0x96D8, 0xBF5D, 0x96D9, 0xBF5E, 0x96DA, 0xBF5F, 0x96DB, 0xBF60, 0x96DC, 0xBF61, 0x96DD, 0xBF62, 0x96DE, 0xBF63, 0x96DF, + 0xBF64, 0x96E0, 0xBF65, 0x96E1, 0xBF66, 0x96E2, 0xBF67, 0x96E3, 0xBF68, 0x96E4, 0xBF69, 0x96E5, 0xBF6A, 0x96E6, 0xBF6B, 0x96E7, + 0xBF6C, 0x96E8, 0xBF6D, 0x96E9, 0xBF6E, 0x96EA, 0xBF6F, 0x96EB, 0xBF70, 0x96EC, 0xBF71, 0x96ED, 0xBF72, 0x96EE, 0xBF73, 0x96EF, + 0xBF74, 0x96F0, 0xBF75, 0x96F1, 0xBF76, 0x96F2, 0xBF77, 0x96F3, 0xBF78, 0x96F4, 0xBF79, 0x96F5, 0xBF7A, 0x96F6, 0xBF7B, 0x96F7, + 0xBF7C, 0x96F8, 0xBF7D, 0x96F9, 0xBF7E, 0x96FA, 0xBF7F, 0x96FB, 0xBF80, 0x96FC, 0xBF81, 0x96FD, 0xBF82, 0x96FE, 0xBF83, 0x9741, + 0xBF84, 0x9742, 0xBF85, 0x9743, 0xBF86, 0x9744, 0xBF87, 0x9745, 0xBF88, 0x9746, 0xBF89, 0x9747, 0xBF8A, 0x9748, 0xBF8B, 0x9749, + 0xBF8C, 0x974A, 0xBF8D, 0x974B, 0xBF8E, 0x974C, 0xBF8F, 0x974D, 0xBF90, 0x974E, 0xBF91, 0x974F, 0xBF92, 0x9750, 0xBF93, 0x9751, + 0xBF94, 0xBBCE, 0xBF95, 0x9752, 0xBF96, 0x9753, 0xBF97, 0x9754, 0xBF98, 0x9755, 0xBF99, 0x9756, 0xBF9A, 0x9757, 0xBF9B, 0x9758, + 0xBF9C, 0x9759, 0xBF9D, 0x975A, 0xBF9E, 0x9761, 0xBF9F, 0x9762, 0xBFA0, 0x9763, 0xBFA1, 0x9764, 0xBFA2, 0x9765, 0xBFA3, 0x9766, + 0xBFA4, 0x9767, 0xBFA5, 0x9768, 0xBFA6, 0x9769, 0xBFA7, 0x976A, 0xBFA8, 0x976B, 0xBFA9, 0x976C, 0xBFAA, 0x976D, 0xBFAB, 0x976E, + 0xBFAC, 0x976F, 0xBFAD, 0x9770, 0xBFAE, 0x9771, 0xBFAF, 0x9772, 0xBFB0, 0xBBCF, 0xBFB1, 0x9773, 0xBFB2, 0x9774, 0xBFB3, 0x9775, + 0xBFB4, 0x9776, 0xBFB5, 0x9777, 0xBFB6, 0x9778, 0xBFB7, 0x9779, 0xBFB8, 0x977A, 0xBFB9, 0x9781, 0xBFBA, 0x9782, 0xBFBB, 0x9783, + 0xBFBC, 0x9784, 0xBFBD, 0x9785, 0xBFBE, 0x9786, 0xBFBF, 0x9787, 0xBFC0, 0x9788, 0xBFC1, 0x9789, 0xBFC2, 0x978A, 0xBFC3, 0x978B, + 0xBFC4, 0x978C, 0xBFC5, 0xBBD0, 0xBFC6, 0x978D, 0xBFC7, 0x978E, 0xBFC8, 0x978F, 0xBFC9, 0x9790, 0xBFCA, 0x9791, 0xBFCB, 0x9792, + 0xBFCC, 0xBBD1, 0xBFCD, 0xBBD2, 0xBFCE, 0x9793, 0xBFCF, 0x9794, 0xBFD0, 0xBBD3, 0xBFD1, 0x9795, 0xBFD2, 0x9796, 0xBFD3, 0x9797, + 0xBFD4, 0xBBD4, 0xBFD5, 0x9798, 0xBFD6, 0x9799, 0xBFD7, 0x979A, 0xBFD8, 0x979B, 0xBFD9, 0x979C, 0xBFDA, 0x979D, 0xBFDB, 0x979E, + 0xBFDC, 0xBBD5, 0xBFDD, 0x979F, 0xBFDE, 0x97A0, 0xBFDF, 0xBBD6, 0xBFE0, 0x97A1, 0xBFE1, 0xBBD7, 0xBFE2, 0x97A2, 0xBFE3, 0x97A3, + 0xBFE4, 0x97A4, 0xBFE5, 0x97A5, 0xBFE6, 0x97A6, 0xBFE7, 0x97A7, 0xBFE8, 0x97A8, 0xBFE9, 0x97A9, 0xBFEA, 0x97AA, 0xBFEB, 0x97AB, + 0xBFEC, 0x97AC, 0xBFED, 0x97AD, 0xBFEE, 0x97AE, 0xBFEF, 0x97AF, 0xBFF0, 0x97B0, 0xBFF1, 0x97B1, 0xBFF2, 0x97B2, 0xBFF3, 0x97B3, + 0xBFF4, 0x97B4, 0xBFF5, 0x97B5, 0xBFF6, 0x97B6, 0xBFF7, 0x97B7, 0xBFF8, 0x97B8, 0xBFF9, 0x97B9, 0xBFFA, 0x97BA, 0xBFFB, 0x97BB, + 0xBFFC, 0x97BC, 0xBFFD, 0x97BD, 0xBFFE, 0x97BE, 0xBFFF, 0x97BF, 0xC000, 0x97C0, 0xC001, 0x97C1, 0xC002, 0x97C2, 0xC003, 0x97C3, + 0xC004, 0x97C4, 0xC005, 0x97C5, 0xC006, 0x97C6, 0xC007, 0x97C7, 0xC008, 0x97C8, 0xC009, 0x97C9, 0xC00A, 0x97CA, 0xC00B, 0x97CB, + 0xC00C, 0x97CC, 0xC00D, 0x97CD, 0xC00E, 0x97CE, 0xC00F, 0x97CF, 0xC010, 0x97D0, 0xC011, 0x97D1, 0xC012, 0x97D2, 0xC013, 0x97D3, + 0xC014, 0x97D4, 0xC015, 0x97D5, 0xC016, 0x97D6, 0xC017, 0x97D7, 0xC018, 0x97D8, 0xC019, 0x97D9, 0xC01A, 0x97DA, 0xC01B, 0x97DB, + 0xC01C, 0x97DC, 0xC01D, 0x97DD, 0xC01E, 0x97DE, 0xC01F, 0x97DF, 0xC020, 0x97E0, 0xC021, 0x97E1, 0xC022, 0x97E2, 0xC023, 0x97E3, + 0xC024, 0x97E4, 0xC025, 0x97E5, 0xC026, 0x97E6, 0xC027, 0x97E7, 0xC028, 0x97E8, 0xC029, 0x97E9, 0xC02A, 0x97EA, 0xC02B, 0x97EB, + 0xC02C, 0x97EC, 0xC02D, 0x97ED, 0xC02E, 0x97EE, 0xC02F, 0x97EF, 0xC030, 0x97F0, 0xC031, 0x97F1, 0xC032, 0x97F2, 0xC033, 0x97F3, + 0xC034, 0x97F4, 0xC035, 0x97F5, 0xC036, 0x97F6, 0xC037, 0x97F7, 0xC038, 0x97F8, 0xC039, 0x97F9, 0xC03A, 0x97FA, 0xC03B, 0x97FB, + 0xC03C, 0xBBD8, 0xC03D, 0x97FC, 0xC03E, 0x97FD, 0xC03F, 0x97FE, 0xC040, 0x9841, 0xC041, 0x9842, 0xC042, 0x9843, 0xC043, 0x9844, + 0xC044, 0x9845, 0xC045, 0x9846, 0xC046, 0x9847, 0xC047, 0x9848, 0xC048, 0x9849, 0xC049, 0x984A, 0xC04A, 0x984B, 0xC04B, 0x984C, + 0xC04C, 0x984D, 0xC04D, 0x984E, 0xC04E, 0x984F, 0xC04F, 0x9850, 0xC050, 0x9851, 0xC051, 0xBBD9, 0xC052, 0x9852, 0xC053, 0x9853, + 0xC054, 0x9854, 0xC055, 0x9855, 0xC056, 0x9856, 0xC057, 0x9857, 0xC058, 0xBBDA, 0xC059, 0x9858, 0xC05A, 0x9859, 0xC05B, 0x985A, + 0xC05C, 0xBBDB, 0xC05D, 0x9861, 0xC05E, 0x9862, 0xC05F, 0x9863, 0xC060, 0xBBDC, 0xC061, 0x9864, 0xC062, 0x9865, 0xC063, 0x9866, + 0xC064, 0x9867, 0xC065, 0x9868, 0xC066, 0x9869, 0xC067, 0x986A, 0xC068, 0xBBDD, 0xC069, 0xBBDE, 0xC06A, 0x986B, 0xC06B, 0x986C, + 0xC06C, 0x986D, 0xC06D, 0x986E, 0xC06E, 0x986F, 0xC06F, 0x9870, 0xC070, 0x9871, 0xC071, 0x9872, 0xC072, 0x9873, 0xC073, 0x9874, + 0xC074, 0x9875, 0xC075, 0x9876, 0xC076, 0x9877, 0xC077, 0x9878, 0xC078, 0x9879, 0xC079, 0x987A, 0xC07A, 0x9881, 0xC07B, 0x9882, + 0xC07C, 0x9883, 0xC07D, 0x9884, 0xC07E, 0x9885, 0xC07F, 0x9886, 0xC080, 0x9887, 0xC081, 0x9888, 0xC082, 0x9889, 0xC083, 0x988A, + 0xC084, 0x988B, 0xC085, 0x988C, 0xC086, 0x988D, 0xC087, 0x988E, 0xC088, 0x988F, 0xC089, 0x9890, 0xC08A, 0x9891, 0xC08B, 0x9892, + 0xC08C, 0x9893, 0xC08D, 0x9894, 0xC08E, 0x9895, 0xC08F, 0x9896, 0xC090, 0xBBDF, 0xC091, 0xBBE0, 0xC092, 0x9897, 0xC093, 0x9898, + 0xC094, 0xBBE1, 0xC095, 0x9899, 0xC096, 0x989A, 0xC097, 0x989B, 0xC098, 0xBBE2, 0xC099, 0x989C, 0xC09A, 0x989D, 0xC09B, 0x989E, + 0xC09C, 0x989F, 0xC09D, 0x98A0, 0xC09E, 0x98A1, 0xC09F, 0x98A2, 0xC0A0, 0xBBE3, 0xC0A1, 0xBBE4, 0xC0A2, 0x98A3, 0xC0A3, 0xBBE5, + 0xC0A4, 0x98A4, 0xC0A5, 0xBBE6, 0xC0A6, 0x98A5, 0xC0A7, 0x98A6, 0xC0A8, 0x98A7, 0xC0A9, 0x98A8, 0xC0AA, 0x98A9, 0xC0AB, 0x98AA, + 0xC0AC, 0xBBE7, 0xC0AD, 0xBBE8, 0xC0AE, 0x98AB, 0xC0AF, 0xBBE9, 0xC0B0, 0xBBEA, 0xC0B1, 0x98AC, 0xC0B2, 0x98AD, 0xC0B3, 0xBBEB, + 0xC0B4, 0xBBEC, 0xC0B5, 0xBBED, 0xC0B6, 0xBBEE, 0xC0B7, 0x98AE, 0xC0B8, 0x98AF, 0xC0B9, 0x98B0, 0xC0BA, 0x98B1, 0xC0BB, 0x98B2, + 0xC0BC, 0xBBEF, 0xC0BD, 0xBBF0, 0xC0BE, 0x98B3, 0xC0BF, 0xBBF1, 0xC0C0, 0xBBF2, 0xC0C1, 0xBBF3, 0xC0C2, 0x98B4, 0xC0C3, 0x98B5, + 0xC0C4, 0x98B6, 0xC0C5, 0xBBF4, 0xC0C6, 0x98B7, 0xC0C7, 0x98B8, 0xC0C8, 0xBBF5, 0xC0C9, 0xBBF6, 0xC0CA, 0x98B9, 0xC0CB, 0x98BA, + 0xC0CC, 0xBBF7, 0xC0CD, 0x98BB, 0xC0CE, 0x98BC, 0xC0CF, 0x98BD, 0xC0D0, 0xBBF8, 0xC0D1, 0x98BE, 0xC0D2, 0x98BF, 0xC0D3, 0x98C0, + 0xC0D4, 0x98C1, 0xC0D5, 0x98C2, 0xC0D6, 0x98C3, 0xC0D7, 0x98C4, 0xC0D8, 0xBBF9, 0xC0D9, 0xBBFA, 0xC0DA, 0x98C5, 0xC0DB, 0xBBFB, + 0xC0DC, 0xBBFC, 0xC0DD, 0xBBFD, 0xC0DE, 0x98C6, 0xC0DF, 0x98C7, 0xC0E0, 0x98C8, 0xC0E1, 0x98C9, 0xC0E2, 0x98CA, 0xC0E3, 0x98CB, + 0xC0E4, 0xBBFE, 0xC0E5, 0xBCA1, 0xC0E6, 0x98CC, 0xC0E7, 0x98CD, 0xC0E8, 0xBCA2, 0xC0E9, 0x98CE, 0xC0EA, 0x98CF, 0xC0EB, 0x98D0, + 0xC0EC, 0xBCA3, 0xC0ED, 0x98D1, 0xC0EE, 0x98D2, 0xC0EF, 0x98D3, 0xC0F0, 0x98D4, 0xC0F1, 0x98D5, 0xC0F2, 0x98D6, 0xC0F3, 0x98D7, + 0xC0F4, 0xBCA4, 0xC0F5, 0xBCA5, 0xC0F6, 0x98D8, 0xC0F7, 0xBCA6, 0xC0F8, 0x98D9, 0xC0F9, 0xBCA7, 0xC0FA, 0x98DA, 0xC0FB, 0x98DB, + 0xC0FC, 0x98DC, 0xC0FD, 0x98DD, 0xC0FE, 0x98DE, 0xC0FF, 0x98DF, 0xC100, 0xBCA8, 0xC101, 0x98E0, 0xC102, 0x98E1, 0xC103, 0x98E2, + 0xC104, 0xBCA9, 0xC105, 0x98E3, 0xC106, 0x98E4, 0xC107, 0x98E5, 0xC108, 0xBCAA, 0xC109, 0x98E6, 0xC10A, 0x98E7, 0xC10B, 0x98E8, + 0xC10C, 0x98E9, 0xC10D, 0x98EA, 0xC10E, 0x98EB, 0xC10F, 0x98EC, 0xC110, 0xBCAB, 0xC111, 0x98ED, 0xC112, 0x98EE, 0xC113, 0x98EF, + 0xC114, 0x98F0, 0xC115, 0xBCAC, 0xC116, 0x98F1, 0xC117, 0x98F2, 0xC118, 0x98F3, 0xC119, 0x98F4, 0xC11A, 0x98F5, 0xC11B, 0x98F6, + 0xC11C, 0xBCAD, 0xC11D, 0xBCAE, 0xC11E, 0xBCAF, 0xC11F, 0xBCB0, 0xC120, 0xBCB1, 0xC121, 0x98F7, 0xC122, 0x98F8, 0xC123, 0xBCB2, + 0xC124, 0xBCB3, 0xC125, 0x98F9, 0xC126, 0xBCB4, 0xC127, 0xBCB5, 0xC128, 0x98FA, 0xC129, 0x98FB, 0xC12A, 0x98FC, 0xC12B, 0x98FD, + 0xC12C, 0xBCB6, 0xC12D, 0xBCB7, 0xC12E, 0x98FE, 0xC12F, 0xBCB8, 0xC130, 0xBCB9, 0xC131, 0xBCBA, 0xC132, 0x9941, 0xC133, 0x9942, + 0xC134, 0x9943, 0xC135, 0x9944, 0xC136, 0xBCBB, 0xC137, 0x9945, 0xC138, 0xBCBC, 0xC139, 0xBCBD, 0xC13A, 0x9946, 0xC13B, 0x9947, + 0xC13C, 0xBCBE, 0xC13D, 0x9948, 0xC13E, 0x9949, 0xC13F, 0x994A, 0xC140, 0xBCBF, 0xC141, 0x994B, 0xC142, 0x994C, 0xC143, 0x994D, + 0xC144, 0x994E, 0xC145, 0x994F, 0xC146, 0x9950, 0xC147, 0x9951, 0xC148, 0xBCC0, 0xC149, 0xBCC1, 0xC14A, 0x9952, 0xC14B, 0xBCC2, + 0xC14C, 0xBCC3, 0xC14D, 0xBCC4, 0xC14E, 0x9953, 0xC14F, 0x9954, 0xC150, 0x9955, 0xC151, 0x9956, 0xC152, 0x9957, 0xC153, 0x9958, + 0xC154, 0xBCC5, 0xC155, 0xBCC6, 0xC156, 0x9959, 0xC157, 0x995A, 0xC158, 0xBCC7, 0xC159, 0x9961, 0xC15A, 0x9962, 0xC15B, 0x9963, + 0xC15C, 0xBCC8, 0xC15D, 0x9964, 0xC15E, 0x9965, 0xC15F, 0x9966, 0xC160, 0x9967, 0xC161, 0x9968, 0xC162, 0x9969, 0xC163, 0x996A, + 0xC164, 0xBCC9, 0xC165, 0xBCCA, 0xC166, 0x996B, 0xC167, 0xBCCB, 0xC168, 0xBCCC, 0xC169, 0xBCCD, 0xC16A, 0x996C, 0xC16B, 0x996D, + 0xC16C, 0x996E, 0xC16D, 0x996F, 0xC16E, 0x9970, 0xC16F, 0x9971, 0xC170, 0xBCCE, 0xC171, 0x9972, 0xC172, 0x9973, 0xC173, 0x9974, + 0xC174, 0xBCCF, 0xC175, 0x9975, 0xC176, 0x9976, 0xC177, 0x9977, 0xC178, 0xBCD0, 0xC179, 0x9978, 0xC17A, 0x9979, 0xC17B, 0x997A, + 0xC17C, 0x9981, 0xC17D, 0x9982, 0xC17E, 0x9983, 0xC17F, 0x9984, 0xC180, 0x9985, 0xC181, 0x9986, 0xC182, 0x9987, 0xC183, 0x9988, + 0xC184, 0x9989, 0xC185, 0xBCD1, 0xC186, 0x998A, 0xC187, 0x998B, 0xC188, 0x998C, 0xC189, 0x998D, 0xC18A, 0x998E, 0xC18B, 0x998F, + 0xC18C, 0xBCD2, 0xC18D, 0xBCD3, 0xC18E, 0xBCD4, 0xC18F, 0x9990, 0xC190, 0xBCD5, 0xC191, 0x9991, 0xC192, 0x9992, 0xC193, 0x9993, + 0xC194, 0xBCD6, 0xC195, 0x9994, 0xC196, 0xBCD7, 0xC197, 0x9995, 0xC198, 0x9996, 0xC199, 0x9997, 0xC19A, 0x9998, 0xC19B, 0x9999, + 0xC19C, 0xBCD8, 0xC19D, 0xBCD9, 0xC19E, 0x999A, 0xC19F, 0xBCDA, 0xC1A0, 0x999B, 0xC1A1, 0xBCDB, 0xC1A2, 0x999C, 0xC1A3, 0x999D, + 0xC1A4, 0x999E, 0xC1A5, 0xBCDC, 0xC1A6, 0x999F, 0xC1A7, 0x99A0, 0xC1A8, 0xBCDD, 0xC1A9, 0xBCDE, 0xC1AA, 0x99A1, 0xC1AB, 0x99A2, + 0xC1AC, 0xBCDF, 0xC1AD, 0x99A3, 0xC1AE, 0x99A4, 0xC1AF, 0x99A5, 0xC1B0, 0xBCE0, 0xC1B1, 0x99A6, 0xC1B2, 0x99A7, 0xC1B3, 0x99A8, + 0xC1B4, 0x99A9, 0xC1B5, 0x99AA, 0xC1B6, 0x99AB, 0xC1B7, 0x99AC, 0xC1B8, 0x99AD, 0xC1B9, 0x99AE, 0xC1BA, 0x99AF, 0xC1BB, 0x99B0, + 0xC1BC, 0x99B1, 0xC1BD, 0xBCE1, 0xC1BE, 0x99B2, 0xC1BF, 0x99B3, 0xC1C0, 0x99B4, 0xC1C1, 0x99B5, 0xC1C2, 0x99B6, 0xC1C3, 0x99B7, + 0xC1C4, 0xBCE2, 0xC1C5, 0x99B8, 0xC1C6, 0x99B9, 0xC1C7, 0x99BA, 0xC1C8, 0xBCE3, 0xC1C9, 0x99BB, 0xC1CA, 0x99BC, 0xC1CB, 0x99BD, + 0xC1CC, 0xBCE4, 0xC1CD, 0x99BE, 0xC1CE, 0x99BF, 0xC1CF, 0x99C0, 0xC1D0, 0x99C1, 0xC1D1, 0x99C2, 0xC1D2, 0x99C3, 0xC1D3, 0x99C4, + 0xC1D4, 0xBCE5, 0xC1D5, 0x99C5, 0xC1D6, 0x99C6, 0xC1D7, 0xBCE6, 0xC1D8, 0xBCE7, 0xC1D9, 0x99C7, 0xC1DA, 0x99C8, 0xC1DB, 0x99C9, + 0xC1DC, 0x99CA, 0xC1DD, 0x99CB, 0xC1DE, 0x99CC, 0xC1DF, 0x99CD, 0xC1E0, 0xBCE8, 0xC1E1, 0x99CE, 0xC1E2, 0x99CF, 0xC1E3, 0x99D0, + 0xC1E4, 0xBCE9, 0xC1E5, 0x99D1, 0xC1E6, 0x99D2, 0xC1E7, 0x99D3, 0xC1E8, 0xBCEA, 0xC1E9, 0x99D4, 0xC1EA, 0x99D5, 0xC1EB, 0x99D6, + 0xC1EC, 0x99D7, 0xC1ED, 0x99D8, 0xC1EE, 0x99D9, 0xC1EF, 0x99DA, 0xC1F0, 0xBCEB, 0xC1F1, 0xBCEC, 0xC1F2, 0x99DB, 0xC1F3, 0xBCED, + 0xC1F4, 0x99DC, 0xC1F5, 0x99DD, 0xC1F6, 0x99DE, 0xC1F7, 0x99DF, 0xC1F8, 0x99E0, 0xC1F9, 0x99E1, 0xC1FA, 0x99E2, 0xC1FB, 0x99E3, + 0xC1FC, 0xBCEE, 0xC1FD, 0xBCEF, 0xC1FE, 0x99E4, 0xC1FF, 0x99E5, 0xC200, 0xBCF0, 0xC201, 0x99E6, 0xC202, 0x99E7, 0xC203, 0x99E8, + 0xC204, 0xBCF1, 0xC205, 0x99E9, 0xC206, 0x99EA, 0xC207, 0x99EB, 0xC208, 0x99EC, 0xC209, 0x99ED, 0xC20A, 0x99EE, 0xC20B, 0x99EF, + 0xC20C, 0xBCF2, 0xC20D, 0xBCF3, 0xC20E, 0x99F0, 0xC20F, 0xBCF4, 0xC210, 0x99F1, 0xC211, 0xBCF5, 0xC212, 0x99F2, 0xC213, 0x99F3, + 0xC214, 0x99F4, 0xC215, 0x99F5, 0xC216, 0x99F6, 0xC217, 0x99F7, 0xC218, 0xBCF6, 0xC219, 0xBCF7, 0xC21A, 0x99F8, 0xC21B, 0x99F9, + 0xC21C, 0xBCF8, 0xC21D, 0x99FA, 0xC21E, 0x99FB, 0xC21F, 0xBCF9, 0xC220, 0xBCFA, 0xC221, 0x99FC, 0xC222, 0x99FD, 0xC223, 0x99FE, + 0xC224, 0x9A41, 0xC225, 0x9A42, 0xC226, 0x9A43, 0xC227, 0x9A44, 0xC228, 0xBCFB, 0xC229, 0xBCFC, 0xC22A, 0x9A45, 0xC22B, 0xBCFD, + 0xC22C, 0x9A46, 0xC22D, 0xBCFE, 0xC22E, 0x9A47, 0xC22F, 0xBDA1, 0xC230, 0x9A48, 0xC231, 0xBDA2, 0xC232, 0xBDA3, 0xC233, 0x9A49, + 0xC234, 0xBDA4, 0xC235, 0x9A4A, 0xC236, 0x9A4B, 0xC237, 0x9A4C, 0xC238, 0x9A4D, 0xC239, 0x9A4E, 0xC23A, 0x9A4F, 0xC23B, 0x9A50, + 0xC23C, 0x9A51, 0xC23D, 0x9A52, 0xC23E, 0x9A53, 0xC23F, 0x9A54, 0xC240, 0x9A55, 0xC241, 0x9A56, 0xC242, 0x9A57, 0xC243, 0x9A58, + 0xC244, 0x9A59, 0xC245, 0x9A5A, 0xC246, 0x9A61, 0xC247, 0x9A62, 0xC248, 0xBDA5, 0xC249, 0x9A63, 0xC24A, 0x9A64, 0xC24B, 0x9A65, + 0xC24C, 0x9A66, 0xC24D, 0x9A67, 0xC24E, 0x9A68, 0xC24F, 0x9A69, 0xC250, 0xBDA6, 0xC251, 0xBDA7, 0xC252, 0x9A6A, 0xC253, 0x9A6B, + 0xC254, 0xBDA8, 0xC255, 0x9A6C, 0xC256, 0x9A6D, 0xC257, 0x9A6E, 0xC258, 0xBDA9, 0xC259, 0x9A6F, 0xC25A, 0x9A70, 0xC25B, 0x9A71, + 0xC25C, 0x9A72, 0xC25D, 0x9A73, 0xC25E, 0x9A74, 0xC25F, 0x9A75, 0xC260, 0xBDAA, 0xC261, 0x9A76, 0xC262, 0x9A77, 0xC263, 0x9A78, + 0xC264, 0x9A79, 0xC265, 0xBDAB, 0xC266, 0x9A7A, 0xC267, 0x9A81, 0xC268, 0x9A82, 0xC269, 0x9A83, 0xC26A, 0x9A84, 0xC26B, 0x9A85, + 0xC26C, 0xBDAC, 0xC26D, 0xBDAD, 0xC26E, 0x9A86, 0xC26F, 0x9A87, 0xC270, 0xBDAE, 0xC271, 0x9A88, 0xC272, 0x9A89, 0xC273, 0x9A8A, + 0xC274, 0xBDAF, 0xC275, 0x9A8B, 0xC276, 0x9A8C, 0xC277, 0x9A8D, 0xC278, 0x9A8E, 0xC279, 0x9A8F, 0xC27A, 0x9A90, 0xC27B, 0x9A91, + 0xC27C, 0xBDB0, 0xC27D, 0xBDB1, 0xC27E, 0x9A92, 0xC27F, 0xBDB2, 0xC280, 0x9A93, 0xC281, 0xBDB3, 0xC282, 0x9A94, 0xC283, 0x9A95, + 0xC284, 0x9A96, 0xC285, 0x9A97, 0xC286, 0x9A98, 0xC287, 0x9A99, 0xC288, 0xBDB4, 0xC289, 0xBDB5, 0xC28A, 0x9A9A, 0xC28B, 0x9A9B, + 0xC28C, 0x9A9C, 0xC28D, 0x9A9D, 0xC28E, 0x9A9E, 0xC28F, 0x9A9F, 0xC290, 0xBDB6, 0xC291, 0x9AA0, 0xC292, 0x9AA1, 0xC293, 0x9AA2, + 0xC294, 0x9AA3, 0xC295, 0x9AA4, 0xC296, 0x9AA5, 0xC297, 0x9AA6, 0xC298, 0xBDB7, 0xC299, 0x9AA7, 0xC29A, 0x9AA8, 0xC29B, 0xBDB8, + 0xC29C, 0x9AA9, 0xC29D, 0xBDB9, 0xC29E, 0x9AAA, 0xC29F, 0x9AAB, 0xC2A0, 0x9AAC, 0xC2A1, 0x9AAD, 0xC2A2, 0x9AAE, 0xC2A3, 0x9AAF, + 0xC2A4, 0xBDBA, 0xC2A5, 0xBDBB, 0xC2A6, 0x9AB0, 0xC2A7, 0x9AB1, 0xC2A8, 0xBDBC, 0xC2A9, 0x9AB2, 0xC2AA, 0x9AB3, 0xC2AB, 0x9AB4, + 0xC2AC, 0xBDBD, 0xC2AD, 0xBDBE, 0xC2AE, 0x9AB5, 0xC2AF, 0x9AB6, 0xC2B0, 0x9AB7, 0xC2B1, 0x9AB8, 0xC2B2, 0x9AB9, 0xC2B3, 0x9ABA, + 0xC2B4, 0xBDBF, 0xC2B5, 0xBDC0, 0xC2B6, 0x9ABB, 0xC2B7, 0xBDC1, 0xC2B8, 0x9ABC, 0xC2B9, 0xBDC2, 0xC2BA, 0x9ABD, 0xC2BB, 0x9ABE, + 0xC2BC, 0x9ABF, 0xC2BD, 0x9AC0, 0xC2BE, 0x9AC1, 0xC2BF, 0x9AC2, 0xC2C0, 0x9AC3, 0xC2C1, 0x9AC4, 0xC2C2, 0x9AC5, 0xC2C3, 0x9AC6, + 0xC2C4, 0x9AC7, 0xC2C5, 0x9AC8, 0xC2C6, 0x9AC9, 0xC2C7, 0x9ACA, 0xC2C8, 0x9ACB, 0xC2C9, 0x9ACC, 0xC2CA, 0x9ACD, 0xC2CB, 0x9ACE, + 0xC2CC, 0x9ACF, 0xC2CD, 0x9AD0, 0xC2CE, 0x9AD1, 0xC2CF, 0x9AD2, 0xC2D0, 0x9AD3, 0xC2D1, 0x9AD4, 0xC2D2, 0x9AD5, 0xC2D3, 0x9AD6, + 0xC2D4, 0x9AD7, 0xC2D5, 0x9AD8, 0xC2D6, 0x9AD9, 0xC2D7, 0x9ADA, 0xC2D8, 0x9ADB, 0xC2D9, 0x9ADC, 0xC2DA, 0x9ADD, 0xC2DB, 0x9ADE, + 0xC2DC, 0xBDC3, 0xC2DD, 0xBDC4, 0xC2DE, 0x9ADF, 0xC2DF, 0x9AE0, 0xC2E0, 0xBDC5, 0xC2E1, 0x9AE1, 0xC2E2, 0x9AE2, 0xC2E3, 0xBDC6, + 0xC2E4, 0xBDC7, 0xC2E5, 0x9AE3, 0xC2E6, 0x9AE4, 0xC2E7, 0x9AE5, 0xC2E8, 0x9AE6, 0xC2E9, 0x9AE7, 0xC2EA, 0x9AE8, 0xC2EB, 0xBDC8, + 0xC2EC, 0xBDC9, 0xC2ED, 0xBDCA, 0xC2EE, 0x9AE9, 0xC2EF, 0xBDCB, 0xC2F0, 0x9AEA, 0xC2F1, 0xBDCC, 0xC2F2, 0x9AEB, 0xC2F3, 0x9AEC, + 0xC2F4, 0x9AED, 0xC2F5, 0x9AEE, 0xC2F6, 0xBDCD, 0xC2F7, 0x9AEF, 0xC2F8, 0xBDCE, 0xC2F9, 0xBDCF, 0xC2FA, 0x9AF0, 0xC2FB, 0xBDD0, + 0xC2FC, 0xBDD1, 0xC2FD, 0x9AF1, 0xC2FE, 0x9AF2, 0xC2FF, 0x9AF3, 0xC300, 0xBDD2, 0xC301, 0x9AF4, 0xC302, 0x9AF5, 0xC303, 0x9AF6, + 0xC304, 0x9AF7, 0xC305, 0x9AF8, 0xC306, 0x9AF9, 0xC307, 0x9AFA, 0xC308, 0xBDD3, 0xC309, 0xBDD4, 0xC30A, 0x9AFB, 0xC30B, 0x9AFC, + 0xC30C, 0xBDD5, 0xC30D, 0xBDD6, 0xC30E, 0x9AFD, 0xC30F, 0x9AFE, 0xC310, 0x9B41, 0xC311, 0x9B42, 0xC312, 0x9B43, 0xC313, 0xBDD7, + 0xC314, 0xBDD8, 0xC315, 0xBDD9, 0xC316, 0x9B44, 0xC317, 0x9B45, 0xC318, 0xBDDA, 0xC319, 0x9B46, 0xC31A, 0x9B47, 0xC31B, 0x9B48, + 0xC31C, 0xBDDB, 0xC31D, 0x9B49, 0xC31E, 0x9B4A, 0xC31F, 0x9B4B, 0xC320, 0x9B4C, 0xC321, 0x9B4D, 0xC322, 0x9B4E, 0xC323, 0x9B4F, + 0xC324, 0xBDDC, 0xC325, 0xBDDD, 0xC326, 0x9B50, 0xC327, 0x9B51, 0xC328, 0xBDDE, 0xC329, 0xBDDF, 0xC32A, 0x9B52, 0xC32B, 0x9B53, + 0xC32C, 0x9B54, 0xC32D, 0x9B55, 0xC32E, 0x9B56, 0xC32F, 0x9B57, 0xC330, 0x9B58, 0xC331, 0x9B59, 0xC332, 0x9B5A, 0xC333, 0x9B61, + 0xC334, 0x9B62, 0xC335, 0x9B63, 0xC336, 0x9B64, 0xC337, 0x9B65, 0xC338, 0x9B66, 0xC339, 0x9B67, 0xC33A, 0x9B68, 0xC33B, 0x9B69, + 0xC33C, 0x9B6A, 0xC33D, 0x9B6B, 0xC33E, 0x9B6C, 0xC33F, 0x9B6D, 0xC340, 0x9B6E, 0xC341, 0x9B6F, 0xC342, 0x9B70, 0xC343, 0x9B71, + 0xC344, 0x9B72, 0xC345, 0xBDE0, 0xC346, 0x9B73, 0xC347, 0x9B74, 0xC348, 0x9B75, 0xC349, 0x9B76, 0xC34A, 0x9B77, 0xC34B, 0x9B78, + 0xC34C, 0x9B79, 0xC34D, 0x9B7A, 0xC34E, 0x9B81, 0xC34F, 0x9B82, 0xC350, 0x9B83, 0xC351, 0x9B84, 0xC352, 0x9B85, 0xC353, 0x9B86, + 0xC354, 0x9B87, 0xC355, 0x9B88, 0xC356, 0x9B89, 0xC357, 0x9B8A, 0xC358, 0x9B8B, 0xC359, 0x9B8C, 0xC35A, 0x9B8D, 0xC35B, 0x9B8E, + 0xC35C, 0x9B8F, 0xC35D, 0x9B90, 0xC35E, 0x9B91, 0xC35F, 0x9B92, 0xC360, 0x9B93, 0xC361, 0x9B94, 0xC362, 0x9B95, 0xC363, 0x9B96, + 0xC364, 0x9B97, 0xC365, 0x9B98, 0xC366, 0x9B99, 0xC367, 0x9B9A, 0xC368, 0xBDE1, 0xC369, 0xBDE2, 0xC36A, 0x9B9B, 0xC36B, 0x9B9C, + 0xC36C, 0xBDE3, 0xC36D, 0x9B9D, 0xC36E, 0x9B9E, 0xC36F, 0x9B9F, 0xC370, 0xBDE4, 0xC371, 0x9BA0, 0xC372, 0xBDE5, 0xC373, 0x9BA1, + 0xC374, 0x9BA2, 0xC375, 0x9BA3, 0xC376, 0x9BA4, 0xC377, 0x9BA5, 0xC378, 0xBDE6, 0xC379, 0xBDE7, 0xC37A, 0x9BA6, 0xC37B, 0x9BA7, + 0xC37C, 0xBDE8, 0xC37D, 0xBDE9, 0xC37E, 0x9BA8, 0xC37F, 0x9BA9, 0xC380, 0x9BAA, 0xC381, 0x9BAB, 0xC382, 0x9BAC, 0xC383, 0x9BAD, + 0xC384, 0xBDEA, 0xC385, 0x9BAE, 0xC386, 0x9BAF, 0xC387, 0x9BB0, 0xC388, 0xBDEB, 0xC389, 0x9BB1, 0xC38A, 0x9BB2, 0xC38B, 0x9BB3, + 0xC38C, 0xBDEC, 0xC38D, 0x9BB4, 0xC38E, 0x9BB5, 0xC38F, 0x9BB6, 0xC390, 0x9BB7, 0xC391, 0x9BB8, 0xC392, 0x9BB9, 0xC393, 0x9BBA, + 0xC394, 0x9BBB, 0xC395, 0x9BBC, 0xC396, 0x9BBD, 0xC397, 0x9BBE, 0xC398, 0x9BBF, 0xC399, 0x9BC0, 0xC39A, 0x9BC1, 0xC39B, 0x9BC2, + 0xC39C, 0x9BC3, 0xC39D, 0x9BC4, 0xC39E, 0x9BC5, 0xC39F, 0x9BC6, 0xC3A0, 0x9BC7, 0xC3A1, 0x9BC8, 0xC3A2, 0x9BC9, 0xC3A3, 0x9BCA, + 0xC3A4, 0x9BCB, 0xC3A5, 0x9BCC, 0xC3A6, 0x9BCD, 0xC3A7, 0x9BCE, 0xC3A8, 0x9BCF, 0xC3A9, 0x9BD0, 0xC3AA, 0x9BD1, 0xC3AB, 0x9BD2, + 0xC3AC, 0x9BD3, 0xC3AD, 0x9BD4, 0xC3AE, 0x9BD5, 0xC3AF, 0x9BD6, 0xC3B0, 0x9BD7, 0xC3B1, 0x9BD8, 0xC3B2, 0x9BD9, 0xC3B3, 0x9BDA, + 0xC3B4, 0x9BDB, 0xC3B5, 0x9BDC, 0xC3B6, 0x9BDD, 0xC3B7, 0x9BDE, 0xC3B8, 0x9BDF, 0xC3B9, 0x9BE0, 0xC3BA, 0x9BE1, 0xC3BB, 0x9BE2, + 0xC3BC, 0x9BE3, 0xC3BD, 0x9BE4, 0xC3BE, 0x9BE5, 0xC3BF, 0x9BE6, 0xC3C0, 0xBDED, 0xC3C1, 0x9BE7, 0xC3C2, 0x9BE8, 0xC3C3, 0x9BE9, + 0xC3C4, 0x9BEA, 0xC3C5, 0x9BEB, 0xC3C6, 0x9BEC, 0xC3C7, 0x9BED, 0xC3C8, 0x9BEE, 0xC3C9, 0x9BEF, 0xC3CA, 0x9BF0, 0xC3CB, 0x9BF1, + 0xC3CC, 0x9BF2, 0xC3CD, 0x9BF3, 0xC3CE, 0x9BF4, 0xC3CF, 0x9BF5, 0xC3D0, 0x9BF6, 0xC3D1, 0x9BF7, 0xC3D2, 0x9BF8, 0xC3D3, 0x9BF9, + 0xC3D4, 0x9BFA, 0xC3D5, 0x9BFB, 0xC3D6, 0x9BFC, 0xC3D7, 0x9BFD, 0xC3D8, 0xBDEE, 0xC3D9, 0xBDEF, 0xC3DA, 0x9BFE, 0xC3DB, 0x9C41, + 0xC3DC, 0xBDF0, 0xC3DD, 0x9C42, 0xC3DE, 0x9C43, 0xC3DF, 0xBDF1, 0xC3E0, 0xBDF2, 0xC3E1, 0x9C44, 0xC3E2, 0xBDF3, 0xC3E3, 0x9C45, + 0xC3E4, 0x9C46, 0xC3E5, 0x9C47, 0xC3E6, 0x9C48, 0xC3E7, 0x9C49, 0xC3E8, 0xBDF4, 0xC3E9, 0xBDF5, 0xC3EA, 0x9C4A, 0xC3EB, 0x9C4B, + 0xC3EC, 0x9C4C, 0xC3ED, 0xBDF6, 0xC3EE, 0x9C4D, 0xC3EF, 0x9C4E, 0xC3F0, 0x9C4F, 0xC3F1, 0x9C50, 0xC3F2, 0x9C51, 0xC3F3, 0x9C52, + 0xC3F4, 0xBDF7, 0xC3F5, 0xBDF8, 0xC3F6, 0x9C53, 0xC3F7, 0x9C54, 0xC3F8, 0xBDF9, 0xC3F9, 0x9C55, 0xC3FA, 0x9C56, 0xC3FB, 0x9C57, + 0xC3FC, 0x9C58, 0xC3FD, 0x9C59, 0xC3FE, 0x9C5A, 0xC3FF, 0x9C61, 0xC400, 0x9C62, 0xC401, 0x9C63, 0xC402, 0x9C64, 0xC403, 0x9C65, + 0xC404, 0x9C66, 0xC405, 0x9C67, 0xC406, 0x9C68, 0xC407, 0x9C69, 0xC408, 0xBDFA, 0xC409, 0x9C6A, 0xC40A, 0x9C6B, 0xC40B, 0x9C6C, + 0xC40C, 0x9C6D, 0xC40D, 0x9C6E, 0xC40E, 0x9C6F, 0xC40F, 0x9C70, 0xC410, 0xBDFB, 0xC411, 0x9C71, 0xC412, 0x9C72, 0xC413, 0x9C73, + 0xC414, 0x9C74, 0xC415, 0x9C75, 0xC416, 0x9C76, 0xC417, 0x9C77, 0xC418, 0x9C78, 0xC419, 0x9C79, 0xC41A, 0x9C7A, 0xC41B, 0x9C81, + 0xC41C, 0x9C82, 0xC41D, 0x9C83, 0xC41E, 0x9C84, 0xC41F, 0x9C85, 0xC420, 0x9C86, 0xC421, 0x9C87, 0xC422, 0x9C88, 0xC423, 0x9C89, + 0xC424, 0xBDFC, 0xC425, 0x9C8A, 0xC426, 0x9C8B, 0xC427, 0x9C8C, 0xC428, 0x9C8D, 0xC429, 0x9C8E, 0xC42A, 0x9C8F, 0xC42B, 0x9C90, + 0xC42C, 0xBDFD, 0xC42D, 0x9C91, 0xC42E, 0x9C92, 0xC42F, 0x9C93, 0xC430, 0xBDFE, 0xC431, 0x9C94, 0xC432, 0x9C95, 0xC433, 0x9C96, + 0xC434, 0xBEA1, 0xC435, 0x9C97, 0xC436, 0x9C98, 0xC437, 0x9C99, 0xC438, 0x9C9A, 0xC439, 0x9C9B, 0xC43A, 0x9C9C, 0xC43B, 0x9C9D, + 0xC43C, 0xBEA2, 0xC43D, 0xBEA3, 0xC43E, 0x9C9E, 0xC43F, 0x9C9F, 0xC440, 0x9CA0, 0xC441, 0x9CA1, 0xC442, 0x9CA2, 0xC443, 0x9CA3, + 0xC444, 0x9CA4, 0xC445, 0x9CA5, 0xC446, 0x9CA6, 0xC447, 0x9CA7, 0xC448, 0xBEA4, 0xC449, 0x9CA8, 0xC44A, 0x9CA9, 0xC44B, 0x9CAA, + 0xC44C, 0x9CAB, 0xC44D, 0x9CAC, 0xC44E, 0x9CAD, 0xC44F, 0x9CAE, 0xC450, 0x9CAF, 0xC451, 0x9CB0, 0xC452, 0x9CB1, 0xC453, 0x9CB2, + 0xC454, 0x9CB3, 0xC455, 0x9CB4, 0xC456, 0x9CB5, 0xC457, 0x9CB6, 0xC458, 0x9CB7, 0xC459, 0x9CB8, 0xC45A, 0x9CB9, 0xC45B, 0x9CBA, + 0xC45C, 0x9CBB, 0xC45D, 0x9CBC, 0xC45E, 0x9CBD, 0xC45F, 0x9CBE, 0xC460, 0x9CBF, 0xC461, 0x9CC0, 0xC462, 0x9CC1, 0xC463, 0x9CC2, + 0xC464, 0xBEA5, 0xC465, 0xBEA6, 0xC466, 0x9CC3, 0xC467, 0x9CC4, 0xC468, 0xBEA7, 0xC469, 0x9CC5, 0xC46A, 0x9CC6, 0xC46B, 0x9CC7, + 0xC46C, 0xBEA8, 0xC46D, 0x9CC8, 0xC46E, 0x9CC9, 0xC46F, 0x9CCA, 0xC470, 0x9CCB, 0xC471, 0x9CCC, 0xC472, 0x9CCD, 0xC473, 0x9CCE, + 0xC474, 0xBEA9, 0xC475, 0xBEAA, 0xC476, 0x9CCF, 0xC477, 0x9CD0, 0xC478, 0x9CD1, 0xC479, 0xBEAB, 0xC47A, 0x9CD2, 0xC47B, 0x9CD3, + 0xC47C, 0x9CD4, 0xC47D, 0x9CD5, 0xC47E, 0x9CD6, 0xC47F, 0x9CD7, 0xC480, 0xBEAC, 0xC481, 0x9CD8, 0xC482, 0x9CD9, 0xC483, 0x9CDA, + 0xC484, 0x9CDB, 0xC485, 0x9CDC, 0xC486, 0x9CDD, 0xC487, 0x9CDE, 0xC488, 0x9CDF, 0xC489, 0x9CE0, 0xC48A, 0x9CE1, 0xC48B, 0x9CE2, + 0xC48C, 0x9CE3, 0xC48D, 0x9CE4, 0xC48E, 0x9CE5, 0xC48F, 0x9CE6, 0xC490, 0x9CE7, 0xC491, 0x9CE8, 0xC492, 0x9CE9, 0xC493, 0x9CEA, + 0xC494, 0xBEAD, 0xC495, 0x9CEB, 0xC496, 0x9CEC, 0xC497, 0x9CED, 0xC498, 0x9CEE, 0xC499, 0x9CEF, 0xC49A, 0x9CF0, 0xC49B, 0x9CF1, + 0xC49C, 0xBEAE, 0xC49D, 0x9CF2, 0xC49E, 0x9CF3, 0xC49F, 0x9CF4, 0xC4A0, 0x9CF5, 0xC4A1, 0x9CF6, 0xC4A2, 0x9CF7, 0xC4A3, 0x9CF8, + 0xC4A4, 0x9CF9, 0xC4A5, 0x9CFA, 0xC4A6, 0x9CFB, 0xC4A7, 0x9CFC, 0xC4A8, 0x9CFD, 0xC4A9, 0x9CFE, 0xC4AA, 0x9D41, 0xC4AB, 0x9D42, + 0xC4AC, 0x9D43, 0xC4AD, 0x9D44, 0xC4AE, 0x9D45, 0xC4AF, 0x9D46, 0xC4B0, 0x9D47, 0xC4B1, 0x9D48, 0xC4B2, 0x9D49, 0xC4B3, 0x9D4A, + 0xC4B4, 0x9D4B, 0xC4B5, 0x9D4C, 0xC4B6, 0x9D4D, 0xC4B7, 0x9D4E, 0xC4B8, 0xBEAF, 0xC4B9, 0x9D4F, 0xC4BA, 0x9D50, 0xC4BB, 0x9D51, + 0xC4BC, 0xBEB0, 0xC4BD, 0x9D52, 0xC4BE, 0x9D53, 0xC4BF, 0x9D54, 0xC4C0, 0x9D55, 0xC4C1, 0x9D56, 0xC4C2, 0x9D57, 0xC4C3, 0x9D58, + 0xC4C4, 0x9D59, 0xC4C5, 0x9D5A, 0xC4C6, 0x9D61, 0xC4C7, 0x9D62, 0xC4C8, 0x9D63, 0xC4C9, 0x9D64, 0xC4CA, 0x9D65, 0xC4CB, 0x9D66, + 0xC4CC, 0x9D67, 0xC4CD, 0x9D68, 0xC4CE, 0x9D69, 0xC4CF, 0x9D6A, 0xC4D0, 0x9D6B, 0xC4D1, 0x9D6C, 0xC4D2, 0x9D6D, 0xC4D3, 0x9D6E, + 0xC4D4, 0x9D6F, 0xC4D5, 0x9D70, 0xC4D6, 0x9D71, 0xC4D7, 0x9D72, 0xC4D8, 0x9D73, 0xC4D9, 0x9D74, 0xC4DA, 0x9D75, 0xC4DB, 0x9D76, + 0xC4DC, 0x9D77, 0xC4DD, 0x9D78, 0xC4DE, 0x9D79, 0xC4DF, 0x9D7A, 0xC4E0, 0x9D81, 0xC4E1, 0x9D82, 0xC4E2, 0x9D83, 0xC4E3, 0x9D84, + 0xC4E4, 0x9D85, 0xC4E5, 0x9D86, 0xC4E6, 0x9D87, 0xC4E7, 0x9D88, 0xC4E8, 0x9D89, 0xC4E9, 0xBEB1, 0xC4EA, 0x9D8A, 0xC4EB, 0x9D8B, + 0xC4EC, 0x9D8C, 0xC4ED, 0x9D8D, 0xC4EE, 0x9D8E, 0xC4EF, 0x9D8F, 0xC4F0, 0xBEB2, 0xC4F1, 0xBEB3, 0xC4F2, 0x9D90, 0xC4F3, 0x9D91, + 0xC4F4, 0xBEB4, 0xC4F5, 0x9D92, 0xC4F6, 0x9D93, 0xC4F7, 0x9D94, 0xC4F8, 0xBEB5, 0xC4F9, 0x9D95, 0xC4FA, 0xBEB6, 0xC4FB, 0x9D96, + 0xC4FC, 0x9D97, 0xC4FD, 0x9D98, 0xC4FE, 0x9D99, 0xC4FF, 0xBEB7, 0xC500, 0xBEB8, 0xC501, 0xBEB9, 0xC502, 0x9D9A, 0xC503, 0x9D9B, + 0xC504, 0x9D9C, 0xC505, 0x9D9D, 0xC506, 0x9D9E, 0xC507, 0x9D9F, 0xC508, 0x9DA0, 0xC509, 0x9DA1, 0xC50A, 0x9DA2, 0xC50B, 0x9DA3, + 0xC50C, 0xBEBA, 0xC50D, 0x9DA4, 0xC50E, 0x9DA5, 0xC50F, 0x9DA6, 0xC510, 0xBEBB, 0xC511, 0x9DA7, 0xC512, 0x9DA8, 0xC513, 0x9DA9, + 0xC514, 0xBEBC, 0xC515, 0x9DAA, 0xC516, 0x9DAB, 0xC517, 0x9DAC, 0xC518, 0x9DAD, 0xC519, 0x9DAE, 0xC51A, 0x9DAF, 0xC51B, 0x9DB0, + 0xC51C, 0xBEBD, 0xC51D, 0x9DB1, 0xC51E, 0x9DB2, 0xC51F, 0x9DB3, 0xC520, 0x9DB4, 0xC521, 0x9DB5, 0xC522, 0x9DB6, 0xC523, 0x9DB7, + 0xC524, 0x9DB8, 0xC525, 0x9DB9, 0xC526, 0x9DBA, 0xC527, 0x9DBB, 0xC528, 0xBEBE, 0xC529, 0xBEBF, 0xC52A, 0x9DBC, 0xC52B, 0x9DBD, + 0xC52C, 0xBEC0, 0xC52D, 0x9DBE, 0xC52E, 0x9DBF, 0xC52F, 0x9DC0, 0xC530, 0xBEC1, 0xC531, 0x9DC1, 0xC532, 0x9DC2, 0xC533, 0x9DC3, + 0xC534, 0x9DC4, 0xC535, 0x9DC5, 0xC536, 0x9DC6, 0xC537, 0x9DC7, 0xC538, 0xBEC2, 0xC539, 0xBEC3, 0xC53A, 0x9DC8, 0xC53B, 0xBEC4, + 0xC53C, 0x9DC9, 0xC53D, 0xBEC5, 0xC53E, 0x9DCA, 0xC53F, 0x9DCB, 0xC540, 0x9DCC, 0xC541, 0x9DCD, 0xC542, 0x9DCE, 0xC543, 0x9DCF, + 0xC544, 0xBEC6, 0xC545, 0xBEC7, 0xC546, 0x9DD0, 0xC547, 0x9DD1, 0xC548, 0xBEC8, 0xC549, 0xBEC9, 0xC54A, 0xBECA, 0xC54B, 0x9DD2, + 0xC54C, 0xBECB, 0xC54D, 0xBECC, 0xC54E, 0xBECD, 0xC54F, 0x9DD3, 0xC550, 0x9DD4, 0xC551, 0x9DD5, 0xC552, 0x9DD6, 0xC553, 0xBECE, + 0xC554, 0xBECF, 0xC555, 0xBED0, 0xC556, 0x9DD7, 0xC557, 0xBED1, 0xC558, 0xBED2, 0xC559, 0xBED3, 0xC55A, 0x9DD8, 0xC55B, 0x9DD9, + 0xC55C, 0x9DDA, 0xC55D, 0xBED4, 0xC55E, 0xBED5, 0xC55F, 0x9DDB, 0xC560, 0xBED6, 0xC561, 0xBED7, 0xC562, 0x9DDC, 0xC563, 0x9DDD, + 0xC564, 0xBED8, 0xC565, 0x9DDE, 0xC566, 0x9DDF, 0xC567, 0x9DE0, 0xC568, 0xBED9, 0xC569, 0x9DE1, 0xC56A, 0x9DE2, 0xC56B, 0x9DE3, + 0xC56C, 0x9DE4, 0xC56D, 0x9DE5, 0xC56E, 0x9DE6, 0xC56F, 0x9DE7, 0xC570, 0xBEDA, 0xC571, 0xBEDB, 0xC572, 0x9DE8, 0xC573, 0xBEDC, + 0xC574, 0xBEDD, 0xC575, 0xBEDE, 0xC576, 0x9DE9, 0xC577, 0x9DEA, 0xC578, 0x9DEB, 0xC579, 0x9DEC, 0xC57A, 0x9DED, 0xC57B, 0x9DEE, + 0xC57C, 0xBEDF, 0xC57D, 0xBEE0, 0xC57E, 0x9DEF, 0xC57F, 0x9DF0, 0xC580, 0xBEE1, 0xC581, 0x9DF1, 0xC582, 0x9DF2, 0xC583, 0x9DF3, + 0xC584, 0xBEE2, 0xC585, 0x9DF4, 0xC586, 0x9DF5, 0xC587, 0xBEE3, 0xC588, 0x9DF6, 0xC589, 0x9DF7, 0xC58A, 0x9DF8, 0xC58B, 0x9DF9, + 0xC58C, 0xBEE4, 0xC58D, 0xBEE5, 0xC58E, 0x9DFA, 0xC58F, 0xBEE6, 0xC590, 0x9DFB, 0xC591, 0xBEE7, 0xC592, 0x9DFC, 0xC593, 0x9DFD, + 0xC594, 0x9DFE, 0xC595, 0xBEE8, 0xC596, 0x9E41, 0xC597, 0xBEE9, 0xC598, 0xBEEA, 0xC599, 0x9E42, 0xC59A, 0x9E43, 0xC59B, 0x9E44, + 0xC59C, 0xBEEB, 0xC59D, 0x9E45, 0xC59E, 0x9E46, 0xC59F, 0x9E47, 0xC5A0, 0xBEEC, 0xC5A1, 0x9E48, 0xC5A2, 0x9E49, 0xC5A3, 0x9E4A, + 0xC5A4, 0x9E4B, 0xC5A5, 0x9E4C, 0xC5A6, 0x9E4D, 0xC5A7, 0x9E4E, 0xC5A8, 0x9E4F, 0xC5A9, 0xBEED, 0xC5AA, 0x9E50, 0xC5AB, 0x9E51, + 0xC5AC, 0x9E52, 0xC5AD, 0x9E53, 0xC5AE, 0x9E54, 0xC5AF, 0x9E55, 0xC5B0, 0x9E56, 0xC5B1, 0x9E57, 0xC5B2, 0x9E58, 0xC5B3, 0x9E59, + 0xC5B4, 0xBEEE, 0xC5B5, 0xBEEF, 0xC5B6, 0x9E5A, 0xC5B7, 0x9E61, 0xC5B8, 0xBEF0, 0xC5B9, 0xBEF1, 0xC5BA, 0x9E62, 0xC5BB, 0xBEF2, + 0xC5BC, 0xBEF3, 0xC5BD, 0xBEF4, 0xC5BE, 0xBEF5, 0xC5BF, 0x9E63, 0xC5C0, 0x9E64, 0xC5C1, 0x9E65, 0xC5C2, 0x9E66, 0xC5C3, 0x9E67, + 0xC5C4, 0xBEF6, 0xC5C5, 0xBEF7, 0xC5C6, 0xBEF8, 0xC5C7, 0xBEF9, 0xC5C8, 0xBEFA, 0xC5C9, 0xBEFB, 0xC5CA, 0xBEFC, 0xC5CB, 0x9E68, + 0xC5CC, 0xBEFD, 0xC5CD, 0x9E69, 0xC5CE, 0xBEFE, 0xC5CF, 0x9E6A, 0xC5D0, 0xBFA1, 0xC5D1, 0xBFA2, 0xC5D2, 0x9E6B, 0xC5D3, 0x9E6C, + 0xC5D4, 0xBFA3, 0xC5D5, 0x9E6D, 0xC5D6, 0x9E6E, 0xC5D7, 0x9E6F, 0xC5D8, 0xBFA4, 0xC5D9, 0x9E70, 0xC5DA, 0x9E71, 0xC5DB, 0x9E72, + 0xC5DC, 0x9E73, 0xC5DD, 0x9E74, 0xC5DE, 0x9E75, 0xC5DF, 0x9E76, 0xC5E0, 0xBFA5, 0xC5E1, 0xBFA6, 0xC5E2, 0x9E77, 0xC5E3, 0xBFA7, + 0xC5E4, 0x9E78, 0xC5E5, 0xBFA8, 0xC5E6, 0x9E79, 0xC5E7, 0x9E7A, 0xC5E8, 0x9E81, 0xC5E9, 0x9E82, 0xC5EA, 0x9E83, 0xC5EB, 0x9E84, + 0xC5EC, 0xBFA9, 0xC5ED, 0xBFAA, 0xC5EE, 0xBFAB, 0xC5EF, 0x9E85, 0xC5F0, 0xBFAC, 0xC5F1, 0x9E86, 0xC5F2, 0x9E87, 0xC5F3, 0x9E88, + 0xC5F4, 0xBFAD, 0xC5F5, 0x9E89, 0xC5F6, 0xBFAE, 0xC5F7, 0xBFAF, 0xC5F8, 0x9E8A, 0xC5F9, 0x9E8B, 0xC5FA, 0x9E8C, 0xC5FB, 0x9E8D, + 0xC5FC, 0xBFB0, 0xC5FD, 0xBFB1, 0xC5FE, 0xBFB2, 0xC5FF, 0xBFB3, 0xC600, 0xBFB4, 0xC601, 0xBFB5, 0xC602, 0x9E8E, 0xC603, 0x9E8F, + 0xC604, 0x9E90, 0xC605, 0xBFB6, 0xC606, 0xBFB7, 0xC607, 0xBFB8, 0xC608, 0xBFB9, 0xC609, 0x9E91, 0xC60A, 0x9E92, 0xC60B, 0x9E93, + 0xC60C, 0xBFBA, 0xC60D, 0x9E94, 0xC60E, 0x9E95, 0xC60F, 0x9E96, 0xC610, 0xBFBB, 0xC611, 0x9E97, 0xC612, 0x9E98, 0xC613, 0x9E99, + 0xC614, 0x9E9A, 0xC615, 0x9E9B, 0xC616, 0x9E9C, 0xC617, 0x9E9D, 0xC618, 0xBFBC, 0xC619, 0xBFBD, 0xC61A, 0x9E9E, 0xC61B, 0xBFBE, + 0xC61C, 0xBFBF, 0xC61D, 0x9E9F, 0xC61E, 0x9EA0, 0xC61F, 0x9EA1, 0xC620, 0x9EA2, 0xC621, 0x9EA3, 0xC622, 0x9EA4, 0xC623, 0x9EA5, + 0xC624, 0xBFC0, 0xC625, 0xBFC1, 0xC626, 0x9EA6, 0xC627, 0x9EA7, 0xC628, 0xBFC2, 0xC629, 0x9EA8, 0xC62A, 0x9EA9, 0xC62B, 0x9EAA, + 0xC62C, 0xBFC3, 0xC62D, 0xBFC4, 0xC62E, 0xBFC5, 0xC62F, 0x9EAB, 0xC630, 0xBFC6, 0xC631, 0x9EAC, 0xC632, 0x9EAD, 0xC633, 0xBFC7, + 0xC634, 0xBFC8, 0xC635, 0xBFC9, 0xC636, 0x9EAE, 0xC637, 0xBFCA, 0xC638, 0x9EAF, 0xC639, 0xBFCB, 0xC63A, 0x9EB0, 0xC63B, 0xBFCC, + 0xC63C, 0x9EB1, 0xC63D, 0x9EB2, 0xC63E, 0x9EB3, 0xC63F, 0x9EB4, 0xC640, 0xBFCD, 0xC641, 0xBFCE, 0xC642, 0x9EB5, 0xC643, 0x9EB6, + 0xC644, 0xBFCF, 0xC645, 0x9EB7, 0xC646, 0x9EB8, 0xC647, 0x9EB9, 0xC648, 0xBFD0, 0xC649, 0x9EBA, 0xC64A, 0x9EBB, 0xC64B, 0x9EBC, + 0xC64C, 0x9EBD, 0xC64D, 0x9EBE, 0xC64E, 0x9EBF, 0xC64F, 0x9EC0, 0xC650, 0xBFD1, 0xC651, 0xBFD2, 0xC652, 0x9EC1, 0xC653, 0xBFD3, + 0xC654, 0xBFD4, 0xC655, 0xBFD5, 0xC656, 0x9EC2, 0xC657, 0x9EC3, 0xC658, 0x9EC4, 0xC659, 0x9EC5, 0xC65A, 0x9EC6, 0xC65B, 0x9EC7, + 0xC65C, 0xBFD6, 0xC65D, 0xBFD7, 0xC65E, 0x9EC8, 0xC65F, 0x9EC9, 0xC660, 0xBFD8, 0xC661, 0x9ECA, 0xC662, 0x9ECB, 0xC663, 0x9ECC, + 0xC664, 0x9ECD, 0xC665, 0x9ECE, 0xC666, 0x9ECF, 0xC667, 0x9ED0, 0xC668, 0x9ED1, 0xC669, 0x9ED2, 0xC66A, 0x9ED3, 0xC66B, 0x9ED4, + 0xC66C, 0xBFD9, 0xC66D, 0x9ED5, 0xC66E, 0x9ED6, 0xC66F, 0xBFDA, 0xC670, 0x9ED7, 0xC671, 0xBFDB, 0xC672, 0x9ED8, 0xC673, 0x9ED9, + 0xC674, 0x9EDA, 0xC675, 0x9EDB, 0xC676, 0x9EDC, 0xC677, 0x9EDD, 0xC678, 0xBFDC, 0xC679, 0xBFDD, 0xC67A, 0x9EDE, 0xC67B, 0x9EDF, + 0xC67C, 0xBFDE, 0xC67D, 0x9EE0, 0xC67E, 0x9EE1, 0xC67F, 0x9EE2, 0xC680, 0xBFDF, 0xC681, 0x9EE3, 0xC682, 0x9EE4, 0xC683, 0x9EE5, + 0xC684, 0x9EE6, 0xC685, 0x9EE7, 0xC686, 0x9EE8, 0xC687, 0x9EE9, 0xC688, 0xBFE0, 0xC689, 0xBFE1, 0xC68A, 0x9EEA, 0xC68B, 0xBFE2, + 0xC68C, 0x9EEB, 0xC68D, 0xBFE3, 0xC68E, 0x9EEC, 0xC68F, 0x9EED, 0xC690, 0x9EEE, 0xC691, 0x9EEF, 0xC692, 0x9EF0, 0xC693, 0x9EF1, + 0xC694, 0xBFE4, 0xC695, 0xBFE5, 0xC696, 0x9EF2, 0xC697, 0x9EF3, 0xC698, 0xBFE6, 0xC699, 0x9EF4, 0xC69A, 0x9EF5, 0xC69B, 0x9EF6, + 0xC69C, 0xBFE7, 0xC69D, 0x9EF7, 0xC69E, 0x9EF8, 0xC69F, 0x9EF9, 0xC6A0, 0x9EFA, 0xC6A1, 0x9EFB, 0xC6A2, 0x9EFC, 0xC6A3, 0x9EFD, + 0xC6A4, 0xBFE8, 0xC6A5, 0xBFE9, 0xC6A6, 0x9EFE, 0xC6A7, 0xBFEA, 0xC6A8, 0x9F41, 0xC6A9, 0xBFEB, 0xC6AA, 0x9F42, 0xC6AB, 0x9F43, + 0xC6AC, 0x9F44, 0xC6AD, 0x9F45, 0xC6AE, 0x9F46, 0xC6AF, 0x9F47, 0xC6B0, 0xBFEC, 0xC6B1, 0xBFED, 0xC6B2, 0x9F48, 0xC6B3, 0x9F49, + 0xC6B4, 0xBFEE, 0xC6B5, 0x9F4A, 0xC6B6, 0x9F4B, 0xC6B7, 0x9F4C, 0xC6B8, 0xBFEF, 0xC6B9, 0xBFF0, 0xC6BA, 0xBFF1, 0xC6BB, 0x9F4D, + 0xC6BC, 0x9F4E, 0xC6BD, 0x9F4F, 0xC6BE, 0x9F50, 0xC6BF, 0x9F51, 0xC6C0, 0xBFF2, 0xC6C1, 0xBFF3, 0xC6C2, 0x9F52, 0xC6C3, 0xBFF4, + 0xC6C4, 0x9F53, 0xC6C5, 0xBFF5, 0xC6C6, 0x9F54, 0xC6C7, 0x9F55, 0xC6C8, 0x9F56, 0xC6C9, 0x9F57, 0xC6CA, 0x9F58, 0xC6CB, 0x9F59, + 0xC6CC, 0xBFF6, 0xC6CD, 0xBFF7, 0xC6CE, 0x9F5A, 0xC6CF, 0x9F61, 0xC6D0, 0xBFF8, 0xC6D1, 0x9F62, 0xC6D2, 0x9F63, 0xC6D3, 0x9F64, + 0xC6D4, 0xBFF9, 0xC6D5, 0x9F65, 0xC6D6, 0x9F66, 0xC6D7, 0x9F67, 0xC6D8, 0x9F68, 0xC6D9, 0x9F69, 0xC6DA, 0x9F6A, 0xC6DB, 0x9F6B, + 0xC6DC, 0xBFFA, 0xC6DD, 0xBFFB, 0xC6DE, 0x9F6C, 0xC6DF, 0x9F6D, 0xC6E0, 0xBFFC, 0xC6E1, 0xBFFD, 0xC6E2, 0x9F6E, 0xC6E3, 0x9F6F, + 0xC6E4, 0x9F70, 0xC6E5, 0x9F71, 0xC6E6, 0x9F72, 0xC6E7, 0x9F73, 0xC6E8, 0xBFFE, 0xC6E9, 0xC0A1, 0xC6EA, 0x9F74, 0xC6EB, 0x9F75, + 0xC6EC, 0xC0A2, 0xC6ED, 0x9F76, 0xC6EE, 0x9F77, 0xC6EF, 0x9F78, 0xC6F0, 0xC0A3, 0xC6F1, 0x9F79, 0xC6F2, 0x9F7A, 0xC6F3, 0x9F81, + 0xC6F4, 0x9F82, 0xC6F5, 0x9F83, 0xC6F6, 0x9F84, 0xC6F7, 0x9F85, 0xC6F8, 0xC0A4, 0xC6F9, 0xC0A5, 0xC6FA, 0x9F86, 0xC6FB, 0x9F87, + 0xC6FC, 0x9F88, 0xC6FD, 0xC0A6, 0xC6FE, 0x9F89, 0xC6FF, 0x9F8A, 0xC700, 0x9F8B, 0xC701, 0x9F8C, 0xC702, 0x9F8D, 0xC703, 0x9F8E, + 0xC704, 0xC0A7, 0xC705, 0xC0A8, 0xC706, 0x9F8F, 0xC707, 0x9F90, 0xC708, 0xC0A9, 0xC709, 0x9F91, 0xC70A, 0x9F92, 0xC70B, 0x9F93, + 0xC70C, 0xC0AA, 0xC70D, 0x9F94, 0xC70E, 0x9F95, 0xC70F, 0x9F96, 0xC710, 0x9F97, 0xC711, 0x9F98, 0xC712, 0x9F99, 0xC713, 0x9F9A, + 0xC714, 0xC0AB, 0xC715, 0xC0AC, 0xC716, 0x9F9B, 0xC717, 0xC0AD, 0xC718, 0x9F9C, 0xC719, 0xC0AE, 0xC71A, 0x9F9D, 0xC71B, 0x9F9E, + 0xC71C, 0x9F9F, 0xC71D, 0x9FA0, 0xC71E, 0x9FA1, 0xC71F, 0x9FA2, 0xC720, 0xC0AF, 0xC721, 0xC0B0, 0xC722, 0x9FA3, 0xC723, 0x9FA4, + 0xC724, 0xC0B1, 0xC725, 0x9FA5, 0xC726, 0x9FA6, 0xC727, 0x9FA7, 0xC728, 0xC0B2, 0xC729, 0x9FA8, 0xC72A, 0x9FA9, 0xC72B, 0x9FAA, + 0xC72C, 0x9FAB, 0xC72D, 0x9FAC, 0xC72E, 0x9FAD, 0xC72F, 0x9FAE, 0xC730, 0xC0B3, 0xC731, 0xC0B4, 0xC732, 0x9FAF, 0xC733, 0xC0B5, + 0xC734, 0x9FB0, 0xC735, 0xC0B6, 0xC736, 0x9FB1, 0xC737, 0xC0B7, 0xC738, 0x9FB2, 0xC739, 0x9FB3, 0xC73A, 0x9FB4, 0xC73B, 0x9FB5, + 0xC73C, 0xC0B8, 0xC73D, 0xC0B9, 0xC73E, 0x9FB6, 0xC73F, 0x9FB7, 0xC740, 0xC0BA, 0xC741, 0x9FB8, 0xC742, 0x9FB9, 0xC743, 0x9FBA, + 0xC744, 0xC0BB, 0xC745, 0x9FBB, 0xC746, 0x9FBC, 0xC747, 0x9FBD, 0xC748, 0x9FBE, 0xC749, 0x9FBF, 0xC74A, 0xC0BC, 0xC74B, 0x9FC0, + 0xC74C, 0xC0BD, 0xC74D, 0xC0BE, 0xC74E, 0x9FC1, 0xC74F, 0xC0BF, 0xC750, 0x9FC2, 0xC751, 0xC0C0, 0xC752, 0xC0C1, 0xC753, 0xC0C2, + 0xC754, 0xC0C3, 0xC755, 0xC0C4, 0xC756, 0xC0C5, 0xC757, 0xC0C6, 0xC758, 0xC0C7, 0xC759, 0x9FC3, 0xC75A, 0x9FC4, 0xC75B, 0x9FC5, + 0xC75C, 0xC0C8, 0xC75D, 0x9FC6, 0xC75E, 0x9FC7, 0xC75F, 0x9FC8, 0xC760, 0xC0C9, 0xC761, 0x9FC9, 0xC762, 0x9FCA, 0xC763, 0x9FCB, + 0xC764, 0x9FCC, 0xC765, 0x9FCD, 0xC766, 0x9FCE, 0xC767, 0x9FCF, 0xC768, 0xC0CA, 0xC769, 0x9FD0, 0xC76A, 0x9FD1, 0xC76B, 0xC0CB, + 0xC76C, 0x9FD2, 0xC76D, 0x9FD3, 0xC76E, 0x9FD4, 0xC76F, 0x9FD5, 0xC770, 0x9FD6, 0xC771, 0x9FD7, 0xC772, 0x9FD8, 0xC773, 0x9FD9, + 0xC774, 0xC0CC, 0xC775, 0xC0CD, 0xC776, 0x9FDA, 0xC777, 0x9FDB, 0xC778, 0xC0CE, 0xC779, 0x9FDC, 0xC77A, 0x9FDD, 0xC77B, 0x9FDE, + 0xC77C, 0xC0CF, 0xC77D, 0xC0D0, 0xC77E, 0xC0D1, 0xC77F, 0x9FDF, 0xC780, 0x9FE0, 0xC781, 0x9FE1, 0xC782, 0x9FE2, 0xC783, 0xC0D2, + 0xC784, 0xC0D3, 0xC785, 0xC0D4, 0xC786, 0x9FE3, 0xC787, 0xC0D5, 0xC788, 0xC0D6, 0xC789, 0xC0D7, 0xC78A, 0xC0D8, 0xC78B, 0x9FE4, + 0xC78C, 0x9FE5, 0xC78D, 0x9FE6, 0xC78E, 0xC0D9, 0xC78F, 0x9FE7, 0xC790, 0xC0DA, 0xC791, 0xC0DB, 0xC792, 0x9FE8, 0xC793, 0x9FE9, + 0xC794, 0xC0DC, 0xC795, 0x9FEA, 0xC796, 0xC0DD, 0xC797, 0xC0DE, 0xC798, 0xC0DF, 0xC799, 0x9FEB, 0xC79A, 0xC0E0, 0xC79B, 0x9FEC, + 0xC79C, 0x9FED, 0xC79D, 0x9FEE, 0xC79E, 0x9FEF, 0xC79F, 0x9FF0, 0xC7A0, 0xC0E1, 0xC7A1, 0xC0E2, 0xC7A2, 0x9FF1, 0xC7A3, 0xC0E3, + 0xC7A4, 0xC0E4, 0xC7A5, 0xC0E5, 0xC7A6, 0xC0E6, 0xC7A7, 0x9FF2, 0xC7A8, 0x9FF3, 0xC7A9, 0x9FF4, 0xC7AA, 0x9FF5, 0xC7AB, 0x9FF6, + 0xC7AC, 0xC0E7, 0xC7AD, 0xC0E8, 0xC7AE, 0x9FF7, 0xC7AF, 0x9FF8, 0xC7B0, 0xC0E9, 0xC7B1, 0x9FF9, 0xC7B2, 0x9FFA, 0xC7B3, 0x9FFB, + 0xC7B4, 0xC0EA, 0xC7B5, 0x9FFC, 0xC7B6, 0x9FFD, 0xC7B7, 0x9FFE, 0xC7B8, 0xA041, 0xC7B9, 0xA042, 0xC7BA, 0xA043, 0xC7BB, 0xA044, + 0xC7BC, 0xC0EB, 0xC7BD, 0xC0EC, 0xC7BE, 0xA045, 0xC7BF, 0xC0ED, 0xC7C0, 0xC0EE, 0xC7C1, 0xC0EF, 0xC7C2, 0xA046, 0xC7C3, 0xA047, + 0xC7C4, 0xA048, 0xC7C5, 0xA049, 0xC7C6, 0xA04A, 0xC7C7, 0xA04B, 0xC7C8, 0xC0F0, 0xC7C9, 0xC0F1, 0xC7CA, 0xA04C, 0xC7CB, 0xA04D, + 0xC7CC, 0xC0F2, 0xC7CD, 0xA04E, 0xC7CE, 0xC0F3, 0xC7CF, 0xA04F, 0xC7D0, 0xC0F4, 0xC7D1, 0xA050, 0xC7D2, 0xA051, 0xC7D3, 0xA052, + 0xC7D4, 0xA053, 0xC7D5, 0xA054, 0xC7D6, 0xA055, 0xC7D7, 0xA056, 0xC7D8, 0xC0F5, 0xC7D9, 0xA057, 0xC7DA, 0xA058, 0xC7DB, 0xA059, + 0xC7DC, 0xA05A, 0xC7DD, 0xC0F6, 0xC7DE, 0xA061, 0xC7DF, 0xA062, 0xC7E0, 0xA063, 0xC7E1, 0xA064, 0xC7E2, 0xA065, 0xC7E3, 0xA066, + 0xC7E4, 0xC0F7, 0xC7E5, 0xA067, 0xC7E6, 0xA068, 0xC7E7, 0xA069, 0xC7E8, 0xC0F8, 0xC7E9, 0xA06A, 0xC7EA, 0xA06B, 0xC7EB, 0xA06C, + 0xC7EC, 0xC0F9, 0xC7ED, 0xA06D, 0xC7EE, 0xA06E, 0xC7EF, 0xA06F, 0xC7F0, 0xA070, 0xC7F1, 0xA071, 0xC7F2, 0xA072, 0xC7F3, 0xA073, + 0xC7F4, 0xA074, 0xC7F5, 0xA075, 0xC7F6, 0xA076, 0xC7F7, 0xA077, 0xC7F8, 0xA078, 0xC7F9, 0xA079, 0xC7FA, 0xA07A, 0xC7FB, 0xA081, + 0xC7FC, 0xA082, 0xC7FD, 0xA083, 0xC7FE, 0xA084, 0xC7FF, 0xA085, 0xC800, 0xC0FA, 0xC801, 0xC0FB, 0xC802, 0xA086, 0xC803, 0xA087, + 0xC804, 0xC0FC, 0xC805, 0xA088, 0xC806, 0xA089, 0xC807, 0xA08A, 0xC808, 0xC0FD, 0xC809, 0xA08B, 0xC80A, 0xC0FE, 0xC80B, 0xA08C, + 0xC80C, 0xA08D, 0xC80D, 0xA08E, 0xC80E, 0xA08F, 0xC80F, 0xA090, 0xC810, 0xC1A1, 0xC811, 0xC1A2, 0xC812, 0xA091, 0xC813, 0xC1A3, + 0xC814, 0xA092, 0xC815, 0xC1A4, 0xC816, 0xC1A5, 0xC817, 0xA093, 0xC818, 0xA094, 0xC819, 0xA095, 0xC81A, 0xA096, 0xC81B, 0xA097, + 0xC81C, 0xC1A6, 0xC81D, 0xC1A7, 0xC81E, 0xA098, 0xC81F, 0xA099, 0xC820, 0xC1A8, 0xC821, 0xA09A, 0xC822, 0xA09B, 0xC823, 0xA09C, + 0xC824, 0xC1A9, 0xC825, 0xA09D, 0xC826, 0xA09E, 0xC827, 0xA09F, 0xC828, 0xA0A0, 0xC829, 0xA0A1, 0xC82A, 0xA0A2, 0xC82B, 0xA0A3, + 0xC82C, 0xC1AA, 0xC82D, 0xC1AB, 0xC82E, 0xA0A4, 0xC82F, 0xC1AC, 0xC830, 0xA0A5, 0xC831, 0xC1AD, 0xC832, 0xA0A6, 0xC833, 0xA0A7, + 0xC834, 0xA0A8, 0xC835, 0xA0A9, 0xC836, 0xA0AA, 0xC837, 0xA0AB, 0xC838, 0xC1AE, 0xC839, 0xA0AC, 0xC83A, 0xA0AD, 0xC83B, 0xA0AE, + 0xC83C, 0xC1AF, 0xC83D, 0xA0AF, 0xC83E, 0xA0B0, 0xC83F, 0xA0B1, 0xC840, 0xC1B0, 0xC841, 0xA0B2, 0xC842, 0xA0B3, 0xC843, 0xA0B4, + 0xC844, 0xA0B5, 0xC845, 0xA0B6, 0xC846, 0xA0B7, 0xC847, 0xA0B8, 0xC848, 0xC1B1, 0xC849, 0xC1B2, 0xC84A, 0xA0B9, 0xC84B, 0xA0BA, + 0xC84C, 0xC1B3, 0xC84D, 0xC1B4, 0xC84E, 0xA0BB, 0xC84F, 0xA0BC, 0xC850, 0xA0BD, 0xC851, 0xA0BE, 0xC852, 0xA0BF, 0xC853, 0xA0C0, + 0xC854, 0xC1B5, 0xC855, 0xA0C1, 0xC856, 0xA0C2, 0xC857, 0xA0C3, 0xC858, 0xA0C4, 0xC859, 0xA0C5, 0xC85A, 0xA0C6, 0xC85B, 0xA0C7, + 0xC85C, 0xA0C8, 0xC85D, 0xA0C9, 0xC85E, 0xA0CA, 0xC85F, 0xA0CB, 0xC860, 0xA0CC, 0xC861, 0xA0CD, 0xC862, 0xA0CE, 0xC863, 0xA0CF, + 0xC864, 0xA0D0, 0xC865, 0xA0D1, 0xC866, 0xA0D2, 0xC867, 0xA0D3, 0xC868, 0xA0D4, 0xC869, 0xA0D5, 0xC86A, 0xA0D6, 0xC86B, 0xA0D7, + 0xC86C, 0xA0D8, 0xC86D, 0xA0D9, 0xC86E, 0xA0DA, 0xC86F, 0xA0DB, 0xC870, 0xC1B6, 0xC871, 0xC1B7, 0xC872, 0xA0DC, 0xC873, 0xA0DD, + 0xC874, 0xC1B8, 0xC875, 0xA0DE, 0xC876, 0xA0DF, 0xC877, 0xA0E0, 0xC878, 0xC1B9, 0xC879, 0xA0E1, 0xC87A, 0xC1BA, 0xC87B, 0xA0E2, + 0xC87C, 0xA0E3, 0xC87D, 0xA0E4, 0xC87E, 0xA0E5, 0xC87F, 0xA0E6, 0xC880, 0xC1BB, 0xC881, 0xC1BC, 0xC882, 0xA0E7, 0xC883, 0xC1BD, + 0xC884, 0xA0E8, 0xC885, 0xC1BE, 0xC886, 0xC1BF, 0xC887, 0xC1C0, 0xC888, 0xA0E9, 0xC889, 0xA0EA, 0xC88A, 0xA0EB, 0xC88B, 0xC1C1, + 0xC88C, 0xC1C2, 0xC88D, 0xC1C3, 0xC88E, 0xA0EC, 0xC88F, 0xA0ED, 0xC890, 0xA0EE, 0xC891, 0xA0EF, 0xC892, 0xA0F0, 0xC893, 0xA0F1, + 0xC894, 0xC1C4, 0xC895, 0xA0F2, 0xC896, 0xA0F3, 0xC897, 0xA0F4, 0xC898, 0xA0F5, 0xC899, 0xA0F6, 0xC89A, 0xA0F7, 0xC89B, 0xA0F8, + 0xC89C, 0xA0F9, 0xC89D, 0xC1C5, 0xC89E, 0xA0FA, 0xC89F, 0xC1C6, 0xC8A0, 0xA0FB, 0xC8A1, 0xC1C7, 0xC8A2, 0xA0FC, 0xC8A3, 0xA0FD, + 0xC8A4, 0xA0FE, 0xC8A5, 0xA141, 0xC8A6, 0xA142, 0xC8A7, 0xA143, 0xC8A8, 0xC1C8, 0xC8A9, 0xA144, 0xC8AA, 0xA145, 0xC8AB, 0xA146, + 0xC8AC, 0xA147, 0xC8AD, 0xA148, 0xC8AE, 0xA149, 0xC8AF, 0xA14A, 0xC8B0, 0xA14B, 0xC8B1, 0xA14C, 0xC8B2, 0xA14D, 0xC8B3, 0xA14E, + 0xC8B4, 0xA14F, 0xC8B5, 0xA150, 0xC8B6, 0xA151, 0xC8B7, 0xA152, 0xC8B8, 0xA153, 0xC8B9, 0xA154, 0xC8BA, 0xA155, 0xC8BB, 0xA156, + 0xC8BC, 0xC1C9, 0xC8BD, 0xC1CA, 0xC8BE, 0xA157, 0xC8BF, 0xA158, 0xC8C0, 0xA159, 0xC8C1, 0xA15A, 0xC8C2, 0xA161, 0xC8C3, 0xA162, + 0xC8C4, 0xC1CB, 0xC8C5, 0xA163, 0xC8C6, 0xA164, 0xC8C7, 0xA165, 0xC8C8, 0xC1CC, 0xC8C9, 0xA166, 0xC8CA, 0xA167, 0xC8CB, 0xA168, + 0xC8CC, 0xC1CD, 0xC8CD, 0xA169, 0xC8CE, 0xA16A, 0xC8CF, 0xA16B, 0xC8D0, 0xA16C, 0xC8D1, 0xA16D, 0xC8D2, 0xA16E, 0xC8D3, 0xA16F, + 0xC8D4, 0xC1CE, 0xC8D5, 0xC1CF, 0xC8D6, 0xA170, 0xC8D7, 0xC1D0, 0xC8D8, 0xA171, 0xC8D9, 0xC1D1, 0xC8DA, 0xA172, 0xC8DB, 0xA173, + 0xC8DC, 0xA174, 0xC8DD, 0xA175, 0xC8DE, 0xA176, 0xC8DF, 0xA177, 0xC8E0, 0xC1D2, 0xC8E1, 0xC1D3, 0xC8E2, 0xA178, 0xC8E3, 0xA179, + 0xC8E4, 0xC1D4, 0xC8E5, 0xA17A, 0xC8E6, 0xA181, 0xC8E7, 0xA182, 0xC8E8, 0xA183, 0xC8E9, 0xA184, 0xC8EA, 0xA185, 0xC8EB, 0xA186, + 0xC8EC, 0xA187, 0xC8ED, 0xA188, 0xC8EE, 0xA189, 0xC8EF, 0xA18A, 0xC8F0, 0xA18B, 0xC8F1, 0xA18C, 0xC8F2, 0xA18D, 0xC8F3, 0xA18E, + 0xC8F4, 0xA18F, 0xC8F5, 0xC1D5, 0xC8F6, 0xA190, 0xC8F7, 0xA191, 0xC8F8, 0xA192, 0xC8F9, 0xA193, 0xC8FA, 0xA194, 0xC8FB, 0xA195, + 0xC8FC, 0xC1D6, 0xC8FD, 0xC1D7, 0xC8FE, 0xA196, 0xC8FF, 0xA197, 0xC900, 0xC1D8, 0xC901, 0xA198, 0xC902, 0xA199, 0xC903, 0xA19A, + 0xC904, 0xC1D9, 0xC905, 0xC1DA, 0xC906, 0xC1DB, 0xC907, 0xA19B, 0xC908, 0xA19C, 0xC909, 0xA19D, 0xC90A, 0xA19E, 0xC90B, 0xA19F, + 0xC90C, 0xC1DC, 0xC90D, 0xC1DD, 0xC90E, 0xA1A0, 0xC90F, 0xC1DE, 0xC910, 0xA241, 0xC911, 0xC1DF, 0xC912, 0xA242, 0xC913, 0xA243, + 0xC914, 0xA244, 0xC915, 0xA245, 0xC916, 0xA246, 0xC917, 0xA247, 0xC918, 0xC1E0, 0xC919, 0xA248, 0xC91A, 0xA249, 0xC91B, 0xA24A, + 0xC91C, 0xA24B, 0xC91D, 0xA24C, 0xC91E, 0xA24D, 0xC91F, 0xA24E, 0xC920, 0xA24F, 0xC921, 0xA250, 0xC922, 0xA251, 0xC923, 0xA252, + 0xC924, 0xA253, 0xC925, 0xA254, 0xC926, 0xA255, 0xC927, 0xA256, 0xC928, 0xA257, 0xC929, 0xA258, 0xC92A, 0xA259, 0xC92B, 0xA25A, + 0xC92C, 0xC1E1, 0xC92D, 0xA261, 0xC92E, 0xA262, 0xC92F, 0xA263, 0xC930, 0xA264, 0xC931, 0xA265, 0xC932, 0xA266, 0xC933, 0xA267, + 0xC934, 0xC1E2, 0xC935, 0xA268, 0xC936, 0xA269, 0xC937, 0xA26A, 0xC938, 0xA26B, 0xC939, 0xA26C, 0xC93A, 0xA26D, 0xC93B, 0xA26E, + 0xC93C, 0xA26F, 0xC93D, 0xA270, 0xC93E, 0xA271, 0xC93F, 0xA272, 0xC940, 0xA273, 0xC941, 0xA274, 0xC942, 0xA275, 0xC943, 0xA276, + 0xC944, 0xA277, 0xC945, 0xA278, 0xC946, 0xA279, 0xC947, 0xA27A, 0xC948, 0xA281, 0xC949, 0xA282, 0xC94A, 0xA283, 0xC94B, 0xA284, + 0xC94C, 0xA285, 0xC94D, 0xA286, 0xC94E, 0xA287, 0xC94F, 0xA288, 0xC950, 0xC1E3, 0xC951, 0xC1E4, 0xC952, 0xA289, 0xC953, 0xA28A, + 0xC954, 0xC1E5, 0xC955, 0xA28B, 0xC956, 0xA28C, 0xC957, 0xA28D, 0xC958, 0xC1E6, 0xC959, 0xA28E, 0xC95A, 0xA28F, 0xC95B, 0xA290, + 0xC95C, 0xA291, 0xC95D, 0xA292, 0xC95E, 0xA293, 0xC95F, 0xA294, 0xC960, 0xC1E7, 0xC961, 0xC1E8, 0xC962, 0xA295, 0xC963, 0xC1E9, + 0xC964, 0xA296, 0xC965, 0xA297, 0xC966, 0xA298, 0xC967, 0xA299, 0xC968, 0xA29A, 0xC969, 0xA29B, 0xC96A, 0xA29C, 0xC96B, 0xA29D, + 0xC96C, 0xC1EA, 0xC96D, 0xA29E, 0xC96E, 0xA29F, 0xC96F, 0xA2A0, 0xC970, 0xC1EB, 0xC971, 0xA341, 0xC972, 0xA342, 0xC973, 0xA343, + 0xC974, 0xC1EC, 0xC975, 0xA344, 0xC976, 0xA345, 0xC977, 0xA346, 0xC978, 0xA347, 0xC979, 0xA348, 0xC97A, 0xA349, 0xC97B, 0xA34A, + 0xC97C, 0xC1ED, 0xC97D, 0xA34B, 0xC97E, 0xA34C, 0xC97F, 0xA34D, 0xC980, 0xA34E, 0xC981, 0xA34F, 0xC982, 0xA350, 0xC983, 0xA351, + 0xC984, 0xA352, 0xC985, 0xA353, 0xC986, 0xA354, 0xC987, 0xA355, 0xC988, 0xC1EE, 0xC989, 0xC1EF, 0xC98A, 0xA356, 0xC98B, 0xA357, + 0xC98C, 0xC1F0, 0xC98D, 0xA358, 0xC98E, 0xA359, 0xC98F, 0xA35A, 0xC990, 0xC1F1, 0xC991, 0xA361, 0xC992, 0xA362, 0xC993, 0xA363, + 0xC994, 0xA364, 0xC995, 0xA365, 0xC996, 0xA366, 0xC997, 0xA367, 0xC998, 0xC1F2, 0xC999, 0xC1F3, 0xC99A, 0xA368, 0xC99B, 0xC1F4, + 0xC99C, 0xA369, 0xC99D, 0xC1F5, 0xC99E, 0xA36A, 0xC99F, 0xA36B, 0xC9A0, 0xA36C, 0xC9A1, 0xA36D, 0xC9A2, 0xA36E, 0xC9A3, 0xA36F, + 0xC9A4, 0xA370, 0xC9A5, 0xA371, 0xC9A6, 0xA372, 0xC9A7, 0xA373, 0xC9A8, 0xA374, 0xC9A9, 0xA375, 0xC9AA, 0xA376, 0xC9AB, 0xA377, + 0xC9AC, 0xA378, 0xC9AD, 0xA379, 0xC9AE, 0xA37A, 0xC9AF, 0xA381, 0xC9B0, 0xA382, 0xC9B1, 0xA383, 0xC9B2, 0xA384, 0xC9B3, 0xA385, + 0xC9B4, 0xA386, 0xC9B5, 0xA387, 0xC9B6, 0xA388, 0xC9B7, 0xA389, 0xC9B8, 0xA38A, 0xC9B9, 0xA38B, 0xC9BA, 0xA38C, 0xC9BB, 0xA38D, + 0xC9BC, 0xA38E, 0xC9BD, 0xA38F, 0xC9BE, 0xA390, 0xC9BF, 0xA391, 0xC9C0, 0xC1F6, 0xC9C1, 0xC1F7, 0xC9C2, 0xA392, 0xC9C3, 0xA393, + 0xC9C4, 0xC1F8, 0xC9C5, 0xA394, 0xC9C6, 0xA395, 0xC9C7, 0xC1F9, 0xC9C8, 0xC1FA, 0xC9C9, 0xA396, 0xC9CA, 0xC1FB, 0xC9CB, 0xA397, + 0xC9CC, 0xA398, 0xC9CD, 0xA399, 0xC9CE, 0xA39A, 0xC9CF, 0xA39B, 0xC9D0, 0xC1FC, 0xC9D1, 0xC1FD, 0xC9D2, 0xA39C, 0xC9D3, 0xC1FE, + 0xC9D4, 0xA39D, 0xC9D5, 0xC2A1, 0xC9D6, 0xC2A2, 0xC9D7, 0xA39E, 0xC9D8, 0xA39F, 0xC9D9, 0xC2A3, 0xC9DA, 0xC2A4, 0xC9DB, 0xA3A0, + 0xC9DC, 0xC2A5, 0xC9DD, 0xC2A6, 0xC9DE, 0xA441, 0xC9DF, 0xA442, 0xC9E0, 0xC2A7, 0xC9E1, 0xA443, 0xC9E2, 0xC2A8, 0xC9E3, 0xA444, + 0xC9E4, 0xC2A9, 0xC9E5, 0xA445, 0xC9E6, 0xA446, 0xC9E7, 0xC2AA, 0xC9E8, 0xA447, 0xC9E9, 0xA448, 0xC9EA, 0xA449, 0xC9EB, 0xA44A, + 0xC9EC, 0xC2AB, 0xC9ED, 0xC2AC, 0xC9EE, 0xA44B, 0xC9EF, 0xC2AD, 0xC9F0, 0xC2AE, 0xC9F1, 0xC2AF, 0xC9F2, 0xA44C, 0xC9F3, 0xA44D, + 0xC9F4, 0xA44E, 0xC9F5, 0xA44F, 0xC9F6, 0xA450, 0xC9F7, 0xA451, 0xC9F8, 0xC2B0, 0xC9F9, 0xC2B1, 0xC9FA, 0xA452, 0xC9FB, 0xA453, + 0xC9FC, 0xC2B2, 0xC9FD, 0xA454, 0xC9FE, 0xA455, 0xC9FF, 0xA456, 0xCA00, 0xC2B3, 0xCA01, 0xA457, 0xCA02, 0xA458, 0xCA03, 0xA459, + 0xCA04, 0xA45A, 0xCA05, 0xA461, 0xCA06, 0xA462, 0xCA07, 0xA463, 0xCA08, 0xC2B4, 0xCA09, 0xC2B5, 0xCA0A, 0xA464, 0xCA0B, 0xC2B6, + 0xCA0C, 0xC2B7, 0xCA0D, 0xC2B8, 0xCA0E, 0xA465, 0xCA0F, 0xA466, 0xCA10, 0xA467, 0xCA11, 0xA468, 0xCA12, 0xA469, 0xCA13, 0xA46A, + 0xCA14, 0xC2B9, 0xCA15, 0xA46B, 0xCA16, 0xA46C, 0xCA17, 0xA46D, 0xCA18, 0xC2BA, 0xCA19, 0xA46E, 0xCA1A, 0xA46F, 0xCA1B, 0xA470, + 0xCA1C, 0xA471, 0xCA1D, 0xA472, 0xCA1E, 0xA473, 0xCA1F, 0xA474, 0xCA20, 0xA475, 0xCA21, 0xA476, 0xCA22, 0xA477, 0xCA23, 0xA478, + 0xCA24, 0xA479, 0xCA25, 0xA47A, 0xCA26, 0xA481, 0xCA27, 0xA482, 0xCA28, 0xA483, 0xCA29, 0xC2BB, 0xCA2A, 0xA484, 0xCA2B, 0xA485, + 0xCA2C, 0xA486, 0xCA2D, 0xA487, 0xCA2E, 0xA488, 0xCA2F, 0xA489, 0xCA30, 0xA48A, 0xCA31, 0xA48B, 0xCA32, 0xA48C, 0xCA33, 0xA48D, + 0xCA34, 0xA48E, 0xCA35, 0xA48F, 0xCA36, 0xA490, 0xCA37, 0xA491, 0xCA38, 0xA492, 0xCA39, 0xA493, 0xCA3A, 0xA494, 0xCA3B, 0xA495, + 0xCA3C, 0xA496, 0xCA3D, 0xA497, 0xCA3E, 0xA498, 0xCA3F, 0xA499, 0xCA40, 0xA49A, 0xCA41, 0xA49B, 0xCA42, 0xA49C, 0xCA43, 0xA49D, + 0xCA44, 0xA49E, 0xCA45, 0xA49F, 0xCA46, 0xA4A0, 0xCA47, 0xA541, 0xCA48, 0xA542, 0xCA49, 0xA543, 0xCA4A, 0xA544, 0xCA4B, 0xA545, + 0xCA4C, 0xC2BC, 0xCA4D, 0xC2BD, 0xCA4E, 0xA546, 0xCA4F, 0xA547, 0xCA50, 0xC2BE, 0xCA51, 0xA548, 0xCA52, 0xA549, 0xCA53, 0xA54A, + 0xCA54, 0xC2BF, 0xCA55, 0xA54B, 0xCA56, 0xA54C, 0xCA57, 0xA54D, 0xCA58, 0xA54E, 0xCA59, 0xA54F, 0xCA5A, 0xA550, 0xCA5B, 0xA551, + 0xCA5C, 0xC2C0, 0xCA5D, 0xC2C1, 0xCA5E, 0xA552, 0xCA5F, 0xC2C2, 0xCA60, 0xC2C3, 0xCA61, 0xC2C4, 0xCA62, 0xA553, 0xCA63, 0xA554, + 0xCA64, 0xA555, 0xCA65, 0xA556, 0xCA66, 0xA557, 0xCA67, 0xA558, 0xCA68, 0xC2C5, 0xCA69, 0xA559, 0xCA6A, 0xA55A, 0xCA6B, 0xA561, + 0xCA6C, 0xA562, 0xCA6D, 0xA563, 0xCA6E, 0xA564, 0xCA6F, 0xA565, 0xCA70, 0xA566, 0xCA71, 0xA567, 0xCA72, 0xA568, 0xCA73, 0xA569, + 0xCA74, 0xA56A, 0xCA75, 0xA56B, 0xCA76, 0xA56C, 0xCA77, 0xA56D, 0xCA78, 0xA56E, 0xCA79, 0xA56F, 0xCA7A, 0xA570, 0xCA7B, 0xA571, + 0xCA7C, 0xA572, 0xCA7D, 0xC2C6, 0xCA7E, 0xA573, 0xCA7F, 0xA574, 0xCA80, 0xA575, 0xCA81, 0xA576, 0xCA82, 0xA577, 0xCA83, 0xA578, + 0xCA84, 0xC2C7, 0xCA85, 0xA579, 0xCA86, 0xA57A, 0xCA87, 0xA581, 0xCA88, 0xA582, 0xCA89, 0xA583, 0xCA8A, 0xA584, 0xCA8B, 0xA585, + 0xCA8C, 0xA586, 0xCA8D, 0xA587, 0xCA8E, 0xA588, 0xCA8F, 0xA589, 0xCA90, 0xA58A, 0xCA91, 0xA58B, 0xCA92, 0xA58C, 0xCA93, 0xA58D, + 0xCA94, 0xA58E, 0xCA95, 0xA58F, 0xCA96, 0xA590, 0xCA97, 0xA591, 0xCA98, 0xC2C8, 0xCA99, 0xA592, 0xCA9A, 0xA593, 0xCA9B, 0xA594, + 0xCA9C, 0xA595, 0xCA9D, 0xA596, 0xCA9E, 0xA597, 0xCA9F, 0xA598, 0xCAA0, 0xA599, 0xCAA1, 0xA59A, 0xCAA2, 0xA59B, 0xCAA3, 0xA59C, + 0xCAA4, 0xA59D, 0xCAA5, 0xA59E, 0xCAA6, 0xA59F, 0xCAA7, 0xA5A0, 0xCAA8, 0xA641, 0xCAA9, 0xA642, 0xCAAA, 0xA643, 0xCAAB, 0xA644, + 0xCAAC, 0xA645, 0xCAAD, 0xA646, 0xCAAE, 0xA647, 0xCAAF, 0xA648, 0xCAB0, 0xA649, 0xCAB1, 0xA64A, 0xCAB2, 0xA64B, 0xCAB3, 0xA64C, + 0xCAB4, 0xA64D, 0xCAB5, 0xA64E, 0xCAB6, 0xA64F, 0xCAB7, 0xA650, 0xCAB8, 0xA651, 0xCAB9, 0xA652, 0xCABA, 0xA653, 0xCABB, 0xA654, + 0xCABC, 0xC2C9, 0xCABD, 0xC2CA, 0xCABE, 0xA655, 0xCABF, 0xA656, 0xCAC0, 0xC2CB, 0xCAC1, 0xA657, 0xCAC2, 0xA658, 0xCAC3, 0xA659, + 0xCAC4, 0xC2CC, 0xCAC5, 0xA65A, 0xCAC6, 0xA661, 0xCAC7, 0xA662, 0xCAC8, 0xA663, 0xCAC9, 0xA664, 0xCACA, 0xA665, 0xCACB, 0xA666, + 0xCACC, 0xC2CD, 0xCACD, 0xC2CE, 0xCACE, 0xA667, 0xCACF, 0xC2CF, 0xCAD0, 0xA668, 0xCAD1, 0xC2D0, 0xCAD2, 0xA669, 0xCAD3, 0xC2D1, + 0xCAD4, 0xA66A, 0xCAD5, 0xA66B, 0xCAD6, 0xA66C, 0xCAD7, 0xA66D, 0xCAD8, 0xC2D2, 0xCAD9, 0xC2D3, 0xCADA, 0xA66E, 0xCADB, 0xA66F, + 0xCADC, 0xA670, 0xCADD, 0xA671, 0xCADE, 0xA672, 0xCADF, 0xA673, 0xCAE0, 0xC2D4, 0xCAE1, 0xA674, 0xCAE2, 0xA675, 0xCAE3, 0xA676, + 0xCAE4, 0xA677, 0xCAE5, 0xA678, 0xCAE6, 0xA679, 0xCAE7, 0xA67A, 0xCAE8, 0xA681, 0xCAE9, 0xA682, 0xCAEA, 0xA683, 0xCAEB, 0xA684, + 0xCAEC, 0xC2D5, 0xCAED, 0xA685, 0xCAEE, 0xA686, 0xCAEF, 0xA687, 0xCAF0, 0xA688, 0xCAF1, 0xA689, 0xCAF2, 0xA68A, 0xCAF3, 0xA68B, + 0xCAF4, 0xC2D6, 0xCAF5, 0xA68C, 0xCAF6, 0xA68D, 0xCAF7, 0xA68E, 0xCAF8, 0xA68F, 0xCAF9, 0xA690, 0xCAFA, 0xA691, 0xCAFB, 0xA692, + 0xCAFC, 0xA693, 0xCAFD, 0xA694, 0xCAFE, 0xA695, 0xCAFF, 0xA696, 0xCB00, 0xA697, 0xCB01, 0xA698, 0xCB02, 0xA699, 0xCB03, 0xA69A, + 0xCB04, 0xA69B, 0xCB05, 0xA69C, 0xCB06, 0xA69D, 0xCB07, 0xA69E, 0xCB08, 0xC2D7, 0xCB09, 0xA69F, 0xCB0A, 0xA6A0, 0xCB0B, 0xA741, + 0xCB0C, 0xA742, 0xCB0D, 0xA743, 0xCB0E, 0xA744, 0xCB0F, 0xA745, 0xCB10, 0xC2D8, 0xCB11, 0xA746, 0xCB12, 0xA747, 0xCB13, 0xA748, + 0xCB14, 0xC2D9, 0xCB15, 0xA749, 0xCB16, 0xA74A, 0xCB17, 0xA74B, 0xCB18, 0xC2DA, 0xCB19, 0xA74C, 0xCB1A, 0xA74D, 0xCB1B, 0xA74E, + 0xCB1C, 0xA74F, 0xCB1D, 0xA750, 0xCB1E, 0xA751, 0xCB1F, 0xA752, 0xCB20, 0xC2DB, 0xCB21, 0xC2DC, 0xCB22, 0xA753, 0xCB23, 0xA754, + 0xCB24, 0xA755, 0xCB25, 0xA756, 0xCB26, 0xA757, 0xCB27, 0xA758, 0xCB28, 0xA759, 0xCB29, 0xA75A, 0xCB2A, 0xA761, 0xCB2B, 0xA762, + 0xCB2C, 0xA763, 0xCB2D, 0xA764, 0xCB2E, 0xA765, 0xCB2F, 0xA766, 0xCB30, 0xA767, 0xCB31, 0xA768, 0xCB32, 0xA769, 0xCB33, 0xA76A, + 0xCB34, 0xA76B, 0xCB35, 0xA76C, 0xCB36, 0xA76D, 0xCB37, 0xA76E, 0xCB38, 0xA76F, 0xCB39, 0xA770, 0xCB3A, 0xA771, 0xCB3B, 0xA772, + 0xCB3C, 0xA773, 0xCB3D, 0xA774, 0xCB3E, 0xA775, 0xCB3F, 0xA776, 0xCB40, 0xA777, 0xCB41, 0xC2DD, 0xCB42, 0xA778, 0xCB43, 0xA779, + 0xCB44, 0xA77A, 0xCB45, 0xA781, 0xCB46, 0xA782, 0xCB47, 0xA783, 0xCB48, 0xC2DE, 0xCB49, 0xC2DF, 0xCB4A, 0xA784, 0xCB4B, 0xA785, + 0xCB4C, 0xC2E0, 0xCB4D, 0xA786, 0xCB4E, 0xA787, 0xCB4F, 0xA788, 0xCB50, 0xC2E1, 0xCB51, 0xA789, 0xCB52, 0xA78A, 0xCB53, 0xA78B, + 0xCB54, 0xA78C, 0xCB55, 0xA78D, 0xCB56, 0xA78E, 0xCB57, 0xA78F, 0xCB58, 0xC2E2, 0xCB59, 0xC2E3, 0xCB5A, 0xA790, 0xCB5B, 0xA791, + 0xCB5C, 0xA792, 0xCB5D, 0xC2E4, 0xCB5E, 0xA793, 0xCB5F, 0xA794, 0xCB60, 0xA795, 0xCB61, 0xA796, 0xCB62, 0xA797, 0xCB63, 0xA798, + 0xCB64, 0xC2E5, 0xCB65, 0xA799, 0xCB66, 0xA79A, 0xCB67, 0xA79B, 0xCB68, 0xA79C, 0xCB69, 0xA79D, 0xCB6A, 0xA79E, 0xCB6B, 0xA79F, + 0xCB6C, 0xA7A0, 0xCB6D, 0xA841, 0xCB6E, 0xA842, 0xCB6F, 0xA843, 0xCB70, 0xA844, 0xCB71, 0xA845, 0xCB72, 0xA846, 0xCB73, 0xA847, + 0xCB74, 0xA848, 0xCB75, 0xA849, 0xCB76, 0xA84A, 0xCB77, 0xA84B, 0xCB78, 0xC2E6, 0xCB79, 0xC2E7, 0xCB7A, 0xA84C, 0xCB7B, 0xA84D, + 0xCB7C, 0xA84E, 0xCB7D, 0xA84F, 0xCB7E, 0xA850, 0xCB7F, 0xA851, 0xCB80, 0xA852, 0xCB81, 0xA853, 0xCB82, 0xA854, 0xCB83, 0xA855, + 0xCB84, 0xA856, 0xCB85, 0xA857, 0xCB86, 0xA858, 0xCB87, 0xA859, 0xCB88, 0xA85A, 0xCB89, 0xA861, 0xCB8A, 0xA862, 0xCB8B, 0xA863, + 0xCB8C, 0xA864, 0xCB8D, 0xA865, 0xCB8E, 0xA866, 0xCB8F, 0xA867, 0xCB90, 0xA868, 0xCB91, 0xA869, 0xCB92, 0xA86A, 0xCB93, 0xA86B, + 0xCB94, 0xA86C, 0xCB95, 0xA86D, 0xCB96, 0xA86E, 0xCB97, 0xA86F, 0xCB98, 0xA870, 0xCB99, 0xA871, 0xCB9A, 0xA872, 0xCB9B, 0xA873, + 0xCB9C, 0xC2E8, 0xCB9D, 0xA874, 0xCB9E, 0xA875, 0xCB9F, 0xA876, 0xCBA0, 0xA877, 0xCBA1, 0xA878, 0xCBA2, 0xA879, 0xCBA3, 0xA87A, + 0xCBA4, 0xA881, 0xCBA5, 0xA882, 0xCBA6, 0xA883, 0xCBA7, 0xA884, 0xCBA8, 0xA885, 0xCBA9, 0xA886, 0xCBAA, 0xA887, 0xCBAB, 0xA888, + 0xCBAC, 0xA889, 0xCBAD, 0xA88A, 0xCBAE, 0xA88B, 0xCBAF, 0xA88C, 0xCBB0, 0xA88D, 0xCBB1, 0xA88E, 0xCBB2, 0xA88F, 0xCBB3, 0xA890, + 0xCBB4, 0xA891, 0xCBB5, 0xA892, 0xCBB6, 0xA893, 0xCBB7, 0xA894, 0xCBB8, 0xC2E9, 0xCBB9, 0xA895, 0xCBBA, 0xA896, 0xCBBB, 0xA897, + 0xCBBC, 0xA898, 0xCBBD, 0xA899, 0xCBBE, 0xA89A, 0xCBBF, 0xA89B, 0xCBC0, 0xA89C, 0xCBC1, 0xA89D, 0xCBC2, 0xA89E, 0xCBC3, 0xA89F, + 0xCBC4, 0xA8A0, 0xCBC5, 0xA941, 0xCBC6, 0xA942, 0xCBC7, 0xA943, 0xCBC8, 0xA944, 0xCBC9, 0xA945, 0xCBCA, 0xA946, 0xCBCB, 0xA947, + 0xCBCC, 0xA948, 0xCBCD, 0xA949, 0xCBCE, 0xA94A, 0xCBCF, 0xA94B, 0xCBD0, 0xA94C, 0xCBD1, 0xA94D, 0xCBD2, 0xA94E, 0xCBD3, 0xA94F, + 0xCBD4, 0xC2EA, 0xCBD5, 0xA950, 0xCBD6, 0xA951, 0xCBD7, 0xA952, 0xCBD8, 0xA953, 0xCBD9, 0xA954, 0xCBDA, 0xA955, 0xCBDB, 0xA956, + 0xCBDC, 0xA957, 0xCBDD, 0xA958, 0xCBDE, 0xA959, 0xCBDF, 0xA95A, 0xCBE0, 0xA961, 0xCBE1, 0xA962, 0xCBE2, 0xA963, 0xCBE3, 0xA964, + 0xCBE4, 0xC2EB, 0xCBE5, 0xA965, 0xCBE6, 0xA966, 0xCBE7, 0xC2EC, 0xCBE8, 0xA967, 0xCBE9, 0xC2ED, 0xCBEA, 0xA968, 0xCBEB, 0xA969, + 0xCBEC, 0xA96A, 0xCBED, 0xA96B, 0xCBEE, 0xA96C, 0xCBEF, 0xA96D, 0xCBF0, 0xA96E, 0xCBF1, 0xA96F, 0xCBF2, 0xA970, 0xCBF3, 0xA971, + 0xCBF4, 0xA972, 0xCBF5, 0xA973, 0xCBF6, 0xA974, 0xCBF7, 0xA975, 0xCBF8, 0xA976, 0xCBF9, 0xA977, 0xCBFA, 0xA978, 0xCBFB, 0xA979, + 0xCBFC, 0xA97A, 0xCBFD, 0xA981, 0xCBFE, 0xA982, 0xCBFF, 0xA983, 0xCC00, 0xA984, 0xCC01, 0xA985, 0xCC02, 0xA986, 0xCC03, 0xA987, + 0xCC04, 0xA988, 0xCC05, 0xA989, 0xCC06, 0xA98A, 0xCC07, 0xA98B, 0xCC08, 0xA98C, 0xCC09, 0xA98D, 0xCC0A, 0xA98E, 0xCC0B, 0xA98F, + 0xCC0C, 0xC2EE, 0xCC0D, 0xC2EF, 0xCC0E, 0xA990, 0xCC0F, 0xA991, 0xCC10, 0xC2F0, 0xCC11, 0xA992, 0xCC12, 0xA993, 0xCC13, 0xA994, + 0xCC14, 0xC2F1, 0xCC15, 0xA995, 0xCC16, 0xA996, 0xCC17, 0xA997, 0xCC18, 0xA998, 0xCC19, 0xA999, 0xCC1A, 0xA99A, 0xCC1B, 0xA99B, + 0xCC1C, 0xC2F2, 0xCC1D, 0xC2F3, 0xCC1E, 0xA99C, 0xCC1F, 0xA99D, 0xCC20, 0xA99E, 0xCC21, 0xC2F4, 0xCC22, 0xC2F5, 0xCC23, 0xA99F, + 0xCC24, 0xA9A0, 0xCC25, 0xAA41, 0xCC26, 0xAA42, 0xCC27, 0xC2F6, 0xCC28, 0xC2F7, 0xCC29, 0xC2F8, 0xCC2A, 0xAA43, 0xCC2B, 0xAA44, + 0xCC2C, 0xC2F9, 0xCC2D, 0xAA45, 0xCC2E, 0xC2FA, 0xCC2F, 0xAA46, 0xCC30, 0xC2FB, 0xCC31, 0xAA47, 0xCC32, 0xAA48, 0xCC33, 0xAA49, + 0xCC34, 0xAA4A, 0xCC35, 0xAA4B, 0xCC36, 0xAA4C, 0xCC37, 0xAA4D, 0xCC38, 0xC2FC, 0xCC39, 0xC2FD, 0xCC3A, 0xAA4E, 0xCC3B, 0xC2FE, + 0xCC3C, 0xC3A1, 0xCC3D, 0xC3A2, 0xCC3E, 0xC3A3, 0xCC3F, 0xAA4F, 0xCC40, 0xAA50, 0xCC41, 0xAA51, 0xCC42, 0xAA52, 0xCC43, 0xAA53, + 0xCC44, 0xC3A4, 0xCC45, 0xC3A5, 0xCC46, 0xAA54, 0xCC47, 0xAA55, 0xCC48, 0xC3A6, 0xCC49, 0xAA56, 0xCC4A, 0xAA57, 0xCC4B, 0xAA58, + 0xCC4C, 0xC3A7, 0xCC4D, 0xAA59, 0xCC4E, 0xAA5A, 0xCC4F, 0xAA61, 0xCC50, 0xAA62, 0xCC51, 0xAA63, 0xCC52, 0xAA64, 0xCC53, 0xAA65, + 0xCC54, 0xC3A8, 0xCC55, 0xC3A9, 0xCC56, 0xAA66, 0xCC57, 0xC3AA, 0xCC58, 0xC3AB, 0xCC59, 0xC3AC, 0xCC5A, 0xAA67, 0xCC5B, 0xAA68, + 0xCC5C, 0xAA69, 0xCC5D, 0xAA6A, 0xCC5E, 0xAA6B, 0xCC5F, 0xAA6C, 0xCC60, 0xC3AD, 0xCC61, 0xAA6D, 0xCC62, 0xAA6E, 0xCC63, 0xAA6F, + 0xCC64, 0xC3AE, 0xCC65, 0xAA70, 0xCC66, 0xC3AF, 0xCC67, 0xAA71, 0xCC68, 0xC3B0, 0xCC69, 0xAA72, 0xCC6A, 0xAA73, 0xCC6B, 0xAA74, + 0xCC6C, 0xAA75, 0xCC6D, 0xAA76, 0xCC6E, 0xAA77, 0xCC6F, 0xAA78, 0xCC70, 0xC3B1, 0xCC71, 0xAA79, 0xCC72, 0xAA7A, 0xCC73, 0xAA81, + 0xCC74, 0xAA82, 0xCC75, 0xC3B2, 0xCC76, 0xAA83, 0xCC77, 0xAA84, 0xCC78, 0xAA85, 0xCC79, 0xAA86, 0xCC7A, 0xAA87, 0xCC7B, 0xAA88, + 0xCC7C, 0xAA89, 0xCC7D, 0xAA8A, 0xCC7E, 0xAA8B, 0xCC7F, 0xAA8C, 0xCC80, 0xAA8D, 0xCC81, 0xAA8E, 0xCC82, 0xAA8F, 0xCC83, 0xAA90, + 0xCC84, 0xAA91, 0xCC85, 0xAA92, 0xCC86, 0xAA93, 0xCC87, 0xAA94, 0xCC88, 0xAA95, 0xCC89, 0xAA96, 0xCC8A, 0xAA97, 0xCC8B, 0xAA98, + 0xCC8C, 0xAA99, 0xCC8D, 0xAA9A, 0xCC8E, 0xAA9B, 0xCC8F, 0xAA9C, 0xCC90, 0xAA9D, 0xCC91, 0xAA9E, 0xCC92, 0xAA9F, 0xCC93, 0xAAA0, + 0xCC94, 0xAB41, 0xCC95, 0xAB42, 0xCC96, 0xAB43, 0xCC97, 0xAB44, 0xCC98, 0xC3B3, 0xCC99, 0xC3B4, 0xCC9A, 0xAB45, 0xCC9B, 0xAB46, + 0xCC9C, 0xC3B5, 0xCC9D, 0xAB47, 0xCC9E, 0xAB48, 0xCC9F, 0xAB49, 0xCCA0, 0xC3B6, 0xCCA1, 0xAB4A, 0xCCA2, 0xAB4B, 0xCCA3, 0xAB4C, + 0xCCA4, 0xAB4D, 0xCCA5, 0xAB4E, 0xCCA6, 0xAB4F, 0xCCA7, 0xAB50, 0xCCA8, 0xC3B7, 0xCCA9, 0xC3B8, 0xCCAA, 0xAB51, 0xCCAB, 0xC3B9, + 0xCCAC, 0xC3BA, 0xCCAD, 0xC3BB, 0xCCAE, 0xAB52, 0xCCAF, 0xAB53, 0xCCB0, 0xAB54, 0xCCB1, 0xAB55, 0xCCB2, 0xAB56, 0xCCB3, 0xAB57, + 0xCCB4, 0xC3BC, 0xCCB5, 0xC3BD, 0xCCB6, 0xAB58, 0xCCB7, 0xAB59, 0xCCB8, 0xC3BE, 0xCCB9, 0xAB5A, 0xCCBA, 0xAB61, 0xCCBB, 0xAB62, + 0xCCBC, 0xC3BF, 0xCCBD, 0xAB63, 0xCCBE, 0xAB64, 0xCCBF, 0xAB65, 0xCCC0, 0xAB66, 0xCCC1, 0xAB67, 0xCCC2, 0xAB68, 0xCCC3, 0xAB69, + 0xCCC4, 0xC3C0, 0xCCC5, 0xC3C1, 0xCCC6, 0xAB6A, 0xCCC7, 0xC3C2, 0xCCC8, 0xAB6B, 0xCCC9, 0xC3C3, 0xCCCA, 0xAB6C, 0xCCCB, 0xAB6D, + 0xCCCC, 0xAB6E, 0xCCCD, 0xAB6F, 0xCCCE, 0xAB70, 0xCCCF, 0xAB71, 0xCCD0, 0xC3C4, 0xCCD1, 0xAB72, 0xCCD2, 0xAB73, 0xCCD3, 0xAB74, + 0xCCD4, 0xC3C5, 0xCCD5, 0xAB75, 0xCCD6, 0xAB76, 0xCCD7, 0xAB77, 0xCCD8, 0xAB78, 0xCCD9, 0xAB79, 0xCCDA, 0xAB7A, 0xCCDB, 0xAB81, + 0xCCDC, 0xAB82, 0xCCDD, 0xAB83, 0xCCDE, 0xAB84, 0xCCDF, 0xAB85, 0xCCE0, 0xAB86, 0xCCE1, 0xAB87, 0xCCE2, 0xAB88, 0xCCE3, 0xAB89, + 0xCCE4, 0xC3C6, 0xCCE5, 0xAB8A, 0xCCE6, 0xAB8B, 0xCCE7, 0xAB8C, 0xCCE8, 0xAB8D, 0xCCE9, 0xAB8E, 0xCCEA, 0xAB8F, 0xCCEB, 0xAB90, + 0xCCEC, 0xC3C7, 0xCCED, 0xAB91, 0xCCEE, 0xAB92, 0xCCEF, 0xAB93, 0xCCF0, 0xC3C8, 0xCCF1, 0xAB94, 0xCCF2, 0xAB95, 0xCCF3, 0xAB96, + 0xCCF4, 0xAB97, 0xCCF5, 0xAB98, 0xCCF6, 0xAB99, 0xCCF7, 0xAB9A, 0xCCF8, 0xAB9B, 0xCCF9, 0xAB9C, 0xCCFA, 0xAB9D, 0xCCFB, 0xAB9E, + 0xCCFC, 0xAB9F, 0xCCFD, 0xABA0, 0xCCFE, 0xAC41, 0xCCFF, 0xAC42, 0xCD00, 0xAC43, 0xCD01, 0xC3C9, 0xCD02, 0xAC44, 0xCD03, 0xAC45, + 0xCD04, 0xAC46, 0xCD05, 0xAC47, 0xCD06, 0xAC48, 0xCD07, 0xAC49, 0xCD08, 0xC3CA, 0xCD09, 0xC3CB, 0xCD0A, 0xAC4A, 0xCD0B, 0xAC4B, + 0xCD0C, 0xC3CC, 0xCD0D, 0xAC4C, 0xCD0E, 0xAC4D, 0xCD0F, 0xAC4E, 0xCD10, 0xC3CD, 0xCD11, 0xAC4F, 0xCD12, 0xAC50, 0xCD13, 0xAC51, + 0xCD14, 0xAC52, 0xCD15, 0xAC53, 0xCD16, 0xAC54, 0xCD17, 0xAC55, 0xCD18, 0xC3CE, 0xCD19, 0xC3CF, 0xCD1A, 0xAC56, 0xCD1B, 0xC3D0, + 0xCD1C, 0xAC57, 0xCD1D, 0xC3D1, 0xCD1E, 0xAC58, 0xCD1F, 0xAC59, 0xCD20, 0xAC5A, 0xCD21, 0xAC61, 0xCD22, 0xAC62, 0xCD23, 0xAC63, + 0xCD24, 0xC3D2, 0xCD25, 0xAC64, 0xCD26, 0xAC65, 0xCD27, 0xAC66, 0xCD28, 0xC3D3, 0xCD29, 0xAC67, 0xCD2A, 0xAC68, 0xCD2B, 0xAC69, + 0xCD2C, 0xC3D4, 0xCD2D, 0xAC6A, 0xCD2E, 0xAC6B, 0xCD2F, 0xAC6C, 0xCD30, 0xAC6D, 0xCD31, 0xAC6E, 0xCD32, 0xAC6F, 0xCD33, 0xAC70, + 0xCD34, 0xAC71, 0xCD35, 0xAC72, 0xCD36, 0xAC73, 0xCD37, 0xAC74, 0xCD38, 0xAC75, 0xCD39, 0xC3D5, 0xCD3A, 0xAC76, 0xCD3B, 0xAC77, + 0xCD3C, 0xAC78, 0xCD3D, 0xAC79, 0xCD3E, 0xAC7A, 0xCD3F, 0xAC81, 0xCD40, 0xAC82, 0xCD41, 0xAC83, 0xCD42, 0xAC84, 0xCD43, 0xAC85, + 0xCD44, 0xAC86, 0xCD45, 0xAC87, 0xCD46, 0xAC88, 0xCD47, 0xAC89, 0xCD48, 0xAC8A, 0xCD49, 0xAC8B, 0xCD4A, 0xAC8C, 0xCD4B, 0xAC8D, + 0xCD4C, 0xAC8E, 0xCD4D, 0xAC8F, 0xCD4E, 0xAC90, 0xCD4F, 0xAC91, 0xCD50, 0xAC92, 0xCD51, 0xAC93, 0xCD52, 0xAC94, 0xCD53, 0xAC95, + 0xCD54, 0xAC96, 0xCD55, 0xAC97, 0xCD56, 0xAC98, 0xCD57, 0xAC99, 0xCD58, 0xAC9A, 0xCD59, 0xAC9B, 0xCD5A, 0xAC9C, 0xCD5B, 0xAC9D, + 0xCD5C, 0xC3D6, 0xCD5D, 0xAC9E, 0xCD5E, 0xAC9F, 0xCD5F, 0xACA0, 0xCD60, 0xC3D7, 0xCD61, 0xAD41, 0xCD62, 0xAD42, 0xCD63, 0xAD43, + 0xCD64, 0xC3D8, 0xCD65, 0xAD44, 0xCD66, 0xAD45, 0xCD67, 0xAD46, 0xCD68, 0xAD47, 0xCD69, 0xAD48, 0xCD6A, 0xAD49, 0xCD6B, 0xAD4A, + 0xCD6C, 0xC3D9, 0xCD6D, 0xC3DA, 0xCD6E, 0xAD4B, 0xCD6F, 0xC3DB, 0xCD70, 0xAD4C, 0xCD71, 0xC3DC, 0xCD72, 0xAD4D, 0xCD73, 0xAD4E, + 0xCD74, 0xAD4F, 0xCD75, 0xAD50, 0xCD76, 0xAD51, 0xCD77, 0xAD52, 0xCD78, 0xC3DD, 0xCD79, 0xAD53, 0xCD7A, 0xAD54, 0xCD7B, 0xAD55, + 0xCD7C, 0xAD56, 0xCD7D, 0xAD57, 0xCD7E, 0xAD58, 0xCD7F, 0xAD59, 0xCD80, 0xAD5A, 0xCD81, 0xAD61, 0xCD82, 0xAD62, 0xCD83, 0xAD63, + 0xCD84, 0xAD64, 0xCD85, 0xAD65, 0xCD86, 0xAD66, 0xCD87, 0xAD67, 0xCD88, 0xC3DE, 0xCD89, 0xAD68, 0xCD8A, 0xAD69, 0xCD8B, 0xAD6A, + 0xCD8C, 0xAD6B, 0xCD8D, 0xAD6C, 0xCD8E, 0xAD6D, 0xCD8F, 0xAD6E, 0xCD90, 0xAD6F, 0xCD91, 0xAD70, 0xCD92, 0xAD71, 0xCD93, 0xAD72, + 0xCD94, 0xC3DF, 0xCD95, 0xC3E0, 0xCD96, 0xAD73, 0xCD97, 0xAD74, 0xCD98, 0xC3E1, 0xCD99, 0xAD75, 0xCD9A, 0xAD76, 0xCD9B, 0xAD77, + 0xCD9C, 0xC3E2, 0xCD9D, 0xAD78, 0xCD9E, 0xAD79, 0xCD9F, 0xAD7A, 0xCDA0, 0xAD81, 0xCDA1, 0xAD82, 0xCDA2, 0xAD83, 0xCDA3, 0xAD84, + 0xCDA4, 0xC3E3, 0xCDA5, 0xC3E4, 0xCDA6, 0xAD85, 0xCDA7, 0xC3E5, 0xCDA8, 0xAD86, 0xCDA9, 0xC3E6, 0xCDAA, 0xAD87, 0xCDAB, 0xAD88, + 0xCDAC, 0xAD89, 0xCDAD, 0xAD8A, 0xCDAE, 0xAD8B, 0xCDAF, 0xAD8C, 0xCDB0, 0xC3E7, 0xCDB1, 0xAD8D, 0xCDB2, 0xAD8E, 0xCDB3, 0xAD8F, + 0xCDB4, 0xAD90, 0xCDB5, 0xAD91, 0xCDB6, 0xAD92, 0xCDB7, 0xAD93, 0xCDB8, 0xAD94, 0xCDB9, 0xAD95, 0xCDBA, 0xAD96, 0xCDBB, 0xAD97, + 0xCDBC, 0xAD98, 0xCDBD, 0xAD99, 0xCDBE, 0xAD9A, 0xCDBF, 0xAD9B, 0xCDC0, 0xAD9C, 0xCDC1, 0xAD9D, 0xCDC2, 0xAD9E, 0xCDC3, 0xAD9F, + 0xCDC4, 0xC3E8, 0xCDC5, 0xADA0, 0xCDC6, 0xAE41, 0xCDC7, 0xAE42, 0xCDC8, 0xAE43, 0xCDC9, 0xAE44, 0xCDCA, 0xAE45, 0xCDCB, 0xAE46, + 0xCDCC, 0xC3E9, 0xCDCD, 0xAE47, 0xCDCE, 0xAE48, 0xCDCF, 0xAE49, 0xCDD0, 0xC3EA, 0xCDD1, 0xAE4A, 0xCDD2, 0xAE4B, 0xCDD3, 0xAE4C, + 0xCDD4, 0xAE4D, 0xCDD5, 0xAE4E, 0xCDD6, 0xAE4F, 0xCDD7, 0xAE50, 0xCDD8, 0xAE51, 0xCDD9, 0xAE52, 0xCDDA, 0xAE53, 0xCDDB, 0xAE54, + 0xCDDC, 0xAE55, 0xCDDD, 0xAE56, 0xCDDE, 0xAE57, 0xCDDF, 0xAE58, 0xCDE0, 0xAE59, 0xCDE1, 0xAE5A, 0xCDE2, 0xAE61, 0xCDE3, 0xAE62, + 0xCDE4, 0xAE63, 0xCDE5, 0xAE64, 0xCDE6, 0xAE65, 0xCDE7, 0xAE66, 0xCDE8, 0xC3EB, 0xCDE9, 0xAE67, 0xCDEA, 0xAE68, 0xCDEB, 0xAE69, + 0xCDEC, 0xC3EC, 0xCDED, 0xAE6A, 0xCDEE, 0xAE6B, 0xCDEF, 0xAE6C, 0xCDF0, 0xC3ED, 0xCDF1, 0xAE6D, 0xCDF2, 0xAE6E, 0xCDF3, 0xAE6F, + 0xCDF4, 0xAE70, 0xCDF5, 0xAE71, 0xCDF6, 0xAE72, 0xCDF7, 0xAE73, 0xCDF8, 0xC3EE, 0xCDF9, 0xC3EF, 0xCDFA, 0xAE74, 0xCDFB, 0xC3F0, + 0xCDFC, 0xAE75, 0xCDFD, 0xC3F1, 0xCDFE, 0xAE76, 0xCDFF, 0xAE77, 0xCE00, 0xAE78, 0xCE01, 0xAE79, 0xCE02, 0xAE7A, 0xCE03, 0xAE81, + 0xCE04, 0xC3F2, 0xCE05, 0xAE82, 0xCE06, 0xAE83, 0xCE07, 0xAE84, 0xCE08, 0xC3F3, 0xCE09, 0xAE85, 0xCE0A, 0xAE86, 0xCE0B, 0xAE87, + 0xCE0C, 0xC3F4, 0xCE0D, 0xAE88, 0xCE0E, 0xAE89, 0xCE0F, 0xAE8A, 0xCE10, 0xAE8B, 0xCE11, 0xAE8C, 0xCE12, 0xAE8D, 0xCE13, 0xAE8E, + 0xCE14, 0xC3F5, 0xCE15, 0xAE8F, 0xCE16, 0xAE90, 0xCE17, 0xAE91, 0xCE18, 0xAE92, 0xCE19, 0xC3F6, 0xCE1A, 0xAE93, 0xCE1B, 0xAE94, + 0xCE1C, 0xAE95, 0xCE1D, 0xAE96, 0xCE1E, 0xAE97, 0xCE1F, 0xAE98, 0xCE20, 0xC3F7, 0xCE21, 0xC3F8, 0xCE22, 0xAE99, 0xCE23, 0xAE9A, + 0xCE24, 0xC3F9, 0xCE25, 0xAE9B, 0xCE26, 0xAE9C, 0xCE27, 0xAE9D, 0xCE28, 0xC3FA, 0xCE29, 0xAE9E, 0xCE2A, 0xAE9F, 0xCE2B, 0xAEA0, + 0xCE2C, 0xAF41, 0xCE2D, 0xAF42, 0xCE2E, 0xAF43, 0xCE2F, 0xAF44, 0xCE30, 0xC3FB, 0xCE31, 0xC3FC, 0xCE32, 0xAF45, 0xCE33, 0xC3FD, + 0xCE34, 0xAF46, 0xCE35, 0xC3FE, 0xCE36, 0xAF47, 0xCE37, 0xAF48, 0xCE38, 0xAF49, 0xCE39, 0xAF4A, 0xCE3A, 0xAF4B, 0xCE3B, 0xAF4C, + 0xCE3C, 0xAF4D, 0xCE3D, 0xAF4E, 0xCE3E, 0xAF4F, 0xCE3F, 0xAF50, 0xCE40, 0xAF51, 0xCE41, 0xAF52, 0xCE42, 0xAF53, 0xCE43, 0xAF54, + 0xCE44, 0xAF55, 0xCE45, 0xAF56, 0xCE46, 0xAF57, 0xCE47, 0xAF58, 0xCE48, 0xAF59, 0xCE49, 0xAF5A, 0xCE4A, 0xAF61, 0xCE4B, 0xAF62, + 0xCE4C, 0xAF63, 0xCE4D, 0xAF64, 0xCE4E, 0xAF65, 0xCE4F, 0xAF66, 0xCE50, 0xAF67, 0xCE51, 0xAF68, 0xCE52, 0xAF69, 0xCE53, 0xAF6A, + 0xCE54, 0xAF6B, 0xCE55, 0xAF6C, 0xCE56, 0xAF6D, 0xCE57, 0xAF6E, 0xCE58, 0xC4A1, 0xCE59, 0xC4A2, 0xCE5A, 0xAF6F, 0xCE5B, 0xAF70, + 0xCE5C, 0xC4A3, 0xCE5D, 0xAF71, 0xCE5E, 0xAF72, 0xCE5F, 0xC4A4, 0xCE60, 0xC4A5, 0xCE61, 0xC4A6, 0xCE62, 0xAF73, 0xCE63, 0xAF74, + 0xCE64, 0xAF75, 0xCE65, 0xAF76, 0xCE66, 0xAF77, 0xCE67, 0xAF78, 0xCE68, 0xC4A7, 0xCE69, 0xC4A8, 0xCE6A, 0xAF79, 0xCE6B, 0xC4A9, + 0xCE6C, 0xAF7A, 0xCE6D, 0xC4AA, 0xCE6E, 0xAF81, 0xCE6F, 0xAF82, 0xCE70, 0xAF83, 0xCE71, 0xAF84, 0xCE72, 0xAF85, 0xCE73, 0xAF86, + 0xCE74, 0xC4AB, 0xCE75, 0xC4AC, 0xCE76, 0xAF87, 0xCE77, 0xAF88, 0xCE78, 0xC4AD, 0xCE79, 0xAF89, 0xCE7A, 0xAF8A, 0xCE7B, 0xAF8B, + 0xCE7C, 0xC4AE, 0xCE7D, 0xAF8C, 0xCE7E, 0xAF8D, 0xCE7F, 0xAF8E, 0xCE80, 0xAF8F, 0xCE81, 0xAF90, 0xCE82, 0xAF91, 0xCE83, 0xAF92, + 0xCE84, 0xC4AF, 0xCE85, 0xC4B0, 0xCE86, 0xAF93, 0xCE87, 0xC4B1, 0xCE88, 0xAF94, 0xCE89, 0xC4B2, 0xCE8A, 0xAF95, 0xCE8B, 0xAF96, + 0xCE8C, 0xAF97, 0xCE8D, 0xAF98, 0xCE8E, 0xAF99, 0xCE8F, 0xAF9A, 0xCE90, 0xC4B3, 0xCE91, 0xC4B4, 0xCE92, 0xAF9B, 0xCE93, 0xAF9C, + 0xCE94, 0xC4B5, 0xCE95, 0xAF9D, 0xCE96, 0xAF9E, 0xCE97, 0xAF9F, 0xCE98, 0xC4B6, 0xCE99, 0xAFA0, 0xCE9A, 0xB041, 0xCE9B, 0xB042, + 0xCE9C, 0xB043, 0xCE9D, 0xB044, 0xCE9E, 0xB045, 0xCE9F, 0xB046, 0xCEA0, 0xC4B7, 0xCEA1, 0xC4B8, 0xCEA2, 0xB047, 0xCEA3, 0xC4B9, + 0xCEA4, 0xC4BA, 0xCEA5, 0xC4BB, 0xCEA6, 0xB048, 0xCEA7, 0xB049, 0xCEA8, 0xB04A, 0xCEA9, 0xB04B, 0xCEAA, 0xB04C, 0xCEAB, 0xB04D, + 0xCEAC, 0xC4BC, 0xCEAD, 0xC4BD, 0xCEAE, 0xB04E, 0xCEAF, 0xB04F, 0xCEB0, 0xB050, 0xCEB1, 0xB051, 0xCEB2, 0xB052, 0xCEB3, 0xB053, + 0xCEB4, 0xB054, 0xCEB5, 0xB055, 0xCEB6, 0xB056, 0xCEB7, 0xB057, 0xCEB8, 0xB058, 0xCEB9, 0xB059, 0xCEBA, 0xB05A, 0xCEBB, 0xB061, + 0xCEBC, 0xB062, 0xCEBD, 0xB063, 0xCEBE, 0xB064, 0xCEBF, 0xB065, 0xCEC0, 0xB066, 0xCEC1, 0xC4BE, 0xCEC2, 0xB067, 0xCEC3, 0xB068, + 0xCEC4, 0xB069, 0xCEC5, 0xB06A, 0xCEC6, 0xB06B, 0xCEC7, 0xB06C, 0xCEC8, 0xB06D, 0xCEC9, 0xB06E, 0xCECA, 0xB06F, 0xCECB, 0xB070, + 0xCECC, 0xB071, 0xCECD, 0xB072, 0xCECE, 0xB073, 0xCECF, 0xB074, 0xCED0, 0xB075, 0xCED1, 0xB076, 0xCED2, 0xB077, 0xCED3, 0xB078, + 0xCED4, 0xB079, 0xCED5, 0xB07A, 0xCED6, 0xB081, 0xCED7, 0xB082, 0xCED8, 0xB083, 0xCED9, 0xB084, 0xCEDA, 0xB085, 0xCEDB, 0xB086, + 0xCEDC, 0xB087, 0xCEDD, 0xB088, 0xCEDE, 0xB089, 0xCEDF, 0xB08A, 0xCEE0, 0xB08B, 0xCEE1, 0xB08C, 0xCEE2, 0xB08D, 0xCEE3, 0xB08E, + 0xCEE4, 0xC4BF, 0xCEE5, 0xC4C0, 0xCEE6, 0xB08F, 0xCEE7, 0xB090, 0xCEE8, 0xC4C1, 0xCEE9, 0xB091, 0xCEEA, 0xB092, 0xCEEB, 0xC4C2, + 0xCEEC, 0xC4C3, 0xCEED, 0xB093, 0xCEEE, 0xB094, 0xCEEF, 0xB095, 0xCEF0, 0xB096, 0xCEF1, 0xB097, 0xCEF2, 0xB098, 0xCEF3, 0xB099, + 0xCEF4, 0xC4C4, 0xCEF5, 0xC4C5, 0xCEF6, 0xB09A, 0xCEF7, 0xC4C6, 0xCEF8, 0xC4C7, 0xCEF9, 0xC4C8, 0xCEFA, 0xB09B, 0xCEFB, 0xB09C, + 0xCEFC, 0xB09D, 0xCEFD, 0xB09E, 0xCEFE, 0xB09F, 0xCEFF, 0xB0A0, 0xCF00, 0xC4C9, 0xCF01, 0xC4CA, 0xCF02, 0xB141, 0xCF03, 0xB142, + 0xCF04, 0xC4CB, 0xCF05, 0xB143, 0xCF06, 0xB144, 0xCF07, 0xB145, 0xCF08, 0xC4CC, 0xCF09, 0xB146, 0xCF0A, 0xB147, 0xCF0B, 0xB148, + 0xCF0C, 0xB149, 0xCF0D, 0xB14A, 0xCF0E, 0xB14B, 0xCF0F, 0xB14C, 0xCF10, 0xC4CD, 0xCF11, 0xC4CE, 0xCF12, 0xB14D, 0xCF13, 0xC4CF, + 0xCF14, 0xB14E, 0xCF15, 0xC4D0, 0xCF16, 0xB14F, 0xCF17, 0xB150, 0xCF18, 0xB151, 0xCF19, 0xB152, 0xCF1A, 0xB153, 0xCF1B, 0xB154, + 0xCF1C, 0xC4D1, 0xCF1D, 0xB155, 0xCF1E, 0xB156, 0xCF1F, 0xB157, 0xCF20, 0xC4D2, 0xCF21, 0xB158, 0xCF22, 0xB159, 0xCF23, 0xB15A, + 0xCF24, 0xC4D3, 0xCF25, 0xB161, 0xCF26, 0xB162, 0xCF27, 0xB163, 0xCF28, 0xB164, 0xCF29, 0xB165, 0xCF2A, 0xB166, 0xCF2B, 0xB167, + 0xCF2C, 0xC4D4, 0xCF2D, 0xC4D5, 0xCF2E, 0xB168, 0xCF2F, 0xC4D6, 0xCF30, 0xC4D7, 0xCF31, 0xC4D8, 0xCF32, 0xB169, 0xCF33, 0xB16A, + 0xCF34, 0xB16B, 0xCF35, 0xB16C, 0xCF36, 0xB16D, 0xCF37, 0xB16E, 0xCF38, 0xC4D9, 0xCF39, 0xB16F, 0xCF3A, 0xB170, 0xCF3B, 0xB171, + 0xCF3C, 0xB172, 0xCF3D, 0xB173, 0xCF3E, 0xB174, 0xCF3F, 0xB175, 0xCF40, 0xB176, 0xCF41, 0xB177, 0xCF42, 0xB178, 0xCF43, 0xB179, + 0xCF44, 0xB17A, 0xCF45, 0xB181, 0xCF46, 0xB182, 0xCF47, 0xB183, 0xCF48, 0xB184, 0xCF49, 0xB185, 0xCF4A, 0xB186, 0xCF4B, 0xB187, + 0xCF4C, 0xB188, 0xCF4D, 0xB189, 0xCF4E, 0xB18A, 0xCF4F, 0xB18B, 0xCF50, 0xB18C, 0xCF51, 0xB18D, 0xCF52, 0xB18E, 0xCF53, 0xB18F, + 0xCF54, 0xC4DA, 0xCF55, 0xC4DB, 0xCF56, 0xB190, 0xCF57, 0xB191, 0xCF58, 0xC4DC, 0xCF59, 0xB192, 0xCF5A, 0xB193, 0xCF5B, 0xB194, + 0xCF5C, 0xC4DD, 0xCF5D, 0xB195, 0xCF5E, 0xB196, 0xCF5F, 0xB197, 0xCF60, 0xB198, 0xCF61, 0xB199, 0xCF62, 0xB19A, 0xCF63, 0xB19B, + 0xCF64, 0xC4DE, 0xCF65, 0xC4DF, 0xCF66, 0xB19C, 0xCF67, 0xC4E0, 0xCF68, 0xB19D, 0xCF69, 0xC4E1, 0xCF6A, 0xB19E, 0xCF6B, 0xB19F, + 0xCF6C, 0xB1A0, 0xCF6D, 0xB241, 0xCF6E, 0xB242, 0xCF6F, 0xB243, 0xCF70, 0xC4E2, 0xCF71, 0xC4E3, 0xCF72, 0xB244, 0xCF73, 0xB245, + 0xCF74, 0xC4E4, 0xCF75, 0xB246, 0xCF76, 0xB247, 0xCF77, 0xB248, 0xCF78, 0xC4E5, 0xCF79, 0xB249, 0xCF7A, 0xB24A, 0xCF7B, 0xB24B, + 0xCF7C, 0xB24C, 0xCF7D, 0xB24D, 0xCF7E, 0xB24E, 0xCF7F, 0xB24F, 0xCF80, 0xC4E6, 0xCF81, 0xB250, 0xCF82, 0xB251, 0xCF83, 0xB252, + 0xCF84, 0xB253, 0xCF85, 0xC4E7, 0xCF86, 0xB254, 0xCF87, 0xB255, 0xCF88, 0xB256, 0xCF89, 0xB257, 0xCF8A, 0xB258, 0xCF8B, 0xB259, + 0xCF8C, 0xC4E8, 0xCF8D, 0xB25A, 0xCF8E, 0xB261, 0xCF8F, 0xB262, 0xCF90, 0xB263, 0xCF91, 0xB264, 0xCF92, 0xB265, 0xCF93, 0xB266, + 0xCF94, 0xB267, 0xCF95, 0xB268, 0xCF96, 0xB269, 0xCF97, 0xB26A, 0xCF98, 0xB26B, 0xCF99, 0xB26C, 0xCF9A, 0xB26D, 0xCF9B, 0xB26E, + 0xCF9C, 0xB26F, 0xCF9D, 0xB270, 0xCF9E, 0xB271, 0xCF9F, 0xB272, 0xCFA0, 0xB273, 0xCFA1, 0xC4E9, 0xCFA2, 0xB274, 0xCFA3, 0xB275, + 0xCFA4, 0xB276, 0xCFA5, 0xB277, 0xCFA6, 0xB278, 0xCFA7, 0xB279, 0xCFA8, 0xC4EA, 0xCFA9, 0xB27A, 0xCFAA, 0xB281, 0xCFAB, 0xB282, + 0xCFAC, 0xB283, 0xCFAD, 0xB284, 0xCFAE, 0xB285, 0xCFAF, 0xB286, 0xCFB0, 0xC4EB, 0xCFB1, 0xB287, 0xCFB2, 0xB288, 0xCFB3, 0xB289, + 0xCFB4, 0xB28A, 0xCFB5, 0xB28B, 0xCFB6, 0xB28C, 0xCFB7, 0xB28D, 0xCFB8, 0xB28E, 0xCFB9, 0xB28F, 0xCFBA, 0xB290, 0xCFBB, 0xB291, + 0xCFBC, 0xB292, 0xCFBD, 0xB293, 0xCFBE, 0xB294, 0xCFBF, 0xB295, 0xCFC0, 0xB296, 0xCFC1, 0xB297, 0xCFC2, 0xB298, 0xCFC3, 0xB299, + 0xCFC4, 0xC4EC, 0xCFC5, 0xB29A, 0xCFC6, 0xB29B, 0xCFC7, 0xB29C, 0xCFC8, 0xB29D, 0xCFC9, 0xB29E, 0xCFCA, 0xB29F, 0xCFCB, 0xB2A0, + 0xCFCC, 0xB341, 0xCFCD, 0xB342, 0xCFCE, 0xB343, 0xCFCF, 0xB344, 0xCFD0, 0xB345, 0xCFD1, 0xB346, 0xCFD2, 0xB347, 0xCFD3, 0xB348, + 0xCFD4, 0xB349, 0xCFD5, 0xB34A, 0xCFD6, 0xB34B, 0xCFD7, 0xB34C, 0xCFD8, 0xB34D, 0xCFD9, 0xB34E, 0xCFDA, 0xB34F, 0xCFDB, 0xB350, + 0xCFDC, 0xB351, 0xCFDD, 0xB352, 0xCFDE, 0xB353, 0xCFDF, 0xB354, 0xCFE0, 0xC4ED, 0xCFE1, 0xC4EE, 0xCFE2, 0xB355, 0xCFE3, 0xB356, + 0xCFE4, 0xC4EF, 0xCFE5, 0xB357, 0xCFE6, 0xB358, 0xCFE7, 0xB359, 0xCFE8, 0xC4F0, 0xCFE9, 0xB35A, 0xCFEA, 0xB361, 0xCFEB, 0xB362, + 0xCFEC, 0xB363, 0xCFED, 0xB364, 0xCFEE, 0xB365, 0xCFEF, 0xB366, 0xCFF0, 0xC4F1, 0xCFF1, 0xC4F2, 0xCFF2, 0xB367, 0xCFF3, 0xC4F3, + 0xCFF4, 0xB368, 0xCFF5, 0xC4F4, 0xCFF6, 0xB369, 0xCFF7, 0xB36A, 0xCFF8, 0xB36B, 0xCFF9, 0xB36C, 0xCFFA, 0xB36D, 0xCFFB, 0xB36E, + 0xCFFC, 0xC4F5, 0xCFFD, 0xB36F, 0xCFFE, 0xB370, 0xCFFF, 0xB371, 0xD000, 0xC4F6, 0xD001, 0xB372, 0xD002, 0xB373, 0xD003, 0xB374, + 0xD004, 0xC4F7, 0xD005, 0xB375, 0xD006, 0xB376, 0xD007, 0xB377, 0xD008, 0xB378, 0xD009, 0xB379, 0xD00A, 0xB37A, 0xD00B, 0xB381, + 0xD00C, 0xB382, 0xD00D, 0xB383, 0xD00E, 0xB384, 0xD00F, 0xB385, 0xD010, 0xB386, 0xD011, 0xC4F8, 0xD012, 0xB387, 0xD013, 0xB388, + 0xD014, 0xB389, 0xD015, 0xB38A, 0xD016, 0xB38B, 0xD017, 0xB38C, 0xD018, 0xC4F9, 0xD019, 0xB38D, 0xD01A, 0xB38E, 0xD01B, 0xB38F, + 0xD01C, 0xB390, 0xD01D, 0xB391, 0xD01E, 0xB392, 0xD01F, 0xB393, 0xD020, 0xB394, 0xD021, 0xB395, 0xD022, 0xB396, 0xD023, 0xB397, + 0xD024, 0xB398, 0xD025, 0xB399, 0xD026, 0xB39A, 0xD027, 0xB39B, 0xD028, 0xB39C, 0xD029, 0xB39D, 0xD02A, 0xB39E, 0xD02B, 0xB39F, + 0xD02C, 0xB3A0, 0xD02D, 0xC4FA, 0xD02E, 0xB441, 0xD02F, 0xB442, 0xD030, 0xB443, 0xD031, 0xB444, 0xD032, 0xB445, 0xD033, 0xB446, + 0xD034, 0xC4FB, 0xD035, 0xC4FC, 0xD036, 0xB447, 0xD037, 0xB448, 0xD038, 0xC4FD, 0xD039, 0xB449, 0xD03A, 0xB44A, 0xD03B, 0xB44B, + 0xD03C, 0xC4FE, 0xD03D, 0xB44C, 0xD03E, 0xB44D, 0xD03F, 0xB44E, 0xD040, 0xB44F, 0xD041, 0xB450, 0xD042, 0xB451, 0xD043, 0xB452, + 0xD044, 0xC5A1, 0xD045, 0xC5A2, 0xD046, 0xB453, 0xD047, 0xC5A3, 0xD048, 0xB454, 0xD049, 0xC5A4, 0xD04A, 0xB455, 0xD04B, 0xB456, + 0xD04C, 0xB457, 0xD04D, 0xB458, 0xD04E, 0xB459, 0xD04F, 0xB45A, 0xD050, 0xC5A5, 0xD051, 0xB461, 0xD052, 0xB462, 0xD053, 0xB463, + 0xD054, 0xC5A6, 0xD055, 0xB464, 0xD056, 0xB465, 0xD057, 0xB466, 0xD058, 0xC5A7, 0xD059, 0xB467, 0xD05A, 0xB468, 0xD05B, 0xB469, + 0xD05C, 0xB46A, 0xD05D, 0xB46B, 0xD05E, 0xB46C, 0xD05F, 0xB46D, 0xD060, 0xC5A8, 0xD061, 0xB46E, 0xD062, 0xB46F, 0xD063, 0xB470, + 0xD064, 0xB471, 0xD065, 0xB472, 0xD066, 0xB473, 0xD067, 0xB474, 0xD068, 0xB475, 0xD069, 0xB476, 0xD06A, 0xB477, 0xD06B, 0xB478, + 0xD06C, 0xC5A9, 0xD06D, 0xC5AA, 0xD06E, 0xB479, 0xD06F, 0xB47A, 0xD070, 0xC5AB, 0xD071, 0xB481, 0xD072, 0xB482, 0xD073, 0xB483, + 0xD074, 0xC5AC, 0xD075, 0xB484, 0xD076, 0xB485, 0xD077, 0xB486, 0xD078, 0xB487, 0xD079, 0xB488, 0xD07A, 0xB489, 0xD07B, 0xB48A, + 0xD07C, 0xC5AD, 0xD07D, 0xC5AE, 0xD07E, 0xB48B, 0xD07F, 0xB48C, 0xD080, 0xB48D, 0xD081, 0xC5AF, 0xD082, 0xB48E, 0xD083, 0xB48F, + 0xD084, 0xB490, 0xD085, 0xB491, 0xD086, 0xB492, 0xD087, 0xB493, 0xD088, 0xB494, 0xD089, 0xB495, 0xD08A, 0xB496, 0xD08B, 0xB497, + 0xD08C, 0xB498, 0xD08D, 0xB499, 0xD08E, 0xB49A, 0xD08F, 0xB49B, 0xD090, 0xB49C, 0xD091, 0xB49D, 0xD092, 0xB49E, 0xD093, 0xB49F, + 0xD094, 0xB4A0, 0xD095, 0xB541, 0xD096, 0xB542, 0xD097, 0xB543, 0xD098, 0xB544, 0xD099, 0xB545, 0xD09A, 0xB546, 0xD09B, 0xB547, + 0xD09C, 0xB548, 0xD09D, 0xB549, 0xD09E, 0xB54A, 0xD09F, 0xB54B, 0xD0A0, 0xB54C, 0xD0A1, 0xB54D, 0xD0A2, 0xB54E, 0xD0A3, 0xB54F, + 0xD0A4, 0xC5B0, 0xD0A5, 0xC5B1, 0xD0A6, 0xB550, 0xD0A7, 0xB551, 0xD0A8, 0xC5B2, 0xD0A9, 0xB552, 0xD0AA, 0xB553, 0xD0AB, 0xB554, + 0xD0AC, 0xC5B3, 0xD0AD, 0xB555, 0xD0AE, 0xB556, 0xD0AF, 0xB557, 0xD0B0, 0xB558, 0xD0B1, 0xB559, 0xD0B2, 0xB55A, 0xD0B3, 0xB561, + 0xD0B4, 0xC5B4, 0xD0B5, 0xC5B5, 0xD0B6, 0xB562, 0xD0B7, 0xC5B6, 0xD0B8, 0xB563, 0xD0B9, 0xC5B7, 0xD0BA, 0xB564, 0xD0BB, 0xB565, + 0xD0BC, 0xB566, 0xD0BD, 0xB567, 0xD0BE, 0xB568, 0xD0BF, 0xB569, 0xD0C0, 0xC5B8, 0xD0C1, 0xC5B9, 0xD0C2, 0xB56A, 0xD0C3, 0xB56B, + 0xD0C4, 0xC5BA, 0xD0C5, 0xB56C, 0xD0C6, 0xB56D, 0xD0C7, 0xB56E, 0xD0C8, 0xC5BB, 0xD0C9, 0xC5BC, 0xD0CA, 0xB56F, 0xD0CB, 0xB570, + 0xD0CC, 0xB571, 0xD0CD, 0xB572, 0xD0CE, 0xB573, 0xD0CF, 0xB574, 0xD0D0, 0xC5BD, 0xD0D1, 0xC5BE, 0xD0D2, 0xB575, 0xD0D3, 0xC5BF, + 0xD0D4, 0xC5C0, 0xD0D5, 0xC5C1, 0xD0D6, 0xB576, 0xD0D7, 0xB577, 0xD0D8, 0xB578, 0xD0D9, 0xB579, 0xD0DA, 0xB57A, 0xD0DB, 0xB581, + 0xD0DC, 0xC5C2, 0xD0DD, 0xC5C3, 0xD0DE, 0xB582, 0xD0DF, 0xB583, 0xD0E0, 0xC5C4, 0xD0E1, 0xB584, 0xD0E2, 0xB585, 0xD0E3, 0xB586, + 0xD0E4, 0xC5C5, 0xD0E5, 0xB587, 0xD0E6, 0xB588, 0xD0E7, 0xB589, 0xD0E8, 0xB58A, 0xD0E9, 0xB58B, 0xD0EA, 0xB58C, 0xD0EB, 0xB58D, + 0xD0EC, 0xC5C6, 0xD0ED, 0xC5C7, 0xD0EE, 0xB58E, 0xD0EF, 0xC5C8, 0xD0F0, 0xC5C9, 0xD0F1, 0xC5CA, 0xD0F2, 0xB58F, 0xD0F3, 0xB590, + 0xD0F4, 0xB591, 0xD0F5, 0xB592, 0xD0F6, 0xB593, 0xD0F7, 0xB594, 0xD0F8, 0xC5CB, 0xD0F9, 0xB595, 0xD0FA, 0xB596, 0xD0FB, 0xB597, + 0xD0FC, 0xB598, 0xD0FD, 0xB599, 0xD0FE, 0xB59A, 0xD0FF, 0xB59B, 0xD100, 0xB59C, 0xD101, 0xB59D, 0xD102, 0xB59E, 0xD103, 0xB59F, + 0xD104, 0xB5A0, 0xD105, 0xB641, 0xD106, 0xB642, 0xD107, 0xB643, 0xD108, 0xB644, 0xD109, 0xB645, 0xD10A, 0xB646, 0xD10B, 0xB647, + 0xD10C, 0xB648, 0xD10D, 0xC5CC, 0xD10E, 0xB649, 0xD10F, 0xB64A, 0xD110, 0xB64B, 0xD111, 0xB64C, 0xD112, 0xB64D, 0xD113, 0xB64E, + 0xD114, 0xB64F, 0xD115, 0xB650, 0xD116, 0xB651, 0xD117, 0xB652, 0xD118, 0xB653, 0xD119, 0xB654, 0xD11A, 0xB655, 0xD11B, 0xB656, + 0xD11C, 0xB657, 0xD11D, 0xB658, 0xD11E, 0xB659, 0xD11F, 0xB65A, 0xD120, 0xB661, 0xD121, 0xB662, 0xD122, 0xB663, 0xD123, 0xB664, + 0xD124, 0xB665, 0xD125, 0xB666, 0xD126, 0xB667, 0xD127, 0xB668, 0xD128, 0xB669, 0xD129, 0xB66A, 0xD12A, 0xB66B, 0xD12B, 0xB66C, + 0xD12C, 0xB66D, 0xD12D, 0xB66E, 0xD12E, 0xB66F, 0xD12F, 0xB670, 0xD130, 0xC5CD, 0xD131, 0xC5CE, 0xD132, 0xB671, 0xD133, 0xB672, + 0xD134, 0xC5CF, 0xD135, 0xB673, 0xD136, 0xB674, 0xD137, 0xB675, 0xD138, 0xC5D0, 0xD139, 0xB676, 0xD13A, 0xC5D1, 0xD13B, 0xB677, + 0xD13C, 0xB678, 0xD13D, 0xB679, 0xD13E, 0xB67A, 0xD13F, 0xB681, 0xD140, 0xC5D2, 0xD141, 0xC5D3, 0xD142, 0xB682, 0xD143, 0xC5D4, + 0xD144, 0xC5D5, 0xD145, 0xC5D6, 0xD146, 0xB683, 0xD147, 0xB684, 0xD148, 0xB685, 0xD149, 0xB686, 0xD14A, 0xB687, 0xD14B, 0xB688, + 0xD14C, 0xC5D7, 0xD14D, 0xC5D8, 0xD14E, 0xB689, 0xD14F, 0xB68A, 0xD150, 0xC5D9, 0xD151, 0xB68B, 0xD152, 0xB68C, 0xD153, 0xB68D, + 0xD154, 0xC5DA, 0xD155, 0xB68E, 0xD156, 0xB68F, 0xD157, 0xB690, 0xD158, 0xB691, 0xD159, 0xB692, 0xD15A, 0xB693, 0xD15B, 0xB694, + 0xD15C, 0xC5DB, 0xD15D, 0xC5DC, 0xD15E, 0xB695, 0xD15F, 0xC5DD, 0xD160, 0xB696, 0xD161, 0xC5DE, 0xD162, 0xB697, 0xD163, 0xB698, + 0xD164, 0xB699, 0xD165, 0xB69A, 0xD166, 0xB69B, 0xD167, 0xB69C, 0xD168, 0xC5DF, 0xD169, 0xB69D, 0xD16A, 0xB69E, 0xD16B, 0xB69F, + 0xD16C, 0xC5E0, 0xD16D, 0xB6A0, 0xD16E, 0xB741, 0xD16F, 0xB742, 0xD170, 0xB743, 0xD171, 0xB744, 0xD172, 0xB745, 0xD173, 0xB746, + 0xD174, 0xB747, 0xD175, 0xB748, 0xD176, 0xB749, 0xD177, 0xB74A, 0xD178, 0xB74B, 0xD179, 0xB74C, 0xD17A, 0xB74D, 0xD17B, 0xB74E, + 0xD17C, 0xC5E1, 0xD17D, 0xB74F, 0xD17E, 0xB750, 0xD17F, 0xB751, 0xD180, 0xB752, 0xD181, 0xB753, 0xD182, 0xB754, 0xD183, 0xB755, + 0xD184, 0xC5E2, 0xD185, 0xB756, 0xD186, 0xB757, 0xD187, 0xB758, 0xD188, 0xC5E3, 0xD189, 0xB759, 0xD18A, 0xB75A, 0xD18B, 0xB761, + 0xD18C, 0xB762, 0xD18D, 0xB763, 0xD18E, 0xB764, 0xD18F, 0xB765, 0xD190, 0xB766, 0xD191, 0xB767, 0xD192, 0xB768, 0xD193, 0xB769, + 0xD194, 0xB76A, 0xD195, 0xB76B, 0xD196, 0xB76C, 0xD197, 0xB76D, 0xD198, 0xB76E, 0xD199, 0xB76F, 0xD19A, 0xB770, 0xD19B, 0xB771, + 0xD19C, 0xB772, 0xD19D, 0xB773, 0xD19E, 0xB774, 0xD19F, 0xB775, 0xD1A0, 0xC5E4, 0xD1A1, 0xC5E5, 0xD1A2, 0xB776, 0xD1A3, 0xB777, + 0xD1A4, 0xC5E6, 0xD1A5, 0xB778, 0xD1A6, 0xB779, 0xD1A7, 0xB77A, 0xD1A8, 0xC5E7, 0xD1A9, 0xB781, 0xD1AA, 0xB782, 0xD1AB, 0xB783, + 0xD1AC, 0xB784, 0xD1AD, 0xB785, 0xD1AE, 0xB786, 0xD1AF, 0xB787, 0xD1B0, 0xC5E8, 0xD1B1, 0xC5E9, 0xD1B2, 0xB788, 0xD1B3, 0xC5EA, + 0xD1B4, 0xB789, 0xD1B5, 0xC5EB, 0xD1B6, 0xB78A, 0xD1B7, 0xB78B, 0xD1B8, 0xB78C, 0xD1B9, 0xB78D, 0xD1BA, 0xC5EC, 0xD1BB, 0xB78E, + 0xD1BC, 0xC5ED, 0xD1BD, 0xB78F, 0xD1BE, 0xB790, 0xD1BF, 0xB791, 0xD1C0, 0xC5EE, 0xD1C1, 0xB792, 0xD1C2, 0xB793, 0xD1C3, 0xB794, + 0xD1C4, 0xB795, 0xD1C5, 0xB796, 0xD1C6, 0xB797, 0xD1C7, 0xB798, 0xD1C8, 0xB799, 0xD1C9, 0xB79A, 0xD1CA, 0xB79B, 0xD1CB, 0xB79C, + 0xD1CC, 0xB79D, 0xD1CD, 0xB79E, 0xD1CE, 0xB79F, 0xD1CF, 0xB7A0, 0xD1D0, 0xB841, 0xD1D1, 0xB842, 0xD1D2, 0xB843, 0xD1D3, 0xB844, + 0xD1D4, 0xB845, 0xD1D5, 0xB846, 0xD1D6, 0xB847, 0xD1D7, 0xB848, 0xD1D8, 0xC5EF, 0xD1D9, 0xB849, 0xD1DA, 0xB84A, 0xD1DB, 0xB84B, + 0xD1DC, 0xB84C, 0xD1DD, 0xB84D, 0xD1DE, 0xB84E, 0xD1DF, 0xB84F, 0xD1E0, 0xB850, 0xD1E1, 0xB851, 0xD1E2, 0xB852, 0xD1E3, 0xB853, + 0xD1E4, 0xB854, 0xD1E5, 0xB855, 0xD1E6, 0xB856, 0xD1E7, 0xB857, 0xD1E8, 0xB858, 0xD1E9, 0xB859, 0xD1EA, 0xB85A, 0xD1EB, 0xB861, + 0xD1EC, 0xB862, 0xD1ED, 0xB863, 0xD1EE, 0xB864, 0xD1EF, 0xB865, 0xD1F0, 0xB866, 0xD1F1, 0xB867, 0xD1F2, 0xB868, 0xD1F3, 0xB869, + 0xD1F4, 0xC5F0, 0xD1F5, 0xB86A, 0xD1F6, 0xB86B, 0xD1F7, 0xB86C, 0xD1F8, 0xC5F1, 0xD1F9, 0xB86D, 0xD1FA, 0xB86E, 0xD1FB, 0xB86F, + 0xD1FC, 0xB870, 0xD1FD, 0xB871, 0xD1FE, 0xB872, 0xD1FF, 0xB873, 0xD200, 0xB874, 0xD201, 0xB875, 0xD202, 0xB876, 0xD203, 0xB877, + 0xD204, 0xB878, 0xD205, 0xB879, 0xD206, 0xB87A, 0xD207, 0xC5F2, 0xD208, 0xB881, 0xD209, 0xC5F3, 0xD20A, 0xB882, 0xD20B, 0xB883, + 0xD20C, 0xB884, 0xD20D, 0xB885, 0xD20E, 0xB886, 0xD20F, 0xB887, 0xD210, 0xC5F4, 0xD211, 0xB888, 0xD212, 0xB889, 0xD213, 0xB88A, + 0xD214, 0xB88B, 0xD215, 0xB88C, 0xD216, 0xB88D, 0xD217, 0xB88E, 0xD218, 0xB88F, 0xD219, 0xB890, 0xD21A, 0xB891, 0xD21B, 0xB892, + 0xD21C, 0xB893, 0xD21D, 0xB894, 0xD21E, 0xB895, 0xD21F, 0xB896, 0xD220, 0xB897, 0xD221, 0xB898, 0xD222, 0xB899, 0xD223, 0xB89A, + 0xD224, 0xB89B, 0xD225, 0xB89C, 0xD226, 0xB89D, 0xD227, 0xB89E, 0xD228, 0xB89F, 0xD229, 0xB8A0, 0xD22A, 0xB941, 0xD22B, 0xB942, + 0xD22C, 0xC5F5, 0xD22D, 0xC5F6, 0xD22E, 0xB943, 0xD22F, 0xB944, 0xD230, 0xC5F7, 0xD231, 0xB945, 0xD232, 0xB946, 0xD233, 0xB947, + 0xD234, 0xC5F8, 0xD235, 0xB948, 0xD236, 0xB949, 0xD237, 0xB94A, 0xD238, 0xB94B, 0xD239, 0xB94C, 0xD23A, 0xB94D, 0xD23B, 0xB94E, + 0xD23C, 0xC5F9, 0xD23D, 0xC5FA, 0xD23E, 0xB94F, 0xD23F, 0xC5FB, 0xD240, 0xB950, 0xD241, 0xC5FC, 0xD242, 0xB951, 0xD243, 0xB952, + 0xD244, 0xB953, 0xD245, 0xB954, 0xD246, 0xB955, 0xD247, 0xB956, 0xD248, 0xC5FD, 0xD249, 0xB957, 0xD24A, 0xB958, 0xD24B, 0xB959, + 0xD24C, 0xB95A, 0xD24D, 0xB961, 0xD24E, 0xB962, 0xD24F, 0xB963, 0xD250, 0xB964, 0xD251, 0xB965, 0xD252, 0xB966, 0xD253, 0xB967, + 0xD254, 0xB968, 0xD255, 0xB969, 0xD256, 0xB96A, 0xD257, 0xB96B, 0xD258, 0xB96C, 0xD259, 0xB96D, 0xD25A, 0xB96E, 0xD25B, 0xB96F, + 0xD25C, 0xC5FE, 0xD25D, 0xB970, 0xD25E, 0xB971, 0xD25F, 0xB972, 0xD260, 0xB973, 0xD261, 0xB974, 0xD262, 0xB975, 0xD263, 0xB976, + 0xD264, 0xC6A1, 0xD265, 0xB977, 0xD266, 0xB978, 0xD267, 0xB979, 0xD268, 0xB97A, 0xD269, 0xB981, 0xD26A, 0xB982, 0xD26B, 0xB983, + 0xD26C, 0xB984, 0xD26D, 0xB985, 0xD26E, 0xB986, 0xD26F, 0xB987, 0xD270, 0xB988, 0xD271, 0xB989, 0xD272, 0xB98A, 0xD273, 0xB98B, + 0xD274, 0xB98C, 0xD275, 0xB98D, 0xD276, 0xB98E, 0xD277, 0xB98F, 0xD278, 0xB990, 0xD279, 0xB991, 0xD27A, 0xB992, 0xD27B, 0xB993, + 0xD27C, 0xB994, 0xD27D, 0xB995, 0xD27E, 0xB996, 0xD27F, 0xB997, 0xD280, 0xC6A2, 0xD281, 0xC6A3, 0xD282, 0xB998, 0xD283, 0xB999, + 0xD284, 0xC6A4, 0xD285, 0xB99A, 0xD286, 0xB99B, 0xD287, 0xB99C, 0xD288, 0xC6A5, 0xD289, 0xB99D, 0xD28A, 0xB99E, 0xD28B, 0xB99F, + 0xD28C, 0xB9A0, 0xD28D, 0xBA41, 0xD28E, 0xBA42, 0xD28F, 0xBA43, 0xD290, 0xC6A6, 0xD291, 0xC6A7, 0xD292, 0xBA44, 0xD293, 0xBA45, + 0xD294, 0xBA46, 0xD295, 0xC6A8, 0xD296, 0xBA47, 0xD297, 0xBA48, 0xD298, 0xBA49, 0xD299, 0xBA4A, 0xD29A, 0xBA4B, 0xD29B, 0xBA4C, + 0xD29C, 0xC6A9, 0xD29D, 0xBA4D, 0xD29E, 0xBA4E, 0xD29F, 0xBA4F, 0xD2A0, 0xC6AA, 0xD2A1, 0xBA50, 0xD2A2, 0xBA51, 0xD2A3, 0xBA52, + 0xD2A4, 0xC6AB, 0xD2A5, 0xBA53, 0xD2A6, 0xBA54, 0xD2A7, 0xBA55, 0xD2A8, 0xBA56, 0xD2A9, 0xBA57, 0xD2AA, 0xBA58, 0xD2AB, 0xBA59, + 0xD2AC, 0xC6AC, 0xD2AD, 0xBA5A, 0xD2AE, 0xBA61, 0xD2AF, 0xBA62, 0xD2B0, 0xBA63, 0xD2B1, 0xC6AD, 0xD2B2, 0xBA64, 0xD2B3, 0xBA65, + 0xD2B4, 0xBA66, 0xD2B5, 0xBA67, 0xD2B6, 0xBA68, 0xD2B7, 0xBA69, 0xD2B8, 0xC6AE, 0xD2B9, 0xC6AF, 0xD2BA, 0xBA6A, 0xD2BB, 0xBA6B, + 0xD2BC, 0xC6B0, 0xD2BD, 0xBA6C, 0xD2BE, 0xBA6D, 0xD2BF, 0xC6B1, 0xD2C0, 0xC6B2, 0xD2C1, 0xBA6E, 0xD2C2, 0xC6B3, 0xD2C3, 0xBA6F, + 0xD2C4, 0xBA70, 0xD2C5, 0xBA71, 0xD2C6, 0xBA72, 0xD2C7, 0xBA73, 0xD2C8, 0xC6B4, 0xD2C9, 0xC6B5, 0xD2CA, 0xBA74, 0xD2CB, 0xC6B6, + 0xD2CC, 0xBA75, 0xD2CD, 0xBA76, 0xD2CE, 0xBA77, 0xD2CF, 0xBA78, 0xD2D0, 0xBA79, 0xD2D1, 0xBA7A, 0xD2D2, 0xBA81, 0xD2D3, 0xBA82, + 0xD2D4, 0xC6B7, 0xD2D5, 0xBA83, 0xD2D6, 0xBA84, 0xD2D7, 0xBA85, 0xD2D8, 0xC6B8, 0xD2D9, 0xBA86, 0xD2DA, 0xBA87, 0xD2DB, 0xBA88, + 0xD2DC, 0xC6B9, 0xD2DD, 0xBA89, 0xD2DE, 0xBA8A, 0xD2DF, 0xBA8B, 0xD2E0, 0xBA8C, 0xD2E1, 0xBA8D, 0xD2E2, 0xBA8E, 0xD2E3, 0xBA8F, + 0xD2E4, 0xC6BA, 0xD2E5, 0xC6BB, 0xD2E6, 0xBA90, 0xD2E7, 0xBA91, 0xD2E8, 0xBA92, 0xD2E9, 0xBA93, 0xD2EA, 0xBA94, 0xD2EB, 0xBA95, + 0xD2EC, 0xBA96, 0xD2ED, 0xBA97, 0xD2EE, 0xBA98, 0xD2EF, 0xBA99, 0xD2F0, 0xC6BC, 0xD2F1, 0xC6BD, 0xD2F2, 0xBA9A, 0xD2F3, 0xBA9B, + 0xD2F4, 0xC6BE, 0xD2F5, 0xBA9C, 0xD2F6, 0xBA9D, 0xD2F7, 0xBA9E, 0xD2F8, 0xC6BF, 0xD2F9, 0xBA9F, 0xD2FA, 0xBAA0, 0xD2FB, 0xBB41, + 0xD2FC, 0xBB42, 0xD2FD, 0xBB43, 0xD2FE, 0xBB44, 0xD2FF, 0xBB45, 0xD300, 0xC6C0, 0xD301, 0xC6C1, 0xD302, 0xBB46, 0xD303, 0xC6C2, + 0xD304, 0xBB47, 0xD305, 0xC6C3, 0xD306, 0xBB48, 0xD307, 0xBB49, 0xD308, 0xBB4A, 0xD309, 0xBB4B, 0xD30A, 0xBB4C, 0xD30B, 0xBB4D, + 0xD30C, 0xC6C4, 0xD30D, 0xC6C5, 0xD30E, 0xC6C6, 0xD30F, 0xBB4E, 0xD310, 0xC6C7, 0xD311, 0xBB4F, 0xD312, 0xBB50, 0xD313, 0xBB51, + 0xD314, 0xC6C8, 0xD315, 0xBB52, 0xD316, 0xC6C9, 0xD317, 0xBB53, 0xD318, 0xBB54, 0xD319, 0xBB55, 0xD31A, 0xBB56, 0xD31B, 0xBB57, + 0xD31C, 0xC6CA, 0xD31D, 0xC6CB, 0xD31E, 0xBB58, 0xD31F, 0xC6CC, 0xD320, 0xC6CD, 0xD321, 0xC6CE, 0xD322, 0xBB59, 0xD323, 0xBB5A, + 0xD324, 0xBB61, 0xD325, 0xC6CF, 0xD326, 0xBB62, 0xD327, 0xBB63, 0xD328, 0xC6D0, 0xD329, 0xC6D1, 0xD32A, 0xBB64, 0xD32B, 0xBB65, + 0xD32C, 0xC6D2, 0xD32D, 0xBB66, 0xD32E, 0xBB67, 0xD32F, 0xBB68, 0xD330, 0xC6D3, 0xD331, 0xBB69, 0xD332, 0xBB6A, 0xD333, 0xBB6B, + 0xD334, 0xBB6C, 0xD335, 0xBB6D, 0xD336, 0xBB6E, 0xD337, 0xBB6F, 0xD338, 0xC6D4, 0xD339, 0xC6D5, 0xD33A, 0xBB70, 0xD33B, 0xC6D6, + 0xD33C, 0xC6D7, 0xD33D, 0xC6D8, 0xD33E, 0xBB71, 0xD33F, 0xBB72, 0xD340, 0xBB73, 0xD341, 0xBB74, 0xD342, 0xBB75, 0xD343, 0xBB76, + 0xD344, 0xC6D9, 0xD345, 0xC6DA, 0xD346, 0xBB77, 0xD347, 0xBB78, 0xD348, 0xBB79, 0xD349, 0xBB7A, 0xD34A, 0xBB81, 0xD34B, 0xBB82, + 0xD34C, 0xBB83, 0xD34D, 0xBB84, 0xD34E, 0xBB85, 0xD34F, 0xBB86, 0xD350, 0xBB87, 0xD351, 0xBB88, 0xD352, 0xBB89, 0xD353, 0xBB8A, + 0xD354, 0xBB8B, 0xD355, 0xBB8C, 0xD356, 0xBB8D, 0xD357, 0xBB8E, 0xD358, 0xBB8F, 0xD359, 0xBB90, 0xD35A, 0xBB91, 0xD35B, 0xBB92, + 0xD35C, 0xBB93, 0xD35D, 0xBB94, 0xD35E, 0xBB95, 0xD35F, 0xBB96, 0xD360, 0xBB97, 0xD361, 0xBB98, 0xD362, 0xBB99, 0xD363, 0xBB9A, + 0xD364, 0xBB9B, 0xD365, 0xBB9C, 0xD366, 0xBB9D, 0xD367, 0xBB9E, 0xD368, 0xBB9F, 0xD369, 0xBBA0, 0xD36A, 0xBC41, 0xD36B, 0xBC42, + 0xD36C, 0xBC43, 0xD36D, 0xBC44, 0xD36E, 0xBC45, 0xD36F, 0xBC46, 0xD370, 0xBC47, 0xD371, 0xBC48, 0xD372, 0xBC49, 0xD373, 0xBC4A, + 0xD374, 0xBC4B, 0xD375, 0xBC4C, 0xD376, 0xBC4D, 0xD377, 0xBC4E, 0xD378, 0xBC4F, 0xD379, 0xBC50, 0xD37A, 0xBC51, 0xD37B, 0xBC52, + 0xD37C, 0xC6DB, 0xD37D, 0xC6DC, 0xD37E, 0xBC53, 0xD37F, 0xBC54, 0xD380, 0xC6DD, 0xD381, 0xBC55, 0xD382, 0xBC56, 0xD383, 0xBC57, + 0xD384, 0xC6DE, 0xD385, 0xBC58, 0xD386, 0xBC59, 0xD387, 0xBC5A, 0xD388, 0xBC61, 0xD389, 0xBC62, 0xD38A, 0xBC63, 0xD38B, 0xBC64, + 0xD38C, 0xC6DF, 0xD38D, 0xC6E0, 0xD38E, 0xBC65, 0xD38F, 0xC6E1, 0xD390, 0xC6E2, 0xD391, 0xC6E3, 0xD392, 0xBC66, 0xD393, 0xBC67, + 0xD394, 0xBC68, 0xD395, 0xBC69, 0xD396, 0xBC6A, 0xD397, 0xBC6B, 0xD398, 0xC6E4, 0xD399, 0xC6E5, 0xD39A, 0xBC6C, 0xD39B, 0xBC6D, + 0xD39C, 0xC6E6, 0xD39D, 0xBC6E, 0xD39E, 0xBC6F, 0xD39F, 0xBC70, 0xD3A0, 0xC6E7, 0xD3A1, 0xBC71, 0xD3A2, 0xBC72, 0xD3A3, 0xBC73, + 0xD3A4, 0xBC74, 0xD3A5, 0xBC75, 0xD3A6, 0xBC76, 0xD3A7, 0xBC77, 0xD3A8, 0xC6E8, 0xD3A9, 0xC6E9, 0xD3AA, 0xBC78, 0xD3AB, 0xC6EA, + 0xD3AC, 0xBC79, 0xD3AD, 0xC6EB, 0xD3AE, 0xBC7A, 0xD3AF, 0xBC81, 0xD3B0, 0xBC82, 0xD3B1, 0xBC83, 0xD3B2, 0xBC84, 0xD3B3, 0xBC85, + 0xD3B4, 0xC6EC, 0xD3B5, 0xBC86, 0xD3B6, 0xBC87, 0xD3B7, 0xBC88, 0xD3B8, 0xC6ED, 0xD3B9, 0xBC89, 0xD3BA, 0xBC8A, 0xD3BB, 0xBC8B, + 0xD3BC, 0xC6EE, 0xD3BD, 0xBC8C, 0xD3BE, 0xBC8D, 0xD3BF, 0xBC8E, 0xD3C0, 0xBC8F, 0xD3C1, 0xBC90, 0xD3C2, 0xBC91, 0xD3C3, 0xBC92, + 0xD3C4, 0xC6EF, 0xD3C5, 0xC6F0, 0xD3C6, 0xBC93, 0xD3C7, 0xBC94, 0xD3C8, 0xC6F1, 0xD3C9, 0xC6F2, 0xD3CA, 0xBC95, 0xD3CB, 0xBC96, + 0xD3CC, 0xBC97, 0xD3CD, 0xBC98, 0xD3CE, 0xBC99, 0xD3CF, 0xBC9A, 0xD3D0, 0xC6F3, 0xD3D1, 0xBC9B, 0xD3D2, 0xBC9C, 0xD3D3, 0xBC9D, + 0xD3D4, 0xBC9E, 0xD3D5, 0xBC9F, 0xD3D6, 0xBCA0, 0xD3D7, 0xBD41, 0xD3D8, 0xC6F4, 0xD3D9, 0xBD42, 0xD3DA, 0xBD43, 0xD3DB, 0xBD44, + 0xD3DC, 0xBD45, 0xD3DD, 0xBD46, 0xD3DE, 0xBD47, 0xD3DF, 0xBD48, 0xD3E0, 0xBD49, 0xD3E1, 0xC6F5, 0xD3E2, 0xBD4A, 0xD3E3, 0xC6F6, + 0xD3E4, 0xBD4B, 0xD3E5, 0xBD4C, 0xD3E6, 0xBD4D, 0xD3E7, 0xBD4E, 0xD3E8, 0xBD4F, 0xD3E9, 0xBD50, 0xD3EA, 0xBD51, 0xD3EB, 0xBD52, + 0xD3EC, 0xC6F7, 0xD3ED, 0xC6F8, 0xD3EE, 0xBD53, 0xD3EF, 0xBD54, 0xD3F0, 0xC6F9, 0xD3F1, 0xBD55, 0xD3F2, 0xBD56, 0xD3F3, 0xBD57, + 0xD3F4, 0xC6FA, 0xD3F5, 0xBD58, 0xD3F6, 0xBD59, 0xD3F7, 0xBD5A, 0xD3F8, 0xBD61, 0xD3F9, 0xBD62, 0xD3FA, 0xBD63, 0xD3FB, 0xBD64, + 0xD3FC, 0xC6FB, 0xD3FD, 0xC6FC, 0xD3FE, 0xBD65, 0xD3FF, 0xC6FD, 0xD400, 0xBD66, 0xD401, 0xC6FE, 0xD402, 0xBD67, 0xD403, 0xBD68, + 0xD404, 0xBD69, 0xD405, 0xBD6A, 0xD406, 0xBD6B, 0xD407, 0xBD6C, 0xD408, 0xC7A1, 0xD409, 0xBD6D, 0xD40A, 0xBD6E, 0xD40B, 0xBD6F, + 0xD40C, 0xBD70, 0xD40D, 0xBD71, 0xD40E, 0xBD72, 0xD40F, 0xBD73, 0xD410, 0xBD74, 0xD411, 0xBD75, 0xD412, 0xBD76, 0xD413, 0xBD77, + 0xD414, 0xBD78, 0xD415, 0xBD79, 0xD416, 0xBD7A, 0xD417, 0xBD81, 0xD418, 0xBD82, 0xD419, 0xBD83, 0xD41A, 0xBD84, 0xD41B, 0xBD85, + 0xD41C, 0xBD86, 0xD41D, 0xC7A2, 0xD41E, 0xBD87, 0xD41F, 0xBD88, 0xD420, 0xBD89, 0xD421, 0xBD8A, 0xD422, 0xBD8B, 0xD423, 0xBD8C, + 0xD424, 0xBD8D, 0xD425, 0xBD8E, 0xD426, 0xBD8F, 0xD427, 0xBD90, 0xD428, 0xBD91, 0xD429, 0xBD92, 0xD42A, 0xBD93, 0xD42B, 0xBD94, + 0xD42C, 0xBD95, 0xD42D, 0xBD96, 0xD42E, 0xBD97, 0xD42F, 0xBD98, 0xD430, 0xBD99, 0xD431, 0xBD9A, 0xD432, 0xBD9B, 0xD433, 0xBD9C, + 0xD434, 0xBD9D, 0xD435, 0xBD9E, 0xD436, 0xBD9F, 0xD437, 0xBDA0, 0xD438, 0xBE41, 0xD439, 0xBE42, 0xD43A, 0xBE43, 0xD43B, 0xBE44, + 0xD43C, 0xBE45, 0xD43D, 0xBE46, 0xD43E, 0xBE47, 0xD43F, 0xBE48, 0xD440, 0xC7A3, 0xD441, 0xBE49, 0xD442, 0xBE4A, 0xD443, 0xBE4B, + 0xD444, 0xC7A4, 0xD445, 0xBE4C, 0xD446, 0xBE4D, 0xD447, 0xBE4E, 0xD448, 0xBE4F, 0xD449, 0xBE50, 0xD44A, 0xBE51, 0xD44B, 0xBE52, + 0xD44C, 0xBE53, 0xD44D, 0xBE54, 0xD44E, 0xBE55, 0xD44F, 0xBE56, 0xD450, 0xBE57, 0xD451, 0xBE58, 0xD452, 0xBE59, 0xD453, 0xBE5A, + 0xD454, 0xBE61, 0xD455, 0xBE62, 0xD456, 0xBE63, 0xD457, 0xBE64, 0xD458, 0xBE65, 0xD459, 0xBE66, 0xD45A, 0xBE67, 0xD45B, 0xBE68, + 0xD45C, 0xC7A5, 0xD45D, 0xBE69, 0xD45E, 0xBE6A, 0xD45F, 0xBE6B, 0xD460, 0xC7A6, 0xD461, 0xBE6C, 0xD462, 0xBE6D, 0xD463, 0xBE6E, + 0xD464, 0xC7A7, 0xD465, 0xBE6F, 0xD466, 0xBE70, 0xD467, 0xBE71, 0xD468, 0xBE72, 0xD469, 0xBE73, 0xD46A, 0xBE74, 0xD46B, 0xBE75, + 0xD46C, 0xBE76, 0xD46D, 0xC7A8, 0xD46E, 0xBE77, 0xD46F, 0xC7A9, 0xD470, 0xBE78, 0xD471, 0xBE79, 0xD472, 0xBE7A, 0xD473, 0xBE81, + 0xD474, 0xBE82, 0xD475, 0xBE83, 0xD476, 0xBE84, 0xD477, 0xBE85, 0xD478, 0xC7AA, 0xD479, 0xC7AB, 0xD47A, 0xBE86, 0xD47B, 0xBE87, + 0xD47C, 0xC7AC, 0xD47D, 0xBE88, 0xD47E, 0xBE89, 0xD47F, 0xC7AD, 0xD480, 0xC7AE, 0xD481, 0xBE8A, 0xD482, 0xC7AF, 0xD483, 0xBE8B, + 0xD484, 0xBE8C, 0xD485, 0xBE8D, 0xD486, 0xBE8E, 0xD487, 0xBE8F, 0xD488, 0xC7B0, 0xD489, 0xC7B1, 0xD48A, 0xBE90, 0xD48B, 0xC7B2, + 0xD48C, 0xBE91, 0xD48D, 0xC7B3, 0xD48E, 0xBE92, 0xD48F, 0xBE93, 0xD490, 0xBE94, 0xD491, 0xBE95, 0xD492, 0xBE96, 0xD493, 0xBE97, + 0xD494, 0xC7B4, 0xD495, 0xBE98, 0xD496, 0xBE99, 0xD497, 0xBE9A, 0xD498, 0xBE9B, 0xD499, 0xBE9C, 0xD49A, 0xBE9D, 0xD49B, 0xBE9E, + 0xD49C, 0xBE9F, 0xD49D, 0xBEA0, 0xD49E, 0xBF41, 0xD49F, 0xBF42, 0xD4A0, 0xBF43, 0xD4A1, 0xBF44, 0xD4A2, 0xBF45, 0xD4A3, 0xBF46, + 0xD4A4, 0xBF47, 0xD4A5, 0xBF48, 0xD4A6, 0xBF49, 0xD4A7, 0xBF4A, 0xD4A8, 0xBF4B, 0xD4A9, 0xC7B5, 0xD4AA, 0xBF4C, 0xD4AB, 0xBF4D, + 0xD4AC, 0xBF4E, 0xD4AD, 0xBF4F, 0xD4AE, 0xBF50, 0xD4AF, 0xBF51, 0xD4B0, 0xBF52, 0xD4B1, 0xBF53, 0xD4B2, 0xBF54, 0xD4B3, 0xBF55, + 0xD4B4, 0xBF56, 0xD4B5, 0xBF57, 0xD4B6, 0xBF58, 0xD4B7, 0xBF59, 0xD4B8, 0xBF5A, 0xD4B9, 0xBF61, 0xD4BA, 0xBF62, 0xD4BB, 0xBF63, + 0xD4BC, 0xBF64, 0xD4BD, 0xBF65, 0xD4BE, 0xBF66, 0xD4BF, 0xBF67, 0xD4C0, 0xBF68, 0xD4C1, 0xBF69, 0xD4C2, 0xBF6A, 0xD4C3, 0xBF6B, + 0xD4C4, 0xBF6C, 0xD4C5, 0xBF6D, 0xD4C6, 0xBF6E, 0xD4C7, 0xBF6F, 0xD4C8, 0xBF70, 0xD4C9, 0xBF71, 0xD4CA, 0xBF72, 0xD4CB, 0xBF73, + 0xD4CC, 0xC7B6, 0xD4CD, 0xBF74, 0xD4CE, 0xBF75, 0xD4CF, 0xBF76, 0xD4D0, 0xC7B7, 0xD4D1, 0xBF77, 0xD4D2, 0xBF78, 0xD4D3, 0xBF79, + 0xD4D4, 0xC7B8, 0xD4D5, 0xBF7A, 0xD4D6, 0xBF81, 0xD4D7, 0xBF82, 0xD4D8, 0xBF83, 0xD4D9, 0xBF84, 0xD4DA, 0xBF85, 0xD4DB, 0xBF86, + 0xD4DC, 0xC7B9, 0xD4DD, 0xBF87, 0xD4DE, 0xBF88, 0xD4DF, 0xC7BA, 0xD4E0, 0xBF89, 0xD4E1, 0xBF8A, 0xD4E2, 0xBF8B, 0xD4E3, 0xBF8C, + 0xD4E4, 0xBF8D, 0xD4E5, 0xBF8E, 0xD4E6, 0xBF8F, 0xD4E7, 0xBF90, 0xD4E8, 0xC7BB, 0xD4E9, 0xBF91, 0xD4EA, 0xBF92, 0xD4EB, 0xBF93, + 0xD4EC, 0xC7BC, 0xD4ED, 0xBF94, 0xD4EE, 0xBF95, 0xD4EF, 0xBF96, 0xD4F0, 0xC7BD, 0xD4F1, 0xBF97, 0xD4F2, 0xBF98, 0xD4F3, 0xBF99, + 0xD4F4, 0xBF9A, 0xD4F5, 0xBF9B, 0xD4F6, 0xBF9C, 0xD4F7, 0xBF9D, 0xD4F8, 0xC7BE, 0xD4F9, 0xBF9E, 0xD4FA, 0xBF9F, 0xD4FB, 0xC7BF, + 0xD4FC, 0xBFA0, 0xD4FD, 0xC7C0, 0xD4FE, 0xC041, 0xD4FF, 0xC042, 0xD500, 0xC043, 0xD501, 0xC044, 0xD502, 0xC045, 0xD503, 0xC046, + 0xD504, 0xC7C1, 0xD505, 0xC047, 0xD506, 0xC048, 0xD507, 0xC049, 0xD508, 0xC7C2, 0xD509, 0xC04A, 0xD50A, 0xC04B, 0xD50B, 0xC04C, + 0xD50C, 0xC7C3, 0xD50D, 0xC04D, 0xD50E, 0xC04E, 0xD50F, 0xC04F, 0xD510, 0xC050, 0xD511, 0xC051, 0xD512, 0xC052, 0xD513, 0xC053, + 0xD514, 0xC7C4, 0xD515, 0xC7C5, 0xD516, 0xC054, 0xD517, 0xC7C6, 0xD518, 0xC055, 0xD519, 0xC056, 0xD51A, 0xC057, 0xD51B, 0xC058, + 0xD51C, 0xC059, 0xD51D, 0xC05A, 0xD51E, 0xC061, 0xD51F, 0xC062, 0xD520, 0xC063, 0xD521, 0xC064, 0xD522, 0xC065, 0xD523, 0xC066, + 0xD524, 0xC067, 0xD525, 0xC068, 0xD526, 0xC069, 0xD527, 0xC06A, 0xD528, 0xC06B, 0xD529, 0xC06C, 0xD52A, 0xC06D, 0xD52B, 0xC06E, + 0xD52C, 0xC06F, 0xD52D, 0xC070, 0xD52E, 0xC071, 0xD52F, 0xC072, 0xD530, 0xC073, 0xD531, 0xC074, 0xD532, 0xC075, 0xD533, 0xC076, + 0xD534, 0xC077, 0xD535, 0xC078, 0xD536, 0xC079, 0xD537, 0xC07A, 0xD538, 0xC081, 0xD539, 0xC082, 0xD53A, 0xC083, 0xD53B, 0xC084, + 0xD53C, 0xC7C7, 0xD53D, 0xC7C8, 0xD53E, 0xC085, 0xD53F, 0xC086, 0xD540, 0xC7C9, 0xD541, 0xC087, 0xD542, 0xC088, 0xD543, 0xC089, + 0xD544, 0xC7CA, 0xD545, 0xC08A, 0xD546, 0xC08B, 0xD547, 0xC08C, 0xD548, 0xC08D, 0xD549, 0xC08E, 0xD54A, 0xC08F, 0xD54B, 0xC090, + 0xD54C, 0xC7CB, 0xD54D, 0xC7CC, 0xD54E, 0xC091, 0xD54F, 0xC7CD, 0xD550, 0xC092, 0xD551, 0xC7CE, 0xD552, 0xC093, 0xD553, 0xC094, + 0xD554, 0xC095, 0xD555, 0xC096, 0xD556, 0xC097, 0xD557, 0xC098, 0xD558, 0xC7CF, 0xD559, 0xC7D0, 0xD55A, 0xC099, 0xD55B, 0xC09A, + 0xD55C, 0xC7D1, 0xD55D, 0xC09B, 0xD55E, 0xC09C, 0xD55F, 0xC09D, 0xD560, 0xC7D2, 0xD561, 0xC09E, 0xD562, 0xC09F, 0xD563, 0xC0A0, + 0xD564, 0xC141, 0xD565, 0xC7D3, 0xD566, 0xC142, 0xD567, 0xC143, 0xD568, 0xC7D4, 0xD569, 0xC7D5, 0xD56A, 0xC144, 0xD56B, 0xC7D6, + 0xD56C, 0xC145, 0xD56D, 0xC7D7, 0xD56E, 0xC146, 0xD56F, 0xC147, 0xD570, 0xC148, 0xD571, 0xC149, 0xD572, 0xC14A, 0xD573, 0xC14B, + 0xD574, 0xC7D8, 0xD575, 0xC7D9, 0xD576, 0xC14C, 0xD577, 0xC14D, 0xD578, 0xC7DA, 0xD579, 0xC14E, 0xD57A, 0xC14F, 0xD57B, 0xC150, + 0xD57C, 0xC7DB, 0xD57D, 0xC151, 0xD57E, 0xC152, 0xD57F, 0xC153, 0xD580, 0xC154, 0xD581, 0xC155, 0xD582, 0xC156, 0xD583, 0xC157, + 0xD584, 0xC7DC, 0xD585, 0xC7DD, 0xD586, 0xC158, 0xD587, 0xC7DE, 0xD588, 0xC7DF, 0xD589, 0xC7E0, 0xD58A, 0xC159, 0xD58B, 0xC15A, + 0xD58C, 0xC161, 0xD58D, 0xC162, 0xD58E, 0xC163, 0xD58F, 0xC164, 0xD590, 0xC7E1, 0xD591, 0xC165, 0xD592, 0xC166, 0xD593, 0xC167, + 0xD594, 0xC168, 0xD595, 0xC169, 0xD596, 0xC16A, 0xD597, 0xC16B, 0xD598, 0xC16C, 0xD599, 0xC16D, 0xD59A, 0xC16E, 0xD59B, 0xC16F, + 0xD59C, 0xC170, 0xD59D, 0xC171, 0xD59E, 0xC172, 0xD59F, 0xC173, 0xD5A0, 0xC174, 0xD5A1, 0xC175, 0xD5A2, 0xC176, 0xD5A3, 0xC177, + 0xD5A4, 0xC178, 0xD5A5, 0xC7E2, 0xD5A6, 0xC179, 0xD5A7, 0xC17A, 0xD5A8, 0xC181, 0xD5A9, 0xC182, 0xD5AA, 0xC183, 0xD5AB, 0xC184, + 0xD5AC, 0xC185, 0xD5AD, 0xC186, 0xD5AE, 0xC187, 0xD5AF, 0xC188, 0xD5B0, 0xC189, 0xD5B1, 0xC18A, 0xD5B2, 0xC18B, 0xD5B3, 0xC18C, + 0xD5B4, 0xC18D, 0xD5B5, 0xC18E, 0xD5B6, 0xC18F, 0xD5B7, 0xC190, 0xD5B8, 0xC191, 0xD5B9, 0xC192, 0xD5BA, 0xC193, 0xD5BB, 0xC194, + 0xD5BC, 0xC195, 0xD5BD, 0xC196, 0xD5BE, 0xC197, 0xD5BF, 0xC198, 0xD5C0, 0xC199, 0xD5C1, 0xC19A, 0xD5C2, 0xC19B, 0xD5C3, 0xC19C, + 0xD5C4, 0xC19D, 0xD5C5, 0xC19E, 0xD5C6, 0xC19F, 0xD5C7, 0xC1A0, 0xD5C8, 0xC7E3, 0xD5C9, 0xC7E4, 0xD5CA, 0xC241, 0xD5CB, 0xC242, + 0xD5CC, 0xC7E5, 0xD5CD, 0xC243, 0xD5CE, 0xC244, 0xD5CF, 0xC245, 0xD5D0, 0xC7E6, 0xD5D1, 0xC246, 0xD5D2, 0xC7E7, 0xD5D3, 0xC247, + 0xD5D4, 0xC248, 0xD5D5, 0xC249, 0xD5D6, 0xC24A, 0xD5D7, 0xC24B, 0xD5D8, 0xC7E8, 0xD5D9, 0xC7E9, 0xD5DA, 0xC24C, 0xD5DB, 0xC7EA, + 0xD5DC, 0xC24D, 0xD5DD, 0xC7EB, 0xD5DE, 0xC24E, 0xD5DF, 0xC24F, 0xD5E0, 0xC250, 0xD5E1, 0xC251, 0xD5E2, 0xC252, 0xD5E3, 0xC253, + 0xD5E4, 0xC7EC, 0xD5E5, 0xC7ED, 0xD5E6, 0xC254, 0xD5E7, 0xC255, 0xD5E8, 0xC7EE, 0xD5E9, 0xC256, 0xD5EA, 0xC257, 0xD5EB, 0xC258, + 0xD5EC, 0xC7EF, 0xD5ED, 0xC259, 0xD5EE, 0xC25A, 0xD5EF, 0xC261, 0xD5F0, 0xC262, 0xD5F1, 0xC263, 0xD5F2, 0xC264, 0xD5F3, 0xC265, + 0xD5F4, 0xC7F0, 0xD5F5, 0xC7F1, 0xD5F6, 0xC266, 0xD5F7, 0xC7F2, 0xD5F8, 0xC267, 0xD5F9, 0xC7F3, 0xD5FA, 0xC268, 0xD5FB, 0xC269, + 0xD5FC, 0xC26A, 0xD5FD, 0xC26B, 0xD5FE, 0xC26C, 0xD5FF, 0xC26D, 0xD600, 0xC7F4, 0xD601, 0xC7F5, 0xD602, 0xC26E, 0xD603, 0xC26F, + 0xD604, 0xC7F6, 0xD605, 0xC270, 0xD606, 0xC271, 0xD607, 0xC272, 0xD608, 0xC7F7, 0xD609, 0xC273, 0xD60A, 0xC274, 0xD60B, 0xC275, + 0xD60C, 0xC276, 0xD60D, 0xC277, 0xD60E, 0xC278, 0xD60F, 0xC279, 0xD610, 0xC7F8, 0xD611, 0xC7F9, 0xD612, 0xC27A, 0xD613, 0xC7FA, + 0xD614, 0xC7FB, 0xD615, 0xC7FC, 0xD616, 0xC281, 0xD617, 0xC282, 0xD618, 0xC283, 0xD619, 0xC284, 0xD61A, 0xC285, 0xD61B, 0xC286, + 0xD61C, 0xC7FD, 0xD61D, 0xC287, 0xD61E, 0xC288, 0xD61F, 0xC289, 0xD620, 0xC7FE, 0xD621, 0xC28A, 0xD622, 0xC28B, 0xD623, 0xC28C, + 0xD624, 0xC8A1, 0xD625, 0xC28D, 0xD626, 0xC28E, 0xD627, 0xC28F, 0xD628, 0xC290, 0xD629, 0xC291, 0xD62A, 0xC292, 0xD62B, 0xC293, + 0xD62C, 0xC294, 0xD62D, 0xC8A2, 0xD62E, 0xC295, 0xD62F, 0xC296, 0xD630, 0xC297, 0xD631, 0xC298, 0xD632, 0xC299, 0xD633, 0xC29A, + 0xD634, 0xC29B, 0xD635, 0xC29C, 0xD636, 0xC29D, 0xD637, 0xC29E, 0xD638, 0xC8A3, 0xD639, 0xC8A4, 0xD63A, 0xC29F, 0xD63B, 0xC2A0, + 0xD63C, 0xC8A5, 0xD63D, 0xC341, 0xD63E, 0xC342, 0xD63F, 0xC343, 0xD640, 0xC8A6, 0xD641, 0xC344, 0xD642, 0xC345, 0xD643, 0xC346, + 0xD644, 0xC347, 0xD645, 0xC8A7, 0xD646, 0xC348, 0xD647, 0xC349, 0xD648, 0xC8A8, 0xD649, 0xC8A9, 0xD64A, 0xC34A, 0xD64B, 0xC8AA, + 0xD64C, 0xC34B, 0xD64D, 0xC8AB, 0xD64E, 0xC34C, 0xD64F, 0xC34D, 0xD650, 0xC34E, 0xD651, 0xC8AC, 0xD652, 0xC34F, 0xD653, 0xC350, + 0xD654, 0xC8AD, 0xD655, 0xC8AE, 0xD656, 0xC351, 0xD657, 0xC352, 0xD658, 0xC8AF, 0xD659, 0xC353, 0xD65A, 0xC354, 0xD65B, 0xC355, + 0xD65C, 0xC8B0, 0xD65D, 0xC356, 0xD65E, 0xC357, 0xD65F, 0xC358, 0xD660, 0xC359, 0xD661, 0xC35A, 0xD662, 0xC361, 0xD663, 0xC362, + 0xD664, 0xC363, 0xD665, 0xC364, 0xD666, 0xC365, 0xD667, 0xC8B1, 0xD668, 0xC366, 0xD669, 0xC8B2, 0xD66A, 0xC367, 0xD66B, 0xC368, + 0xD66C, 0xC369, 0xD66D, 0xC36A, 0xD66E, 0xC36B, 0xD66F, 0xC36C, 0xD670, 0xC8B3, 0xD671, 0xC8B4, 0xD672, 0xC36D, 0xD673, 0xC36E, + 0xD674, 0xC8B5, 0xD675, 0xC36F, 0xD676, 0xC370, 0xD677, 0xC371, 0xD678, 0xC372, 0xD679, 0xC373, 0xD67A, 0xC374, 0xD67B, 0xC375, + 0xD67C, 0xC376, 0xD67D, 0xC377, 0xD67E, 0xC378, 0xD67F, 0xC379, 0xD680, 0xC37A, 0xD681, 0xC381, 0xD682, 0xC382, 0xD683, 0xC8B6, + 0xD684, 0xC383, 0xD685, 0xC8B7, 0xD686, 0xC384, 0xD687, 0xC385, 0xD688, 0xC386, 0xD689, 0xC387, 0xD68A, 0xC388, 0xD68B, 0xC389, + 0xD68C, 0xC8B8, 0xD68D, 0xC8B9, 0xD68E, 0xC38A, 0xD68F, 0xC38B, 0xD690, 0xC8BA, 0xD691, 0xC38C, 0xD692, 0xC38D, 0xD693, 0xC38E, + 0xD694, 0xC8BB, 0xD695, 0xC38F, 0xD696, 0xC390, 0xD697, 0xC391, 0xD698, 0xC392, 0xD699, 0xC393, 0xD69A, 0xC394, 0xD69B, 0xC395, + 0xD69C, 0xC396, 0xD69D, 0xC8BC, 0xD69E, 0xC397, 0xD69F, 0xC8BD, 0xD6A0, 0xC398, 0xD6A1, 0xC8BE, 0xD6A2, 0xC399, 0xD6A3, 0xC39A, + 0xD6A4, 0xC39B, 0xD6A5, 0xC39C, 0xD6A6, 0xC39D, 0xD6A7, 0xC39E, 0xD6A8, 0xC8BF, 0xD6A9, 0xC39F, 0xD6AA, 0xC3A0, 0xD6AB, 0xC441, + 0xD6AC, 0xC8C0, 0xD6AD, 0xC442, 0xD6AE, 0xC443, 0xD6AF, 0xC444, 0xD6B0, 0xC8C1, 0xD6B1, 0xC445, 0xD6B2, 0xC446, 0xD6B3, 0xC447, + 0xD6B4, 0xC448, 0xD6B5, 0xC449, 0xD6B6, 0xC44A, 0xD6B7, 0xC44B, 0xD6B8, 0xC44C, 0xD6B9, 0xC8C2, 0xD6BA, 0xC44D, 0xD6BB, 0xC8C3, + 0xD6BC, 0xC44E, 0xD6BD, 0xC44F, 0xD6BE, 0xC450, 0xD6BF, 0xC451, 0xD6C0, 0xC452, 0xD6C1, 0xC453, 0xD6C2, 0xC454, 0xD6C3, 0xC455, + 0xD6C4, 0xC8C4, 0xD6C5, 0xC8C5, 0xD6C6, 0xC456, 0xD6C7, 0xC457, 0xD6C8, 0xC8C6, 0xD6C9, 0xC458, 0xD6CA, 0xC459, 0xD6CB, 0xC45A, + 0xD6CC, 0xC8C7, 0xD6CD, 0xC461, 0xD6CE, 0xC462, 0xD6CF, 0xC463, 0xD6D0, 0xC464, 0xD6D1, 0xC8C8, 0xD6D2, 0xC465, 0xD6D3, 0xC466, + 0xD6D4, 0xC8C9, 0xD6D5, 0xC467, 0xD6D6, 0xC468, 0xD6D7, 0xC8CA, 0xD6D8, 0xC469, 0xD6D9, 0xC8CB, 0xD6DA, 0xC46A, 0xD6DB, 0xC46B, + 0xD6DC, 0xC46C, 0xD6DD, 0xC46D, 0xD6DE, 0xC46E, 0xD6DF, 0xC46F, 0xD6E0, 0xC8CC, 0xD6E1, 0xC470, 0xD6E2, 0xC471, 0xD6E3, 0xC472, + 0xD6E4, 0xC8CD, 0xD6E5, 0xC473, 0xD6E6, 0xC474, 0xD6E7, 0xC475, 0xD6E8, 0xC8CE, 0xD6E9, 0xC476, 0xD6EA, 0xC477, 0xD6EB, 0xC478, + 0xD6EC, 0xC479, 0xD6ED, 0xC47A, 0xD6EE, 0xC481, 0xD6EF, 0xC482, 0xD6F0, 0xC8CF, 0xD6F1, 0xC483, 0xD6F2, 0xC484, 0xD6F3, 0xC485, + 0xD6F4, 0xC486, 0xD6F5, 0xC8D0, 0xD6F6, 0xC487, 0xD6F7, 0xC488, 0xD6F8, 0xC489, 0xD6F9, 0xC48A, 0xD6FA, 0xC48B, 0xD6FB, 0xC48C, + 0xD6FC, 0xC8D1, 0xD6FD, 0xC8D2, 0xD6FE, 0xC48D, 0xD6FF, 0xC48E, 0xD700, 0xC8D3, 0xD701, 0xC48F, 0xD702, 0xC490, 0xD703, 0xC491, + 0xD704, 0xC8D4, 0xD705, 0xC492, 0xD706, 0xC493, 0xD707, 0xC494, 0xD708, 0xC495, 0xD709, 0xC496, 0xD70A, 0xC497, 0xD70B, 0xC498, + 0xD70C, 0xC499, 0xD70D, 0xC49A, 0xD70E, 0xC49B, 0xD70F, 0xC49C, 0xD710, 0xC49D, 0xD711, 0xC8D5, 0xD712, 0xC49E, 0xD713, 0xC49F, + 0xD714, 0xC4A0, 0xD715, 0xC541, 0xD716, 0xC542, 0xD717, 0xC543, 0xD718, 0xC8D6, 0xD719, 0xC8D7, 0xD71A, 0xC544, 0xD71B, 0xC545, + 0xD71C, 0xC8D8, 0xD71D, 0xC546, 0xD71E, 0xC547, 0xD71F, 0xC548, 0xD720, 0xC8D9, 0xD721, 0xC549, 0xD722, 0xC54A, 0xD723, 0xC54B, + 0xD724, 0xC54C, 0xD725, 0xC54D, 0xD726, 0xC54E, 0xD727, 0xC54F, 0xD728, 0xC8DA, 0xD729, 0xC8DB, 0xD72A, 0xC550, 0xD72B, 0xC8DC, + 0xD72C, 0xC551, 0xD72D, 0xC8DD, 0xD72E, 0xC552, 0xD72F, 0xC553, 0xD730, 0xC554, 0xD731, 0xC555, 0xD732, 0xC556, 0xD733, 0xC557, + 0xD734, 0xC8DE, 0xD735, 0xC8DF, 0xD736, 0xC558, 0xD737, 0xC559, 0xD738, 0xC8E0, 0xD739, 0xC55A, 0xD73A, 0xC561, 0xD73B, 0xC562, + 0xD73C, 0xC8E1, 0xD73D, 0xC563, 0xD73E, 0xC564, 0xD73F, 0xC565, 0xD740, 0xC566, 0xD741, 0xC567, 0xD742, 0xC568, 0xD743, 0xC569, + 0xD744, 0xC8E2, 0xD745, 0xC56A, 0xD746, 0xC56B, 0xD747, 0xC8E3, 0xD748, 0xC56C, 0xD749, 0xC8E4, 0xD74A, 0xC56D, 0xD74B, 0xC56E, + 0xD74C, 0xC56F, 0xD74D, 0xC570, 0xD74E, 0xC571, 0xD74F, 0xC572, 0xD750, 0xC8E5, 0xD751, 0xC8E6, 0xD752, 0xC573, 0xD753, 0xC574, + 0xD754, 0xC8E7, 0xD755, 0xC575, 0xD756, 0xC8E8, 0xD757, 0xC8E9, 0xD758, 0xC8EA, 0xD759, 0xC8EB, 0xD75A, 0xC576, 0xD75B, 0xC577, + 0xD75C, 0xC578, 0xD75D, 0xC579, 0xD75E, 0xC57A, 0xD75F, 0xC581, 0xD760, 0xC8EC, 0xD761, 0xC8ED, 0xD762, 0xC582, 0xD763, 0xC8EE, + 0xD764, 0xC583, 0xD765, 0xC8EF, 0xD766, 0xC584, 0xD767, 0xC585, 0xD768, 0xC586, 0xD769, 0xC8F0, 0xD76A, 0xC587, 0xD76B, 0xC588, + 0xD76C, 0xC8F1, 0xD76D, 0xC589, 0xD76E, 0xC58A, 0xD76F, 0xC58B, 0xD770, 0xC8F2, 0xD771, 0xC58C, 0xD772, 0xC58D, 0xD773, 0xC58E, + 0xD774, 0xC8F3, 0xD775, 0xC58F, 0xD776, 0xC590, 0xD777, 0xC591, 0xD778, 0xC592, 0xD779, 0xC593, 0xD77A, 0xC594, 0xD77B, 0xC595, + 0xD77C, 0xC8F4, 0xD77D, 0xC8F5, 0xD77E, 0xC596, 0xD77F, 0xC597, 0xD780, 0xC598, 0xD781, 0xC8F6, 0xD782, 0xC599, 0xD783, 0xC59A, + 0xD784, 0xC59B, 0xD785, 0xC59C, 0xD786, 0xC59D, 0xD787, 0xC59E, 0xD788, 0xC8F7, 0xD789, 0xC8F8, 0xD78A, 0xC59F, 0xD78B, 0xC5A0, + 0xD78C, 0xC8F9, 0xD78D, 0xC641, 0xD78E, 0xC642, 0xD78F, 0xC643, 0xD790, 0xC8FA, 0xD791, 0xC644, 0xD792, 0xC645, 0xD793, 0xC646, + 0xD794, 0xC647, 0xD795, 0xC648, 0xD796, 0xC649, 0xD797, 0xC64A, 0xD798, 0xC8FB, 0xD799, 0xC8FC, 0xD79A, 0xC64B, 0xD79B, 0xC8FD, + 0xD79C, 0xC64C, 0xD79D, 0xC8FE, 0xD79E, 0xC64D, 0xD79F, 0xC64E, 0xD7A0, 0xC64F, 0xD7A1, 0xC650, 0xD7A2, 0xC651, 0xD7A3, 0xC652, + 0xF900, 0xCBD0, 0xF901, 0xCBD6, 0xF902, 0xCBE7, 0xF903, 0xCDCF, 0xF904, 0xCDE8, 0xF905, 0xCEAD, 0xF906, 0xCFFB, 0xF907, 0xD0A2, + 0xF908, 0xD0B8, 0xF909, 0xD0D0, 0xF90A, 0xD0DD, 0xF90B, 0xD1D4, 0xF90C, 0xD1D5, 0xF90D, 0xD1D8, 0xF90E, 0xD1DB, 0xF90F, 0xD1DC, + 0xF910, 0xD1DD, 0xF911, 0xD1DE, 0xF912, 0xD1DF, 0xF913, 0xD1E0, 0xF914, 0xD1E2, 0xF915, 0xD1E3, 0xF916, 0xD1E4, 0xF917, 0xD1E5, + 0xF918, 0xD1E6, 0xF919, 0xD1E8, 0xF91A, 0xD1E9, 0xF91B, 0xD1EA, 0xF91C, 0xD1EB, 0xF91D, 0xD1ED, 0xF91E, 0xD1EF, 0xF91F, 0xD1F0, + 0xF920, 0xD1F2, 0xF921, 0xD1F6, 0xF922, 0xD1FA, 0xF923, 0xD1FC, 0xF924, 0xD1FD, 0xF925, 0xD1FE, 0xF926, 0xD2A2, 0xF927, 0xD2A3, + 0xF928, 0xD2A7, 0xF929, 0xD2A8, 0xF92A, 0xD2A9, 0xF92B, 0xD2AA, 0xF92C, 0xD2AB, 0xF92D, 0xD2AD, 0xF92E, 0xD2B2, 0xF92F, 0xD2BE, + 0xF930, 0xD2C2, 0xF931, 0xD2C3, 0xF932, 0xD2C4, 0xF933, 0xD2C6, 0xF934, 0xD2C7, 0xF935, 0xD2C8, 0xF936, 0xD2C9, 0xF937, 0xD2CA, + 0xF938, 0xD2CB, 0xF939, 0xD2CD, 0xF93A, 0xD2CE, 0xF93B, 0xD2CF, 0xF93C, 0xD2D0, 0xF93D, 0xD2D1, 0xF93E, 0xD2D2, 0xF93F, 0xD2D3, + 0xF940, 0xD2D4, 0xF941, 0xD2D5, 0xF942, 0xD2D6, 0xF943, 0xD2D7, 0xF944, 0xD2D9, 0xF945, 0xD2DA, 0xF946, 0xD2DE, 0xF947, 0xD2DF, + 0xF948, 0xD2E1, 0xF949, 0xD2E2, 0xF94A, 0xD2E4, 0xF94B, 0xD2E5, 0xF94C, 0xD2E6, 0xF94D, 0xD2E7, 0xF94E, 0xD2E8, 0xF94F, 0xD2E9, + 0xF950, 0xD2EA, 0xF951, 0xD2EB, 0xF952, 0xD2F0, 0xF953, 0xD2F1, 0xF954, 0xD2F2, 0xF955, 0xD2F3, 0xF956, 0xD2F4, 0xF957, 0xD2F5, + 0xF958, 0xD2F7, 0xF959, 0xD2F8, 0xF95A, 0xD4E6, 0xF95B, 0xD4FC, 0xF95C, 0xD5A5, 0xF95D, 0xD5AB, 0xF95E, 0xD5AE, 0xF95F, 0xD6B8, + 0xF960, 0xD6CD, 0xF961, 0xD7CB, 0xF962, 0xD7E4, 0xF963, 0xDBC5, 0xF964, 0xDBE4, 0xF965, 0xDCA5, 0xF966, 0xDDA5, 0xF967, 0xDDD5, + 0xF968, 0xDDF4, 0xF969, 0xDEFC, 0xF96A, 0xDEFE, 0xF96B, 0xDFB3, 0xF96C, 0xDFE1, 0xF96D, 0xDFE8, 0xF96E, 0xE0F1, 0xF96F, 0xE1AD, + 0xF970, 0xE1ED, 0xF971, 0xE3F5, 0xF972, 0xE4A1, 0xF973, 0xE4A9, 0xF974, 0xE5AE, 0xF975, 0xE5B1, 0xF976, 0xE5B2, 0xF977, 0xE5B9, + 0xF978, 0xE5BB, 0xF979, 0xE5BC, 0xF97A, 0xE5C4, 0xF97B, 0xE5CE, 0xF97C, 0xE5D0, 0xF97D, 0xE5D2, 0xF97E, 0xE5D6, 0xF97F, 0xE5FA, + 0xF980, 0xE5FB, 0xF981, 0xE5FC, 0xF982, 0xE5FE, 0xF983, 0xE6A1, 0xF984, 0xE6A4, 0xF985, 0xE6A7, 0xF986, 0xE6AD, 0xF987, 0xE6AF, + 0xF988, 0xE6B0, 0xF989, 0xE6B1, 0xF98A, 0xE6B3, 0xF98B, 0xE6B7, 0xF98C, 0xE6B8, 0xF98D, 0xE6BC, 0xF98E, 0xE6C4, 0xF98F, 0xE6C6, + 0xF990, 0xE6C7, 0xF991, 0xE6CA, 0xF992, 0xE6D2, 0xF993, 0xE6D6, 0xF994, 0xE6D9, 0xF995, 0xE6DC, 0xF996, 0xE6DF, 0xF997, 0xE6E1, + 0xF998, 0xE6E4, 0xF999, 0xE6E5, 0xF99A, 0xE6E6, 0xF99B, 0xE6E8, 0xF99C, 0xE6EA, 0xF99D, 0xE6EB, 0xF99E, 0xE6EC, 0xF99F, 0xE6EF, + 0xF9A0, 0xE6F1, 0xF9A1, 0xE6F2, 0xF9A2, 0xE6F5, 0xF9A3, 0xE6F6, 0xF9A4, 0xE6F7, 0xF9A5, 0xE6F9, 0xF9A6, 0xE7A1, 0xF9A7, 0xE7A6, + 0xF9A8, 0xE7A9, 0xF9A9, 0xE7AA, 0xF9AA, 0xE7AC, 0xF9AB, 0xE7AD, 0xF9AC, 0xE7B0, 0xF9AD, 0xE7BF, 0xF9AE, 0xE7C1, 0xF9AF, 0xE7C6, + 0xF9B0, 0xE7C7, 0xF9B1, 0xE7CB, 0xF9B2, 0xE7CD, 0xF9B3, 0xE7CF, 0xF9B4, 0xE7D0, 0xF9B5, 0xE7D3, 0xF9B6, 0xE7DF, 0xF9B7, 0xE7E4, + 0xF9B8, 0xE7E6, 0xF9B9, 0xE7F7, 0xF9BA, 0xE8E7, 0xF9BB, 0xE8E8, 0xF9BC, 0xE8F0, 0xF9BD, 0xE8F1, 0xF9BE, 0xE8F7, 0xF9BF, 0xE8F9, + 0xF9C0, 0xE8FB, 0xF9C1, 0xE8FE, 0xF9C2, 0xE9A7, 0xF9C3, 0xE9AC, 0xF9C4, 0xE9CC, 0xF9C5, 0xE9F7, 0xF9C6, 0xEAC1, 0xF9C7, 0xEAE5, + 0xF9C8, 0xEAF4, 0xF9C9, 0xEAF7, 0xF9CA, 0xEAFC, 0xF9CB, 0xEAFE, 0xF9CC, 0xEBA4, 0xF9CD, 0xEBA7, 0xF9CE, 0xEBA9, 0xF9CF, 0xEBAA, + 0xF9D0, 0xEBBA, 0xF9D1, 0xEBBB, 0xF9D2, 0xEBBD, 0xF9D3, 0xEBC1, 0xF9D4, 0xEBC2, 0xF9D5, 0xEBC6, 0xF9D6, 0xEBC7, 0xF9D7, 0xEBCC, + 0xF9D8, 0xEBCF, 0xF9D9, 0xEBD0, 0xF9DA, 0xEBD1, 0xF9DB, 0xEBD2, 0xF9DC, 0xEBD8, 0xF9DD, 0xECA6, 0xF9DE, 0xECA7, 0xF9DF, 0xECAA, + 0xF9E0, 0xECAF, 0xF9E1, 0xECB0, 0xF9E2, 0xECB1, 0xF9E3, 0xECB2, 0xF9E4, 0xECB5, 0xF9E5, 0xECB8, 0xF9E6, 0xECBA, 0xF9E7, 0xECC0, + 0xF9E8, 0xECC1, 0xF9E9, 0xECC5, 0xF9EA, 0xECC6, 0xF9EB, 0xECC9, 0xF9EC, 0xECCA, 0xF9ED, 0xECD5, 0xF9EE, 0xECDD, 0xF9EF, 0xECDE, + 0xF9F0, 0xECE1, 0xF9F1, 0xECE4, 0xF9F2, 0xECE7, 0xF9F3, 0xECE8, 0xF9F4, 0xECF7, 0xF9F5, 0xECF8, 0xF9F6, 0xECFA, 0xF9F7, 0xEDA1, + 0xF9F8, 0xEDA2, 0xF9F9, 0xEDA3, 0xF9FA, 0xEDEE, 0xF9FB, 0xEEDB, 0xF9FC, 0xF2BD, 0xF9FD, 0xF2FA, 0xF9FE, 0xF3B1, 0xF9FF, 0xF4A7, + 0xFA00, 0xF4EE, 0xFA01, 0xF6F4, 0xFA02, 0xF6F6, 0xFA03, 0xF7B8, 0xFA04, 0xF7C8, 0xFA05, 0xF7D3, 0xFA06, 0xF8DB, 0xFA07, 0xF8F0, + 0xFA08, 0xFAA1, 0xFA09, 0xFAA2, 0xFA0A, 0xFAE6, 0xFA0B, 0xFCA9, 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA3A4, + 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC, + 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4, + 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC, + 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4, + 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC, + 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4, + 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA1AC, + 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4, + 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC, + 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4, + 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC, + 0xFF5D, 0xA3FD, 0xFF5E, 0xA2A6, 0xFFE0, 0xA1CB, 0xFFE1, 0xA1CC, 0xFFE2, 0xA1FE, 0xFFE3, 0xA3FE, 0xFFE5, 0xA1CD, 0xFFE6, 0xA3DC, + 0, 0 +}; + +static const WCHAR oem2uni949[] = { /* Korean --> Unicode pairs */ + 0x8141, 0xAC02, 0x8142, 0xAC03, 0x8143, 0xAC05, 0x8144, 0xAC06, 0x8145, 0xAC0B, 0x8146, 0xAC0C, 0x8147, 0xAC0D, 0x8148, 0xAC0E, + 0x8149, 0xAC0F, 0x814A, 0xAC18, 0x814B, 0xAC1E, 0x814C, 0xAC1F, 0x814D, 0xAC21, 0x814E, 0xAC22, 0x814F, 0xAC23, 0x8150, 0xAC25, + 0x8151, 0xAC26, 0x8152, 0xAC27, 0x8153, 0xAC28, 0x8154, 0xAC29, 0x8155, 0xAC2A, 0x8156, 0xAC2B, 0x8157, 0xAC2E, 0x8158, 0xAC32, + 0x8159, 0xAC33, 0x815A, 0xAC34, 0x8161, 0xAC35, 0x8162, 0xAC36, 0x8163, 0xAC37, 0x8164, 0xAC3A, 0x8165, 0xAC3B, 0x8166, 0xAC3D, + 0x8167, 0xAC3E, 0x8168, 0xAC3F, 0x8169, 0xAC41, 0x816A, 0xAC42, 0x816B, 0xAC43, 0x816C, 0xAC44, 0x816D, 0xAC45, 0x816E, 0xAC46, + 0x816F, 0xAC47, 0x8170, 0xAC48, 0x8171, 0xAC49, 0x8172, 0xAC4A, 0x8173, 0xAC4C, 0x8174, 0xAC4E, 0x8175, 0xAC4F, 0x8176, 0xAC50, + 0x8177, 0xAC51, 0x8178, 0xAC52, 0x8179, 0xAC53, 0x817A, 0xAC55, 0x8181, 0xAC56, 0x8182, 0xAC57, 0x8183, 0xAC59, 0x8184, 0xAC5A, + 0x8185, 0xAC5B, 0x8186, 0xAC5D, 0x8187, 0xAC5E, 0x8188, 0xAC5F, 0x8189, 0xAC60, 0x818A, 0xAC61, 0x818B, 0xAC62, 0x818C, 0xAC63, + 0x818D, 0xAC64, 0x818E, 0xAC65, 0x818F, 0xAC66, 0x8190, 0xAC67, 0x8191, 0xAC68, 0x8192, 0xAC69, 0x8193, 0xAC6A, 0x8194, 0xAC6B, + 0x8195, 0xAC6C, 0x8196, 0xAC6D, 0x8197, 0xAC6E, 0x8198, 0xAC6F, 0x8199, 0xAC72, 0x819A, 0xAC73, 0x819B, 0xAC75, 0x819C, 0xAC76, + 0x819D, 0xAC79, 0x819E, 0xAC7B, 0x819F, 0xAC7C, 0x81A0, 0xAC7D, 0x81A1, 0xAC7E, 0x81A2, 0xAC7F, 0x81A3, 0xAC82, 0x81A4, 0xAC87, + 0x81A5, 0xAC88, 0x81A6, 0xAC8D, 0x81A7, 0xAC8E, 0x81A8, 0xAC8F, 0x81A9, 0xAC91, 0x81AA, 0xAC92, 0x81AB, 0xAC93, 0x81AC, 0xAC95, + 0x81AD, 0xAC96, 0x81AE, 0xAC97, 0x81AF, 0xAC98, 0x81B0, 0xAC99, 0x81B1, 0xAC9A, 0x81B2, 0xAC9B, 0x81B3, 0xAC9E, 0x81B4, 0xACA2, + 0x81B5, 0xACA3, 0x81B6, 0xACA4, 0x81B7, 0xACA5, 0x81B8, 0xACA6, 0x81B9, 0xACA7, 0x81BA, 0xACAB, 0x81BB, 0xACAD, 0x81BC, 0xACAE, + 0x81BD, 0xACB1, 0x81BE, 0xACB2, 0x81BF, 0xACB3, 0x81C0, 0xACB4, 0x81C1, 0xACB5, 0x81C2, 0xACB6, 0x81C3, 0xACB7, 0x81C4, 0xACBA, + 0x81C5, 0xACBE, 0x81C6, 0xACBF, 0x81C7, 0xACC0, 0x81C8, 0xACC2, 0x81C9, 0xACC3, 0x81CA, 0xACC5, 0x81CB, 0xACC6, 0x81CC, 0xACC7, + 0x81CD, 0xACC9, 0x81CE, 0xACCA, 0x81CF, 0xACCB, 0x81D0, 0xACCD, 0x81D1, 0xACCE, 0x81D2, 0xACCF, 0x81D3, 0xACD0, 0x81D4, 0xACD1, + 0x81D5, 0xACD2, 0x81D6, 0xACD3, 0x81D7, 0xACD4, 0x81D8, 0xACD6, 0x81D9, 0xACD8, 0x81DA, 0xACD9, 0x81DB, 0xACDA, 0x81DC, 0xACDB, + 0x81DD, 0xACDC, 0x81DE, 0xACDD, 0x81DF, 0xACDE, 0x81E0, 0xACDF, 0x81E1, 0xACE2, 0x81E2, 0xACE3, 0x81E3, 0xACE5, 0x81E4, 0xACE6, + 0x81E5, 0xACE9, 0x81E6, 0xACEB, 0x81E7, 0xACED, 0x81E8, 0xACEE, 0x81E9, 0xACF2, 0x81EA, 0xACF4, 0x81EB, 0xACF7, 0x81EC, 0xACF8, + 0x81ED, 0xACF9, 0x81EE, 0xACFA, 0x81EF, 0xACFB, 0x81F0, 0xACFE, 0x81F1, 0xACFF, 0x81F2, 0xAD01, 0x81F3, 0xAD02, 0x81F4, 0xAD03, + 0x81F5, 0xAD05, 0x81F6, 0xAD07, 0x81F7, 0xAD08, 0x81F8, 0xAD09, 0x81F9, 0xAD0A, 0x81FA, 0xAD0B, 0x81FB, 0xAD0E, 0x81FC, 0xAD10, + 0x81FD, 0xAD12, 0x81FE, 0xAD13, 0x8241, 0xAD14, 0x8242, 0xAD15, 0x8243, 0xAD16, 0x8244, 0xAD17, 0x8245, 0xAD19, 0x8246, 0xAD1A, + 0x8247, 0xAD1B, 0x8248, 0xAD1D, 0x8249, 0xAD1E, 0x824A, 0xAD1F, 0x824B, 0xAD21, 0x824C, 0xAD22, 0x824D, 0xAD23, 0x824E, 0xAD24, + 0x824F, 0xAD25, 0x8250, 0xAD26, 0x8251, 0xAD27, 0x8252, 0xAD28, 0x8253, 0xAD2A, 0x8254, 0xAD2B, 0x8255, 0xAD2E, 0x8256, 0xAD2F, + 0x8257, 0xAD30, 0x8258, 0xAD31, 0x8259, 0xAD32, 0x825A, 0xAD33, 0x8261, 0xAD36, 0x8262, 0xAD37, 0x8263, 0xAD39, 0x8264, 0xAD3A, + 0x8265, 0xAD3B, 0x8266, 0xAD3D, 0x8267, 0xAD3E, 0x8268, 0xAD3F, 0x8269, 0xAD40, 0x826A, 0xAD41, 0x826B, 0xAD42, 0x826C, 0xAD43, + 0x826D, 0xAD46, 0x826E, 0xAD48, 0x826F, 0xAD4A, 0x8270, 0xAD4B, 0x8271, 0xAD4C, 0x8272, 0xAD4D, 0x8273, 0xAD4E, 0x8274, 0xAD4F, + 0x8275, 0xAD51, 0x8276, 0xAD52, 0x8277, 0xAD53, 0x8278, 0xAD55, 0x8279, 0xAD56, 0x827A, 0xAD57, 0x8281, 0xAD59, 0x8282, 0xAD5A, + 0x8283, 0xAD5B, 0x8284, 0xAD5C, 0x8285, 0xAD5D, 0x8286, 0xAD5E, 0x8287, 0xAD5F, 0x8288, 0xAD60, 0x8289, 0xAD62, 0x828A, 0xAD64, + 0x828B, 0xAD65, 0x828C, 0xAD66, 0x828D, 0xAD67, 0x828E, 0xAD68, 0x828F, 0xAD69, 0x8290, 0xAD6A, 0x8291, 0xAD6B, 0x8292, 0xAD6E, + 0x8293, 0xAD6F, 0x8294, 0xAD71, 0x8295, 0xAD72, 0x8296, 0xAD77, 0x8297, 0xAD78, 0x8298, 0xAD79, 0x8299, 0xAD7A, 0x829A, 0xAD7E, + 0x829B, 0xAD80, 0x829C, 0xAD83, 0x829D, 0xAD84, 0x829E, 0xAD85, 0x829F, 0xAD86, 0x82A0, 0xAD87, 0x82A1, 0xAD8A, 0x82A2, 0xAD8B, + 0x82A3, 0xAD8D, 0x82A4, 0xAD8E, 0x82A5, 0xAD8F, 0x82A6, 0xAD91, 0x82A7, 0xAD92, 0x82A8, 0xAD93, 0x82A9, 0xAD94, 0x82AA, 0xAD95, + 0x82AB, 0xAD96, 0x82AC, 0xAD97, 0x82AD, 0xAD98, 0x82AE, 0xAD99, 0x82AF, 0xAD9A, 0x82B0, 0xAD9B, 0x82B1, 0xAD9E, 0x82B2, 0xAD9F, + 0x82B3, 0xADA0, 0x82B4, 0xADA1, 0x82B5, 0xADA2, 0x82B6, 0xADA3, 0x82B7, 0xADA5, 0x82B8, 0xADA6, 0x82B9, 0xADA7, 0x82BA, 0xADA8, + 0x82BB, 0xADA9, 0x82BC, 0xADAA, 0x82BD, 0xADAB, 0x82BE, 0xADAC, 0x82BF, 0xADAD, 0x82C0, 0xADAE, 0x82C1, 0xADAF, 0x82C2, 0xADB0, + 0x82C3, 0xADB1, 0x82C4, 0xADB2, 0x82C5, 0xADB3, 0x82C6, 0xADB4, 0x82C7, 0xADB5, 0x82C8, 0xADB6, 0x82C9, 0xADB8, 0x82CA, 0xADB9, + 0x82CB, 0xADBA, 0x82CC, 0xADBB, 0x82CD, 0xADBC, 0x82CE, 0xADBD, 0x82CF, 0xADBE, 0x82D0, 0xADBF, 0x82D1, 0xADC2, 0x82D2, 0xADC3, + 0x82D3, 0xADC5, 0x82D4, 0xADC6, 0x82D5, 0xADC7, 0x82D6, 0xADC9, 0x82D7, 0xADCA, 0x82D8, 0xADCB, 0x82D9, 0xADCC, 0x82DA, 0xADCD, + 0x82DB, 0xADCE, 0x82DC, 0xADCF, 0x82DD, 0xADD2, 0x82DE, 0xADD4, 0x82DF, 0xADD5, 0x82E0, 0xADD6, 0x82E1, 0xADD7, 0x82E2, 0xADD8, + 0x82E3, 0xADD9, 0x82E4, 0xADDA, 0x82E5, 0xADDB, 0x82E6, 0xADDD, 0x82E7, 0xADDE, 0x82E8, 0xADDF, 0x82E9, 0xADE1, 0x82EA, 0xADE2, + 0x82EB, 0xADE3, 0x82EC, 0xADE5, 0x82ED, 0xADE6, 0x82EE, 0xADE7, 0x82EF, 0xADE8, 0x82F0, 0xADE9, 0x82F1, 0xADEA, 0x82F2, 0xADEB, + 0x82F3, 0xADEC, 0x82F4, 0xADED, 0x82F5, 0xADEE, 0x82F6, 0xADEF, 0x82F7, 0xADF0, 0x82F8, 0xADF1, 0x82F9, 0xADF2, 0x82FA, 0xADF3, + 0x82FB, 0xADF4, 0x82FC, 0xADF5, 0x82FD, 0xADF6, 0x82FE, 0xADF7, 0x8341, 0xADFA, 0x8342, 0xADFB, 0x8343, 0xADFD, 0x8344, 0xADFE, + 0x8345, 0xAE02, 0x8346, 0xAE03, 0x8347, 0xAE04, 0x8348, 0xAE05, 0x8349, 0xAE06, 0x834A, 0xAE07, 0x834B, 0xAE0A, 0x834C, 0xAE0C, + 0x834D, 0xAE0E, 0x834E, 0xAE0F, 0x834F, 0xAE10, 0x8350, 0xAE11, 0x8351, 0xAE12, 0x8352, 0xAE13, 0x8353, 0xAE15, 0x8354, 0xAE16, + 0x8355, 0xAE17, 0x8356, 0xAE18, 0x8357, 0xAE19, 0x8358, 0xAE1A, 0x8359, 0xAE1B, 0x835A, 0xAE1C, 0x8361, 0xAE1D, 0x8362, 0xAE1E, + 0x8363, 0xAE1F, 0x8364, 0xAE20, 0x8365, 0xAE21, 0x8366, 0xAE22, 0x8367, 0xAE23, 0x8368, 0xAE24, 0x8369, 0xAE25, 0x836A, 0xAE26, + 0x836B, 0xAE27, 0x836C, 0xAE28, 0x836D, 0xAE29, 0x836E, 0xAE2A, 0x836F, 0xAE2B, 0x8370, 0xAE2C, 0x8371, 0xAE2D, 0x8372, 0xAE2E, + 0x8373, 0xAE2F, 0x8374, 0xAE32, 0x8375, 0xAE33, 0x8376, 0xAE35, 0x8377, 0xAE36, 0x8378, 0xAE39, 0x8379, 0xAE3B, 0x837A, 0xAE3C, + 0x8381, 0xAE3D, 0x8382, 0xAE3E, 0x8383, 0xAE3F, 0x8384, 0xAE42, 0x8385, 0xAE44, 0x8386, 0xAE47, 0x8387, 0xAE48, 0x8388, 0xAE49, + 0x8389, 0xAE4B, 0x838A, 0xAE4F, 0x838B, 0xAE51, 0x838C, 0xAE52, 0x838D, 0xAE53, 0x838E, 0xAE55, 0x838F, 0xAE57, 0x8390, 0xAE58, + 0x8391, 0xAE59, 0x8392, 0xAE5A, 0x8393, 0xAE5B, 0x8394, 0xAE5E, 0x8395, 0xAE62, 0x8396, 0xAE63, 0x8397, 0xAE64, 0x8398, 0xAE66, + 0x8399, 0xAE67, 0x839A, 0xAE6A, 0x839B, 0xAE6B, 0x839C, 0xAE6D, 0x839D, 0xAE6E, 0x839E, 0xAE6F, 0x839F, 0xAE71, 0x83A0, 0xAE72, + 0x83A1, 0xAE73, 0x83A2, 0xAE74, 0x83A3, 0xAE75, 0x83A4, 0xAE76, 0x83A5, 0xAE77, 0x83A6, 0xAE7A, 0x83A7, 0xAE7E, 0x83A8, 0xAE7F, + 0x83A9, 0xAE80, 0x83AA, 0xAE81, 0x83AB, 0xAE82, 0x83AC, 0xAE83, 0x83AD, 0xAE86, 0x83AE, 0xAE87, 0x83AF, 0xAE88, 0x83B0, 0xAE89, + 0x83B1, 0xAE8A, 0x83B2, 0xAE8B, 0x83B3, 0xAE8D, 0x83B4, 0xAE8E, 0x83B5, 0xAE8F, 0x83B6, 0xAE90, 0x83B7, 0xAE91, 0x83B8, 0xAE92, + 0x83B9, 0xAE93, 0x83BA, 0xAE94, 0x83BB, 0xAE95, 0x83BC, 0xAE96, 0x83BD, 0xAE97, 0x83BE, 0xAE98, 0x83BF, 0xAE99, 0x83C0, 0xAE9A, + 0x83C1, 0xAE9B, 0x83C2, 0xAE9C, 0x83C3, 0xAE9D, 0x83C4, 0xAE9E, 0x83C5, 0xAE9F, 0x83C6, 0xAEA0, 0x83C7, 0xAEA1, 0x83C8, 0xAEA2, + 0x83C9, 0xAEA3, 0x83CA, 0xAEA4, 0x83CB, 0xAEA5, 0x83CC, 0xAEA6, 0x83CD, 0xAEA7, 0x83CE, 0xAEA8, 0x83CF, 0xAEA9, 0x83D0, 0xAEAA, + 0x83D1, 0xAEAB, 0x83D2, 0xAEAC, 0x83D3, 0xAEAD, 0x83D4, 0xAEAE, 0x83D5, 0xAEAF, 0x83D6, 0xAEB0, 0x83D7, 0xAEB1, 0x83D8, 0xAEB2, + 0x83D9, 0xAEB3, 0x83DA, 0xAEB4, 0x83DB, 0xAEB5, 0x83DC, 0xAEB6, 0x83DD, 0xAEB7, 0x83DE, 0xAEB8, 0x83DF, 0xAEB9, 0x83E0, 0xAEBA, + 0x83E1, 0xAEBB, 0x83E2, 0xAEBF, 0x83E3, 0xAEC1, 0x83E4, 0xAEC2, 0x83E5, 0xAEC3, 0x83E6, 0xAEC5, 0x83E7, 0xAEC6, 0x83E8, 0xAEC7, + 0x83E9, 0xAEC8, 0x83EA, 0xAEC9, 0x83EB, 0xAECA, 0x83EC, 0xAECB, 0x83ED, 0xAECE, 0x83EE, 0xAED2, 0x83EF, 0xAED3, 0x83F0, 0xAED4, + 0x83F1, 0xAED5, 0x83F2, 0xAED6, 0x83F3, 0xAED7, 0x83F4, 0xAEDA, 0x83F5, 0xAEDB, 0x83F6, 0xAEDD, 0x83F7, 0xAEDE, 0x83F8, 0xAEDF, + 0x83F9, 0xAEE0, 0x83FA, 0xAEE1, 0x83FB, 0xAEE2, 0x83FC, 0xAEE3, 0x83FD, 0xAEE4, 0x83FE, 0xAEE5, 0x8441, 0xAEE6, 0x8442, 0xAEE7, + 0x8443, 0xAEE9, 0x8444, 0xAEEA, 0x8445, 0xAEEC, 0x8446, 0xAEEE, 0x8447, 0xAEEF, 0x8448, 0xAEF0, 0x8449, 0xAEF1, 0x844A, 0xAEF2, + 0x844B, 0xAEF3, 0x844C, 0xAEF5, 0x844D, 0xAEF6, 0x844E, 0xAEF7, 0x844F, 0xAEF9, 0x8450, 0xAEFA, 0x8451, 0xAEFB, 0x8452, 0xAEFD, + 0x8453, 0xAEFE, 0x8454, 0xAEFF, 0x8455, 0xAF00, 0x8456, 0xAF01, 0x8457, 0xAF02, 0x8458, 0xAF03, 0x8459, 0xAF04, 0x845A, 0xAF05, + 0x8461, 0xAF06, 0x8462, 0xAF09, 0x8463, 0xAF0A, 0x8464, 0xAF0B, 0x8465, 0xAF0C, 0x8466, 0xAF0E, 0x8467, 0xAF0F, 0x8468, 0xAF11, + 0x8469, 0xAF12, 0x846A, 0xAF13, 0x846B, 0xAF14, 0x846C, 0xAF15, 0x846D, 0xAF16, 0x846E, 0xAF17, 0x846F, 0xAF18, 0x8470, 0xAF19, + 0x8471, 0xAF1A, 0x8472, 0xAF1B, 0x8473, 0xAF1C, 0x8474, 0xAF1D, 0x8475, 0xAF1E, 0x8476, 0xAF1F, 0x8477, 0xAF20, 0x8478, 0xAF21, + 0x8479, 0xAF22, 0x847A, 0xAF23, 0x8481, 0xAF24, 0x8482, 0xAF25, 0x8483, 0xAF26, 0x8484, 0xAF27, 0x8485, 0xAF28, 0x8486, 0xAF29, + 0x8487, 0xAF2A, 0x8488, 0xAF2B, 0x8489, 0xAF2E, 0x848A, 0xAF2F, 0x848B, 0xAF31, 0x848C, 0xAF33, 0x848D, 0xAF35, 0x848E, 0xAF36, + 0x848F, 0xAF37, 0x8490, 0xAF38, 0x8491, 0xAF39, 0x8492, 0xAF3A, 0x8493, 0xAF3B, 0x8494, 0xAF3E, 0x8495, 0xAF40, 0x8496, 0xAF44, + 0x8497, 0xAF45, 0x8498, 0xAF46, 0x8499, 0xAF47, 0x849A, 0xAF4A, 0x849B, 0xAF4B, 0x849C, 0xAF4C, 0x849D, 0xAF4D, 0x849E, 0xAF4E, + 0x849F, 0xAF4F, 0x84A0, 0xAF51, 0x84A1, 0xAF52, 0x84A2, 0xAF53, 0x84A3, 0xAF54, 0x84A4, 0xAF55, 0x84A5, 0xAF56, 0x84A6, 0xAF57, + 0x84A7, 0xAF58, 0x84A8, 0xAF59, 0x84A9, 0xAF5A, 0x84AA, 0xAF5B, 0x84AB, 0xAF5E, 0x84AC, 0xAF5F, 0x84AD, 0xAF60, 0x84AE, 0xAF61, + 0x84AF, 0xAF62, 0x84B0, 0xAF63, 0x84B1, 0xAF66, 0x84B2, 0xAF67, 0x84B3, 0xAF68, 0x84B4, 0xAF69, 0x84B5, 0xAF6A, 0x84B6, 0xAF6B, + 0x84B7, 0xAF6C, 0x84B8, 0xAF6D, 0x84B9, 0xAF6E, 0x84BA, 0xAF6F, 0x84BB, 0xAF70, 0x84BC, 0xAF71, 0x84BD, 0xAF72, 0x84BE, 0xAF73, + 0x84BF, 0xAF74, 0x84C0, 0xAF75, 0x84C1, 0xAF76, 0x84C2, 0xAF77, 0x84C3, 0xAF78, 0x84C4, 0xAF7A, 0x84C5, 0xAF7B, 0x84C6, 0xAF7C, + 0x84C7, 0xAF7D, 0x84C8, 0xAF7E, 0x84C9, 0xAF7F, 0x84CA, 0xAF81, 0x84CB, 0xAF82, 0x84CC, 0xAF83, 0x84CD, 0xAF85, 0x84CE, 0xAF86, + 0x84CF, 0xAF87, 0x84D0, 0xAF89, 0x84D1, 0xAF8A, 0x84D2, 0xAF8B, 0x84D3, 0xAF8C, 0x84D4, 0xAF8D, 0x84D5, 0xAF8E, 0x84D6, 0xAF8F, + 0x84D7, 0xAF92, 0x84D8, 0xAF93, 0x84D9, 0xAF94, 0x84DA, 0xAF96, 0x84DB, 0xAF97, 0x84DC, 0xAF98, 0x84DD, 0xAF99, 0x84DE, 0xAF9A, + 0x84DF, 0xAF9B, 0x84E0, 0xAF9D, 0x84E1, 0xAF9E, 0x84E2, 0xAF9F, 0x84E3, 0xAFA0, 0x84E4, 0xAFA1, 0x84E5, 0xAFA2, 0x84E6, 0xAFA3, + 0x84E7, 0xAFA4, 0x84E8, 0xAFA5, 0x84E9, 0xAFA6, 0x84EA, 0xAFA7, 0x84EB, 0xAFA8, 0x84EC, 0xAFA9, 0x84ED, 0xAFAA, 0x84EE, 0xAFAB, + 0x84EF, 0xAFAC, 0x84F0, 0xAFAD, 0x84F1, 0xAFAE, 0x84F2, 0xAFAF, 0x84F3, 0xAFB0, 0x84F4, 0xAFB1, 0x84F5, 0xAFB2, 0x84F6, 0xAFB3, + 0x84F7, 0xAFB4, 0x84F8, 0xAFB5, 0x84F9, 0xAFB6, 0x84FA, 0xAFB7, 0x84FB, 0xAFBA, 0x84FC, 0xAFBB, 0x84FD, 0xAFBD, 0x84FE, 0xAFBE, + 0x8541, 0xAFBF, 0x8542, 0xAFC1, 0x8543, 0xAFC2, 0x8544, 0xAFC3, 0x8545, 0xAFC4, 0x8546, 0xAFC5, 0x8547, 0xAFC6, 0x8548, 0xAFCA, + 0x8549, 0xAFCC, 0x854A, 0xAFCF, 0x854B, 0xAFD0, 0x854C, 0xAFD1, 0x854D, 0xAFD2, 0x854E, 0xAFD3, 0x854F, 0xAFD5, 0x8550, 0xAFD6, + 0x8551, 0xAFD7, 0x8552, 0xAFD8, 0x8553, 0xAFD9, 0x8554, 0xAFDA, 0x8555, 0xAFDB, 0x8556, 0xAFDD, 0x8557, 0xAFDE, 0x8558, 0xAFDF, + 0x8559, 0xAFE0, 0x855A, 0xAFE1, 0x8561, 0xAFE2, 0x8562, 0xAFE3, 0x8563, 0xAFE4, 0x8564, 0xAFE5, 0x8565, 0xAFE6, 0x8566, 0xAFE7, + 0x8567, 0xAFEA, 0x8568, 0xAFEB, 0x8569, 0xAFEC, 0x856A, 0xAFED, 0x856B, 0xAFEE, 0x856C, 0xAFEF, 0x856D, 0xAFF2, 0x856E, 0xAFF3, + 0x856F, 0xAFF5, 0x8570, 0xAFF6, 0x8571, 0xAFF7, 0x8572, 0xAFF9, 0x8573, 0xAFFA, 0x8574, 0xAFFB, 0x8575, 0xAFFC, 0x8576, 0xAFFD, + 0x8577, 0xAFFE, 0x8578, 0xAFFF, 0x8579, 0xB002, 0x857A, 0xB003, 0x8581, 0xB005, 0x8582, 0xB006, 0x8583, 0xB007, 0x8584, 0xB008, + 0x8585, 0xB009, 0x8586, 0xB00A, 0x8587, 0xB00B, 0x8588, 0xB00D, 0x8589, 0xB00E, 0x858A, 0xB00F, 0x858B, 0xB011, 0x858C, 0xB012, + 0x858D, 0xB013, 0x858E, 0xB015, 0x858F, 0xB016, 0x8590, 0xB017, 0x8591, 0xB018, 0x8592, 0xB019, 0x8593, 0xB01A, 0x8594, 0xB01B, + 0x8595, 0xB01E, 0x8596, 0xB01F, 0x8597, 0xB020, 0x8598, 0xB021, 0x8599, 0xB022, 0x859A, 0xB023, 0x859B, 0xB024, 0x859C, 0xB025, + 0x859D, 0xB026, 0x859E, 0xB027, 0x859F, 0xB029, 0x85A0, 0xB02A, 0x85A1, 0xB02B, 0x85A2, 0xB02C, 0x85A3, 0xB02D, 0x85A4, 0xB02E, + 0x85A5, 0xB02F, 0x85A6, 0xB030, 0x85A7, 0xB031, 0x85A8, 0xB032, 0x85A9, 0xB033, 0x85AA, 0xB034, 0x85AB, 0xB035, 0x85AC, 0xB036, + 0x85AD, 0xB037, 0x85AE, 0xB038, 0x85AF, 0xB039, 0x85B0, 0xB03A, 0x85B1, 0xB03B, 0x85B2, 0xB03C, 0x85B3, 0xB03D, 0x85B4, 0xB03E, + 0x85B5, 0xB03F, 0x85B6, 0xB040, 0x85B7, 0xB041, 0x85B8, 0xB042, 0x85B9, 0xB043, 0x85BA, 0xB046, 0x85BB, 0xB047, 0x85BC, 0xB049, + 0x85BD, 0xB04B, 0x85BE, 0xB04D, 0x85BF, 0xB04F, 0x85C0, 0xB050, 0x85C1, 0xB051, 0x85C2, 0xB052, 0x85C3, 0xB056, 0x85C4, 0xB058, + 0x85C5, 0xB05A, 0x85C6, 0xB05B, 0x85C7, 0xB05C, 0x85C8, 0xB05E, 0x85C9, 0xB05F, 0x85CA, 0xB060, 0x85CB, 0xB061, 0x85CC, 0xB062, + 0x85CD, 0xB063, 0x85CE, 0xB064, 0x85CF, 0xB065, 0x85D0, 0xB066, 0x85D1, 0xB067, 0x85D2, 0xB068, 0x85D3, 0xB069, 0x85D4, 0xB06A, + 0x85D5, 0xB06B, 0x85D6, 0xB06C, 0x85D7, 0xB06D, 0x85D8, 0xB06E, 0x85D9, 0xB06F, 0x85DA, 0xB070, 0x85DB, 0xB071, 0x85DC, 0xB072, + 0x85DD, 0xB073, 0x85DE, 0xB074, 0x85DF, 0xB075, 0x85E0, 0xB076, 0x85E1, 0xB077, 0x85E2, 0xB078, 0x85E3, 0xB079, 0x85E4, 0xB07A, + 0x85E5, 0xB07B, 0x85E6, 0xB07E, 0x85E7, 0xB07F, 0x85E8, 0xB081, 0x85E9, 0xB082, 0x85EA, 0xB083, 0x85EB, 0xB085, 0x85EC, 0xB086, + 0x85ED, 0xB087, 0x85EE, 0xB088, 0x85EF, 0xB089, 0x85F0, 0xB08A, 0x85F1, 0xB08B, 0x85F2, 0xB08E, 0x85F3, 0xB090, 0x85F4, 0xB092, + 0x85F5, 0xB093, 0x85F6, 0xB094, 0x85F7, 0xB095, 0x85F8, 0xB096, 0x85F9, 0xB097, 0x85FA, 0xB09B, 0x85FB, 0xB09D, 0x85FC, 0xB09E, + 0x85FD, 0xB0A3, 0x85FE, 0xB0A4, 0x8641, 0xB0A5, 0x8642, 0xB0A6, 0x8643, 0xB0A7, 0x8644, 0xB0AA, 0x8645, 0xB0B0, 0x8646, 0xB0B2, + 0x8647, 0xB0B6, 0x8648, 0xB0B7, 0x8649, 0xB0B9, 0x864A, 0xB0BA, 0x864B, 0xB0BB, 0x864C, 0xB0BD, 0x864D, 0xB0BE, 0x864E, 0xB0BF, + 0x864F, 0xB0C0, 0x8650, 0xB0C1, 0x8651, 0xB0C2, 0x8652, 0xB0C3, 0x8653, 0xB0C6, 0x8654, 0xB0CA, 0x8655, 0xB0CB, 0x8656, 0xB0CC, + 0x8657, 0xB0CD, 0x8658, 0xB0CE, 0x8659, 0xB0CF, 0x865A, 0xB0D2, 0x8661, 0xB0D3, 0x8662, 0xB0D5, 0x8663, 0xB0D6, 0x8664, 0xB0D7, + 0x8665, 0xB0D9, 0x8666, 0xB0DA, 0x8667, 0xB0DB, 0x8668, 0xB0DC, 0x8669, 0xB0DD, 0x866A, 0xB0DE, 0x866B, 0xB0DF, 0x866C, 0xB0E1, + 0x866D, 0xB0E2, 0x866E, 0xB0E3, 0x866F, 0xB0E4, 0x8670, 0xB0E6, 0x8671, 0xB0E7, 0x8672, 0xB0E8, 0x8673, 0xB0E9, 0x8674, 0xB0EA, + 0x8675, 0xB0EB, 0x8676, 0xB0EC, 0x8677, 0xB0ED, 0x8678, 0xB0EE, 0x8679, 0xB0EF, 0x867A, 0xB0F0, 0x8681, 0xB0F1, 0x8682, 0xB0F2, + 0x8683, 0xB0F3, 0x8684, 0xB0F4, 0x8685, 0xB0F5, 0x8686, 0xB0F6, 0x8687, 0xB0F7, 0x8688, 0xB0F8, 0x8689, 0xB0F9, 0x868A, 0xB0FA, + 0x868B, 0xB0FB, 0x868C, 0xB0FC, 0x868D, 0xB0FD, 0x868E, 0xB0FE, 0x868F, 0xB0FF, 0x8690, 0xB100, 0x8691, 0xB101, 0x8692, 0xB102, + 0x8693, 0xB103, 0x8694, 0xB104, 0x8695, 0xB105, 0x8696, 0xB106, 0x8697, 0xB107, 0x8698, 0xB10A, 0x8699, 0xB10D, 0x869A, 0xB10E, + 0x869B, 0xB10F, 0x869C, 0xB111, 0x869D, 0xB114, 0x869E, 0xB115, 0x869F, 0xB116, 0x86A0, 0xB117, 0x86A1, 0xB11A, 0x86A2, 0xB11E, + 0x86A3, 0xB11F, 0x86A4, 0xB120, 0x86A5, 0xB121, 0x86A6, 0xB122, 0x86A7, 0xB126, 0x86A8, 0xB127, 0x86A9, 0xB129, 0x86AA, 0xB12A, + 0x86AB, 0xB12B, 0x86AC, 0xB12D, 0x86AD, 0xB12E, 0x86AE, 0xB12F, 0x86AF, 0xB130, 0x86B0, 0xB131, 0x86B1, 0xB132, 0x86B2, 0xB133, + 0x86B3, 0xB136, 0x86B4, 0xB13A, 0x86B5, 0xB13B, 0x86B6, 0xB13C, 0x86B7, 0xB13D, 0x86B8, 0xB13E, 0x86B9, 0xB13F, 0x86BA, 0xB142, + 0x86BB, 0xB143, 0x86BC, 0xB145, 0x86BD, 0xB146, 0x86BE, 0xB147, 0x86BF, 0xB149, 0x86C0, 0xB14A, 0x86C1, 0xB14B, 0x86C2, 0xB14C, + 0x86C3, 0xB14D, 0x86C4, 0xB14E, 0x86C5, 0xB14F, 0x86C6, 0xB152, 0x86C7, 0xB153, 0x86C8, 0xB156, 0x86C9, 0xB157, 0x86CA, 0xB159, + 0x86CB, 0xB15A, 0x86CC, 0xB15B, 0x86CD, 0xB15D, 0x86CE, 0xB15E, 0x86CF, 0xB15F, 0x86D0, 0xB161, 0x86D1, 0xB162, 0x86D2, 0xB163, + 0x86D3, 0xB164, 0x86D4, 0xB165, 0x86D5, 0xB166, 0x86D6, 0xB167, 0x86D7, 0xB168, 0x86D8, 0xB169, 0x86D9, 0xB16A, 0x86DA, 0xB16B, + 0x86DB, 0xB16C, 0x86DC, 0xB16D, 0x86DD, 0xB16E, 0x86DE, 0xB16F, 0x86DF, 0xB170, 0x86E0, 0xB171, 0x86E1, 0xB172, 0x86E2, 0xB173, + 0x86E3, 0xB174, 0x86E4, 0xB175, 0x86E5, 0xB176, 0x86E6, 0xB177, 0x86E7, 0xB17A, 0x86E8, 0xB17B, 0x86E9, 0xB17D, 0x86EA, 0xB17E, + 0x86EB, 0xB17F, 0x86EC, 0xB181, 0x86ED, 0xB183, 0x86EE, 0xB184, 0x86EF, 0xB185, 0x86F0, 0xB186, 0x86F1, 0xB187, 0x86F2, 0xB18A, + 0x86F3, 0xB18C, 0x86F4, 0xB18E, 0x86F5, 0xB18F, 0x86F6, 0xB190, 0x86F7, 0xB191, 0x86F8, 0xB195, 0x86F9, 0xB196, 0x86FA, 0xB197, + 0x86FB, 0xB199, 0x86FC, 0xB19A, 0x86FD, 0xB19B, 0x86FE, 0xB19D, 0x8741, 0xB19E, 0x8742, 0xB19F, 0x8743, 0xB1A0, 0x8744, 0xB1A1, + 0x8745, 0xB1A2, 0x8746, 0xB1A3, 0x8747, 0xB1A4, 0x8748, 0xB1A5, 0x8749, 0xB1A6, 0x874A, 0xB1A7, 0x874B, 0xB1A9, 0x874C, 0xB1AA, + 0x874D, 0xB1AB, 0x874E, 0xB1AC, 0x874F, 0xB1AD, 0x8750, 0xB1AE, 0x8751, 0xB1AF, 0x8752, 0xB1B0, 0x8753, 0xB1B1, 0x8754, 0xB1B2, + 0x8755, 0xB1B3, 0x8756, 0xB1B4, 0x8757, 0xB1B5, 0x8758, 0xB1B6, 0x8759, 0xB1B7, 0x875A, 0xB1B8, 0x8761, 0xB1B9, 0x8762, 0xB1BA, + 0x8763, 0xB1BB, 0x8764, 0xB1BC, 0x8765, 0xB1BD, 0x8766, 0xB1BE, 0x8767, 0xB1BF, 0x8768, 0xB1C0, 0x8769, 0xB1C1, 0x876A, 0xB1C2, + 0x876B, 0xB1C3, 0x876C, 0xB1C4, 0x876D, 0xB1C5, 0x876E, 0xB1C6, 0x876F, 0xB1C7, 0x8770, 0xB1C8, 0x8771, 0xB1C9, 0x8772, 0xB1CA, + 0x8773, 0xB1CB, 0x8774, 0xB1CD, 0x8775, 0xB1CE, 0x8776, 0xB1CF, 0x8777, 0xB1D1, 0x8778, 0xB1D2, 0x8779, 0xB1D3, 0x877A, 0xB1D5, + 0x8781, 0xB1D6, 0x8782, 0xB1D7, 0x8783, 0xB1D8, 0x8784, 0xB1D9, 0x8785, 0xB1DA, 0x8786, 0xB1DB, 0x8787, 0xB1DE, 0x8788, 0xB1E0, + 0x8789, 0xB1E1, 0x878A, 0xB1E2, 0x878B, 0xB1E3, 0x878C, 0xB1E4, 0x878D, 0xB1E5, 0x878E, 0xB1E6, 0x878F, 0xB1E7, 0x8790, 0xB1EA, + 0x8791, 0xB1EB, 0x8792, 0xB1ED, 0x8793, 0xB1EE, 0x8794, 0xB1EF, 0x8795, 0xB1F1, 0x8796, 0xB1F2, 0x8797, 0xB1F3, 0x8798, 0xB1F4, + 0x8799, 0xB1F5, 0x879A, 0xB1F6, 0x879B, 0xB1F7, 0x879C, 0xB1F8, 0x879D, 0xB1FA, 0x879E, 0xB1FC, 0x879F, 0xB1FE, 0x87A0, 0xB1FF, + 0x87A1, 0xB200, 0x87A2, 0xB201, 0x87A3, 0xB202, 0x87A4, 0xB203, 0x87A5, 0xB206, 0x87A6, 0xB207, 0x87A7, 0xB209, 0x87A8, 0xB20A, + 0x87A9, 0xB20D, 0x87AA, 0xB20E, 0x87AB, 0xB20F, 0x87AC, 0xB210, 0x87AD, 0xB211, 0x87AE, 0xB212, 0x87AF, 0xB213, 0x87B0, 0xB216, + 0x87B1, 0xB218, 0x87B2, 0xB21A, 0x87B3, 0xB21B, 0x87B4, 0xB21C, 0x87B5, 0xB21D, 0x87B6, 0xB21E, 0x87B7, 0xB21F, 0x87B8, 0xB221, + 0x87B9, 0xB222, 0x87BA, 0xB223, 0x87BB, 0xB224, 0x87BC, 0xB225, 0x87BD, 0xB226, 0x87BE, 0xB227, 0x87BF, 0xB228, 0x87C0, 0xB229, + 0x87C1, 0xB22A, 0x87C2, 0xB22B, 0x87C3, 0xB22C, 0x87C4, 0xB22D, 0x87C5, 0xB22E, 0x87C6, 0xB22F, 0x87C7, 0xB230, 0x87C8, 0xB231, + 0x87C9, 0xB232, 0x87CA, 0xB233, 0x87CB, 0xB235, 0x87CC, 0xB236, 0x87CD, 0xB237, 0x87CE, 0xB238, 0x87CF, 0xB239, 0x87D0, 0xB23A, + 0x87D1, 0xB23B, 0x87D2, 0xB23D, 0x87D3, 0xB23E, 0x87D4, 0xB23F, 0x87D5, 0xB240, 0x87D6, 0xB241, 0x87D7, 0xB242, 0x87D8, 0xB243, + 0x87D9, 0xB244, 0x87DA, 0xB245, 0x87DB, 0xB246, 0x87DC, 0xB247, 0x87DD, 0xB248, 0x87DE, 0xB249, 0x87DF, 0xB24A, 0x87E0, 0xB24B, + 0x87E1, 0xB24C, 0x87E2, 0xB24D, 0x87E3, 0xB24E, 0x87E4, 0xB24F, 0x87E5, 0xB250, 0x87E6, 0xB251, 0x87E7, 0xB252, 0x87E8, 0xB253, + 0x87E9, 0xB254, 0x87EA, 0xB255, 0x87EB, 0xB256, 0x87EC, 0xB257, 0x87ED, 0xB259, 0x87EE, 0xB25A, 0x87EF, 0xB25B, 0x87F0, 0xB25D, + 0x87F1, 0xB25E, 0x87F2, 0xB25F, 0x87F3, 0xB261, 0x87F4, 0xB262, 0x87F5, 0xB263, 0x87F6, 0xB264, 0x87F7, 0xB265, 0x87F8, 0xB266, + 0x87F9, 0xB267, 0x87FA, 0xB26A, 0x87FB, 0xB26B, 0x87FC, 0xB26C, 0x87FD, 0xB26D, 0x87FE, 0xB26E, 0x8841, 0xB26F, 0x8842, 0xB270, + 0x8843, 0xB271, 0x8844, 0xB272, 0x8845, 0xB273, 0x8846, 0xB276, 0x8847, 0xB277, 0x8848, 0xB278, 0x8849, 0xB279, 0x884A, 0xB27A, + 0x884B, 0xB27B, 0x884C, 0xB27D, 0x884D, 0xB27E, 0x884E, 0xB27F, 0x884F, 0xB280, 0x8850, 0xB281, 0x8851, 0xB282, 0x8852, 0xB283, + 0x8853, 0xB286, 0x8854, 0xB287, 0x8855, 0xB288, 0x8856, 0xB28A, 0x8857, 0xB28B, 0x8858, 0xB28C, 0x8859, 0xB28D, 0x885A, 0xB28E, + 0x8861, 0xB28F, 0x8862, 0xB292, 0x8863, 0xB293, 0x8864, 0xB295, 0x8865, 0xB296, 0x8866, 0xB297, 0x8867, 0xB29B, 0x8868, 0xB29C, + 0x8869, 0xB29D, 0x886A, 0xB29E, 0x886B, 0xB29F, 0x886C, 0xB2A2, 0x886D, 0xB2A4, 0x886E, 0xB2A7, 0x886F, 0xB2A8, 0x8870, 0xB2A9, + 0x8871, 0xB2AB, 0x8872, 0xB2AD, 0x8873, 0xB2AE, 0x8874, 0xB2AF, 0x8875, 0xB2B1, 0x8876, 0xB2B2, 0x8877, 0xB2B3, 0x8878, 0xB2B5, + 0x8879, 0xB2B6, 0x887A, 0xB2B7, 0x8881, 0xB2B8, 0x8882, 0xB2B9, 0x8883, 0xB2BA, 0x8884, 0xB2BB, 0x8885, 0xB2BC, 0x8886, 0xB2BD, + 0x8887, 0xB2BE, 0x8888, 0xB2BF, 0x8889, 0xB2C0, 0x888A, 0xB2C1, 0x888B, 0xB2C2, 0x888C, 0xB2C3, 0x888D, 0xB2C4, 0x888E, 0xB2C5, + 0x888F, 0xB2C6, 0x8890, 0xB2C7, 0x8891, 0xB2CA, 0x8892, 0xB2CB, 0x8893, 0xB2CD, 0x8894, 0xB2CE, 0x8895, 0xB2CF, 0x8896, 0xB2D1, + 0x8897, 0xB2D3, 0x8898, 0xB2D4, 0x8899, 0xB2D5, 0x889A, 0xB2D6, 0x889B, 0xB2D7, 0x889C, 0xB2DA, 0x889D, 0xB2DC, 0x889E, 0xB2DE, + 0x889F, 0xB2DF, 0x88A0, 0xB2E0, 0x88A1, 0xB2E1, 0x88A2, 0xB2E3, 0x88A3, 0xB2E7, 0x88A4, 0xB2E9, 0x88A5, 0xB2EA, 0x88A6, 0xB2F0, + 0x88A7, 0xB2F1, 0x88A8, 0xB2F2, 0x88A9, 0xB2F6, 0x88AA, 0xB2FC, 0x88AB, 0xB2FD, 0x88AC, 0xB2FE, 0x88AD, 0xB302, 0x88AE, 0xB303, + 0x88AF, 0xB305, 0x88B0, 0xB306, 0x88B1, 0xB307, 0x88B2, 0xB309, 0x88B3, 0xB30A, 0x88B4, 0xB30B, 0x88B5, 0xB30C, 0x88B6, 0xB30D, + 0x88B7, 0xB30E, 0x88B8, 0xB30F, 0x88B9, 0xB312, 0x88BA, 0xB316, 0x88BB, 0xB317, 0x88BC, 0xB318, 0x88BD, 0xB319, 0x88BE, 0xB31A, + 0x88BF, 0xB31B, 0x88C0, 0xB31D, 0x88C1, 0xB31E, 0x88C2, 0xB31F, 0x88C3, 0xB320, 0x88C4, 0xB321, 0x88C5, 0xB322, 0x88C6, 0xB323, + 0x88C7, 0xB324, 0x88C8, 0xB325, 0x88C9, 0xB326, 0x88CA, 0xB327, 0x88CB, 0xB328, 0x88CC, 0xB329, 0x88CD, 0xB32A, 0x88CE, 0xB32B, + 0x88CF, 0xB32C, 0x88D0, 0xB32D, 0x88D1, 0xB32E, 0x88D2, 0xB32F, 0x88D3, 0xB330, 0x88D4, 0xB331, 0x88D5, 0xB332, 0x88D6, 0xB333, + 0x88D7, 0xB334, 0x88D8, 0xB335, 0x88D9, 0xB336, 0x88DA, 0xB337, 0x88DB, 0xB338, 0x88DC, 0xB339, 0x88DD, 0xB33A, 0x88DE, 0xB33B, + 0x88DF, 0xB33C, 0x88E0, 0xB33D, 0x88E1, 0xB33E, 0x88E2, 0xB33F, 0x88E3, 0xB340, 0x88E4, 0xB341, 0x88E5, 0xB342, 0x88E6, 0xB343, + 0x88E7, 0xB344, 0x88E8, 0xB345, 0x88E9, 0xB346, 0x88EA, 0xB347, 0x88EB, 0xB348, 0x88EC, 0xB349, 0x88ED, 0xB34A, 0x88EE, 0xB34B, + 0x88EF, 0xB34C, 0x88F0, 0xB34D, 0x88F1, 0xB34E, 0x88F2, 0xB34F, 0x88F3, 0xB350, 0x88F4, 0xB351, 0x88F5, 0xB352, 0x88F6, 0xB353, + 0x88F7, 0xB357, 0x88F8, 0xB359, 0x88F9, 0xB35A, 0x88FA, 0xB35D, 0x88FB, 0xB360, 0x88FC, 0xB361, 0x88FD, 0xB362, 0x88FE, 0xB363, + 0x8941, 0xB366, 0x8942, 0xB368, 0x8943, 0xB36A, 0x8944, 0xB36C, 0x8945, 0xB36D, 0x8946, 0xB36F, 0x8947, 0xB372, 0x8948, 0xB373, + 0x8949, 0xB375, 0x894A, 0xB376, 0x894B, 0xB377, 0x894C, 0xB379, 0x894D, 0xB37A, 0x894E, 0xB37B, 0x894F, 0xB37C, 0x8950, 0xB37D, + 0x8951, 0xB37E, 0x8952, 0xB37F, 0x8953, 0xB382, 0x8954, 0xB386, 0x8955, 0xB387, 0x8956, 0xB388, 0x8957, 0xB389, 0x8958, 0xB38A, + 0x8959, 0xB38B, 0x895A, 0xB38D, 0x8961, 0xB38E, 0x8962, 0xB38F, 0x8963, 0xB391, 0x8964, 0xB392, 0x8965, 0xB393, 0x8966, 0xB395, + 0x8967, 0xB396, 0x8968, 0xB397, 0x8969, 0xB398, 0x896A, 0xB399, 0x896B, 0xB39A, 0x896C, 0xB39B, 0x896D, 0xB39C, 0x896E, 0xB39D, + 0x896F, 0xB39E, 0x8970, 0xB39F, 0x8971, 0xB3A2, 0x8972, 0xB3A3, 0x8973, 0xB3A4, 0x8974, 0xB3A5, 0x8975, 0xB3A6, 0x8976, 0xB3A7, + 0x8977, 0xB3A9, 0x8978, 0xB3AA, 0x8979, 0xB3AB, 0x897A, 0xB3AD, 0x8981, 0xB3AE, 0x8982, 0xB3AF, 0x8983, 0xB3B0, 0x8984, 0xB3B1, + 0x8985, 0xB3B2, 0x8986, 0xB3B3, 0x8987, 0xB3B4, 0x8988, 0xB3B5, 0x8989, 0xB3B6, 0x898A, 0xB3B7, 0x898B, 0xB3B8, 0x898C, 0xB3B9, + 0x898D, 0xB3BA, 0x898E, 0xB3BB, 0x898F, 0xB3BC, 0x8990, 0xB3BD, 0x8991, 0xB3BE, 0x8992, 0xB3BF, 0x8993, 0xB3C0, 0x8994, 0xB3C1, + 0x8995, 0xB3C2, 0x8996, 0xB3C3, 0x8997, 0xB3C6, 0x8998, 0xB3C7, 0x8999, 0xB3C9, 0x899A, 0xB3CA, 0x899B, 0xB3CD, 0x899C, 0xB3CF, + 0x899D, 0xB3D1, 0x899E, 0xB3D2, 0x899F, 0xB3D3, 0x89A0, 0xB3D6, 0x89A1, 0xB3D8, 0x89A2, 0xB3DA, 0x89A3, 0xB3DC, 0x89A4, 0xB3DE, + 0x89A5, 0xB3DF, 0x89A6, 0xB3E1, 0x89A7, 0xB3E2, 0x89A8, 0xB3E3, 0x89A9, 0xB3E5, 0x89AA, 0xB3E6, 0x89AB, 0xB3E7, 0x89AC, 0xB3E9, + 0x89AD, 0xB3EA, 0x89AE, 0xB3EB, 0x89AF, 0xB3EC, 0x89B0, 0xB3ED, 0x89B1, 0xB3EE, 0x89B2, 0xB3EF, 0x89B3, 0xB3F0, 0x89B4, 0xB3F1, + 0x89B5, 0xB3F2, 0x89B6, 0xB3F3, 0x89B7, 0xB3F4, 0x89B8, 0xB3F5, 0x89B9, 0xB3F6, 0x89BA, 0xB3F7, 0x89BB, 0xB3F8, 0x89BC, 0xB3F9, + 0x89BD, 0xB3FA, 0x89BE, 0xB3FB, 0x89BF, 0xB3FD, 0x89C0, 0xB3FE, 0x89C1, 0xB3FF, 0x89C2, 0xB400, 0x89C3, 0xB401, 0x89C4, 0xB402, + 0x89C5, 0xB403, 0x89C6, 0xB404, 0x89C7, 0xB405, 0x89C8, 0xB406, 0x89C9, 0xB407, 0x89CA, 0xB408, 0x89CB, 0xB409, 0x89CC, 0xB40A, + 0x89CD, 0xB40B, 0x89CE, 0xB40C, 0x89CF, 0xB40D, 0x89D0, 0xB40E, 0x89D1, 0xB40F, 0x89D2, 0xB411, 0x89D3, 0xB412, 0x89D4, 0xB413, + 0x89D5, 0xB414, 0x89D6, 0xB415, 0x89D7, 0xB416, 0x89D8, 0xB417, 0x89D9, 0xB419, 0x89DA, 0xB41A, 0x89DB, 0xB41B, 0x89DC, 0xB41D, + 0x89DD, 0xB41E, 0x89DE, 0xB41F, 0x89DF, 0xB421, 0x89E0, 0xB422, 0x89E1, 0xB423, 0x89E2, 0xB424, 0x89E3, 0xB425, 0x89E4, 0xB426, + 0x89E5, 0xB427, 0x89E6, 0xB42A, 0x89E7, 0xB42C, 0x89E8, 0xB42D, 0x89E9, 0xB42E, 0x89EA, 0xB42F, 0x89EB, 0xB430, 0x89EC, 0xB431, + 0x89ED, 0xB432, 0x89EE, 0xB433, 0x89EF, 0xB435, 0x89F0, 0xB436, 0x89F1, 0xB437, 0x89F2, 0xB438, 0x89F3, 0xB439, 0x89F4, 0xB43A, + 0x89F5, 0xB43B, 0x89F6, 0xB43C, 0x89F7, 0xB43D, 0x89F8, 0xB43E, 0x89F9, 0xB43F, 0x89FA, 0xB440, 0x89FB, 0xB441, 0x89FC, 0xB442, + 0x89FD, 0xB443, 0x89FE, 0xB444, 0x8A41, 0xB445, 0x8A42, 0xB446, 0x8A43, 0xB447, 0x8A44, 0xB448, 0x8A45, 0xB449, 0x8A46, 0xB44A, + 0x8A47, 0xB44B, 0x8A48, 0xB44C, 0x8A49, 0xB44D, 0x8A4A, 0xB44E, 0x8A4B, 0xB44F, 0x8A4C, 0xB452, 0x8A4D, 0xB453, 0x8A4E, 0xB455, + 0x8A4F, 0xB456, 0x8A50, 0xB457, 0x8A51, 0xB459, 0x8A52, 0xB45A, 0x8A53, 0xB45B, 0x8A54, 0xB45C, 0x8A55, 0xB45D, 0x8A56, 0xB45E, + 0x8A57, 0xB45F, 0x8A58, 0xB462, 0x8A59, 0xB464, 0x8A5A, 0xB466, 0x8A61, 0xB467, 0x8A62, 0xB468, 0x8A63, 0xB469, 0x8A64, 0xB46A, + 0x8A65, 0xB46B, 0x8A66, 0xB46D, 0x8A67, 0xB46E, 0x8A68, 0xB46F, 0x8A69, 0xB470, 0x8A6A, 0xB471, 0x8A6B, 0xB472, 0x8A6C, 0xB473, + 0x8A6D, 0xB474, 0x8A6E, 0xB475, 0x8A6F, 0xB476, 0x8A70, 0xB477, 0x8A71, 0xB478, 0x8A72, 0xB479, 0x8A73, 0xB47A, 0x8A74, 0xB47B, + 0x8A75, 0xB47C, 0x8A76, 0xB47D, 0x8A77, 0xB47E, 0x8A78, 0xB47F, 0x8A79, 0xB481, 0x8A7A, 0xB482, 0x8A81, 0xB483, 0x8A82, 0xB484, + 0x8A83, 0xB485, 0x8A84, 0xB486, 0x8A85, 0xB487, 0x8A86, 0xB489, 0x8A87, 0xB48A, 0x8A88, 0xB48B, 0x8A89, 0xB48C, 0x8A8A, 0xB48D, + 0x8A8B, 0xB48E, 0x8A8C, 0xB48F, 0x8A8D, 0xB490, 0x8A8E, 0xB491, 0x8A8F, 0xB492, 0x8A90, 0xB493, 0x8A91, 0xB494, 0x8A92, 0xB495, + 0x8A93, 0xB496, 0x8A94, 0xB497, 0x8A95, 0xB498, 0x8A96, 0xB499, 0x8A97, 0xB49A, 0x8A98, 0xB49B, 0x8A99, 0xB49C, 0x8A9A, 0xB49E, + 0x8A9B, 0xB49F, 0x8A9C, 0xB4A0, 0x8A9D, 0xB4A1, 0x8A9E, 0xB4A2, 0x8A9F, 0xB4A3, 0x8AA0, 0xB4A5, 0x8AA1, 0xB4A6, 0x8AA2, 0xB4A7, + 0x8AA3, 0xB4A9, 0x8AA4, 0xB4AA, 0x8AA5, 0xB4AB, 0x8AA6, 0xB4AD, 0x8AA7, 0xB4AE, 0x8AA8, 0xB4AF, 0x8AA9, 0xB4B0, 0x8AAA, 0xB4B1, + 0x8AAB, 0xB4B2, 0x8AAC, 0xB4B3, 0x8AAD, 0xB4B4, 0x8AAE, 0xB4B6, 0x8AAF, 0xB4B8, 0x8AB0, 0xB4BA, 0x8AB1, 0xB4BB, 0x8AB2, 0xB4BC, + 0x8AB3, 0xB4BD, 0x8AB4, 0xB4BE, 0x8AB5, 0xB4BF, 0x8AB6, 0xB4C1, 0x8AB7, 0xB4C2, 0x8AB8, 0xB4C3, 0x8AB9, 0xB4C5, 0x8ABA, 0xB4C6, + 0x8ABB, 0xB4C7, 0x8ABC, 0xB4C9, 0x8ABD, 0xB4CA, 0x8ABE, 0xB4CB, 0x8ABF, 0xB4CC, 0x8AC0, 0xB4CD, 0x8AC1, 0xB4CE, 0x8AC2, 0xB4CF, + 0x8AC3, 0xB4D1, 0x8AC4, 0xB4D2, 0x8AC5, 0xB4D3, 0x8AC6, 0xB4D4, 0x8AC7, 0xB4D6, 0x8AC8, 0xB4D7, 0x8AC9, 0xB4D8, 0x8ACA, 0xB4D9, + 0x8ACB, 0xB4DA, 0x8ACC, 0xB4DB, 0x8ACD, 0xB4DE, 0x8ACE, 0xB4DF, 0x8ACF, 0xB4E1, 0x8AD0, 0xB4E2, 0x8AD1, 0xB4E5, 0x8AD2, 0xB4E7, + 0x8AD3, 0xB4E8, 0x8AD4, 0xB4E9, 0x8AD5, 0xB4EA, 0x8AD6, 0xB4EB, 0x8AD7, 0xB4EE, 0x8AD8, 0xB4F0, 0x8AD9, 0xB4F2, 0x8ADA, 0xB4F3, + 0x8ADB, 0xB4F4, 0x8ADC, 0xB4F5, 0x8ADD, 0xB4F6, 0x8ADE, 0xB4F7, 0x8ADF, 0xB4F9, 0x8AE0, 0xB4FA, 0x8AE1, 0xB4FB, 0x8AE2, 0xB4FC, + 0x8AE3, 0xB4FD, 0x8AE4, 0xB4FE, 0x8AE5, 0xB4FF, 0x8AE6, 0xB500, 0x8AE7, 0xB501, 0x8AE8, 0xB502, 0x8AE9, 0xB503, 0x8AEA, 0xB504, + 0x8AEB, 0xB505, 0x8AEC, 0xB506, 0x8AED, 0xB507, 0x8AEE, 0xB508, 0x8AEF, 0xB509, 0x8AF0, 0xB50A, 0x8AF1, 0xB50B, 0x8AF2, 0xB50C, + 0x8AF3, 0xB50D, 0x8AF4, 0xB50E, 0x8AF5, 0xB50F, 0x8AF6, 0xB510, 0x8AF7, 0xB511, 0x8AF8, 0xB512, 0x8AF9, 0xB513, 0x8AFA, 0xB516, + 0x8AFB, 0xB517, 0x8AFC, 0xB519, 0x8AFD, 0xB51A, 0x8AFE, 0xB51D, 0x8B41, 0xB51E, 0x8B42, 0xB51F, 0x8B43, 0xB520, 0x8B44, 0xB521, + 0x8B45, 0xB522, 0x8B46, 0xB523, 0x8B47, 0xB526, 0x8B48, 0xB52B, 0x8B49, 0xB52C, 0x8B4A, 0xB52D, 0x8B4B, 0xB52E, 0x8B4C, 0xB52F, + 0x8B4D, 0xB532, 0x8B4E, 0xB533, 0x8B4F, 0xB535, 0x8B50, 0xB536, 0x8B51, 0xB537, 0x8B52, 0xB539, 0x8B53, 0xB53A, 0x8B54, 0xB53B, + 0x8B55, 0xB53C, 0x8B56, 0xB53D, 0x8B57, 0xB53E, 0x8B58, 0xB53F, 0x8B59, 0xB542, 0x8B5A, 0xB546, 0x8B61, 0xB547, 0x8B62, 0xB548, + 0x8B63, 0xB549, 0x8B64, 0xB54A, 0x8B65, 0xB54E, 0x8B66, 0xB54F, 0x8B67, 0xB551, 0x8B68, 0xB552, 0x8B69, 0xB553, 0x8B6A, 0xB555, + 0x8B6B, 0xB556, 0x8B6C, 0xB557, 0x8B6D, 0xB558, 0x8B6E, 0xB559, 0x8B6F, 0xB55A, 0x8B70, 0xB55B, 0x8B71, 0xB55E, 0x8B72, 0xB562, + 0x8B73, 0xB563, 0x8B74, 0xB564, 0x8B75, 0xB565, 0x8B76, 0xB566, 0x8B77, 0xB567, 0x8B78, 0xB568, 0x8B79, 0xB569, 0x8B7A, 0xB56A, + 0x8B81, 0xB56B, 0x8B82, 0xB56C, 0x8B83, 0xB56D, 0x8B84, 0xB56E, 0x8B85, 0xB56F, 0x8B86, 0xB570, 0x8B87, 0xB571, 0x8B88, 0xB572, + 0x8B89, 0xB573, 0x8B8A, 0xB574, 0x8B8B, 0xB575, 0x8B8C, 0xB576, 0x8B8D, 0xB577, 0x8B8E, 0xB578, 0x8B8F, 0xB579, 0x8B90, 0xB57A, + 0x8B91, 0xB57B, 0x8B92, 0xB57C, 0x8B93, 0xB57D, 0x8B94, 0xB57E, 0x8B95, 0xB57F, 0x8B96, 0xB580, 0x8B97, 0xB581, 0x8B98, 0xB582, + 0x8B99, 0xB583, 0x8B9A, 0xB584, 0x8B9B, 0xB585, 0x8B9C, 0xB586, 0x8B9D, 0xB587, 0x8B9E, 0xB588, 0x8B9F, 0xB589, 0x8BA0, 0xB58A, + 0x8BA1, 0xB58B, 0x8BA2, 0xB58C, 0x8BA3, 0xB58D, 0x8BA4, 0xB58E, 0x8BA5, 0xB58F, 0x8BA6, 0xB590, 0x8BA7, 0xB591, 0x8BA8, 0xB592, + 0x8BA9, 0xB593, 0x8BAA, 0xB594, 0x8BAB, 0xB595, 0x8BAC, 0xB596, 0x8BAD, 0xB597, 0x8BAE, 0xB598, 0x8BAF, 0xB599, 0x8BB0, 0xB59A, + 0x8BB1, 0xB59B, 0x8BB2, 0xB59C, 0x8BB3, 0xB59D, 0x8BB4, 0xB59E, 0x8BB5, 0xB59F, 0x8BB6, 0xB5A2, 0x8BB7, 0xB5A3, 0x8BB8, 0xB5A5, + 0x8BB9, 0xB5A6, 0x8BBA, 0xB5A7, 0x8BBB, 0xB5A9, 0x8BBC, 0xB5AC, 0x8BBD, 0xB5AD, 0x8BBE, 0xB5AE, 0x8BBF, 0xB5AF, 0x8BC0, 0xB5B2, + 0x8BC1, 0xB5B6, 0x8BC2, 0xB5B7, 0x8BC3, 0xB5B8, 0x8BC4, 0xB5B9, 0x8BC5, 0xB5BA, 0x8BC6, 0xB5BE, 0x8BC7, 0xB5BF, 0x8BC8, 0xB5C1, + 0x8BC9, 0xB5C2, 0x8BCA, 0xB5C3, 0x8BCB, 0xB5C5, 0x8BCC, 0xB5C6, 0x8BCD, 0xB5C7, 0x8BCE, 0xB5C8, 0x8BCF, 0xB5C9, 0x8BD0, 0xB5CA, + 0x8BD1, 0xB5CB, 0x8BD2, 0xB5CE, 0x8BD3, 0xB5D2, 0x8BD4, 0xB5D3, 0x8BD5, 0xB5D4, 0x8BD6, 0xB5D5, 0x8BD7, 0xB5D6, 0x8BD8, 0xB5D7, + 0x8BD9, 0xB5D9, 0x8BDA, 0xB5DA, 0x8BDB, 0xB5DB, 0x8BDC, 0xB5DC, 0x8BDD, 0xB5DD, 0x8BDE, 0xB5DE, 0x8BDF, 0xB5DF, 0x8BE0, 0xB5E0, + 0x8BE1, 0xB5E1, 0x8BE2, 0xB5E2, 0x8BE3, 0xB5E3, 0x8BE4, 0xB5E4, 0x8BE5, 0xB5E5, 0x8BE6, 0xB5E6, 0x8BE7, 0xB5E7, 0x8BE8, 0xB5E8, + 0x8BE9, 0xB5E9, 0x8BEA, 0xB5EA, 0x8BEB, 0xB5EB, 0x8BEC, 0xB5ED, 0x8BED, 0xB5EE, 0x8BEE, 0xB5EF, 0x8BEF, 0xB5F0, 0x8BF0, 0xB5F1, + 0x8BF1, 0xB5F2, 0x8BF2, 0xB5F3, 0x8BF3, 0xB5F4, 0x8BF4, 0xB5F5, 0x8BF5, 0xB5F6, 0x8BF6, 0xB5F7, 0x8BF7, 0xB5F8, 0x8BF8, 0xB5F9, + 0x8BF9, 0xB5FA, 0x8BFA, 0xB5FB, 0x8BFB, 0xB5FC, 0x8BFC, 0xB5FD, 0x8BFD, 0xB5FE, 0x8BFE, 0xB5FF, 0x8C41, 0xB600, 0x8C42, 0xB601, + 0x8C43, 0xB602, 0x8C44, 0xB603, 0x8C45, 0xB604, 0x8C46, 0xB605, 0x8C47, 0xB606, 0x8C48, 0xB607, 0x8C49, 0xB608, 0x8C4A, 0xB609, + 0x8C4B, 0xB60A, 0x8C4C, 0xB60B, 0x8C4D, 0xB60C, 0x8C4E, 0xB60D, 0x8C4F, 0xB60E, 0x8C50, 0xB60F, 0x8C51, 0xB612, 0x8C52, 0xB613, + 0x8C53, 0xB615, 0x8C54, 0xB616, 0x8C55, 0xB617, 0x8C56, 0xB619, 0x8C57, 0xB61A, 0x8C58, 0xB61B, 0x8C59, 0xB61C, 0x8C5A, 0xB61D, + 0x8C61, 0xB61E, 0x8C62, 0xB61F, 0x8C63, 0xB620, 0x8C64, 0xB621, 0x8C65, 0xB622, 0x8C66, 0xB623, 0x8C67, 0xB624, 0x8C68, 0xB626, + 0x8C69, 0xB627, 0x8C6A, 0xB628, 0x8C6B, 0xB629, 0x8C6C, 0xB62A, 0x8C6D, 0xB62B, 0x8C6E, 0xB62D, 0x8C6F, 0xB62E, 0x8C70, 0xB62F, + 0x8C71, 0xB630, 0x8C72, 0xB631, 0x8C73, 0xB632, 0x8C74, 0xB633, 0x8C75, 0xB635, 0x8C76, 0xB636, 0x8C77, 0xB637, 0x8C78, 0xB638, + 0x8C79, 0xB639, 0x8C7A, 0xB63A, 0x8C81, 0xB63B, 0x8C82, 0xB63C, 0x8C83, 0xB63D, 0x8C84, 0xB63E, 0x8C85, 0xB63F, 0x8C86, 0xB640, + 0x8C87, 0xB641, 0x8C88, 0xB642, 0x8C89, 0xB643, 0x8C8A, 0xB644, 0x8C8B, 0xB645, 0x8C8C, 0xB646, 0x8C8D, 0xB647, 0x8C8E, 0xB649, + 0x8C8F, 0xB64A, 0x8C90, 0xB64B, 0x8C91, 0xB64C, 0x8C92, 0xB64D, 0x8C93, 0xB64E, 0x8C94, 0xB64F, 0x8C95, 0xB650, 0x8C96, 0xB651, + 0x8C97, 0xB652, 0x8C98, 0xB653, 0x8C99, 0xB654, 0x8C9A, 0xB655, 0x8C9B, 0xB656, 0x8C9C, 0xB657, 0x8C9D, 0xB658, 0x8C9E, 0xB659, + 0x8C9F, 0xB65A, 0x8CA0, 0xB65B, 0x8CA1, 0xB65C, 0x8CA2, 0xB65D, 0x8CA3, 0xB65E, 0x8CA4, 0xB65F, 0x8CA5, 0xB660, 0x8CA6, 0xB661, + 0x8CA7, 0xB662, 0x8CA8, 0xB663, 0x8CA9, 0xB665, 0x8CAA, 0xB666, 0x8CAB, 0xB667, 0x8CAC, 0xB669, 0x8CAD, 0xB66A, 0x8CAE, 0xB66B, + 0x8CAF, 0xB66C, 0x8CB0, 0xB66D, 0x8CB1, 0xB66E, 0x8CB2, 0xB66F, 0x8CB3, 0xB670, 0x8CB4, 0xB671, 0x8CB5, 0xB672, 0x8CB6, 0xB673, + 0x8CB7, 0xB674, 0x8CB8, 0xB675, 0x8CB9, 0xB676, 0x8CBA, 0xB677, 0x8CBB, 0xB678, 0x8CBC, 0xB679, 0x8CBD, 0xB67A, 0x8CBE, 0xB67B, + 0x8CBF, 0xB67C, 0x8CC0, 0xB67D, 0x8CC1, 0xB67E, 0x8CC2, 0xB67F, 0x8CC3, 0xB680, 0x8CC4, 0xB681, 0x8CC5, 0xB682, 0x8CC6, 0xB683, + 0x8CC7, 0xB684, 0x8CC8, 0xB685, 0x8CC9, 0xB686, 0x8CCA, 0xB687, 0x8CCB, 0xB688, 0x8CCC, 0xB689, 0x8CCD, 0xB68A, 0x8CCE, 0xB68B, + 0x8CCF, 0xB68C, 0x8CD0, 0xB68D, 0x8CD1, 0xB68E, 0x8CD2, 0xB68F, 0x8CD3, 0xB690, 0x8CD4, 0xB691, 0x8CD5, 0xB692, 0x8CD6, 0xB693, + 0x8CD7, 0xB694, 0x8CD8, 0xB695, 0x8CD9, 0xB696, 0x8CDA, 0xB697, 0x8CDB, 0xB698, 0x8CDC, 0xB699, 0x8CDD, 0xB69A, 0x8CDE, 0xB69B, + 0x8CDF, 0xB69E, 0x8CE0, 0xB69F, 0x8CE1, 0xB6A1, 0x8CE2, 0xB6A2, 0x8CE3, 0xB6A3, 0x8CE4, 0xB6A5, 0x8CE5, 0xB6A6, 0x8CE6, 0xB6A7, + 0x8CE7, 0xB6A8, 0x8CE8, 0xB6A9, 0x8CE9, 0xB6AA, 0x8CEA, 0xB6AD, 0x8CEB, 0xB6AE, 0x8CEC, 0xB6AF, 0x8CED, 0xB6B0, 0x8CEE, 0xB6B2, + 0x8CEF, 0xB6B3, 0x8CF0, 0xB6B4, 0x8CF1, 0xB6B5, 0x8CF2, 0xB6B6, 0x8CF3, 0xB6B7, 0x8CF4, 0xB6B8, 0x8CF5, 0xB6B9, 0x8CF6, 0xB6BA, + 0x8CF7, 0xB6BB, 0x8CF8, 0xB6BC, 0x8CF9, 0xB6BD, 0x8CFA, 0xB6BE, 0x8CFB, 0xB6BF, 0x8CFC, 0xB6C0, 0x8CFD, 0xB6C1, 0x8CFE, 0xB6C2, + 0x8D41, 0xB6C3, 0x8D42, 0xB6C4, 0x8D43, 0xB6C5, 0x8D44, 0xB6C6, 0x8D45, 0xB6C7, 0x8D46, 0xB6C8, 0x8D47, 0xB6C9, 0x8D48, 0xB6CA, + 0x8D49, 0xB6CB, 0x8D4A, 0xB6CC, 0x8D4B, 0xB6CD, 0x8D4C, 0xB6CE, 0x8D4D, 0xB6CF, 0x8D4E, 0xB6D0, 0x8D4F, 0xB6D1, 0x8D50, 0xB6D2, + 0x8D51, 0xB6D3, 0x8D52, 0xB6D5, 0x8D53, 0xB6D6, 0x8D54, 0xB6D7, 0x8D55, 0xB6D8, 0x8D56, 0xB6D9, 0x8D57, 0xB6DA, 0x8D58, 0xB6DB, + 0x8D59, 0xB6DC, 0x8D5A, 0xB6DD, 0x8D61, 0xB6DE, 0x8D62, 0xB6DF, 0x8D63, 0xB6E0, 0x8D64, 0xB6E1, 0x8D65, 0xB6E2, 0x8D66, 0xB6E3, + 0x8D67, 0xB6E4, 0x8D68, 0xB6E5, 0x8D69, 0xB6E6, 0x8D6A, 0xB6E7, 0x8D6B, 0xB6E8, 0x8D6C, 0xB6E9, 0x8D6D, 0xB6EA, 0x8D6E, 0xB6EB, + 0x8D6F, 0xB6EC, 0x8D70, 0xB6ED, 0x8D71, 0xB6EE, 0x8D72, 0xB6EF, 0x8D73, 0xB6F1, 0x8D74, 0xB6F2, 0x8D75, 0xB6F3, 0x8D76, 0xB6F5, + 0x8D77, 0xB6F6, 0x8D78, 0xB6F7, 0x8D79, 0xB6F9, 0x8D7A, 0xB6FA, 0x8D81, 0xB6FB, 0x8D82, 0xB6FC, 0x8D83, 0xB6FD, 0x8D84, 0xB6FE, + 0x8D85, 0xB6FF, 0x8D86, 0xB702, 0x8D87, 0xB703, 0x8D88, 0xB704, 0x8D89, 0xB706, 0x8D8A, 0xB707, 0x8D8B, 0xB708, 0x8D8C, 0xB709, + 0x8D8D, 0xB70A, 0x8D8E, 0xB70B, 0x8D8F, 0xB70C, 0x8D90, 0xB70D, 0x8D91, 0xB70E, 0x8D92, 0xB70F, 0x8D93, 0xB710, 0x8D94, 0xB711, + 0x8D95, 0xB712, 0x8D96, 0xB713, 0x8D97, 0xB714, 0x8D98, 0xB715, 0x8D99, 0xB716, 0x8D9A, 0xB717, 0x8D9B, 0xB718, 0x8D9C, 0xB719, + 0x8D9D, 0xB71A, 0x8D9E, 0xB71B, 0x8D9F, 0xB71C, 0x8DA0, 0xB71D, 0x8DA1, 0xB71E, 0x8DA2, 0xB71F, 0x8DA3, 0xB720, 0x8DA4, 0xB721, + 0x8DA5, 0xB722, 0x8DA6, 0xB723, 0x8DA7, 0xB724, 0x8DA8, 0xB725, 0x8DA9, 0xB726, 0x8DAA, 0xB727, 0x8DAB, 0xB72A, 0x8DAC, 0xB72B, + 0x8DAD, 0xB72D, 0x8DAE, 0xB72E, 0x8DAF, 0xB731, 0x8DB0, 0xB732, 0x8DB1, 0xB733, 0x8DB2, 0xB734, 0x8DB3, 0xB735, 0x8DB4, 0xB736, + 0x8DB5, 0xB737, 0x8DB6, 0xB73A, 0x8DB7, 0xB73C, 0x8DB8, 0xB73D, 0x8DB9, 0xB73E, 0x8DBA, 0xB73F, 0x8DBB, 0xB740, 0x8DBC, 0xB741, + 0x8DBD, 0xB742, 0x8DBE, 0xB743, 0x8DBF, 0xB745, 0x8DC0, 0xB746, 0x8DC1, 0xB747, 0x8DC2, 0xB749, 0x8DC3, 0xB74A, 0x8DC4, 0xB74B, + 0x8DC5, 0xB74D, 0x8DC6, 0xB74E, 0x8DC7, 0xB74F, 0x8DC8, 0xB750, 0x8DC9, 0xB751, 0x8DCA, 0xB752, 0x8DCB, 0xB753, 0x8DCC, 0xB756, + 0x8DCD, 0xB757, 0x8DCE, 0xB758, 0x8DCF, 0xB759, 0x8DD0, 0xB75A, 0x8DD1, 0xB75B, 0x8DD2, 0xB75C, 0x8DD3, 0xB75D, 0x8DD4, 0xB75E, + 0x8DD5, 0xB75F, 0x8DD6, 0xB761, 0x8DD7, 0xB762, 0x8DD8, 0xB763, 0x8DD9, 0xB765, 0x8DDA, 0xB766, 0x8DDB, 0xB767, 0x8DDC, 0xB769, + 0x8DDD, 0xB76A, 0x8DDE, 0xB76B, 0x8DDF, 0xB76C, 0x8DE0, 0xB76D, 0x8DE1, 0xB76E, 0x8DE2, 0xB76F, 0x8DE3, 0xB772, 0x8DE4, 0xB774, + 0x8DE5, 0xB776, 0x8DE6, 0xB777, 0x8DE7, 0xB778, 0x8DE8, 0xB779, 0x8DE9, 0xB77A, 0x8DEA, 0xB77B, 0x8DEB, 0xB77E, 0x8DEC, 0xB77F, + 0x8DED, 0xB781, 0x8DEE, 0xB782, 0x8DEF, 0xB783, 0x8DF0, 0xB785, 0x8DF1, 0xB786, 0x8DF2, 0xB787, 0x8DF3, 0xB788, 0x8DF4, 0xB789, + 0x8DF5, 0xB78A, 0x8DF6, 0xB78B, 0x8DF7, 0xB78E, 0x8DF8, 0xB793, 0x8DF9, 0xB794, 0x8DFA, 0xB795, 0x8DFB, 0xB79A, 0x8DFC, 0xB79B, + 0x8DFD, 0xB79D, 0x8DFE, 0xB79E, 0x8E41, 0xB79F, 0x8E42, 0xB7A1, 0x8E43, 0xB7A2, 0x8E44, 0xB7A3, 0x8E45, 0xB7A4, 0x8E46, 0xB7A5, + 0x8E47, 0xB7A6, 0x8E48, 0xB7A7, 0x8E49, 0xB7AA, 0x8E4A, 0xB7AE, 0x8E4B, 0xB7AF, 0x8E4C, 0xB7B0, 0x8E4D, 0xB7B1, 0x8E4E, 0xB7B2, + 0x8E4F, 0xB7B3, 0x8E50, 0xB7B6, 0x8E51, 0xB7B7, 0x8E52, 0xB7B9, 0x8E53, 0xB7BA, 0x8E54, 0xB7BB, 0x8E55, 0xB7BC, 0x8E56, 0xB7BD, + 0x8E57, 0xB7BE, 0x8E58, 0xB7BF, 0x8E59, 0xB7C0, 0x8E5A, 0xB7C1, 0x8E61, 0xB7C2, 0x8E62, 0xB7C3, 0x8E63, 0xB7C4, 0x8E64, 0xB7C5, + 0x8E65, 0xB7C6, 0x8E66, 0xB7C8, 0x8E67, 0xB7CA, 0x8E68, 0xB7CB, 0x8E69, 0xB7CC, 0x8E6A, 0xB7CD, 0x8E6B, 0xB7CE, 0x8E6C, 0xB7CF, + 0x8E6D, 0xB7D0, 0x8E6E, 0xB7D1, 0x8E6F, 0xB7D2, 0x8E70, 0xB7D3, 0x8E71, 0xB7D4, 0x8E72, 0xB7D5, 0x8E73, 0xB7D6, 0x8E74, 0xB7D7, + 0x8E75, 0xB7D8, 0x8E76, 0xB7D9, 0x8E77, 0xB7DA, 0x8E78, 0xB7DB, 0x8E79, 0xB7DC, 0x8E7A, 0xB7DD, 0x8E81, 0xB7DE, 0x8E82, 0xB7DF, + 0x8E83, 0xB7E0, 0x8E84, 0xB7E1, 0x8E85, 0xB7E2, 0x8E86, 0xB7E3, 0x8E87, 0xB7E4, 0x8E88, 0xB7E5, 0x8E89, 0xB7E6, 0x8E8A, 0xB7E7, + 0x8E8B, 0xB7E8, 0x8E8C, 0xB7E9, 0x8E8D, 0xB7EA, 0x8E8E, 0xB7EB, 0x8E8F, 0xB7EE, 0x8E90, 0xB7EF, 0x8E91, 0xB7F1, 0x8E92, 0xB7F2, + 0x8E93, 0xB7F3, 0x8E94, 0xB7F5, 0x8E95, 0xB7F6, 0x8E96, 0xB7F7, 0x8E97, 0xB7F8, 0x8E98, 0xB7F9, 0x8E99, 0xB7FA, 0x8E9A, 0xB7FB, + 0x8E9B, 0xB7FE, 0x8E9C, 0xB802, 0x8E9D, 0xB803, 0x8E9E, 0xB804, 0x8E9F, 0xB805, 0x8EA0, 0xB806, 0x8EA1, 0xB80A, 0x8EA2, 0xB80B, + 0x8EA3, 0xB80D, 0x8EA4, 0xB80E, 0x8EA5, 0xB80F, 0x8EA6, 0xB811, 0x8EA7, 0xB812, 0x8EA8, 0xB813, 0x8EA9, 0xB814, 0x8EAA, 0xB815, + 0x8EAB, 0xB816, 0x8EAC, 0xB817, 0x8EAD, 0xB81A, 0x8EAE, 0xB81C, 0x8EAF, 0xB81E, 0x8EB0, 0xB81F, 0x8EB1, 0xB820, 0x8EB2, 0xB821, + 0x8EB3, 0xB822, 0x8EB4, 0xB823, 0x8EB5, 0xB826, 0x8EB6, 0xB827, 0x8EB7, 0xB829, 0x8EB8, 0xB82A, 0x8EB9, 0xB82B, 0x8EBA, 0xB82D, + 0x8EBB, 0xB82E, 0x8EBC, 0xB82F, 0x8EBD, 0xB830, 0x8EBE, 0xB831, 0x8EBF, 0xB832, 0x8EC0, 0xB833, 0x8EC1, 0xB836, 0x8EC2, 0xB83A, + 0x8EC3, 0xB83B, 0x8EC4, 0xB83C, 0x8EC5, 0xB83D, 0x8EC6, 0xB83E, 0x8EC7, 0xB83F, 0x8EC8, 0xB841, 0x8EC9, 0xB842, 0x8ECA, 0xB843, + 0x8ECB, 0xB845, 0x8ECC, 0xB846, 0x8ECD, 0xB847, 0x8ECE, 0xB848, 0x8ECF, 0xB849, 0x8ED0, 0xB84A, 0x8ED1, 0xB84B, 0x8ED2, 0xB84C, + 0x8ED3, 0xB84D, 0x8ED4, 0xB84E, 0x8ED5, 0xB84F, 0x8ED6, 0xB850, 0x8ED7, 0xB852, 0x8ED8, 0xB854, 0x8ED9, 0xB855, 0x8EDA, 0xB856, + 0x8EDB, 0xB857, 0x8EDC, 0xB858, 0x8EDD, 0xB859, 0x8EDE, 0xB85A, 0x8EDF, 0xB85B, 0x8EE0, 0xB85E, 0x8EE1, 0xB85F, 0x8EE2, 0xB861, + 0x8EE3, 0xB862, 0x8EE4, 0xB863, 0x8EE5, 0xB865, 0x8EE6, 0xB866, 0x8EE7, 0xB867, 0x8EE8, 0xB868, 0x8EE9, 0xB869, 0x8EEA, 0xB86A, + 0x8EEB, 0xB86B, 0x8EEC, 0xB86E, 0x8EED, 0xB870, 0x8EEE, 0xB872, 0x8EEF, 0xB873, 0x8EF0, 0xB874, 0x8EF1, 0xB875, 0x8EF2, 0xB876, + 0x8EF3, 0xB877, 0x8EF4, 0xB879, 0x8EF5, 0xB87A, 0x8EF6, 0xB87B, 0x8EF7, 0xB87D, 0x8EF8, 0xB87E, 0x8EF9, 0xB87F, 0x8EFA, 0xB880, + 0x8EFB, 0xB881, 0x8EFC, 0xB882, 0x8EFD, 0xB883, 0x8EFE, 0xB884, 0x8F41, 0xB885, 0x8F42, 0xB886, 0x8F43, 0xB887, 0x8F44, 0xB888, + 0x8F45, 0xB889, 0x8F46, 0xB88A, 0x8F47, 0xB88B, 0x8F48, 0xB88C, 0x8F49, 0xB88E, 0x8F4A, 0xB88F, 0x8F4B, 0xB890, 0x8F4C, 0xB891, + 0x8F4D, 0xB892, 0x8F4E, 0xB893, 0x8F4F, 0xB894, 0x8F50, 0xB895, 0x8F51, 0xB896, 0x8F52, 0xB897, 0x8F53, 0xB898, 0x8F54, 0xB899, + 0x8F55, 0xB89A, 0x8F56, 0xB89B, 0x8F57, 0xB89C, 0x8F58, 0xB89D, 0x8F59, 0xB89E, 0x8F5A, 0xB89F, 0x8F61, 0xB8A0, 0x8F62, 0xB8A1, + 0x8F63, 0xB8A2, 0x8F64, 0xB8A3, 0x8F65, 0xB8A4, 0x8F66, 0xB8A5, 0x8F67, 0xB8A6, 0x8F68, 0xB8A7, 0x8F69, 0xB8A9, 0x8F6A, 0xB8AA, + 0x8F6B, 0xB8AB, 0x8F6C, 0xB8AC, 0x8F6D, 0xB8AD, 0x8F6E, 0xB8AE, 0x8F6F, 0xB8AF, 0x8F70, 0xB8B1, 0x8F71, 0xB8B2, 0x8F72, 0xB8B3, + 0x8F73, 0xB8B5, 0x8F74, 0xB8B6, 0x8F75, 0xB8B7, 0x8F76, 0xB8B9, 0x8F77, 0xB8BA, 0x8F78, 0xB8BB, 0x8F79, 0xB8BC, 0x8F7A, 0xB8BD, + 0x8F81, 0xB8BE, 0x8F82, 0xB8BF, 0x8F83, 0xB8C2, 0x8F84, 0xB8C4, 0x8F85, 0xB8C6, 0x8F86, 0xB8C7, 0x8F87, 0xB8C8, 0x8F88, 0xB8C9, + 0x8F89, 0xB8CA, 0x8F8A, 0xB8CB, 0x8F8B, 0xB8CD, 0x8F8C, 0xB8CE, 0x8F8D, 0xB8CF, 0x8F8E, 0xB8D1, 0x8F8F, 0xB8D2, 0x8F90, 0xB8D3, + 0x8F91, 0xB8D5, 0x8F92, 0xB8D6, 0x8F93, 0xB8D7, 0x8F94, 0xB8D8, 0x8F95, 0xB8D9, 0x8F96, 0xB8DA, 0x8F97, 0xB8DB, 0x8F98, 0xB8DC, + 0x8F99, 0xB8DE, 0x8F9A, 0xB8E0, 0x8F9B, 0xB8E2, 0x8F9C, 0xB8E3, 0x8F9D, 0xB8E4, 0x8F9E, 0xB8E5, 0x8F9F, 0xB8E6, 0x8FA0, 0xB8E7, + 0x8FA1, 0xB8EA, 0x8FA2, 0xB8EB, 0x8FA3, 0xB8ED, 0x8FA4, 0xB8EE, 0x8FA5, 0xB8EF, 0x8FA6, 0xB8F1, 0x8FA7, 0xB8F2, 0x8FA8, 0xB8F3, + 0x8FA9, 0xB8F4, 0x8FAA, 0xB8F5, 0x8FAB, 0xB8F6, 0x8FAC, 0xB8F7, 0x8FAD, 0xB8FA, 0x8FAE, 0xB8FC, 0x8FAF, 0xB8FE, 0x8FB0, 0xB8FF, + 0x8FB1, 0xB900, 0x8FB2, 0xB901, 0x8FB3, 0xB902, 0x8FB4, 0xB903, 0x8FB5, 0xB905, 0x8FB6, 0xB906, 0x8FB7, 0xB907, 0x8FB8, 0xB908, + 0x8FB9, 0xB909, 0x8FBA, 0xB90A, 0x8FBB, 0xB90B, 0x8FBC, 0xB90C, 0x8FBD, 0xB90D, 0x8FBE, 0xB90E, 0x8FBF, 0xB90F, 0x8FC0, 0xB910, + 0x8FC1, 0xB911, 0x8FC2, 0xB912, 0x8FC3, 0xB913, 0x8FC4, 0xB914, 0x8FC5, 0xB915, 0x8FC6, 0xB916, 0x8FC7, 0xB917, 0x8FC8, 0xB919, + 0x8FC9, 0xB91A, 0x8FCA, 0xB91B, 0x8FCB, 0xB91C, 0x8FCC, 0xB91D, 0x8FCD, 0xB91E, 0x8FCE, 0xB91F, 0x8FCF, 0xB921, 0x8FD0, 0xB922, + 0x8FD1, 0xB923, 0x8FD2, 0xB924, 0x8FD3, 0xB925, 0x8FD4, 0xB926, 0x8FD5, 0xB927, 0x8FD6, 0xB928, 0x8FD7, 0xB929, 0x8FD8, 0xB92A, + 0x8FD9, 0xB92B, 0x8FDA, 0xB92C, 0x8FDB, 0xB92D, 0x8FDC, 0xB92E, 0x8FDD, 0xB92F, 0x8FDE, 0xB930, 0x8FDF, 0xB931, 0x8FE0, 0xB932, + 0x8FE1, 0xB933, 0x8FE2, 0xB934, 0x8FE3, 0xB935, 0x8FE4, 0xB936, 0x8FE5, 0xB937, 0x8FE6, 0xB938, 0x8FE7, 0xB939, 0x8FE8, 0xB93A, + 0x8FE9, 0xB93B, 0x8FEA, 0xB93E, 0x8FEB, 0xB93F, 0x8FEC, 0xB941, 0x8FED, 0xB942, 0x8FEE, 0xB943, 0x8FEF, 0xB945, 0x8FF0, 0xB946, + 0x8FF1, 0xB947, 0x8FF2, 0xB948, 0x8FF3, 0xB949, 0x8FF4, 0xB94A, 0x8FF5, 0xB94B, 0x8FF6, 0xB94D, 0x8FF7, 0xB94E, 0x8FF8, 0xB950, + 0x8FF9, 0xB952, 0x8FFA, 0xB953, 0x8FFB, 0xB954, 0x8FFC, 0xB955, 0x8FFD, 0xB956, 0x8FFE, 0xB957, 0x9041, 0xB95A, 0x9042, 0xB95B, + 0x9043, 0xB95D, 0x9044, 0xB95E, 0x9045, 0xB95F, 0x9046, 0xB961, 0x9047, 0xB962, 0x9048, 0xB963, 0x9049, 0xB964, 0x904A, 0xB965, + 0x904B, 0xB966, 0x904C, 0xB967, 0x904D, 0xB96A, 0x904E, 0xB96C, 0x904F, 0xB96E, 0x9050, 0xB96F, 0x9051, 0xB970, 0x9052, 0xB971, + 0x9053, 0xB972, 0x9054, 0xB973, 0x9055, 0xB976, 0x9056, 0xB977, 0x9057, 0xB979, 0x9058, 0xB97A, 0x9059, 0xB97B, 0x905A, 0xB97D, + 0x9061, 0xB97E, 0x9062, 0xB97F, 0x9063, 0xB980, 0x9064, 0xB981, 0x9065, 0xB982, 0x9066, 0xB983, 0x9067, 0xB986, 0x9068, 0xB988, + 0x9069, 0xB98B, 0x906A, 0xB98C, 0x906B, 0xB98F, 0x906C, 0xB990, 0x906D, 0xB991, 0x906E, 0xB992, 0x906F, 0xB993, 0x9070, 0xB994, + 0x9071, 0xB995, 0x9072, 0xB996, 0x9073, 0xB997, 0x9074, 0xB998, 0x9075, 0xB999, 0x9076, 0xB99A, 0x9077, 0xB99B, 0x9078, 0xB99C, + 0x9079, 0xB99D, 0x907A, 0xB99E, 0x9081, 0xB99F, 0x9082, 0xB9A0, 0x9083, 0xB9A1, 0x9084, 0xB9A2, 0x9085, 0xB9A3, 0x9086, 0xB9A4, + 0x9087, 0xB9A5, 0x9088, 0xB9A6, 0x9089, 0xB9A7, 0x908A, 0xB9A8, 0x908B, 0xB9A9, 0x908C, 0xB9AA, 0x908D, 0xB9AB, 0x908E, 0xB9AE, + 0x908F, 0xB9AF, 0x9090, 0xB9B1, 0x9091, 0xB9B2, 0x9092, 0xB9B3, 0x9093, 0xB9B5, 0x9094, 0xB9B6, 0x9095, 0xB9B7, 0x9096, 0xB9B8, + 0x9097, 0xB9B9, 0x9098, 0xB9BA, 0x9099, 0xB9BB, 0x909A, 0xB9BE, 0x909B, 0xB9C0, 0x909C, 0xB9C2, 0x909D, 0xB9C3, 0x909E, 0xB9C4, + 0x909F, 0xB9C5, 0x90A0, 0xB9C6, 0x90A1, 0xB9C7, 0x90A2, 0xB9CA, 0x90A3, 0xB9CB, 0x90A4, 0xB9CD, 0x90A5, 0xB9D3, 0x90A6, 0xB9D4, + 0x90A7, 0xB9D5, 0x90A8, 0xB9D6, 0x90A9, 0xB9D7, 0x90AA, 0xB9DA, 0x90AB, 0xB9DC, 0x90AC, 0xB9DF, 0x90AD, 0xB9E0, 0x90AE, 0xB9E2, + 0x90AF, 0xB9E6, 0x90B0, 0xB9E7, 0x90B1, 0xB9E9, 0x90B2, 0xB9EA, 0x90B3, 0xB9EB, 0x90B4, 0xB9ED, 0x90B5, 0xB9EE, 0x90B6, 0xB9EF, + 0x90B7, 0xB9F0, 0x90B8, 0xB9F1, 0x90B9, 0xB9F2, 0x90BA, 0xB9F3, 0x90BB, 0xB9F6, 0x90BC, 0xB9FB, 0x90BD, 0xB9FC, 0x90BE, 0xB9FD, + 0x90BF, 0xB9FE, 0x90C0, 0xB9FF, 0x90C1, 0xBA02, 0x90C2, 0xBA03, 0x90C3, 0xBA04, 0x90C4, 0xBA05, 0x90C5, 0xBA06, 0x90C6, 0xBA07, + 0x90C7, 0xBA09, 0x90C8, 0xBA0A, 0x90C9, 0xBA0B, 0x90CA, 0xBA0C, 0x90CB, 0xBA0D, 0x90CC, 0xBA0E, 0x90CD, 0xBA0F, 0x90CE, 0xBA10, + 0x90CF, 0xBA11, 0x90D0, 0xBA12, 0x90D1, 0xBA13, 0x90D2, 0xBA14, 0x90D3, 0xBA16, 0x90D4, 0xBA17, 0x90D5, 0xBA18, 0x90D6, 0xBA19, + 0x90D7, 0xBA1A, 0x90D8, 0xBA1B, 0x90D9, 0xBA1C, 0x90DA, 0xBA1D, 0x90DB, 0xBA1E, 0x90DC, 0xBA1F, 0x90DD, 0xBA20, 0x90DE, 0xBA21, + 0x90DF, 0xBA22, 0x90E0, 0xBA23, 0x90E1, 0xBA24, 0x90E2, 0xBA25, 0x90E3, 0xBA26, 0x90E4, 0xBA27, 0x90E5, 0xBA28, 0x90E6, 0xBA29, + 0x90E7, 0xBA2A, 0x90E8, 0xBA2B, 0x90E9, 0xBA2C, 0x90EA, 0xBA2D, 0x90EB, 0xBA2E, 0x90EC, 0xBA2F, 0x90ED, 0xBA30, 0x90EE, 0xBA31, + 0x90EF, 0xBA32, 0x90F0, 0xBA33, 0x90F1, 0xBA34, 0x90F2, 0xBA35, 0x90F3, 0xBA36, 0x90F4, 0xBA37, 0x90F5, 0xBA3A, 0x90F6, 0xBA3B, + 0x90F7, 0xBA3D, 0x90F8, 0xBA3E, 0x90F9, 0xBA3F, 0x90FA, 0xBA41, 0x90FB, 0xBA43, 0x90FC, 0xBA44, 0x90FD, 0xBA45, 0x90FE, 0xBA46, + 0x9141, 0xBA47, 0x9142, 0xBA4A, 0x9143, 0xBA4C, 0x9144, 0xBA4F, 0x9145, 0xBA50, 0x9146, 0xBA51, 0x9147, 0xBA52, 0x9148, 0xBA56, + 0x9149, 0xBA57, 0x914A, 0xBA59, 0x914B, 0xBA5A, 0x914C, 0xBA5B, 0x914D, 0xBA5D, 0x914E, 0xBA5E, 0x914F, 0xBA5F, 0x9150, 0xBA60, + 0x9151, 0xBA61, 0x9152, 0xBA62, 0x9153, 0xBA63, 0x9154, 0xBA66, 0x9155, 0xBA6A, 0x9156, 0xBA6B, 0x9157, 0xBA6C, 0x9158, 0xBA6D, + 0x9159, 0xBA6E, 0x915A, 0xBA6F, 0x9161, 0xBA72, 0x9162, 0xBA73, 0x9163, 0xBA75, 0x9164, 0xBA76, 0x9165, 0xBA77, 0x9166, 0xBA79, + 0x9167, 0xBA7A, 0x9168, 0xBA7B, 0x9169, 0xBA7C, 0x916A, 0xBA7D, 0x916B, 0xBA7E, 0x916C, 0xBA7F, 0x916D, 0xBA80, 0x916E, 0xBA81, + 0x916F, 0xBA82, 0x9170, 0xBA86, 0x9171, 0xBA88, 0x9172, 0xBA89, 0x9173, 0xBA8A, 0x9174, 0xBA8B, 0x9175, 0xBA8D, 0x9176, 0xBA8E, + 0x9177, 0xBA8F, 0x9178, 0xBA90, 0x9179, 0xBA91, 0x917A, 0xBA92, 0x9181, 0xBA93, 0x9182, 0xBA94, 0x9183, 0xBA95, 0x9184, 0xBA96, + 0x9185, 0xBA97, 0x9186, 0xBA98, 0x9187, 0xBA99, 0x9188, 0xBA9A, 0x9189, 0xBA9B, 0x918A, 0xBA9C, 0x918B, 0xBA9D, 0x918C, 0xBA9E, + 0x918D, 0xBA9F, 0x918E, 0xBAA0, 0x918F, 0xBAA1, 0x9190, 0xBAA2, 0x9191, 0xBAA3, 0x9192, 0xBAA4, 0x9193, 0xBAA5, 0x9194, 0xBAA6, + 0x9195, 0xBAA7, 0x9196, 0xBAAA, 0x9197, 0xBAAD, 0x9198, 0xBAAE, 0x9199, 0xBAAF, 0x919A, 0xBAB1, 0x919B, 0xBAB3, 0x919C, 0xBAB4, + 0x919D, 0xBAB5, 0x919E, 0xBAB6, 0x919F, 0xBAB7, 0x91A0, 0xBABA, 0x91A1, 0xBABC, 0x91A2, 0xBABE, 0x91A3, 0xBABF, 0x91A4, 0xBAC0, + 0x91A5, 0xBAC1, 0x91A6, 0xBAC2, 0x91A7, 0xBAC3, 0x91A8, 0xBAC5, 0x91A9, 0xBAC6, 0x91AA, 0xBAC7, 0x91AB, 0xBAC9, 0x91AC, 0xBACA, + 0x91AD, 0xBACB, 0x91AE, 0xBACC, 0x91AF, 0xBACD, 0x91B0, 0xBACE, 0x91B1, 0xBACF, 0x91B2, 0xBAD0, 0x91B3, 0xBAD1, 0x91B4, 0xBAD2, + 0x91B5, 0xBAD3, 0x91B6, 0xBAD4, 0x91B7, 0xBAD5, 0x91B8, 0xBAD6, 0x91B9, 0xBAD7, 0x91BA, 0xBADA, 0x91BB, 0xBADB, 0x91BC, 0xBADC, + 0x91BD, 0xBADD, 0x91BE, 0xBADE, 0x91BF, 0xBADF, 0x91C0, 0xBAE0, 0x91C1, 0xBAE1, 0x91C2, 0xBAE2, 0x91C3, 0xBAE3, 0x91C4, 0xBAE4, + 0x91C5, 0xBAE5, 0x91C6, 0xBAE6, 0x91C7, 0xBAE7, 0x91C8, 0xBAE8, 0x91C9, 0xBAE9, 0x91CA, 0xBAEA, 0x91CB, 0xBAEB, 0x91CC, 0xBAEC, + 0x91CD, 0xBAED, 0x91CE, 0xBAEE, 0x91CF, 0xBAEF, 0x91D0, 0xBAF0, 0x91D1, 0xBAF1, 0x91D2, 0xBAF2, 0x91D3, 0xBAF3, 0x91D4, 0xBAF4, + 0x91D5, 0xBAF5, 0x91D6, 0xBAF6, 0x91D7, 0xBAF7, 0x91D8, 0xBAF8, 0x91D9, 0xBAF9, 0x91DA, 0xBAFA, 0x91DB, 0xBAFB, 0x91DC, 0xBAFD, + 0x91DD, 0xBAFE, 0x91DE, 0xBAFF, 0x91DF, 0xBB01, 0x91E0, 0xBB02, 0x91E1, 0xBB03, 0x91E2, 0xBB05, 0x91E3, 0xBB06, 0x91E4, 0xBB07, + 0x91E5, 0xBB08, 0x91E6, 0xBB09, 0x91E7, 0xBB0A, 0x91E8, 0xBB0B, 0x91E9, 0xBB0C, 0x91EA, 0xBB0E, 0x91EB, 0xBB10, 0x91EC, 0xBB12, + 0x91ED, 0xBB13, 0x91EE, 0xBB14, 0x91EF, 0xBB15, 0x91F0, 0xBB16, 0x91F1, 0xBB17, 0x91F2, 0xBB19, 0x91F3, 0xBB1A, 0x91F4, 0xBB1B, + 0x91F5, 0xBB1D, 0x91F6, 0xBB1E, 0x91F7, 0xBB1F, 0x91F8, 0xBB21, 0x91F9, 0xBB22, 0x91FA, 0xBB23, 0x91FB, 0xBB24, 0x91FC, 0xBB25, + 0x91FD, 0xBB26, 0x91FE, 0xBB27, 0x9241, 0xBB28, 0x9242, 0xBB2A, 0x9243, 0xBB2C, 0x9244, 0xBB2D, 0x9245, 0xBB2E, 0x9246, 0xBB2F, + 0x9247, 0xBB30, 0x9248, 0xBB31, 0x9249, 0xBB32, 0x924A, 0xBB33, 0x924B, 0xBB37, 0x924C, 0xBB39, 0x924D, 0xBB3A, 0x924E, 0xBB3F, + 0x924F, 0xBB40, 0x9250, 0xBB41, 0x9251, 0xBB42, 0x9252, 0xBB43, 0x9253, 0xBB46, 0x9254, 0xBB48, 0x9255, 0xBB4A, 0x9256, 0xBB4B, + 0x9257, 0xBB4C, 0x9258, 0xBB4E, 0x9259, 0xBB51, 0x925A, 0xBB52, 0x9261, 0xBB53, 0x9262, 0xBB55, 0x9263, 0xBB56, 0x9264, 0xBB57, + 0x9265, 0xBB59, 0x9266, 0xBB5A, 0x9267, 0xBB5B, 0x9268, 0xBB5C, 0x9269, 0xBB5D, 0x926A, 0xBB5E, 0x926B, 0xBB5F, 0x926C, 0xBB60, + 0x926D, 0xBB62, 0x926E, 0xBB64, 0x926F, 0xBB65, 0x9270, 0xBB66, 0x9271, 0xBB67, 0x9272, 0xBB68, 0x9273, 0xBB69, 0x9274, 0xBB6A, + 0x9275, 0xBB6B, 0x9276, 0xBB6D, 0x9277, 0xBB6E, 0x9278, 0xBB6F, 0x9279, 0xBB70, 0x927A, 0xBB71, 0x9281, 0xBB72, 0x9282, 0xBB73, + 0x9283, 0xBB74, 0x9284, 0xBB75, 0x9285, 0xBB76, 0x9286, 0xBB77, 0x9287, 0xBB78, 0x9288, 0xBB79, 0x9289, 0xBB7A, 0x928A, 0xBB7B, + 0x928B, 0xBB7C, 0x928C, 0xBB7D, 0x928D, 0xBB7E, 0x928E, 0xBB7F, 0x928F, 0xBB80, 0x9290, 0xBB81, 0x9291, 0xBB82, 0x9292, 0xBB83, + 0x9293, 0xBB84, 0x9294, 0xBB85, 0x9295, 0xBB86, 0x9296, 0xBB87, 0x9297, 0xBB89, 0x9298, 0xBB8A, 0x9299, 0xBB8B, 0x929A, 0xBB8D, + 0x929B, 0xBB8E, 0x929C, 0xBB8F, 0x929D, 0xBB91, 0x929E, 0xBB92, 0x929F, 0xBB93, 0x92A0, 0xBB94, 0x92A1, 0xBB95, 0x92A2, 0xBB96, + 0x92A3, 0xBB97, 0x92A4, 0xBB98, 0x92A5, 0xBB99, 0x92A6, 0xBB9A, 0x92A7, 0xBB9B, 0x92A8, 0xBB9C, 0x92A9, 0xBB9D, 0x92AA, 0xBB9E, + 0x92AB, 0xBB9F, 0x92AC, 0xBBA0, 0x92AD, 0xBBA1, 0x92AE, 0xBBA2, 0x92AF, 0xBBA3, 0x92B0, 0xBBA5, 0x92B1, 0xBBA6, 0x92B2, 0xBBA7, + 0x92B3, 0xBBA9, 0x92B4, 0xBBAA, 0x92B5, 0xBBAB, 0x92B6, 0xBBAD, 0x92B7, 0xBBAE, 0x92B8, 0xBBAF, 0x92B9, 0xBBB0, 0x92BA, 0xBBB1, + 0x92BB, 0xBBB2, 0x92BC, 0xBBB3, 0x92BD, 0xBBB5, 0x92BE, 0xBBB6, 0x92BF, 0xBBB8, 0x92C0, 0xBBB9, 0x92C1, 0xBBBA, 0x92C2, 0xBBBB, + 0x92C3, 0xBBBC, 0x92C4, 0xBBBD, 0x92C5, 0xBBBE, 0x92C6, 0xBBBF, 0x92C7, 0xBBC1, 0x92C8, 0xBBC2, 0x92C9, 0xBBC3, 0x92CA, 0xBBC5, + 0x92CB, 0xBBC6, 0x92CC, 0xBBC7, 0x92CD, 0xBBC9, 0x92CE, 0xBBCA, 0x92CF, 0xBBCB, 0x92D0, 0xBBCC, 0x92D1, 0xBBCD, 0x92D2, 0xBBCE, + 0x92D3, 0xBBCF, 0x92D4, 0xBBD1, 0x92D5, 0xBBD2, 0x92D6, 0xBBD4, 0x92D7, 0xBBD5, 0x92D8, 0xBBD6, 0x92D9, 0xBBD7, 0x92DA, 0xBBD8, + 0x92DB, 0xBBD9, 0x92DC, 0xBBDA, 0x92DD, 0xBBDB, 0x92DE, 0xBBDC, 0x92DF, 0xBBDD, 0x92E0, 0xBBDE, 0x92E1, 0xBBDF, 0x92E2, 0xBBE0, + 0x92E3, 0xBBE1, 0x92E4, 0xBBE2, 0x92E5, 0xBBE3, 0x92E6, 0xBBE4, 0x92E7, 0xBBE5, 0x92E8, 0xBBE6, 0x92E9, 0xBBE7, 0x92EA, 0xBBE8, + 0x92EB, 0xBBE9, 0x92EC, 0xBBEA, 0x92ED, 0xBBEB, 0x92EE, 0xBBEC, 0x92EF, 0xBBED, 0x92F0, 0xBBEE, 0x92F1, 0xBBEF, 0x92F2, 0xBBF0, + 0x92F3, 0xBBF1, 0x92F4, 0xBBF2, 0x92F5, 0xBBF3, 0x92F6, 0xBBF4, 0x92F7, 0xBBF5, 0x92F8, 0xBBF6, 0x92F9, 0xBBF7, 0x92FA, 0xBBFA, + 0x92FB, 0xBBFB, 0x92FC, 0xBBFD, 0x92FD, 0xBBFE, 0x92FE, 0xBC01, 0x9341, 0xBC03, 0x9342, 0xBC04, 0x9343, 0xBC05, 0x9344, 0xBC06, + 0x9345, 0xBC07, 0x9346, 0xBC0A, 0x9347, 0xBC0E, 0x9348, 0xBC10, 0x9349, 0xBC12, 0x934A, 0xBC13, 0x934B, 0xBC19, 0x934C, 0xBC1A, + 0x934D, 0xBC20, 0x934E, 0xBC21, 0x934F, 0xBC22, 0x9350, 0xBC23, 0x9351, 0xBC26, 0x9352, 0xBC28, 0x9353, 0xBC2A, 0x9354, 0xBC2B, + 0x9355, 0xBC2C, 0x9356, 0xBC2E, 0x9357, 0xBC2F, 0x9358, 0xBC32, 0x9359, 0xBC33, 0x935A, 0xBC35, 0x9361, 0xBC36, 0x9362, 0xBC37, + 0x9363, 0xBC39, 0x9364, 0xBC3A, 0x9365, 0xBC3B, 0x9366, 0xBC3C, 0x9367, 0xBC3D, 0x9368, 0xBC3E, 0x9369, 0xBC3F, 0x936A, 0xBC42, + 0x936B, 0xBC46, 0x936C, 0xBC47, 0x936D, 0xBC48, 0x936E, 0xBC4A, 0x936F, 0xBC4B, 0x9370, 0xBC4E, 0x9371, 0xBC4F, 0x9372, 0xBC51, + 0x9373, 0xBC52, 0x9374, 0xBC53, 0x9375, 0xBC54, 0x9376, 0xBC55, 0x9377, 0xBC56, 0x9378, 0xBC57, 0x9379, 0xBC58, 0x937A, 0xBC59, + 0x9381, 0xBC5A, 0x9382, 0xBC5B, 0x9383, 0xBC5C, 0x9384, 0xBC5E, 0x9385, 0xBC5F, 0x9386, 0xBC60, 0x9387, 0xBC61, 0x9388, 0xBC62, + 0x9389, 0xBC63, 0x938A, 0xBC64, 0x938B, 0xBC65, 0x938C, 0xBC66, 0x938D, 0xBC67, 0x938E, 0xBC68, 0x938F, 0xBC69, 0x9390, 0xBC6A, + 0x9391, 0xBC6B, 0x9392, 0xBC6C, 0x9393, 0xBC6D, 0x9394, 0xBC6E, 0x9395, 0xBC6F, 0x9396, 0xBC70, 0x9397, 0xBC71, 0x9398, 0xBC72, + 0x9399, 0xBC73, 0x939A, 0xBC74, 0x939B, 0xBC75, 0x939C, 0xBC76, 0x939D, 0xBC77, 0x939E, 0xBC78, 0x939F, 0xBC79, 0x93A0, 0xBC7A, + 0x93A1, 0xBC7B, 0x93A2, 0xBC7C, 0x93A3, 0xBC7D, 0x93A4, 0xBC7E, 0x93A5, 0xBC7F, 0x93A6, 0xBC80, 0x93A7, 0xBC81, 0x93A8, 0xBC82, + 0x93A9, 0xBC83, 0x93AA, 0xBC86, 0x93AB, 0xBC87, 0x93AC, 0xBC89, 0x93AD, 0xBC8A, 0x93AE, 0xBC8D, 0x93AF, 0xBC8F, 0x93B0, 0xBC90, + 0x93B1, 0xBC91, 0x93B2, 0xBC92, 0x93B3, 0xBC93, 0x93B4, 0xBC96, 0x93B5, 0xBC98, 0x93B6, 0xBC9B, 0x93B7, 0xBC9C, 0x93B8, 0xBC9D, + 0x93B9, 0xBC9E, 0x93BA, 0xBC9F, 0x93BB, 0xBCA2, 0x93BC, 0xBCA3, 0x93BD, 0xBCA5, 0x93BE, 0xBCA6, 0x93BF, 0xBCA9, 0x93C0, 0xBCAA, + 0x93C1, 0xBCAB, 0x93C2, 0xBCAC, 0x93C3, 0xBCAD, 0x93C4, 0xBCAE, 0x93C5, 0xBCAF, 0x93C6, 0xBCB2, 0x93C7, 0xBCB6, 0x93C8, 0xBCB7, + 0x93C9, 0xBCB8, 0x93CA, 0xBCB9, 0x93CB, 0xBCBA, 0x93CC, 0xBCBB, 0x93CD, 0xBCBE, 0x93CE, 0xBCBF, 0x93CF, 0xBCC1, 0x93D0, 0xBCC2, + 0x93D1, 0xBCC3, 0x93D2, 0xBCC5, 0x93D3, 0xBCC6, 0x93D4, 0xBCC7, 0x93D5, 0xBCC8, 0x93D6, 0xBCC9, 0x93D7, 0xBCCA, 0x93D8, 0xBCCB, + 0x93D9, 0xBCCC, 0x93DA, 0xBCCE, 0x93DB, 0xBCD2, 0x93DC, 0xBCD3, 0x93DD, 0xBCD4, 0x93DE, 0xBCD6, 0x93DF, 0xBCD7, 0x93E0, 0xBCD9, + 0x93E1, 0xBCDA, 0x93E2, 0xBCDB, 0x93E3, 0xBCDD, 0x93E4, 0xBCDE, 0x93E5, 0xBCDF, 0x93E6, 0xBCE0, 0x93E7, 0xBCE1, 0x93E8, 0xBCE2, + 0x93E9, 0xBCE3, 0x93EA, 0xBCE4, 0x93EB, 0xBCE5, 0x93EC, 0xBCE6, 0x93ED, 0xBCE7, 0x93EE, 0xBCE8, 0x93EF, 0xBCE9, 0x93F0, 0xBCEA, + 0x93F1, 0xBCEB, 0x93F2, 0xBCEC, 0x93F3, 0xBCED, 0x93F4, 0xBCEE, 0x93F5, 0xBCEF, 0x93F6, 0xBCF0, 0x93F7, 0xBCF1, 0x93F8, 0xBCF2, + 0x93F9, 0xBCF3, 0x93FA, 0xBCF7, 0x93FB, 0xBCF9, 0x93FC, 0xBCFA, 0x93FD, 0xBCFB, 0x93FE, 0xBCFD, 0x9441, 0xBCFE, 0x9442, 0xBCFF, + 0x9443, 0xBD00, 0x9444, 0xBD01, 0x9445, 0xBD02, 0x9446, 0xBD03, 0x9447, 0xBD06, 0x9448, 0xBD08, 0x9449, 0xBD0A, 0x944A, 0xBD0B, + 0x944B, 0xBD0C, 0x944C, 0xBD0D, 0x944D, 0xBD0E, 0x944E, 0xBD0F, 0x944F, 0xBD11, 0x9450, 0xBD12, 0x9451, 0xBD13, 0x9452, 0xBD15, + 0x9453, 0xBD16, 0x9454, 0xBD17, 0x9455, 0xBD18, 0x9456, 0xBD19, 0x9457, 0xBD1A, 0x9458, 0xBD1B, 0x9459, 0xBD1C, 0x945A, 0xBD1D, + 0x9461, 0xBD1E, 0x9462, 0xBD1F, 0x9463, 0xBD20, 0x9464, 0xBD21, 0x9465, 0xBD22, 0x9466, 0xBD23, 0x9467, 0xBD25, 0x9468, 0xBD26, + 0x9469, 0xBD27, 0x946A, 0xBD28, 0x946B, 0xBD29, 0x946C, 0xBD2A, 0x946D, 0xBD2B, 0x946E, 0xBD2D, 0x946F, 0xBD2E, 0x9470, 0xBD2F, + 0x9471, 0xBD30, 0x9472, 0xBD31, 0x9473, 0xBD32, 0x9474, 0xBD33, 0x9475, 0xBD34, 0x9476, 0xBD35, 0x9477, 0xBD36, 0x9478, 0xBD37, + 0x9479, 0xBD38, 0x947A, 0xBD39, 0x9481, 0xBD3A, 0x9482, 0xBD3B, 0x9483, 0xBD3C, 0x9484, 0xBD3D, 0x9485, 0xBD3E, 0x9486, 0xBD3F, + 0x9487, 0xBD41, 0x9488, 0xBD42, 0x9489, 0xBD43, 0x948A, 0xBD44, 0x948B, 0xBD45, 0x948C, 0xBD46, 0x948D, 0xBD47, 0x948E, 0xBD4A, + 0x948F, 0xBD4B, 0x9490, 0xBD4D, 0x9491, 0xBD4E, 0x9492, 0xBD4F, 0x9493, 0xBD51, 0x9494, 0xBD52, 0x9495, 0xBD53, 0x9496, 0xBD54, + 0x9497, 0xBD55, 0x9498, 0xBD56, 0x9499, 0xBD57, 0x949A, 0xBD5A, 0x949B, 0xBD5B, 0x949C, 0xBD5C, 0x949D, 0xBD5D, 0x949E, 0xBD5E, + 0x949F, 0xBD5F, 0x94A0, 0xBD60, 0x94A1, 0xBD61, 0x94A2, 0xBD62, 0x94A3, 0xBD63, 0x94A4, 0xBD65, 0x94A5, 0xBD66, 0x94A6, 0xBD67, + 0x94A7, 0xBD69, 0x94A8, 0xBD6A, 0x94A9, 0xBD6B, 0x94AA, 0xBD6C, 0x94AB, 0xBD6D, 0x94AC, 0xBD6E, 0x94AD, 0xBD6F, 0x94AE, 0xBD70, + 0x94AF, 0xBD71, 0x94B0, 0xBD72, 0x94B1, 0xBD73, 0x94B2, 0xBD74, 0x94B3, 0xBD75, 0x94B4, 0xBD76, 0x94B5, 0xBD77, 0x94B6, 0xBD78, + 0x94B7, 0xBD79, 0x94B8, 0xBD7A, 0x94B9, 0xBD7B, 0x94BA, 0xBD7C, 0x94BB, 0xBD7D, 0x94BC, 0xBD7E, 0x94BD, 0xBD7F, 0x94BE, 0xBD82, + 0x94BF, 0xBD83, 0x94C0, 0xBD85, 0x94C1, 0xBD86, 0x94C2, 0xBD8B, 0x94C3, 0xBD8C, 0x94C4, 0xBD8D, 0x94C5, 0xBD8E, 0x94C6, 0xBD8F, + 0x94C7, 0xBD92, 0x94C8, 0xBD94, 0x94C9, 0xBD96, 0x94CA, 0xBD97, 0x94CB, 0xBD98, 0x94CC, 0xBD9B, 0x94CD, 0xBD9D, 0x94CE, 0xBD9E, + 0x94CF, 0xBD9F, 0x94D0, 0xBDA0, 0x94D1, 0xBDA1, 0x94D2, 0xBDA2, 0x94D3, 0xBDA3, 0x94D4, 0xBDA5, 0x94D5, 0xBDA6, 0x94D6, 0xBDA7, + 0x94D7, 0xBDA8, 0x94D8, 0xBDA9, 0x94D9, 0xBDAA, 0x94DA, 0xBDAB, 0x94DB, 0xBDAC, 0x94DC, 0xBDAD, 0x94DD, 0xBDAE, 0x94DE, 0xBDAF, + 0x94DF, 0xBDB1, 0x94E0, 0xBDB2, 0x94E1, 0xBDB3, 0x94E2, 0xBDB4, 0x94E3, 0xBDB5, 0x94E4, 0xBDB6, 0x94E5, 0xBDB7, 0x94E6, 0xBDB9, + 0x94E7, 0xBDBA, 0x94E8, 0xBDBB, 0x94E9, 0xBDBC, 0x94EA, 0xBDBD, 0x94EB, 0xBDBE, 0x94EC, 0xBDBF, 0x94ED, 0xBDC0, 0x94EE, 0xBDC1, + 0x94EF, 0xBDC2, 0x94F0, 0xBDC3, 0x94F1, 0xBDC4, 0x94F2, 0xBDC5, 0x94F3, 0xBDC6, 0x94F4, 0xBDC7, 0x94F5, 0xBDC8, 0x94F6, 0xBDC9, + 0x94F7, 0xBDCA, 0x94F8, 0xBDCB, 0x94F9, 0xBDCC, 0x94FA, 0xBDCD, 0x94FB, 0xBDCE, 0x94FC, 0xBDCF, 0x94FD, 0xBDD0, 0x94FE, 0xBDD1, + 0x9541, 0xBDD2, 0x9542, 0xBDD3, 0x9543, 0xBDD6, 0x9544, 0xBDD7, 0x9545, 0xBDD9, 0x9546, 0xBDDA, 0x9547, 0xBDDB, 0x9548, 0xBDDD, + 0x9549, 0xBDDE, 0x954A, 0xBDDF, 0x954B, 0xBDE0, 0x954C, 0xBDE1, 0x954D, 0xBDE2, 0x954E, 0xBDE3, 0x954F, 0xBDE4, 0x9550, 0xBDE5, + 0x9551, 0xBDE6, 0x9552, 0xBDE7, 0x9553, 0xBDE8, 0x9554, 0xBDEA, 0x9555, 0xBDEB, 0x9556, 0xBDEC, 0x9557, 0xBDED, 0x9558, 0xBDEE, + 0x9559, 0xBDEF, 0x955A, 0xBDF1, 0x9561, 0xBDF2, 0x9562, 0xBDF3, 0x9563, 0xBDF5, 0x9564, 0xBDF6, 0x9565, 0xBDF7, 0x9566, 0xBDF9, + 0x9567, 0xBDFA, 0x9568, 0xBDFB, 0x9569, 0xBDFC, 0x956A, 0xBDFD, 0x956B, 0xBDFE, 0x956C, 0xBDFF, 0x956D, 0xBE01, 0x956E, 0xBE02, + 0x956F, 0xBE04, 0x9570, 0xBE06, 0x9571, 0xBE07, 0x9572, 0xBE08, 0x9573, 0xBE09, 0x9574, 0xBE0A, 0x9575, 0xBE0B, 0x9576, 0xBE0E, + 0x9577, 0xBE0F, 0x9578, 0xBE11, 0x9579, 0xBE12, 0x957A, 0xBE13, 0x9581, 0xBE15, 0x9582, 0xBE16, 0x9583, 0xBE17, 0x9584, 0xBE18, + 0x9585, 0xBE19, 0x9586, 0xBE1A, 0x9587, 0xBE1B, 0x9588, 0xBE1E, 0x9589, 0xBE20, 0x958A, 0xBE21, 0x958B, 0xBE22, 0x958C, 0xBE23, + 0x958D, 0xBE24, 0x958E, 0xBE25, 0x958F, 0xBE26, 0x9590, 0xBE27, 0x9591, 0xBE28, 0x9592, 0xBE29, 0x9593, 0xBE2A, 0x9594, 0xBE2B, + 0x9595, 0xBE2C, 0x9596, 0xBE2D, 0x9597, 0xBE2E, 0x9598, 0xBE2F, 0x9599, 0xBE30, 0x959A, 0xBE31, 0x959B, 0xBE32, 0x959C, 0xBE33, + 0x959D, 0xBE34, 0x959E, 0xBE35, 0x959F, 0xBE36, 0x95A0, 0xBE37, 0x95A1, 0xBE38, 0x95A2, 0xBE39, 0x95A3, 0xBE3A, 0x95A4, 0xBE3B, + 0x95A5, 0xBE3C, 0x95A6, 0xBE3D, 0x95A7, 0xBE3E, 0x95A8, 0xBE3F, 0x95A9, 0xBE40, 0x95AA, 0xBE41, 0x95AB, 0xBE42, 0x95AC, 0xBE43, + 0x95AD, 0xBE46, 0x95AE, 0xBE47, 0x95AF, 0xBE49, 0x95B0, 0xBE4A, 0x95B1, 0xBE4B, 0x95B2, 0xBE4D, 0x95B3, 0xBE4F, 0x95B4, 0xBE50, + 0x95B5, 0xBE51, 0x95B6, 0xBE52, 0x95B7, 0xBE53, 0x95B8, 0xBE56, 0x95B9, 0xBE58, 0x95BA, 0xBE5C, 0x95BB, 0xBE5D, 0x95BC, 0xBE5E, + 0x95BD, 0xBE5F, 0x95BE, 0xBE62, 0x95BF, 0xBE63, 0x95C0, 0xBE65, 0x95C1, 0xBE66, 0x95C2, 0xBE67, 0x95C3, 0xBE69, 0x95C4, 0xBE6B, + 0x95C5, 0xBE6C, 0x95C6, 0xBE6D, 0x95C7, 0xBE6E, 0x95C8, 0xBE6F, 0x95C9, 0xBE72, 0x95CA, 0xBE76, 0x95CB, 0xBE77, 0x95CC, 0xBE78, + 0x95CD, 0xBE79, 0x95CE, 0xBE7A, 0x95CF, 0xBE7E, 0x95D0, 0xBE7F, 0x95D1, 0xBE81, 0x95D2, 0xBE82, 0x95D3, 0xBE83, 0x95D4, 0xBE85, + 0x95D5, 0xBE86, 0x95D6, 0xBE87, 0x95D7, 0xBE88, 0x95D8, 0xBE89, 0x95D9, 0xBE8A, 0x95DA, 0xBE8B, 0x95DB, 0xBE8E, 0x95DC, 0xBE92, + 0x95DD, 0xBE93, 0x95DE, 0xBE94, 0x95DF, 0xBE95, 0x95E0, 0xBE96, 0x95E1, 0xBE97, 0x95E2, 0xBE9A, 0x95E3, 0xBE9B, 0x95E4, 0xBE9C, + 0x95E5, 0xBE9D, 0x95E6, 0xBE9E, 0x95E7, 0xBE9F, 0x95E8, 0xBEA0, 0x95E9, 0xBEA1, 0x95EA, 0xBEA2, 0x95EB, 0xBEA3, 0x95EC, 0xBEA4, + 0x95ED, 0xBEA5, 0x95EE, 0xBEA6, 0x95EF, 0xBEA7, 0x95F0, 0xBEA9, 0x95F1, 0xBEAA, 0x95F2, 0xBEAB, 0x95F3, 0xBEAC, 0x95F4, 0xBEAD, + 0x95F5, 0xBEAE, 0x95F6, 0xBEAF, 0x95F7, 0xBEB0, 0x95F8, 0xBEB1, 0x95F9, 0xBEB2, 0x95FA, 0xBEB3, 0x95FB, 0xBEB4, 0x95FC, 0xBEB5, + 0x95FD, 0xBEB6, 0x95FE, 0xBEB7, 0x9641, 0xBEB8, 0x9642, 0xBEB9, 0x9643, 0xBEBA, 0x9644, 0xBEBB, 0x9645, 0xBEBC, 0x9646, 0xBEBD, + 0x9647, 0xBEBE, 0x9648, 0xBEBF, 0x9649, 0xBEC0, 0x964A, 0xBEC1, 0x964B, 0xBEC2, 0x964C, 0xBEC3, 0x964D, 0xBEC4, 0x964E, 0xBEC5, + 0x964F, 0xBEC6, 0x9650, 0xBEC7, 0x9651, 0xBEC8, 0x9652, 0xBEC9, 0x9653, 0xBECA, 0x9654, 0xBECB, 0x9655, 0xBECC, 0x9656, 0xBECD, + 0x9657, 0xBECE, 0x9658, 0xBECF, 0x9659, 0xBED2, 0x965A, 0xBED3, 0x9661, 0xBED5, 0x9662, 0xBED6, 0x9663, 0xBED9, 0x9664, 0xBEDA, + 0x9665, 0xBEDB, 0x9666, 0xBEDC, 0x9667, 0xBEDD, 0x9668, 0xBEDE, 0x9669, 0xBEDF, 0x966A, 0xBEE1, 0x966B, 0xBEE2, 0x966C, 0xBEE6, + 0x966D, 0xBEE7, 0x966E, 0xBEE8, 0x966F, 0xBEE9, 0x9670, 0xBEEA, 0x9671, 0xBEEB, 0x9672, 0xBEED, 0x9673, 0xBEEE, 0x9674, 0xBEEF, + 0x9675, 0xBEF0, 0x9676, 0xBEF1, 0x9677, 0xBEF2, 0x9678, 0xBEF3, 0x9679, 0xBEF4, 0x967A, 0xBEF5, 0x9681, 0xBEF6, 0x9682, 0xBEF7, + 0x9683, 0xBEF8, 0x9684, 0xBEF9, 0x9685, 0xBEFA, 0x9686, 0xBEFB, 0x9687, 0xBEFC, 0x9688, 0xBEFD, 0x9689, 0xBEFE, 0x968A, 0xBEFF, + 0x968B, 0xBF00, 0x968C, 0xBF02, 0x968D, 0xBF03, 0x968E, 0xBF04, 0x968F, 0xBF05, 0x9690, 0xBF06, 0x9691, 0xBF07, 0x9692, 0xBF0A, + 0x9693, 0xBF0B, 0x9694, 0xBF0C, 0x9695, 0xBF0D, 0x9696, 0xBF0E, 0x9697, 0xBF0F, 0x9698, 0xBF10, 0x9699, 0xBF11, 0x969A, 0xBF12, + 0x969B, 0xBF13, 0x969C, 0xBF14, 0x969D, 0xBF15, 0x969E, 0xBF16, 0x969F, 0xBF17, 0x96A0, 0xBF1A, 0x96A1, 0xBF1E, 0x96A2, 0xBF1F, + 0x96A3, 0xBF20, 0x96A4, 0xBF21, 0x96A5, 0xBF22, 0x96A6, 0xBF23, 0x96A7, 0xBF24, 0x96A8, 0xBF25, 0x96A9, 0xBF26, 0x96AA, 0xBF27, + 0x96AB, 0xBF28, 0x96AC, 0xBF29, 0x96AD, 0xBF2A, 0x96AE, 0xBF2B, 0x96AF, 0xBF2C, 0x96B0, 0xBF2D, 0x96B1, 0xBF2E, 0x96B2, 0xBF2F, + 0x96B3, 0xBF30, 0x96B4, 0xBF31, 0x96B5, 0xBF32, 0x96B6, 0xBF33, 0x96B7, 0xBF34, 0x96B8, 0xBF35, 0x96B9, 0xBF36, 0x96BA, 0xBF37, + 0x96BB, 0xBF38, 0x96BC, 0xBF39, 0x96BD, 0xBF3A, 0x96BE, 0xBF3B, 0x96BF, 0xBF3C, 0x96C0, 0xBF3D, 0x96C1, 0xBF3E, 0x96C2, 0xBF3F, + 0x96C3, 0xBF42, 0x96C4, 0xBF43, 0x96C5, 0xBF45, 0x96C6, 0xBF46, 0x96C7, 0xBF47, 0x96C8, 0xBF49, 0x96C9, 0xBF4A, 0x96CA, 0xBF4B, + 0x96CB, 0xBF4C, 0x96CC, 0xBF4D, 0x96CD, 0xBF4E, 0x96CE, 0xBF4F, 0x96CF, 0xBF52, 0x96D0, 0xBF53, 0x96D1, 0xBF54, 0x96D2, 0xBF56, + 0x96D3, 0xBF57, 0x96D4, 0xBF58, 0x96D5, 0xBF59, 0x96D6, 0xBF5A, 0x96D7, 0xBF5B, 0x96D8, 0xBF5C, 0x96D9, 0xBF5D, 0x96DA, 0xBF5E, + 0x96DB, 0xBF5F, 0x96DC, 0xBF60, 0x96DD, 0xBF61, 0x96DE, 0xBF62, 0x96DF, 0xBF63, 0x96E0, 0xBF64, 0x96E1, 0xBF65, 0x96E2, 0xBF66, + 0x96E3, 0xBF67, 0x96E4, 0xBF68, 0x96E5, 0xBF69, 0x96E6, 0xBF6A, 0x96E7, 0xBF6B, 0x96E8, 0xBF6C, 0x96E9, 0xBF6D, 0x96EA, 0xBF6E, + 0x96EB, 0xBF6F, 0x96EC, 0xBF70, 0x96ED, 0xBF71, 0x96EE, 0xBF72, 0x96EF, 0xBF73, 0x96F0, 0xBF74, 0x96F1, 0xBF75, 0x96F2, 0xBF76, + 0x96F3, 0xBF77, 0x96F4, 0xBF78, 0x96F5, 0xBF79, 0x96F6, 0xBF7A, 0x96F7, 0xBF7B, 0x96F8, 0xBF7C, 0x96F9, 0xBF7D, 0x96FA, 0xBF7E, + 0x96FB, 0xBF7F, 0x96FC, 0xBF80, 0x96FD, 0xBF81, 0x96FE, 0xBF82, 0x9741, 0xBF83, 0x9742, 0xBF84, 0x9743, 0xBF85, 0x9744, 0xBF86, + 0x9745, 0xBF87, 0x9746, 0xBF88, 0x9747, 0xBF89, 0x9748, 0xBF8A, 0x9749, 0xBF8B, 0x974A, 0xBF8C, 0x974B, 0xBF8D, 0x974C, 0xBF8E, + 0x974D, 0xBF8F, 0x974E, 0xBF90, 0x974F, 0xBF91, 0x9750, 0xBF92, 0x9751, 0xBF93, 0x9752, 0xBF95, 0x9753, 0xBF96, 0x9754, 0xBF97, + 0x9755, 0xBF98, 0x9756, 0xBF99, 0x9757, 0xBF9A, 0x9758, 0xBF9B, 0x9759, 0xBF9C, 0x975A, 0xBF9D, 0x9761, 0xBF9E, 0x9762, 0xBF9F, + 0x9763, 0xBFA0, 0x9764, 0xBFA1, 0x9765, 0xBFA2, 0x9766, 0xBFA3, 0x9767, 0xBFA4, 0x9768, 0xBFA5, 0x9769, 0xBFA6, 0x976A, 0xBFA7, + 0x976B, 0xBFA8, 0x976C, 0xBFA9, 0x976D, 0xBFAA, 0x976E, 0xBFAB, 0x976F, 0xBFAC, 0x9770, 0xBFAD, 0x9771, 0xBFAE, 0x9772, 0xBFAF, + 0x9773, 0xBFB1, 0x9774, 0xBFB2, 0x9775, 0xBFB3, 0x9776, 0xBFB4, 0x9777, 0xBFB5, 0x9778, 0xBFB6, 0x9779, 0xBFB7, 0x977A, 0xBFB8, + 0x9781, 0xBFB9, 0x9782, 0xBFBA, 0x9783, 0xBFBB, 0x9784, 0xBFBC, 0x9785, 0xBFBD, 0x9786, 0xBFBE, 0x9787, 0xBFBF, 0x9788, 0xBFC0, + 0x9789, 0xBFC1, 0x978A, 0xBFC2, 0x978B, 0xBFC3, 0x978C, 0xBFC4, 0x978D, 0xBFC6, 0x978E, 0xBFC7, 0x978F, 0xBFC8, 0x9790, 0xBFC9, + 0x9791, 0xBFCA, 0x9792, 0xBFCB, 0x9793, 0xBFCE, 0x9794, 0xBFCF, 0x9795, 0xBFD1, 0x9796, 0xBFD2, 0x9797, 0xBFD3, 0x9798, 0xBFD5, + 0x9799, 0xBFD6, 0x979A, 0xBFD7, 0x979B, 0xBFD8, 0x979C, 0xBFD9, 0x979D, 0xBFDA, 0x979E, 0xBFDB, 0x979F, 0xBFDD, 0x97A0, 0xBFDE, + 0x97A1, 0xBFE0, 0x97A2, 0xBFE2, 0x97A3, 0xBFE3, 0x97A4, 0xBFE4, 0x97A5, 0xBFE5, 0x97A6, 0xBFE6, 0x97A7, 0xBFE7, 0x97A8, 0xBFE8, + 0x97A9, 0xBFE9, 0x97AA, 0xBFEA, 0x97AB, 0xBFEB, 0x97AC, 0xBFEC, 0x97AD, 0xBFED, 0x97AE, 0xBFEE, 0x97AF, 0xBFEF, 0x97B0, 0xBFF0, + 0x97B1, 0xBFF1, 0x97B2, 0xBFF2, 0x97B3, 0xBFF3, 0x97B4, 0xBFF4, 0x97B5, 0xBFF5, 0x97B6, 0xBFF6, 0x97B7, 0xBFF7, 0x97B8, 0xBFF8, + 0x97B9, 0xBFF9, 0x97BA, 0xBFFA, 0x97BB, 0xBFFB, 0x97BC, 0xBFFC, 0x97BD, 0xBFFD, 0x97BE, 0xBFFE, 0x97BF, 0xBFFF, 0x97C0, 0xC000, + 0x97C1, 0xC001, 0x97C2, 0xC002, 0x97C3, 0xC003, 0x97C4, 0xC004, 0x97C5, 0xC005, 0x97C6, 0xC006, 0x97C7, 0xC007, 0x97C8, 0xC008, + 0x97C9, 0xC009, 0x97CA, 0xC00A, 0x97CB, 0xC00B, 0x97CC, 0xC00C, 0x97CD, 0xC00D, 0x97CE, 0xC00E, 0x97CF, 0xC00F, 0x97D0, 0xC010, + 0x97D1, 0xC011, 0x97D2, 0xC012, 0x97D3, 0xC013, 0x97D4, 0xC014, 0x97D5, 0xC015, 0x97D6, 0xC016, 0x97D7, 0xC017, 0x97D8, 0xC018, + 0x97D9, 0xC019, 0x97DA, 0xC01A, 0x97DB, 0xC01B, 0x97DC, 0xC01C, 0x97DD, 0xC01D, 0x97DE, 0xC01E, 0x97DF, 0xC01F, 0x97E0, 0xC020, + 0x97E1, 0xC021, 0x97E2, 0xC022, 0x97E3, 0xC023, 0x97E4, 0xC024, 0x97E5, 0xC025, 0x97E6, 0xC026, 0x97E7, 0xC027, 0x97E8, 0xC028, + 0x97E9, 0xC029, 0x97EA, 0xC02A, 0x97EB, 0xC02B, 0x97EC, 0xC02C, 0x97ED, 0xC02D, 0x97EE, 0xC02E, 0x97EF, 0xC02F, 0x97F0, 0xC030, + 0x97F1, 0xC031, 0x97F2, 0xC032, 0x97F3, 0xC033, 0x97F4, 0xC034, 0x97F5, 0xC035, 0x97F6, 0xC036, 0x97F7, 0xC037, 0x97F8, 0xC038, + 0x97F9, 0xC039, 0x97FA, 0xC03A, 0x97FB, 0xC03B, 0x97FC, 0xC03D, 0x97FD, 0xC03E, 0x97FE, 0xC03F, 0x9841, 0xC040, 0x9842, 0xC041, + 0x9843, 0xC042, 0x9844, 0xC043, 0x9845, 0xC044, 0x9846, 0xC045, 0x9847, 0xC046, 0x9848, 0xC047, 0x9849, 0xC048, 0x984A, 0xC049, + 0x984B, 0xC04A, 0x984C, 0xC04B, 0x984D, 0xC04C, 0x984E, 0xC04D, 0x984F, 0xC04E, 0x9850, 0xC04F, 0x9851, 0xC050, 0x9852, 0xC052, + 0x9853, 0xC053, 0x9854, 0xC054, 0x9855, 0xC055, 0x9856, 0xC056, 0x9857, 0xC057, 0x9858, 0xC059, 0x9859, 0xC05A, 0x985A, 0xC05B, + 0x9861, 0xC05D, 0x9862, 0xC05E, 0x9863, 0xC05F, 0x9864, 0xC061, 0x9865, 0xC062, 0x9866, 0xC063, 0x9867, 0xC064, 0x9868, 0xC065, + 0x9869, 0xC066, 0x986A, 0xC067, 0x986B, 0xC06A, 0x986C, 0xC06B, 0x986D, 0xC06C, 0x986E, 0xC06D, 0x986F, 0xC06E, 0x9870, 0xC06F, + 0x9871, 0xC070, 0x9872, 0xC071, 0x9873, 0xC072, 0x9874, 0xC073, 0x9875, 0xC074, 0x9876, 0xC075, 0x9877, 0xC076, 0x9878, 0xC077, + 0x9879, 0xC078, 0x987A, 0xC079, 0x9881, 0xC07A, 0x9882, 0xC07B, 0x9883, 0xC07C, 0x9884, 0xC07D, 0x9885, 0xC07E, 0x9886, 0xC07F, + 0x9887, 0xC080, 0x9888, 0xC081, 0x9889, 0xC082, 0x988A, 0xC083, 0x988B, 0xC084, 0x988C, 0xC085, 0x988D, 0xC086, 0x988E, 0xC087, + 0x988F, 0xC088, 0x9890, 0xC089, 0x9891, 0xC08A, 0x9892, 0xC08B, 0x9893, 0xC08C, 0x9894, 0xC08D, 0x9895, 0xC08E, 0x9896, 0xC08F, + 0x9897, 0xC092, 0x9898, 0xC093, 0x9899, 0xC095, 0x989A, 0xC096, 0x989B, 0xC097, 0x989C, 0xC099, 0x989D, 0xC09A, 0x989E, 0xC09B, + 0x989F, 0xC09C, 0x98A0, 0xC09D, 0x98A1, 0xC09E, 0x98A2, 0xC09F, 0x98A3, 0xC0A2, 0x98A4, 0xC0A4, 0x98A5, 0xC0A6, 0x98A6, 0xC0A7, + 0x98A7, 0xC0A8, 0x98A8, 0xC0A9, 0x98A9, 0xC0AA, 0x98AA, 0xC0AB, 0x98AB, 0xC0AE, 0x98AC, 0xC0B1, 0x98AD, 0xC0B2, 0x98AE, 0xC0B7, + 0x98AF, 0xC0B8, 0x98B0, 0xC0B9, 0x98B1, 0xC0BA, 0x98B2, 0xC0BB, 0x98B3, 0xC0BE, 0x98B4, 0xC0C2, 0x98B5, 0xC0C3, 0x98B6, 0xC0C4, + 0x98B7, 0xC0C6, 0x98B8, 0xC0C7, 0x98B9, 0xC0CA, 0x98BA, 0xC0CB, 0x98BB, 0xC0CD, 0x98BC, 0xC0CE, 0x98BD, 0xC0CF, 0x98BE, 0xC0D1, + 0x98BF, 0xC0D2, 0x98C0, 0xC0D3, 0x98C1, 0xC0D4, 0x98C2, 0xC0D5, 0x98C3, 0xC0D6, 0x98C4, 0xC0D7, 0x98C5, 0xC0DA, 0x98C6, 0xC0DE, + 0x98C7, 0xC0DF, 0x98C8, 0xC0E0, 0x98C9, 0xC0E1, 0x98CA, 0xC0E2, 0x98CB, 0xC0E3, 0x98CC, 0xC0E6, 0x98CD, 0xC0E7, 0x98CE, 0xC0E9, + 0x98CF, 0xC0EA, 0x98D0, 0xC0EB, 0x98D1, 0xC0ED, 0x98D2, 0xC0EE, 0x98D3, 0xC0EF, 0x98D4, 0xC0F0, 0x98D5, 0xC0F1, 0x98D6, 0xC0F2, + 0x98D7, 0xC0F3, 0x98D8, 0xC0F6, 0x98D9, 0xC0F8, 0x98DA, 0xC0FA, 0x98DB, 0xC0FB, 0x98DC, 0xC0FC, 0x98DD, 0xC0FD, 0x98DE, 0xC0FE, + 0x98DF, 0xC0FF, 0x98E0, 0xC101, 0x98E1, 0xC102, 0x98E2, 0xC103, 0x98E3, 0xC105, 0x98E4, 0xC106, 0x98E5, 0xC107, 0x98E6, 0xC109, + 0x98E7, 0xC10A, 0x98E8, 0xC10B, 0x98E9, 0xC10C, 0x98EA, 0xC10D, 0x98EB, 0xC10E, 0x98EC, 0xC10F, 0x98ED, 0xC111, 0x98EE, 0xC112, + 0x98EF, 0xC113, 0x98F0, 0xC114, 0x98F1, 0xC116, 0x98F2, 0xC117, 0x98F3, 0xC118, 0x98F4, 0xC119, 0x98F5, 0xC11A, 0x98F6, 0xC11B, + 0x98F7, 0xC121, 0x98F8, 0xC122, 0x98F9, 0xC125, 0x98FA, 0xC128, 0x98FB, 0xC129, 0x98FC, 0xC12A, 0x98FD, 0xC12B, 0x98FE, 0xC12E, + 0x9941, 0xC132, 0x9942, 0xC133, 0x9943, 0xC134, 0x9944, 0xC135, 0x9945, 0xC137, 0x9946, 0xC13A, 0x9947, 0xC13B, 0x9948, 0xC13D, + 0x9949, 0xC13E, 0x994A, 0xC13F, 0x994B, 0xC141, 0x994C, 0xC142, 0x994D, 0xC143, 0x994E, 0xC144, 0x994F, 0xC145, 0x9950, 0xC146, + 0x9951, 0xC147, 0x9952, 0xC14A, 0x9953, 0xC14E, 0x9954, 0xC14F, 0x9955, 0xC150, 0x9956, 0xC151, 0x9957, 0xC152, 0x9958, 0xC153, + 0x9959, 0xC156, 0x995A, 0xC157, 0x9961, 0xC159, 0x9962, 0xC15A, 0x9963, 0xC15B, 0x9964, 0xC15D, 0x9965, 0xC15E, 0x9966, 0xC15F, + 0x9967, 0xC160, 0x9968, 0xC161, 0x9969, 0xC162, 0x996A, 0xC163, 0x996B, 0xC166, 0x996C, 0xC16A, 0x996D, 0xC16B, 0x996E, 0xC16C, + 0x996F, 0xC16D, 0x9970, 0xC16E, 0x9971, 0xC16F, 0x9972, 0xC171, 0x9973, 0xC172, 0x9974, 0xC173, 0x9975, 0xC175, 0x9976, 0xC176, + 0x9977, 0xC177, 0x9978, 0xC179, 0x9979, 0xC17A, 0x997A, 0xC17B, 0x9981, 0xC17C, 0x9982, 0xC17D, 0x9983, 0xC17E, 0x9984, 0xC17F, + 0x9985, 0xC180, 0x9986, 0xC181, 0x9987, 0xC182, 0x9988, 0xC183, 0x9989, 0xC184, 0x998A, 0xC186, 0x998B, 0xC187, 0x998C, 0xC188, + 0x998D, 0xC189, 0x998E, 0xC18A, 0x998F, 0xC18B, 0x9990, 0xC18F, 0x9991, 0xC191, 0x9992, 0xC192, 0x9993, 0xC193, 0x9994, 0xC195, + 0x9995, 0xC197, 0x9996, 0xC198, 0x9997, 0xC199, 0x9998, 0xC19A, 0x9999, 0xC19B, 0x999A, 0xC19E, 0x999B, 0xC1A0, 0x999C, 0xC1A2, + 0x999D, 0xC1A3, 0x999E, 0xC1A4, 0x999F, 0xC1A6, 0x99A0, 0xC1A7, 0x99A1, 0xC1AA, 0x99A2, 0xC1AB, 0x99A3, 0xC1AD, 0x99A4, 0xC1AE, + 0x99A5, 0xC1AF, 0x99A6, 0xC1B1, 0x99A7, 0xC1B2, 0x99A8, 0xC1B3, 0x99A9, 0xC1B4, 0x99AA, 0xC1B5, 0x99AB, 0xC1B6, 0x99AC, 0xC1B7, + 0x99AD, 0xC1B8, 0x99AE, 0xC1B9, 0x99AF, 0xC1BA, 0x99B0, 0xC1BB, 0x99B1, 0xC1BC, 0x99B2, 0xC1BE, 0x99B3, 0xC1BF, 0x99B4, 0xC1C0, + 0x99B5, 0xC1C1, 0x99B6, 0xC1C2, 0x99B7, 0xC1C3, 0x99B8, 0xC1C5, 0x99B9, 0xC1C6, 0x99BA, 0xC1C7, 0x99BB, 0xC1C9, 0x99BC, 0xC1CA, + 0x99BD, 0xC1CB, 0x99BE, 0xC1CD, 0x99BF, 0xC1CE, 0x99C0, 0xC1CF, 0x99C1, 0xC1D0, 0x99C2, 0xC1D1, 0x99C3, 0xC1D2, 0x99C4, 0xC1D3, + 0x99C5, 0xC1D5, 0x99C6, 0xC1D6, 0x99C7, 0xC1D9, 0x99C8, 0xC1DA, 0x99C9, 0xC1DB, 0x99CA, 0xC1DC, 0x99CB, 0xC1DD, 0x99CC, 0xC1DE, + 0x99CD, 0xC1DF, 0x99CE, 0xC1E1, 0x99CF, 0xC1E2, 0x99D0, 0xC1E3, 0x99D1, 0xC1E5, 0x99D2, 0xC1E6, 0x99D3, 0xC1E7, 0x99D4, 0xC1E9, + 0x99D5, 0xC1EA, 0x99D6, 0xC1EB, 0x99D7, 0xC1EC, 0x99D8, 0xC1ED, 0x99D9, 0xC1EE, 0x99DA, 0xC1EF, 0x99DB, 0xC1F2, 0x99DC, 0xC1F4, + 0x99DD, 0xC1F5, 0x99DE, 0xC1F6, 0x99DF, 0xC1F7, 0x99E0, 0xC1F8, 0x99E1, 0xC1F9, 0x99E2, 0xC1FA, 0x99E3, 0xC1FB, 0x99E4, 0xC1FE, + 0x99E5, 0xC1FF, 0x99E6, 0xC201, 0x99E7, 0xC202, 0x99E8, 0xC203, 0x99E9, 0xC205, 0x99EA, 0xC206, 0x99EB, 0xC207, 0x99EC, 0xC208, + 0x99ED, 0xC209, 0x99EE, 0xC20A, 0x99EF, 0xC20B, 0x99F0, 0xC20E, 0x99F1, 0xC210, 0x99F2, 0xC212, 0x99F3, 0xC213, 0x99F4, 0xC214, + 0x99F5, 0xC215, 0x99F6, 0xC216, 0x99F7, 0xC217, 0x99F8, 0xC21A, 0x99F9, 0xC21B, 0x99FA, 0xC21D, 0x99FB, 0xC21E, 0x99FC, 0xC221, + 0x99FD, 0xC222, 0x99FE, 0xC223, 0x9A41, 0xC224, 0x9A42, 0xC225, 0x9A43, 0xC226, 0x9A44, 0xC227, 0x9A45, 0xC22A, 0x9A46, 0xC22C, + 0x9A47, 0xC22E, 0x9A48, 0xC230, 0x9A49, 0xC233, 0x9A4A, 0xC235, 0x9A4B, 0xC236, 0x9A4C, 0xC237, 0x9A4D, 0xC238, 0x9A4E, 0xC239, + 0x9A4F, 0xC23A, 0x9A50, 0xC23B, 0x9A51, 0xC23C, 0x9A52, 0xC23D, 0x9A53, 0xC23E, 0x9A54, 0xC23F, 0x9A55, 0xC240, 0x9A56, 0xC241, + 0x9A57, 0xC242, 0x9A58, 0xC243, 0x9A59, 0xC244, 0x9A5A, 0xC245, 0x9A61, 0xC246, 0x9A62, 0xC247, 0x9A63, 0xC249, 0x9A64, 0xC24A, + 0x9A65, 0xC24B, 0x9A66, 0xC24C, 0x9A67, 0xC24D, 0x9A68, 0xC24E, 0x9A69, 0xC24F, 0x9A6A, 0xC252, 0x9A6B, 0xC253, 0x9A6C, 0xC255, + 0x9A6D, 0xC256, 0x9A6E, 0xC257, 0x9A6F, 0xC259, 0x9A70, 0xC25A, 0x9A71, 0xC25B, 0x9A72, 0xC25C, 0x9A73, 0xC25D, 0x9A74, 0xC25E, + 0x9A75, 0xC25F, 0x9A76, 0xC261, 0x9A77, 0xC262, 0x9A78, 0xC263, 0x9A79, 0xC264, 0x9A7A, 0xC266, 0x9A81, 0xC267, 0x9A82, 0xC268, + 0x9A83, 0xC269, 0x9A84, 0xC26A, 0x9A85, 0xC26B, 0x9A86, 0xC26E, 0x9A87, 0xC26F, 0x9A88, 0xC271, 0x9A89, 0xC272, 0x9A8A, 0xC273, + 0x9A8B, 0xC275, 0x9A8C, 0xC276, 0x9A8D, 0xC277, 0x9A8E, 0xC278, 0x9A8F, 0xC279, 0x9A90, 0xC27A, 0x9A91, 0xC27B, 0x9A92, 0xC27E, + 0x9A93, 0xC280, 0x9A94, 0xC282, 0x9A95, 0xC283, 0x9A96, 0xC284, 0x9A97, 0xC285, 0x9A98, 0xC286, 0x9A99, 0xC287, 0x9A9A, 0xC28A, + 0x9A9B, 0xC28B, 0x9A9C, 0xC28C, 0x9A9D, 0xC28D, 0x9A9E, 0xC28E, 0x9A9F, 0xC28F, 0x9AA0, 0xC291, 0x9AA1, 0xC292, 0x9AA2, 0xC293, + 0x9AA3, 0xC294, 0x9AA4, 0xC295, 0x9AA5, 0xC296, 0x9AA6, 0xC297, 0x9AA7, 0xC299, 0x9AA8, 0xC29A, 0x9AA9, 0xC29C, 0x9AAA, 0xC29E, + 0x9AAB, 0xC29F, 0x9AAC, 0xC2A0, 0x9AAD, 0xC2A1, 0x9AAE, 0xC2A2, 0x9AAF, 0xC2A3, 0x9AB0, 0xC2A6, 0x9AB1, 0xC2A7, 0x9AB2, 0xC2A9, + 0x9AB3, 0xC2AA, 0x9AB4, 0xC2AB, 0x9AB5, 0xC2AE, 0x9AB6, 0xC2AF, 0x9AB7, 0xC2B0, 0x9AB8, 0xC2B1, 0x9AB9, 0xC2B2, 0x9ABA, 0xC2B3, + 0x9ABB, 0xC2B6, 0x9ABC, 0xC2B8, 0x9ABD, 0xC2BA, 0x9ABE, 0xC2BB, 0x9ABF, 0xC2BC, 0x9AC0, 0xC2BD, 0x9AC1, 0xC2BE, 0x9AC2, 0xC2BF, + 0x9AC3, 0xC2C0, 0x9AC4, 0xC2C1, 0x9AC5, 0xC2C2, 0x9AC6, 0xC2C3, 0x9AC7, 0xC2C4, 0x9AC8, 0xC2C5, 0x9AC9, 0xC2C6, 0x9ACA, 0xC2C7, + 0x9ACB, 0xC2C8, 0x9ACC, 0xC2C9, 0x9ACD, 0xC2CA, 0x9ACE, 0xC2CB, 0x9ACF, 0xC2CC, 0x9AD0, 0xC2CD, 0x9AD1, 0xC2CE, 0x9AD2, 0xC2CF, + 0x9AD3, 0xC2D0, 0x9AD4, 0xC2D1, 0x9AD5, 0xC2D2, 0x9AD6, 0xC2D3, 0x9AD7, 0xC2D4, 0x9AD8, 0xC2D5, 0x9AD9, 0xC2D6, 0x9ADA, 0xC2D7, + 0x9ADB, 0xC2D8, 0x9ADC, 0xC2D9, 0x9ADD, 0xC2DA, 0x9ADE, 0xC2DB, 0x9ADF, 0xC2DE, 0x9AE0, 0xC2DF, 0x9AE1, 0xC2E1, 0x9AE2, 0xC2E2, + 0x9AE3, 0xC2E5, 0x9AE4, 0xC2E6, 0x9AE5, 0xC2E7, 0x9AE6, 0xC2E8, 0x9AE7, 0xC2E9, 0x9AE8, 0xC2EA, 0x9AE9, 0xC2EE, 0x9AEA, 0xC2F0, + 0x9AEB, 0xC2F2, 0x9AEC, 0xC2F3, 0x9AED, 0xC2F4, 0x9AEE, 0xC2F5, 0x9AEF, 0xC2F7, 0x9AF0, 0xC2FA, 0x9AF1, 0xC2FD, 0x9AF2, 0xC2FE, + 0x9AF3, 0xC2FF, 0x9AF4, 0xC301, 0x9AF5, 0xC302, 0x9AF6, 0xC303, 0x9AF7, 0xC304, 0x9AF8, 0xC305, 0x9AF9, 0xC306, 0x9AFA, 0xC307, + 0x9AFB, 0xC30A, 0x9AFC, 0xC30B, 0x9AFD, 0xC30E, 0x9AFE, 0xC30F, 0x9B41, 0xC310, 0x9B42, 0xC311, 0x9B43, 0xC312, 0x9B44, 0xC316, + 0x9B45, 0xC317, 0x9B46, 0xC319, 0x9B47, 0xC31A, 0x9B48, 0xC31B, 0x9B49, 0xC31D, 0x9B4A, 0xC31E, 0x9B4B, 0xC31F, 0x9B4C, 0xC320, + 0x9B4D, 0xC321, 0x9B4E, 0xC322, 0x9B4F, 0xC323, 0x9B50, 0xC326, 0x9B51, 0xC327, 0x9B52, 0xC32A, 0x9B53, 0xC32B, 0x9B54, 0xC32C, + 0x9B55, 0xC32D, 0x9B56, 0xC32E, 0x9B57, 0xC32F, 0x9B58, 0xC330, 0x9B59, 0xC331, 0x9B5A, 0xC332, 0x9B61, 0xC333, 0x9B62, 0xC334, + 0x9B63, 0xC335, 0x9B64, 0xC336, 0x9B65, 0xC337, 0x9B66, 0xC338, 0x9B67, 0xC339, 0x9B68, 0xC33A, 0x9B69, 0xC33B, 0x9B6A, 0xC33C, + 0x9B6B, 0xC33D, 0x9B6C, 0xC33E, 0x9B6D, 0xC33F, 0x9B6E, 0xC340, 0x9B6F, 0xC341, 0x9B70, 0xC342, 0x9B71, 0xC343, 0x9B72, 0xC344, + 0x9B73, 0xC346, 0x9B74, 0xC347, 0x9B75, 0xC348, 0x9B76, 0xC349, 0x9B77, 0xC34A, 0x9B78, 0xC34B, 0x9B79, 0xC34C, 0x9B7A, 0xC34D, + 0x9B81, 0xC34E, 0x9B82, 0xC34F, 0x9B83, 0xC350, 0x9B84, 0xC351, 0x9B85, 0xC352, 0x9B86, 0xC353, 0x9B87, 0xC354, 0x9B88, 0xC355, + 0x9B89, 0xC356, 0x9B8A, 0xC357, 0x9B8B, 0xC358, 0x9B8C, 0xC359, 0x9B8D, 0xC35A, 0x9B8E, 0xC35B, 0x9B8F, 0xC35C, 0x9B90, 0xC35D, + 0x9B91, 0xC35E, 0x9B92, 0xC35F, 0x9B93, 0xC360, 0x9B94, 0xC361, 0x9B95, 0xC362, 0x9B96, 0xC363, 0x9B97, 0xC364, 0x9B98, 0xC365, + 0x9B99, 0xC366, 0x9B9A, 0xC367, 0x9B9B, 0xC36A, 0x9B9C, 0xC36B, 0x9B9D, 0xC36D, 0x9B9E, 0xC36E, 0x9B9F, 0xC36F, 0x9BA0, 0xC371, + 0x9BA1, 0xC373, 0x9BA2, 0xC374, 0x9BA3, 0xC375, 0x9BA4, 0xC376, 0x9BA5, 0xC377, 0x9BA6, 0xC37A, 0x9BA7, 0xC37B, 0x9BA8, 0xC37E, + 0x9BA9, 0xC37F, 0x9BAA, 0xC380, 0x9BAB, 0xC381, 0x9BAC, 0xC382, 0x9BAD, 0xC383, 0x9BAE, 0xC385, 0x9BAF, 0xC386, 0x9BB0, 0xC387, + 0x9BB1, 0xC389, 0x9BB2, 0xC38A, 0x9BB3, 0xC38B, 0x9BB4, 0xC38D, 0x9BB5, 0xC38E, 0x9BB6, 0xC38F, 0x9BB7, 0xC390, 0x9BB8, 0xC391, + 0x9BB9, 0xC392, 0x9BBA, 0xC393, 0x9BBB, 0xC394, 0x9BBC, 0xC395, 0x9BBD, 0xC396, 0x9BBE, 0xC397, 0x9BBF, 0xC398, 0x9BC0, 0xC399, + 0x9BC1, 0xC39A, 0x9BC2, 0xC39B, 0x9BC3, 0xC39C, 0x9BC4, 0xC39D, 0x9BC5, 0xC39E, 0x9BC6, 0xC39F, 0x9BC7, 0xC3A0, 0x9BC8, 0xC3A1, + 0x9BC9, 0xC3A2, 0x9BCA, 0xC3A3, 0x9BCB, 0xC3A4, 0x9BCC, 0xC3A5, 0x9BCD, 0xC3A6, 0x9BCE, 0xC3A7, 0x9BCF, 0xC3A8, 0x9BD0, 0xC3A9, + 0x9BD1, 0xC3AA, 0x9BD2, 0xC3AB, 0x9BD3, 0xC3AC, 0x9BD4, 0xC3AD, 0x9BD5, 0xC3AE, 0x9BD6, 0xC3AF, 0x9BD7, 0xC3B0, 0x9BD8, 0xC3B1, + 0x9BD9, 0xC3B2, 0x9BDA, 0xC3B3, 0x9BDB, 0xC3B4, 0x9BDC, 0xC3B5, 0x9BDD, 0xC3B6, 0x9BDE, 0xC3B7, 0x9BDF, 0xC3B8, 0x9BE0, 0xC3B9, + 0x9BE1, 0xC3BA, 0x9BE2, 0xC3BB, 0x9BE3, 0xC3BC, 0x9BE4, 0xC3BD, 0x9BE5, 0xC3BE, 0x9BE6, 0xC3BF, 0x9BE7, 0xC3C1, 0x9BE8, 0xC3C2, + 0x9BE9, 0xC3C3, 0x9BEA, 0xC3C4, 0x9BEB, 0xC3C5, 0x9BEC, 0xC3C6, 0x9BED, 0xC3C7, 0x9BEE, 0xC3C8, 0x9BEF, 0xC3C9, 0x9BF0, 0xC3CA, + 0x9BF1, 0xC3CB, 0x9BF2, 0xC3CC, 0x9BF3, 0xC3CD, 0x9BF4, 0xC3CE, 0x9BF5, 0xC3CF, 0x9BF6, 0xC3D0, 0x9BF7, 0xC3D1, 0x9BF8, 0xC3D2, + 0x9BF9, 0xC3D3, 0x9BFA, 0xC3D4, 0x9BFB, 0xC3D5, 0x9BFC, 0xC3D6, 0x9BFD, 0xC3D7, 0x9BFE, 0xC3DA, 0x9C41, 0xC3DB, 0x9C42, 0xC3DD, + 0x9C43, 0xC3DE, 0x9C44, 0xC3E1, 0x9C45, 0xC3E3, 0x9C46, 0xC3E4, 0x9C47, 0xC3E5, 0x9C48, 0xC3E6, 0x9C49, 0xC3E7, 0x9C4A, 0xC3EA, + 0x9C4B, 0xC3EB, 0x9C4C, 0xC3EC, 0x9C4D, 0xC3EE, 0x9C4E, 0xC3EF, 0x9C4F, 0xC3F0, 0x9C50, 0xC3F1, 0x9C51, 0xC3F2, 0x9C52, 0xC3F3, + 0x9C53, 0xC3F6, 0x9C54, 0xC3F7, 0x9C55, 0xC3F9, 0x9C56, 0xC3FA, 0x9C57, 0xC3FB, 0x9C58, 0xC3FC, 0x9C59, 0xC3FD, 0x9C5A, 0xC3FE, + 0x9C61, 0xC3FF, 0x9C62, 0xC400, 0x9C63, 0xC401, 0x9C64, 0xC402, 0x9C65, 0xC403, 0x9C66, 0xC404, 0x9C67, 0xC405, 0x9C68, 0xC406, + 0x9C69, 0xC407, 0x9C6A, 0xC409, 0x9C6B, 0xC40A, 0x9C6C, 0xC40B, 0x9C6D, 0xC40C, 0x9C6E, 0xC40D, 0x9C6F, 0xC40E, 0x9C70, 0xC40F, + 0x9C71, 0xC411, 0x9C72, 0xC412, 0x9C73, 0xC413, 0x9C74, 0xC414, 0x9C75, 0xC415, 0x9C76, 0xC416, 0x9C77, 0xC417, 0x9C78, 0xC418, + 0x9C79, 0xC419, 0x9C7A, 0xC41A, 0x9C81, 0xC41B, 0x9C82, 0xC41C, 0x9C83, 0xC41D, 0x9C84, 0xC41E, 0x9C85, 0xC41F, 0x9C86, 0xC420, + 0x9C87, 0xC421, 0x9C88, 0xC422, 0x9C89, 0xC423, 0x9C8A, 0xC425, 0x9C8B, 0xC426, 0x9C8C, 0xC427, 0x9C8D, 0xC428, 0x9C8E, 0xC429, + 0x9C8F, 0xC42A, 0x9C90, 0xC42B, 0x9C91, 0xC42D, 0x9C92, 0xC42E, 0x9C93, 0xC42F, 0x9C94, 0xC431, 0x9C95, 0xC432, 0x9C96, 0xC433, + 0x9C97, 0xC435, 0x9C98, 0xC436, 0x9C99, 0xC437, 0x9C9A, 0xC438, 0x9C9B, 0xC439, 0x9C9C, 0xC43A, 0x9C9D, 0xC43B, 0x9C9E, 0xC43E, + 0x9C9F, 0xC43F, 0x9CA0, 0xC440, 0x9CA1, 0xC441, 0x9CA2, 0xC442, 0x9CA3, 0xC443, 0x9CA4, 0xC444, 0x9CA5, 0xC445, 0x9CA6, 0xC446, + 0x9CA7, 0xC447, 0x9CA8, 0xC449, 0x9CA9, 0xC44A, 0x9CAA, 0xC44B, 0x9CAB, 0xC44C, 0x9CAC, 0xC44D, 0x9CAD, 0xC44E, 0x9CAE, 0xC44F, + 0x9CAF, 0xC450, 0x9CB0, 0xC451, 0x9CB1, 0xC452, 0x9CB2, 0xC453, 0x9CB3, 0xC454, 0x9CB4, 0xC455, 0x9CB5, 0xC456, 0x9CB6, 0xC457, + 0x9CB7, 0xC458, 0x9CB8, 0xC459, 0x9CB9, 0xC45A, 0x9CBA, 0xC45B, 0x9CBB, 0xC45C, 0x9CBC, 0xC45D, 0x9CBD, 0xC45E, 0x9CBE, 0xC45F, + 0x9CBF, 0xC460, 0x9CC0, 0xC461, 0x9CC1, 0xC462, 0x9CC2, 0xC463, 0x9CC3, 0xC466, 0x9CC4, 0xC467, 0x9CC5, 0xC469, 0x9CC6, 0xC46A, + 0x9CC7, 0xC46B, 0x9CC8, 0xC46D, 0x9CC9, 0xC46E, 0x9CCA, 0xC46F, 0x9CCB, 0xC470, 0x9CCC, 0xC471, 0x9CCD, 0xC472, 0x9CCE, 0xC473, + 0x9CCF, 0xC476, 0x9CD0, 0xC477, 0x9CD1, 0xC478, 0x9CD2, 0xC47A, 0x9CD3, 0xC47B, 0x9CD4, 0xC47C, 0x9CD5, 0xC47D, 0x9CD6, 0xC47E, + 0x9CD7, 0xC47F, 0x9CD8, 0xC481, 0x9CD9, 0xC482, 0x9CDA, 0xC483, 0x9CDB, 0xC484, 0x9CDC, 0xC485, 0x9CDD, 0xC486, 0x9CDE, 0xC487, + 0x9CDF, 0xC488, 0x9CE0, 0xC489, 0x9CE1, 0xC48A, 0x9CE2, 0xC48B, 0x9CE3, 0xC48C, 0x9CE4, 0xC48D, 0x9CE5, 0xC48E, 0x9CE6, 0xC48F, + 0x9CE7, 0xC490, 0x9CE8, 0xC491, 0x9CE9, 0xC492, 0x9CEA, 0xC493, 0x9CEB, 0xC495, 0x9CEC, 0xC496, 0x9CED, 0xC497, 0x9CEE, 0xC498, + 0x9CEF, 0xC499, 0x9CF0, 0xC49A, 0x9CF1, 0xC49B, 0x9CF2, 0xC49D, 0x9CF3, 0xC49E, 0x9CF4, 0xC49F, 0x9CF5, 0xC4A0, 0x9CF6, 0xC4A1, + 0x9CF7, 0xC4A2, 0x9CF8, 0xC4A3, 0x9CF9, 0xC4A4, 0x9CFA, 0xC4A5, 0x9CFB, 0xC4A6, 0x9CFC, 0xC4A7, 0x9CFD, 0xC4A8, 0x9CFE, 0xC4A9, + 0x9D41, 0xC4AA, 0x9D42, 0xC4AB, 0x9D43, 0xC4AC, 0x9D44, 0xC4AD, 0x9D45, 0xC4AE, 0x9D46, 0xC4AF, 0x9D47, 0xC4B0, 0x9D48, 0xC4B1, + 0x9D49, 0xC4B2, 0x9D4A, 0xC4B3, 0x9D4B, 0xC4B4, 0x9D4C, 0xC4B5, 0x9D4D, 0xC4B6, 0x9D4E, 0xC4B7, 0x9D4F, 0xC4B9, 0x9D50, 0xC4BA, + 0x9D51, 0xC4BB, 0x9D52, 0xC4BD, 0x9D53, 0xC4BE, 0x9D54, 0xC4BF, 0x9D55, 0xC4C0, 0x9D56, 0xC4C1, 0x9D57, 0xC4C2, 0x9D58, 0xC4C3, + 0x9D59, 0xC4C4, 0x9D5A, 0xC4C5, 0x9D61, 0xC4C6, 0x9D62, 0xC4C7, 0x9D63, 0xC4C8, 0x9D64, 0xC4C9, 0x9D65, 0xC4CA, 0x9D66, 0xC4CB, + 0x9D67, 0xC4CC, 0x9D68, 0xC4CD, 0x9D69, 0xC4CE, 0x9D6A, 0xC4CF, 0x9D6B, 0xC4D0, 0x9D6C, 0xC4D1, 0x9D6D, 0xC4D2, 0x9D6E, 0xC4D3, + 0x9D6F, 0xC4D4, 0x9D70, 0xC4D5, 0x9D71, 0xC4D6, 0x9D72, 0xC4D7, 0x9D73, 0xC4D8, 0x9D74, 0xC4D9, 0x9D75, 0xC4DA, 0x9D76, 0xC4DB, + 0x9D77, 0xC4DC, 0x9D78, 0xC4DD, 0x9D79, 0xC4DE, 0x9D7A, 0xC4DF, 0x9D81, 0xC4E0, 0x9D82, 0xC4E1, 0x9D83, 0xC4E2, 0x9D84, 0xC4E3, + 0x9D85, 0xC4E4, 0x9D86, 0xC4E5, 0x9D87, 0xC4E6, 0x9D88, 0xC4E7, 0x9D89, 0xC4E8, 0x9D8A, 0xC4EA, 0x9D8B, 0xC4EB, 0x9D8C, 0xC4EC, + 0x9D8D, 0xC4ED, 0x9D8E, 0xC4EE, 0x9D8F, 0xC4EF, 0x9D90, 0xC4F2, 0x9D91, 0xC4F3, 0x9D92, 0xC4F5, 0x9D93, 0xC4F6, 0x9D94, 0xC4F7, + 0x9D95, 0xC4F9, 0x9D96, 0xC4FB, 0x9D97, 0xC4FC, 0x9D98, 0xC4FD, 0x9D99, 0xC4FE, 0x9D9A, 0xC502, 0x9D9B, 0xC503, 0x9D9C, 0xC504, + 0x9D9D, 0xC505, 0x9D9E, 0xC506, 0x9D9F, 0xC507, 0x9DA0, 0xC508, 0x9DA1, 0xC509, 0x9DA2, 0xC50A, 0x9DA3, 0xC50B, 0x9DA4, 0xC50D, + 0x9DA5, 0xC50E, 0x9DA6, 0xC50F, 0x9DA7, 0xC511, 0x9DA8, 0xC512, 0x9DA9, 0xC513, 0x9DAA, 0xC515, 0x9DAB, 0xC516, 0x9DAC, 0xC517, + 0x9DAD, 0xC518, 0x9DAE, 0xC519, 0x9DAF, 0xC51A, 0x9DB0, 0xC51B, 0x9DB1, 0xC51D, 0x9DB2, 0xC51E, 0x9DB3, 0xC51F, 0x9DB4, 0xC520, + 0x9DB5, 0xC521, 0x9DB6, 0xC522, 0x9DB7, 0xC523, 0x9DB8, 0xC524, 0x9DB9, 0xC525, 0x9DBA, 0xC526, 0x9DBB, 0xC527, 0x9DBC, 0xC52A, + 0x9DBD, 0xC52B, 0x9DBE, 0xC52D, 0x9DBF, 0xC52E, 0x9DC0, 0xC52F, 0x9DC1, 0xC531, 0x9DC2, 0xC532, 0x9DC3, 0xC533, 0x9DC4, 0xC534, + 0x9DC5, 0xC535, 0x9DC6, 0xC536, 0x9DC7, 0xC537, 0x9DC8, 0xC53A, 0x9DC9, 0xC53C, 0x9DCA, 0xC53E, 0x9DCB, 0xC53F, 0x9DCC, 0xC540, + 0x9DCD, 0xC541, 0x9DCE, 0xC542, 0x9DCF, 0xC543, 0x9DD0, 0xC546, 0x9DD1, 0xC547, 0x9DD2, 0xC54B, 0x9DD3, 0xC54F, 0x9DD4, 0xC550, + 0x9DD5, 0xC551, 0x9DD6, 0xC552, 0x9DD7, 0xC556, 0x9DD8, 0xC55A, 0x9DD9, 0xC55B, 0x9DDA, 0xC55C, 0x9DDB, 0xC55F, 0x9DDC, 0xC562, + 0x9DDD, 0xC563, 0x9DDE, 0xC565, 0x9DDF, 0xC566, 0x9DE0, 0xC567, 0x9DE1, 0xC569, 0x9DE2, 0xC56A, 0x9DE3, 0xC56B, 0x9DE4, 0xC56C, + 0x9DE5, 0xC56D, 0x9DE6, 0xC56E, 0x9DE7, 0xC56F, 0x9DE8, 0xC572, 0x9DE9, 0xC576, 0x9DEA, 0xC577, 0x9DEB, 0xC578, 0x9DEC, 0xC579, + 0x9DED, 0xC57A, 0x9DEE, 0xC57B, 0x9DEF, 0xC57E, 0x9DF0, 0xC57F, 0x9DF1, 0xC581, 0x9DF2, 0xC582, 0x9DF3, 0xC583, 0x9DF4, 0xC585, + 0x9DF5, 0xC586, 0x9DF6, 0xC588, 0x9DF7, 0xC589, 0x9DF8, 0xC58A, 0x9DF9, 0xC58B, 0x9DFA, 0xC58E, 0x9DFB, 0xC590, 0x9DFC, 0xC592, + 0x9DFD, 0xC593, 0x9DFE, 0xC594, 0x9E41, 0xC596, 0x9E42, 0xC599, 0x9E43, 0xC59A, 0x9E44, 0xC59B, 0x9E45, 0xC59D, 0x9E46, 0xC59E, + 0x9E47, 0xC59F, 0x9E48, 0xC5A1, 0x9E49, 0xC5A2, 0x9E4A, 0xC5A3, 0x9E4B, 0xC5A4, 0x9E4C, 0xC5A5, 0x9E4D, 0xC5A6, 0x9E4E, 0xC5A7, + 0x9E4F, 0xC5A8, 0x9E50, 0xC5AA, 0x9E51, 0xC5AB, 0x9E52, 0xC5AC, 0x9E53, 0xC5AD, 0x9E54, 0xC5AE, 0x9E55, 0xC5AF, 0x9E56, 0xC5B0, + 0x9E57, 0xC5B1, 0x9E58, 0xC5B2, 0x9E59, 0xC5B3, 0x9E5A, 0xC5B6, 0x9E61, 0xC5B7, 0x9E62, 0xC5BA, 0x9E63, 0xC5BF, 0x9E64, 0xC5C0, + 0x9E65, 0xC5C1, 0x9E66, 0xC5C2, 0x9E67, 0xC5C3, 0x9E68, 0xC5CB, 0x9E69, 0xC5CD, 0x9E6A, 0xC5CF, 0x9E6B, 0xC5D2, 0x9E6C, 0xC5D3, + 0x9E6D, 0xC5D5, 0x9E6E, 0xC5D6, 0x9E6F, 0xC5D7, 0x9E70, 0xC5D9, 0x9E71, 0xC5DA, 0x9E72, 0xC5DB, 0x9E73, 0xC5DC, 0x9E74, 0xC5DD, + 0x9E75, 0xC5DE, 0x9E76, 0xC5DF, 0x9E77, 0xC5E2, 0x9E78, 0xC5E4, 0x9E79, 0xC5E6, 0x9E7A, 0xC5E7, 0x9E81, 0xC5E8, 0x9E82, 0xC5E9, + 0x9E83, 0xC5EA, 0x9E84, 0xC5EB, 0x9E85, 0xC5EF, 0x9E86, 0xC5F1, 0x9E87, 0xC5F2, 0x9E88, 0xC5F3, 0x9E89, 0xC5F5, 0x9E8A, 0xC5F8, + 0x9E8B, 0xC5F9, 0x9E8C, 0xC5FA, 0x9E8D, 0xC5FB, 0x9E8E, 0xC602, 0x9E8F, 0xC603, 0x9E90, 0xC604, 0x9E91, 0xC609, 0x9E92, 0xC60A, + 0x9E93, 0xC60B, 0x9E94, 0xC60D, 0x9E95, 0xC60E, 0x9E96, 0xC60F, 0x9E97, 0xC611, 0x9E98, 0xC612, 0x9E99, 0xC613, 0x9E9A, 0xC614, + 0x9E9B, 0xC615, 0x9E9C, 0xC616, 0x9E9D, 0xC617, 0x9E9E, 0xC61A, 0x9E9F, 0xC61D, 0x9EA0, 0xC61E, 0x9EA1, 0xC61F, 0x9EA2, 0xC620, + 0x9EA3, 0xC621, 0x9EA4, 0xC622, 0x9EA5, 0xC623, 0x9EA6, 0xC626, 0x9EA7, 0xC627, 0x9EA8, 0xC629, 0x9EA9, 0xC62A, 0x9EAA, 0xC62B, + 0x9EAB, 0xC62F, 0x9EAC, 0xC631, 0x9EAD, 0xC632, 0x9EAE, 0xC636, 0x9EAF, 0xC638, 0x9EB0, 0xC63A, 0x9EB1, 0xC63C, 0x9EB2, 0xC63D, + 0x9EB3, 0xC63E, 0x9EB4, 0xC63F, 0x9EB5, 0xC642, 0x9EB6, 0xC643, 0x9EB7, 0xC645, 0x9EB8, 0xC646, 0x9EB9, 0xC647, 0x9EBA, 0xC649, + 0x9EBB, 0xC64A, 0x9EBC, 0xC64B, 0x9EBD, 0xC64C, 0x9EBE, 0xC64D, 0x9EBF, 0xC64E, 0x9EC0, 0xC64F, 0x9EC1, 0xC652, 0x9EC2, 0xC656, + 0x9EC3, 0xC657, 0x9EC4, 0xC658, 0x9EC5, 0xC659, 0x9EC6, 0xC65A, 0x9EC7, 0xC65B, 0x9EC8, 0xC65E, 0x9EC9, 0xC65F, 0x9ECA, 0xC661, + 0x9ECB, 0xC662, 0x9ECC, 0xC663, 0x9ECD, 0xC664, 0x9ECE, 0xC665, 0x9ECF, 0xC666, 0x9ED0, 0xC667, 0x9ED1, 0xC668, 0x9ED2, 0xC669, + 0x9ED3, 0xC66A, 0x9ED4, 0xC66B, 0x9ED5, 0xC66D, 0x9ED6, 0xC66E, 0x9ED7, 0xC670, 0x9ED8, 0xC672, 0x9ED9, 0xC673, 0x9EDA, 0xC674, + 0x9EDB, 0xC675, 0x9EDC, 0xC676, 0x9EDD, 0xC677, 0x9EDE, 0xC67A, 0x9EDF, 0xC67B, 0x9EE0, 0xC67D, 0x9EE1, 0xC67E, 0x9EE2, 0xC67F, + 0x9EE3, 0xC681, 0x9EE4, 0xC682, 0x9EE5, 0xC683, 0x9EE6, 0xC684, 0x9EE7, 0xC685, 0x9EE8, 0xC686, 0x9EE9, 0xC687, 0x9EEA, 0xC68A, + 0x9EEB, 0xC68C, 0x9EEC, 0xC68E, 0x9EED, 0xC68F, 0x9EEE, 0xC690, 0x9EEF, 0xC691, 0x9EF0, 0xC692, 0x9EF1, 0xC693, 0x9EF2, 0xC696, + 0x9EF3, 0xC697, 0x9EF4, 0xC699, 0x9EF5, 0xC69A, 0x9EF6, 0xC69B, 0x9EF7, 0xC69D, 0x9EF8, 0xC69E, 0x9EF9, 0xC69F, 0x9EFA, 0xC6A0, + 0x9EFB, 0xC6A1, 0x9EFC, 0xC6A2, 0x9EFD, 0xC6A3, 0x9EFE, 0xC6A6, 0x9F41, 0xC6A8, 0x9F42, 0xC6AA, 0x9F43, 0xC6AB, 0x9F44, 0xC6AC, + 0x9F45, 0xC6AD, 0x9F46, 0xC6AE, 0x9F47, 0xC6AF, 0x9F48, 0xC6B2, 0x9F49, 0xC6B3, 0x9F4A, 0xC6B5, 0x9F4B, 0xC6B6, 0x9F4C, 0xC6B7, + 0x9F4D, 0xC6BB, 0x9F4E, 0xC6BC, 0x9F4F, 0xC6BD, 0x9F50, 0xC6BE, 0x9F51, 0xC6BF, 0x9F52, 0xC6C2, 0x9F53, 0xC6C4, 0x9F54, 0xC6C6, + 0x9F55, 0xC6C7, 0x9F56, 0xC6C8, 0x9F57, 0xC6C9, 0x9F58, 0xC6CA, 0x9F59, 0xC6CB, 0x9F5A, 0xC6CE, 0x9F61, 0xC6CF, 0x9F62, 0xC6D1, + 0x9F63, 0xC6D2, 0x9F64, 0xC6D3, 0x9F65, 0xC6D5, 0x9F66, 0xC6D6, 0x9F67, 0xC6D7, 0x9F68, 0xC6D8, 0x9F69, 0xC6D9, 0x9F6A, 0xC6DA, + 0x9F6B, 0xC6DB, 0x9F6C, 0xC6DE, 0x9F6D, 0xC6DF, 0x9F6E, 0xC6E2, 0x9F6F, 0xC6E3, 0x9F70, 0xC6E4, 0x9F71, 0xC6E5, 0x9F72, 0xC6E6, + 0x9F73, 0xC6E7, 0x9F74, 0xC6EA, 0x9F75, 0xC6EB, 0x9F76, 0xC6ED, 0x9F77, 0xC6EE, 0x9F78, 0xC6EF, 0x9F79, 0xC6F1, 0x9F7A, 0xC6F2, + 0x9F81, 0xC6F3, 0x9F82, 0xC6F4, 0x9F83, 0xC6F5, 0x9F84, 0xC6F6, 0x9F85, 0xC6F7, 0x9F86, 0xC6FA, 0x9F87, 0xC6FB, 0x9F88, 0xC6FC, + 0x9F89, 0xC6FE, 0x9F8A, 0xC6FF, 0x9F8B, 0xC700, 0x9F8C, 0xC701, 0x9F8D, 0xC702, 0x9F8E, 0xC703, 0x9F8F, 0xC706, 0x9F90, 0xC707, + 0x9F91, 0xC709, 0x9F92, 0xC70A, 0x9F93, 0xC70B, 0x9F94, 0xC70D, 0x9F95, 0xC70E, 0x9F96, 0xC70F, 0x9F97, 0xC710, 0x9F98, 0xC711, + 0x9F99, 0xC712, 0x9F9A, 0xC713, 0x9F9B, 0xC716, 0x9F9C, 0xC718, 0x9F9D, 0xC71A, 0x9F9E, 0xC71B, 0x9F9F, 0xC71C, 0x9FA0, 0xC71D, + 0x9FA1, 0xC71E, 0x9FA2, 0xC71F, 0x9FA3, 0xC722, 0x9FA4, 0xC723, 0x9FA5, 0xC725, 0x9FA6, 0xC726, 0x9FA7, 0xC727, 0x9FA8, 0xC729, + 0x9FA9, 0xC72A, 0x9FAA, 0xC72B, 0x9FAB, 0xC72C, 0x9FAC, 0xC72D, 0x9FAD, 0xC72E, 0x9FAE, 0xC72F, 0x9FAF, 0xC732, 0x9FB0, 0xC734, + 0x9FB1, 0xC736, 0x9FB2, 0xC738, 0x9FB3, 0xC739, 0x9FB4, 0xC73A, 0x9FB5, 0xC73B, 0x9FB6, 0xC73E, 0x9FB7, 0xC73F, 0x9FB8, 0xC741, + 0x9FB9, 0xC742, 0x9FBA, 0xC743, 0x9FBB, 0xC745, 0x9FBC, 0xC746, 0x9FBD, 0xC747, 0x9FBE, 0xC748, 0x9FBF, 0xC749, 0x9FC0, 0xC74B, + 0x9FC1, 0xC74E, 0x9FC2, 0xC750, 0x9FC3, 0xC759, 0x9FC4, 0xC75A, 0x9FC5, 0xC75B, 0x9FC6, 0xC75D, 0x9FC7, 0xC75E, 0x9FC8, 0xC75F, + 0x9FC9, 0xC761, 0x9FCA, 0xC762, 0x9FCB, 0xC763, 0x9FCC, 0xC764, 0x9FCD, 0xC765, 0x9FCE, 0xC766, 0x9FCF, 0xC767, 0x9FD0, 0xC769, + 0x9FD1, 0xC76A, 0x9FD2, 0xC76C, 0x9FD3, 0xC76D, 0x9FD4, 0xC76E, 0x9FD5, 0xC76F, 0x9FD6, 0xC770, 0x9FD7, 0xC771, 0x9FD8, 0xC772, + 0x9FD9, 0xC773, 0x9FDA, 0xC776, 0x9FDB, 0xC777, 0x9FDC, 0xC779, 0x9FDD, 0xC77A, 0x9FDE, 0xC77B, 0x9FDF, 0xC77F, 0x9FE0, 0xC780, + 0x9FE1, 0xC781, 0x9FE2, 0xC782, 0x9FE3, 0xC786, 0x9FE4, 0xC78B, 0x9FE5, 0xC78C, 0x9FE6, 0xC78D, 0x9FE7, 0xC78F, 0x9FE8, 0xC792, + 0x9FE9, 0xC793, 0x9FEA, 0xC795, 0x9FEB, 0xC799, 0x9FEC, 0xC79B, 0x9FED, 0xC79C, 0x9FEE, 0xC79D, 0x9FEF, 0xC79E, 0x9FF0, 0xC79F, + 0x9FF1, 0xC7A2, 0x9FF2, 0xC7A7, 0x9FF3, 0xC7A8, 0x9FF4, 0xC7A9, 0x9FF5, 0xC7AA, 0x9FF6, 0xC7AB, 0x9FF7, 0xC7AE, 0x9FF8, 0xC7AF, + 0x9FF9, 0xC7B1, 0x9FFA, 0xC7B2, 0x9FFB, 0xC7B3, 0x9FFC, 0xC7B5, 0x9FFD, 0xC7B6, 0x9FFE, 0xC7B7, 0xA041, 0xC7B8, 0xA042, 0xC7B9, + 0xA043, 0xC7BA, 0xA044, 0xC7BB, 0xA045, 0xC7BE, 0xA046, 0xC7C2, 0xA047, 0xC7C3, 0xA048, 0xC7C4, 0xA049, 0xC7C5, 0xA04A, 0xC7C6, + 0xA04B, 0xC7C7, 0xA04C, 0xC7CA, 0xA04D, 0xC7CB, 0xA04E, 0xC7CD, 0xA04F, 0xC7CF, 0xA050, 0xC7D1, 0xA051, 0xC7D2, 0xA052, 0xC7D3, + 0xA053, 0xC7D4, 0xA054, 0xC7D5, 0xA055, 0xC7D6, 0xA056, 0xC7D7, 0xA057, 0xC7D9, 0xA058, 0xC7DA, 0xA059, 0xC7DB, 0xA05A, 0xC7DC, + 0xA061, 0xC7DE, 0xA062, 0xC7DF, 0xA063, 0xC7E0, 0xA064, 0xC7E1, 0xA065, 0xC7E2, 0xA066, 0xC7E3, 0xA067, 0xC7E5, 0xA068, 0xC7E6, + 0xA069, 0xC7E7, 0xA06A, 0xC7E9, 0xA06B, 0xC7EA, 0xA06C, 0xC7EB, 0xA06D, 0xC7ED, 0xA06E, 0xC7EE, 0xA06F, 0xC7EF, 0xA070, 0xC7F0, + 0xA071, 0xC7F1, 0xA072, 0xC7F2, 0xA073, 0xC7F3, 0xA074, 0xC7F4, 0xA075, 0xC7F5, 0xA076, 0xC7F6, 0xA077, 0xC7F7, 0xA078, 0xC7F8, + 0xA079, 0xC7F9, 0xA07A, 0xC7FA, 0xA081, 0xC7FB, 0xA082, 0xC7FC, 0xA083, 0xC7FD, 0xA084, 0xC7FE, 0xA085, 0xC7FF, 0xA086, 0xC802, + 0xA087, 0xC803, 0xA088, 0xC805, 0xA089, 0xC806, 0xA08A, 0xC807, 0xA08B, 0xC809, 0xA08C, 0xC80B, 0xA08D, 0xC80C, 0xA08E, 0xC80D, + 0xA08F, 0xC80E, 0xA090, 0xC80F, 0xA091, 0xC812, 0xA092, 0xC814, 0xA093, 0xC817, 0xA094, 0xC818, 0xA095, 0xC819, 0xA096, 0xC81A, + 0xA097, 0xC81B, 0xA098, 0xC81E, 0xA099, 0xC81F, 0xA09A, 0xC821, 0xA09B, 0xC822, 0xA09C, 0xC823, 0xA09D, 0xC825, 0xA09E, 0xC826, + 0xA09F, 0xC827, 0xA0A0, 0xC828, 0xA0A1, 0xC829, 0xA0A2, 0xC82A, 0xA0A3, 0xC82B, 0xA0A4, 0xC82E, 0xA0A5, 0xC830, 0xA0A6, 0xC832, + 0xA0A7, 0xC833, 0xA0A8, 0xC834, 0xA0A9, 0xC835, 0xA0AA, 0xC836, 0xA0AB, 0xC837, 0xA0AC, 0xC839, 0xA0AD, 0xC83A, 0xA0AE, 0xC83B, + 0xA0AF, 0xC83D, 0xA0B0, 0xC83E, 0xA0B1, 0xC83F, 0xA0B2, 0xC841, 0xA0B3, 0xC842, 0xA0B4, 0xC843, 0xA0B5, 0xC844, 0xA0B6, 0xC845, + 0xA0B7, 0xC846, 0xA0B8, 0xC847, 0xA0B9, 0xC84A, 0xA0BA, 0xC84B, 0xA0BB, 0xC84E, 0xA0BC, 0xC84F, 0xA0BD, 0xC850, 0xA0BE, 0xC851, + 0xA0BF, 0xC852, 0xA0C0, 0xC853, 0xA0C1, 0xC855, 0xA0C2, 0xC856, 0xA0C3, 0xC857, 0xA0C4, 0xC858, 0xA0C5, 0xC859, 0xA0C6, 0xC85A, + 0xA0C7, 0xC85B, 0xA0C8, 0xC85C, 0xA0C9, 0xC85D, 0xA0CA, 0xC85E, 0xA0CB, 0xC85F, 0xA0CC, 0xC860, 0xA0CD, 0xC861, 0xA0CE, 0xC862, + 0xA0CF, 0xC863, 0xA0D0, 0xC864, 0xA0D1, 0xC865, 0xA0D2, 0xC866, 0xA0D3, 0xC867, 0xA0D4, 0xC868, 0xA0D5, 0xC869, 0xA0D6, 0xC86A, + 0xA0D7, 0xC86B, 0xA0D8, 0xC86C, 0xA0D9, 0xC86D, 0xA0DA, 0xC86E, 0xA0DB, 0xC86F, 0xA0DC, 0xC872, 0xA0DD, 0xC873, 0xA0DE, 0xC875, + 0xA0DF, 0xC876, 0xA0E0, 0xC877, 0xA0E1, 0xC879, 0xA0E2, 0xC87B, 0xA0E3, 0xC87C, 0xA0E4, 0xC87D, 0xA0E5, 0xC87E, 0xA0E6, 0xC87F, + 0xA0E7, 0xC882, 0xA0E8, 0xC884, 0xA0E9, 0xC888, 0xA0EA, 0xC889, 0xA0EB, 0xC88A, 0xA0EC, 0xC88E, 0xA0ED, 0xC88F, 0xA0EE, 0xC890, + 0xA0EF, 0xC891, 0xA0F0, 0xC892, 0xA0F1, 0xC893, 0xA0F2, 0xC895, 0xA0F3, 0xC896, 0xA0F4, 0xC897, 0xA0F5, 0xC898, 0xA0F6, 0xC899, + 0xA0F7, 0xC89A, 0xA0F8, 0xC89B, 0xA0F9, 0xC89C, 0xA0FA, 0xC89E, 0xA0FB, 0xC8A0, 0xA0FC, 0xC8A2, 0xA0FD, 0xC8A3, 0xA0FE, 0xC8A4, + 0xA141, 0xC8A5, 0xA142, 0xC8A6, 0xA143, 0xC8A7, 0xA144, 0xC8A9, 0xA145, 0xC8AA, 0xA146, 0xC8AB, 0xA147, 0xC8AC, 0xA148, 0xC8AD, + 0xA149, 0xC8AE, 0xA14A, 0xC8AF, 0xA14B, 0xC8B0, 0xA14C, 0xC8B1, 0xA14D, 0xC8B2, 0xA14E, 0xC8B3, 0xA14F, 0xC8B4, 0xA150, 0xC8B5, + 0xA151, 0xC8B6, 0xA152, 0xC8B7, 0xA153, 0xC8B8, 0xA154, 0xC8B9, 0xA155, 0xC8BA, 0xA156, 0xC8BB, 0xA157, 0xC8BE, 0xA158, 0xC8BF, + 0xA159, 0xC8C0, 0xA15A, 0xC8C1, 0xA161, 0xC8C2, 0xA162, 0xC8C3, 0xA163, 0xC8C5, 0xA164, 0xC8C6, 0xA165, 0xC8C7, 0xA166, 0xC8C9, + 0xA167, 0xC8CA, 0xA168, 0xC8CB, 0xA169, 0xC8CD, 0xA16A, 0xC8CE, 0xA16B, 0xC8CF, 0xA16C, 0xC8D0, 0xA16D, 0xC8D1, 0xA16E, 0xC8D2, + 0xA16F, 0xC8D3, 0xA170, 0xC8D6, 0xA171, 0xC8D8, 0xA172, 0xC8DA, 0xA173, 0xC8DB, 0xA174, 0xC8DC, 0xA175, 0xC8DD, 0xA176, 0xC8DE, + 0xA177, 0xC8DF, 0xA178, 0xC8E2, 0xA179, 0xC8E3, 0xA17A, 0xC8E5, 0xA181, 0xC8E6, 0xA182, 0xC8E7, 0xA183, 0xC8E8, 0xA184, 0xC8E9, + 0xA185, 0xC8EA, 0xA186, 0xC8EB, 0xA187, 0xC8EC, 0xA188, 0xC8ED, 0xA189, 0xC8EE, 0xA18A, 0xC8EF, 0xA18B, 0xC8F0, 0xA18C, 0xC8F1, + 0xA18D, 0xC8F2, 0xA18E, 0xC8F3, 0xA18F, 0xC8F4, 0xA190, 0xC8F6, 0xA191, 0xC8F7, 0xA192, 0xC8F8, 0xA193, 0xC8F9, 0xA194, 0xC8FA, + 0xA195, 0xC8FB, 0xA196, 0xC8FE, 0xA197, 0xC8FF, 0xA198, 0xC901, 0xA199, 0xC902, 0xA19A, 0xC903, 0xA19B, 0xC907, 0xA19C, 0xC908, + 0xA19D, 0xC909, 0xA19E, 0xC90A, 0xA19F, 0xC90B, 0xA1A0, 0xC90E, 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, 0xA1A4, 0x00B7, + 0xA1A5, 0x2025, 0xA1A6, 0x2026, 0xA1A7, 0x00A8, 0xA1A8, 0x3003, 0xA1A9, 0x00AD, 0xA1AA, 0x2015, 0xA1AB, 0x2225, 0xA1AC, 0xFF3C, + 0xA1AD, 0x223C, 0xA1AE, 0x2018, 0xA1AF, 0x2019, 0xA1B0, 0x201C, 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, 0xA1B4, 0x3008, + 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B, 0xA1B8, 0x300C, 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, 0xA1BC, 0x3010, + 0xA1BD, 0x3011, 0xA1BE, 0x00B1, 0xA1BF, 0x00D7, 0xA1C0, 0x00F7, 0xA1C1, 0x2260, 0xA1C2, 0x2264, 0xA1C3, 0x2265, 0xA1C4, 0x221E, + 0xA1C5, 0x2234, 0xA1C6, 0x00B0, 0xA1C7, 0x2032, 0xA1C8, 0x2033, 0xA1C9, 0x2103, 0xA1CA, 0x212B, 0xA1CB, 0xFFE0, 0xA1CC, 0xFFE1, + 0xA1CD, 0xFFE5, 0xA1CE, 0x2642, 0xA1CF, 0x2640, 0xA1D0, 0x2220, 0xA1D1, 0x22A5, 0xA1D2, 0x2312, 0xA1D3, 0x2202, 0xA1D4, 0x2207, + 0xA1D5, 0x2261, 0xA1D6, 0x2252, 0xA1D7, 0x00A7, 0xA1D8, 0x203B, 0xA1D9, 0x2606, 0xA1DA, 0x2605, 0xA1DB, 0x25CB, 0xA1DC, 0x25CF, + 0xA1DD, 0x25CE, 0xA1DE, 0x25C7, 0xA1DF, 0x25C6, 0xA1E0, 0x25A1, 0xA1E1, 0x25A0, 0xA1E2, 0x25B3, 0xA1E3, 0x25B2, 0xA1E4, 0x25BD, + 0xA1E5, 0x25BC, 0xA1E6, 0x2192, 0xA1E7, 0x2190, 0xA1E8, 0x2191, 0xA1E9, 0x2193, 0xA1EA, 0x2194, 0xA1EB, 0x3013, 0xA1EC, 0x226A, + 0xA1ED, 0x226B, 0xA1EE, 0x221A, 0xA1EF, 0x223D, 0xA1F0, 0x221D, 0xA1F1, 0x2235, 0xA1F2, 0x222B, 0xA1F3, 0x222C, 0xA1F4, 0x2208, + 0xA1F5, 0x220B, 0xA1F6, 0x2286, 0xA1F7, 0x2287, 0xA1F8, 0x2282, 0xA1F9, 0x2283, 0xA1FA, 0x222A, 0xA1FB, 0x2229, 0xA1FC, 0x2227, + 0xA1FD, 0x2228, 0xA1FE, 0xFFE2, 0xA241, 0xC910, 0xA242, 0xC912, 0xA243, 0xC913, 0xA244, 0xC914, 0xA245, 0xC915, 0xA246, 0xC916, + 0xA247, 0xC917, 0xA248, 0xC919, 0xA249, 0xC91A, 0xA24A, 0xC91B, 0xA24B, 0xC91C, 0xA24C, 0xC91D, 0xA24D, 0xC91E, 0xA24E, 0xC91F, + 0xA24F, 0xC920, 0xA250, 0xC921, 0xA251, 0xC922, 0xA252, 0xC923, 0xA253, 0xC924, 0xA254, 0xC925, 0xA255, 0xC926, 0xA256, 0xC927, + 0xA257, 0xC928, 0xA258, 0xC929, 0xA259, 0xC92A, 0xA25A, 0xC92B, 0xA261, 0xC92D, 0xA262, 0xC92E, 0xA263, 0xC92F, 0xA264, 0xC930, + 0xA265, 0xC931, 0xA266, 0xC932, 0xA267, 0xC933, 0xA268, 0xC935, 0xA269, 0xC936, 0xA26A, 0xC937, 0xA26B, 0xC938, 0xA26C, 0xC939, + 0xA26D, 0xC93A, 0xA26E, 0xC93B, 0xA26F, 0xC93C, 0xA270, 0xC93D, 0xA271, 0xC93E, 0xA272, 0xC93F, 0xA273, 0xC940, 0xA274, 0xC941, + 0xA275, 0xC942, 0xA276, 0xC943, 0xA277, 0xC944, 0xA278, 0xC945, 0xA279, 0xC946, 0xA27A, 0xC947, 0xA281, 0xC948, 0xA282, 0xC949, + 0xA283, 0xC94A, 0xA284, 0xC94B, 0xA285, 0xC94C, 0xA286, 0xC94D, 0xA287, 0xC94E, 0xA288, 0xC94F, 0xA289, 0xC952, 0xA28A, 0xC953, + 0xA28B, 0xC955, 0xA28C, 0xC956, 0xA28D, 0xC957, 0xA28E, 0xC959, 0xA28F, 0xC95A, 0xA290, 0xC95B, 0xA291, 0xC95C, 0xA292, 0xC95D, + 0xA293, 0xC95E, 0xA294, 0xC95F, 0xA295, 0xC962, 0xA296, 0xC964, 0xA297, 0xC965, 0xA298, 0xC966, 0xA299, 0xC967, 0xA29A, 0xC968, + 0xA29B, 0xC969, 0xA29C, 0xC96A, 0xA29D, 0xC96B, 0xA29E, 0xC96D, 0xA29F, 0xC96E, 0xA2A0, 0xC96F, 0xA2A1, 0x21D2, 0xA2A2, 0x21D4, + 0xA2A3, 0x2200, 0xA2A4, 0x2203, 0xA2A5, 0x00B4, 0xA2A6, 0xFF5E, 0xA2A7, 0x02C7, 0xA2A8, 0x02D8, 0xA2A9, 0x02DD, 0xA2AA, 0x02DA, + 0xA2AB, 0x02D9, 0xA2AC, 0x00B8, 0xA2AD, 0x02DB, 0xA2AE, 0x00A1, 0xA2AF, 0x00BF, 0xA2B0, 0x02D0, 0xA2B1, 0x222E, 0xA2B2, 0x2211, + 0xA2B3, 0x220F, 0xA2B4, 0x00A4, 0xA2B5, 0x2109, 0xA2B6, 0x2030, 0xA2B7, 0x25C1, 0xA2B8, 0x25C0, 0xA2B9, 0x25B7, 0xA2BA, 0x25B6, + 0xA2BB, 0x2664, 0xA2BC, 0x2660, 0xA2BD, 0x2661, 0xA2BE, 0x2665, 0xA2BF, 0x2667, 0xA2C0, 0x2663, 0xA2C1, 0x2299, 0xA2C2, 0x25C8, + 0xA2C3, 0x25A3, 0xA2C4, 0x25D0, 0xA2C5, 0x25D1, 0xA2C6, 0x2592, 0xA2C7, 0x25A4, 0xA2C8, 0x25A5, 0xA2C9, 0x25A8, 0xA2CA, 0x25A7, + 0xA2CB, 0x25A6, 0xA2CC, 0x25A9, 0xA2CD, 0x2668, 0xA2CE, 0x260F, 0xA2CF, 0x260E, 0xA2D0, 0x261C, 0xA2D1, 0x261E, 0xA2D2, 0x00B6, + 0xA2D3, 0x2020, 0xA2D4, 0x2021, 0xA2D5, 0x2195, 0xA2D6, 0x2197, 0xA2D7, 0x2199, 0xA2D8, 0x2196, 0xA2D9, 0x2198, 0xA2DA, 0x266D, + 0xA2DB, 0x2669, 0xA2DC, 0x266A, 0xA2DD, 0x266C, 0xA2DE, 0x327F, 0xA2DF, 0x321C, 0xA2E0, 0x2116, 0xA2E1, 0x33C7, 0xA2E2, 0x2122, + 0xA2E3, 0x33C2, 0xA2E4, 0x33D8, 0xA2E5, 0x2121, 0xA2E6, 0x20AC, 0xA2E7, 0x00AE, 0xA341, 0xC971, 0xA342, 0xC972, 0xA343, 0xC973, + 0xA344, 0xC975, 0xA345, 0xC976, 0xA346, 0xC977, 0xA347, 0xC978, 0xA348, 0xC979, 0xA349, 0xC97A, 0xA34A, 0xC97B, 0xA34B, 0xC97D, + 0xA34C, 0xC97E, 0xA34D, 0xC97F, 0xA34E, 0xC980, 0xA34F, 0xC981, 0xA350, 0xC982, 0xA351, 0xC983, 0xA352, 0xC984, 0xA353, 0xC985, + 0xA354, 0xC986, 0xA355, 0xC987, 0xA356, 0xC98A, 0xA357, 0xC98B, 0xA358, 0xC98D, 0xA359, 0xC98E, 0xA35A, 0xC98F, 0xA361, 0xC991, + 0xA362, 0xC992, 0xA363, 0xC993, 0xA364, 0xC994, 0xA365, 0xC995, 0xA366, 0xC996, 0xA367, 0xC997, 0xA368, 0xC99A, 0xA369, 0xC99C, + 0xA36A, 0xC99E, 0xA36B, 0xC99F, 0xA36C, 0xC9A0, 0xA36D, 0xC9A1, 0xA36E, 0xC9A2, 0xA36F, 0xC9A3, 0xA370, 0xC9A4, 0xA371, 0xC9A5, + 0xA372, 0xC9A6, 0xA373, 0xC9A7, 0xA374, 0xC9A8, 0xA375, 0xC9A9, 0xA376, 0xC9AA, 0xA377, 0xC9AB, 0xA378, 0xC9AC, 0xA379, 0xC9AD, + 0xA37A, 0xC9AE, 0xA381, 0xC9AF, 0xA382, 0xC9B0, 0xA383, 0xC9B1, 0xA384, 0xC9B2, 0xA385, 0xC9B3, 0xA386, 0xC9B4, 0xA387, 0xC9B5, + 0xA388, 0xC9B6, 0xA389, 0xC9B7, 0xA38A, 0xC9B8, 0xA38B, 0xC9B9, 0xA38C, 0xC9BA, 0xA38D, 0xC9BB, 0xA38E, 0xC9BC, 0xA38F, 0xC9BD, + 0xA390, 0xC9BE, 0xA391, 0xC9BF, 0xA392, 0xC9C2, 0xA393, 0xC9C3, 0xA394, 0xC9C5, 0xA395, 0xC9C6, 0xA396, 0xC9C9, 0xA397, 0xC9CB, + 0xA398, 0xC9CC, 0xA399, 0xC9CD, 0xA39A, 0xC9CE, 0xA39B, 0xC9CF, 0xA39C, 0xC9D2, 0xA39D, 0xC9D4, 0xA39E, 0xC9D7, 0xA39F, 0xC9D8, + 0xA3A0, 0xC9DB, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, 0xA3A4, 0xFF04, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07, + 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F, + 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17, + 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F, + 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27, + 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F, + 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37, + 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, 0xA3DC, 0xFFE6, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F, + 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47, + 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F, + 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57, + 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA441, 0xC9DE, + 0xA442, 0xC9DF, 0xA443, 0xC9E1, 0xA444, 0xC9E3, 0xA445, 0xC9E5, 0xA446, 0xC9E6, 0xA447, 0xC9E8, 0xA448, 0xC9E9, 0xA449, 0xC9EA, + 0xA44A, 0xC9EB, 0xA44B, 0xC9EE, 0xA44C, 0xC9F2, 0xA44D, 0xC9F3, 0xA44E, 0xC9F4, 0xA44F, 0xC9F5, 0xA450, 0xC9F6, 0xA451, 0xC9F7, + 0xA452, 0xC9FA, 0xA453, 0xC9FB, 0xA454, 0xC9FD, 0xA455, 0xC9FE, 0xA456, 0xC9FF, 0xA457, 0xCA01, 0xA458, 0xCA02, 0xA459, 0xCA03, + 0xA45A, 0xCA04, 0xA461, 0xCA05, 0xA462, 0xCA06, 0xA463, 0xCA07, 0xA464, 0xCA0A, 0xA465, 0xCA0E, 0xA466, 0xCA0F, 0xA467, 0xCA10, + 0xA468, 0xCA11, 0xA469, 0xCA12, 0xA46A, 0xCA13, 0xA46B, 0xCA15, 0xA46C, 0xCA16, 0xA46D, 0xCA17, 0xA46E, 0xCA19, 0xA46F, 0xCA1A, + 0xA470, 0xCA1B, 0xA471, 0xCA1C, 0xA472, 0xCA1D, 0xA473, 0xCA1E, 0xA474, 0xCA1F, 0xA475, 0xCA20, 0xA476, 0xCA21, 0xA477, 0xCA22, + 0xA478, 0xCA23, 0xA479, 0xCA24, 0xA47A, 0xCA25, 0xA481, 0xCA26, 0xA482, 0xCA27, 0xA483, 0xCA28, 0xA484, 0xCA2A, 0xA485, 0xCA2B, + 0xA486, 0xCA2C, 0xA487, 0xCA2D, 0xA488, 0xCA2E, 0xA489, 0xCA2F, 0xA48A, 0xCA30, 0xA48B, 0xCA31, 0xA48C, 0xCA32, 0xA48D, 0xCA33, + 0xA48E, 0xCA34, 0xA48F, 0xCA35, 0xA490, 0xCA36, 0xA491, 0xCA37, 0xA492, 0xCA38, 0xA493, 0xCA39, 0xA494, 0xCA3A, 0xA495, 0xCA3B, + 0xA496, 0xCA3C, 0xA497, 0xCA3D, 0xA498, 0xCA3E, 0xA499, 0xCA3F, 0xA49A, 0xCA40, 0xA49B, 0xCA41, 0xA49C, 0xCA42, 0xA49D, 0xCA43, + 0xA49E, 0xCA44, 0xA49F, 0xCA45, 0xA4A0, 0xCA46, 0xA4A1, 0x3131, 0xA4A2, 0x3132, 0xA4A3, 0x3133, 0xA4A4, 0x3134, 0xA4A5, 0x3135, + 0xA4A6, 0x3136, 0xA4A7, 0x3137, 0xA4A8, 0x3138, 0xA4A9, 0x3139, 0xA4AA, 0x313A, 0xA4AB, 0x313B, 0xA4AC, 0x313C, 0xA4AD, 0x313D, + 0xA4AE, 0x313E, 0xA4AF, 0x313F, 0xA4B0, 0x3140, 0xA4B1, 0x3141, 0xA4B2, 0x3142, 0xA4B3, 0x3143, 0xA4B4, 0x3144, 0xA4B5, 0x3145, + 0xA4B6, 0x3146, 0xA4B7, 0x3147, 0xA4B8, 0x3148, 0xA4B9, 0x3149, 0xA4BA, 0x314A, 0xA4BB, 0x314B, 0xA4BC, 0x314C, 0xA4BD, 0x314D, + 0xA4BE, 0x314E, 0xA4BF, 0x314F, 0xA4C0, 0x3150, 0xA4C1, 0x3151, 0xA4C2, 0x3152, 0xA4C3, 0x3153, 0xA4C4, 0x3154, 0xA4C5, 0x3155, + 0xA4C6, 0x3156, 0xA4C7, 0x3157, 0xA4C8, 0x3158, 0xA4C9, 0x3159, 0xA4CA, 0x315A, 0xA4CB, 0x315B, 0xA4CC, 0x315C, 0xA4CD, 0x315D, + 0xA4CE, 0x315E, 0xA4CF, 0x315F, 0xA4D0, 0x3160, 0xA4D1, 0x3161, 0xA4D2, 0x3162, 0xA4D3, 0x3163, 0xA4D4, 0x3164, 0xA4D5, 0x3165, + 0xA4D6, 0x3166, 0xA4D7, 0x3167, 0xA4D8, 0x3168, 0xA4D9, 0x3169, 0xA4DA, 0x316A, 0xA4DB, 0x316B, 0xA4DC, 0x316C, 0xA4DD, 0x316D, + 0xA4DE, 0x316E, 0xA4DF, 0x316F, 0xA4E0, 0x3170, 0xA4E1, 0x3171, 0xA4E2, 0x3172, 0xA4E3, 0x3173, 0xA4E4, 0x3174, 0xA4E5, 0x3175, + 0xA4E6, 0x3176, 0xA4E7, 0x3177, 0xA4E8, 0x3178, 0xA4E9, 0x3179, 0xA4EA, 0x317A, 0xA4EB, 0x317B, 0xA4EC, 0x317C, 0xA4ED, 0x317D, + 0xA4EE, 0x317E, 0xA4EF, 0x317F, 0xA4F0, 0x3180, 0xA4F1, 0x3181, 0xA4F2, 0x3182, 0xA4F3, 0x3183, 0xA4F4, 0x3184, 0xA4F5, 0x3185, + 0xA4F6, 0x3186, 0xA4F7, 0x3187, 0xA4F8, 0x3188, 0xA4F9, 0x3189, 0xA4FA, 0x318A, 0xA4FB, 0x318B, 0xA4FC, 0x318C, 0xA4FD, 0x318D, + 0xA4FE, 0x318E, 0xA541, 0xCA47, 0xA542, 0xCA48, 0xA543, 0xCA49, 0xA544, 0xCA4A, 0xA545, 0xCA4B, 0xA546, 0xCA4E, 0xA547, 0xCA4F, + 0xA548, 0xCA51, 0xA549, 0xCA52, 0xA54A, 0xCA53, 0xA54B, 0xCA55, 0xA54C, 0xCA56, 0xA54D, 0xCA57, 0xA54E, 0xCA58, 0xA54F, 0xCA59, + 0xA550, 0xCA5A, 0xA551, 0xCA5B, 0xA552, 0xCA5E, 0xA553, 0xCA62, 0xA554, 0xCA63, 0xA555, 0xCA64, 0xA556, 0xCA65, 0xA557, 0xCA66, + 0xA558, 0xCA67, 0xA559, 0xCA69, 0xA55A, 0xCA6A, 0xA561, 0xCA6B, 0xA562, 0xCA6C, 0xA563, 0xCA6D, 0xA564, 0xCA6E, 0xA565, 0xCA6F, + 0xA566, 0xCA70, 0xA567, 0xCA71, 0xA568, 0xCA72, 0xA569, 0xCA73, 0xA56A, 0xCA74, 0xA56B, 0xCA75, 0xA56C, 0xCA76, 0xA56D, 0xCA77, + 0xA56E, 0xCA78, 0xA56F, 0xCA79, 0xA570, 0xCA7A, 0xA571, 0xCA7B, 0xA572, 0xCA7C, 0xA573, 0xCA7E, 0xA574, 0xCA7F, 0xA575, 0xCA80, + 0xA576, 0xCA81, 0xA577, 0xCA82, 0xA578, 0xCA83, 0xA579, 0xCA85, 0xA57A, 0xCA86, 0xA581, 0xCA87, 0xA582, 0xCA88, 0xA583, 0xCA89, + 0xA584, 0xCA8A, 0xA585, 0xCA8B, 0xA586, 0xCA8C, 0xA587, 0xCA8D, 0xA588, 0xCA8E, 0xA589, 0xCA8F, 0xA58A, 0xCA90, 0xA58B, 0xCA91, + 0xA58C, 0xCA92, 0xA58D, 0xCA93, 0xA58E, 0xCA94, 0xA58F, 0xCA95, 0xA590, 0xCA96, 0xA591, 0xCA97, 0xA592, 0xCA99, 0xA593, 0xCA9A, + 0xA594, 0xCA9B, 0xA595, 0xCA9C, 0xA596, 0xCA9D, 0xA597, 0xCA9E, 0xA598, 0xCA9F, 0xA599, 0xCAA0, 0xA59A, 0xCAA1, 0xA59B, 0xCAA2, + 0xA59C, 0xCAA3, 0xA59D, 0xCAA4, 0xA59E, 0xCAA5, 0xA59F, 0xCAA6, 0xA5A0, 0xCAA7, 0xA5A1, 0x2170, 0xA5A2, 0x2171, 0xA5A3, 0x2172, + 0xA5A4, 0x2173, 0xA5A5, 0x2174, 0xA5A6, 0x2175, 0xA5A7, 0x2176, 0xA5A8, 0x2177, 0xA5A9, 0x2178, 0xA5AA, 0x2179, 0xA5B0, 0x2160, + 0xA5B1, 0x2161, 0xA5B2, 0x2162, 0xA5B3, 0x2163, 0xA5B4, 0x2164, 0xA5B5, 0x2165, 0xA5B6, 0x2166, 0xA5B7, 0x2167, 0xA5B8, 0x2168, + 0xA5B9, 0x2169, 0xA5C1, 0x0391, 0xA5C2, 0x0392, 0xA5C3, 0x0393, 0xA5C4, 0x0394, 0xA5C5, 0x0395, 0xA5C6, 0x0396, 0xA5C7, 0x0397, + 0xA5C8, 0x0398, 0xA5C9, 0x0399, 0xA5CA, 0x039A, 0xA5CB, 0x039B, 0xA5CC, 0x039C, 0xA5CD, 0x039D, 0xA5CE, 0x039E, 0xA5CF, 0x039F, + 0xA5D0, 0x03A0, 0xA5D1, 0x03A1, 0xA5D2, 0x03A3, 0xA5D3, 0x03A4, 0xA5D4, 0x03A5, 0xA5D5, 0x03A6, 0xA5D6, 0x03A7, 0xA5D7, 0x03A8, + 0xA5D8, 0x03A9, 0xA5E1, 0x03B1, 0xA5E2, 0x03B2, 0xA5E3, 0x03B3, 0xA5E4, 0x03B4, 0xA5E5, 0x03B5, 0xA5E6, 0x03B6, 0xA5E7, 0x03B7, + 0xA5E8, 0x03B8, 0xA5E9, 0x03B9, 0xA5EA, 0x03BA, 0xA5EB, 0x03BB, 0xA5EC, 0x03BC, 0xA5ED, 0x03BD, 0xA5EE, 0x03BE, 0xA5EF, 0x03BF, + 0xA5F0, 0x03C0, 0xA5F1, 0x03C1, 0xA5F2, 0x03C3, 0xA5F3, 0x03C4, 0xA5F4, 0x03C5, 0xA5F5, 0x03C6, 0xA5F6, 0x03C7, 0xA5F7, 0x03C8, + 0xA5F8, 0x03C9, 0xA641, 0xCAA8, 0xA642, 0xCAA9, 0xA643, 0xCAAA, 0xA644, 0xCAAB, 0xA645, 0xCAAC, 0xA646, 0xCAAD, 0xA647, 0xCAAE, + 0xA648, 0xCAAF, 0xA649, 0xCAB0, 0xA64A, 0xCAB1, 0xA64B, 0xCAB2, 0xA64C, 0xCAB3, 0xA64D, 0xCAB4, 0xA64E, 0xCAB5, 0xA64F, 0xCAB6, + 0xA650, 0xCAB7, 0xA651, 0xCAB8, 0xA652, 0xCAB9, 0xA653, 0xCABA, 0xA654, 0xCABB, 0xA655, 0xCABE, 0xA656, 0xCABF, 0xA657, 0xCAC1, + 0xA658, 0xCAC2, 0xA659, 0xCAC3, 0xA65A, 0xCAC5, 0xA661, 0xCAC6, 0xA662, 0xCAC7, 0xA663, 0xCAC8, 0xA664, 0xCAC9, 0xA665, 0xCACA, + 0xA666, 0xCACB, 0xA667, 0xCACE, 0xA668, 0xCAD0, 0xA669, 0xCAD2, 0xA66A, 0xCAD4, 0xA66B, 0xCAD5, 0xA66C, 0xCAD6, 0xA66D, 0xCAD7, + 0xA66E, 0xCADA, 0xA66F, 0xCADB, 0xA670, 0xCADC, 0xA671, 0xCADD, 0xA672, 0xCADE, 0xA673, 0xCADF, 0xA674, 0xCAE1, 0xA675, 0xCAE2, + 0xA676, 0xCAE3, 0xA677, 0xCAE4, 0xA678, 0xCAE5, 0xA679, 0xCAE6, 0xA67A, 0xCAE7, 0xA681, 0xCAE8, 0xA682, 0xCAE9, 0xA683, 0xCAEA, + 0xA684, 0xCAEB, 0xA685, 0xCAED, 0xA686, 0xCAEE, 0xA687, 0xCAEF, 0xA688, 0xCAF0, 0xA689, 0xCAF1, 0xA68A, 0xCAF2, 0xA68B, 0xCAF3, + 0xA68C, 0xCAF5, 0xA68D, 0xCAF6, 0xA68E, 0xCAF7, 0xA68F, 0xCAF8, 0xA690, 0xCAF9, 0xA691, 0xCAFA, 0xA692, 0xCAFB, 0xA693, 0xCAFC, + 0xA694, 0xCAFD, 0xA695, 0xCAFE, 0xA696, 0xCAFF, 0xA697, 0xCB00, 0xA698, 0xCB01, 0xA699, 0xCB02, 0xA69A, 0xCB03, 0xA69B, 0xCB04, + 0xA69C, 0xCB05, 0xA69D, 0xCB06, 0xA69E, 0xCB07, 0xA69F, 0xCB09, 0xA6A0, 0xCB0A, 0xA6A1, 0x2500, 0xA6A2, 0x2502, 0xA6A3, 0x250C, + 0xA6A4, 0x2510, 0xA6A5, 0x2518, 0xA6A6, 0x2514, 0xA6A7, 0x251C, 0xA6A8, 0x252C, 0xA6A9, 0x2524, 0xA6AA, 0x2534, 0xA6AB, 0x253C, + 0xA6AC, 0x2501, 0xA6AD, 0x2503, 0xA6AE, 0x250F, 0xA6AF, 0x2513, 0xA6B0, 0x251B, 0xA6B1, 0x2517, 0xA6B2, 0x2523, 0xA6B3, 0x2533, + 0xA6B4, 0x252B, 0xA6B5, 0x253B, 0xA6B6, 0x254B, 0xA6B7, 0x2520, 0xA6B8, 0x252F, 0xA6B9, 0x2528, 0xA6BA, 0x2537, 0xA6BB, 0x253F, + 0xA6BC, 0x251D, 0xA6BD, 0x2530, 0xA6BE, 0x2525, 0xA6BF, 0x2538, 0xA6C0, 0x2542, 0xA6C1, 0x2512, 0xA6C2, 0x2511, 0xA6C3, 0x251A, + 0xA6C4, 0x2519, 0xA6C5, 0x2516, 0xA6C6, 0x2515, 0xA6C7, 0x250E, 0xA6C8, 0x250D, 0xA6C9, 0x251E, 0xA6CA, 0x251F, 0xA6CB, 0x2521, + 0xA6CC, 0x2522, 0xA6CD, 0x2526, 0xA6CE, 0x2527, 0xA6CF, 0x2529, 0xA6D0, 0x252A, 0xA6D1, 0x252D, 0xA6D2, 0x252E, 0xA6D3, 0x2531, + 0xA6D4, 0x2532, 0xA6D5, 0x2535, 0xA6D6, 0x2536, 0xA6D7, 0x2539, 0xA6D8, 0x253A, 0xA6D9, 0x253D, 0xA6DA, 0x253E, 0xA6DB, 0x2540, + 0xA6DC, 0x2541, 0xA6DD, 0x2543, 0xA6DE, 0x2544, 0xA6DF, 0x2545, 0xA6E0, 0x2546, 0xA6E1, 0x2547, 0xA6E2, 0x2548, 0xA6E3, 0x2549, + 0xA6E4, 0x254A, 0xA741, 0xCB0B, 0xA742, 0xCB0C, 0xA743, 0xCB0D, 0xA744, 0xCB0E, 0xA745, 0xCB0F, 0xA746, 0xCB11, 0xA747, 0xCB12, + 0xA748, 0xCB13, 0xA749, 0xCB15, 0xA74A, 0xCB16, 0xA74B, 0xCB17, 0xA74C, 0xCB19, 0xA74D, 0xCB1A, 0xA74E, 0xCB1B, 0xA74F, 0xCB1C, + 0xA750, 0xCB1D, 0xA751, 0xCB1E, 0xA752, 0xCB1F, 0xA753, 0xCB22, 0xA754, 0xCB23, 0xA755, 0xCB24, 0xA756, 0xCB25, 0xA757, 0xCB26, + 0xA758, 0xCB27, 0xA759, 0xCB28, 0xA75A, 0xCB29, 0xA761, 0xCB2A, 0xA762, 0xCB2B, 0xA763, 0xCB2C, 0xA764, 0xCB2D, 0xA765, 0xCB2E, + 0xA766, 0xCB2F, 0xA767, 0xCB30, 0xA768, 0xCB31, 0xA769, 0xCB32, 0xA76A, 0xCB33, 0xA76B, 0xCB34, 0xA76C, 0xCB35, 0xA76D, 0xCB36, + 0xA76E, 0xCB37, 0xA76F, 0xCB38, 0xA770, 0xCB39, 0xA771, 0xCB3A, 0xA772, 0xCB3B, 0xA773, 0xCB3C, 0xA774, 0xCB3D, 0xA775, 0xCB3E, + 0xA776, 0xCB3F, 0xA777, 0xCB40, 0xA778, 0xCB42, 0xA779, 0xCB43, 0xA77A, 0xCB44, 0xA781, 0xCB45, 0xA782, 0xCB46, 0xA783, 0xCB47, + 0xA784, 0xCB4A, 0xA785, 0xCB4B, 0xA786, 0xCB4D, 0xA787, 0xCB4E, 0xA788, 0xCB4F, 0xA789, 0xCB51, 0xA78A, 0xCB52, 0xA78B, 0xCB53, + 0xA78C, 0xCB54, 0xA78D, 0xCB55, 0xA78E, 0xCB56, 0xA78F, 0xCB57, 0xA790, 0xCB5A, 0xA791, 0xCB5B, 0xA792, 0xCB5C, 0xA793, 0xCB5E, + 0xA794, 0xCB5F, 0xA795, 0xCB60, 0xA796, 0xCB61, 0xA797, 0xCB62, 0xA798, 0xCB63, 0xA799, 0xCB65, 0xA79A, 0xCB66, 0xA79B, 0xCB67, + 0xA79C, 0xCB68, 0xA79D, 0xCB69, 0xA79E, 0xCB6A, 0xA79F, 0xCB6B, 0xA7A0, 0xCB6C, 0xA7A1, 0x3395, 0xA7A2, 0x3396, 0xA7A3, 0x3397, + 0xA7A4, 0x2113, 0xA7A5, 0x3398, 0xA7A6, 0x33C4, 0xA7A7, 0x33A3, 0xA7A8, 0x33A4, 0xA7A9, 0x33A5, 0xA7AA, 0x33A6, 0xA7AB, 0x3399, + 0xA7AC, 0x339A, 0xA7AD, 0x339B, 0xA7AE, 0x339C, 0xA7AF, 0x339D, 0xA7B0, 0x339E, 0xA7B1, 0x339F, 0xA7B2, 0x33A0, 0xA7B3, 0x33A1, + 0xA7B4, 0x33A2, 0xA7B5, 0x33CA, 0xA7B6, 0x338D, 0xA7B7, 0x338E, 0xA7B8, 0x338F, 0xA7B9, 0x33CF, 0xA7BA, 0x3388, 0xA7BB, 0x3389, + 0xA7BC, 0x33C8, 0xA7BD, 0x33A7, 0xA7BE, 0x33A8, 0xA7BF, 0x33B0, 0xA7C0, 0x33B1, 0xA7C1, 0x33B2, 0xA7C2, 0x33B3, 0xA7C3, 0x33B4, + 0xA7C4, 0x33B5, 0xA7C5, 0x33B6, 0xA7C6, 0x33B7, 0xA7C7, 0x33B8, 0xA7C8, 0x33B9, 0xA7C9, 0x3380, 0xA7CA, 0x3381, 0xA7CB, 0x3382, + 0xA7CC, 0x3383, 0xA7CD, 0x3384, 0xA7CE, 0x33BA, 0xA7CF, 0x33BB, 0xA7D0, 0x33BC, 0xA7D1, 0x33BD, 0xA7D2, 0x33BE, 0xA7D3, 0x33BF, + 0xA7D4, 0x3390, 0xA7D5, 0x3391, 0xA7D6, 0x3392, 0xA7D7, 0x3393, 0xA7D8, 0x3394, 0xA7D9, 0x2126, 0xA7DA, 0x33C0, 0xA7DB, 0x33C1, + 0xA7DC, 0x338A, 0xA7DD, 0x338B, 0xA7DE, 0x338C, 0xA7DF, 0x33D6, 0xA7E0, 0x33C5, 0xA7E1, 0x33AD, 0xA7E2, 0x33AE, 0xA7E3, 0x33AF, + 0xA7E4, 0x33DB, 0xA7E5, 0x33A9, 0xA7E6, 0x33AA, 0xA7E7, 0x33AB, 0xA7E8, 0x33AC, 0xA7E9, 0x33DD, 0xA7EA, 0x33D0, 0xA7EB, 0x33D3, + 0xA7EC, 0x33C3, 0xA7ED, 0x33C9, 0xA7EE, 0x33DC, 0xA7EF, 0x33C6, 0xA841, 0xCB6D, 0xA842, 0xCB6E, 0xA843, 0xCB6F, 0xA844, 0xCB70, + 0xA845, 0xCB71, 0xA846, 0xCB72, 0xA847, 0xCB73, 0xA848, 0xCB74, 0xA849, 0xCB75, 0xA84A, 0xCB76, 0xA84B, 0xCB77, 0xA84C, 0xCB7A, + 0xA84D, 0xCB7B, 0xA84E, 0xCB7C, 0xA84F, 0xCB7D, 0xA850, 0xCB7E, 0xA851, 0xCB7F, 0xA852, 0xCB80, 0xA853, 0xCB81, 0xA854, 0xCB82, + 0xA855, 0xCB83, 0xA856, 0xCB84, 0xA857, 0xCB85, 0xA858, 0xCB86, 0xA859, 0xCB87, 0xA85A, 0xCB88, 0xA861, 0xCB89, 0xA862, 0xCB8A, + 0xA863, 0xCB8B, 0xA864, 0xCB8C, 0xA865, 0xCB8D, 0xA866, 0xCB8E, 0xA867, 0xCB8F, 0xA868, 0xCB90, 0xA869, 0xCB91, 0xA86A, 0xCB92, + 0xA86B, 0xCB93, 0xA86C, 0xCB94, 0xA86D, 0xCB95, 0xA86E, 0xCB96, 0xA86F, 0xCB97, 0xA870, 0xCB98, 0xA871, 0xCB99, 0xA872, 0xCB9A, + 0xA873, 0xCB9B, 0xA874, 0xCB9D, 0xA875, 0xCB9E, 0xA876, 0xCB9F, 0xA877, 0xCBA0, 0xA878, 0xCBA1, 0xA879, 0xCBA2, 0xA87A, 0xCBA3, + 0xA881, 0xCBA4, 0xA882, 0xCBA5, 0xA883, 0xCBA6, 0xA884, 0xCBA7, 0xA885, 0xCBA8, 0xA886, 0xCBA9, 0xA887, 0xCBAA, 0xA888, 0xCBAB, + 0xA889, 0xCBAC, 0xA88A, 0xCBAD, 0xA88B, 0xCBAE, 0xA88C, 0xCBAF, 0xA88D, 0xCBB0, 0xA88E, 0xCBB1, 0xA88F, 0xCBB2, 0xA890, 0xCBB3, + 0xA891, 0xCBB4, 0xA892, 0xCBB5, 0xA893, 0xCBB6, 0xA894, 0xCBB7, 0xA895, 0xCBB9, 0xA896, 0xCBBA, 0xA897, 0xCBBB, 0xA898, 0xCBBC, + 0xA899, 0xCBBD, 0xA89A, 0xCBBE, 0xA89B, 0xCBBF, 0xA89C, 0xCBC0, 0xA89D, 0xCBC1, 0xA89E, 0xCBC2, 0xA89F, 0xCBC3, 0xA8A0, 0xCBC4, + 0xA8A1, 0x00C6, 0xA8A2, 0x00D0, 0xA8A3, 0x00AA, 0xA8A4, 0x0126, 0xA8A6, 0x0132, 0xA8A8, 0x013F, 0xA8A9, 0x0141, 0xA8AA, 0x00D8, + 0xA8AB, 0x0152, 0xA8AC, 0x00BA, 0xA8AD, 0x00DE, 0xA8AE, 0x0166, 0xA8AF, 0x014A, 0xA8B1, 0x3260, 0xA8B2, 0x3261, 0xA8B3, 0x3262, + 0xA8B4, 0x3263, 0xA8B5, 0x3264, 0xA8B6, 0x3265, 0xA8B7, 0x3266, 0xA8B8, 0x3267, 0xA8B9, 0x3268, 0xA8BA, 0x3269, 0xA8BB, 0x326A, + 0xA8BC, 0x326B, 0xA8BD, 0x326C, 0xA8BE, 0x326D, 0xA8BF, 0x326E, 0xA8C0, 0x326F, 0xA8C1, 0x3270, 0xA8C2, 0x3271, 0xA8C3, 0x3272, + 0xA8C4, 0x3273, 0xA8C5, 0x3274, 0xA8C6, 0x3275, 0xA8C7, 0x3276, 0xA8C8, 0x3277, 0xA8C9, 0x3278, 0xA8CA, 0x3279, 0xA8CB, 0x327A, + 0xA8CC, 0x327B, 0xA8CD, 0x24D0, 0xA8CE, 0x24D1, 0xA8CF, 0x24D2, 0xA8D0, 0x24D3, 0xA8D1, 0x24D4, 0xA8D2, 0x24D5, 0xA8D3, 0x24D6, + 0xA8D4, 0x24D7, 0xA8D5, 0x24D8, 0xA8D6, 0x24D9, 0xA8D7, 0x24DA, 0xA8D8, 0x24DB, 0xA8D9, 0x24DC, 0xA8DA, 0x24DD, 0xA8DB, 0x24DE, + 0xA8DC, 0x24DF, 0xA8DD, 0x24E0, 0xA8DE, 0x24E1, 0xA8DF, 0x24E2, 0xA8E0, 0x24E3, 0xA8E1, 0x24E4, 0xA8E2, 0x24E5, 0xA8E3, 0x24E6, + 0xA8E4, 0x24E7, 0xA8E5, 0x24E8, 0xA8E6, 0x24E9, 0xA8E7, 0x2460, 0xA8E8, 0x2461, 0xA8E9, 0x2462, 0xA8EA, 0x2463, 0xA8EB, 0x2464, + 0xA8EC, 0x2465, 0xA8ED, 0x2466, 0xA8EE, 0x2467, 0xA8EF, 0x2468, 0xA8F0, 0x2469, 0xA8F1, 0x246A, 0xA8F2, 0x246B, 0xA8F3, 0x246C, + 0xA8F4, 0x246D, 0xA8F5, 0x246E, 0xA8F6, 0x00BD, 0xA8F7, 0x2153, 0xA8F8, 0x2154, 0xA8F9, 0x00BC, 0xA8FA, 0x00BE, 0xA8FB, 0x215B, + 0xA8FC, 0x215C, 0xA8FD, 0x215D, 0xA8FE, 0x215E, 0xA941, 0xCBC5, 0xA942, 0xCBC6, 0xA943, 0xCBC7, 0xA944, 0xCBC8, 0xA945, 0xCBC9, + 0xA946, 0xCBCA, 0xA947, 0xCBCB, 0xA948, 0xCBCC, 0xA949, 0xCBCD, 0xA94A, 0xCBCE, 0xA94B, 0xCBCF, 0xA94C, 0xCBD0, 0xA94D, 0xCBD1, + 0xA94E, 0xCBD2, 0xA94F, 0xCBD3, 0xA950, 0xCBD5, 0xA951, 0xCBD6, 0xA952, 0xCBD7, 0xA953, 0xCBD8, 0xA954, 0xCBD9, 0xA955, 0xCBDA, + 0xA956, 0xCBDB, 0xA957, 0xCBDC, 0xA958, 0xCBDD, 0xA959, 0xCBDE, 0xA95A, 0xCBDF, 0xA961, 0xCBE0, 0xA962, 0xCBE1, 0xA963, 0xCBE2, + 0xA964, 0xCBE3, 0xA965, 0xCBE5, 0xA966, 0xCBE6, 0xA967, 0xCBE8, 0xA968, 0xCBEA, 0xA969, 0xCBEB, 0xA96A, 0xCBEC, 0xA96B, 0xCBED, + 0xA96C, 0xCBEE, 0xA96D, 0xCBEF, 0xA96E, 0xCBF0, 0xA96F, 0xCBF1, 0xA970, 0xCBF2, 0xA971, 0xCBF3, 0xA972, 0xCBF4, 0xA973, 0xCBF5, + 0xA974, 0xCBF6, 0xA975, 0xCBF7, 0xA976, 0xCBF8, 0xA977, 0xCBF9, 0xA978, 0xCBFA, 0xA979, 0xCBFB, 0xA97A, 0xCBFC, 0xA981, 0xCBFD, + 0xA982, 0xCBFE, 0xA983, 0xCBFF, 0xA984, 0xCC00, 0xA985, 0xCC01, 0xA986, 0xCC02, 0xA987, 0xCC03, 0xA988, 0xCC04, 0xA989, 0xCC05, + 0xA98A, 0xCC06, 0xA98B, 0xCC07, 0xA98C, 0xCC08, 0xA98D, 0xCC09, 0xA98E, 0xCC0A, 0xA98F, 0xCC0B, 0xA990, 0xCC0E, 0xA991, 0xCC0F, + 0xA992, 0xCC11, 0xA993, 0xCC12, 0xA994, 0xCC13, 0xA995, 0xCC15, 0xA996, 0xCC16, 0xA997, 0xCC17, 0xA998, 0xCC18, 0xA999, 0xCC19, + 0xA99A, 0xCC1A, 0xA99B, 0xCC1B, 0xA99C, 0xCC1E, 0xA99D, 0xCC1F, 0xA99E, 0xCC20, 0xA99F, 0xCC23, 0xA9A0, 0xCC24, 0xA9A1, 0x00E6, + 0xA9A2, 0x0111, 0xA9A3, 0x00F0, 0xA9A4, 0x0127, 0xA9A5, 0x0131, 0xA9A6, 0x0133, 0xA9A7, 0x0138, 0xA9A8, 0x0140, 0xA9A9, 0x0142, + 0xA9AA, 0x00F8, 0xA9AB, 0x0153, 0xA9AC, 0x00DF, 0xA9AD, 0x00FE, 0xA9AE, 0x0167, 0xA9AF, 0x014B, 0xA9B0, 0x0149, 0xA9B1, 0x3200, + 0xA9B2, 0x3201, 0xA9B3, 0x3202, 0xA9B4, 0x3203, 0xA9B5, 0x3204, 0xA9B6, 0x3205, 0xA9B7, 0x3206, 0xA9B8, 0x3207, 0xA9B9, 0x3208, + 0xA9BA, 0x3209, 0xA9BB, 0x320A, 0xA9BC, 0x320B, 0xA9BD, 0x320C, 0xA9BE, 0x320D, 0xA9BF, 0x320E, 0xA9C0, 0x320F, 0xA9C1, 0x3210, + 0xA9C2, 0x3211, 0xA9C3, 0x3212, 0xA9C4, 0x3213, 0xA9C5, 0x3214, 0xA9C6, 0x3215, 0xA9C7, 0x3216, 0xA9C8, 0x3217, 0xA9C9, 0x3218, + 0xA9CA, 0x3219, 0xA9CB, 0x321A, 0xA9CC, 0x321B, 0xA9CD, 0x249C, 0xA9CE, 0x249D, 0xA9CF, 0x249E, 0xA9D0, 0x249F, 0xA9D1, 0x24A0, + 0xA9D2, 0x24A1, 0xA9D3, 0x24A2, 0xA9D4, 0x24A3, 0xA9D5, 0x24A4, 0xA9D6, 0x24A5, 0xA9D7, 0x24A6, 0xA9D8, 0x24A7, 0xA9D9, 0x24A8, + 0xA9DA, 0x24A9, 0xA9DB, 0x24AA, 0xA9DC, 0x24AB, 0xA9DD, 0x24AC, 0xA9DE, 0x24AD, 0xA9DF, 0x24AE, 0xA9E0, 0x24AF, 0xA9E1, 0x24B0, + 0xA9E2, 0x24B1, 0xA9E3, 0x24B2, 0xA9E4, 0x24B3, 0xA9E5, 0x24B4, 0xA9E6, 0x24B5, 0xA9E7, 0x2474, 0xA9E8, 0x2475, 0xA9E9, 0x2476, + 0xA9EA, 0x2477, 0xA9EB, 0x2478, 0xA9EC, 0x2479, 0xA9ED, 0x247A, 0xA9EE, 0x247B, 0xA9EF, 0x247C, 0xA9F0, 0x247D, 0xA9F1, 0x247E, + 0xA9F2, 0x247F, 0xA9F3, 0x2480, 0xA9F4, 0x2481, 0xA9F5, 0x2482, 0xA9F6, 0x00B9, 0xA9F7, 0x00B2, 0xA9F8, 0x00B3, 0xA9F9, 0x2074, + 0xA9FA, 0x207F, 0xA9FB, 0x2081, 0xA9FC, 0x2082, 0xA9FD, 0x2083, 0xA9FE, 0x2084, 0xAA41, 0xCC25, 0xAA42, 0xCC26, 0xAA43, 0xCC2A, + 0xAA44, 0xCC2B, 0xAA45, 0xCC2D, 0xAA46, 0xCC2F, 0xAA47, 0xCC31, 0xAA48, 0xCC32, 0xAA49, 0xCC33, 0xAA4A, 0xCC34, 0xAA4B, 0xCC35, + 0xAA4C, 0xCC36, 0xAA4D, 0xCC37, 0xAA4E, 0xCC3A, 0xAA4F, 0xCC3F, 0xAA50, 0xCC40, 0xAA51, 0xCC41, 0xAA52, 0xCC42, 0xAA53, 0xCC43, + 0xAA54, 0xCC46, 0xAA55, 0xCC47, 0xAA56, 0xCC49, 0xAA57, 0xCC4A, 0xAA58, 0xCC4B, 0xAA59, 0xCC4D, 0xAA5A, 0xCC4E, 0xAA61, 0xCC4F, + 0xAA62, 0xCC50, 0xAA63, 0xCC51, 0xAA64, 0xCC52, 0xAA65, 0xCC53, 0xAA66, 0xCC56, 0xAA67, 0xCC5A, 0xAA68, 0xCC5B, 0xAA69, 0xCC5C, + 0xAA6A, 0xCC5D, 0xAA6B, 0xCC5E, 0xAA6C, 0xCC5F, 0xAA6D, 0xCC61, 0xAA6E, 0xCC62, 0xAA6F, 0xCC63, 0xAA70, 0xCC65, 0xAA71, 0xCC67, + 0xAA72, 0xCC69, 0xAA73, 0xCC6A, 0xAA74, 0xCC6B, 0xAA75, 0xCC6C, 0xAA76, 0xCC6D, 0xAA77, 0xCC6E, 0xAA78, 0xCC6F, 0xAA79, 0xCC71, + 0xAA7A, 0xCC72, 0xAA81, 0xCC73, 0xAA82, 0xCC74, 0xAA83, 0xCC76, 0xAA84, 0xCC77, 0xAA85, 0xCC78, 0xAA86, 0xCC79, 0xAA87, 0xCC7A, + 0xAA88, 0xCC7B, 0xAA89, 0xCC7C, 0xAA8A, 0xCC7D, 0xAA8B, 0xCC7E, 0xAA8C, 0xCC7F, 0xAA8D, 0xCC80, 0xAA8E, 0xCC81, 0xAA8F, 0xCC82, + 0xAA90, 0xCC83, 0xAA91, 0xCC84, 0xAA92, 0xCC85, 0xAA93, 0xCC86, 0xAA94, 0xCC87, 0xAA95, 0xCC88, 0xAA96, 0xCC89, 0xAA97, 0xCC8A, + 0xAA98, 0xCC8B, 0xAA99, 0xCC8C, 0xAA9A, 0xCC8D, 0xAA9B, 0xCC8E, 0xAA9C, 0xCC8F, 0xAA9D, 0xCC90, 0xAA9E, 0xCC91, 0xAA9F, 0xCC92, + 0xAAA0, 0xCC93, 0xAAA1, 0x3041, 0xAAA2, 0x3042, 0xAAA3, 0x3043, 0xAAA4, 0x3044, 0xAAA5, 0x3045, 0xAAA6, 0x3046, 0xAAA7, 0x3047, + 0xAAA8, 0x3048, 0xAAA9, 0x3049, 0xAAAA, 0x304A, 0xAAAB, 0x304B, 0xAAAC, 0x304C, 0xAAAD, 0x304D, 0xAAAE, 0x304E, 0xAAAF, 0x304F, + 0xAAB0, 0x3050, 0xAAB1, 0x3051, 0xAAB2, 0x3052, 0xAAB3, 0x3053, 0xAAB4, 0x3054, 0xAAB5, 0x3055, 0xAAB6, 0x3056, 0xAAB7, 0x3057, + 0xAAB8, 0x3058, 0xAAB9, 0x3059, 0xAABA, 0x305A, 0xAABB, 0x305B, 0xAABC, 0x305C, 0xAABD, 0x305D, 0xAABE, 0x305E, 0xAABF, 0x305F, + 0xAAC0, 0x3060, 0xAAC1, 0x3061, 0xAAC2, 0x3062, 0xAAC3, 0x3063, 0xAAC4, 0x3064, 0xAAC5, 0x3065, 0xAAC6, 0x3066, 0xAAC7, 0x3067, + 0xAAC8, 0x3068, 0xAAC9, 0x3069, 0xAACA, 0x306A, 0xAACB, 0x306B, 0xAACC, 0x306C, 0xAACD, 0x306D, 0xAACE, 0x306E, 0xAACF, 0x306F, + 0xAAD0, 0x3070, 0xAAD1, 0x3071, 0xAAD2, 0x3072, 0xAAD3, 0x3073, 0xAAD4, 0x3074, 0xAAD5, 0x3075, 0xAAD6, 0x3076, 0xAAD7, 0x3077, + 0xAAD8, 0x3078, 0xAAD9, 0x3079, 0xAADA, 0x307A, 0xAADB, 0x307B, 0xAADC, 0x307C, 0xAADD, 0x307D, 0xAADE, 0x307E, 0xAADF, 0x307F, + 0xAAE0, 0x3080, 0xAAE1, 0x3081, 0xAAE2, 0x3082, 0xAAE3, 0x3083, 0xAAE4, 0x3084, 0xAAE5, 0x3085, 0xAAE6, 0x3086, 0xAAE7, 0x3087, + 0xAAE8, 0x3088, 0xAAE9, 0x3089, 0xAAEA, 0x308A, 0xAAEB, 0x308B, 0xAAEC, 0x308C, 0xAAED, 0x308D, 0xAAEE, 0x308E, 0xAAEF, 0x308F, + 0xAAF0, 0x3090, 0xAAF1, 0x3091, 0xAAF2, 0x3092, 0xAAF3, 0x3093, 0xAB41, 0xCC94, 0xAB42, 0xCC95, 0xAB43, 0xCC96, 0xAB44, 0xCC97, + 0xAB45, 0xCC9A, 0xAB46, 0xCC9B, 0xAB47, 0xCC9D, 0xAB48, 0xCC9E, 0xAB49, 0xCC9F, 0xAB4A, 0xCCA1, 0xAB4B, 0xCCA2, 0xAB4C, 0xCCA3, + 0xAB4D, 0xCCA4, 0xAB4E, 0xCCA5, 0xAB4F, 0xCCA6, 0xAB50, 0xCCA7, 0xAB51, 0xCCAA, 0xAB52, 0xCCAE, 0xAB53, 0xCCAF, 0xAB54, 0xCCB0, + 0xAB55, 0xCCB1, 0xAB56, 0xCCB2, 0xAB57, 0xCCB3, 0xAB58, 0xCCB6, 0xAB59, 0xCCB7, 0xAB5A, 0xCCB9, 0xAB61, 0xCCBA, 0xAB62, 0xCCBB, + 0xAB63, 0xCCBD, 0xAB64, 0xCCBE, 0xAB65, 0xCCBF, 0xAB66, 0xCCC0, 0xAB67, 0xCCC1, 0xAB68, 0xCCC2, 0xAB69, 0xCCC3, 0xAB6A, 0xCCC6, + 0xAB6B, 0xCCC8, 0xAB6C, 0xCCCA, 0xAB6D, 0xCCCB, 0xAB6E, 0xCCCC, 0xAB6F, 0xCCCD, 0xAB70, 0xCCCE, 0xAB71, 0xCCCF, 0xAB72, 0xCCD1, + 0xAB73, 0xCCD2, 0xAB74, 0xCCD3, 0xAB75, 0xCCD5, 0xAB76, 0xCCD6, 0xAB77, 0xCCD7, 0xAB78, 0xCCD8, 0xAB79, 0xCCD9, 0xAB7A, 0xCCDA, + 0xAB81, 0xCCDB, 0xAB82, 0xCCDC, 0xAB83, 0xCCDD, 0xAB84, 0xCCDE, 0xAB85, 0xCCDF, 0xAB86, 0xCCE0, 0xAB87, 0xCCE1, 0xAB88, 0xCCE2, + 0xAB89, 0xCCE3, 0xAB8A, 0xCCE5, 0xAB8B, 0xCCE6, 0xAB8C, 0xCCE7, 0xAB8D, 0xCCE8, 0xAB8E, 0xCCE9, 0xAB8F, 0xCCEA, 0xAB90, 0xCCEB, + 0xAB91, 0xCCED, 0xAB92, 0xCCEE, 0xAB93, 0xCCEF, 0xAB94, 0xCCF1, 0xAB95, 0xCCF2, 0xAB96, 0xCCF3, 0xAB97, 0xCCF4, 0xAB98, 0xCCF5, + 0xAB99, 0xCCF6, 0xAB9A, 0xCCF7, 0xAB9B, 0xCCF8, 0xAB9C, 0xCCF9, 0xAB9D, 0xCCFA, 0xAB9E, 0xCCFB, 0xAB9F, 0xCCFC, 0xABA0, 0xCCFD, + 0xABA1, 0x30A1, 0xABA2, 0x30A2, 0xABA3, 0x30A3, 0xABA4, 0x30A4, 0xABA5, 0x30A5, 0xABA6, 0x30A6, 0xABA7, 0x30A7, 0xABA8, 0x30A8, + 0xABA9, 0x30A9, 0xABAA, 0x30AA, 0xABAB, 0x30AB, 0xABAC, 0x30AC, 0xABAD, 0x30AD, 0xABAE, 0x30AE, 0xABAF, 0x30AF, 0xABB0, 0x30B0, + 0xABB1, 0x30B1, 0xABB2, 0x30B2, 0xABB3, 0x30B3, 0xABB4, 0x30B4, 0xABB5, 0x30B5, 0xABB6, 0x30B6, 0xABB7, 0x30B7, 0xABB8, 0x30B8, + 0xABB9, 0x30B9, 0xABBA, 0x30BA, 0xABBB, 0x30BB, 0xABBC, 0x30BC, 0xABBD, 0x30BD, 0xABBE, 0x30BE, 0xABBF, 0x30BF, 0xABC0, 0x30C0, + 0xABC1, 0x30C1, 0xABC2, 0x30C2, 0xABC3, 0x30C3, 0xABC4, 0x30C4, 0xABC5, 0x30C5, 0xABC6, 0x30C6, 0xABC7, 0x30C7, 0xABC8, 0x30C8, + 0xABC9, 0x30C9, 0xABCA, 0x30CA, 0xABCB, 0x30CB, 0xABCC, 0x30CC, 0xABCD, 0x30CD, 0xABCE, 0x30CE, 0xABCF, 0x30CF, 0xABD0, 0x30D0, + 0xABD1, 0x30D1, 0xABD2, 0x30D2, 0xABD3, 0x30D3, 0xABD4, 0x30D4, 0xABD5, 0x30D5, 0xABD6, 0x30D6, 0xABD7, 0x30D7, 0xABD8, 0x30D8, + 0xABD9, 0x30D9, 0xABDA, 0x30DA, 0xABDB, 0x30DB, 0xABDC, 0x30DC, 0xABDD, 0x30DD, 0xABDE, 0x30DE, 0xABDF, 0x30DF, 0xABE0, 0x30E0, + 0xABE1, 0x30E1, 0xABE2, 0x30E2, 0xABE3, 0x30E3, 0xABE4, 0x30E4, 0xABE5, 0x30E5, 0xABE6, 0x30E6, 0xABE7, 0x30E7, 0xABE8, 0x30E8, + 0xABE9, 0x30E9, 0xABEA, 0x30EA, 0xABEB, 0x30EB, 0xABEC, 0x30EC, 0xABED, 0x30ED, 0xABEE, 0x30EE, 0xABEF, 0x30EF, 0xABF0, 0x30F0, + 0xABF1, 0x30F1, 0xABF2, 0x30F2, 0xABF3, 0x30F3, 0xABF4, 0x30F4, 0xABF5, 0x30F5, 0xABF6, 0x30F6, 0xAC41, 0xCCFE, 0xAC42, 0xCCFF, + 0xAC43, 0xCD00, 0xAC44, 0xCD02, 0xAC45, 0xCD03, 0xAC46, 0xCD04, 0xAC47, 0xCD05, 0xAC48, 0xCD06, 0xAC49, 0xCD07, 0xAC4A, 0xCD0A, + 0xAC4B, 0xCD0B, 0xAC4C, 0xCD0D, 0xAC4D, 0xCD0E, 0xAC4E, 0xCD0F, 0xAC4F, 0xCD11, 0xAC50, 0xCD12, 0xAC51, 0xCD13, 0xAC52, 0xCD14, + 0xAC53, 0xCD15, 0xAC54, 0xCD16, 0xAC55, 0xCD17, 0xAC56, 0xCD1A, 0xAC57, 0xCD1C, 0xAC58, 0xCD1E, 0xAC59, 0xCD1F, 0xAC5A, 0xCD20, + 0xAC61, 0xCD21, 0xAC62, 0xCD22, 0xAC63, 0xCD23, 0xAC64, 0xCD25, 0xAC65, 0xCD26, 0xAC66, 0xCD27, 0xAC67, 0xCD29, 0xAC68, 0xCD2A, + 0xAC69, 0xCD2B, 0xAC6A, 0xCD2D, 0xAC6B, 0xCD2E, 0xAC6C, 0xCD2F, 0xAC6D, 0xCD30, 0xAC6E, 0xCD31, 0xAC6F, 0xCD32, 0xAC70, 0xCD33, + 0xAC71, 0xCD34, 0xAC72, 0xCD35, 0xAC73, 0xCD36, 0xAC74, 0xCD37, 0xAC75, 0xCD38, 0xAC76, 0xCD3A, 0xAC77, 0xCD3B, 0xAC78, 0xCD3C, + 0xAC79, 0xCD3D, 0xAC7A, 0xCD3E, 0xAC81, 0xCD3F, 0xAC82, 0xCD40, 0xAC83, 0xCD41, 0xAC84, 0xCD42, 0xAC85, 0xCD43, 0xAC86, 0xCD44, + 0xAC87, 0xCD45, 0xAC88, 0xCD46, 0xAC89, 0xCD47, 0xAC8A, 0xCD48, 0xAC8B, 0xCD49, 0xAC8C, 0xCD4A, 0xAC8D, 0xCD4B, 0xAC8E, 0xCD4C, + 0xAC8F, 0xCD4D, 0xAC90, 0xCD4E, 0xAC91, 0xCD4F, 0xAC92, 0xCD50, 0xAC93, 0xCD51, 0xAC94, 0xCD52, 0xAC95, 0xCD53, 0xAC96, 0xCD54, + 0xAC97, 0xCD55, 0xAC98, 0xCD56, 0xAC99, 0xCD57, 0xAC9A, 0xCD58, 0xAC9B, 0xCD59, 0xAC9C, 0xCD5A, 0xAC9D, 0xCD5B, 0xAC9E, 0xCD5D, + 0xAC9F, 0xCD5E, 0xACA0, 0xCD5F, 0xACA1, 0x0410, 0xACA2, 0x0411, 0xACA3, 0x0412, 0xACA4, 0x0413, 0xACA5, 0x0414, 0xACA6, 0x0415, + 0xACA7, 0x0401, 0xACA8, 0x0416, 0xACA9, 0x0417, 0xACAA, 0x0418, 0xACAB, 0x0419, 0xACAC, 0x041A, 0xACAD, 0x041B, 0xACAE, 0x041C, + 0xACAF, 0x041D, 0xACB0, 0x041E, 0xACB1, 0x041F, 0xACB2, 0x0420, 0xACB3, 0x0421, 0xACB4, 0x0422, 0xACB5, 0x0423, 0xACB6, 0x0424, + 0xACB7, 0x0425, 0xACB8, 0x0426, 0xACB9, 0x0427, 0xACBA, 0x0428, 0xACBB, 0x0429, 0xACBC, 0x042A, 0xACBD, 0x042B, 0xACBE, 0x042C, + 0xACBF, 0x042D, 0xACC0, 0x042E, 0xACC1, 0x042F, 0xACD1, 0x0430, 0xACD2, 0x0431, 0xACD3, 0x0432, 0xACD4, 0x0433, 0xACD5, 0x0434, + 0xACD6, 0x0435, 0xACD7, 0x0451, 0xACD8, 0x0436, 0xACD9, 0x0437, 0xACDA, 0x0438, 0xACDB, 0x0439, 0xACDC, 0x043A, 0xACDD, 0x043B, + 0xACDE, 0x043C, 0xACDF, 0x043D, 0xACE0, 0x043E, 0xACE1, 0x043F, 0xACE2, 0x0440, 0xACE3, 0x0441, 0xACE4, 0x0442, 0xACE5, 0x0443, + 0xACE6, 0x0444, 0xACE7, 0x0445, 0xACE8, 0x0446, 0xACE9, 0x0447, 0xACEA, 0x0448, 0xACEB, 0x0449, 0xACEC, 0x044A, 0xACED, 0x044B, + 0xACEE, 0x044C, 0xACEF, 0x044D, 0xACF0, 0x044E, 0xACF1, 0x044F, 0xAD41, 0xCD61, 0xAD42, 0xCD62, 0xAD43, 0xCD63, 0xAD44, 0xCD65, + 0xAD45, 0xCD66, 0xAD46, 0xCD67, 0xAD47, 0xCD68, 0xAD48, 0xCD69, 0xAD49, 0xCD6A, 0xAD4A, 0xCD6B, 0xAD4B, 0xCD6E, 0xAD4C, 0xCD70, + 0xAD4D, 0xCD72, 0xAD4E, 0xCD73, 0xAD4F, 0xCD74, 0xAD50, 0xCD75, 0xAD51, 0xCD76, 0xAD52, 0xCD77, 0xAD53, 0xCD79, 0xAD54, 0xCD7A, + 0xAD55, 0xCD7B, 0xAD56, 0xCD7C, 0xAD57, 0xCD7D, 0xAD58, 0xCD7E, 0xAD59, 0xCD7F, 0xAD5A, 0xCD80, 0xAD61, 0xCD81, 0xAD62, 0xCD82, + 0xAD63, 0xCD83, 0xAD64, 0xCD84, 0xAD65, 0xCD85, 0xAD66, 0xCD86, 0xAD67, 0xCD87, 0xAD68, 0xCD89, 0xAD69, 0xCD8A, 0xAD6A, 0xCD8B, + 0xAD6B, 0xCD8C, 0xAD6C, 0xCD8D, 0xAD6D, 0xCD8E, 0xAD6E, 0xCD8F, 0xAD6F, 0xCD90, 0xAD70, 0xCD91, 0xAD71, 0xCD92, 0xAD72, 0xCD93, + 0xAD73, 0xCD96, 0xAD74, 0xCD97, 0xAD75, 0xCD99, 0xAD76, 0xCD9A, 0xAD77, 0xCD9B, 0xAD78, 0xCD9D, 0xAD79, 0xCD9E, 0xAD7A, 0xCD9F, + 0xAD81, 0xCDA0, 0xAD82, 0xCDA1, 0xAD83, 0xCDA2, 0xAD84, 0xCDA3, 0xAD85, 0xCDA6, 0xAD86, 0xCDA8, 0xAD87, 0xCDAA, 0xAD88, 0xCDAB, + 0xAD89, 0xCDAC, 0xAD8A, 0xCDAD, 0xAD8B, 0xCDAE, 0xAD8C, 0xCDAF, 0xAD8D, 0xCDB1, 0xAD8E, 0xCDB2, 0xAD8F, 0xCDB3, 0xAD90, 0xCDB4, + 0xAD91, 0xCDB5, 0xAD92, 0xCDB6, 0xAD93, 0xCDB7, 0xAD94, 0xCDB8, 0xAD95, 0xCDB9, 0xAD96, 0xCDBA, 0xAD97, 0xCDBB, 0xAD98, 0xCDBC, + 0xAD99, 0xCDBD, 0xAD9A, 0xCDBE, 0xAD9B, 0xCDBF, 0xAD9C, 0xCDC0, 0xAD9D, 0xCDC1, 0xAD9E, 0xCDC2, 0xAD9F, 0xCDC3, 0xADA0, 0xCDC5, + 0xAE41, 0xCDC6, 0xAE42, 0xCDC7, 0xAE43, 0xCDC8, 0xAE44, 0xCDC9, 0xAE45, 0xCDCA, 0xAE46, 0xCDCB, 0xAE47, 0xCDCD, 0xAE48, 0xCDCE, + 0xAE49, 0xCDCF, 0xAE4A, 0xCDD1, 0xAE4B, 0xCDD2, 0xAE4C, 0xCDD3, 0xAE4D, 0xCDD4, 0xAE4E, 0xCDD5, 0xAE4F, 0xCDD6, 0xAE50, 0xCDD7, + 0xAE51, 0xCDD8, 0xAE52, 0xCDD9, 0xAE53, 0xCDDA, 0xAE54, 0xCDDB, 0xAE55, 0xCDDC, 0xAE56, 0xCDDD, 0xAE57, 0xCDDE, 0xAE58, 0xCDDF, + 0xAE59, 0xCDE0, 0xAE5A, 0xCDE1, 0xAE61, 0xCDE2, 0xAE62, 0xCDE3, 0xAE63, 0xCDE4, 0xAE64, 0xCDE5, 0xAE65, 0xCDE6, 0xAE66, 0xCDE7, + 0xAE67, 0xCDE9, 0xAE68, 0xCDEA, 0xAE69, 0xCDEB, 0xAE6A, 0xCDED, 0xAE6B, 0xCDEE, 0xAE6C, 0xCDEF, 0xAE6D, 0xCDF1, 0xAE6E, 0xCDF2, + 0xAE6F, 0xCDF3, 0xAE70, 0xCDF4, 0xAE71, 0xCDF5, 0xAE72, 0xCDF6, 0xAE73, 0xCDF7, 0xAE74, 0xCDFA, 0xAE75, 0xCDFC, 0xAE76, 0xCDFE, + 0xAE77, 0xCDFF, 0xAE78, 0xCE00, 0xAE79, 0xCE01, 0xAE7A, 0xCE02, 0xAE81, 0xCE03, 0xAE82, 0xCE05, 0xAE83, 0xCE06, 0xAE84, 0xCE07, + 0xAE85, 0xCE09, 0xAE86, 0xCE0A, 0xAE87, 0xCE0B, 0xAE88, 0xCE0D, 0xAE89, 0xCE0E, 0xAE8A, 0xCE0F, 0xAE8B, 0xCE10, 0xAE8C, 0xCE11, + 0xAE8D, 0xCE12, 0xAE8E, 0xCE13, 0xAE8F, 0xCE15, 0xAE90, 0xCE16, 0xAE91, 0xCE17, 0xAE92, 0xCE18, 0xAE93, 0xCE1A, 0xAE94, 0xCE1B, + 0xAE95, 0xCE1C, 0xAE96, 0xCE1D, 0xAE97, 0xCE1E, 0xAE98, 0xCE1F, 0xAE99, 0xCE22, 0xAE9A, 0xCE23, 0xAE9B, 0xCE25, 0xAE9C, 0xCE26, + 0xAE9D, 0xCE27, 0xAE9E, 0xCE29, 0xAE9F, 0xCE2A, 0xAEA0, 0xCE2B, 0xAF41, 0xCE2C, 0xAF42, 0xCE2D, 0xAF43, 0xCE2E, 0xAF44, 0xCE2F, + 0xAF45, 0xCE32, 0xAF46, 0xCE34, 0xAF47, 0xCE36, 0xAF48, 0xCE37, 0xAF49, 0xCE38, 0xAF4A, 0xCE39, 0xAF4B, 0xCE3A, 0xAF4C, 0xCE3B, + 0xAF4D, 0xCE3C, 0xAF4E, 0xCE3D, 0xAF4F, 0xCE3E, 0xAF50, 0xCE3F, 0xAF51, 0xCE40, 0xAF52, 0xCE41, 0xAF53, 0xCE42, 0xAF54, 0xCE43, + 0xAF55, 0xCE44, 0xAF56, 0xCE45, 0xAF57, 0xCE46, 0xAF58, 0xCE47, 0xAF59, 0xCE48, 0xAF5A, 0xCE49, 0xAF61, 0xCE4A, 0xAF62, 0xCE4B, + 0xAF63, 0xCE4C, 0xAF64, 0xCE4D, 0xAF65, 0xCE4E, 0xAF66, 0xCE4F, 0xAF67, 0xCE50, 0xAF68, 0xCE51, 0xAF69, 0xCE52, 0xAF6A, 0xCE53, + 0xAF6B, 0xCE54, 0xAF6C, 0xCE55, 0xAF6D, 0xCE56, 0xAF6E, 0xCE57, 0xAF6F, 0xCE5A, 0xAF70, 0xCE5B, 0xAF71, 0xCE5D, 0xAF72, 0xCE5E, + 0xAF73, 0xCE62, 0xAF74, 0xCE63, 0xAF75, 0xCE64, 0xAF76, 0xCE65, 0xAF77, 0xCE66, 0xAF78, 0xCE67, 0xAF79, 0xCE6A, 0xAF7A, 0xCE6C, + 0xAF81, 0xCE6E, 0xAF82, 0xCE6F, 0xAF83, 0xCE70, 0xAF84, 0xCE71, 0xAF85, 0xCE72, 0xAF86, 0xCE73, 0xAF87, 0xCE76, 0xAF88, 0xCE77, + 0xAF89, 0xCE79, 0xAF8A, 0xCE7A, 0xAF8B, 0xCE7B, 0xAF8C, 0xCE7D, 0xAF8D, 0xCE7E, 0xAF8E, 0xCE7F, 0xAF8F, 0xCE80, 0xAF90, 0xCE81, + 0xAF91, 0xCE82, 0xAF92, 0xCE83, 0xAF93, 0xCE86, 0xAF94, 0xCE88, 0xAF95, 0xCE8A, 0xAF96, 0xCE8B, 0xAF97, 0xCE8C, 0xAF98, 0xCE8D, + 0xAF99, 0xCE8E, 0xAF9A, 0xCE8F, 0xAF9B, 0xCE92, 0xAF9C, 0xCE93, 0xAF9D, 0xCE95, 0xAF9E, 0xCE96, 0xAF9F, 0xCE97, 0xAFA0, 0xCE99, + 0xB041, 0xCE9A, 0xB042, 0xCE9B, 0xB043, 0xCE9C, 0xB044, 0xCE9D, 0xB045, 0xCE9E, 0xB046, 0xCE9F, 0xB047, 0xCEA2, 0xB048, 0xCEA6, + 0xB049, 0xCEA7, 0xB04A, 0xCEA8, 0xB04B, 0xCEA9, 0xB04C, 0xCEAA, 0xB04D, 0xCEAB, 0xB04E, 0xCEAE, 0xB04F, 0xCEAF, 0xB050, 0xCEB0, + 0xB051, 0xCEB1, 0xB052, 0xCEB2, 0xB053, 0xCEB3, 0xB054, 0xCEB4, 0xB055, 0xCEB5, 0xB056, 0xCEB6, 0xB057, 0xCEB7, 0xB058, 0xCEB8, + 0xB059, 0xCEB9, 0xB05A, 0xCEBA, 0xB061, 0xCEBB, 0xB062, 0xCEBC, 0xB063, 0xCEBD, 0xB064, 0xCEBE, 0xB065, 0xCEBF, 0xB066, 0xCEC0, + 0xB067, 0xCEC2, 0xB068, 0xCEC3, 0xB069, 0xCEC4, 0xB06A, 0xCEC5, 0xB06B, 0xCEC6, 0xB06C, 0xCEC7, 0xB06D, 0xCEC8, 0xB06E, 0xCEC9, + 0xB06F, 0xCECA, 0xB070, 0xCECB, 0xB071, 0xCECC, 0xB072, 0xCECD, 0xB073, 0xCECE, 0xB074, 0xCECF, 0xB075, 0xCED0, 0xB076, 0xCED1, + 0xB077, 0xCED2, 0xB078, 0xCED3, 0xB079, 0xCED4, 0xB07A, 0xCED5, 0xB081, 0xCED6, 0xB082, 0xCED7, 0xB083, 0xCED8, 0xB084, 0xCED9, + 0xB085, 0xCEDA, 0xB086, 0xCEDB, 0xB087, 0xCEDC, 0xB088, 0xCEDD, 0xB089, 0xCEDE, 0xB08A, 0xCEDF, 0xB08B, 0xCEE0, 0xB08C, 0xCEE1, + 0xB08D, 0xCEE2, 0xB08E, 0xCEE3, 0xB08F, 0xCEE6, 0xB090, 0xCEE7, 0xB091, 0xCEE9, 0xB092, 0xCEEA, 0xB093, 0xCEED, 0xB094, 0xCEEE, + 0xB095, 0xCEEF, 0xB096, 0xCEF0, 0xB097, 0xCEF1, 0xB098, 0xCEF2, 0xB099, 0xCEF3, 0xB09A, 0xCEF6, 0xB09B, 0xCEFA, 0xB09C, 0xCEFB, + 0xB09D, 0xCEFC, 0xB09E, 0xCEFD, 0xB09F, 0xCEFE, 0xB0A0, 0xCEFF, 0xB0A1, 0xAC00, 0xB0A2, 0xAC01, 0xB0A3, 0xAC04, 0xB0A4, 0xAC07, + 0xB0A5, 0xAC08, 0xB0A6, 0xAC09, 0xB0A7, 0xAC0A, 0xB0A8, 0xAC10, 0xB0A9, 0xAC11, 0xB0AA, 0xAC12, 0xB0AB, 0xAC13, 0xB0AC, 0xAC14, + 0xB0AD, 0xAC15, 0xB0AE, 0xAC16, 0xB0AF, 0xAC17, 0xB0B0, 0xAC19, 0xB0B1, 0xAC1A, 0xB0B2, 0xAC1B, 0xB0B3, 0xAC1C, 0xB0B4, 0xAC1D, + 0xB0B5, 0xAC20, 0xB0B6, 0xAC24, 0xB0B7, 0xAC2C, 0xB0B8, 0xAC2D, 0xB0B9, 0xAC2F, 0xB0BA, 0xAC30, 0xB0BB, 0xAC31, 0xB0BC, 0xAC38, + 0xB0BD, 0xAC39, 0xB0BE, 0xAC3C, 0xB0BF, 0xAC40, 0xB0C0, 0xAC4B, 0xB0C1, 0xAC4D, 0xB0C2, 0xAC54, 0xB0C3, 0xAC58, 0xB0C4, 0xAC5C, + 0xB0C5, 0xAC70, 0xB0C6, 0xAC71, 0xB0C7, 0xAC74, 0xB0C8, 0xAC77, 0xB0C9, 0xAC78, 0xB0CA, 0xAC7A, 0xB0CB, 0xAC80, 0xB0CC, 0xAC81, + 0xB0CD, 0xAC83, 0xB0CE, 0xAC84, 0xB0CF, 0xAC85, 0xB0D0, 0xAC86, 0xB0D1, 0xAC89, 0xB0D2, 0xAC8A, 0xB0D3, 0xAC8B, 0xB0D4, 0xAC8C, + 0xB0D5, 0xAC90, 0xB0D6, 0xAC94, 0xB0D7, 0xAC9C, 0xB0D8, 0xAC9D, 0xB0D9, 0xAC9F, 0xB0DA, 0xACA0, 0xB0DB, 0xACA1, 0xB0DC, 0xACA8, + 0xB0DD, 0xACA9, 0xB0DE, 0xACAA, 0xB0DF, 0xACAC, 0xB0E0, 0xACAF, 0xB0E1, 0xACB0, 0xB0E2, 0xACB8, 0xB0E3, 0xACB9, 0xB0E4, 0xACBB, + 0xB0E5, 0xACBC, 0xB0E6, 0xACBD, 0xB0E7, 0xACC1, 0xB0E8, 0xACC4, 0xB0E9, 0xACC8, 0xB0EA, 0xACCC, 0xB0EB, 0xACD5, 0xB0EC, 0xACD7, + 0xB0ED, 0xACE0, 0xB0EE, 0xACE1, 0xB0EF, 0xACE4, 0xB0F0, 0xACE7, 0xB0F1, 0xACE8, 0xB0F2, 0xACEA, 0xB0F3, 0xACEC, 0xB0F4, 0xACEF, + 0xB0F5, 0xACF0, 0xB0F6, 0xACF1, 0xB0F7, 0xACF3, 0xB0F8, 0xACF5, 0xB0F9, 0xACF6, 0xB0FA, 0xACFC, 0xB0FB, 0xACFD, 0xB0FC, 0xAD00, + 0xB0FD, 0xAD04, 0xB0FE, 0xAD06, 0xB141, 0xCF02, 0xB142, 0xCF03, 0xB143, 0xCF05, 0xB144, 0xCF06, 0xB145, 0xCF07, 0xB146, 0xCF09, + 0xB147, 0xCF0A, 0xB148, 0xCF0B, 0xB149, 0xCF0C, 0xB14A, 0xCF0D, 0xB14B, 0xCF0E, 0xB14C, 0xCF0F, 0xB14D, 0xCF12, 0xB14E, 0xCF14, + 0xB14F, 0xCF16, 0xB150, 0xCF17, 0xB151, 0xCF18, 0xB152, 0xCF19, 0xB153, 0xCF1A, 0xB154, 0xCF1B, 0xB155, 0xCF1D, 0xB156, 0xCF1E, + 0xB157, 0xCF1F, 0xB158, 0xCF21, 0xB159, 0xCF22, 0xB15A, 0xCF23, 0xB161, 0xCF25, 0xB162, 0xCF26, 0xB163, 0xCF27, 0xB164, 0xCF28, + 0xB165, 0xCF29, 0xB166, 0xCF2A, 0xB167, 0xCF2B, 0xB168, 0xCF2E, 0xB169, 0xCF32, 0xB16A, 0xCF33, 0xB16B, 0xCF34, 0xB16C, 0xCF35, + 0xB16D, 0xCF36, 0xB16E, 0xCF37, 0xB16F, 0xCF39, 0xB170, 0xCF3A, 0xB171, 0xCF3B, 0xB172, 0xCF3C, 0xB173, 0xCF3D, 0xB174, 0xCF3E, + 0xB175, 0xCF3F, 0xB176, 0xCF40, 0xB177, 0xCF41, 0xB178, 0xCF42, 0xB179, 0xCF43, 0xB17A, 0xCF44, 0xB181, 0xCF45, 0xB182, 0xCF46, + 0xB183, 0xCF47, 0xB184, 0xCF48, 0xB185, 0xCF49, 0xB186, 0xCF4A, 0xB187, 0xCF4B, 0xB188, 0xCF4C, 0xB189, 0xCF4D, 0xB18A, 0xCF4E, + 0xB18B, 0xCF4F, 0xB18C, 0xCF50, 0xB18D, 0xCF51, 0xB18E, 0xCF52, 0xB18F, 0xCF53, 0xB190, 0xCF56, 0xB191, 0xCF57, 0xB192, 0xCF59, + 0xB193, 0xCF5A, 0xB194, 0xCF5B, 0xB195, 0xCF5D, 0xB196, 0xCF5E, 0xB197, 0xCF5F, 0xB198, 0xCF60, 0xB199, 0xCF61, 0xB19A, 0xCF62, + 0xB19B, 0xCF63, 0xB19C, 0xCF66, 0xB19D, 0xCF68, 0xB19E, 0xCF6A, 0xB19F, 0xCF6B, 0xB1A0, 0xCF6C, 0xB1A1, 0xAD0C, 0xB1A2, 0xAD0D, + 0xB1A3, 0xAD0F, 0xB1A4, 0xAD11, 0xB1A5, 0xAD18, 0xB1A6, 0xAD1C, 0xB1A7, 0xAD20, 0xB1A8, 0xAD29, 0xB1A9, 0xAD2C, 0xB1AA, 0xAD2D, + 0xB1AB, 0xAD34, 0xB1AC, 0xAD35, 0xB1AD, 0xAD38, 0xB1AE, 0xAD3C, 0xB1AF, 0xAD44, 0xB1B0, 0xAD45, 0xB1B1, 0xAD47, 0xB1B2, 0xAD49, + 0xB1B3, 0xAD50, 0xB1B4, 0xAD54, 0xB1B5, 0xAD58, 0xB1B6, 0xAD61, 0xB1B7, 0xAD63, 0xB1B8, 0xAD6C, 0xB1B9, 0xAD6D, 0xB1BA, 0xAD70, + 0xB1BB, 0xAD73, 0xB1BC, 0xAD74, 0xB1BD, 0xAD75, 0xB1BE, 0xAD76, 0xB1BF, 0xAD7B, 0xB1C0, 0xAD7C, 0xB1C1, 0xAD7D, 0xB1C2, 0xAD7F, + 0xB1C3, 0xAD81, 0xB1C4, 0xAD82, 0xB1C5, 0xAD88, 0xB1C6, 0xAD89, 0xB1C7, 0xAD8C, 0xB1C8, 0xAD90, 0xB1C9, 0xAD9C, 0xB1CA, 0xAD9D, + 0xB1CB, 0xADA4, 0xB1CC, 0xADB7, 0xB1CD, 0xADC0, 0xB1CE, 0xADC1, 0xB1CF, 0xADC4, 0xB1D0, 0xADC8, 0xB1D1, 0xADD0, 0xB1D2, 0xADD1, + 0xB1D3, 0xADD3, 0xB1D4, 0xADDC, 0xB1D5, 0xADE0, 0xB1D6, 0xADE4, 0xB1D7, 0xADF8, 0xB1D8, 0xADF9, 0xB1D9, 0xADFC, 0xB1DA, 0xADFF, + 0xB1DB, 0xAE00, 0xB1DC, 0xAE01, 0xB1DD, 0xAE08, 0xB1DE, 0xAE09, 0xB1DF, 0xAE0B, 0xB1E0, 0xAE0D, 0xB1E1, 0xAE14, 0xB1E2, 0xAE30, + 0xB1E3, 0xAE31, 0xB1E4, 0xAE34, 0xB1E5, 0xAE37, 0xB1E6, 0xAE38, 0xB1E7, 0xAE3A, 0xB1E8, 0xAE40, 0xB1E9, 0xAE41, 0xB1EA, 0xAE43, + 0xB1EB, 0xAE45, 0xB1EC, 0xAE46, 0xB1ED, 0xAE4A, 0xB1EE, 0xAE4C, 0xB1EF, 0xAE4D, 0xB1F0, 0xAE4E, 0xB1F1, 0xAE50, 0xB1F2, 0xAE54, + 0xB1F3, 0xAE56, 0xB1F4, 0xAE5C, 0xB1F5, 0xAE5D, 0xB1F6, 0xAE5F, 0xB1F7, 0xAE60, 0xB1F8, 0xAE61, 0xB1F9, 0xAE65, 0xB1FA, 0xAE68, + 0xB1FB, 0xAE69, 0xB1FC, 0xAE6C, 0xB1FD, 0xAE70, 0xB1FE, 0xAE78, 0xB241, 0xCF6D, 0xB242, 0xCF6E, 0xB243, 0xCF6F, 0xB244, 0xCF72, + 0xB245, 0xCF73, 0xB246, 0xCF75, 0xB247, 0xCF76, 0xB248, 0xCF77, 0xB249, 0xCF79, 0xB24A, 0xCF7A, 0xB24B, 0xCF7B, 0xB24C, 0xCF7C, + 0xB24D, 0xCF7D, 0xB24E, 0xCF7E, 0xB24F, 0xCF7F, 0xB250, 0xCF81, 0xB251, 0xCF82, 0xB252, 0xCF83, 0xB253, 0xCF84, 0xB254, 0xCF86, + 0xB255, 0xCF87, 0xB256, 0xCF88, 0xB257, 0xCF89, 0xB258, 0xCF8A, 0xB259, 0xCF8B, 0xB25A, 0xCF8D, 0xB261, 0xCF8E, 0xB262, 0xCF8F, + 0xB263, 0xCF90, 0xB264, 0xCF91, 0xB265, 0xCF92, 0xB266, 0xCF93, 0xB267, 0xCF94, 0xB268, 0xCF95, 0xB269, 0xCF96, 0xB26A, 0xCF97, + 0xB26B, 0xCF98, 0xB26C, 0xCF99, 0xB26D, 0xCF9A, 0xB26E, 0xCF9B, 0xB26F, 0xCF9C, 0xB270, 0xCF9D, 0xB271, 0xCF9E, 0xB272, 0xCF9F, + 0xB273, 0xCFA0, 0xB274, 0xCFA2, 0xB275, 0xCFA3, 0xB276, 0xCFA4, 0xB277, 0xCFA5, 0xB278, 0xCFA6, 0xB279, 0xCFA7, 0xB27A, 0xCFA9, + 0xB281, 0xCFAA, 0xB282, 0xCFAB, 0xB283, 0xCFAC, 0xB284, 0xCFAD, 0xB285, 0xCFAE, 0xB286, 0xCFAF, 0xB287, 0xCFB1, 0xB288, 0xCFB2, + 0xB289, 0xCFB3, 0xB28A, 0xCFB4, 0xB28B, 0xCFB5, 0xB28C, 0xCFB6, 0xB28D, 0xCFB7, 0xB28E, 0xCFB8, 0xB28F, 0xCFB9, 0xB290, 0xCFBA, + 0xB291, 0xCFBB, 0xB292, 0xCFBC, 0xB293, 0xCFBD, 0xB294, 0xCFBE, 0xB295, 0xCFBF, 0xB296, 0xCFC0, 0xB297, 0xCFC1, 0xB298, 0xCFC2, + 0xB299, 0xCFC3, 0xB29A, 0xCFC5, 0xB29B, 0xCFC6, 0xB29C, 0xCFC7, 0xB29D, 0xCFC8, 0xB29E, 0xCFC9, 0xB29F, 0xCFCA, 0xB2A0, 0xCFCB, + 0xB2A1, 0xAE79, 0xB2A2, 0xAE7B, 0xB2A3, 0xAE7C, 0xB2A4, 0xAE7D, 0xB2A5, 0xAE84, 0xB2A6, 0xAE85, 0xB2A7, 0xAE8C, 0xB2A8, 0xAEBC, + 0xB2A9, 0xAEBD, 0xB2AA, 0xAEBE, 0xB2AB, 0xAEC0, 0xB2AC, 0xAEC4, 0xB2AD, 0xAECC, 0xB2AE, 0xAECD, 0xB2AF, 0xAECF, 0xB2B0, 0xAED0, + 0xB2B1, 0xAED1, 0xB2B2, 0xAED8, 0xB2B3, 0xAED9, 0xB2B4, 0xAEDC, 0xB2B5, 0xAEE8, 0xB2B6, 0xAEEB, 0xB2B7, 0xAEED, 0xB2B8, 0xAEF4, + 0xB2B9, 0xAEF8, 0xB2BA, 0xAEFC, 0xB2BB, 0xAF07, 0xB2BC, 0xAF08, 0xB2BD, 0xAF0D, 0xB2BE, 0xAF10, 0xB2BF, 0xAF2C, 0xB2C0, 0xAF2D, + 0xB2C1, 0xAF30, 0xB2C2, 0xAF32, 0xB2C3, 0xAF34, 0xB2C4, 0xAF3C, 0xB2C5, 0xAF3D, 0xB2C6, 0xAF3F, 0xB2C7, 0xAF41, 0xB2C8, 0xAF42, + 0xB2C9, 0xAF43, 0xB2CA, 0xAF48, 0xB2CB, 0xAF49, 0xB2CC, 0xAF50, 0xB2CD, 0xAF5C, 0xB2CE, 0xAF5D, 0xB2CF, 0xAF64, 0xB2D0, 0xAF65, + 0xB2D1, 0xAF79, 0xB2D2, 0xAF80, 0xB2D3, 0xAF84, 0xB2D4, 0xAF88, 0xB2D5, 0xAF90, 0xB2D6, 0xAF91, 0xB2D7, 0xAF95, 0xB2D8, 0xAF9C, + 0xB2D9, 0xAFB8, 0xB2DA, 0xAFB9, 0xB2DB, 0xAFBC, 0xB2DC, 0xAFC0, 0xB2DD, 0xAFC7, 0xB2DE, 0xAFC8, 0xB2DF, 0xAFC9, 0xB2E0, 0xAFCB, + 0xB2E1, 0xAFCD, 0xB2E2, 0xAFCE, 0xB2E3, 0xAFD4, 0xB2E4, 0xAFDC, 0xB2E5, 0xAFE8, 0xB2E6, 0xAFE9, 0xB2E7, 0xAFF0, 0xB2E8, 0xAFF1, + 0xB2E9, 0xAFF4, 0xB2EA, 0xAFF8, 0xB2EB, 0xB000, 0xB2EC, 0xB001, 0xB2ED, 0xB004, 0xB2EE, 0xB00C, 0xB2EF, 0xB010, 0xB2F0, 0xB014, + 0xB2F1, 0xB01C, 0xB2F2, 0xB01D, 0xB2F3, 0xB028, 0xB2F4, 0xB044, 0xB2F5, 0xB045, 0xB2F6, 0xB048, 0xB2F7, 0xB04A, 0xB2F8, 0xB04C, + 0xB2F9, 0xB04E, 0xB2FA, 0xB053, 0xB2FB, 0xB054, 0xB2FC, 0xB055, 0xB2FD, 0xB057, 0xB2FE, 0xB059, 0xB341, 0xCFCC, 0xB342, 0xCFCD, + 0xB343, 0xCFCE, 0xB344, 0xCFCF, 0xB345, 0xCFD0, 0xB346, 0xCFD1, 0xB347, 0xCFD2, 0xB348, 0xCFD3, 0xB349, 0xCFD4, 0xB34A, 0xCFD5, + 0xB34B, 0xCFD6, 0xB34C, 0xCFD7, 0xB34D, 0xCFD8, 0xB34E, 0xCFD9, 0xB34F, 0xCFDA, 0xB350, 0xCFDB, 0xB351, 0xCFDC, 0xB352, 0xCFDD, + 0xB353, 0xCFDE, 0xB354, 0xCFDF, 0xB355, 0xCFE2, 0xB356, 0xCFE3, 0xB357, 0xCFE5, 0xB358, 0xCFE6, 0xB359, 0xCFE7, 0xB35A, 0xCFE9, + 0xB361, 0xCFEA, 0xB362, 0xCFEB, 0xB363, 0xCFEC, 0xB364, 0xCFED, 0xB365, 0xCFEE, 0xB366, 0xCFEF, 0xB367, 0xCFF2, 0xB368, 0xCFF4, + 0xB369, 0xCFF6, 0xB36A, 0xCFF7, 0xB36B, 0xCFF8, 0xB36C, 0xCFF9, 0xB36D, 0xCFFA, 0xB36E, 0xCFFB, 0xB36F, 0xCFFD, 0xB370, 0xCFFE, + 0xB371, 0xCFFF, 0xB372, 0xD001, 0xB373, 0xD002, 0xB374, 0xD003, 0xB375, 0xD005, 0xB376, 0xD006, 0xB377, 0xD007, 0xB378, 0xD008, + 0xB379, 0xD009, 0xB37A, 0xD00A, 0xB381, 0xD00B, 0xB382, 0xD00C, 0xB383, 0xD00D, 0xB384, 0xD00E, 0xB385, 0xD00F, 0xB386, 0xD010, + 0xB387, 0xD012, 0xB388, 0xD013, 0xB389, 0xD014, 0xB38A, 0xD015, 0xB38B, 0xD016, 0xB38C, 0xD017, 0xB38D, 0xD019, 0xB38E, 0xD01A, + 0xB38F, 0xD01B, 0xB390, 0xD01C, 0xB391, 0xD01D, 0xB392, 0xD01E, 0xB393, 0xD01F, 0xB394, 0xD020, 0xB395, 0xD021, 0xB396, 0xD022, + 0xB397, 0xD023, 0xB398, 0xD024, 0xB399, 0xD025, 0xB39A, 0xD026, 0xB39B, 0xD027, 0xB39C, 0xD028, 0xB39D, 0xD029, 0xB39E, 0xD02A, + 0xB39F, 0xD02B, 0xB3A0, 0xD02C, 0xB3A1, 0xB05D, 0xB3A2, 0xB07C, 0xB3A3, 0xB07D, 0xB3A4, 0xB080, 0xB3A5, 0xB084, 0xB3A6, 0xB08C, + 0xB3A7, 0xB08D, 0xB3A8, 0xB08F, 0xB3A9, 0xB091, 0xB3AA, 0xB098, 0xB3AB, 0xB099, 0xB3AC, 0xB09A, 0xB3AD, 0xB09C, 0xB3AE, 0xB09F, + 0xB3AF, 0xB0A0, 0xB3B0, 0xB0A1, 0xB3B1, 0xB0A2, 0xB3B2, 0xB0A8, 0xB3B3, 0xB0A9, 0xB3B4, 0xB0AB, 0xB3B5, 0xB0AC, 0xB3B6, 0xB0AD, + 0xB3B7, 0xB0AE, 0xB3B8, 0xB0AF, 0xB3B9, 0xB0B1, 0xB3BA, 0xB0B3, 0xB3BB, 0xB0B4, 0xB3BC, 0xB0B5, 0xB3BD, 0xB0B8, 0xB3BE, 0xB0BC, + 0xB3BF, 0xB0C4, 0xB3C0, 0xB0C5, 0xB3C1, 0xB0C7, 0xB3C2, 0xB0C8, 0xB3C3, 0xB0C9, 0xB3C4, 0xB0D0, 0xB3C5, 0xB0D1, 0xB3C6, 0xB0D4, + 0xB3C7, 0xB0D8, 0xB3C8, 0xB0E0, 0xB3C9, 0xB0E5, 0xB3CA, 0xB108, 0xB3CB, 0xB109, 0xB3CC, 0xB10B, 0xB3CD, 0xB10C, 0xB3CE, 0xB110, + 0xB3CF, 0xB112, 0xB3D0, 0xB113, 0xB3D1, 0xB118, 0xB3D2, 0xB119, 0xB3D3, 0xB11B, 0xB3D4, 0xB11C, 0xB3D5, 0xB11D, 0xB3D6, 0xB123, + 0xB3D7, 0xB124, 0xB3D8, 0xB125, 0xB3D9, 0xB128, 0xB3DA, 0xB12C, 0xB3DB, 0xB134, 0xB3DC, 0xB135, 0xB3DD, 0xB137, 0xB3DE, 0xB138, + 0xB3DF, 0xB139, 0xB3E0, 0xB140, 0xB3E1, 0xB141, 0xB3E2, 0xB144, 0xB3E3, 0xB148, 0xB3E4, 0xB150, 0xB3E5, 0xB151, 0xB3E6, 0xB154, + 0xB3E7, 0xB155, 0xB3E8, 0xB158, 0xB3E9, 0xB15C, 0xB3EA, 0xB160, 0xB3EB, 0xB178, 0xB3EC, 0xB179, 0xB3ED, 0xB17C, 0xB3EE, 0xB180, + 0xB3EF, 0xB182, 0xB3F0, 0xB188, 0xB3F1, 0xB189, 0xB3F2, 0xB18B, 0xB3F3, 0xB18D, 0xB3F4, 0xB192, 0xB3F5, 0xB193, 0xB3F6, 0xB194, + 0xB3F7, 0xB198, 0xB3F8, 0xB19C, 0xB3F9, 0xB1A8, 0xB3FA, 0xB1CC, 0xB3FB, 0xB1D0, 0xB3FC, 0xB1D4, 0xB3FD, 0xB1DC, 0xB3FE, 0xB1DD, + 0xB441, 0xD02E, 0xB442, 0xD02F, 0xB443, 0xD030, 0xB444, 0xD031, 0xB445, 0xD032, 0xB446, 0xD033, 0xB447, 0xD036, 0xB448, 0xD037, + 0xB449, 0xD039, 0xB44A, 0xD03A, 0xB44B, 0xD03B, 0xB44C, 0xD03D, 0xB44D, 0xD03E, 0xB44E, 0xD03F, 0xB44F, 0xD040, 0xB450, 0xD041, + 0xB451, 0xD042, 0xB452, 0xD043, 0xB453, 0xD046, 0xB454, 0xD048, 0xB455, 0xD04A, 0xB456, 0xD04B, 0xB457, 0xD04C, 0xB458, 0xD04D, + 0xB459, 0xD04E, 0xB45A, 0xD04F, 0xB461, 0xD051, 0xB462, 0xD052, 0xB463, 0xD053, 0xB464, 0xD055, 0xB465, 0xD056, 0xB466, 0xD057, + 0xB467, 0xD059, 0xB468, 0xD05A, 0xB469, 0xD05B, 0xB46A, 0xD05C, 0xB46B, 0xD05D, 0xB46C, 0xD05E, 0xB46D, 0xD05F, 0xB46E, 0xD061, + 0xB46F, 0xD062, 0xB470, 0xD063, 0xB471, 0xD064, 0xB472, 0xD065, 0xB473, 0xD066, 0xB474, 0xD067, 0xB475, 0xD068, 0xB476, 0xD069, + 0xB477, 0xD06A, 0xB478, 0xD06B, 0xB479, 0xD06E, 0xB47A, 0xD06F, 0xB481, 0xD071, 0xB482, 0xD072, 0xB483, 0xD073, 0xB484, 0xD075, + 0xB485, 0xD076, 0xB486, 0xD077, 0xB487, 0xD078, 0xB488, 0xD079, 0xB489, 0xD07A, 0xB48A, 0xD07B, 0xB48B, 0xD07E, 0xB48C, 0xD07F, + 0xB48D, 0xD080, 0xB48E, 0xD082, 0xB48F, 0xD083, 0xB490, 0xD084, 0xB491, 0xD085, 0xB492, 0xD086, 0xB493, 0xD087, 0xB494, 0xD088, + 0xB495, 0xD089, 0xB496, 0xD08A, 0xB497, 0xD08B, 0xB498, 0xD08C, 0xB499, 0xD08D, 0xB49A, 0xD08E, 0xB49B, 0xD08F, 0xB49C, 0xD090, + 0xB49D, 0xD091, 0xB49E, 0xD092, 0xB49F, 0xD093, 0xB4A0, 0xD094, 0xB4A1, 0xB1DF, 0xB4A2, 0xB1E8, 0xB4A3, 0xB1E9, 0xB4A4, 0xB1EC, + 0xB4A5, 0xB1F0, 0xB4A6, 0xB1F9, 0xB4A7, 0xB1FB, 0xB4A8, 0xB1FD, 0xB4A9, 0xB204, 0xB4AA, 0xB205, 0xB4AB, 0xB208, 0xB4AC, 0xB20B, + 0xB4AD, 0xB20C, 0xB4AE, 0xB214, 0xB4AF, 0xB215, 0xB4B0, 0xB217, 0xB4B1, 0xB219, 0xB4B2, 0xB220, 0xB4B3, 0xB234, 0xB4B4, 0xB23C, + 0xB4B5, 0xB258, 0xB4B6, 0xB25C, 0xB4B7, 0xB260, 0xB4B8, 0xB268, 0xB4B9, 0xB269, 0xB4BA, 0xB274, 0xB4BB, 0xB275, 0xB4BC, 0xB27C, + 0xB4BD, 0xB284, 0xB4BE, 0xB285, 0xB4BF, 0xB289, 0xB4C0, 0xB290, 0xB4C1, 0xB291, 0xB4C2, 0xB294, 0xB4C3, 0xB298, 0xB4C4, 0xB299, + 0xB4C5, 0xB29A, 0xB4C6, 0xB2A0, 0xB4C7, 0xB2A1, 0xB4C8, 0xB2A3, 0xB4C9, 0xB2A5, 0xB4CA, 0xB2A6, 0xB4CB, 0xB2AA, 0xB4CC, 0xB2AC, + 0xB4CD, 0xB2B0, 0xB4CE, 0xB2B4, 0xB4CF, 0xB2C8, 0xB4D0, 0xB2C9, 0xB4D1, 0xB2CC, 0xB4D2, 0xB2D0, 0xB4D3, 0xB2D2, 0xB4D4, 0xB2D8, + 0xB4D5, 0xB2D9, 0xB4D6, 0xB2DB, 0xB4D7, 0xB2DD, 0xB4D8, 0xB2E2, 0xB4D9, 0xB2E4, 0xB4DA, 0xB2E5, 0xB4DB, 0xB2E6, 0xB4DC, 0xB2E8, + 0xB4DD, 0xB2EB, 0xB4DE, 0xB2EC, 0xB4DF, 0xB2ED, 0xB4E0, 0xB2EE, 0xB4E1, 0xB2EF, 0xB4E2, 0xB2F3, 0xB4E3, 0xB2F4, 0xB4E4, 0xB2F5, + 0xB4E5, 0xB2F7, 0xB4E6, 0xB2F8, 0xB4E7, 0xB2F9, 0xB4E8, 0xB2FA, 0xB4E9, 0xB2FB, 0xB4EA, 0xB2FF, 0xB4EB, 0xB300, 0xB4EC, 0xB301, + 0xB4ED, 0xB304, 0xB4EE, 0xB308, 0xB4EF, 0xB310, 0xB4F0, 0xB311, 0xB4F1, 0xB313, 0xB4F2, 0xB314, 0xB4F3, 0xB315, 0xB4F4, 0xB31C, + 0xB4F5, 0xB354, 0xB4F6, 0xB355, 0xB4F7, 0xB356, 0xB4F8, 0xB358, 0xB4F9, 0xB35B, 0xB4FA, 0xB35C, 0xB4FB, 0xB35E, 0xB4FC, 0xB35F, + 0xB4FD, 0xB364, 0xB4FE, 0xB365, 0xB541, 0xD095, 0xB542, 0xD096, 0xB543, 0xD097, 0xB544, 0xD098, 0xB545, 0xD099, 0xB546, 0xD09A, + 0xB547, 0xD09B, 0xB548, 0xD09C, 0xB549, 0xD09D, 0xB54A, 0xD09E, 0xB54B, 0xD09F, 0xB54C, 0xD0A0, 0xB54D, 0xD0A1, 0xB54E, 0xD0A2, + 0xB54F, 0xD0A3, 0xB550, 0xD0A6, 0xB551, 0xD0A7, 0xB552, 0xD0A9, 0xB553, 0xD0AA, 0xB554, 0xD0AB, 0xB555, 0xD0AD, 0xB556, 0xD0AE, + 0xB557, 0xD0AF, 0xB558, 0xD0B0, 0xB559, 0xD0B1, 0xB55A, 0xD0B2, 0xB561, 0xD0B3, 0xB562, 0xD0B6, 0xB563, 0xD0B8, 0xB564, 0xD0BA, + 0xB565, 0xD0BB, 0xB566, 0xD0BC, 0xB567, 0xD0BD, 0xB568, 0xD0BE, 0xB569, 0xD0BF, 0xB56A, 0xD0C2, 0xB56B, 0xD0C3, 0xB56C, 0xD0C5, + 0xB56D, 0xD0C6, 0xB56E, 0xD0C7, 0xB56F, 0xD0CA, 0xB570, 0xD0CB, 0xB571, 0xD0CC, 0xB572, 0xD0CD, 0xB573, 0xD0CE, 0xB574, 0xD0CF, + 0xB575, 0xD0D2, 0xB576, 0xD0D6, 0xB577, 0xD0D7, 0xB578, 0xD0D8, 0xB579, 0xD0D9, 0xB57A, 0xD0DA, 0xB581, 0xD0DB, 0xB582, 0xD0DE, + 0xB583, 0xD0DF, 0xB584, 0xD0E1, 0xB585, 0xD0E2, 0xB586, 0xD0E3, 0xB587, 0xD0E5, 0xB588, 0xD0E6, 0xB589, 0xD0E7, 0xB58A, 0xD0E8, + 0xB58B, 0xD0E9, 0xB58C, 0xD0EA, 0xB58D, 0xD0EB, 0xB58E, 0xD0EE, 0xB58F, 0xD0F2, 0xB590, 0xD0F3, 0xB591, 0xD0F4, 0xB592, 0xD0F5, + 0xB593, 0xD0F6, 0xB594, 0xD0F7, 0xB595, 0xD0F9, 0xB596, 0xD0FA, 0xB597, 0xD0FB, 0xB598, 0xD0FC, 0xB599, 0xD0FD, 0xB59A, 0xD0FE, + 0xB59B, 0xD0FF, 0xB59C, 0xD100, 0xB59D, 0xD101, 0xB59E, 0xD102, 0xB59F, 0xD103, 0xB5A0, 0xD104, 0xB5A1, 0xB367, 0xB5A2, 0xB369, + 0xB5A3, 0xB36B, 0xB5A4, 0xB36E, 0xB5A5, 0xB370, 0xB5A6, 0xB371, 0xB5A7, 0xB374, 0xB5A8, 0xB378, 0xB5A9, 0xB380, 0xB5AA, 0xB381, + 0xB5AB, 0xB383, 0xB5AC, 0xB384, 0xB5AD, 0xB385, 0xB5AE, 0xB38C, 0xB5AF, 0xB390, 0xB5B0, 0xB394, 0xB5B1, 0xB3A0, 0xB5B2, 0xB3A1, + 0xB5B3, 0xB3A8, 0xB5B4, 0xB3AC, 0xB5B5, 0xB3C4, 0xB5B6, 0xB3C5, 0xB5B7, 0xB3C8, 0xB5B8, 0xB3CB, 0xB5B9, 0xB3CC, 0xB5BA, 0xB3CE, + 0xB5BB, 0xB3D0, 0xB5BC, 0xB3D4, 0xB5BD, 0xB3D5, 0xB5BE, 0xB3D7, 0xB5BF, 0xB3D9, 0xB5C0, 0xB3DB, 0xB5C1, 0xB3DD, 0xB5C2, 0xB3E0, + 0xB5C3, 0xB3E4, 0xB5C4, 0xB3E8, 0xB5C5, 0xB3FC, 0xB5C6, 0xB410, 0xB5C7, 0xB418, 0xB5C8, 0xB41C, 0xB5C9, 0xB420, 0xB5CA, 0xB428, + 0xB5CB, 0xB429, 0xB5CC, 0xB42B, 0xB5CD, 0xB434, 0xB5CE, 0xB450, 0xB5CF, 0xB451, 0xB5D0, 0xB454, 0xB5D1, 0xB458, 0xB5D2, 0xB460, + 0xB5D3, 0xB461, 0xB5D4, 0xB463, 0xB5D5, 0xB465, 0xB5D6, 0xB46C, 0xB5D7, 0xB480, 0xB5D8, 0xB488, 0xB5D9, 0xB49D, 0xB5DA, 0xB4A4, + 0xB5DB, 0xB4A8, 0xB5DC, 0xB4AC, 0xB5DD, 0xB4B5, 0xB5DE, 0xB4B7, 0xB5DF, 0xB4B9, 0xB5E0, 0xB4C0, 0xB5E1, 0xB4C4, 0xB5E2, 0xB4C8, + 0xB5E3, 0xB4D0, 0xB5E4, 0xB4D5, 0xB5E5, 0xB4DC, 0xB5E6, 0xB4DD, 0xB5E7, 0xB4E0, 0xB5E8, 0xB4E3, 0xB5E9, 0xB4E4, 0xB5EA, 0xB4E6, + 0xB5EB, 0xB4EC, 0xB5EC, 0xB4ED, 0xB5ED, 0xB4EF, 0xB5EE, 0xB4F1, 0xB5EF, 0xB4F8, 0xB5F0, 0xB514, 0xB5F1, 0xB515, 0xB5F2, 0xB518, + 0xB5F3, 0xB51B, 0xB5F4, 0xB51C, 0xB5F5, 0xB524, 0xB5F6, 0xB525, 0xB5F7, 0xB527, 0xB5F8, 0xB528, 0xB5F9, 0xB529, 0xB5FA, 0xB52A, + 0xB5FB, 0xB530, 0xB5FC, 0xB531, 0xB5FD, 0xB534, 0xB5FE, 0xB538, 0xB641, 0xD105, 0xB642, 0xD106, 0xB643, 0xD107, 0xB644, 0xD108, + 0xB645, 0xD109, 0xB646, 0xD10A, 0xB647, 0xD10B, 0xB648, 0xD10C, 0xB649, 0xD10E, 0xB64A, 0xD10F, 0xB64B, 0xD110, 0xB64C, 0xD111, + 0xB64D, 0xD112, 0xB64E, 0xD113, 0xB64F, 0xD114, 0xB650, 0xD115, 0xB651, 0xD116, 0xB652, 0xD117, 0xB653, 0xD118, 0xB654, 0xD119, + 0xB655, 0xD11A, 0xB656, 0xD11B, 0xB657, 0xD11C, 0xB658, 0xD11D, 0xB659, 0xD11E, 0xB65A, 0xD11F, 0xB661, 0xD120, 0xB662, 0xD121, + 0xB663, 0xD122, 0xB664, 0xD123, 0xB665, 0xD124, 0xB666, 0xD125, 0xB667, 0xD126, 0xB668, 0xD127, 0xB669, 0xD128, 0xB66A, 0xD129, + 0xB66B, 0xD12A, 0xB66C, 0xD12B, 0xB66D, 0xD12C, 0xB66E, 0xD12D, 0xB66F, 0xD12E, 0xB670, 0xD12F, 0xB671, 0xD132, 0xB672, 0xD133, + 0xB673, 0xD135, 0xB674, 0xD136, 0xB675, 0xD137, 0xB676, 0xD139, 0xB677, 0xD13B, 0xB678, 0xD13C, 0xB679, 0xD13D, 0xB67A, 0xD13E, + 0xB681, 0xD13F, 0xB682, 0xD142, 0xB683, 0xD146, 0xB684, 0xD147, 0xB685, 0xD148, 0xB686, 0xD149, 0xB687, 0xD14A, 0xB688, 0xD14B, + 0xB689, 0xD14E, 0xB68A, 0xD14F, 0xB68B, 0xD151, 0xB68C, 0xD152, 0xB68D, 0xD153, 0xB68E, 0xD155, 0xB68F, 0xD156, 0xB690, 0xD157, + 0xB691, 0xD158, 0xB692, 0xD159, 0xB693, 0xD15A, 0xB694, 0xD15B, 0xB695, 0xD15E, 0xB696, 0xD160, 0xB697, 0xD162, 0xB698, 0xD163, + 0xB699, 0xD164, 0xB69A, 0xD165, 0xB69B, 0xD166, 0xB69C, 0xD167, 0xB69D, 0xD169, 0xB69E, 0xD16A, 0xB69F, 0xD16B, 0xB6A0, 0xD16D, + 0xB6A1, 0xB540, 0xB6A2, 0xB541, 0xB6A3, 0xB543, 0xB6A4, 0xB544, 0xB6A5, 0xB545, 0xB6A6, 0xB54B, 0xB6A7, 0xB54C, 0xB6A8, 0xB54D, + 0xB6A9, 0xB550, 0xB6AA, 0xB554, 0xB6AB, 0xB55C, 0xB6AC, 0xB55D, 0xB6AD, 0xB55F, 0xB6AE, 0xB560, 0xB6AF, 0xB561, 0xB6B0, 0xB5A0, + 0xB6B1, 0xB5A1, 0xB6B2, 0xB5A4, 0xB6B3, 0xB5A8, 0xB6B4, 0xB5AA, 0xB6B5, 0xB5AB, 0xB6B6, 0xB5B0, 0xB6B7, 0xB5B1, 0xB6B8, 0xB5B3, + 0xB6B9, 0xB5B4, 0xB6BA, 0xB5B5, 0xB6BB, 0xB5BB, 0xB6BC, 0xB5BC, 0xB6BD, 0xB5BD, 0xB6BE, 0xB5C0, 0xB6BF, 0xB5C4, 0xB6C0, 0xB5CC, + 0xB6C1, 0xB5CD, 0xB6C2, 0xB5CF, 0xB6C3, 0xB5D0, 0xB6C4, 0xB5D1, 0xB6C5, 0xB5D8, 0xB6C6, 0xB5EC, 0xB6C7, 0xB610, 0xB6C8, 0xB611, + 0xB6C9, 0xB614, 0xB6CA, 0xB618, 0xB6CB, 0xB625, 0xB6CC, 0xB62C, 0xB6CD, 0xB634, 0xB6CE, 0xB648, 0xB6CF, 0xB664, 0xB6D0, 0xB668, + 0xB6D1, 0xB69C, 0xB6D2, 0xB69D, 0xB6D3, 0xB6A0, 0xB6D4, 0xB6A4, 0xB6D5, 0xB6AB, 0xB6D6, 0xB6AC, 0xB6D7, 0xB6B1, 0xB6D8, 0xB6D4, + 0xB6D9, 0xB6F0, 0xB6DA, 0xB6F4, 0xB6DB, 0xB6F8, 0xB6DC, 0xB700, 0xB6DD, 0xB701, 0xB6DE, 0xB705, 0xB6DF, 0xB728, 0xB6E0, 0xB729, + 0xB6E1, 0xB72C, 0xB6E2, 0xB72F, 0xB6E3, 0xB730, 0xB6E4, 0xB738, 0xB6E5, 0xB739, 0xB6E6, 0xB73B, 0xB6E7, 0xB744, 0xB6E8, 0xB748, + 0xB6E9, 0xB74C, 0xB6EA, 0xB754, 0xB6EB, 0xB755, 0xB6EC, 0xB760, 0xB6ED, 0xB764, 0xB6EE, 0xB768, 0xB6EF, 0xB770, 0xB6F0, 0xB771, + 0xB6F1, 0xB773, 0xB6F2, 0xB775, 0xB6F3, 0xB77C, 0xB6F4, 0xB77D, 0xB6F5, 0xB780, 0xB6F6, 0xB784, 0xB6F7, 0xB78C, 0xB6F8, 0xB78D, + 0xB6F9, 0xB78F, 0xB6FA, 0xB790, 0xB6FB, 0xB791, 0xB6FC, 0xB792, 0xB6FD, 0xB796, 0xB6FE, 0xB797, 0xB741, 0xD16E, 0xB742, 0xD16F, + 0xB743, 0xD170, 0xB744, 0xD171, 0xB745, 0xD172, 0xB746, 0xD173, 0xB747, 0xD174, 0xB748, 0xD175, 0xB749, 0xD176, 0xB74A, 0xD177, + 0xB74B, 0xD178, 0xB74C, 0xD179, 0xB74D, 0xD17A, 0xB74E, 0xD17B, 0xB74F, 0xD17D, 0xB750, 0xD17E, 0xB751, 0xD17F, 0xB752, 0xD180, + 0xB753, 0xD181, 0xB754, 0xD182, 0xB755, 0xD183, 0xB756, 0xD185, 0xB757, 0xD186, 0xB758, 0xD187, 0xB759, 0xD189, 0xB75A, 0xD18A, + 0xB761, 0xD18B, 0xB762, 0xD18C, 0xB763, 0xD18D, 0xB764, 0xD18E, 0xB765, 0xD18F, 0xB766, 0xD190, 0xB767, 0xD191, 0xB768, 0xD192, + 0xB769, 0xD193, 0xB76A, 0xD194, 0xB76B, 0xD195, 0xB76C, 0xD196, 0xB76D, 0xD197, 0xB76E, 0xD198, 0xB76F, 0xD199, 0xB770, 0xD19A, + 0xB771, 0xD19B, 0xB772, 0xD19C, 0xB773, 0xD19D, 0xB774, 0xD19E, 0xB775, 0xD19F, 0xB776, 0xD1A2, 0xB777, 0xD1A3, 0xB778, 0xD1A5, + 0xB779, 0xD1A6, 0xB77A, 0xD1A7, 0xB781, 0xD1A9, 0xB782, 0xD1AA, 0xB783, 0xD1AB, 0xB784, 0xD1AC, 0xB785, 0xD1AD, 0xB786, 0xD1AE, + 0xB787, 0xD1AF, 0xB788, 0xD1B2, 0xB789, 0xD1B4, 0xB78A, 0xD1B6, 0xB78B, 0xD1B7, 0xB78C, 0xD1B8, 0xB78D, 0xD1B9, 0xB78E, 0xD1BB, + 0xB78F, 0xD1BD, 0xB790, 0xD1BE, 0xB791, 0xD1BF, 0xB792, 0xD1C1, 0xB793, 0xD1C2, 0xB794, 0xD1C3, 0xB795, 0xD1C4, 0xB796, 0xD1C5, + 0xB797, 0xD1C6, 0xB798, 0xD1C7, 0xB799, 0xD1C8, 0xB79A, 0xD1C9, 0xB79B, 0xD1CA, 0xB79C, 0xD1CB, 0xB79D, 0xD1CC, 0xB79E, 0xD1CD, + 0xB79F, 0xD1CE, 0xB7A0, 0xD1CF, 0xB7A1, 0xB798, 0xB7A2, 0xB799, 0xB7A3, 0xB79C, 0xB7A4, 0xB7A0, 0xB7A5, 0xB7A8, 0xB7A6, 0xB7A9, + 0xB7A7, 0xB7AB, 0xB7A8, 0xB7AC, 0xB7A9, 0xB7AD, 0xB7AA, 0xB7B4, 0xB7AB, 0xB7B5, 0xB7AC, 0xB7B8, 0xB7AD, 0xB7C7, 0xB7AE, 0xB7C9, + 0xB7AF, 0xB7EC, 0xB7B0, 0xB7ED, 0xB7B1, 0xB7F0, 0xB7B2, 0xB7F4, 0xB7B3, 0xB7FC, 0xB7B4, 0xB7FD, 0xB7B5, 0xB7FF, 0xB7B6, 0xB800, + 0xB7B7, 0xB801, 0xB7B8, 0xB807, 0xB7B9, 0xB808, 0xB7BA, 0xB809, 0xB7BB, 0xB80C, 0xB7BC, 0xB810, 0xB7BD, 0xB818, 0xB7BE, 0xB819, + 0xB7BF, 0xB81B, 0xB7C0, 0xB81D, 0xB7C1, 0xB824, 0xB7C2, 0xB825, 0xB7C3, 0xB828, 0xB7C4, 0xB82C, 0xB7C5, 0xB834, 0xB7C6, 0xB835, + 0xB7C7, 0xB837, 0xB7C8, 0xB838, 0xB7C9, 0xB839, 0xB7CA, 0xB840, 0xB7CB, 0xB844, 0xB7CC, 0xB851, 0xB7CD, 0xB853, 0xB7CE, 0xB85C, + 0xB7CF, 0xB85D, 0xB7D0, 0xB860, 0xB7D1, 0xB864, 0xB7D2, 0xB86C, 0xB7D3, 0xB86D, 0xB7D4, 0xB86F, 0xB7D5, 0xB871, 0xB7D6, 0xB878, + 0xB7D7, 0xB87C, 0xB7D8, 0xB88D, 0xB7D9, 0xB8A8, 0xB7DA, 0xB8B0, 0xB7DB, 0xB8B4, 0xB7DC, 0xB8B8, 0xB7DD, 0xB8C0, 0xB7DE, 0xB8C1, + 0xB7DF, 0xB8C3, 0xB7E0, 0xB8C5, 0xB7E1, 0xB8CC, 0xB7E2, 0xB8D0, 0xB7E3, 0xB8D4, 0xB7E4, 0xB8DD, 0xB7E5, 0xB8DF, 0xB7E6, 0xB8E1, + 0xB7E7, 0xB8E8, 0xB7E8, 0xB8E9, 0xB7E9, 0xB8EC, 0xB7EA, 0xB8F0, 0xB7EB, 0xB8F8, 0xB7EC, 0xB8F9, 0xB7ED, 0xB8FB, 0xB7EE, 0xB8FD, + 0xB7EF, 0xB904, 0xB7F0, 0xB918, 0xB7F1, 0xB920, 0xB7F2, 0xB93C, 0xB7F3, 0xB93D, 0xB7F4, 0xB940, 0xB7F5, 0xB944, 0xB7F6, 0xB94C, + 0xB7F7, 0xB94F, 0xB7F8, 0xB951, 0xB7F9, 0xB958, 0xB7FA, 0xB959, 0xB7FB, 0xB95C, 0xB7FC, 0xB960, 0xB7FD, 0xB968, 0xB7FE, 0xB969, + 0xB841, 0xD1D0, 0xB842, 0xD1D1, 0xB843, 0xD1D2, 0xB844, 0xD1D3, 0xB845, 0xD1D4, 0xB846, 0xD1D5, 0xB847, 0xD1D6, 0xB848, 0xD1D7, + 0xB849, 0xD1D9, 0xB84A, 0xD1DA, 0xB84B, 0xD1DB, 0xB84C, 0xD1DC, 0xB84D, 0xD1DD, 0xB84E, 0xD1DE, 0xB84F, 0xD1DF, 0xB850, 0xD1E0, + 0xB851, 0xD1E1, 0xB852, 0xD1E2, 0xB853, 0xD1E3, 0xB854, 0xD1E4, 0xB855, 0xD1E5, 0xB856, 0xD1E6, 0xB857, 0xD1E7, 0xB858, 0xD1E8, + 0xB859, 0xD1E9, 0xB85A, 0xD1EA, 0xB861, 0xD1EB, 0xB862, 0xD1EC, 0xB863, 0xD1ED, 0xB864, 0xD1EE, 0xB865, 0xD1EF, 0xB866, 0xD1F0, + 0xB867, 0xD1F1, 0xB868, 0xD1F2, 0xB869, 0xD1F3, 0xB86A, 0xD1F5, 0xB86B, 0xD1F6, 0xB86C, 0xD1F7, 0xB86D, 0xD1F9, 0xB86E, 0xD1FA, + 0xB86F, 0xD1FB, 0xB870, 0xD1FC, 0xB871, 0xD1FD, 0xB872, 0xD1FE, 0xB873, 0xD1FF, 0xB874, 0xD200, 0xB875, 0xD201, 0xB876, 0xD202, + 0xB877, 0xD203, 0xB878, 0xD204, 0xB879, 0xD205, 0xB87A, 0xD206, 0xB881, 0xD208, 0xB882, 0xD20A, 0xB883, 0xD20B, 0xB884, 0xD20C, + 0xB885, 0xD20D, 0xB886, 0xD20E, 0xB887, 0xD20F, 0xB888, 0xD211, 0xB889, 0xD212, 0xB88A, 0xD213, 0xB88B, 0xD214, 0xB88C, 0xD215, + 0xB88D, 0xD216, 0xB88E, 0xD217, 0xB88F, 0xD218, 0xB890, 0xD219, 0xB891, 0xD21A, 0xB892, 0xD21B, 0xB893, 0xD21C, 0xB894, 0xD21D, + 0xB895, 0xD21E, 0xB896, 0xD21F, 0xB897, 0xD220, 0xB898, 0xD221, 0xB899, 0xD222, 0xB89A, 0xD223, 0xB89B, 0xD224, 0xB89C, 0xD225, + 0xB89D, 0xD226, 0xB89E, 0xD227, 0xB89F, 0xD228, 0xB8A0, 0xD229, 0xB8A1, 0xB96B, 0xB8A2, 0xB96D, 0xB8A3, 0xB974, 0xB8A4, 0xB975, + 0xB8A5, 0xB978, 0xB8A6, 0xB97C, 0xB8A7, 0xB984, 0xB8A8, 0xB985, 0xB8A9, 0xB987, 0xB8AA, 0xB989, 0xB8AB, 0xB98A, 0xB8AC, 0xB98D, + 0xB8AD, 0xB98E, 0xB8AE, 0xB9AC, 0xB8AF, 0xB9AD, 0xB8B0, 0xB9B0, 0xB8B1, 0xB9B4, 0xB8B2, 0xB9BC, 0xB8B3, 0xB9BD, 0xB8B4, 0xB9BF, + 0xB8B5, 0xB9C1, 0xB8B6, 0xB9C8, 0xB8B7, 0xB9C9, 0xB8B8, 0xB9CC, 0xB8B9, 0xB9CE, 0xB8BA, 0xB9CF, 0xB8BB, 0xB9D0, 0xB8BC, 0xB9D1, + 0xB8BD, 0xB9D2, 0xB8BE, 0xB9D8, 0xB8BF, 0xB9D9, 0xB8C0, 0xB9DB, 0xB8C1, 0xB9DD, 0xB8C2, 0xB9DE, 0xB8C3, 0xB9E1, 0xB8C4, 0xB9E3, + 0xB8C5, 0xB9E4, 0xB8C6, 0xB9E5, 0xB8C7, 0xB9E8, 0xB8C8, 0xB9EC, 0xB8C9, 0xB9F4, 0xB8CA, 0xB9F5, 0xB8CB, 0xB9F7, 0xB8CC, 0xB9F8, + 0xB8CD, 0xB9F9, 0xB8CE, 0xB9FA, 0xB8CF, 0xBA00, 0xB8D0, 0xBA01, 0xB8D1, 0xBA08, 0xB8D2, 0xBA15, 0xB8D3, 0xBA38, 0xB8D4, 0xBA39, + 0xB8D5, 0xBA3C, 0xB8D6, 0xBA40, 0xB8D7, 0xBA42, 0xB8D8, 0xBA48, 0xB8D9, 0xBA49, 0xB8DA, 0xBA4B, 0xB8DB, 0xBA4D, 0xB8DC, 0xBA4E, + 0xB8DD, 0xBA53, 0xB8DE, 0xBA54, 0xB8DF, 0xBA55, 0xB8E0, 0xBA58, 0xB8E1, 0xBA5C, 0xB8E2, 0xBA64, 0xB8E3, 0xBA65, 0xB8E4, 0xBA67, + 0xB8E5, 0xBA68, 0xB8E6, 0xBA69, 0xB8E7, 0xBA70, 0xB8E8, 0xBA71, 0xB8E9, 0xBA74, 0xB8EA, 0xBA78, 0xB8EB, 0xBA83, 0xB8EC, 0xBA84, + 0xB8ED, 0xBA85, 0xB8EE, 0xBA87, 0xB8EF, 0xBA8C, 0xB8F0, 0xBAA8, 0xB8F1, 0xBAA9, 0xB8F2, 0xBAAB, 0xB8F3, 0xBAAC, 0xB8F4, 0xBAB0, + 0xB8F5, 0xBAB2, 0xB8F6, 0xBAB8, 0xB8F7, 0xBAB9, 0xB8F8, 0xBABB, 0xB8F9, 0xBABD, 0xB8FA, 0xBAC4, 0xB8FB, 0xBAC8, 0xB8FC, 0xBAD8, + 0xB8FD, 0xBAD9, 0xB8FE, 0xBAFC, 0xB941, 0xD22A, 0xB942, 0xD22B, 0xB943, 0xD22E, 0xB944, 0xD22F, 0xB945, 0xD231, 0xB946, 0xD232, + 0xB947, 0xD233, 0xB948, 0xD235, 0xB949, 0xD236, 0xB94A, 0xD237, 0xB94B, 0xD238, 0xB94C, 0xD239, 0xB94D, 0xD23A, 0xB94E, 0xD23B, + 0xB94F, 0xD23E, 0xB950, 0xD240, 0xB951, 0xD242, 0xB952, 0xD243, 0xB953, 0xD244, 0xB954, 0xD245, 0xB955, 0xD246, 0xB956, 0xD247, + 0xB957, 0xD249, 0xB958, 0xD24A, 0xB959, 0xD24B, 0xB95A, 0xD24C, 0xB961, 0xD24D, 0xB962, 0xD24E, 0xB963, 0xD24F, 0xB964, 0xD250, + 0xB965, 0xD251, 0xB966, 0xD252, 0xB967, 0xD253, 0xB968, 0xD254, 0xB969, 0xD255, 0xB96A, 0xD256, 0xB96B, 0xD257, 0xB96C, 0xD258, + 0xB96D, 0xD259, 0xB96E, 0xD25A, 0xB96F, 0xD25B, 0xB970, 0xD25D, 0xB971, 0xD25E, 0xB972, 0xD25F, 0xB973, 0xD260, 0xB974, 0xD261, + 0xB975, 0xD262, 0xB976, 0xD263, 0xB977, 0xD265, 0xB978, 0xD266, 0xB979, 0xD267, 0xB97A, 0xD268, 0xB981, 0xD269, 0xB982, 0xD26A, + 0xB983, 0xD26B, 0xB984, 0xD26C, 0xB985, 0xD26D, 0xB986, 0xD26E, 0xB987, 0xD26F, 0xB988, 0xD270, 0xB989, 0xD271, 0xB98A, 0xD272, + 0xB98B, 0xD273, 0xB98C, 0xD274, 0xB98D, 0xD275, 0xB98E, 0xD276, 0xB98F, 0xD277, 0xB990, 0xD278, 0xB991, 0xD279, 0xB992, 0xD27A, + 0xB993, 0xD27B, 0xB994, 0xD27C, 0xB995, 0xD27D, 0xB996, 0xD27E, 0xB997, 0xD27F, 0xB998, 0xD282, 0xB999, 0xD283, 0xB99A, 0xD285, + 0xB99B, 0xD286, 0xB99C, 0xD287, 0xB99D, 0xD289, 0xB99E, 0xD28A, 0xB99F, 0xD28B, 0xB9A0, 0xD28C, 0xB9A1, 0xBB00, 0xB9A2, 0xBB04, + 0xB9A3, 0xBB0D, 0xB9A4, 0xBB0F, 0xB9A5, 0xBB11, 0xB9A6, 0xBB18, 0xB9A7, 0xBB1C, 0xB9A8, 0xBB20, 0xB9A9, 0xBB29, 0xB9AA, 0xBB2B, + 0xB9AB, 0xBB34, 0xB9AC, 0xBB35, 0xB9AD, 0xBB36, 0xB9AE, 0xBB38, 0xB9AF, 0xBB3B, 0xB9B0, 0xBB3C, 0xB9B1, 0xBB3D, 0xB9B2, 0xBB3E, + 0xB9B3, 0xBB44, 0xB9B4, 0xBB45, 0xB9B5, 0xBB47, 0xB9B6, 0xBB49, 0xB9B7, 0xBB4D, 0xB9B8, 0xBB4F, 0xB9B9, 0xBB50, 0xB9BA, 0xBB54, + 0xB9BB, 0xBB58, 0xB9BC, 0xBB61, 0xB9BD, 0xBB63, 0xB9BE, 0xBB6C, 0xB9BF, 0xBB88, 0xB9C0, 0xBB8C, 0xB9C1, 0xBB90, 0xB9C2, 0xBBA4, + 0xB9C3, 0xBBA8, 0xB9C4, 0xBBAC, 0xB9C5, 0xBBB4, 0xB9C6, 0xBBB7, 0xB9C7, 0xBBC0, 0xB9C8, 0xBBC4, 0xB9C9, 0xBBC8, 0xB9CA, 0xBBD0, + 0xB9CB, 0xBBD3, 0xB9CC, 0xBBF8, 0xB9CD, 0xBBF9, 0xB9CE, 0xBBFC, 0xB9CF, 0xBBFF, 0xB9D0, 0xBC00, 0xB9D1, 0xBC02, 0xB9D2, 0xBC08, + 0xB9D3, 0xBC09, 0xB9D4, 0xBC0B, 0xB9D5, 0xBC0C, 0xB9D6, 0xBC0D, 0xB9D7, 0xBC0F, 0xB9D8, 0xBC11, 0xB9D9, 0xBC14, 0xB9DA, 0xBC15, + 0xB9DB, 0xBC16, 0xB9DC, 0xBC17, 0xB9DD, 0xBC18, 0xB9DE, 0xBC1B, 0xB9DF, 0xBC1C, 0xB9E0, 0xBC1D, 0xB9E1, 0xBC1E, 0xB9E2, 0xBC1F, + 0xB9E3, 0xBC24, 0xB9E4, 0xBC25, 0xB9E5, 0xBC27, 0xB9E6, 0xBC29, 0xB9E7, 0xBC2D, 0xB9E8, 0xBC30, 0xB9E9, 0xBC31, 0xB9EA, 0xBC34, + 0xB9EB, 0xBC38, 0xB9EC, 0xBC40, 0xB9ED, 0xBC41, 0xB9EE, 0xBC43, 0xB9EF, 0xBC44, 0xB9F0, 0xBC45, 0xB9F1, 0xBC49, 0xB9F2, 0xBC4C, + 0xB9F3, 0xBC4D, 0xB9F4, 0xBC50, 0xB9F5, 0xBC5D, 0xB9F6, 0xBC84, 0xB9F7, 0xBC85, 0xB9F8, 0xBC88, 0xB9F9, 0xBC8B, 0xB9FA, 0xBC8C, + 0xB9FB, 0xBC8E, 0xB9FC, 0xBC94, 0xB9FD, 0xBC95, 0xB9FE, 0xBC97, 0xBA41, 0xD28D, 0xBA42, 0xD28E, 0xBA43, 0xD28F, 0xBA44, 0xD292, + 0xBA45, 0xD293, 0xBA46, 0xD294, 0xBA47, 0xD296, 0xBA48, 0xD297, 0xBA49, 0xD298, 0xBA4A, 0xD299, 0xBA4B, 0xD29A, 0xBA4C, 0xD29B, + 0xBA4D, 0xD29D, 0xBA4E, 0xD29E, 0xBA4F, 0xD29F, 0xBA50, 0xD2A1, 0xBA51, 0xD2A2, 0xBA52, 0xD2A3, 0xBA53, 0xD2A5, 0xBA54, 0xD2A6, + 0xBA55, 0xD2A7, 0xBA56, 0xD2A8, 0xBA57, 0xD2A9, 0xBA58, 0xD2AA, 0xBA59, 0xD2AB, 0xBA5A, 0xD2AD, 0xBA61, 0xD2AE, 0xBA62, 0xD2AF, + 0xBA63, 0xD2B0, 0xBA64, 0xD2B2, 0xBA65, 0xD2B3, 0xBA66, 0xD2B4, 0xBA67, 0xD2B5, 0xBA68, 0xD2B6, 0xBA69, 0xD2B7, 0xBA6A, 0xD2BA, + 0xBA6B, 0xD2BB, 0xBA6C, 0xD2BD, 0xBA6D, 0xD2BE, 0xBA6E, 0xD2C1, 0xBA6F, 0xD2C3, 0xBA70, 0xD2C4, 0xBA71, 0xD2C5, 0xBA72, 0xD2C6, + 0xBA73, 0xD2C7, 0xBA74, 0xD2CA, 0xBA75, 0xD2CC, 0xBA76, 0xD2CD, 0xBA77, 0xD2CE, 0xBA78, 0xD2CF, 0xBA79, 0xD2D0, 0xBA7A, 0xD2D1, + 0xBA81, 0xD2D2, 0xBA82, 0xD2D3, 0xBA83, 0xD2D5, 0xBA84, 0xD2D6, 0xBA85, 0xD2D7, 0xBA86, 0xD2D9, 0xBA87, 0xD2DA, 0xBA88, 0xD2DB, + 0xBA89, 0xD2DD, 0xBA8A, 0xD2DE, 0xBA8B, 0xD2DF, 0xBA8C, 0xD2E0, 0xBA8D, 0xD2E1, 0xBA8E, 0xD2E2, 0xBA8F, 0xD2E3, 0xBA90, 0xD2E6, + 0xBA91, 0xD2E7, 0xBA92, 0xD2E8, 0xBA93, 0xD2E9, 0xBA94, 0xD2EA, 0xBA95, 0xD2EB, 0xBA96, 0xD2EC, 0xBA97, 0xD2ED, 0xBA98, 0xD2EE, + 0xBA99, 0xD2EF, 0xBA9A, 0xD2F2, 0xBA9B, 0xD2F3, 0xBA9C, 0xD2F5, 0xBA9D, 0xD2F6, 0xBA9E, 0xD2F7, 0xBA9F, 0xD2F9, 0xBAA0, 0xD2FA, + 0xBAA1, 0xBC99, 0xBAA2, 0xBC9A, 0xBAA3, 0xBCA0, 0xBAA4, 0xBCA1, 0xBAA5, 0xBCA4, 0xBAA6, 0xBCA7, 0xBAA7, 0xBCA8, 0xBAA8, 0xBCB0, + 0xBAA9, 0xBCB1, 0xBAAA, 0xBCB3, 0xBAAB, 0xBCB4, 0xBAAC, 0xBCB5, 0xBAAD, 0xBCBC, 0xBAAE, 0xBCBD, 0xBAAF, 0xBCC0, 0xBAB0, 0xBCC4, + 0xBAB1, 0xBCCD, 0xBAB2, 0xBCCF, 0xBAB3, 0xBCD0, 0xBAB4, 0xBCD1, 0xBAB5, 0xBCD5, 0xBAB6, 0xBCD8, 0xBAB7, 0xBCDC, 0xBAB8, 0xBCF4, + 0xBAB9, 0xBCF5, 0xBABA, 0xBCF6, 0xBABB, 0xBCF8, 0xBABC, 0xBCFC, 0xBABD, 0xBD04, 0xBABE, 0xBD05, 0xBABF, 0xBD07, 0xBAC0, 0xBD09, + 0xBAC1, 0xBD10, 0xBAC2, 0xBD14, 0xBAC3, 0xBD24, 0xBAC4, 0xBD2C, 0xBAC5, 0xBD40, 0xBAC6, 0xBD48, 0xBAC7, 0xBD49, 0xBAC8, 0xBD4C, + 0xBAC9, 0xBD50, 0xBACA, 0xBD58, 0xBACB, 0xBD59, 0xBACC, 0xBD64, 0xBACD, 0xBD68, 0xBACE, 0xBD80, 0xBACF, 0xBD81, 0xBAD0, 0xBD84, + 0xBAD1, 0xBD87, 0xBAD2, 0xBD88, 0xBAD3, 0xBD89, 0xBAD4, 0xBD8A, 0xBAD5, 0xBD90, 0xBAD6, 0xBD91, 0xBAD7, 0xBD93, 0xBAD8, 0xBD95, + 0xBAD9, 0xBD99, 0xBADA, 0xBD9A, 0xBADB, 0xBD9C, 0xBADC, 0xBDA4, 0xBADD, 0xBDB0, 0xBADE, 0xBDB8, 0xBADF, 0xBDD4, 0xBAE0, 0xBDD5, + 0xBAE1, 0xBDD8, 0xBAE2, 0xBDDC, 0xBAE3, 0xBDE9, 0xBAE4, 0xBDF0, 0xBAE5, 0xBDF4, 0xBAE6, 0xBDF8, 0xBAE7, 0xBE00, 0xBAE8, 0xBE03, + 0xBAE9, 0xBE05, 0xBAEA, 0xBE0C, 0xBAEB, 0xBE0D, 0xBAEC, 0xBE10, 0xBAED, 0xBE14, 0xBAEE, 0xBE1C, 0xBAEF, 0xBE1D, 0xBAF0, 0xBE1F, + 0xBAF1, 0xBE44, 0xBAF2, 0xBE45, 0xBAF3, 0xBE48, 0xBAF4, 0xBE4C, 0xBAF5, 0xBE4E, 0xBAF6, 0xBE54, 0xBAF7, 0xBE55, 0xBAF8, 0xBE57, + 0xBAF9, 0xBE59, 0xBAFA, 0xBE5A, 0xBAFB, 0xBE5B, 0xBAFC, 0xBE60, 0xBAFD, 0xBE61, 0xBAFE, 0xBE64, 0xBB41, 0xD2FB, 0xBB42, 0xD2FC, + 0xBB43, 0xD2FD, 0xBB44, 0xD2FE, 0xBB45, 0xD2FF, 0xBB46, 0xD302, 0xBB47, 0xD304, 0xBB48, 0xD306, 0xBB49, 0xD307, 0xBB4A, 0xD308, + 0xBB4B, 0xD309, 0xBB4C, 0xD30A, 0xBB4D, 0xD30B, 0xBB4E, 0xD30F, 0xBB4F, 0xD311, 0xBB50, 0xD312, 0xBB51, 0xD313, 0xBB52, 0xD315, + 0xBB53, 0xD317, 0xBB54, 0xD318, 0xBB55, 0xD319, 0xBB56, 0xD31A, 0xBB57, 0xD31B, 0xBB58, 0xD31E, 0xBB59, 0xD322, 0xBB5A, 0xD323, + 0xBB61, 0xD324, 0xBB62, 0xD326, 0xBB63, 0xD327, 0xBB64, 0xD32A, 0xBB65, 0xD32B, 0xBB66, 0xD32D, 0xBB67, 0xD32E, 0xBB68, 0xD32F, + 0xBB69, 0xD331, 0xBB6A, 0xD332, 0xBB6B, 0xD333, 0xBB6C, 0xD334, 0xBB6D, 0xD335, 0xBB6E, 0xD336, 0xBB6F, 0xD337, 0xBB70, 0xD33A, + 0xBB71, 0xD33E, 0xBB72, 0xD33F, 0xBB73, 0xD340, 0xBB74, 0xD341, 0xBB75, 0xD342, 0xBB76, 0xD343, 0xBB77, 0xD346, 0xBB78, 0xD347, + 0xBB79, 0xD348, 0xBB7A, 0xD349, 0xBB81, 0xD34A, 0xBB82, 0xD34B, 0xBB83, 0xD34C, 0xBB84, 0xD34D, 0xBB85, 0xD34E, 0xBB86, 0xD34F, + 0xBB87, 0xD350, 0xBB88, 0xD351, 0xBB89, 0xD352, 0xBB8A, 0xD353, 0xBB8B, 0xD354, 0xBB8C, 0xD355, 0xBB8D, 0xD356, 0xBB8E, 0xD357, + 0xBB8F, 0xD358, 0xBB90, 0xD359, 0xBB91, 0xD35A, 0xBB92, 0xD35B, 0xBB93, 0xD35C, 0xBB94, 0xD35D, 0xBB95, 0xD35E, 0xBB96, 0xD35F, + 0xBB97, 0xD360, 0xBB98, 0xD361, 0xBB99, 0xD362, 0xBB9A, 0xD363, 0xBB9B, 0xD364, 0xBB9C, 0xD365, 0xBB9D, 0xD366, 0xBB9E, 0xD367, + 0xBB9F, 0xD368, 0xBBA0, 0xD369, 0xBBA1, 0xBE68, 0xBBA2, 0xBE6A, 0xBBA3, 0xBE70, 0xBBA4, 0xBE71, 0xBBA5, 0xBE73, 0xBBA6, 0xBE74, + 0xBBA7, 0xBE75, 0xBBA8, 0xBE7B, 0xBBA9, 0xBE7C, 0xBBAA, 0xBE7D, 0xBBAB, 0xBE80, 0xBBAC, 0xBE84, 0xBBAD, 0xBE8C, 0xBBAE, 0xBE8D, + 0xBBAF, 0xBE8F, 0xBBB0, 0xBE90, 0xBBB1, 0xBE91, 0xBBB2, 0xBE98, 0xBBB3, 0xBE99, 0xBBB4, 0xBEA8, 0xBBB5, 0xBED0, 0xBBB6, 0xBED1, + 0xBBB7, 0xBED4, 0xBBB8, 0xBED7, 0xBBB9, 0xBED8, 0xBBBA, 0xBEE0, 0xBBBB, 0xBEE3, 0xBBBC, 0xBEE4, 0xBBBD, 0xBEE5, 0xBBBE, 0xBEEC, + 0xBBBF, 0xBF01, 0xBBC0, 0xBF08, 0xBBC1, 0xBF09, 0xBBC2, 0xBF18, 0xBBC3, 0xBF19, 0xBBC4, 0xBF1B, 0xBBC5, 0xBF1C, 0xBBC6, 0xBF1D, + 0xBBC7, 0xBF40, 0xBBC8, 0xBF41, 0xBBC9, 0xBF44, 0xBBCA, 0xBF48, 0xBBCB, 0xBF50, 0xBBCC, 0xBF51, 0xBBCD, 0xBF55, 0xBBCE, 0xBF94, + 0xBBCF, 0xBFB0, 0xBBD0, 0xBFC5, 0xBBD1, 0xBFCC, 0xBBD2, 0xBFCD, 0xBBD3, 0xBFD0, 0xBBD4, 0xBFD4, 0xBBD5, 0xBFDC, 0xBBD6, 0xBFDF, + 0xBBD7, 0xBFE1, 0xBBD8, 0xC03C, 0xBBD9, 0xC051, 0xBBDA, 0xC058, 0xBBDB, 0xC05C, 0xBBDC, 0xC060, 0xBBDD, 0xC068, 0xBBDE, 0xC069, + 0xBBDF, 0xC090, 0xBBE0, 0xC091, 0xBBE1, 0xC094, 0xBBE2, 0xC098, 0xBBE3, 0xC0A0, 0xBBE4, 0xC0A1, 0xBBE5, 0xC0A3, 0xBBE6, 0xC0A5, + 0xBBE7, 0xC0AC, 0xBBE8, 0xC0AD, 0xBBE9, 0xC0AF, 0xBBEA, 0xC0B0, 0xBBEB, 0xC0B3, 0xBBEC, 0xC0B4, 0xBBED, 0xC0B5, 0xBBEE, 0xC0B6, + 0xBBEF, 0xC0BC, 0xBBF0, 0xC0BD, 0xBBF1, 0xC0BF, 0xBBF2, 0xC0C0, 0xBBF3, 0xC0C1, 0xBBF4, 0xC0C5, 0xBBF5, 0xC0C8, 0xBBF6, 0xC0C9, + 0xBBF7, 0xC0CC, 0xBBF8, 0xC0D0, 0xBBF9, 0xC0D8, 0xBBFA, 0xC0D9, 0xBBFB, 0xC0DB, 0xBBFC, 0xC0DC, 0xBBFD, 0xC0DD, 0xBBFE, 0xC0E4, + 0xBC41, 0xD36A, 0xBC42, 0xD36B, 0xBC43, 0xD36C, 0xBC44, 0xD36D, 0xBC45, 0xD36E, 0xBC46, 0xD36F, 0xBC47, 0xD370, 0xBC48, 0xD371, + 0xBC49, 0xD372, 0xBC4A, 0xD373, 0xBC4B, 0xD374, 0xBC4C, 0xD375, 0xBC4D, 0xD376, 0xBC4E, 0xD377, 0xBC4F, 0xD378, 0xBC50, 0xD379, + 0xBC51, 0xD37A, 0xBC52, 0xD37B, 0xBC53, 0xD37E, 0xBC54, 0xD37F, 0xBC55, 0xD381, 0xBC56, 0xD382, 0xBC57, 0xD383, 0xBC58, 0xD385, + 0xBC59, 0xD386, 0xBC5A, 0xD387, 0xBC61, 0xD388, 0xBC62, 0xD389, 0xBC63, 0xD38A, 0xBC64, 0xD38B, 0xBC65, 0xD38E, 0xBC66, 0xD392, + 0xBC67, 0xD393, 0xBC68, 0xD394, 0xBC69, 0xD395, 0xBC6A, 0xD396, 0xBC6B, 0xD397, 0xBC6C, 0xD39A, 0xBC6D, 0xD39B, 0xBC6E, 0xD39D, + 0xBC6F, 0xD39E, 0xBC70, 0xD39F, 0xBC71, 0xD3A1, 0xBC72, 0xD3A2, 0xBC73, 0xD3A3, 0xBC74, 0xD3A4, 0xBC75, 0xD3A5, 0xBC76, 0xD3A6, + 0xBC77, 0xD3A7, 0xBC78, 0xD3AA, 0xBC79, 0xD3AC, 0xBC7A, 0xD3AE, 0xBC81, 0xD3AF, 0xBC82, 0xD3B0, 0xBC83, 0xD3B1, 0xBC84, 0xD3B2, + 0xBC85, 0xD3B3, 0xBC86, 0xD3B5, 0xBC87, 0xD3B6, 0xBC88, 0xD3B7, 0xBC89, 0xD3B9, 0xBC8A, 0xD3BA, 0xBC8B, 0xD3BB, 0xBC8C, 0xD3BD, + 0xBC8D, 0xD3BE, 0xBC8E, 0xD3BF, 0xBC8F, 0xD3C0, 0xBC90, 0xD3C1, 0xBC91, 0xD3C2, 0xBC92, 0xD3C3, 0xBC93, 0xD3C6, 0xBC94, 0xD3C7, + 0xBC95, 0xD3CA, 0xBC96, 0xD3CB, 0xBC97, 0xD3CC, 0xBC98, 0xD3CD, 0xBC99, 0xD3CE, 0xBC9A, 0xD3CF, 0xBC9B, 0xD3D1, 0xBC9C, 0xD3D2, + 0xBC9D, 0xD3D3, 0xBC9E, 0xD3D4, 0xBC9F, 0xD3D5, 0xBCA0, 0xD3D6, 0xBCA1, 0xC0E5, 0xBCA2, 0xC0E8, 0xBCA3, 0xC0EC, 0xBCA4, 0xC0F4, + 0xBCA5, 0xC0F5, 0xBCA6, 0xC0F7, 0xBCA7, 0xC0F9, 0xBCA8, 0xC100, 0xBCA9, 0xC104, 0xBCAA, 0xC108, 0xBCAB, 0xC110, 0xBCAC, 0xC115, + 0xBCAD, 0xC11C, 0xBCAE, 0xC11D, 0xBCAF, 0xC11E, 0xBCB0, 0xC11F, 0xBCB1, 0xC120, 0xBCB2, 0xC123, 0xBCB3, 0xC124, 0xBCB4, 0xC126, + 0xBCB5, 0xC127, 0xBCB6, 0xC12C, 0xBCB7, 0xC12D, 0xBCB8, 0xC12F, 0xBCB9, 0xC130, 0xBCBA, 0xC131, 0xBCBB, 0xC136, 0xBCBC, 0xC138, + 0xBCBD, 0xC139, 0xBCBE, 0xC13C, 0xBCBF, 0xC140, 0xBCC0, 0xC148, 0xBCC1, 0xC149, 0xBCC2, 0xC14B, 0xBCC3, 0xC14C, 0xBCC4, 0xC14D, + 0xBCC5, 0xC154, 0xBCC6, 0xC155, 0xBCC7, 0xC158, 0xBCC8, 0xC15C, 0xBCC9, 0xC164, 0xBCCA, 0xC165, 0xBCCB, 0xC167, 0xBCCC, 0xC168, + 0xBCCD, 0xC169, 0xBCCE, 0xC170, 0xBCCF, 0xC174, 0xBCD0, 0xC178, 0xBCD1, 0xC185, 0xBCD2, 0xC18C, 0xBCD3, 0xC18D, 0xBCD4, 0xC18E, + 0xBCD5, 0xC190, 0xBCD6, 0xC194, 0xBCD7, 0xC196, 0xBCD8, 0xC19C, 0xBCD9, 0xC19D, 0xBCDA, 0xC19F, 0xBCDB, 0xC1A1, 0xBCDC, 0xC1A5, + 0xBCDD, 0xC1A8, 0xBCDE, 0xC1A9, 0xBCDF, 0xC1AC, 0xBCE0, 0xC1B0, 0xBCE1, 0xC1BD, 0xBCE2, 0xC1C4, 0xBCE3, 0xC1C8, 0xBCE4, 0xC1CC, + 0xBCE5, 0xC1D4, 0xBCE6, 0xC1D7, 0xBCE7, 0xC1D8, 0xBCE8, 0xC1E0, 0xBCE9, 0xC1E4, 0xBCEA, 0xC1E8, 0xBCEB, 0xC1F0, 0xBCEC, 0xC1F1, + 0xBCED, 0xC1F3, 0xBCEE, 0xC1FC, 0xBCEF, 0xC1FD, 0xBCF0, 0xC200, 0xBCF1, 0xC204, 0xBCF2, 0xC20C, 0xBCF3, 0xC20D, 0xBCF4, 0xC20F, + 0xBCF5, 0xC211, 0xBCF6, 0xC218, 0xBCF7, 0xC219, 0xBCF8, 0xC21C, 0xBCF9, 0xC21F, 0xBCFA, 0xC220, 0xBCFB, 0xC228, 0xBCFC, 0xC229, + 0xBCFD, 0xC22B, 0xBCFE, 0xC22D, 0xBD41, 0xD3D7, 0xBD42, 0xD3D9, 0xBD43, 0xD3DA, 0xBD44, 0xD3DB, 0xBD45, 0xD3DC, 0xBD46, 0xD3DD, + 0xBD47, 0xD3DE, 0xBD48, 0xD3DF, 0xBD49, 0xD3E0, 0xBD4A, 0xD3E2, 0xBD4B, 0xD3E4, 0xBD4C, 0xD3E5, 0xBD4D, 0xD3E6, 0xBD4E, 0xD3E7, + 0xBD4F, 0xD3E8, 0xBD50, 0xD3E9, 0xBD51, 0xD3EA, 0xBD52, 0xD3EB, 0xBD53, 0xD3EE, 0xBD54, 0xD3EF, 0xBD55, 0xD3F1, 0xBD56, 0xD3F2, + 0xBD57, 0xD3F3, 0xBD58, 0xD3F5, 0xBD59, 0xD3F6, 0xBD5A, 0xD3F7, 0xBD61, 0xD3F8, 0xBD62, 0xD3F9, 0xBD63, 0xD3FA, 0xBD64, 0xD3FB, + 0xBD65, 0xD3FE, 0xBD66, 0xD400, 0xBD67, 0xD402, 0xBD68, 0xD403, 0xBD69, 0xD404, 0xBD6A, 0xD405, 0xBD6B, 0xD406, 0xBD6C, 0xD407, + 0xBD6D, 0xD409, 0xBD6E, 0xD40A, 0xBD6F, 0xD40B, 0xBD70, 0xD40C, 0xBD71, 0xD40D, 0xBD72, 0xD40E, 0xBD73, 0xD40F, 0xBD74, 0xD410, + 0xBD75, 0xD411, 0xBD76, 0xD412, 0xBD77, 0xD413, 0xBD78, 0xD414, 0xBD79, 0xD415, 0xBD7A, 0xD416, 0xBD81, 0xD417, 0xBD82, 0xD418, + 0xBD83, 0xD419, 0xBD84, 0xD41A, 0xBD85, 0xD41B, 0xBD86, 0xD41C, 0xBD87, 0xD41E, 0xBD88, 0xD41F, 0xBD89, 0xD420, 0xBD8A, 0xD421, + 0xBD8B, 0xD422, 0xBD8C, 0xD423, 0xBD8D, 0xD424, 0xBD8E, 0xD425, 0xBD8F, 0xD426, 0xBD90, 0xD427, 0xBD91, 0xD428, 0xBD92, 0xD429, + 0xBD93, 0xD42A, 0xBD94, 0xD42B, 0xBD95, 0xD42C, 0xBD96, 0xD42D, 0xBD97, 0xD42E, 0xBD98, 0xD42F, 0xBD99, 0xD430, 0xBD9A, 0xD431, + 0xBD9B, 0xD432, 0xBD9C, 0xD433, 0xBD9D, 0xD434, 0xBD9E, 0xD435, 0xBD9F, 0xD436, 0xBDA0, 0xD437, 0xBDA1, 0xC22F, 0xBDA2, 0xC231, + 0xBDA3, 0xC232, 0xBDA4, 0xC234, 0xBDA5, 0xC248, 0xBDA6, 0xC250, 0xBDA7, 0xC251, 0xBDA8, 0xC254, 0xBDA9, 0xC258, 0xBDAA, 0xC260, + 0xBDAB, 0xC265, 0xBDAC, 0xC26C, 0xBDAD, 0xC26D, 0xBDAE, 0xC270, 0xBDAF, 0xC274, 0xBDB0, 0xC27C, 0xBDB1, 0xC27D, 0xBDB2, 0xC27F, + 0xBDB3, 0xC281, 0xBDB4, 0xC288, 0xBDB5, 0xC289, 0xBDB6, 0xC290, 0xBDB7, 0xC298, 0xBDB8, 0xC29B, 0xBDB9, 0xC29D, 0xBDBA, 0xC2A4, + 0xBDBB, 0xC2A5, 0xBDBC, 0xC2A8, 0xBDBD, 0xC2AC, 0xBDBE, 0xC2AD, 0xBDBF, 0xC2B4, 0xBDC0, 0xC2B5, 0xBDC1, 0xC2B7, 0xBDC2, 0xC2B9, + 0xBDC3, 0xC2DC, 0xBDC4, 0xC2DD, 0xBDC5, 0xC2E0, 0xBDC6, 0xC2E3, 0xBDC7, 0xC2E4, 0xBDC8, 0xC2EB, 0xBDC9, 0xC2EC, 0xBDCA, 0xC2ED, + 0xBDCB, 0xC2EF, 0xBDCC, 0xC2F1, 0xBDCD, 0xC2F6, 0xBDCE, 0xC2F8, 0xBDCF, 0xC2F9, 0xBDD0, 0xC2FB, 0xBDD1, 0xC2FC, 0xBDD2, 0xC300, + 0xBDD3, 0xC308, 0xBDD4, 0xC309, 0xBDD5, 0xC30C, 0xBDD6, 0xC30D, 0xBDD7, 0xC313, 0xBDD8, 0xC314, 0xBDD9, 0xC315, 0xBDDA, 0xC318, + 0xBDDB, 0xC31C, 0xBDDC, 0xC324, 0xBDDD, 0xC325, 0xBDDE, 0xC328, 0xBDDF, 0xC329, 0xBDE0, 0xC345, 0xBDE1, 0xC368, 0xBDE2, 0xC369, + 0xBDE3, 0xC36C, 0xBDE4, 0xC370, 0xBDE5, 0xC372, 0xBDE6, 0xC378, 0xBDE7, 0xC379, 0xBDE8, 0xC37C, 0xBDE9, 0xC37D, 0xBDEA, 0xC384, + 0xBDEB, 0xC388, 0xBDEC, 0xC38C, 0xBDED, 0xC3C0, 0xBDEE, 0xC3D8, 0xBDEF, 0xC3D9, 0xBDF0, 0xC3DC, 0xBDF1, 0xC3DF, 0xBDF2, 0xC3E0, + 0xBDF3, 0xC3E2, 0xBDF4, 0xC3E8, 0xBDF5, 0xC3E9, 0xBDF6, 0xC3ED, 0xBDF7, 0xC3F4, 0xBDF8, 0xC3F5, 0xBDF9, 0xC3F8, 0xBDFA, 0xC408, + 0xBDFB, 0xC410, 0xBDFC, 0xC424, 0xBDFD, 0xC42C, 0xBDFE, 0xC430, 0xBE41, 0xD438, 0xBE42, 0xD439, 0xBE43, 0xD43A, 0xBE44, 0xD43B, + 0xBE45, 0xD43C, 0xBE46, 0xD43D, 0xBE47, 0xD43E, 0xBE48, 0xD43F, 0xBE49, 0xD441, 0xBE4A, 0xD442, 0xBE4B, 0xD443, 0xBE4C, 0xD445, + 0xBE4D, 0xD446, 0xBE4E, 0xD447, 0xBE4F, 0xD448, 0xBE50, 0xD449, 0xBE51, 0xD44A, 0xBE52, 0xD44B, 0xBE53, 0xD44C, 0xBE54, 0xD44D, + 0xBE55, 0xD44E, 0xBE56, 0xD44F, 0xBE57, 0xD450, 0xBE58, 0xD451, 0xBE59, 0xD452, 0xBE5A, 0xD453, 0xBE61, 0xD454, 0xBE62, 0xD455, + 0xBE63, 0xD456, 0xBE64, 0xD457, 0xBE65, 0xD458, 0xBE66, 0xD459, 0xBE67, 0xD45A, 0xBE68, 0xD45B, 0xBE69, 0xD45D, 0xBE6A, 0xD45E, + 0xBE6B, 0xD45F, 0xBE6C, 0xD461, 0xBE6D, 0xD462, 0xBE6E, 0xD463, 0xBE6F, 0xD465, 0xBE70, 0xD466, 0xBE71, 0xD467, 0xBE72, 0xD468, + 0xBE73, 0xD469, 0xBE74, 0xD46A, 0xBE75, 0xD46B, 0xBE76, 0xD46C, 0xBE77, 0xD46E, 0xBE78, 0xD470, 0xBE79, 0xD471, 0xBE7A, 0xD472, + 0xBE81, 0xD473, 0xBE82, 0xD474, 0xBE83, 0xD475, 0xBE84, 0xD476, 0xBE85, 0xD477, 0xBE86, 0xD47A, 0xBE87, 0xD47B, 0xBE88, 0xD47D, + 0xBE89, 0xD47E, 0xBE8A, 0xD481, 0xBE8B, 0xD483, 0xBE8C, 0xD484, 0xBE8D, 0xD485, 0xBE8E, 0xD486, 0xBE8F, 0xD487, 0xBE90, 0xD48A, + 0xBE91, 0xD48C, 0xBE92, 0xD48E, 0xBE93, 0xD48F, 0xBE94, 0xD490, 0xBE95, 0xD491, 0xBE96, 0xD492, 0xBE97, 0xD493, 0xBE98, 0xD495, + 0xBE99, 0xD496, 0xBE9A, 0xD497, 0xBE9B, 0xD498, 0xBE9C, 0xD499, 0xBE9D, 0xD49A, 0xBE9E, 0xD49B, 0xBE9F, 0xD49C, 0xBEA0, 0xD49D, + 0xBEA1, 0xC434, 0xBEA2, 0xC43C, 0xBEA3, 0xC43D, 0xBEA4, 0xC448, 0xBEA5, 0xC464, 0xBEA6, 0xC465, 0xBEA7, 0xC468, 0xBEA8, 0xC46C, + 0xBEA9, 0xC474, 0xBEAA, 0xC475, 0xBEAB, 0xC479, 0xBEAC, 0xC480, 0xBEAD, 0xC494, 0xBEAE, 0xC49C, 0xBEAF, 0xC4B8, 0xBEB0, 0xC4BC, + 0xBEB1, 0xC4E9, 0xBEB2, 0xC4F0, 0xBEB3, 0xC4F1, 0xBEB4, 0xC4F4, 0xBEB5, 0xC4F8, 0xBEB6, 0xC4FA, 0xBEB7, 0xC4FF, 0xBEB8, 0xC500, + 0xBEB9, 0xC501, 0xBEBA, 0xC50C, 0xBEBB, 0xC510, 0xBEBC, 0xC514, 0xBEBD, 0xC51C, 0xBEBE, 0xC528, 0xBEBF, 0xC529, 0xBEC0, 0xC52C, + 0xBEC1, 0xC530, 0xBEC2, 0xC538, 0xBEC3, 0xC539, 0xBEC4, 0xC53B, 0xBEC5, 0xC53D, 0xBEC6, 0xC544, 0xBEC7, 0xC545, 0xBEC8, 0xC548, + 0xBEC9, 0xC549, 0xBECA, 0xC54A, 0xBECB, 0xC54C, 0xBECC, 0xC54D, 0xBECD, 0xC54E, 0xBECE, 0xC553, 0xBECF, 0xC554, 0xBED0, 0xC555, + 0xBED1, 0xC557, 0xBED2, 0xC558, 0xBED3, 0xC559, 0xBED4, 0xC55D, 0xBED5, 0xC55E, 0xBED6, 0xC560, 0xBED7, 0xC561, 0xBED8, 0xC564, + 0xBED9, 0xC568, 0xBEDA, 0xC570, 0xBEDB, 0xC571, 0xBEDC, 0xC573, 0xBEDD, 0xC574, 0xBEDE, 0xC575, 0xBEDF, 0xC57C, 0xBEE0, 0xC57D, + 0xBEE1, 0xC580, 0xBEE2, 0xC584, 0xBEE3, 0xC587, 0xBEE4, 0xC58C, 0xBEE5, 0xC58D, 0xBEE6, 0xC58F, 0xBEE7, 0xC591, 0xBEE8, 0xC595, + 0xBEE9, 0xC597, 0xBEEA, 0xC598, 0xBEEB, 0xC59C, 0xBEEC, 0xC5A0, 0xBEED, 0xC5A9, 0xBEEE, 0xC5B4, 0xBEEF, 0xC5B5, 0xBEF0, 0xC5B8, + 0xBEF1, 0xC5B9, 0xBEF2, 0xC5BB, 0xBEF3, 0xC5BC, 0xBEF4, 0xC5BD, 0xBEF5, 0xC5BE, 0xBEF6, 0xC5C4, 0xBEF7, 0xC5C5, 0xBEF8, 0xC5C6, + 0xBEF9, 0xC5C7, 0xBEFA, 0xC5C8, 0xBEFB, 0xC5C9, 0xBEFC, 0xC5CA, 0xBEFD, 0xC5CC, 0xBEFE, 0xC5CE, 0xBF41, 0xD49E, 0xBF42, 0xD49F, + 0xBF43, 0xD4A0, 0xBF44, 0xD4A1, 0xBF45, 0xD4A2, 0xBF46, 0xD4A3, 0xBF47, 0xD4A4, 0xBF48, 0xD4A5, 0xBF49, 0xD4A6, 0xBF4A, 0xD4A7, + 0xBF4B, 0xD4A8, 0xBF4C, 0xD4AA, 0xBF4D, 0xD4AB, 0xBF4E, 0xD4AC, 0xBF4F, 0xD4AD, 0xBF50, 0xD4AE, 0xBF51, 0xD4AF, 0xBF52, 0xD4B0, + 0xBF53, 0xD4B1, 0xBF54, 0xD4B2, 0xBF55, 0xD4B3, 0xBF56, 0xD4B4, 0xBF57, 0xD4B5, 0xBF58, 0xD4B6, 0xBF59, 0xD4B7, 0xBF5A, 0xD4B8, + 0xBF61, 0xD4B9, 0xBF62, 0xD4BA, 0xBF63, 0xD4BB, 0xBF64, 0xD4BC, 0xBF65, 0xD4BD, 0xBF66, 0xD4BE, 0xBF67, 0xD4BF, 0xBF68, 0xD4C0, + 0xBF69, 0xD4C1, 0xBF6A, 0xD4C2, 0xBF6B, 0xD4C3, 0xBF6C, 0xD4C4, 0xBF6D, 0xD4C5, 0xBF6E, 0xD4C6, 0xBF6F, 0xD4C7, 0xBF70, 0xD4C8, + 0xBF71, 0xD4C9, 0xBF72, 0xD4CA, 0xBF73, 0xD4CB, 0xBF74, 0xD4CD, 0xBF75, 0xD4CE, 0xBF76, 0xD4CF, 0xBF77, 0xD4D1, 0xBF78, 0xD4D2, + 0xBF79, 0xD4D3, 0xBF7A, 0xD4D5, 0xBF81, 0xD4D6, 0xBF82, 0xD4D7, 0xBF83, 0xD4D8, 0xBF84, 0xD4D9, 0xBF85, 0xD4DA, 0xBF86, 0xD4DB, + 0xBF87, 0xD4DD, 0xBF88, 0xD4DE, 0xBF89, 0xD4E0, 0xBF8A, 0xD4E1, 0xBF8B, 0xD4E2, 0xBF8C, 0xD4E3, 0xBF8D, 0xD4E4, 0xBF8E, 0xD4E5, + 0xBF8F, 0xD4E6, 0xBF90, 0xD4E7, 0xBF91, 0xD4E9, 0xBF92, 0xD4EA, 0xBF93, 0xD4EB, 0xBF94, 0xD4ED, 0xBF95, 0xD4EE, 0xBF96, 0xD4EF, + 0xBF97, 0xD4F1, 0xBF98, 0xD4F2, 0xBF99, 0xD4F3, 0xBF9A, 0xD4F4, 0xBF9B, 0xD4F5, 0xBF9C, 0xD4F6, 0xBF9D, 0xD4F7, 0xBF9E, 0xD4F9, + 0xBF9F, 0xD4FA, 0xBFA0, 0xD4FC, 0xBFA1, 0xC5D0, 0xBFA2, 0xC5D1, 0xBFA3, 0xC5D4, 0xBFA4, 0xC5D8, 0xBFA5, 0xC5E0, 0xBFA6, 0xC5E1, + 0xBFA7, 0xC5E3, 0xBFA8, 0xC5E5, 0xBFA9, 0xC5EC, 0xBFAA, 0xC5ED, 0xBFAB, 0xC5EE, 0xBFAC, 0xC5F0, 0xBFAD, 0xC5F4, 0xBFAE, 0xC5F6, + 0xBFAF, 0xC5F7, 0xBFB0, 0xC5FC, 0xBFB1, 0xC5FD, 0xBFB2, 0xC5FE, 0xBFB3, 0xC5FF, 0xBFB4, 0xC600, 0xBFB5, 0xC601, 0xBFB6, 0xC605, + 0xBFB7, 0xC606, 0xBFB8, 0xC607, 0xBFB9, 0xC608, 0xBFBA, 0xC60C, 0xBFBB, 0xC610, 0xBFBC, 0xC618, 0xBFBD, 0xC619, 0xBFBE, 0xC61B, + 0xBFBF, 0xC61C, 0xBFC0, 0xC624, 0xBFC1, 0xC625, 0xBFC2, 0xC628, 0xBFC3, 0xC62C, 0xBFC4, 0xC62D, 0xBFC5, 0xC62E, 0xBFC6, 0xC630, + 0xBFC7, 0xC633, 0xBFC8, 0xC634, 0xBFC9, 0xC635, 0xBFCA, 0xC637, 0xBFCB, 0xC639, 0xBFCC, 0xC63B, 0xBFCD, 0xC640, 0xBFCE, 0xC641, + 0xBFCF, 0xC644, 0xBFD0, 0xC648, 0xBFD1, 0xC650, 0xBFD2, 0xC651, 0xBFD3, 0xC653, 0xBFD4, 0xC654, 0xBFD5, 0xC655, 0xBFD6, 0xC65C, + 0xBFD7, 0xC65D, 0xBFD8, 0xC660, 0xBFD9, 0xC66C, 0xBFDA, 0xC66F, 0xBFDB, 0xC671, 0xBFDC, 0xC678, 0xBFDD, 0xC679, 0xBFDE, 0xC67C, + 0xBFDF, 0xC680, 0xBFE0, 0xC688, 0xBFE1, 0xC689, 0xBFE2, 0xC68B, 0xBFE3, 0xC68D, 0xBFE4, 0xC694, 0xBFE5, 0xC695, 0xBFE6, 0xC698, + 0xBFE7, 0xC69C, 0xBFE8, 0xC6A4, 0xBFE9, 0xC6A5, 0xBFEA, 0xC6A7, 0xBFEB, 0xC6A9, 0xBFEC, 0xC6B0, 0xBFED, 0xC6B1, 0xBFEE, 0xC6B4, + 0xBFEF, 0xC6B8, 0xBFF0, 0xC6B9, 0xBFF1, 0xC6BA, 0xBFF2, 0xC6C0, 0xBFF3, 0xC6C1, 0xBFF4, 0xC6C3, 0xBFF5, 0xC6C5, 0xBFF6, 0xC6CC, + 0xBFF7, 0xC6CD, 0xBFF8, 0xC6D0, 0xBFF9, 0xC6D4, 0xBFFA, 0xC6DC, 0xBFFB, 0xC6DD, 0xBFFC, 0xC6E0, 0xBFFD, 0xC6E1, 0xBFFE, 0xC6E8, + 0xC041, 0xD4FE, 0xC042, 0xD4FF, 0xC043, 0xD500, 0xC044, 0xD501, 0xC045, 0xD502, 0xC046, 0xD503, 0xC047, 0xD505, 0xC048, 0xD506, + 0xC049, 0xD507, 0xC04A, 0xD509, 0xC04B, 0xD50A, 0xC04C, 0xD50B, 0xC04D, 0xD50D, 0xC04E, 0xD50E, 0xC04F, 0xD50F, 0xC050, 0xD510, + 0xC051, 0xD511, 0xC052, 0xD512, 0xC053, 0xD513, 0xC054, 0xD516, 0xC055, 0xD518, 0xC056, 0xD519, 0xC057, 0xD51A, 0xC058, 0xD51B, + 0xC059, 0xD51C, 0xC05A, 0xD51D, 0xC061, 0xD51E, 0xC062, 0xD51F, 0xC063, 0xD520, 0xC064, 0xD521, 0xC065, 0xD522, 0xC066, 0xD523, + 0xC067, 0xD524, 0xC068, 0xD525, 0xC069, 0xD526, 0xC06A, 0xD527, 0xC06B, 0xD528, 0xC06C, 0xD529, 0xC06D, 0xD52A, 0xC06E, 0xD52B, + 0xC06F, 0xD52C, 0xC070, 0xD52D, 0xC071, 0xD52E, 0xC072, 0xD52F, 0xC073, 0xD530, 0xC074, 0xD531, 0xC075, 0xD532, 0xC076, 0xD533, + 0xC077, 0xD534, 0xC078, 0xD535, 0xC079, 0xD536, 0xC07A, 0xD537, 0xC081, 0xD538, 0xC082, 0xD539, 0xC083, 0xD53A, 0xC084, 0xD53B, + 0xC085, 0xD53E, 0xC086, 0xD53F, 0xC087, 0xD541, 0xC088, 0xD542, 0xC089, 0xD543, 0xC08A, 0xD545, 0xC08B, 0xD546, 0xC08C, 0xD547, + 0xC08D, 0xD548, 0xC08E, 0xD549, 0xC08F, 0xD54A, 0xC090, 0xD54B, 0xC091, 0xD54E, 0xC092, 0xD550, 0xC093, 0xD552, 0xC094, 0xD553, + 0xC095, 0xD554, 0xC096, 0xD555, 0xC097, 0xD556, 0xC098, 0xD557, 0xC099, 0xD55A, 0xC09A, 0xD55B, 0xC09B, 0xD55D, 0xC09C, 0xD55E, + 0xC09D, 0xD55F, 0xC09E, 0xD561, 0xC09F, 0xD562, 0xC0A0, 0xD563, 0xC0A1, 0xC6E9, 0xC0A2, 0xC6EC, 0xC0A3, 0xC6F0, 0xC0A4, 0xC6F8, + 0xC0A5, 0xC6F9, 0xC0A6, 0xC6FD, 0xC0A7, 0xC704, 0xC0A8, 0xC705, 0xC0A9, 0xC708, 0xC0AA, 0xC70C, 0xC0AB, 0xC714, 0xC0AC, 0xC715, + 0xC0AD, 0xC717, 0xC0AE, 0xC719, 0xC0AF, 0xC720, 0xC0B0, 0xC721, 0xC0B1, 0xC724, 0xC0B2, 0xC728, 0xC0B3, 0xC730, 0xC0B4, 0xC731, + 0xC0B5, 0xC733, 0xC0B6, 0xC735, 0xC0B7, 0xC737, 0xC0B8, 0xC73C, 0xC0B9, 0xC73D, 0xC0BA, 0xC740, 0xC0BB, 0xC744, 0xC0BC, 0xC74A, + 0xC0BD, 0xC74C, 0xC0BE, 0xC74D, 0xC0BF, 0xC74F, 0xC0C0, 0xC751, 0xC0C1, 0xC752, 0xC0C2, 0xC753, 0xC0C3, 0xC754, 0xC0C4, 0xC755, + 0xC0C5, 0xC756, 0xC0C6, 0xC757, 0xC0C7, 0xC758, 0xC0C8, 0xC75C, 0xC0C9, 0xC760, 0xC0CA, 0xC768, 0xC0CB, 0xC76B, 0xC0CC, 0xC774, + 0xC0CD, 0xC775, 0xC0CE, 0xC778, 0xC0CF, 0xC77C, 0xC0D0, 0xC77D, 0xC0D1, 0xC77E, 0xC0D2, 0xC783, 0xC0D3, 0xC784, 0xC0D4, 0xC785, + 0xC0D5, 0xC787, 0xC0D6, 0xC788, 0xC0D7, 0xC789, 0xC0D8, 0xC78A, 0xC0D9, 0xC78E, 0xC0DA, 0xC790, 0xC0DB, 0xC791, 0xC0DC, 0xC794, + 0xC0DD, 0xC796, 0xC0DE, 0xC797, 0xC0DF, 0xC798, 0xC0E0, 0xC79A, 0xC0E1, 0xC7A0, 0xC0E2, 0xC7A1, 0xC0E3, 0xC7A3, 0xC0E4, 0xC7A4, + 0xC0E5, 0xC7A5, 0xC0E6, 0xC7A6, 0xC0E7, 0xC7AC, 0xC0E8, 0xC7AD, 0xC0E9, 0xC7B0, 0xC0EA, 0xC7B4, 0xC0EB, 0xC7BC, 0xC0EC, 0xC7BD, + 0xC0ED, 0xC7BF, 0xC0EE, 0xC7C0, 0xC0EF, 0xC7C1, 0xC0F0, 0xC7C8, 0xC0F1, 0xC7C9, 0xC0F2, 0xC7CC, 0xC0F3, 0xC7CE, 0xC0F4, 0xC7D0, + 0xC0F5, 0xC7D8, 0xC0F6, 0xC7DD, 0xC0F7, 0xC7E4, 0xC0F8, 0xC7E8, 0xC0F9, 0xC7EC, 0xC0FA, 0xC800, 0xC0FB, 0xC801, 0xC0FC, 0xC804, + 0xC0FD, 0xC808, 0xC0FE, 0xC80A, 0xC141, 0xD564, 0xC142, 0xD566, 0xC143, 0xD567, 0xC144, 0xD56A, 0xC145, 0xD56C, 0xC146, 0xD56E, + 0xC147, 0xD56F, 0xC148, 0xD570, 0xC149, 0xD571, 0xC14A, 0xD572, 0xC14B, 0xD573, 0xC14C, 0xD576, 0xC14D, 0xD577, 0xC14E, 0xD579, + 0xC14F, 0xD57A, 0xC150, 0xD57B, 0xC151, 0xD57D, 0xC152, 0xD57E, 0xC153, 0xD57F, 0xC154, 0xD580, 0xC155, 0xD581, 0xC156, 0xD582, + 0xC157, 0xD583, 0xC158, 0xD586, 0xC159, 0xD58A, 0xC15A, 0xD58B, 0xC161, 0xD58C, 0xC162, 0xD58D, 0xC163, 0xD58E, 0xC164, 0xD58F, + 0xC165, 0xD591, 0xC166, 0xD592, 0xC167, 0xD593, 0xC168, 0xD594, 0xC169, 0xD595, 0xC16A, 0xD596, 0xC16B, 0xD597, 0xC16C, 0xD598, + 0xC16D, 0xD599, 0xC16E, 0xD59A, 0xC16F, 0xD59B, 0xC170, 0xD59C, 0xC171, 0xD59D, 0xC172, 0xD59E, 0xC173, 0xD59F, 0xC174, 0xD5A0, + 0xC175, 0xD5A1, 0xC176, 0xD5A2, 0xC177, 0xD5A3, 0xC178, 0xD5A4, 0xC179, 0xD5A6, 0xC17A, 0xD5A7, 0xC181, 0xD5A8, 0xC182, 0xD5A9, + 0xC183, 0xD5AA, 0xC184, 0xD5AB, 0xC185, 0xD5AC, 0xC186, 0xD5AD, 0xC187, 0xD5AE, 0xC188, 0xD5AF, 0xC189, 0xD5B0, 0xC18A, 0xD5B1, + 0xC18B, 0xD5B2, 0xC18C, 0xD5B3, 0xC18D, 0xD5B4, 0xC18E, 0xD5B5, 0xC18F, 0xD5B6, 0xC190, 0xD5B7, 0xC191, 0xD5B8, 0xC192, 0xD5B9, + 0xC193, 0xD5BA, 0xC194, 0xD5BB, 0xC195, 0xD5BC, 0xC196, 0xD5BD, 0xC197, 0xD5BE, 0xC198, 0xD5BF, 0xC199, 0xD5C0, 0xC19A, 0xD5C1, + 0xC19B, 0xD5C2, 0xC19C, 0xD5C3, 0xC19D, 0xD5C4, 0xC19E, 0xD5C5, 0xC19F, 0xD5C6, 0xC1A0, 0xD5C7, 0xC1A1, 0xC810, 0xC1A2, 0xC811, + 0xC1A3, 0xC813, 0xC1A4, 0xC815, 0xC1A5, 0xC816, 0xC1A6, 0xC81C, 0xC1A7, 0xC81D, 0xC1A8, 0xC820, 0xC1A9, 0xC824, 0xC1AA, 0xC82C, + 0xC1AB, 0xC82D, 0xC1AC, 0xC82F, 0xC1AD, 0xC831, 0xC1AE, 0xC838, 0xC1AF, 0xC83C, 0xC1B0, 0xC840, 0xC1B1, 0xC848, 0xC1B2, 0xC849, + 0xC1B3, 0xC84C, 0xC1B4, 0xC84D, 0xC1B5, 0xC854, 0xC1B6, 0xC870, 0xC1B7, 0xC871, 0xC1B8, 0xC874, 0xC1B9, 0xC878, 0xC1BA, 0xC87A, + 0xC1BB, 0xC880, 0xC1BC, 0xC881, 0xC1BD, 0xC883, 0xC1BE, 0xC885, 0xC1BF, 0xC886, 0xC1C0, 0xC887, 0xC1C1, 0xC88B, 0xC1C2, 0xC88C, + 0xC1C3, 0xC88D, 0xC1C4, 0xC894, 0xC1C5, 0xC89D, 0xC1C6, 0xC89F, 0xC1C7, 0xC8A1, 0xC1C8, 0xC8A8, 0xC1C9, 0xC8BC, 0xC1CA, 0xC8BD, + 0xC1CB, 0xC8C4, 0xC1CC, 0xC8C8, 0xC1CD, 0xC8CC, 0xC1CE, 0xC8D4, 0xC1CF, 0xC8D5, 0xC1D0, 0xC8D7, 0xC1D1, 0xC8D9, 0xC1D2, 0xC8E0, + 0xC1D3, 0xC8E1, 0xC1D4, 0xC8E4, 0xC1D5, 0xC8F5, 0xC1D6, 0xC8FC, 0xC1D7, 0xC8FD, 0xC1D8, 0xC900, 0xC1D9, 0xC904, 0xC1DA, 0xC905, + 0xC1DB, 0xC906, 0xC1DC, 0xC90C, 0xC1DD, 0xC90D, 0xC1DE, 0xC90F, 0xC1DF, 0xC911, 0xC1E0, 0xC918, 0xC1E1, 0xC92C, 0xC1E2, 0xC934, + 0xC1E3, 0xC950, 0xC1E4, 0xC951, 0xC1E5, 0xC954, 0xC1E6, 0xC958, 0xC1E7, 0xC960, 0xC1E8, 0xC961, 0xC1E9, 0xC963, 0xC1EA, 0xC96C, + 0xC1EB, 0xC970, 0xC1EC, 0xC974, 0xC1ED, 0xC97C, 0xC1EE, 0xC988, 0xC1EF, 0xC989, 0xC1F0, 0xC98C, 0xC1F1, 0xC990, 0xC1F2, 0xC998, + 0xC1F3, 0xC999, 0xC1F4, 0xC99B, 0xC1F5, 0xC99D, 0xC1F6, 0xC9C0, 0xC1F7, 0xC9C1, 0xC1F8, 0xC9C4, 0xC1F9, 0xC9C7, 0xC1FA, 0xC9C8, + 0xC1FB, 0xC9CA, 0xC1FC, 0xC9D0, 0xC1FD, 0xC9D1, 0xC1FE, 0xC9D3, 0xC241, 0xD5CA, 0xC242, 0xD5CB, 0xC243, 0xD5CD, 0xC244, 0xD5CE, + 0xC245, 0xD5CF, 0xC246, 0xD5D1, 0xC247, 0xD5D3, 0xC248, 0xD5D4, 0xC249, 0xD5D5, 0xC24A, 0xD5D6, 0xC24B, 0xD5D7, 0xC24C, 0xD5DA, + 0xC24D, 0xD5DC, 0xC24E, 0xD5DE, 0xC24F, 0xD5DF, 0xC250, 0xD5E0, 0xC251, 0xD5E1, 0xC252, 0xD5E2, 0xC253, 0xD5E3, 0xC254, 0xD5E6, + 0xC255, 0xD5E7, 0xC256, 0xD5E9, 0xC257, 0xD5EA, 0xC258, 0xD5EB, 0xC259, 0xD5ED, 0xC25A, 0xD5EE, 0xC261, 0xD5EF, 0xC262, 0xD5F0, + 0xC263, 0xD5F1, 0xC264, 0xD5F2, 0xC265, 0xD5F3, 0xC266, 0xD5F6, 0xC267, 0xD5F8, 0xC268, 0xD5FA, 0xC269, 0xD5FB, 0xC26A, 0xD5FC, + 0xC26B, 0xD5FD, 0xC26C, 0xD5FE, 0xC26D, 0xD5FF, 0xC26E, 0xD602, 0xC26F, 0xD603, 0xC270, 0xD605, 0xC271, 0xD606, 0xC272, 0xD607, + 0xC273, 0xD609, 0xC274, 0xD60A, 0xC275, 0xD60B, 0xC276, 0xD60C, 0xC277, 0xD60D, 0xC278, 0xD60E, 0xC279, 0xD60F, 0xC27A, 0xD612, + 0xC281, 0xD616, 0xC282, 0xD617, 0xC283, 0xD618, 0xC284, 0xD619, 0xC285, 0xD61A, 0xC286, 0xD61B, 0xC287, 0xD61D, 0xC288, 0xD61E, + 0xC289, 0xD61F, 0xC28A, 0xD621, 0xC28B, 0xD622, 0xC28C, 0xD623, 0xC28D, 0xD625, 0xC28E, 0xD626, 0xC28F, 0xD627, 0xC290, 0xD628, + 0xC291, 0xD629, 0xC292, 0xD62A, 0xC293, 0xD62B, 0xC294, 0xD62C, 0xC295, 0xD62E, 0xC296, 0xD62F, 0xC297, 0xD630, 0xC298, 0xD631, + 0xC299, 0xD632, 0xC29A, 0xD633, 0xC29B, 0xD634, 0xC29C, 0xD635, 0xC29D, 0xD636, 0xC29E, 0xD637, 0xC29F, 0xD63A, 0xC2A0, 0xD63B, + 0xC2A1, 0xC9D5, 0xC2A2, 0xC9D6, 0xC2A3, 0xC9D9, 0xC2A4, 0xC9DA, 0xC2A5, 0xC9DC, 0xC2A6, 0xC9DD, 0xC2A7, 0xC9E0, 0xC2A8, 0xC9E2, + 0xC2A9, 0xC9E4, 0xC2AA, 0xC9E7, 0xC2AB, 0xC9EC, 0xC2AC, 0xC9ED, 0xC2AD, 0xC9EF, 0xC2AE, 0xC9F0, 0xC2AF, 0xC9F1, 0xC2B0, 0xC9F8, + 0xC2B1, 0xC9F9, 0xC2B2, 0xC9FC, 0xC2B3, 0xCA00, 0xC2B4, 0xCA08, 0xC2B5, 0xCA09, 0xC2B6, 0xCA0B, 0xC2B7, 0xCA0C, 0xC2B8, 0xCA0D, + 0xC2B9, 0xCA14, 0xC2BA, 0xCA18, 0xC2BB, 0xCA29, 0xC2BC, 0xCA4C, 0xC2BD, 0xCA4D, 0xC2BE, 0xCA50, 0xC2BF, 0xCA54, 0xC2C0, 0xCA5C, + 0xC2C1, 0xCA5D, 0xC2C2, 0xCA5F, 0xC2C3, 0xCA60, 0xC2C4, 0xCA61, 0xC2C5, 0xCA68, 0xC2C6, 0xCA7D, 0xC2C7, 0xCA84, 0xC2C8, 0xCA98, + 0xC2C9, 0xCABC, 0xC2CA, 0xCABD, 0xC2CB, 0xCAC0, 0xC2CC, 0xCAC4, 0xC2CD, 0xCACC, 0xC2CE, 0xCACD, 0xC2CF, 0xCACF, 0xC2D0, 0xCAD1, + 0xC2D1, 0xCAD3, 0xC2D2, 0xCAD8, 0xC2D3, 0xCAD9, 0xC2D4, 0xCAE0, 0xC2D5, 0xCAEC, 0xC2D6, 0xCAF4, 0xC2D7, 0xCB08, 0xC2D8, 0xCB10, + 0xC2D9, 0xCB14, 0xC2DA, 0xCB18, 0xC2DB, 0xCB20, 0xC2DC, 0xCB21, 0xC2DD, 0xCB41, 0xC2DE, 0xCB48, 0xC2DF, 0xCB49, 0xC2E0, 0xCB4C, + 0xC2E1, 0xCB50, 0xC2E2, 0xCB58, 0xC2E3, 0xCB59, 0xC2E4, 0xCB5D, 0xC2E5, 0xCB64, 0xC2E6, 0xCB78, 0xC2E7, 0xCB79, 0xC2E8, 0xCB9C, + 0xC2E9, 0xCBB8, 0xC2EA, 0xCBD4, 0xC2EB, 0xCBE4, 0xC2EC, 0xCBE7, 0xC2ED, 0xCBE9, 0xC2EE, 0xCC0C, 0xC2EF, 0xCC0D, 0xC2F0, 0xCC10, + 0xC2F1, 0xCC14, 0xC2F2, 0xCC1C, 0xC2F3, 0xCC1D, 0xC2F4, 0xCC21, 0xC2F5, 0xCC22, 0xC2F6, 0xCC27, 0xC2F7, 0xCC28, 0xC2F8, 0xCC29, + 0xC2F9, 0xCC2C, 0xC2FA, 0xCC2E, 0xC2FB, 0xCC30, 0xC2FC, 0xCC38, 0xC2FD, 0xCC39, 0xC2FE, 0xCC3B, 0xC341, 0xD63D, 0xC342, 0xD63E, + 0xC343, 0xD63F, 0xC344, 0xD641, 0xC345, 0xD642, 0xC346, 0xD643, 0xC347, 0xD644, 0xC348, 0xD646, 0xC349, 0xD647, 0xC34A, 0xD64A, + 0xC34B, 0xD64C, 0xC34C, 0xD64E, 0xC34D, 0xD64F, 0xC34E, 0xD650, 0xC34F, 0xD652, 0xC350, 0xD653, 0xC351, 0xD656, 0xC352, 0xD657, + 0xC353, 0xD659, 0xC354, 0xD65A, 0xC355, 0xD65B, 0xC356, 0xD65D, 0xC357, 0xD65E, 0xC358, 0xD65F, 0xC359, 0xD660, 0xC35A, 0xD661, + 0xC361, 0xD662, 0xC362, 0xD663, 0xC363, 0xD664, 0xC364, 0xD665, 0xC365, 0xD666, 0xC366, 0xD668, 0xC367, 0xD66A, 0xC368, 0xD66B, + 0xC369, 0xD66C, 0xC36A, 0xD66D, 0xC36B, 0xD66E, 0xC36C, 0xD66F, 0xC36D, 0xD672, 0xC36E, 0xD673, 0xC36F, 0xD675, 0xC370, 0xD676, + 0xC371, 0xD677, 0xC372, 0xD678, 0xC373, 0xD679, 0xC374, 0xD67A, 0xC375, 0xD67B, 0xC376, 0xD67C, 0xC377, 0xD67D, 0xC378, 0xD67E, + 0xC379, 0xD67F, 0xC37A, 0xD680, 0xC381, 0xD681, 0xC382, 0xD682, 0xC383, 0xD684, 0xC384, 0xD686, 0xC385, 0xD687, 0xC386, 0xD688, + 0xC387, 0xD689, 0xC388, 0xD68A, 0xC389, 0xD68B, 0xC38A, 0xD68E, 0xC38B, 0xD68F, 0xC38C, 0xD691, 0xC38D, 0xD692, 0xC38E, 0xD693, + 0xC38F, 0xD695, 0xC390, 0xD696, 0xC391, 0xD697, 0xC392, 0xD698, 0xC393, 0xD699, 0xC394, 0xD69A, 0xC395, 0xD69B, 0xC396, 0xD69C, + 0xC397, 0xD69E, 0xC398, 0xD6A0, 0xC399, 0xD6A2, 0xC39A, 0xD6A3, 0xC39B, 0xD6A4, 0xC39C, 0xD6A5, 0xC39D, 0xD6A6, 0xC39E, 0xD6A7, + 0xC39F, 0xD6A9, 0xC3A0, 0xD6AA, 0xC3A1, 0xCC3C, 0xC3A2, 0xCC3D, 0xC3A3, 0xCC3E, 0xC3A4, 0xCC44, 0xC3A5, 0xCC45, 0xC3A6, 0xCC48, + 0xC3A7, 0xCC4C, 0xC3A8, 0xCC54, 0xC3A9, 0xCC55, 0xC3AA, 0xCC57, 0xC3AB, 0xCC58, 0xC3AC, 0xCC59, 0xC3AD, 0xCC60, 0xC3AE, 0xCC64, + 0xC3AF, 0xCC66, 0xC3B0, 0xCC68, 0xC3B1, 0xCC70, 0xC3B2, 0xCC75, 0xC3B3, 0xCC98, 0xC3B4, 0xCC99, 0xC3B5, 0xCC9C, 0xC3B6, 0xCCA0, + 0xC3B7, 0xCCA8, 0xC3B8, 0xCCA9, 0xC3B9, 0xCCAB, 0xC3BA, 0xCCAC, 0xC3BB, 0xCCAD, 0xC3BC, 0xCCB4, 0xC3BD, 0xCCB5, 0xC3BE, 0xCCB8, + 0xC3BF, 0xCCBC, 0xC3C0, 0xCCC4, 0xC3C1, 0xCCC5, 0xC3C2, 0xCCC7, 0xC3C3, 0xCCC9, 0xC3C4, 0xCCD0, 0xC3C5, 0xCCD4, 0xC3C6, 0xCCE4, + 0xC3C7, 0xCCEC, 0xC3C8, 0xCCF0, 0xC3C9, 0xCD01, 0xC3CA, 0xCD08, 0xC3CB, 0xCD09, 0xC3CC, 0xCD0C, 0xC3CD, 0xCD10, 0xC3CE, 0xCD18, + 0xC3CF, 0xCD19, 0xC3D0, 0xCD1B, 0xC3D1, 0xCD1D, 0xC3D2, 0xCD24, 0xC3D3, 0xCD28, 0xC3D4, 0xCD2C, 0xC3D5, 0xCD39, 0xC3D6, 0xCD5C, + 0xC3D7, 0xCD60, 0xC3D8, 0xCD64, 0xC3D9, 0xCD6C, 0xC3DA, 0xCD6D, 0xC3DB, 0xCD6F, 0xC3DC, 0xCD71, 0xC3DD, 0xCD78, 0xC3DE, 0xCD88, + 0xC3DF, 0xCD94, 0xC3E0, 0xCD95, 0xC3E1, 0xCD98, 0xC3E2, 0xCD9C, 0xC3E3, 0xCDA4, 0xC3E4, 0xCDA5, 0xC3E5, 0xCDA7, 0xC3E6, 0xCDA9, + 0xC3E7, 0xCDB0, 0xC3E8, 0xCDC4, 0xC3E9, 0xCDCC, 0xC3EA, 0xCDD0, 0xC3EB, 0xCDE8, 0xC3EC, 0xCDEC, 0xC3ED, 0xCDF0, 0xC3EE, 0xCDF8, + 0xC3EF, 0xCDF9, 0xC3F0, 0xCDFB, 0xC3F1, 0xCDFD, 0xC3F2, 0xCE04, 0xC3F3, 0xCE08, 0xC3F4, 0xCE0C, 0xC3F5, 0xCE14, 0xC3F6, 0xCE19, + 0xC3F7, 0xCE20, 0xC3F8, 0xCE21, 0xC3F9, 0xCE24, 0xC3FA, 0xCE28, 0xC3FB, 0xCE30, 0xC3FC, 0xCE31, 0xC3FD, 0xCE33, 0xC3FE, 0xCE35, + 0xC441, 0xD6AB, 0xC442, 0xD6AD, 0xC443, 0xD6AE, 0xC444, 0xD6AF, 0xC445, 0xD6B1, 0xC446, 0xD6B2, 0xC447, 0xD6B3, 0xC448, 0xD6B4, + 0xC449, 0xD6B5, 0xC44A, 0xD6B6, 0xC44B, 0xD6B7, 0xC44C, 0xD6B8, 0xC44D, 0xD6BA, 0xC44E, 0xD6BC, 0xC44F, 0xD6BD, 0xC450, 0xD6BE, + 0xC451, 0xD6BF, 0xC452, 0xD6C0, 0xC453, 0xD6C1, 0xC454, 0xD6C2, 0xC455, 0xD6C3, 0xC456, 0xD6C6, 0xC457, 0xD6C7, 0xC458, 0xD6C9, + 0xC459, 0xD6CA, 0xC45A, 0xD6CB, 0xC461, 0xD6CD, 0xC462, 0xD6CE, 0xC463, 0xD6CF, 0xC464, 0xD6D0, 0xC465, 0xD6D2, 0xC466, 0xD6D3, + 0xC467, 0xD6D5, 0xC468, 0xD6D6, 0xC469, 0xD6D8, 0xC46A, 0xD6DA, 0xC46B, 0xD6DB, 0xC46C, 0xD6DC, 0xC46D, 0xD6DD, 0xC46E, 0xD6DE, + 0xC46F, 0xD6DF, 0xC470, 0xD6E1, 0xC471, 0xD6E2, 0xC472, 0xD6E3, 0xC473, 0xD6E5, 0xC474, 0xD6E6, 0xC475, 0xD6E7, 0xC476, 0xD6E9, + 0xC477, 0xD6EA, 0xC478, 0xD6EB, 0xC479, 0xD6EC, 0xC47A, 0xD6ED, 0xC481, 0xD6EE, 0xC482, 0xD6EF, 0xC483, 0xD6F1, 0xC484, 0xD6F2, + 0xC485, 0xD6F3, 0xC486, 0xD6F4, 0xC487, 0xD6F6, 0xC488, 0xD6F7, 0xC489, 0xD6F8, 0xC48A, 0xD6F9, 0xC48B, 0xD6FA, 0xC48C, 0xD6FB, + 0xC48D, 0xD6FE, 0xC48E, 0xD6FF, 0xC48F, 0xD701, 0xC490, 0xD702, 0xC491, 0xD703, 0xC492, 0xD705, 0xC493, 0xD706, 0xC494, 0xD707, + 0xC495, 0xD708, 0xC496, 0xD709, 0xC497, 0xD70A, 0xC498, 0xD70B, 0xC499, 0xD70C, 0xC49A, 0xD70D, 0xC49B, 0xD70E, 0xC49C, 0xD70F, + 0xC49D, 0xD710, 0xC49E, 0xD712, 0xC49F, 0xD713, 0xC4A0, 0xD714, 0xC4A1, 0xCE58, 0xC4A2, 0xCE59, 0xC4A3, 0xCE5C, 0xC4A4, 0xCE5F, + 0xC4A5, 0xCE60, 0xC4A6, 0xCE61, 0xC4A7, 0xCE68, 0xC4A8, 0xCE69, 0xC4A9, 0xCE6B, 0xC4AA, 0xCE6D, 0xC4AB, 0xCE74, 0xC4AC, 0xCE75, + 0xC4AD, 0xCE78, 0xC4AE, 0xCE7C, 0xC4AF, 0xCE84, 0xC4B0, 0xCE85, 0xC4B1, 0xCE87, 0xC4B2, 0xCE89, 0xC4B3, 0xCE90, 0xC4B4, 0xCE91, + 0xC4B5, 0xCE94, 0xC4B6, 0xCE98, 0xC4B7, 0xCEA0, 0xC4B8, 0xCEA1, 0xC4B9, 0xCEA3, 0xC4BA, 0xCEA4, 0xC4BB, 0xCEA5, 0xC4BC, 0xCEAC, + 0xC4BD, 0xCEAD, 0xC4BE, 0xCEC1, 0xC4BF, 0xCEE4, 0xC4C0, 0xCEE5, 0xC4C1, 0xCEE8, 0xC4C2, 0xCEEB, 0xC4C3, 0xCEEC, 0xC4C4, 0xCEF4, + 0xC4C5, 0xCEF5, 0xC4C6, 0xCEF7, 0xC4C7, 0xCEF8, 0xC4C8, 0xCEF9, 0xC4C9, 0xCF00, 0xC4CA, 0xCF01, 0xC4CB, 0xCF04, 0xC4CC, 0xCF08, + 0xC4CD, 0xCF10, 0xC4CE, 0xCF11, 0xC4CF, 0xCF13, 0xC4D0, 0xCF15, 0xC4D1, 0xCF1C, 0xC4D2, 0xCF20, 0xC4D3, 0xCF24, 0xC4D4, 0xCF2C, + 0xC4D5, 0xCF2D, 0xC4D6, 0xCF2F, 0xC4D7, 0xCF30, 0xC4D8, 0xCF31, 0xC4D9, 0xCF38, 0xC4DA, 0xCF54, 0xC4DB, 0xCF55, 0xC4DC, 0xCF58, + 0xC4DD, 0xCF5C, 0xC4DE, 0xCF64, 0xC4DF, 0xCF65, 0xC4E0, 0xCF67, 0xC4E1, 0xCF69, 0xC4E2, 0xCF70, 0xC4E3, 0xCF71, 0xC4E4, 0xCF74, + 0xC4E5, 0xCF78, 0xC4E6, 0xCF80, 0xC4E7, 0xCF85, 0xC4E8, 0xCF8C, 0xC4E9, 0xCFA1, 0xC4EA, 0xCFA8, 0xC4EB, 0xCFB0, 0xC4EC, 0xCFC4, + 0xC4ED, 0xCFE0, 0xC4EE, 0xCFE1, 0xC4EF, 0xCFE4, 0xC4F0, 0xCFE8, 0xC4F1, 0xCFF0, 0xC4F2, 0xCFF1, 0xC4F3, 0xCFF3, 0xC4F4, 0xCFF5, + 0xC4F5, 0xCFFC, 0xC4F6, 0xD000, 0xC4F7, 0xD004, 0xC4F8, 0xD011, 0xC4F9, 0xD018, 0xC4FA, 0xD02D, 0xC4FB, 0xD034, 0xC4FC, 0xD035, + 0xC4FD, 0xD038, 0xC4FE, 0xD03C, 0xC541, 0xD715, 0xC542, 0xD716, 0xC543, 0xD717, 0xC544, 0xD71A, 0xC545, 0xD71B, 0xC546, 0xD71D, + 0xC547, 0xD71E, 0xC548, 0xD71F, 0xC549, 0xD721, 0xC54A, 0xD722, 0xC54B, 0xD723, 0xC54C, 0xD724, 0xC54D, 0xD725, 0xC54E, 0xD726, + 0xC54F, 0xD727, 0xC550, 0xD72A, 0xC551, 0xD72C, 0xC552, 0xD72E, 0xC553, 0xD72F, 0xC554, 0xD730, 0xC555, 0xD731, 0xC556, 0xD732, + 0xC557, 0xD733, 0xC558, 0xD736, 0xC559, 0xD737, 0xC55A, 0xD739, 0xC561, 0xD73A, 0xC562, 0xD73B, 0xC563, 0xD73D, 0xC564, 0xD73E, + 0xC565, 0xD73F, 0xC566, 0xD740, 0xC567, 0xD741, 0xC568, 0xD742, 0xC569, 0xD743, 0xC56A, 0xD745, 0xC56B, 0xD746, 0xC56C, 0xD748, + 0xC56D, 0xD74A, 0xC56E, 0xD74B, 0xC56F, 0xD74C, 0xC570, 0xD74D, 0xC571, 0xD74E, 0xC572, 0xD74F, 0xC573, 0xD752, 0xC574, 0xD753, + 0xC575, 0xD755, 0xC576, 0xD75A, 0xC577, 0xD75B, 0xC578, 0xD75C, 0xC579, 0xD75D, 0xC57A, 0xD75E, 0xC581, 0xD75F, 0xC582, 0xD762, + 0xC583, 0xD764, 0xC584, 0xD766, 0xC585, 0xD767, 0xC586, 0xD768, 0xC587, 0xD76A, 0xC588, 0xD76B, 0xC589, 0xD76D, 0xC58A, 0xD76E, + 0xC58B, 0xD76F, 0xC58C, 0xD771, 0xC58D, 0xD772, 0xC58E, 0xD773, 0xC58F, 0xD775, 0xC590, 0xD776, 0xC591, 0xD777, 0xC592, 0xD778, + 0xC593, 0xD779, 0xC594, 0xD77A, 0xC595, 0xD77B, 0xC596, 0xD77E, 0xC597, 0xD77F, 0xC598, 0xD780, 0xC599, 0xD782, 0xC59A, 0xD783, + 0xC59B, 0xD784, 0xC59C, 0xD785, 0xC59D, 0xD786, 0xC59E, 0xD787, 0xC59F, 0xD78A, 0xC5A0, 0xD78B, 0xC5A1, 0xD044, 0xC5A2, 0xD045, + 0xC5A3, 0xD047, 0xC5A4, 0xD049, 0xC5A5, 0xD050, 0xC5A6, 0xD054, 0xC5A7, 0xD058, 0xC5A8, 0xD060, 0xC5A9, 0xD06C, 0xC5AA, 0xD06D, + 0xC5AB, 0xD070, 0xC5AC, 0xD074, 0xC5AD, 0xD07C, 0xC5AE, 0xD07D, 0xC5AF, 0xD081, 0xC5B0, 0xD0A4, 0xC5B1, 0xD0A5, 0xC5B2, 0xD0A8, + 0xC5B3, 0xD0AC, 0xC5B4, 0xD0B4, 0xC5B5, 0xD0B5, 0xC5B6, 0xD0B7, 0xC5B7, 0xD0B9, 0xC5B8, 0xD0C0, 0xC5B9, 0xD0C1, 0xC5BA, 0xD0C4, + 0xC5BB, 0xD0C8, 0xC5BC, 0xD0C9, 0xC5BD, 0xD0D0, 0xC5BE, 0xD0D1, 0xC5BF, 0xD0D3, 0xC5C0, 0xD0D4, 0xC5C1, 0xD0D5, 0xC5C2, 0xD0DC, + 0xC5C3, 0xD0DD, 0xC5C4, 0xD0E0, 0xC5C5, 0xD0E4, 0xC5C6, 0xD0EC, 0xC5C7, 0xD0ED, 0xC5C8, 0xD0EF, 0xC5C9, 0xD0F0, 0xC5CA, 0xD0F1, + 0xC5CB, 0xD0F8, 0xC5CC, 0xD10D, 0xC5CD, 0xD130, 0xC5CE, 0xD131, 0xC5CF, 0xD134, 0xC5D0, 0xD138, 0xC5D1, 0xD13A, 0xC5D2, 0xD140, + 0xC5D3, 0xD141, 0xC5D4, 0xD143, 0xC5D5, 0xD144, 0xC5D6, 0xD145, 0xC5D7, 0xD14C, 0xC5D8, 0xD14D, 0xC5D9, 0xD150, 0xC5DA, 0xD154, + 0xC5DB, 0xD15C, 0xC5DC, 0xD15D, 0xC5DD, 0xD15F, 0xC5DE, 0xD161, 0xC5DF, 0xD168, 0xC5E0, 0xD16C, 0xC5E1, 0xD17C, 0xC5E2, 0xD184, + 0xC5E3, 0xD188, 0xC5E4, 0xD1A0, 0xC5E5, 0xD1A1, 0xC5E6, 0xD1A4, 0xC5E7, 0xD1A8, 0xC5E8, 0xD1B0, 0xC5E9, 0xD1B1, 0xC5EA, 0xD1B3, + 0xC5EB, 0xD1B5, 0xC5EC, 0xD1BA, 0xC5ED, 0xD1BC, 0xC5EE, 0xD1C0, 0xC5EF, 0xD1D8, 0xC5F0, 0xD1F4, 0xC5F1, 0xD1F8, 0xC5F2, 0xD207, + 0xC5F3, 0xD209, 0xC5F4, 0xD210, 0xC5F5, 0xD22C, 0xC5F6, 0xD22D, 0xC5F7, 0xD230, 0xC5F8, 0xD234, 0xC5F9, 0xD23C, 0xC5FA, 0xD23D, + 0xC5FB, 0xD23F, 0xC5FC, 0xD241, 0xC5FD, 0xD248, 0xC5FE, 0xD25C, 0xC641, 0xD78D, 0xC642, 0xD78E, 0xC643, 0xD78F, 0xC644, 0xD791, + 0xC645, 0xD792, 0xC646, 0xD793, 0xC647, 0xD794, 0xC648, 0xD795, 0xC649, 0xD796, 0xC64A, 0xD797, 0xC64B, 0xD79A, 0xC64C, 0xD79C, + 0xC64D, 0xD79E, 0xC64E, 0xD79F, 0xC64F, 0xD7A0, 0xC650, 0xD7A1, 0xC651, 0xD7A2, 0xC652, 0xD7A3, 0xC6A1, 0xD264, 0xC6A2, 0xD280, + 0xC6A3, 0xD281, 0xC6A4, 0xD284, 0xC6A5, 0xD288, 0xC6A6, 0xD290, 0xC6A7, 0xD291, 0xC6A8, 0xD295, 0xC6A9, 0xD29C, 0xC6AA, 0xD2A0, + 0xC6AB, 0xD2A4, 0xC6AC, 0xD2AC, 0xC6AD, 0xD2B1, 0xC6AE, 0xD2B8, 0xC6AF, 0xD2B9, 0xC6B0, 0xD2BC, 0xC6B1, 0xD2BF, 0xC6B2, 0xD2C0, + 0xC6B3, 0xD2C2, 0xC6B4, 0xD2C8, 0xC6B5, 0xD2C9, 0xC6B6, 0xD2CB, 0xC6B7, 0xD2D4, 0xC6B8, 0xD2D8, 0xC6B9, 0xD2DC, 0xC6BA, 0xD2E4, + 0xC6BB, 0xD2E5, 0xC6BC, 0xD2F0, 0xC6BD, 0xD2F1, 0xC6BE, 0xD2F4, 0xC6BF, 0xD2F8, 0xC6C0, 0xD300, 0xC6C1, 0xD301, 0xC6C2, 0xD303, + 0xC6C3, 0xD305, 0xC6C4, 0xD30C, 0xC6C5, 0xD30D, 0xC6C6, 0xD30E, 0xC6C7, 0xD310, 0xC6C8, 0xD314, 0xC6C9, 0xD316, 0xC6CA, 0xD31C, + 0xC6CB, 0xD31D, 0xC6CC, 0xD31F, 0xC6CD, 0xD320, 0xC6CE, 0xD321, 0xC6CF, 0xD325, 0xC6D0, 0xD328, 0xC6D1, 0xD329, 0xC6D2, 0xD32C, + 0xC6D3, 0xD330, 0xC6D4, 0xD338, 0xC6D5, 0xD339, 0xC6D6, 0xD33B, 0xC6D7, 0xD33C, 0xC6D8, 0xD33D, 0xC6D9, 0xD344, 0xC6DA, 0xD345, + 0xC6DB, 0xD37C, 0xC6DC, 0xD37D, 0xC6DD, 0xD380, 0xC6DE, 0xD384, 0xC6DF, 0xD38C, 0xC6E0, 0xD38D, 0xC6E1, 0xD38F, 0xC6E2, 0xD390, + 0xC6E3, 0xD391, 0xC6E4, 0xD398, 0xC6E5, 0xD399, 0xC6E6, 0xD39C, 0xC6E7, 0xD3A0, 0xC6E8, 0xD3A8, 0xC6E9, 0xD3A9, 0xC6EA, 0xD3AB, + 0xC6EB, 0xD3AD, 0xC6EC, 0xD3B4, 0xC6ED, 0xD3B8, 0xC6EE, 0xD3BC, 0xC6EF, 0xD3C4, 0xC6F0, 0xD3C5, 0xC6F1, 0xD3C8, 0xC6F2, 0xD3C9, + 0xC6F3, 0xD3D0, 0xC6F4, 0xD3D8, 0xC6F5, 0xD3E1, 0xC6F6, 0xD3E3, 0xC6F7, 0xD3EC, 0xC6F8, 0xD3ED, 0xC6F9, 0xD3F0, 0xC6FA, 0xD3F4, + 0xC6FB, 0xD3FC, 0xC6FC, 0xD3FD, 0xC6FD, 0xD3FF, 0xC6FE, 0xD401, 0xC7A1, 0xD408, 0xC7A2, 0xD41D, 0xC7A3, 0xD440, 0xC7A4, 0xD444, + 0xC7A5, 0xD45C, 0xC7A6, 0xD460, 0xC7A7, 0xD464, 0xC7A8, 0xD46D, 0xC7A9, 0xD46F, 0xC7AA, 0xD478, 0xC7AB, 0xD479, 0xC7AC, 0xD47C, + 0xC7AD, 0xD47F, 0xC7AE, 0xD480, 0xC7AF, 0xD482, 0xC7B0, 0xD488, 0xC7B1, 0xD489, 0xC7B2, 0xD48B, 0xC7B3, 0xD48D, 0xC7B4, 0xD494, + 0xC7B5, 0xD4A9, 0xC7B6, 0xD4CC, 0xC7B7, 0xD4D0, 0xC7B8, 0xD4D4, 0xC7B9, 0xD4DC, 0xC7BA, 0xD4DF, 0xC7BB, 0xD4E8, 0xC7BC, 0xD4EC, + 0xC7BD, 0xD4F0, 0xC7BE, 0xD4F8, 0xC7BF, 0xD4FB, 0xC7C0, 0xD4FD, 0xC7C1, 0xD504, 0xC7C2, 0xD508, 0xC7C3, 0xD50C, 0xC7C4, 0xD514, + 0xC7C5, 0xD515, 0xC7C6, 0xD517, 0xC7C7, 0xD53C, 0xC7C8, 0xD53D, 0xC7C9, 0xD540, 0xC7CA, 0xD544, 0xC7CB, 0xD54C, 0xC7CC, 0xD54D, + 0xC7CD, 0xD54F, 0xC7CE, 0xD551, 0xC7CF, 0xD558, 0xC7D0, 0xD559, 0xC7D1, 0xD55C, 0xC7D2, 0xD560, 0xC7D3, 0xD565, 0xC7D4, 0xD568, + 0xC7D5, 0xD569, 0xC7D6, 0xD56B, 0xC7D7, 0xD56D, 0xC7D8, 0xD574, 0xC7D9, 0xD575, 0xC7DA, 0xD578, 0xC7DB, 0xD57C, 0xC7DC, 0xD584, + 0xC7DD, 0xD585, 0xC7DE, 0xD587, 0xC7DF, 0xD588, 0xC7E0, 0xD589, 0xC7E1, 0xD590, 0xC7E2, 0xD5A5, 0xC7E3, 0xD5C8, 0xC7E4, 0xD5C9, + 0xC7E5, 0xD5CC, 0xC7E6, 0xD5D0, 0xC7E7, 0xD5D2, 0xC7E8, 0xD5D8, 0xC7E9, 0xD5D9, 0xC7EA, 0xD5DB, 0xC7EB, 0xD5DD, 0xC7EC, 0xD5E4, + 0xC7ED, 0xD5E5, 0xC7EE, 0xD5E8, 0xC7EF, 0xD5EC, 0xC7F0, 0xD5F4, 0xC7F1, 0xD5F5, 0xC7F2, 0xD5F7, 0xC7F3, 0xD5F9, 0xC7F4, 0xD600, + 0xC7F5, 0xD601, 0xC7F6, 0xD604, 0xC7F7, 0xD608, 0xC7F8, 0xD610, 0xC7F9, 0xD611, 0xC7FA, 0xD613, 0xC7FB, 0xD614, 0xC7FC, 0xD615, + 0xC7FD, 0xD61C, 0xC7FE, 0xD620, 0xC8A1, 0xD624, 0xC8A2, 0xD62D, 0xC8A3, 0xD638, 0xC8A4, 0xD639, 0xC8A5, 0xD63C, 0xC8A6, 0xD640, + 0xC8A7, 0xD645, 0xC8A8, 0xD648, 0xC8A9, 0xD649, 0xC8AA, 0xD64B, 0xC8AB, 0xD64D, 0xC8AC, 0xD651, 0xC8AD, 0xD654, 0xC8AE, 0xD655, + 0xC8AF, 0xD658, 0xC8B0, 0xD65C, 0xC8B1, 0xD667, 0xC8B2, 0xD669, 0xC8B3, 0xD670, 0xC8B4, 0xD671, 0xC8B5, 0xD674, 0xC8B6, 0xD683, + 0xC8B7, 0xD685, 0xC8B8, 0xD68C, 0xC8B9, 0xD68D, 0xC8BA, 0xD690, 0xC8BB, 0xD694, 0xC8BC, 0xD69D, 0xC8BD, 0xD69F, 0xC8BE, 0xD6A1, + 0xC8BF, 0xD6A8, 0xC8C0, 0xD6AC, 0xC8C1, 0xD6B0, 0xC8C2, 0xD6B9, 0xC8C3, 0xD6BB, 0xC8C4, 0xD6C4, 0xC8C5, 0xD6C5, 0xC8C6, 0xD6C8, + 0xC8C7, 0xD6CC, 0xC8C8, 0xD6D1, 0xC8C9, 0xD6D4, 0xC8CA, 0xD6D7, 0xC8CB, 0xD6D9, 0xC8CC, 0xD6E0, 0xC8CD, 0xD6E4, 0xC8CE, 0xD6E8, + 0xC8CF, 0xD6F0, 0xC8D0, 0xD6F5, 0xC8D1, 0xD6FC, 0xC8D2, 0xD6FD, 0xC8D3, 0xD700, 0xC8D4, 0xD704, 0xC8D5, 0xD711, 0xC8D6, 0xD718, + 0xC8D7, 0xD719, 0xC8D8, 0xD71C, 0xC8D9, 0xD720, 0xC8DA, 0xD728, 0xC8DB, 0xD729, 0xC8DC, 0xD72B, 0xC8DD, 0xD72D, 0xC8DE, 0xD734, + 0xC8DF, 0xD735, 0xC8E0, 0xD738, 0xC8E1, 0xD73C, 0xC8E2, 0xD744, 0xC8E3, 0xD747, 0xC8E4, 0xD749, 0xC8E5, 0xD750, 0xC8E6, 0xD751, + 0xC8E7, 0xD754, 0xC8E8, 0xD756, 0xC8E9, 0xD757, 0xC8EA, 0xD758, 0xC8EB, 0xD759, 0xC8EC, 0xD760, 0xC8ED, 0xD761, 0xC8EE, 0xD763, + 0xC8EF, 0xD765, 0xC8F0, 0xD769, 0xC8F1, 0xD76C, 0xC8F2, 0xD770, 0xC8F3, 0xD774, 0xC8F4, 0xD77C, 0xC8F5, 0xD77D, 0xC8F6, 0xD781, + 0xC8F7, 0xD788, 0xC8F8, 0xD789, 0xC8F9, 0xD78C, 0xC8FA, 0xD790, 0xC8FB, 0xD798, 0xC8FC, 0xD799, 0xC8FD, 0xD79B, 0xC8FE, 0xD79D, + 0xCAA1, 0x4F3D, 0xCAA2, 0x4F73, 0xCAA3, 0x5047, 0xCAA4, 0x50F9, 0xCAA5, 0x52A0, 0xCAA6, 0x53EF, 0xCAA7, 0x5475, 0xCAA8, 0x54E5, + 0xCAA9, 0x5609, 0xCAAA, 0x5AC1, 0xCAAB, 0x5BB6, 0xCAAC, 0x6687, 0xCAAD, 0x67B6, 0xCAAE, 0x67B7, 0xCAAF, 0x67EF, 0xCAB0, 0x6B4C, + 0xCAB1, 0x73C2, 0xCAB2, 0x75C2, 0xCAB3, 0x7A3C, 0xCAB4, 0x82DB, 0xCAB5, 0x8304, 0xCAB6, 0x8857, 0xCAB7, 0x8888, 0xCAB8, 0x8A36, + 0xCAB9, 0x8CC8, 0xCABA, 0x8DCF, 0xCABB, 0x8EFB, 0xCABC, 0x8FE6, 0xCABD, 0x99D5, 0xCABE, 0x523B, 0xCABF, 0x5374, 0xCAC0, 0x5404, + 0xCAC1, 0x606A, 0xCAC2, 0x6164, 0xCAC3, 0x6BBC, 0xCAC4, 0x73CF, 0xCAC5, 0x811A, 0xCAC6, 0x89BA, 0xCAC7, 0x89D2, 0xCAC8, 0x95A3, + 0xCAC9, 0x4F83, 0xCACA, 0x520A, 0xCACB, 0x58BE, 0xCACC, 0x5978, 0xCACD, 0x59E6, 0xCACE, 0x5E72, 0xCACF, 0x5E79, 0xCAD0, 0x61C7, + 0xCAD1, 0x63C0, 0xCAD2, 0x6746, 0xCAD3, 0x67EC, 0xCAD4, 0x687F, 0xCAD5, 0x6F97, 0xCAD6, 0x764E, 0xCAD7, 0x770B, 0xCAD8, 0x78F5, + 0xCAD9, 0x7A08, 0xCADA, 0x7AFF, 0xCADB, 0x7C21, 0xCADC, 0x809D, 0xCADD, 0x826E, 0xCADE, 0x8271, 0xCADF, 0x8AEB, 0xCAE0, 0x9593, + 0xCAE1, 0x4E6B, 0xCAE2, 0x559D, 0xCAE3, 0x66F7, 0xCAE4, 0x6E34, 0xCAE5, 0x78A3, 0xCAE6, 0x7AED, 0xCAE7, 0x845B, 0xCAE8, 0x8910, + 0xCAE9, 0x874E, 0xCAEA, 0x97A8, 0xCAEB, 0x52D8, 0xCAEC, 0x574E, 0xCAED, 0x582A, 0xCAEE, 0x5D4C, 0xCAEF, 0x611F, 0xCAF0, 0x61BE, + 0xCAF1, 0x6221, 0xCAF2, 0x6562, 0xCAF3, 0x67D1, 0xCAF4, 0x6A44, 0xCAF5, 0x6E1B, 0xCAF6, 0x7518, 0xCAF7, 0x75B3, 0xCAF8, 0x76E3, + 0xCAF9, 0x77B0, 0xCAFA, 0x7D3A, 0xCAFB, 0x90AF, 0xCAFC, 0x9451, 0xCAFD, 0x9452, 0xCAFE, 0x9F95, 0xCBA1, 0x5323, 0xCBA2, 0x5CAC, + 0xCBA3, 0x7532, 0xCBA4, 0x80DB, 0xCBA5, 0x9240, 0xCBA6, 0x9598, 0xCBA7, 0x525B, 0xCBA8, 0x5808, 0xCBA9, 0x59DC, 0xCBAA, 0x5CA1, + 0xCBAB, 0x5D17, 0xCBAC, 0x5EB7, 0xCBAD, 0x5F3A, 0xCBAE, 0x5F4A, 0xCBAF, 0x6177, 0xCBB0, 0x6C5F, 0xCBB1, 0x757A, 0xCBB2, 0x7586, + 0xCBB3, 0x7CE0, 0xCBB4, 0x7D73, 0xCBB5, 0x7DB1, 0xCBB6, 0x7F8C, 0xCBB7, 0x8154, 0xCBB8, 0x8221, 0xCBB9, 0x8591, 0xCBBA, 0x8941, + 0xCBBB, 0x8B1B, 0xCBBC, 0x92FC, 0xCBBD, 0x964D, 0xCBBE, 0x9C47, 0xCBBF, 0x4ECB, 0xCBC0, 0x4EF7, 0xCBC1, 0x500B, 0xCBC2, 0x51F1, + 0xCBC3, 0x584F, 0xCBC4, 0x6137, 0xCBC5, 0x613E, 0xCBC6, 0x6168, 0xCBC7, 0x6539, 0xCBC8, 0x69EA, 0xCBC9, 0x6F11, 0xCBCA, 0x75A5, + 0xCBCB, 0x7686, 0xCBCC, 0x76D6, 0xCBCD, 0x7B87, 0xCBCE, 0x82A5, 0xCBCF, 0x84CB, 0xCBD0, 0xF900, 0xCBD1, 0x93A7, 0xCBD2, 0x958B, + 0xCBD3, 0x5580, 0xCBD4, 0x5BA2, 0xCBD5, 0x5751, 0xCBD6, 0xF901, 0xCBD7, 0x7CB3, 0xCBD8, 0x7FB9, 0xCBD9, 0x91B5, 0xCBDA, 0x5028, + 0xCBDB, 0x53BB, 0xCBDC, 0x5C45, 0xCBDD, 0x5DE8, 0xCBDE, 0x62D2, 0xCBDF, 0x636E, 0xCBE0, 0x64DA, 0xCBE1, 0x64E7, 0xCBE2, 0x6E20, + 0xCBE3, 0x70AC, 0xCBE4, 0x795B, 0xCBE5, 0x8DDD, 0xCBE6, 0x8E1E, 0xCBE7, 0xF902, 0xCBE8, 0x907D, 0xCBE9, 0x9245, 0xCBEA, 0x92F8, + 0xCBEB, 0x4E7E, 0xCBEC, 0x4EF6, 0xCBED, 0x5065, 0xCBEE, 0x5DFE, 0xCBEF, 0x5EFA, 0xCBF0, 0x6106, 0xCBF1, 0x6957, 0xCBF2, 0x8171, + 0xCBF3, 0x8654, 0xCBF4, 0x8E47, 0xCBF5, 0x9375, 0xCBF6, 0x9A2B, 0xCBF7, 0x4E5E, 0xCBF8, 0x5091, 0xCBF9, 0x6770, 0xCBFA, 0x6840, + 0xCBFB, 0x5109, 0xCBFC, 0x528D, 0xCBFD, 0x5292, 0xCBFE, 0x6AA2, 0xCCA1, 0x77BC, 0xCCA2, 0x9210, 0xCCA3, 0x9ED4, 0xCCA4, 0x52AB, + 0xCCA5, 0x602F, 0xCCA6, 0x8FF2, 0xCCA7, 0x5048, 0xCCA8, 0x61A9, 0xCCA9, 0x63ED, 0xCCAA, 0x64CA, 0xCCAB, 0x683C, 0xCCAC, 0x6A84, + 0xCCAD, 0x6FC0, 0xCCAE, 0x8188, 0xCCAF, 0x89A1, 0xCCB0, 0x9694, 0xCCB1, 0x5805, 0xCCB2, 0x727D, 0xCCB3, 0x72AC, 0xCCB4, 0x7504, + 0xCCB5, 0x7D79, 0xCCB6, 0x7E6D, 0xCCB7, 0x80A9, 0xCCB8, 0x898B, 0xCCB9, 0x8B74, 0xCCBA, 0x9063, 0xCCBB, 0x9D51, 0xCCBC, 0x6289, + 0xCCBD, 0x6C7A, 0xCCBE, 0x6F54, 0xCCBF, 0x7D50, 0xCCC0, 0x7F3A, 0xCCC1, 0x8A23, 0xCCC2, 0x517C, 0xCCC3, 0x614A, 0xCCC4, 0x7B9D, + 0xCCC5, 0x8B19, 0xCCC6, 0x9257, 0xCCC7, 0x938C, 0xCCC8, 0x4EAC, 0xCCC9, 0x4FD3, 0xCCCA, 0x501E, 0xCCCB, 0x50BE, 0xCCCC, 0x5106, + 0xCCCD, 0x52C1, 0xCCCE, 0x52CD, 0xCCCF, 0x537F, 0xCCD0, 0x5770, 0xCCD1, 0x5883, 0xCCD2, 0x5E9A, 0xCCD3, 0x5F91, 0xCCD4, 0x6176, + 0xCCD5, 0x61AC, 0xCCD6, 0x64CE, 0xCCD7, 0x656C, 0xCCD8, 0x666F, 0xCCD9, 0x66BB, 0xCCDA, 0x66F4, 0xCCDB, 0x6897, 0xCCDC, 0x6D87, + 0xCCDD, 0x7085, 0xCCDE, 0x70F1, 0xCCDF, 0x749F, 0xCCE0, 0x74A5, 0xCCE1, 0x74CA, 0xCCE2, 0x75D9, 0xCCE3, 0x786C, 0xCCE4, 0x78EC, + 0xCCE5, 0x7ADF, 0xCCE6, 0x7AF6, 0xCCE7, 0x7D45, 0xCCE8, 0x7D93, 0xCCE9, 0x8015, 0xCCEA, 0x803F, 0xCCEB, 0x811B, 0xCCEC, 0x8396, + 0xCCED, 0x8B66, 0xCCEE, 0x8F15, 0xCCEF, 0x9015, 0xCCF0, 0x93E1, 0xCCF1, 0x9803, 0xCCF2, 0x9838, 0xCCF3, 0x9A5A, 0xCCF4, 0x9BE8, + 0xCCF5, 0x4FC2, 0xCCF6, 0x5553, 0xCCF7, 0x583A, 0xCCF8, 0x5951, 0xCCF9, 0x5B63, 0xCCFA, 0x5C46, 0xCCFB, 0x60B8, 0xCCFC, 0x6212, + 0xCCFD, 0x6842, 0xCCFE, 0x68B0, 0xCDA1, 0x68E8, 0xCDA2, 0x6EAA, 0xCDA3, 0x754C, 0xCDA4, 0x7678, 0xCDA5, 0x78CE, 0xCDA6, 0x7A3D, + 0xCDA7, 0x7CFB, 0xCDA8, 0x7E6B, 0xCDA9, 0x7E7C, 0xCDAA, 0x8A08, 0xCDAB, 0x8AA1, 0xCDAC, 0x8C3F, 0xCDAD, 0x968E, 0xCDAE, 0x9DC4, + 0xCDAF, 0x53E4, 0xCDB0, 0x53E9, 0xCDB1, 0x544A, 0xCDB2, 0x5471, 0xCDB3, 0x56FA, 0xCDB4, 0x59D1, 0xCDB5, 0x5B64, 0xCDB6, 0x5C3B, + 0xCDB7, 0x5EAB, 0xCDB8, 0x62F7, 0xCDB9, 0x6537, 0xCDBA, 0x6545, 0xCDBB, 0x6572, 0xCDBC, 0x66A0, 0xCDBD, 0x67AF, 0xCDBE, 0x69C1, + 0xCDBF, 0x6CBD, 0xCDC0, 0x75FC, 0xCDC1, 0x7690, 0xCDC2, 0x777E, 0xCDC3, 0x7A3F, 0xCDC4, 0x7F94, 0xCDC5, 0x8003, 0xCDC6, 0x80A1, + 0xCDC7, 0x818F, 0xCDC8, 0x82E6, 0xCDC9, 0x82FD, 0xCDCA, 0x83F0, 0xCDCB, 0x85C1, 0xCDCC, 0x8831, 0xCDCD, 0x88B4, 0xCDCE, 0x8AA5, + 0xCDCF, 0xF903, 0xCDD0, 0x8F9C, 0xCDD1, 0x932E, 0xCDD2, 0x96C7, 0xCDD3, 0x9867, 0xCDD4, 0x9AD8, 0xCDD5, 0x9F13, 0xCDD6, 0x54ED, + 0xCDD7, 0x659B, 0xCDD8, 0x66F2, 0xCDD9, 0x688F, 0xCDDA, 0x7A40, 0xCDDB, 0x8C37, 0xCDDC, 0x9D60, 0xCDDD, 0x56F0, 0xCDDE, 0x5764, + 0xCDDF, 0x5D11, 0xCDE0, 0x6606, 0xCDE1, 0x68B1, 0xCDE2, 0x68CD, 0xCDE3, 0x6EFE, 0xCDE4, 0x7428, 0xCDE5, 0x889E, 0xCDE6, 0x9BE4, + 0xCDE7, 0x6C68, 0xCDE8, 0xF904, 0xCDE9, 0x9AA8, 0xCDEA, 0x4F9B, 0xCDEB, 0x516C, 0xCDEC, 0x5171, 0xCDED, 0x529F, 0xCDEE, 0x5B54, + 0xCDEF, 0x5DE5, 0xCDF0, 0x6050, 0xCDF1, 0x606D, 0xCDF2, 0x62F1, 0xCDF3, 0x63A7, 0xCDF4, 0x653B, 0xCDF5, 0x73D9, 0xCDF6, 0x7A7A, + 0xCDF7, 0x86A3, 0xCDF8, 0x8CA2, 0xCDF9, 0x978F, 0xCDFA, 0x4E32, 0xCDFB, 0x5BE1, 0xCDFC, 0x6208, 0xCDFD, 0x679C, 0xCDFE, 0x74DC, + 0xCEA1, 0x79D1, 0xCEA2, 0x83D3, 0xCEA3, 0x8A87, 0xCEA4, 0x8AB2, 0xCEA5, 0x8DE8, 0xCEA6, 0x904E, 0xCEA7, 0x934B, 0xCEA8, 0x9846, + 0xCEA9, 0x5ED3, 0xCEAA, 0x69E8, 0xCEAB, 0x85FF, 0xCEAC, 0x90ED, 0xCEAD, 0xF905, 0xCEAE, 0x51A0, 0xCEAF, 0x5B98, 0xCEB0, 0x5BEC, + 0xCEB1, 0x6163, 0xCEB2, 0x68FA, 0xCEB3, 0x6B3E, 0xCEB4, 0x704C, 0xCEB5, 0x742F, 0xCEB6, 0x74D8, 0xCEB7, 0x7BA1, 0xCEB8, 0x7F50, + 0xCEB9, 0x83C5, 0xCEBA, 0x89C0, 0xCEBB, 0x8CAB, 0xCEBC, 0x95DC, 0xCEBD, 0x9928, 0xCEBE, 0x522E, 0xCEBF, 0x605D, 0xCEC0, 0x62EC, + 0xCEC1, 0x9002, 0xCEC2, 0x4F8A, 0xCEC3, 0x5149, 0xCEC4, 0x5321, 0xCEC5, 0x58D9, 0xCEC6, 0x5EE3, 0xCEC7, 0x66E0, 0xCEC8, 0x6D38, + 0xCEC9, 0x709A, 0xCECA, 0x72C2, 0xCECB, 0x73D6, 0xCECC, 0x7B50, 0xCECD, 0x80F1, 0xCECE, 0x945B, 0xCECF, 0x5366, 0xCED0, 0x639B, + 0xCED1, 0x7F6B, 0xCED2, 0x4E56, 0xCED3, 0x5080, 0xCED4, 0x584A, 0xCED5, 0x58DE, 0xCED6, 0x602A, 0xCED7, 0x6127, 0xCED8, 0x62D0, + 0xCED9, 0x69D0, 0xCEDA, 0x9B41, 0xCEDB, 0x5B8F, 0xCEDC, 0x7D18, 0xCEDD, 0x80B1, 0xCEDE, 0x8F5F, 0xCEDF, 0x4EA4, 0xCEE0, 0x50D1, + 0xCEE1, 0x54AC, 0xCEE2, 0x55AC, 0xCEE3, 0x5B0C, 0xCEE4, 0x5DA0, 0xCEE5, 0x5DE7, 0xCEE6, 0x652A, 0xCEE7, 0x654E, 0xCEE8, 0x6821, + 0xCEE9, 0x6A4B, 0xCEEA, 0x72E1, 0xCEEB, 0x768E, 0xCEEC, 0x77EF, 0xCEED, 0x7D5E, 0xCEEE, 0x7FF9, 0xCEEF, 0x81A0, 0xCEF0, 0x854E, + 0xCEF1, 0x86DF, 0xCEF2, 0x8F03, 0xCEF3, 0x8F4E, 0xCEF4, 0x90CA, 0xCEF5, 0x9903, 0xCEF6, 0x9A55, 0xCEF7, 0x9BAB, 0xCEF8, 0x4E18, + 0xCEF9, 0x4E45, 0xCEFA, 0x4E5D, 0xCEFB, 0x4EC7, 0xCEFC, 0x4FF1, 0xCEFD, 0x5177, 0xCEFE, 0x52FE, 0xCFA1, 0x5340, 0xCFA2, 0x53E3, + 0xCFA3, 0x53E5, 0xCFA4, 0x548E, 0xCFA5, 0x5614, 0xCFA6, 0x5775, 0xCFA7, 0x57A2, 0xCFA8, 0x5BC7, 0xCFA9, 0x5D87, 0xCFAA, 0x5ED0, + 0xCFAB, 0x61FC, 0xCFAC, 0x62D8, 0xCFAD, 0x6551, 0xCFAE, 0x67B8, 0xCFAF, 0x67E9, 0xCFB0, 0x69CB, 0xCFB1, 0x6B50, 0xCFB2, 0x6BC6, + 0xCFB3, 0x6BEC, 0xCFB4, 0x6C42, 0xCFB5, 0x6E9D, 0xCFB6, 0x7078, 0xCFB7, 0x72D7, 0xCFB8, 0x7396, 0xCFB9, 0x7403, 0xCFBA, 0x77BF, + 0xCFBB, 0x77E9, 0xCFBC, 0x7A76, 0xCFBD, 0x7D7F, 0xCFBE, 0x8009, 0xCFBF, 0x81FC, 0xCFC0, 0x8205, 0xCFC1, 0x820A, 0xCFC2, 0x82DF, + 0xCFC3, 0x8862, 0xCFC4, 0x8B33, 0xCFC5, 0x8CFC, 0xCFC6, 0x8EC0, 0xCFC7, 0x9011, 0xCFC8, 0x90B1, 0xCFC9, 0x9264, 0xCFCA, 0x92B6, + 0xCFCB, 0x99D2, 0xCFCC, 0x9A45, 0xCFCD, 0x9CE9, 0xCFCE, 0x9DD7, 0xCFCF, 0x9F9C, 0xCFD0, 0x570B, 0xCFD1, 0x5C40, 0xCFD2, 0x83CA, + 0xCFD3, 0x97A0, 0xCFD4, 0x97AB, 0xCFD5, 0x9EB4, 0xCFD6, 0x541B, 0xCFD7, 0x7A98, 0xCFD8, 0x7FA4, 0xCFD9, 0x88D9, 0xCFDA, 0x8ECD, + 0xCFDB, 0x90E1, 0xCFDC, 0x5800, 0xCFDD, 0x5C48, 0xCFDE, 0x6398, 0xCFDF, 0x7A9F, 0xCFE0, 0x5BAE, 0xCFE1, 0x5F13, 0xCFE2, 0x7A79, + 0xCFE3, 0x7AAE, 0xCFE4, 0x828E, 0xCFE5, 0x8EAC, 0xCFE6, 0x5026, 0xCFE7, 0x5238, 0xCFE8, 0x52F8, 0xCFE9, 0x5377, 0xCFEA, 0x5708, + 0xCFEB, 0x62F3, 0xCFEC, 0x6372, 0xCFED, 0x6B0A, 0xCFEE, 0x6DC3, 0xCFEF, 0x7737, 0xCFF0, 0x53A5, 0xCFF1, 0x7357, 0xCFF2, 0x8568, + 0xCFF3, 0x8E76, 0xCFF4, 0x95D5, 0xCFF5, 0x673A, 0xCFF6, 0x6AC3, 0xCFF7, 0x6F70, 0xCFF8, 0x8A6D, 0xCFF9, 0x8ECC, 0xCFFA, 0x994B, + 0xCFFB, 0xF906, 0xCFFC, 0x6677, 0xCFFD, 0x6B78, 0xCFFE, 0x8CB4, 0xD0A1, 0x9B3C, 0xD0A2, 0xF907, 0xD0A3, 0x53EB, 0xD0A4, 0x572D, + 0xD0A5, 0x594E, 0xD0A6, 0x63C6, 0xD0A7, 0x69FB, 0xD0A8, 0x73EA, 0xD0A9, 0x7845, 0xD0AA, 0x7ABA, 0xD0AB, 0x7AC5, 0xD0AC, 0x7CFE, + 0xD0AD, 0x8475, 0xD0AE, 0x898F, 0xD0AF, 0x8D73, 0xD0B0, 0x9035, 0xD0B1, 0x95A8, 0xD0B2, 0x52FB, 0xD0B3, 0x5747, 0xD0B4, 0x7547, + 0xD0B5, 0x7B60, 0xD0B6, 0x83CC, 0xD0B7, 0x921E, 0xD0B8, 0xF908, 0xD0B9, 0x6A58, 0xD0BA, 0x514B, 0xD0BB, 0x524B, 0xD0BC, 0x5287, + 0xD0BD, 0x621F, 0xD0BE, 0x68D8, 0xD0BF, 0x6975, 0xD0C0, 0x9699, 0xD0C1, 0x50C5, 0xD0C2, 0x52A4, 0xD0C3, 0x52E4, 0xD0C4, 0x61C3, + 0xD0C5, 0x65A4, 0xD0C6, 0x6839, 0xD0C7, 0x69FF, 0xD0C8, 0x747E, 0xD0C9, 0x7B4B, 0xD0CA, 0x82B9, 0xD0CB, 0x83EB, 0xD0CC, 0x89B2, + 0xD0CD, 0x8B39, 0xD0CE, 0x8FD1, 0xD0CF, 0x9949, 0xD0D0, 0xF909, 0xD0D1, 0x4ECA, 0xD0D2, 0x5997, 0xD0D3, 0x64D2, 0xD0D4, 0x6611, + 0xD0D5, 0x6A8E, 0xD0D6, 0x7434, 0xD0D7, 0x7981, 0xD0D8, 0x79BD, 0xD0D9, 0x82A9, 0xD0DA, 0x887E, 0xD0DB, 0x887F, 0xD0DC, 0x895F, + 0xD0DD, 0xF90A, 0xD0DE, 0x9326, 0xD0DF, 0x4F0B, 0xD0E0, 0x53CA, 0xD0E1, 0x6025, 0xD0E2, 0x6271, 0xD0E3, 0x6C72, 0xD0E4, 0x7D1A, + 0xD0E5, 0x7D66, 0xD0E6, 0x4E98, 0xD0E7, 0x5162, 0xD0E8, 0x77DC, 0xD0E9, 0x80AF, 0xD0EA, 0x4F01, 0xD0EB, 0x4F0E, 0xD0EC, 0x5176, + 0xD0ED, 0x5180, 0xD0EE, 0x55DC, 0xD0EF, 0x5668, 0xD0F0, 0x573B, 0xD0F1, 0x57FA, 0xD0F2, 0x57FC, 0xD0F3, 0x5914, 0xD0F4, 0x5947, + 0xD0F5, 0x5993, 0xD0F6, 0x5BC4, 0xD0F7, 0x5C90, 0xD0F8, 0x5D0E, 0xD0F9, 0x5DF1, 0xD0FA, 0x5E7E, 0xD0FB, 0x5FCC, 0xD0FC, 0x6280, + 0xD0FD, 0x65D7, 0xD0FE, 0x65E3, 0xD1A1, 0x671E, 0xD1A2, 0x671F, 0xD1A3, 0x675E, 0xD1A4, 0x68CB, 0xD1A5, 0x68C4, 0xD1A6, 0x6A5F, + 0xD1A7, 0x6B3A, 0xD1A8, 0x6C23, 0xD1A9, 0x6C7D, 0xD1AA, 0x6C82, 0xD1AB, 0x6DC7, 0xD1AC, 0x7398, 0xD1AD, 0x7426, 0xD1AE, 0x742A, + 0xD1AF, 0x7482, 0xD1B0, 0x74A3, 0xD1B1, 0x7578, 0xD1B2, 0x757F, 0xD1B3, 0x7881, 0xD1B4, 0x78EF, 0xD1B5, 0x7941, 0xD1B6, 0x7947, + 0xD1B7, 0x7948, 0xD1B8, 0x797A, 0xD1B9, 0x7B95, 0xD1BA, 0x7D00, 0xD1BB, 0x7DBA, 0xD1BC, 0x7F88, 0xD1BD, 0x8006, 0xD1BE, 0x802D, + 0xD1BF, 0x808C, 0xD1C0, 0x8A18, 0xD1C1, 0x8B4F, 0xD1C2, 0x8C48, 0xD1C3, 0x8D77, 0xD1C4, 0x9321, 0xD1C5, 0x9324, 0xD1C6, 0x98E2, + 0xD1C7, 0x9951, 0xD1C8, 0x9A0E, 0xD1C9, 0x9A0F, 0xD1CA, 0x9A65, 0xD1CB, 0x9E92, 0xD1CC, 0x7DCA, 0xD1CD, 0x4F76, 0xD1CE, 0x5409, + 0xD1CF, 0x62EE, 0xD1D0, 0x6854, 0xD1D1, 0x91D1, 0xD1D2, 0x55AB, 0xD1D3, 0x513A, 0xD1D4, 0xF90B, 0xD1D5, 0xF90C, 0xD1D6, 0x5A1C, + 0xD1D7, 0x61E6, 0xD1D8, 0xF90D, 0xD1D9, 0x62CF, 0xD1DA, 0x62FF, 0xD1DB, 0xF90E, 0xD1DC, 0xF90F, 0xD1DD, 0xF910, 0xD1DE, 0xF911, + 0xD1DF, 0xF912, 0xD1E0, 0xF913, 0xD1E1, 0x90A3, 0xD1E2, 0xF914, 0xD1E3, 0xF915, 0xD1E4, 0xF916, 0xD1E5, 0xF917, 0xD1E6, 0xF918, + 0xD1E7, 0x8AFE, 0xD1E8, 0xF919, 0xD1E9, 0xF91A, 0xD1EA, 0xF91B, 0xD1EB, 0xF91C, 0xD1EC, 0x6696, 0xD1ED, 0xF91D, 0xD1EE, 0x7156, + 0xD1EF, 0xF91E, 0xD1F0, 0xF91F, 0xD1F1, 0x96E3, 0xD1F2, 0xF920, 0xD1F3, 0x634F, 0xD1F4, 0x637A, 0xD1F5, 0x5357, 0xD1F6, 0xF921, + 0xD1F7, 0x678F, 0xD1F8, 0x6960, 0xD1F9, 0x6E73, 0xD1FA, 0xF922, 0xD1FB, 0x7537, 0xD1FC, 0xF923, 0xD1FD, 0xF924, 0xD1FE, 0xF925, + 0xD2A1, 0x7D0D, 0xD2A2, 0xF926, 0xD2A3, 0xF927, 0xD2A4, 0x8872, 0xD2A5, 0x56CA, 0xD2A6, 0x5A18, 0xD2A7, 0xF928, 0xD2A8, 0xF929, + 0xD2A9, 0xF92A, 0xD2AA, 0xF92B, 0xD2AB, 0xF92C, 0xD2AC, 0x4E43, 0xD2AD, 0xF92D, 0xD2AE, 0x5167, 0xD2AF, 0x5948, 0xD2B0, 0x67F0, + 0xD2B1, 0x8010, 0xD2B2, 0xF92E, 0xD2B3, 0x5973, 0xD2B4, 0x5E74, 0xD2B5, 0x649A, 0xD2B6, 0x79CA, 0xD2B7, 0x5FF5, 0xD2B8, 0x606C, + 0xD2B9, 0x62C8, 0xD2BA, 0x637B, 0xD2BB, 0x5BE7, 0xD2BC, 0x5BD7, 0xD2BD, 0x52AA, 0xD2BE, 0xF92F, 0xD2BF, 0x5974, 0xD2C0, 0x5F29, + 0xD2C1, 0x6012, 0xD2C2, 0xF930, 0xD2C3, 0xF931, 0xD2C4, 0xF932, 0xD2C5, 0x7459, 0xD2C6, 0xF933, 0xD2C7, 0xF934, 0xD2C8, 0xF935, + 0xD2C9, 0xF936, 0xD2CA, 0xF937, 0xD2CB, 0xF938, 0xD2CC, 0x99D1, 0xD2CD, 0xF939, 0xD2CE, 0xF93A, 0xD2CF, 0xF93B, 0xD2D0, 0xF93C, + 0xD2D1, 0xF93D, 0xD2D2, 0xF93E, 0xD2D3, 0xF93F, 0xD2D4, 0xF940, 0xD2D5, 0xF941, 0xD2D6, 0xF942, 0xD2D7, 0xF943, 0xD2D8, 0x6FC3, + 0xD2D9, 0xF944, 0xD2DA, 0xF945, 0xD2DB, 0x81BF, 0xD2DC, 0x8FB2, 0xD2DD, 0x60F1, 0xD2DE, 0xF946, 0xD2DF, 0xF947, 0xD2E0, 0x8166, + 0xD2E1, 0xF948, 0xD2E2, 0xF949, 0xD2E3, 0x5C3F, 0xD2E4, 0xF94A, 0xD2E5, 0xF94B, 0xD2E6, 0xF94C, 0xD2E7, 0xF94D, 0xD2E8, 0xF94E, + 0xD2E9, 0xF94F, 0xD2EA, 0xF950, 0xD2EB, 0xF951, 0xD2EC, 0x5AE9, 0xD2ED, 0x8A25, 0xD2EE, 0x677B, 0xD2EF, 0x7D10, 0xD2F0, 0xF952, + 0xD2F1, 0xF953, 0xD2F2, 0xF954, 0xD2F3, 0xF955, 0xD2F4, 0xF956, 0xD2F5, 0xF957, 0xD2F6, 0x80FD, 0xD2F7, 0xF958, 0xD2F8, 0xF959, + 0xD2F9, 0x5C3C, 0xD2FA, 0x6CE5, 0xD2FB, 0x533F, 0xD2FC, 0x6EBA, 0xD2FD, 0x591A, 0xD2FE, 0x8336, 0xD3A1, 0x4E39, 0xD3A2, 0x4EB6, + 0xD3A3, 0x4F46, 0xD3A4, 0x55AE, 0xD3A5, 0x5718, 0xD3A6, 0x58C7, 0xD3A7, 0x5F56, 0xD3A8, 0x65B7, 0xD3A9, 0x65E6, 0xD3AA, 0x6A80, + 0xD3AB, 0x6BB5, 0xD3AC, 0x6E4D, 0xD3AD, 0x77ED, 0xD3AE, 0x7AEF, 0xD3AF, 0x7C1E, 0xD3B0, 0x7DDE, 0xD3B1, 0x86CB, 0xD3B2, 0x8892, + 0xD3B3, 0x9132, 0xD3B4, 0x935B, 0xD3B5, 0x64BB, 0xD3B6, 0x6FBE, 0xD3B7, 0x737A, 0xD3B8, 0x75B8, 0xD3B9, 0x9054, 0xD3BA, 0x5556, + 0xD3BB, 0x574D, 0xD3BC, 0x61BA, 0xD3BD, 0x64D4, 0xD3BE, 0x66C7, 0xD3BF, 0x6DE1, 0xD3C0, 0x6E5B, 0xD3C1, 0x6F6D, 0xD3C2, 0x6FB9, + 0xD3C3, 0x75F0, 0xD3C4, 0x8043, 0xD3C5, 0x81BD, 0xD3C6, 0x8541, 0xD3C7, 0x8983, 0xD3C8, 0x8AC7, 0xD3C9, 0x8B5A, 0xD3CA, 0x931F, + 0xD3CB, 0x6C93, 0xD3CC, 0x7553, 0xD3CD, 0x7B54, 0xD3CE, 0x8E0F, 0xD3CF, 0x905D, 0xD3D0, 0x5510, 0xD3D1, 0x5802, 0xD3D2, 0x5858, + 0xD3D3, 0x5E62, 0xD3D4, 0x6207, 0xD3D5, 0x649E, 0xD3D6, 0x68E0, 0xD3D7, 0x7576, 0xD3D8, 0x7CD6, 0xD3D9, 0x87B3, 0xD3DA, 0x9EE8, + 0xD3DB, 0x4EE3, 0xD3DC, 0x5788, 0xD3DD, 0x576E, 0xD3DE, 0x5927, 0xD3DF, 0x5C0D, 0xD3E0, 0x5CB1, 0xD3E1, 0x5E36, 0xD3E2, 0x5F85, + 0xD3E3, 0x6234, 0xD3E4, 0x64E1, 0xD3E5, 0x73B3, 0xD3E6, 0x81FA, 0xD3E7, 0x888B, 0xD3E8, 0x8CB8, 0xD3E9, 0x968A, 0xD3EA, 0x9EDB, + 0xD3EB, 0x5B85, 0xD3EC, 0x5FB7, 0xD3ED, 0x60B3, 0xD3EE, 0x5012, 0xD3EF, 0x5200, 0xD3F0, 0x5230, 0xD3F1, 0x5716, 0xD3F2, 0x5835, + 0xD3F3, 0x5857, 0xD3F4, 0x5C0E, 0xD3F5, 0x5C60, 0xD3F6, 0x5CF6, 0xD3F7, 0x5D8B, 0xD3F8, 0x5EA6, 0xD3F9, 0x5F92, 0xD3FA, 0x60BC, + 0xD3FB, 0x6311, 0xD3FC, 0x6389, 0xD3FD, 0x6417, 0xD3FE, 0x6843, 0xD4A1, 0x68F9, 0xD4A2, 0x6AC2, 0xD4A3, 0x6DD8, 0xD4A4, 0x6E21, + 0xD4A5, 0x6ED4, 0xD4A6, 0x6FE4, 0xD4A7, 0x71FE, 0xD4A8, 0x76DC, 0xD4A9, 0x7779, 0xD4AA, 0x79B1, 0xD4AB, 0x7A3B, 0xD4AC, 0x8404, + 0xD4AD, 0x89A9, 0xD4AE, 0x8CED, 0xD4AF, 0x8DF3, 0xD4B0, 0x8E48, 0xD4B1, 0x9003, 0xD4B2, 0x9014, 0xD4B3, 0x9053, 0xD4B4, 0x90FD, + 0xD4B5, 0x934D, 0xD4B6, 0x9676, 0xD4B7, 0x97DC, 0xD4B8, 0x6BD2, 0xD4B9, 0x7006, 0xD4BA, 0x7258, 0xD4BB, 0x72A2, 0xD4BC, 0x7368, + 0xD4BD, 0x7763, 0xD4BE, 0x79BF, 0xD4BF, 0x7BE4, 0xD4C0, 0x7E9B, 0xD4C1, 0x8B80, 0xD4C2, 0x58A9, 0xD4C3, 0x60C7, 0xD4C4, 0x6566, + 0xD4C5, 0x65FD, 0xD4C6, 0x66BE, 0xD4C7, 0x6C8C, 0xD4C8, 0x711E, 0xD4C9, 0x71C9, 0xD4CA, 0x8C5A, 0xD4CB, 0x9813, 0xD4CC, 0x4E6D, + 0xD4CD, 0x7A81, 0xD4CE, 0x4EDD, 0xD4CF, 0x51AC, 0xD4D0, 0x51CD, 0xD4D1, 0x52D5, 0xD4D2, 0x540C, 0xD4D3, 0x61A7, 0xD4D4, 0x6771, + 0xD4D5, 0x6850, 0xD4D6, 0x68DF, 0xD4D7, 0x6D1E, 0xD4D8, 0x6F7C, 0xD4D9, 0x75BC, 0xD4DA, 0x77B3, 0xD4DB, 0x7AE5, 0xD4DC, 0x80F4, + 0xD4DD, 0x8463, 0xD4DE, 0x9285, 0xD4DF, 0x515C, 0xD4E0, 0x6597, 0xD4E1, 0x675C, 0xD4E2, 0x6793, 0xD4E3, 0x75D8, 0xD4E4, 0x7AC7, + 0xD4E5, 0x8373, 0xD4E6, 0xF95A, 0xD4E7, 0x8C46, 0xD4E8, 0x9017, 0xD4E9, 0x982D, 0xD4EA, 0x5C6F, 0xD4EB, 0x81C0, 0xD4EC, 0x829A, + 0xD4ED, 0x9041, 0xD4EE, 0x906F, 0xD4EF, 0x920D, 0xD4F0, 0x5F97, 0xD4F1, 0x5D9D, 0xD4F2, 0x6A59, 0xD4F3, 0x71C8, 0xD4F4, 0x767B, + 0xD4F5, 0x7B49, 0xD4F6, 0x85E4, 0xD4F7, 0x8B04, 0xD4F8, 0x9127, 0xD4F9, 0x9A30, 0xD4FA, 0x5587, 0xD4FB, 0x61F6, 0xD4FC, 0xF95B, + 0xD4FD, 0x7669, 0xD4FE, 0x7F85, 0xD5A1, 0x863F, 0xD5A2, 0x87BA, 0xD5A3, 0x88F8, 0xD5A4, 0x908F, 0xD5A5, 0xF95C, 0xD5A6, 0x6D1B, + 0xD5A7, 0x70D9, 0xD5A8, 0x73DE, 0xD5A9, 0x7D61, 0xD5AA, 0x843D, 0xD5AB, 0xF95D, 0xD5AC, 0x916A, 0xD5AD, 0x99F1, 0xD5AE, 0xF95E, + 0xD5AF, 0x4E82, 0xD5B0, 0x5375, 0xD5B1, 0x6B04, 0xD5B2, 0x6B12, 0xD5B3, 0x703E, 0xD5B4, 0x721B, 0xD5B5, 0x862D, 0xD5B6, 0x9E1E, + 0xD5B7, 0x524C, 0xD5B8, 0x8FA3, 0xD5B9, 0x5D50, 0xD5BA, 0x64E5, 0xD5BB, 0x652C, 0xD5BC, 0x6B16, 0xD5BD, 0x6FEB, 0xD5BE, 0x7C43, + 0xD5BF, 0x7E9C, 0xD5C0, 0x85CD, 0xD5C1, 0x8964, 0xD5C2, 0x89BD, 0xD5C3, 0x62C9, 0xD5C4, 0x81D8, 0xD5C5, 0x881F, 0xD5C6, 0x5ECA, + 0xD5C7, 0x6717, 0xD5C8, 0x6D6A, 0xD5C9, 0x72FC, 0xD5CA, 0x7405, 0xD5CB, 0x746F, 0xD5CC, 0x8782, 0xD5CD, 0x90DE, 0xD5CE, 0x4F86, + 0xD5CF, 0x5D0D, 0xD5D0, 0x5FA0, 0xD5D1, 0x840A, 0xD5D2, 0x51B7, 0xD5D3, 0x63A0, 0xD5D4, 0x7565, 0xD5D5, 0x4EAE, 0xD5D6, 0x5006, + 0xD5D7, 0x5169, 0xD5D8, 0x51C9, 0xD5D9, 0x6881, 0xD5DA, 0x6A11, 0xD5DB, 0x7CAE, 0xD5DC, 0x7CB1, 0xD5DD, 0x7CE7, 0xD5DE, 0x826F, + 0xD5DF, 0x8AD2, 0xD5E0, 0x8F1B, 0xD5E1, 0x91CF, 0xD5E2, 0x4FB6, 0xD5E3, 0x5137, 0xD5E4, 0x52F5, 0xD5E5, 0x5442, 0xD5E6, 0x5EEC, + 0xD5E7, 0x616E, 0xD5E8, 0x623E, 0xD5E9, 0x65C5, 0xD5EA, 0x6ADA, 0xD5EB, 0x6FFE, 0xD5EC, 0x792A, 0xD5ED, 0x85DC, 0xD5EE, 0x8823, + 0xD5EF, 0x95AD, 0xD5F0, 0x9A62, 0xD5F1, 0x9A6A, 0xD5F2, 0x9E97, 0xD5F3, 0x9ECE, 0xD5F4, 0x529B, 0xD5F5, 0x66C6, 0xD5F6, 0x6B77, + 0xD5F7, 0x701D, 0xD5F8, 0x792B, 0xD5F9, 0x8F62, 0xD5FA, 0x9742, 0xD5FB, 0x6190, 0xD5FC, 0x6200, 0xD5FD, 0x6523, 0xD5FE, 0x6F23, + 0xD6A1, 0x7149, 0xD6A2, 0x7489, 0xD6A3, 0x7DF4, 0xD6A4, 0x806F, 0xD6A5, 0x84EE, 0xD6A6, 0x8F26, 0xD6A7, 0x9023, 0xD6A8, 0x934A, + 0xD6A9, 0x51BD, 0xD6AA, 0x5217, 0xD6AB, 0x52A3, 0xD6AC, 0x6D0C, 0xD6AD, 0x70C8, 0xD6AE, 0x88C2, 0xD6AF, 0x5EC9, 0xD6B0, 0x6582, + 0xD6B1, 0x6BAE, 0xD6B2, 0x6FC2, 0xD6B3, 0x7C3E, 0xD6B4, 0x7375, 0xD6B5, 0x4EE4, 0xD6B6, 0x4F36, 0xD6B7, 0x56F9, 0xD6B8, 0xF95F, + 0xD6B9, 0x5CBA, 0xD6BA, 0x5DBA, 0xD6BB, 0x601C, 0xD6BC, 0x73B2, 0xD6BD, 0x7B2D, 0xD6BE, 0x7F9A, 0xD6BF, 0x7FCE, 0xD6C0, 0x8046, + 0xD6C1, 0x901E, 0xD6C2, 0x9234, 0xD6C3, 0x96F6, 0xD6C4, 0x9748, 0xD6C5, 0x9818, 0xD6C6, 0x9F61, 0xD6C7, 0x4F8B, 0xD6C8, 0x6FA7, + 0xD6C9, 0x79AE, 0xD6CA, 0x91B4, 0xD6CB, 0x96B7, 0xD6CC, 0x52DE, 0xD6CD, 0xF960, 0xD6CE, 0x6488, 0xD6CF, 0x64C4, 0xD6D0, 0x6AD3, + 0xD6D1, 0x6F5E, 0xD6D2, 0x7018, 0xD6D3, 0x7210, 0xD6D4, 0x76E7, 0xD6D5, 0x8001, 0xD6D6, 0x8606, 0xD6D7, 0x865C, 0xD6D8, 0x8DEF, + 0xD6D9, 0x8F05, 0xD6DA, 0x9732, 0xD6DB, 0x9B6F, 0xD6DC, 0x9DFA, 0xD6DD, 0x9E75, 0xD6DE, 0x788C, 0xD6DF, 0x797F, 0xD6E0, 0x7DA0, + 0xD6E1, 0x83C9, 0xD6E2, 0x9304, 0xD6E3, 0x9E7F, 0xD6E4, 0x9E93, 0xD6E5, 0x8AD6, 0xD6E6, 0x58DF, 0xD6E7, 0x5F04, 0xD6E8, 0x6727, + 0xD6E9, 0x7027, 0xD6EA, 0x74CF, 0xD6EB, 0x7C60, 0xD6EC, 0x807E, 0xD6ED, 0x5121, 0xD6EE, 0x7028, 0xD6EF, 0x7262, 0xD6F0, 0x78CA, + 0xD6F1, 0x8CC2, 0xD6F2, 0x8CDA, 0xD6F3, 0x8CF4, 0xD6F4, 0x96F7, 0xD6F5, 0x4E86, 0xD6F6, 0x50DA, 0xD6F7, 0x5BEE, 0xD6F8, 0x5ED6, + 0xD6F9, 0x6599, 0xD6FA, 0x71CE, 0xD6FB, 0x7642, 0xD6FC, 0x77AD, 0xD6FD, 0x804A, 0xD6FE, 0x84FC, 0xD7A1, 0x907C, 0xD7A2, 0x9B27, + 0xD7A3, 0x9F8D, 0xD7A4, 0x58D8, 0xD7A5, 0x5A41, 0xD7A6, 0x5C62, 0xD7A7, 0x6A13, 0xD7A8, 0x6DDA, 0xD7A9, 0x6F0F, 0xD7AA, 0x763B, + 0xD7AB, 0x7D2F, 0xD7AC, 0x7E37, 0xD7AD, 0x851E, 0xD7AE, 0x8938, 0xD7AF, 0x93E4, 0xD7B0, 0x964B, 0xD7B1, 0x5289, 0xD7B2, 0x65D2, + 0xD7B3, 0x67F3, 0xD7B4, 0x69B4, 0xD7B5, 0x6D41, 0xD7B6, 0x6E9C, 0xD7B7, 0x700F, 0xD7B8, 0x7409, 0xD7B9, 0x7460, 0xD7BA, 0x7559, + 0xD7BB, 0x7624, 0xD7BC, 0x786B, 0xD7BD, 0x8B2C, 0xD7BE, 0x985E, 0xD7BF, 0x516D, 0xD7C0, 0x622E, 0xD7C1, 0x9678, 0xD7C2, 0x4F96, + 0xD7C3, 0x502B, 0xD7C4, 0x5D19, 0xD7C5, 0x6DEA, 0xD7C6, 0x7DB8, 0xD7C7, 0x8F2A, 0xD7C8, 0x5F8B, 0xD7C9, 0x6144, 0xD7CA, 0x6817, + 0xD7CB, 0xF961, 0xD7CC, 0x9686, 0xD7CD, 0x52D2, 0xD7CE, 0x808B, 0xD7CF, 0x51DC, 0xD7D0, 0x51CC, 0xD7D1, 0x695E, 0xD7D2, 0x7A1C, + 0xD7D3, 0x7DBE, 0xD7D4, 0x83F1, 0xD7D5, 0x9675, 0xD7D6, 0x4FDA, 0xD7D7, 0x5229, 0xD7D8, 0x5398, 0xD7D9, 0x540F, 0xD7DA, 0x550E, + 0xD7DB, 0x5C65, 0xD7DC, 0x60A7, 0xD7DD, 0x674E, 0xD7DE, 0x68A8, 0xD7DF, 0x6D6C, 0xD7E0, 0x7281, 0xD7E1, 0x72F8, 0xD7E2, 0x7406, + 0xD7E3, 0x7483, 0xD7E4, 0xF962, 0xD7E5, 0x75E2, 0xD7E6, 0x7C6C, 0xD7E7, 0x7F79, 0xD7E8, 0x7FB8, 0xD7E9, 0x8389, 0xD7EA, 0x88CF, + 0xD7EB, 0x88E1, 0xD7EC, 0x91CC, 0xD7ED, 0x91D0, 0xD7EE, 0x96E2, 0xD7EF, 0x9BC9, 0xD7F0, 0x541D, 0xD7F1, 0x6F7E, 0xD7F2, 0x71D0, + 0xD7F3, 0x7498, 0xD7F4, 0x85FA, 0xD7F5, 0x8EAA, 0xD7F6, 0x96A3, 0xD7F7, 0x9C57, 0xD7F8, 0x9E9F, 0xD7F9, 0x6797, 0xD7FA, 0x6DCB, + 0xD7FB, 0x7433, 0xD7FC, 0x81E8, 0xD7FD, 0x9716, 0xD7FE, 0x782C, 0xD8A1, 0x7ACB, 0xD8A2, 0x7B20, 0xD8A3, 0x7C92, 0xD8A4, 0x6469, + 0xD8A5, 0x746A, 0xD8A6, 0x75F2, 0xD8A7, 0x78BC, 0xD8A8, 0x78E8, 0xD8A9, 0x99AC, 0xD8AA, 0x9B54, 0xD8AB, 0x9EBB, 0xD8AC, 0x5BDE, + 0xD8AD, 0x5E55, 0xD8AE, 0x6F20, 0xD8AF, 0x819C, 0xD8B0, 0x83AB, 0xD8B1, 0x9088, 0xD8B2, 0x4E07, 0xD8B3, 0x534D, 0xD8B4, 0x5A29, + 0xD8B5, 0x5DD2, 0xD8B6, 0x5F4E, 0xD8B7, 0x6162, 0xD8B8, 0x633D, 0xD8B9, 0x6669, 0xD8BA, 0x66FC, 0xD8BB, 0x6EFF, 0xD8BC, 0x6F2B, + 0xD8BD, 0x7063, 0xD8BE, 0x779E, 0xD8BF, 0x842C, 0xD8C0, 0x8513, 0xD8C1, 0x883B, 0xD8C2, 0x8F13, 0xD8C3, 0x9945, 0xD8C4, 0x9C3B, + 0xD8C5, 0x551C, 0xD8C6, 0x62B9, 0xD8C7, 0x672B, 0xD8C8, 0x6CAB, 0xD8C9, 0x8309, 0xD8CA, 0x896A, 0xD8CB, 0x977A, 0xD8CC, 0x4EA1, + 0xD8CD, 0x5984, 0xD8CE, 0x5FD8, 0xD8CF, 0x5FD9, 0xD8D0, 0x671B, 0xD8D1, 0x7DB2, 0xD8D2, 0x7F54, 0xD8D3, 0x8292, 0xD8D4, 0x832B, + 0xD8D5, 0x83BD, 0xD8D6, 0x8F1E, 0xD8D7, 0x9099, 0xD8D8, 0x57CB, 0xD8D9, 0x59B9, 0xD8DA, 0x5A92, 0xD8DB, 0x5BD0, 0xD8DC, 0x6627, + 0xD8DD, 0x679A, 0xD8DE, 0x6885, 0xD8DF, 0x6BCF, 0xD8E0, 0x7164, 0xD8E1, 0x7F75, 0xD8E2, 0x8CB7, 0xD8E3, 0x8CE3, 0xD8E4, 0x9081, + 0xD8E5, 0x9B45, 0xD8E6, 0x8108, 0xD8E7, 0x8C8A, 0xD8E8, 0x964C, 0xD8E9, 0x9A40, 0xD8EA, 0x9EA5, 0xD8EB, 0x5B5F, 0xD8EC, 0x6C13, + 0xD8ED, 0x731B, 0xD8EE, 0x76F2, 0xD8EF, 0x76DF, 0xD8F0, 0x840C, 0xD8F1, 0x51AA, 0xD8F2, 0x8993, 0xD8F3, 0x514D, 0xD8F4, 0x5195, + 0xD8F5, 0x52C9, 0xD8F6, 0x68C9, 0xD8F7, 0x6C94, 0xD8F8, 0x7704, 0xD8F9, 0x7720, 0xD8FA, 0x7DBF, 0xD8FB, 0x7DEC, 0xD8FC, 0x9762, + 0xD8FD, 0x9EB5, 0xD8FE, 0x6EC5, 0xD9A1, 0x8511, 0xD9A2, 0x51A5, 0xD9A3, 0x540D, 0xD9A4, 0x547D, 0xD9A5, 0x660E, 0xD9A6, 0x669D, + 0xD9A7, 0x6927, 0xD9A8, 0x6E9F, 0xD9A9, 0x76BF, 0xD9AA, 0x7791, 0xD9AB, 0x8317, 0xD9AC, 0x84C2, 0xD9AD, 0x879F, 0xD9AE, 0x9169, + 0xD9AF, 0x9298, 0xD9B0, 0x9CF4, 0xD9B1, 0x8882, 0xD9B2, 0x4FAE, 0xD9B3, 0x5192, 0xD9B4, 0x52DF, 0xD9B5, 0x59C6, 0xD9B6, 0x5E3D, + 0xD9B7, 0x6155, 0xD9B8, 0x6478, 0xD9B9, 0x6479, 0xD9BA, 0x66AE, 0xD9BB, 0x67D0, 0xD9BC, 0x6A21, 0xD9BD, 0x6BCD, 0xD9BE, 0x6BDB, + 0xD9BF, 0x725F, 0xD9C0, 0x7261, 0xD9C1, 0x7441, 0xD9C2, 0x7738, 0xD9C3, 0x77DB, 0xD9C4, 0x8017, 0xD9C5, 0x82BC, 0xD9C6, 0x8305, + 0xD9C7, 0x8B00, 0xD9C8, 0x8B28, 0xD9C9, 0x8C8C, 0xD9CA, 0x6728, 0xD9CB, 0x6C90, 0xD9CC, 0x7267, 0xD9CD, 0x76EE, 0xD9CE, 0x7766, + 0xD9CF, 0x7A46, 0xD9D0, 0x9DA9, 0xD9D1, 0x6B7F, 0xD9D2, 0x6C92, 0xD9D3, 0x5922, 0xD9D4, 0x6726, 0xD9D5, 0x8499, 0xD9D6, 0x536F, + 0xD9D7, 0x5893, 0xD9D8, 0x5999, 0xD9D9, 0x5EDF, 0xD9DA, 0x63CF, 0xD9DB, 0x6634, 0xD9DC, 0x6773, 0xD9DD, 0x6E3A, 0xD9DE, 0x732B, + 0xD9DF, 0x7AD7, 0xD9E0, 0x82D7, 0xD9E1, 0x9328, 0xD9E2, 0x52D9, 0xD9E3, 0x5DEB, 0xD9E4, 0x61AE, 0xD9E5, 0x61CB, 0xD9E6, 0x620A, + 0xD9E7, 0x62C7, 0xD9E8, 0x64AB, 0xD9E9, 0x65E0, 0xD9EA, 0x6959, 0xD9EB, 0x6B66, 0xD9EC, 0x6BCB, 0xD9ED, 0x7121, 0xD9EE, 0x73F7, + 0xD9EF, 0x755D, 0xD9F0, 0x7E46, 0xD9F1, 0x821E, 0xD9F2, 0x8302, 0xD9F3, 0x856A, 0xD9F4, 0x8AA3, 0xD9F5, 0x8CBF, 0xD9F6, 0x9727, + 0xD9F7, 0x9D61, 0xD9F8, 0x58A8, 0xD9F9, 0x9ED8, 0xD9FA, 0x5011, 0xD9FB, 0x520E, 0xD9FC, 0x543B, 0xD9FD, 0x554F, 0xD9FE, 0x6587, + 0xDAA1, 0x6C76, 0xDAA2, 0x7D0A, 0xDAA3, 0x7D0B, 0xDAA4, 0x805E, 0xDAA5, 0x868A, 0xDAA6, 0x9580, 0xDAA7, 0x96EF, 0xDAA8, 0x52FF, + 0xDAA9, 0x6C95, 0xDAAA, 0x7269, 0xDAAB, 0x5473, 0xDAAC, 0x5A9A, 0xDAAD, 0x5C3E, 0xDAAE, 0x5D4B, 0xDAAF, 0x5F4C, 0xDAB0, 0x5FAE, + 0xDAB1, 0x672A, 0xDAB2, 0x68B6, 0xDAB3, 0x6963, 0xDAB4, 0x6E3C, 0xDAB5, 0x6E44, 0xDAB6, 0x7709, 0xDAB7, 0x7C73, 0xDAB8, 0x7F8E, + 0xDAB9, 0x8587, 0xDABA, 0x8B0E, 0xDABB, 0x8FF7, 0xDABC, 0x9761, 0xDABD, 0x9EF4, 0xDABE, 0x5CB7, 0xDABF, 0x60B6, 0xDAC0, 0x610D, + 0xDAC1, 0x61AB, 0xDAC2, 0x654F, 0xDAC3, 0x65FB, 0xDAC4, 0x65FC, 0xDAC5, 0x6C11, 0xDAC6, 0x6CEF, 0xDAC7, 0x739F, 0xDAC8, 0x73C9, + 0xDAC9, 0x7DE1, 0xDACA, 0x9594, 0xDACB, 0x5BC6, 0xDACC, 0x871C, 0xDACD, 0x8B10, 0xDACE, 0x525D, 0xDACF, 0x535A, 0xDAD0, 0x62CD, + 0xDAD1, 0x640F, 0xDAD2, 0x64B2, 0xDAD3, 0x6734, 0xDAD4, 0x6A38, 0xDAD5, 0x6CCA, 0xDAD6, 0x73C0, 0xDAD7, 0x749E, 0xDAD8, 0x7B94, + 0xDAD9, 0x7C95, 0xDADA, 0x7E1B, 0xDADB, 0x818A, 0xDADC, 0x8236, 0xDADD, 0x8584, 0xDADE, 0x8FEB, 0xDADF, 0x96F9, 0xDAE0, 0x99C1, + 0xDAE1, 0x4F34, 0xDAE2, 0x534A, 0xDAE3, 0x53CD, 0xDAE4, 0x53DB, 0xDAE5, 0x62CC, 0xDAE6, 0x642C, 0xDAE7, 0x6500, 0xDAE8, 0x6591, + 0xDAE9, 0x69C3, 0xDAEA, 0x6CEE, 0xDAEB, 0x6F58, 0xDAEC, 0x73ED, 0xDAED, 0x7554, 0xDAEE, 0x7622, 0xDAEF, 0x76E4, 0xDAF0, 0x76FC, + 0xDAF1, 0x78D0, 0xDAF2, 0x78FB, 0xDAF3, 0x792C, 0xDAF4, 0x7D46, 0xDAF5, 0x822C, 0xDAF6, 0x87E0, 0xDAF7, 0x8FD4, 0xDAF8, 0x9812, + 0xDAF9, 0x98EF, 0xDAFA, 0x52C3, 0xDAFB, 0x62D4, 0xDAFC, 0x64A5, 0xDAFD, 0x6E24, 0xDAFE, 0x6F51, 0xDBA1, 0x767C, 0xDBA2, 0x8DCB, + 0xDBA3, 0x91B1, 0xDBA4, 0x9262, 0xDBA5, 0x9AEE, 0xDBA6, 0x9B43, 0xDBA7, 0x5023, 0xDBA8, 0x508D, 0xDBA9, 0x574A, 0xDBAA, 0x59A8, + 0xDBAB, 0x5C28, 0xDBAC, 0x5E47, 0xDBAD, 0x5F77, 0xDBAE, 0x623F, 0xDBAF, 0x653E, 0xDBB0, 0x65B9, 0xDBB1, 0x65C1, 0xDBB2, 0x6609, + 0xDBB3, 0x678B, 0xDBB4, 0x699C, 0xDBB5, 0x6EC2, 0xDBB6, 0x78C5, 0xDBB7, 0x7D21, 0xDBB8, 0x80AA, 0xDBB9, 0x8180, 0xDBBA, 0x822B, + 0xDBBB, 0x82B3, 0xDBBC, 0x84A1, 0xDBBD, 0x868C, 0xDBBE, 0x8A2A, 0xDBBF, 0x8B17, 0xDBC0, 0x90A6, 0xDBC1, 0x9632, 0xDBC2, 0x9F90, + 0xDBC3, 0x500D, 0xDBC4, 0x4FF3, 0xDBC5, 0xF963, 0xDBC6, 0x57F9, 0xDBC7, 0x5F98, 0xDBC8, 0x62DC, 0xDBC9, 0x6392, 0xDBCA, 0x676F, + 0xDBCB, 0x6E43, 0xDBCC, 0x7119, 0xDBCD, 0x76C3, 0xDBCE, 0x80CC, 0xDBCF, 0x80DA, 0xDBD0, 0x88F4, 0xDBD1, 0x88F5, 0xDBD2, 0x8919, + 0xDBD3, 0x8CE0, 0xDBD4, 0x8F29, 0xDBD5, 0x914D, 0xDBD6, 0x966A, 0xDBD7, 0x4F2F, 0xDBD8, 0x4F70, 0xDBD9, 0x5E1B, 0xDBDA, 0x67CF, + 0xDBDB, 0x6822, 0xDBDC, 0x767D, 0xDBDD, 0x767E, 0xDBDE, 0x9B44, 0xDBDF, 0x5E61, 0xDBE0, 0x6A0A, 0xDBE1, 0x7169, 0xDBE2, 0x71D4, + 0xDBE3, 0x756A, 0xDBE4, 0xF964, 0xDBE5, 0x7E41, 0xDBE6, 0x8543, 0xDBE7, 0x85E9, 0xDBE8, 0x98DC, 0xDBE9, 0x4F10, 0xDBEA, 0x7B4F, + 0xDBEB, 0x7F70, 0xDBEC, 0x95A5, 0xDBED, 0x51E1, 0xDBEE, 0x5E06, 0xDBEF, 0x68B5, 0xDBF0, 0x6C3E, 0xDBF1, 0x6C4E, 0xDBF2, 0x6CDB, + 0xDBF3, 0x72AF, 0xDBF4, 0x7BC4, 0xDBF5, 0x8303, 0xDBF6, 0x6CD5, 0xDBF7, 0x743A, 0xDBF8, 0x50FB, 0xDBF9, 0x5288, 0xDBFA, 0x58C1, + 0xDBFB, 0x64D8, 0xDBFC, 0x6A97, 0xDBFD, 0x74A7, 0xDBFE, 0x7656, 0xDCA1, 0x78A7, 0xDCA2, 0x8617, 0xDCA3, 0x95E2, 0xDCA4, 0x9739, + 0xDCA5, 0xF965, 0xDCA6, 0x535E, 0xDCA7, 0x5F01, 0xDCA8, 0x8B8A, 0xDCA9, 0x8FA8, 0xDCAA, 0x8FAF, 0xDCAB, 0x908A, 0xDCAC, 0x5225, + 0xDCAD, 0x77A5, 0xDCAE, 0x9C49, 0xDCAF, 0x9F08, 0xDCB0, 0x4E19, 0xDCB1, 0x5002, 0xDCB2, 0x5175, 0xDCB3, 0x5C5B, 0xDCB4, 0x5E77, + 0xDCB5, 0x661E, 0xDCB6, 0x663A, 0xDCB7, 0x67C4, 0xDCB8, 0x68C5, 0xDCB9, 0x70B3, 0xDCBA, 0x7501, 0xDCBB, 0x75C5, 0xDCBC, 0x79C9, + 0xDCBD, 0x7ADD, 0xDCBE, 0x8F27, 0xDCBF, 0x9920, 0xDCC0, 0x9A08, 0xDCC1, 0x4FDD, 0xDCC2, 0x5821, 0xDCC3, 0x5831, 0xDCC4, 0x5BF6, + 0xDCC5, 0x666E, 0xDCC6, 0x6B65, 0xDCC7, 0x6D11, 0xDCC8, 0x6E7A, 0xDCC9, 0x6F7D, 0xDCCA, 0x73E4, 0xDCCB, 0x752B, 0xDCCC, 0x83E9, + 0xDCCD, 0x88DC, 0xDCCE, 0x8913, 0xDCCF, 0x8B5C, 0xDCD0, 0x8F14, 0xDCD1, 0x4F0F, 0xDCD2, 0x50D5, 0xDCD3, 0x5310, 0xDCD4, 0x535C, + 0xDCD5, 0x5B93, 0xDCD6, 0x5FA9, 0xDCD7, 0x670D, 0xDCD8, 0x798F, 0xDCD9, 0x8179, 0xDCDA, 0x832F, 0xDCDB, 0x8514, 0xDCDC, 0x8907, + 0xDCDD, 0x8986, 0xDCDE, 0x8F39, 0xDCDF, 0x8F3B, 0xDCE0, 0x99A5, 0xDCE1, 0x9C12, 0xDCE2, 0x672C, 0xDCE3, 0x4E76, 0xDCE4, 0x4FF8, + 0xDCE5, 0x5949, 0xDCE6, 0x5C01, 0xDCE7, 0x5CEF, 0xDCE8, 0x5CF0, 0xDCE9, 0x6367, 0xDCEA, 0x68D2, 0xDCEB, 0x70FD, 0xDCEC, 0x71A2, + 0xDCED, 0x742B, 0xDCEE, 0x7E2B, 0xDCEF, 0x84EC, 0xDCF0, 0x8702, 0xDCF1, 0x9022, 0xDCF2, 0x92D2, 0xDCF3, 0x9CF3, 0xDCF4, 0x4E0D, + 0xDCF5, 0x4ED8, 0xDCF6, 0x4FEF, 0xDCF7, 0x5085, 0xDCF8, 0x5256, 0xDCF9, 0x526F, 0xDCFA, 0x5426, 0xDCFB, 0x5490, 0xDCFC, 0x57E0, + 0xDCFD, 0x592B, 0xDCFE, 0x5A66, 0xDDA1, 0x5B5A, 0xDDA2, 0x5B75, 0xDDA3, 0x5BCC, 0xDDA4, 0x5E9C, 0xDDA5, 0xF966, 0xDDA6, 0x6276, + 0xDDA7, 0x6577, 0xDDA8, 0x65A7, 0xDDA9, 0x6D6E, 0xDDAA, 0x6EA5, 0xDDAB, 0x7236, 0xDDAC, 0x7B26, 0xDDAD, 0x7C3F, 0xDDAE, 0x7F36, + 0xDDAF, 0x8150, 0xDDB0, 0x8151, 0xDDB1, 0x819A, 0xDDB2, 0x8240, 0xDDB3, 0x8299, 0xDDB4, 0x83A9, 0xDDB5, 0x8A03, 0xDDB6, 0x8CA0, + 0xDDB7, 0x8CE6, 0xDDB8, 0x8CFB, 0xDDB9, 0x8D74, 0xDDBA, 0x8DBA, 0xDDBB, 0x90E8, 0xDDBC, 0x91DC, 0xDDBD, 0x961C, 0xDDBE, 0x9644, + 0xDDBF, 0x99D9, 0xDDC0, 0x9CE7, 0xDDC1, 0x5317, 0xDDC2, 0x5206, 0xDDC3, 0x5429, 0xDDC4, 0x5674, 0xDDC5, 0x58B3, 0xDDC6, 0x5954, + 0xDDC7, 0x596E, 0xDDC8, 0x5FFF, 0xDDC9, 0x61A4, 0xDDCA, 0x626E, 0xDDCB, 0x6610, 0xDDCC, 0x6C7E, 0xDDCD, 0x711A, 0xDDCE, 0x76C6, + 0xDDCF, 0x7C89, 0xDDD0, 0x7CDE, 0xDDD1, 0x7D1B, 0xDDD2, 0x82AC, 0xDDD3, 0x8CC1, 0xDDD4, 0x96F0, 0xDDD5, 0xF967, 0xDDD6, 0x4F5B, + 0xDDD7, 0x5F17, 0xDDD8, 0x5F7F, 0xDDD9, 0x62C2, 0xDDDA, 0x5D29, 0xDDDB, 0x670B, 0xDDDC, 0x68DA, 0xDDDD, 0x787C, 0xDDDE, 0x7E43, + 0xDDDF, 0x9D6C, 0xDDE0, 0x4E15, 0xDDE1, 0x5099, 0xDDE2, 0x5315, 0xDDE3, 0x532A, 0xDDE4, 0x5351, 0xDDE5, 0x5983, 0xDDE6, 0x5A62, + 0xDDE7, 0x5E87, 0xDDE8, 0x60B2, 0xDDE9, 0x618A, 0xDDEA, 0x6249, 0xDDEB, 0x6279, 0xDDEC, 0x6590, 0xDDED, 0x6787, 0xDDEE, 0x69A7, + 0xDDEF, 0x6BD4, 0xDDF0, 0x6BD6, 0xDDF1, 0x6BD7, 0xDDF2, 0x6BD8, 0xDDF3, 0x6CB8, 0xDDF4, 0xF968, 0xDDF5, 0x7435, 0xDDF6, 0x75FA, + 0xDDF7, 0x7812, 0xDDF8, 0x7891, 0xDDF9, 0x79D5, 0xDDFA, 0x79D8, 0xDDFB, 0x7C83, 0xDDFC, 0x7DCB, 0xDDFD, 0x7FE1, 0xDDFE, 0x80A5, + 0xDEA1, 0x813E, 0xDEA2, 0x81C2, 0xDEA3, 0x83F2, 0xDEA4, 0x871A, 0xDEA5, 0x88E8, 0xDEA6, 0x8AB9, 0xDEA7, 0x8B6C, 0xDEA8, 0x8CBB, + 0xDEA9, 0x9119, 0xDEAA, 0x975E, 0xDEAB, 0x98DB, 0xDEAC, 0x9F3B, 0xDEAD, 0x56AC, 0xDEAE, 0x5B2A, 0xDEAF, 0x5F6C, 0xDEB0, 0x658C, + 0xDEB1, 0x6AB3, 0xDEB2, 0x6BAF, 0xDEB3, 0x6D5C, 0xDEB4, 0x6FF1, 0xDEB5, 0x7015, 0xDEB6, 0x725D, 0xDEB7, 0x73AD, 0xDEB8, 0x8CA7, + 0xDEB9, 0x8CD3, 0xDEBA, 0x983B, 0xDEBB, 0x6191, 0xDEBC, 0x6C37, 0xDEBD, 0x8058, 0xDEBE, 0x9A01, 0xDEBF, 0x4E4D, 0xDEC0, 0x4E8B, + 0xDEC1, 0x4E9B, 0xDEC2, 0x4ED5, 0xDEC3, 0x4F3A, 0xDEC4, 0x4F3C, 0xDEC5, 0x4F7F, 0xDEC6, 0x4FDF, 0xDEC7, 0x50FF, 0xDEC8, 0x53F2, + 0xDEC9, 0x53F8, 0xDECA, 0x5506, 0xDECB, 0x55E3, 0xDECC, 0x56DB, 0xDECD, 0x58EB, 0xDECE, 0x5962, 0xDECF, 0x5A11, 0xDED0, 0x5BEB, + 0xDED1, 0x5BFA, 0xDED2, 0x5C04, 0xDED3, 0x5DF3, 0xDED4, 0x5E2B, 0xDED5, 0x5F99, 0xDED6, 0x601D, 0xDED7, 0x6368, 0xDED8, 0x659C, + 0xDED9, 0x65AF, 0xDEDA, 0x67F6, 0xDEDB, 0x67FB, 0xDEDC, 0x68AD, 0xDEDD, 0x6B7B, 0xDEDE, 0x6C99, 0xDEDF, 0x6CD7, 0xDEE0, 0x6E23, + 0xDEE1, 0x7009, 0xDEE2, 0x7345, 0xDEE3, 0x7802, 0xDEE4, 0x793E, 0xDEE5, 0x7940, 0xDEE6, 0x7960, 0xDEE7, 0x79C1, 0xDEE8, 0x7BE9, + 0xDEE9, 0x7D17, 0xDEEA, 0x7D72, 0xDEEB, 0x8086, 0xDEEC, 0x820D, 0xDEED, 0x838E, 0xDEEE, 0x84D1, 0xDEEF, 0x86C7, 0xDEF0, 0x88DF, + 0xDEF1, 0x8A50, 0xDEF2, 0x8A5E, 0xDEF3, 0x8B1D, 0xDEF4, 0x8CDC, 0xDEF5, 0x8D66, 0xDEF6, 0x8FAD, 0xDEF7, 0x90AA, 0xDEF8, 0x98FC, + 0xDEF9, 0x99DF, 0xDEFA, 0x9E9D, 0xDEFB, 0x524A, 0xDEFC, 0xF969, 0xDEFD, 0x6714, 0xDEFE, 0xF96A, 0xDFA1, 0x5098, 0xDFA2, 0x522A, + 0xDFA3, 0x5C71, 0xDFA4, 0x6563, 0xDFA5, 0x6C55, 0xDFA6, 0x73CA, 0xDFA7, 0x7523, 0xDFA8, 0x759D, 0xDFA9, 0x7B97, 0xDFAA, 0x849C, + 0xDFAB, 0x9178, 0xDFAC, 0x9730, 0xDFAD, 0x4E77, 0xDFAE, 0x6492, 0xDFAF, 0x6BBA, 0xDFB0, 0x715E, 0xDFB1, 0x85A9, 0xDFB2, 0x4E09, + 0xDFB3, 0xF96B, 0xDFB4, 0x6749, 0xDFB5, 0x68EE, 0xDFB6, 0x6E17, 0xDFB7, 0x829F, 0xDFB8, 0x8518, 0xDFB9, 0x886B, 0xDFBA, 0x63F7, + 0xDFBB, 0x6F81, 0xDFBC, 0x9212, 0xDFBD, 0x98AF, 0xDFBE, 0x4E0A, 0xDFBF, 0x50B7, 0xDFC0, 0x50CF, 0xDFC1, 0x511F, 0xDFC2, 0x5546, + 0xDFC3, 0x55AA, 0xDFC4, 0x5617, 0xDFC5, 0x5B40, 0xDFC6, 0x5C19, 0xDFC7, 0x5CE0, 0xDFC8, 0x5E38, 0xDFC9, 0x5E8A, 0xDFCA, 0x5EA0, + 0xDFCB, 0x5EC2, 0xDFCC, 0x60F3, 0xDFCD, 0x6851, 0xDFCE, 0x6A61, 0xDFCF, 0x6E58, 0xDFD0, 0x723D, 0xDFD1, 0x7240, 0xDFD2, 0x72C0, + 0xDFD3, 0x76F8, 0xDFD4, 0x7965, 0xDFD5, 0x7BB1, 0xDFD6, 0x7FD4, 0xDFD7, 0x88F3, 0xDFD8, 0x89F4, 0xDFD9, 0x8A73, 0xDFDA, 0x8C61, + 0xDFDB, 0x8CDE, 0xDFDC, 0x971C, 0xDFDD, 0x585E, 0xDFDE, 0x74BD, 0xDFDF, 0x8CFD, 0xDFE0, 0x55C7, 0xDFE1, 0xF96C, 0xDFE2, 0x7A61, + 0xDFE3, 0x7D22, 0xDFE4, 0x8272, 0xDFE5, 0x7272, 0xDFE6, 0x751F, 0xDFE7, 0x7525, 0xDFE8, 0xF96D, 0xDFE9, 0x7B19, 0xDFEA, 0x5885, + 0xDFEB, 0x58FB, 0xDFEC, 0x5DBC, 0xDFED, 0x5E8F, 0xDFEE, 0x5EB6, 0xDFEF, 0x5F90, 0xDFF0, 0x6055, 0xDFF1, 0x6292, 0xDFF2, 0x637F, + 0xDFF3, 0x654D, 0xDFF4, 0x6691, 0xDFF5, 0x66D9, 0xDFF6, 0x66F8, 0xDFF7, 0x6816, 0xDFF8, 0x68F2, 0xDFF9, 0x7280, 0xDFFA, 0x745E, + 0xDFFB, 0x7B6E, 0xDFFC, 0x7D6E, 0xDFFD, 0x7DD6, 0xDFFE, 0x7F72, 0xE0A1, 0x80E5, 0xE0A2, 0x8212, 0xE0A3, 0x85AF, 0xE0A4, 0x897F, + 0xE0A5, 0x8A93, 0xE0A6, 0x901D, 0xE0A7, 0x92E4, 0xE0A8, 0x9ECD, 0xE0A9, 0x9F20, 0xE0AA, 0x5915, 0xE0AB, 0x596D, 0xE0AC, 0x5E2D, + 0xE0AD, 0x60DC, 0xE0AE, 0x6614, 0xE0AF, 0x6673, 0xE0B0, 0x6790, 0xE0B1, 0x6C50, 0xE0B2, 0x6DC5, 0xE0B3, 0x6F5F, 0xE0B4, 0x77F3, + 0xE0B5, 0x78A9, 0xE0B6, 0x84C6, 0xE0B7, 0x91CB, 0xE0B8, 0x932B, 0xE0B9, 0x4ED9, 0xE0BA, 0x50CA, 0xE0BB, 0x5148, 0xE0BC, 0x5584, + 0xE0BD, 0x5B0B, 0xE0BE, 0x5BA3, 0xE0BF, 0x6247, 0xE0C0, 0x657E, 0xE0C1, 0x65CB, 0xE0C2, 0x6E32, 0xE0C3, 0x717D, 0xE0C4, 0x7401, + 0xE0C5, 0x7444, 0xE0C6, 0x7487, 0xE0C7, 0x74BF, 0xE0C8, 0x766C, 0xE0C9, 0x79AA, 0xE0CA, 0x7DDA, 0xE0CB, 0x7E55, 0xE0CC, 0x7FA8, + 0xE0CD, 0x817A, 0xE0CE, 0x81B3, 0xE0CF, 0x8239, 0xE0D0, 0x861A, 0xE0D1, 0x87EC, 0xE0D2, 0x8A75, 0xE0D3, 0x8DE3, 0xE0D4, 0x9078, + 0xE0D5, 0x9291, 0xE0D6, 0x9425, 0xE0D7, 0x994D, 0xE0D8, 0x9BAE, 0xE0D9, 0x5368, 0xE0DA, 0x5C51, 0xE0DB, 0x6954, 0xE0DC, 0x6CC4, + 0xE0DD, 0x6D29, 0xE0DE, 0x6E2B, 0xE0DF, 0x820C, 0xE0E0, 0x859B, 0xE0E1, 0x893B, 0xE0E2, 0x8A2D, 0xE0E3, 0x8AAA, 0xE0E4, 0x96EA, + 0xE0E5, 0x9F67, 0xE0E6, 0x5261, 0xE0E7, 0x66B9, 0xE0E8, 0x6BB2, 0xE0E9, 0x7E96, 0xE0EA, 0x87FE, 0xE0EB, 0x8D0D, 0xE0EC, 0x9583, + 0xE0ED, 0x965D, 0xE0EE, 0x651D, 0xE0EF, 0x6D89, 0xE0F0, 0x71EE, 0xE0F1, 0xF96E, 0xE0F2, 0x57CE, 0xE0F3, 0x59D3, 0xE0F4, 0x5BAC, + 0xE0F5, 0x6027, 0xE0F6, 0x60FA, 0xE0F7, 0x6210, 0xE0F8, 0x661F, 0xE0F9, 0x665F, 0xE0FA, 0x7329, 0xE0FB, 0x73F9, 0xE0FC, 0x76DB, + 0xE0FD, 0x7701, 0xE0FE, 0x7B6C, 0xE1A1, 0x8056, 0xE1A2, 0x8072, 0xE1A3, 0x8165, 0xE1A4, 0x8AA0, 0xE1A5, 0x9192, 0xE1A6, 0x4E16, + 0xE1A7, 0x52E2, 0xE1A8, 0x6B72, 0xE1A9, 0x6D17, 0xE1AA, 0x7A05, 0xE1AB, 0x7B39, 0xE1AC, 0x7D30, 0xE1AD, 0xF96F, 0xE1AE, 0x8CB0, + 0xE1AF, 0x53EC, 0xE1B0, 0x562F, 0xE1B1, 0x5851, 0xE1B2, 0x5BB5, 0xE1B3, 0x5C0F, 0xE1B4, 0x5C11, 0xE1B5, 0x5DE2, 0xE1B6, 0x6240, + 0xE1B7, 0x6383, 0xE1B8, 0x6414, 0xE1B9, 0x662D, 0xE1BA, 0x68B3, 0xE1BB, 0x6CBC, 0xE1BC, 0x6D88, 0xE1BD, 0x6EAF, 0xE1BE, 0x701F, + 0xE1BF, 0x70A4, 0xE1C0, 0x71D2, 0xE1C1, 0x7526, 0xE1C2, 0x758F, 0xE1C3, 0x758E, 0xE1C4, 0x7619, 0xE1C5, 0x7B11, 0xE1C6, 0x7BE0, + 0xE1C7, 0x7C2B, 0xE1C8, 0x7D20, 0xE1C9, 0x7D39, 0xE1CA, 0x852C, 0xE1CB, 0x856D, 0xE1CC, 0x8607, 0xE1CD, 0x8A34, 0xE1CE, 0x900D, + 0xE1CF, 0x9061, 0xE1D0, 0x90B5, 0xE1D1, 0x92B7, 0xE1D2, 0x97F6, 0xE1D3, 0x9A37, 0xE1D4, 0x4FD7, 0xE1D5, 0x5C6C, 0xE1D6, 0x675F, + 0xE1D7, 0x6D91, 0xE1D8, 0x7C9F, 0xE1D9, 0x7E8C, 0xE1DA, 0x8B16, 0xE1DB, 0x8D16, 0xE1DC, 0x901F, 0xE1DD, 0x5B6B, 0xE1DE, 0x5DFD, + 0xE1DF, 0x640D, 0xE1E0, 0x84C0, 0xE1E1, 0x905C, 0xE1E2, 0x98E1, 0xE1E3, 0x7387, 0xE1E4, 0x5B8B, 0xE1E5, 0x609A, 0xE1E6, 0x677E, + 0xE1E7, 0x6DDE, 0xE1E8, 0x8A1F, 0xE1E9, 0x8AA6, 0xE1EA, 0x9001, 0xE1EB, 0x980C, 0xE1EC, 0x5237, 0xE1ED, 0xF970, 0xE1EE, 0x7051, + 0xE1EF, 0x788E, 0xE1F0, 0x9396, 0xE1F1, 0x8870, 0xE1F2, 0x91D7, 0xE1F3, 0x4FEE, 0xE1F4, 0x53D7, 0xE1F5, 0x55FD, 0xE1F6, 0x56DA, + 0xE1F7, 0x5782, 0xE1F8, 0x58FD, 0xE1F9, 0x5AC2, 0xE1FA, 0x5B88, 0xE1FB, 0x5CAB, 0xE1FC, 0x5CC0, 0xE1FD, 0x5E25, 0xE1FE, 0x6101, + 0xE2A1, 0x620D, 0xE2A2, 0x624B, 0xE2A3, 0x6388, 0xE2A4, 0x641C, 0xE2A5, 0x6536, 0xE2A6, 0x6578, 0xE2A7, 0x6A39, 0xE2A8, 0x6B8A, + 0xE2A9, 0x6C34, 0xE2AA, 0x6D19, 0xE2AB, 0x6F31, 0xE2AC, 0x71E7, 0xE2AD, 0x72E9, 0xE2AE, 0x7378, 0xE2AF, 0x7407, 0xE2B0, 0x74B2, + 0xE2B1, 0x7626, 0xE2B2, 0x7761, 0xE2B3, 0x79C0, 0xE2B4, 0x7A57, 0xE2B5, 0x7AEA, 0xE2B6, 0x7CB9, 0xE2B7, 0x7D8F, 0xE2B8, 0x7DAC, + 0xE2B9, 0x7E61, 0xE2BA, 0x7F9E, 0xE2BB, 0x8129, 0xE2BC, 0x8331, 0xE2BD, 0x8490, 0xE2BE, 0x84DA, 0xE2BF, 0x85EA, 0xE2C0, 0x8896, + 0xE2C1, 0x8AB0, 0xE2C2, 0x8B90, 0xE2C3, 0x8F38, 0xE2C4, 0x9042, 0xE2C5, 0x9083, 0xE2C6, 0x916C, 0xE2C7, 0x9296, 0xE2C8, 0x92B9, + 0xE2C9, 0x968B, 0xE2CA, 0x96A7, 0xE2CB, 0x96A8, 0xE2CC, 0x96D6, 0xE2CD, 0x9700, 0xE2CE, 0x9808, 0xE2CF, 0x9996, 0xE2D0, 0x9AD3, + 0xE2D1, 0x9B1A, 0xE2D2, 0x53D4, 0xE2D3, 0x587E, 0xE2D4, 0x5919, 0xE2D5, 0x5B70, 0xE2D6, 0x5BBF, 0xE2D7, 0x6DD1, 0xE2D8, 0x6F5A, + 0xE2D9, 0x719F, 0xE2DA, 0x7421, 0xE2DB, 0x74B9, 0xE2DC, 0x8085, 0xE2DD, 0x83FD, 0xE2DE, 0x5DE1, 0xE2DF, 0x5F87, 0xE2E0, 0x5FAA, + 0xE2E1, 0x6042, 0xE2E2, 0x65EC, 0xE2E3, 0x6812, 0xE2E4, 0x696F, 0xE2E5, 0x6A53, 0xE2E6, 0x6B89, 0xE2E7, 0x6D35, 0xE2E8, 0x6DF3, + 0xE2E9, 0x73E3, 0xE2EA, 0x76FE, 0xE2EB, 0x77AC, 0xE2EC, 0x7B4D, 0xE2ED, 0x7D14, 0xE2EE, 0x8123, 0xE2EF, 0x821C, 0xE2F0, 0x8340, + 0xE2F1, 0x84F4, 0xE2F2, 0x8563, 0xE2F3, 0x8A62, 0xE2F4, 0x8AC4, 0xE2F5, 0x9187, 0xE2F6, 0x931E, 0xE2F7, 0x9806, 0xE2F8, 0x99B4, + 0xE2F9, 0x620C, 0xE2FA, 0x8853, 0xE2FB, 0x8FF0, 0xE2FC, 0x9265, 0xE2FD, 0x5D07, 0xE2FE, 0x5D27, 0xE3A1, 0x5D69, 0xE3A2, 0x745F, + 0xE3A3, 0x819D, 0xE3A4, 0x8768, 0xE3A5, 0x6FD5, 0xE3A6, 0x62FE, 0xE3A7, 0x7FD2, 0xE3A8, 0x8936, 0xE3A9, 0x8972, 0xE3AA, 0x4E1E, + 0xE3AB, 0x4E58, 0xE3AC, 0x50E7, 0xE3AD, 0x52DD, 0xE3AE, 0x5347, 0xE3AF, 0x627F, 0xE3B0, 0x6607, 0xE3B1, 0x7E69, 0xE3B2, 0x8805, + 0xE3B3, 0x965E, 0xE3B4, 0x4F8D, 0xE3B5, 0x5319, 0xE3B6, 0x5636, 0xE3B7, 0x59CB, 0xE3B8, 0x5AA4, 0xE3B9, 0x5C38, 0xE3BA, 0x5C4E, + 0xE3BB, 0x5C4D, 0xE3BC, 0x5E02, 0xE3BD, 0x5F11, 0xE3BE, 0x6043, 0xE3BF, 0x65BD, 0xE3C0, 0x662F, 0xE3C1, 0x6642, 0xE3C2, 0x67BE, + 0xE3C3, 0x67F4, 0xE3C4, 0x731C, 0xE3C5, 0x77E2, 0xE3C6, 0x793A, 0xE3C7, 0x7FC5, 0xE3C8, 0x8494, 0xE3C9, 0x84CD, 0xE3CA, 0x8996, + 0xE3CB, 0x8A66, 0xE3CC, 0x8A69, 0xE3CD, 0x8AE1, 0xE3CE, 0x8C55, 0xE3CF, 0x8C7A, 0xE3D0, 0x57F4, 0xE3D1, 0x5BD4, 0xE3D2, 0x5F0F, + 0xE3D3, 0x606F, 0xE3D4, 0x62ED, 0xE3D5, 0x690D, 0xE3D6, 0x6B96, 0xE3D7, 0x6E5C, 0xE3D8, 0x7184, 0xE3D9, 0x7BD2, 0xE3DA, 0x8755, + 0xE3DB, 0x8B58, 0xE3DC, 0x8EFE, 0xE3DD, 0x98DF, 0xE3DE, 0x98FE, 0xE3DF, 0x4F38, 0xE3E0, 0x4F81, 0xE3E1, 0x4FE1, 0xE3E2, 0x547B, + 0xE3E3, 0x5A20, 0xE3E4, 0x5BB8, 0xE3E5, 0x613C, 0xE3E6, 0x65B0, 0xE3E7, 0x6668, 0xE3E8, 0x71FC, 0xE3E9, 0x7533, 0xE3EA, 0x795E, + 0xE3EB, 0x7D33, 0xE3EC, 0x814E, 0xE3ED, 0x81E3, 0xE3EE, 0x8398, 0xE3EF, 0x85AA, 0xE3F0, 0x85CE, 0xE3F1, 0x8703, 0xE3F2, 0x8A0A, + 0xE3F3, 0x8EAB, 0xE3F4, 0x8F9B, 0xE3F5, 0xF971, 0xE3F6, 0x8FC5, 0xE3F7, 0x5931, 0xE3F8, 0x5BA4, 0xE3F9, 0x5BE6, 0xE3FA, 0x6089, + 0xE3FB, 0x5BE9, 0xE3FC, 0x5C0B, 0xE3FD, 0x5FC3, 0xE3FE, 0x6C81, 0xE4A1, 0xF972, 0xE4A2, 0x6DF1, 0xE4A3, 0x700B, 0xE4A4, 0x751A, + 0xE4A5, 0x82AF, 0xE4A6, 0x8AF6, 0xE4A7, 0x4EC0, 0xE4A8, 0x5341, 0xE4A9, 0xF973, 0xE4AA, 0x96D9, 0xE4AB, 0x6C0F, 0xE4AC, 0x4E9E, + 0xE4AD, 0x4FC4, 0xE4AE, 0x5152, 0xE4AF, 0x555E, 0xE4B0, 0x5A25, 0xE4B1, 0x5CE8, 0xE4B2, 0x6211, 0xE4B3, 0x7259, 0xE4B4, 0x82BD, + 0xE4B5, 0x83AA, 0xE4B6, 0x86FE, 0xE4B7, 0x8859, 0xE4B8, 0x8A1D, 0xE4B9, 0x963F, 0xE4BA, 0x96C5, 0xE4BB, 0x9913, 0xE4BC, 0x9D09, + 0xE4BD, 0x9D5D, 0xE4BE, 0x580A, 0xE4BF, 0x5CB3, 0xE4C0, 0x5DBD, 0xE4C1, 0x5E44, 0xE4C2, 0x60E1, 0xE4C3, 0x6115, 0xE4C4, 0x63E1, + 0xE4C5, 0x6A02, 0xE4C6, 0x6E25, 0xE4C7, 0x9102, 0xE4C8, 0x9354, 0xE4C9, 0x984E, 0xE4CA, 0x9C10, 0xE4CB, 0x9F77, 0xE4CC, 0x5B89, + 0xE4CD, 0x5CB8, 0xE4CE, 0x6309, 0xE4CF, 0x664F, 0xE4D0, 0x6848, 0xE4D1, 0x773C, 0xE4D2, 0x96C1, 0xE4D3, 0x978D, 0xE4D4, 0x9854, + 0xE4D5, 0x9B9F, 0xE4D6, 0x65A1, 0xE4D7, 0x8B01, 0xE4D8, 0x8ECB, 0xE4D9, 0x95BC, 0xE4DA, 0x5535, 0xE4DB, 0x5CA9, 0xE4DC, 0x5DD6, + 0xE4DD, 0x5EB5, 0xE4DE, 0x6697, 0xE4DF, 0x764C, 0xE4E0, 0x83F4, 0xE4E1, 0x95C7, 0xE4E2, 0x58D3, 0xE4E3, 0x62BC, 0xE4E4, 0x72CE, + 0xE4E5, 0x9D28, 0xE4E6, 0x4EF0, 0xE4E7, 0x592E, 0xE4E8, 0x600F, 0xE4E9, 0x663B, 0xE4EA, 0x6B83, 0xE4EB, 0x79E7, 0xE4EC, 0x9D26, + 0xE4ED, 0x5393, 0xE4EE, 0x54C0, 0xE4EF, 0x57C3, 0xE4F0, 0x5D16, 0xE4F1, 0x611B, 0xE4F2, 0x66D6, 0xE4F3, 0x6DAF, 0xE4F4, 0x788D, + 0xE4F5, 0x827E, 0xE4F6, 0x9698, 0xE4F7, 0x9744, 0xE4F8, 0x5384, 0xE4F9, 0x627C, 0xE4FA, 0x6396, 0xE4FB, 0x6DB2, 0xE4FC, 0x7E0A, + 0xE4FD, 0x814B, 0xE4FE, 0x984D, 0xE5A1, 0x6AFB, 0xE5A2, 0x7F4C, 0xE5A3, 0x9DAF, 0xE5A4, 0x9E1A, 0xE5A5, 0x4E5F, 0xE5A6, 0x503B, + 0xE5A7, 0x51B6, 0xE5A8, 0x591C, 0xE5A9, 0x60F9, 0xE5AA, 0x63F6, 0xE5AB, 0x6930, 0xE5AC, 0x723A, 0xE5AD, 0x8036, 0xE5AE, 0xF974, + 0xE5AF, 0x91CE, 0xE5B0, 0x5F31, 0xE5B1, 0xF975, 0xE5B2, 0xF976, 0xE5B3, 0x7D04, 0xE5B4, 0x82E5, 0xE5B5, 0x846F, 0xE5B6, 0x84BB, + 0xE5B7, 0x85E5, 0xE5B8, 0x8E8D, 0xE5B9, 0xF977, 0xE5BA, 0x4F6F, 0xE5BB, 0xF978, 0xE5BC, 0xF979, 0xE5BD, 0x58E4, 0xE5BE, 0x5B43, + 0xE5BF, 0x6059, 0xE5C0, 0x63DA, 0xE5C1, 0x6518, 0xE5C2, 0x656D, 0xE5C3, 0x6698, 0xE5C4, 0xF97A, 0xE5C5, 0x694A, 0xE5C6, 0x6A23, + 0xE5C7, 0x6D0B, 0xE5C8, 0x7001, 0xE5C9, 0x716C, 0xE5CA, 0x75D2, 0xE5CB, 0x760D, 0xE5CC, 0x79B3, 0xE5CD, 0x7A70, 0xE5CE, 0xF97B, + 0xE5CF, 0x7F8A, 0xE5D0, 0xF97C, 0xE5D1, 0x8944, 0xE5D2, 0xF97D, 0xE5D3, 0x8B93, 0xE5D4, 0x91C0, 0xE5D5, 0x967D, 0xE5D6, 0xF97E, + 0xE5D7, 0x990A, 0xE5D8, 0x5704, 0xE5D9, 0x5FA1, 0xE5DA, 0x65BC, 0xE5DB, 0x6F01, 0xE5DC, 0x7600, 0xE5DD, 0x79A6, 0xE5DE, 0x8A9E, + 0xE5DF, 0x99AD, 0xE5E0, 0x9B5A, 0xE5E1, 0x9F6C, 0xE5E2, 0x5104, 0xE5E3, 0x61B6, 0xE5E4, 0x6291, 0xE5E5, 0x6A8D, 0xE5E6, 0x81C6, + 0xE5E7, 0x5043, 0xE5E8, 0x5830, 0xE5E9, 0x5F66, 0xE5EA, 0x7109, 0xE5EB, 0x8A00, 0xE5EC, 0x8AFA, 0xE5ED, 0x5B7C, 0xE5EE, 0x8616, + 0xE5EF, 0x4FFA, 0xE5F0, 0x513C, 0xE5F1, 0x56B4, 0xE5F2, 0x5944, 0xE5F3, 0x63A9, 0xE5F4, 0x6DF9, 0xE5F5, 0x5DAA, 0xE5F6, 0x696D, + 0xE5F7, 0x5186, 0xE5F8, 0x4E88, 0xE5F9, 0x4F59, 0xE5FA, 0xF97F, 0xE5FB, 0xF980, 0xE5FC, 0xF981, 0xE5FD, 0x5982, 0xE5FE, 0xF982, + 0xE6A1, 0xF983, 0xE6A2, 0x6B5F, 0xE6A3, 0x6C5D, 0xE6A4, 0xF984, 0xE6A5, 0x74B5, 0xE6A6, 0x7916, 0xE6A7, 0xF985, 0xE6A8, 0x8207, + 0xE6A9, 0x8245, 0xE6AA, 0x8339, 0xE6AB, 0x8F3F, 0xE6AC, 0x8F5D, 0xE6AD, 0xF986, 0xE6AE, 0x9918, 0xE6AF, 0xF987, 0xE6B0, 0xF988, + 0xE6B1, 0xF989, 0xE6B2, 0x4EA6, 0xE6B3, 0xF98A, 0xE6B4, 0x57DF, 0xE6B5, 0x5F79, 0xE6B6, 0x6613, 0xE6B7, 0xF98B, 0xE6B8, 0xF98C, + 0xE6B9, 0x75AB, 0xE6BA, 0x7E79, 0xE6BB, 0x8B6F, 0xE6BC, 0xF98D, 0xE6BD, 0x9006, 0xE6BE, 0x9A5B, 0xE6BF, 0x56A5, 0xE6C0, 0x5827, + 0xE6C1, 0x59F8, 0xE6C2, 0x5A1F, 0xE6C3, 0x5BB4, 0xE6C4, 0xF98E, 0xE6C5, 0x5EF6, 0xE6C6, 0xF98F, 0xE6C7, 0xF990, 0xE6C8, 0x6350, + 0xE6C9, 0x633B, 0xE6CA, 0xF991, 0xE6CB, 0x693D, 0xE6CC, 0x6C87, 0xE6CD, 0x6CBF, 0xE6CE, 0x6D8E, 0xE6CF, 0x6D93, 0xE6D0, 0x6DF5, + 0xE6D1, 0x6F14, 0xE6D2, 0xF992, 0xE6D3, 0x70DF, 0xE6D4, 0x7136, 0xE6D5, 0x7159, 0xE6D6, 0xF993, 0xE6D7, 0x71C3, 0xE6D8, 0x71D5, + 0xE6D9, 0xF994, 0xE6DA, 0x784F, 0xE6DB, 0x786F, 0xE6DC, 0xF995, 0xE6DD, 0x7B75, 0xE6DE, 0x7DE3, 0xE6DF, 0xF996, 0xE6E0, 0x7E2F, + 0xE6E1, 0xF997, 0xE6E2, 0x884D, 0xE6E3, 0x8EDF, 0xE6E4, 0xF998, 0xE6E5, 0xF999, 0xE6E6, 0xF99A, 0xE6E7, 0x925B, 0xE6E8, 0xF99B, + 0xE6E9, 0x9CF6, 0xE6EA, 0xF99C, 0xE6EB, 0xF99D, 0xE6EC, 0xF99E, 0xE6ED, 0x6085, 0xE6EE, 0x6D85, 0xE6EF, 0xF99F, 0xE6F0, 0x71B1, + 0xE6F1, 0xF9A0, 0xE6F2, 0xF9A1, 0xE6F3, 0x95B1, 0xE6F4, 0x53AD, 0xE6F5, 0xF9A2, 0xE6F6, 0xF9A3, 0xE6F7, 0xF9A4, 0xE6F8, 0x67D3, + 0xE6F9, 0xF9A5, 0xE6FA, 0x708E, 0xE6FB, 0x7130, 0xE6FC, 0x7430, 0xE6FD, 0x8276, 0xE6FE, 0x82D2, 0xE7A1, 0xF9A6, 0xE7A2, 0x95BB, + 0xE7A3, 0x9AE5, 0xE7A4, 0x9E7D, 0xE7A5, 0x66C4, 0xE7A6, 0xF9A7, 0xE7A7, 0x71C1, 0xE7A8, 0x8449, 0xE7A9, 0xF9A8, 0xE7AA, 0xF9A9, + 0xE7AB, 0x584B, 0xE7AC, 0xF9AA, 0xE7AD, 0xF9AB, 0xE7AE, 0x5DB8, 0xE7AF, 0x5F71, 0xE7B0, 0xF9AC, 0xE7B1, 0x6620, 0xE7B2, 0x668E, + 0xE7B3, 0x6979, 0xE7B4, 0x69AE, 0xE7B5, 0x6C38, 0xE7B6, 0x6CF3, 0xE7B7, 0x6E36, 0xE7B8, 0x6F41, 0xE7B9, 0x6FDA, 0xE7BA, 0x701B, + 0xE7BB, 0x702F, 0xE7BC, 0x7150, 0xE7BD, 0x71DF, 0xE7BE, 0x7370, 0xE7BF, 0xF9AD, 0xE7C0, 0x745B, 0xE7C1, 0xF9AE, 0xE7C2, 0x74D4, + 0xE7C3, 0x76C8, 0xE7C4, 0x7A4E, 0xE7C5, 0x7E93, 0xE7C6, 0xF9AF, 0xE7C7, 0xF9B0, 0xE7C8, 0x82F1, 0xE7C9, 0x8A60, 0xE7CA, 0x8FCE, + 0xE7CB, 0xF9B1, 0xE7CC, 0x9348, 0xE7CD, 0xF9B2, 0xE7CE, 0x9719, 0xE7CF, 0xF9B3, 0xE7D0, 0xF9B4, 0xE7D1, 0x4E42, 0xE7D2, 0x502A, + 0xE7D3, 0xF9B5, 0xE7D4, 0x5208, 0xE7D5, 0x53E1, 0xE7D6, 0x66F3, 0xE7D7, 0x6C6D, 0xE7D8, 0x6FCA, 0xE7D9, 0x730A, 0xE7DA, 0x777F, + 0xE7DB, 0x7A62, 0xE7DC, 0x82AE, 0xE7DD, 0x85DD, 0xE7DE, 0x8602, 0xE7DF, 0xF9B6, 0xE7E0, 0x88D4, 0xE7E1, 0x8A63, 0xE7E2, 0x8B7D, + 0xE7E3, 0x8C6B, 0xE7E4, 0xF9B7, 0xE7E5, 0x92B3, 0xE7E6, 0xF9B8, 0xE7E7, 0x9713, 0xE7E8, 0x9810, 0xE7E9, 0x4E94, 0xE7EA, 0x4F0D, + 0xE7EB, 0x4FC9, 0xE7EC, 0x50B2, 0xE7ED, 0x5348, 0xE7EE, 0x543E, 0xE7EF, 0x5433, 0xE7F0, 0x55DA, 0xE7F1, 0x5862, 0xE7F2, 0x58BA, + 0xE7F3, 0x5967, 0xE7F4, 0x5A1B, 0xE7F5, 0x5BE4, 0xE7F6, 0x609F, 0xE7F7, 0xF9B9, 0xE7F8, 0x61CA, 0xE7F9, 0x6556, 0xE7FA, 0x65FF, + 0xE7FB, 0x6664, 0xE7FC, 0x68A7, 0xE7FD, 0x6C5A, 0xE7FE, 0x6FB3, 0xE8A1, 0x70CF, 0xE8A2, 0x71AC, 0xE8A3, 0x7352, 0xE8A4, 0x7B7D, + 0xE8A5, 0x8708, 0xE8A6, 0x8AA4, 0xE8A7, 0x9C32, 0xE8A8, 0x9F07, 0xE8A9, 0x5C4B, 0xE8AA, 0x6C83, 0xE8AB, 0x7344, 0xE8AC, 0x7389, + 0xE8AD, 0x923A, 0xE8AE, 0x6EAB, 0xE8AF, 0x7465, 0xE8B0, 0x761F, 0xE8B1, 0x7A69, 0xE8B2, 0x7E15, 0xE8B3, 0x860A, 0xE8B4, 0x5140, + 0xE8B5, 0x58C5, 0xE8B6, 0x64C1, 0xE8B7, 0x74EE, 0xE8B8, 0x7515, 0xE8B9, 0x7670, 0xE8BA, 0x7FC1, 0xE8BB, 0x9095, 0xE8BC, 0x96CD, + 0xE8BD, 0x9954, 0xE8BE, 0x6E26, 0xE8BF, 0x74E6, 0xE8C0, 0x7AA9, 0xE8C1, 0x7AAA, 0xE8C2, 0x81E5, 0xE8C3, 0x86D9, 0xE8C4, 0x8778, + 0xE8C5, 0x8A1B, 0xE8C6, 0x5A49, 0xE8C7, 0x5B8C, 0xE8C8, 0x5B9B, 0xE8C9, 0x68A1, 0xE8CA, 0x6900, 0xE8CB, 0x6D63, 0xE8CC, 0x73A9, + 0xE8CD, 0x7413, 0xE8CE, 0x742C, 0xE8CF, 0x7897, 0xE8D0, 0x7DE9, 0xE8D1, 0x7FEB, 0xE8D2, 0x8118, 0xE8D3, 0x8155, 0xE8D4, 0x839E, + 0xE8D5, 0x8C4C, 0xE8D6, 0x962E, 0xE8D7, 0x9811, 0xE8D8, 0x66F0, 0xE8D9, 0x5F80, 0xE8DA, 0x65FA, 0xE8DB, 0x6789, 0xE8DC, 0x6C6A, + 0xE8DD, 0x738B, 0xE8DE, 0x502D, 0xE8DF, 0x5A03, 0xE8E0, 0x6B6A, 0xE8E1, 0x77EE, 0xE8E2, 0x5916, 0xE8E3, 0x5D6C, 0xE8E4, 0x5DCD, + 0xE8E5, 0x7325, 0xE8E6, 0x754F, 0xE8E7, 0xF9BA, 0xE8E8, 0xF9BB, 0xE8E9, 0x50E5, 0xE8EA, 0x51F9, 0xE8EB, 0x582F, 0xE8EC, 0x592D, + 0xE8ED, 0x5996, 0xE8EE, 0x59DA, 0xE8EF, 0x5BE5, 0xE8F0, 0xF9BC, 0xE8F1, 0xF9BD, 0xE8F2, 0x5DA2, 0xE8F3, 0x62D7, 0xE8F4, 0x6416, + 0xE8F5, 0x6493, 0xE8F6, 0x64FE, 0xE8F7, 0xF9BE, 0xE8F8, 0x66DC, 0xE8F9, 0xF9BF, 0xE8FA, 0x6A48, 0xE8FB, 0xF9C0, 0xE8FC, 0x71FF, + 0xE8FD, 0x7464, 0xE8FE, 0xF9C1, 0xE9A1, 0x7A88, 0xE9A2, 0x7AAF, 0xE9A3, 0x7E47, 0xE9A4, 0x7E5E, 0xE9A5, 0x8000, 0xE9A6, 0x8170, + 0xE9A7, 0xF9C2, 0xE9A8, 0x87EF, 0xE9A9, 0x8981, 0xE9AA, 0x8B20, 0xE9AB, 0x9059, 0xE9AC, 0xF9C3, 0xE9AD, 0x9080, 0xE9AE, 0x9952, + 0xE9AF, 0x617E, 0xE9B0, 0x6B32, 0xE9B1, 0x6D74, 0xE9B2, 0x7E1F, 0xE9B3, 0x8925, 0xE9B4, 0x8FB1, 0xE9B5, 0x4FD1, 0xE9B6, 0x50AD, + 0xE9B7, 0x5197, 0xE9B8, 0x52C7, 0xE9B9, 0x57C7, 0xE9BA, 0x5889, 0xE9BB, 0x5BB9, 0xE9BC, 0x5EB8, 0xE9BD, 0x6142, 0xE9BE, 0x6995, + 0xE9BF, 0x6D8C, 0xE9C0, 0x6E67, 0xE9C1, 0x6EB6, 0xE9C2, 0x7194, 0xE9C3, 0x7462, 0xE9C4, 0x7528, 0xE9C5, 0x752C, 0xE9C6, 0x8073, + 0xE9C7, 0x8338, 0xE9C8, 0x84C9, 0xE9C9, 0x8E0A, 0xE9CA, 0x9394, 0xE9CB, 0x93DE, 0xE9CC, 0xF9C4, 0xE9CD, 0x4E8E, 0xE9CE, 0x4F51, + 0xE9CF, 0x5076, 0xE9D0, 0x512A, 0xE9D1, 0x53C8, 0xE9D2, 0x53CB, 0xE9D3, 0x53F3, 0xE9D4, 0x5B87, 0xE9D5, 0x5BD3, 0xE9D6, 0x5C24, + 0xE9D7, 0x611A, 0xE9D8, 0x6182, 0xE9D9, 0x65F4, 0xE9DA, 0x725B, 0xE9DB, 0x7397, 0xE9DC, 0x7440, 0xE9DD, 0x76C2, 0xE9DE, 0x7950, + 0xE9DF, 0x7991, 0xE9E0, 0x79B9, 0xE9E1, 0x7D06, 0xE9E2, 0x7FBD, 0xE9E3, 0x828B, 0xE9E4, 0x85D5, 0xE9E5, 0x865E, 0xE9E6, 0x8FC2, + 0xE9E7, 0x9047, 0xE9E8, 0x90F5, 0xE9E9, 0x91EA, 0xE9EA, 0x9685, 0xE9EB, 0x96E8, 0xE9EC, 0x96E9, 0xE9ED, 0x52D6, 0xE9EE, 0x5F67, + 0xE9EF, 0x65ED, 0xE9F0, 0x6631, 0xE9F1, 0x682F, 0xE9F2, 0x715C, 0xE9F3, 0x7A36, 0xE9F4, 0x90C1, 0xE9F5, 0x980A, 0xE9F6, 0x4E91, + 0xE9F7, 0xF9C5, 0xE9F8, 0x6A52, 0xE9F9, 0x6B9E, 0xE9FA, 0x6F90, 0xE9FB, 0x7189, 0xE9FC, 0x8018, 0xE9FD, 0x82B8, 0xE9FE, 0x8553, + 0xEAA1, 0x904B, 0xEAA2, 0x9695, 0xEAA3, 0x96F2, 0xEAA4, 0x97FB, 0xEAA5, 0x851A, 0xEAA6, 0x9B31, 0xEAA7, 0x4E90, 0xEAA8, 0x718A, + 0xEAA9, 0x96C4, 0xEAAA, 0x5143, 0xEAAB, 0x539F, 0xEAAC, 0x54E1, 0xEAAD, 0x5713, 0xEAAE, 0x5712, 0xEAAF, 0x57A3, 0xEAB0, 0x5A9B, + 0xEAB1, 0x5AC4, 0xEAB2, 0x5BC3, 0xEAB3, 0x6028, 0xEAB4, 0x613F, 0xEAB5, 0x63F4, 0xEAB6, 0x6C85, 0xEAB7, 0x6D39, 0xEAB8, 0x6E72, + 0xEAB9, 0x6E90, 0xEABA, 0x7230, 0xEABB, 0x733F, 0xEABC, 0x7457, 0xEABD, 0x82D1, 0xEABE, 0x8881, 0xEABF, 0x8F45, 0xEAC0, 0x9060, + 0xEAC1, 0xF9C6, 0xEAC2, 0x9662, 0xEAC3, 0x9858, 0xEAC4, 0x9D1B, 0xEAC5, 0x6708, 0xEAC6, 0x8D8A, 0xEAC7, 0x925E, 0xEAC8, 0x4F4D, + 0xEAC9, 0x5049, 0xEACA, 0x50DE, 0xEACB, 0x5371, 0xEACC, 0x570D, 0xEACD, 0x59D4, 0xEACE, 0x5A01, 0xEACF, 0x5C09, 0xEAD0, 0x6170, + 0xEAD1, 0x6690, 0xEAD2, 0x6E2D, 0xEAD3, 0x7232, 0xEAD4, 0x744B, 0xEAD5, 0x7DEF, 0xEAD6, 0x80C3, 0xEAD7, 0x840E, 0xEAD8, 0x8466, + 0xEAD9, 0x853F, 0xEADA, 0x875F, 0xEADB, 0x885B, 0xEADC, 0x8918, 0xEADD, 0x8B02, 0xEADE, 0x9055, 0xEADF, 0x97CB, 0xEAE0, 0x9B4F, + 0xEAE1, 0x4E73, 0xEAE2, 0x4F91, 0xEAE3, 0x5112, 0xEAE4, 0x516A, 0xEAE5, 0xF9C7, 0xEAE6, 0x552F, 0xEAE7, 0x55A9, 0xEAE8, 0x5B7A, + 0xEAE9, 0x5BA5, 0xEAEA, 0x5E7C, 0xEAEB, 0x5E7D, 0xEAEC, 0x5EBE, 0xEAED, 0x60A0, 0xEAEE, 0x60DF, 0xEAEF, 0x6108, 0xEAF0, 0x6109, + 0xEAF1, 0x63C4, 0xEAF2, 0x6538, 0xEAF3, 0x6709, 0xEAF4, 0xF9C8, 0xEAF5, 0x67D4, 0xEAF6, 0x67DA, 0xEAF7, 0xF9C9, 0xEAF8, 0x6961, + 0xEAF9, 0x6962, 0xEAFA, 0x6CB9, 0xEAFB, 0x6D27, 0xEAFC, 0xF9CA, 0xEAFD, 0x6E38, 0xEAFE, 0xF9CB, 0xEBA1, 0x6FE1, 0xEBA2, 0x7336, + 0xEBA3, 0x7337, 0xEBA4, 0xF9CC, 0xEBA5, 0x745C, 0xEBA6, 0x7531, 0xEBA7, 0xF9CD, 0xEBA8, 0x7652, 0xEBA9, 0xF9CE, 0xEBAA, 0xF9CF, + 0xEBAB, 0x7DAD, 0xEBAC, 0x81FE, 0xEBAD, 0x8438, 0xEBAE, 0x88D5, 0xEBAF, 0x8A98, 0xEBB0, 0x8ADB, 0xEBB1, 0x8AED, 0xEBB2, 0x8E30, + 0xEBB3, 0x8E42, 0xEBB4, 0x904A, 0xEBB5, 0x903E, 0xEBB6, 0x907A, 0xEBB7, 0x9149, 0xEBB8, 0x91C9, 0xEBB9, 0x936E, 0xEBBA, 0xF9D0, + 0xEBBB, 0xF9D1, 0xEBBC, 0x5809, 0xEBBD, 0xF9D2, 0xEBBE, 0x6BD3, 0xEBBF, 0x8089, 0xEBC0, 0x80B2, 0xEBC1, 0xF9D3, 0xEBC2, 0xF9D4, + 0xEBC3, 0x5141, 0xEBC4, 0x596B, 0xEBC5, 0x5C39, 0xEBC6, 0xF9D5, 0xEBC7, 0xF9D6, 0xEBC8, 0x6F64, 0xEBC9, 0x73A7, 0xEBCA, 0x80E4, + 0xEBCB, 0x8D07, 0xEBCC, 0xF9D7, 0xEBCD, 0x9217, 0xEBCE, 0x958F, 0xEBCF, 0xF9D8, 0xEBD0, 0xF9D9, 0xEBD1, 0xF9DA, 0xEBD2, 0xF9DB, + 0xEBD3, 0x807F, 0xEBD4, 0x620E, 0xEBD5, 0x701C, 0xEBD6, 0x7D68, 0xEBD7, 0x878D, 0xEBD8, 0xF9DC, 0xEBD9, 0x57A0, 0xEBDA, 0x6069, + 0xEBDB, 0x6147, 0xEBDC, 0x6BB7, 0xEBDD, 0x8ABE, 0xEBDE, 0x9280, 0xEBDF, 0x96B1, 0xEBE0, 0x4E59, 0xEBE1, 0x541F, 0xEBE2, 0x6DEB, + 0xEBE3, 0x852D, 0xEBE4, 0x9670, 0xEBE5, 0x97F3, 0xEBE6, 0x98EE, 0xEBE7, 0x63D6, 0xEBE8, 0x6CE3, 0xEBE9, 0x9091, 0xEBEA, 0x51DD, + 0xEBEB, 0x61C9, 0xEBEC, 0x81BA, 0xEBED, 0x9DF9, 0xEBEE, 0x4F9D, 0xEBEF, 0x501A, 0xEBF0, 0x5100, 0xEBF1, 0x5B9C, 0xEBF2, 0x610F, + 0xEBF3, 0x61FF, 0xEBF4, 0x64EC, 0xEBF5, 0x6905, 0xEBF6, 0x6BC5, 0xEBF7, 0x7591, 0xEBF8, 0x77E3, 0xEBF9, 0x7FA9, 0xEBFA, 0x8264, + 0xEBFB, 0x858F, 0xEBFC, 0x87FB, 0xEBFD, 0x8863, 0xEBFE, 0x8ABC, 0xECA1, 0x8B70, 0xECA2, 0x91AB, 0xECA3, 0x4E8C, 0xECA4, 0x4EE5, + 0xECA5, 0x4F0A, 0xECA6, 0xF9DD, 0xECA7, 0xF9DE, 0xECA8, 0x5937, 0xECA9, 0x59E8, 0xECAA, 0xF9DF, 0xECAB, 0x5DF2, 0xECAC, 0x5F1B, + 0xECAD, 0x5F5B, 0xECAE, 0x6021, 0xECAF, 0xF9E0, 0xECB0, 0xF9E1, 0xECB1, 0xF9E2, 0xECB2, 0xF9E3, 0xECB3, 0x723E, 0xECB4, 0x73E5, + 0xECB5, 0xF9E4, 0xECB6, 0x7570, 0xECB7, 0x75CD, 0xECB8, 0xF9E5, 0xECB9, 0x79FB, 0xECBA, 0xF9E6, 0xECBB, 0x800C, 0xECBC, 0x8033, + 0xECBD, 0x8084, 0xECBE, 0x82E1, 0xECBF, 0x8351, 0xECC0, 0xF9E7, 0xECC1, 0xF9E8, 0xECC2, 0x8CBD, 0xECC3, 0x8CB3, 0xECC4, 0x9087, + 0xECC5, 0xF9E9, 0xECC6, 0xF9EA, 0xECC7, 0x98F4, 0xECC8, 0x990C, 0xECC9, 0xF9EB, 0xECCA, 0xF9EC, 0xECCB, 0x7037, 0xECCC, 0x76CA, + 0xECCD, 0x7FCA, 0xECCE, 0x7FCC, 0xECCF, 0x7FFC, 0xECD0, 0x8B1A, 0xECD1, 0x4EBA, 0xECD2, 0x4EC1, 0xECD3, 0x5203, 0xECD4, 0x5370, + 0xECD5, 0xF9ED, 0xECD6, 0x54BD, 0xECD7, 0x56E0, 0xECD8, 0x59FB, 0xECD9, 0x5BC5, 0xECDA, 0x5F15, 0xECDB, 0x5FCD, 0xECDC, 0x6E6E, + 0xECDD, 0xF9EE, 0xECDE, 0xF9EF, 0xECDF, 0x7D6A, 0xECE0, 0x8335, 0xECE1, 0xF9F0, 0xECE2, 0x8693, 0xECE3, 0x8A8D, 0xECE4, 0xF9F1, + 0xECE5, 0x976D, 0xECE6, 0x9777, 0xECE7, 0xF9F2, 0xECE8, 0xF9F3, 0xECE9, 0x4E00, 0xECEA, 0x4F5A, 0xECEB, 0x4F7E, 0xECEC, 0x58F9, + 0xECED, 0x65E5, 0xECEE, 0x6EA2, 0xECEF, 0x9038, 0xECF0, 0x93B0, 0xECF1, 0x99B9, 0xECF2, 0x4EFB, 0xECF3, 0x58EC, 0xECF4, 0x598A, + 0xECF5, 0x59D9, 0xECF6, 0x6041, 0xECF7, 0xF9F4, 0xECF8, 0xF9F5, 0xECF9, 0x7A14, 0xECFA, 0xF9F6, 0xECFB, 0x834F, 0xECFC, 0x8CC3, + 0xECFD, 0x5165, 0xECFE, 0x5344, 0xEDA1, 0xF9F7, 0xEDA2, 0xF9F8, 0xEDA3, 0xF9F9, 0xEDA4, 0x4ECD, 0xEDA5, 0x5269, 0xEDA6, 0x5B55, + 0xEDA7, 0x82BF, 0xEDA8, 0x4ED4, 0xEDA9, 0x523A, 0xEDAA, 0x54A8, 0xEDAB, 0x59C9, 0xEDAC, 0x59FF, 0xEDAD, 0x5B50, 0xEDAE, 0x5B57, + 0xEDAF, 0x5B5C, 0xEDB0, 0x6063, 0xEDB1, 0x6148, 0xEDB2, 0x6ECB, 0xEDB3, 0x7099, 0xEDB4, 0x716E, 0xEDB5, 0x7386, 0xEDB6, 0x74F7, + 0xEDB7, 0x75B5, 0xEDB8, 0x78C1, 0xEDB9, 0x7D2B, 0xEDBA, 0x8005, 0xEDBB, 0x81EA, 0xEDBC, 0x8328, 0xEDBD, 0x8517, 0xEDBE, 0x85C9, + 0xEDBF, 0x8AEE, 0xEDC0, 0x8CC7, 0xEDC1, 0x96CC, 0xEDC2, 0x4F5C, 0xEDC3, 0x52FA, 0xEDC4, 0x56BC, 0xEDC5, 0x65AB, 0xEDC6, 0x6628, + 0xEDC7, 0x707C, 0xEDC8, 0x70B8, 0xEDC9, 0x7235, 0xEDCA, 0x7DBD, 0xEDCB, 0x828D, 0xEDCC, 0x914C, 0xEDCD, 0x96C0, 0xEDCE, 0x9D72, + 0xEDCF, 0x5B71, 0xEDD0, 0x68E7, 0xEDD1, 0x6B98, 0xEDD2, 0x6F7A, 0xEDD3, 0x76DE, 0xEDD4, 0x5C91, 0xEDD5, 0x66AB, 0xEDD6, 0x6F5B, + 0xEDD7, 0x7BB4, 0xEDD8, 0x7C2A, 0xEDD9, 0x8836, 0xEDDA, 0x96DC, 0xEDDB, 0x4E08, 0xEDDC, 0x4ED7, 0xEDDD, 0x5320, 0xEDDE, 0x5834, + 0xEDDF, 0x58BB, 0xEDE0, 0x58EF, 0xEDE1, 0x596C, 0xEDE2, 0x5C07, 0xEDE3, 0x5E33, 0xEDE4, 0x5E84, 0xEDE5, 0x5F35, 0xEDE6, 0x638C, + 0xEDE7, 0x66B2, 0xEDE8, 0x6756, 0xEDE9, 0x6A1F, 0xEDEA, 0x6AA3, 0xEDEB, 0x6B0C, 0xEDEC, 0x6F3F, 0xEDED, 0x7246, 0xEDEE, 0xF9FA, + 0xEDEF, 0x7350, 0xEDF0, 0x748B, 0xEDF1, 0x7AE0, 0xEDF2, 0x7CA7, 0xEDF3, 0x8178, 0xEDF4, 0x81DF, 0xEDF5, 0x81E7, 0xEDF6, 0x838A, + 0xEDF7, 0x846C, 0xEDF8, 0x8523, 0xEDF9, 0x8594, 0xEDFA, 0x85CF, 0xEDFB, 0x88DD, 0xEDFC, 0x8D13, 0xEDFD, 0x91AC, 0xEDFE, 0x9577, + 0xEEA1, 0x969C, 0xEEA2, 0x518D, 0xEEA3, 0x54C9, 0xEEA4, 0x5728, 0xEEA5, 0x5BB0, 0xEEA6, 0x624D, 0xEEA7, 0x6750, 0xEEA8, 0x683D, + 0xEEA9, 0x6893, 0xEEAA, 0x6E3D, 0xEEAB, 0x6ED3, 0xEEAC, 0x707D, 0xEEAD, 0x7E21, 0xEEAE, 0x88C1, 0xEEAF, 0x8CA1, 0xEEB0, 0x8F09, + 0xEEB1, 0x9F4B, 0xEEB2, 0x9F4E, 0xEEB3, 0x722D, 0xEEB4, 0x7B8F, 0xEEB5, 0x8ACD, 0xEEB6, 0x931A, 0xEEB7, 0x4F47, 0xEEB8, 0x4F4E, + 0xEEB9, 0x5132, 0xEEBA, 0x5480, 0xEEBB, 0x59D0, 0xEEBC, 0x5E95, 0xEEBD, 0x62B5, 0xEEBE, 0x6775, 0xEEBF, 0x696E, 0xEEC0, 0x6A17, + 0xEEC1, 0x6CAE, 0xEEC2, 0x6E1A, 0xEEC3, 0x72D9, 0xEEC4, 0x732A, 0xEEC5, 0x75BD, 0xEEC6, 0x7BB8, 0xEEC7, 0x7D35, 0xEEC8, 0x82E7, + 0xEEC9, 0x83F9, 0xEECA, 0x8457, 0xEECB, 0x85F7, 0xEECC, 0x8A5B, 0xEECD, 0x8CAF, 0xEECE, 0x8E87, 0xEECF, 0x9019, 0xEED0, 0x90B8, + 0xEED1, 0x96CE, 0xEED2, 0x9F5F, 0xEED3, 0x52E3, 0xEED4, 0x540A, 0xEED5, 0x5AE1, 0xEED6, 0x5BC2, 0xEED7, 0x6458, 0xEED8, 0x6575, + 0xEED9, 0x6EF4, 0xEEDA, 0x72C4, 0xEEDB, 0xF9FB, 0xEEDC, 0x7684, 0xEEDD, 0x7A4D, 0xEEDE, 0x7B1B, 0xEEDF, 0x7C4D, 0xEEE0, 0x7E3E, + 0xEEE1, 0x7FDF, 0xEEE2, 0x837B, 0xEEE3, 0x8B2B, 0xEEE4, 0x8CCA, 0xEEE5, 0x8D64, 0xEEE6, 0x8DE1, 0xEEE7, 0x8E5F, 0xEEE8, 0x8FEA, + 0xEEE9, 0x8FF9, 0xEEEA, 0x9069, 0xEEEB, 0x93D1, 0xEEEC, 0x4F43, 0xEEED, 0x4F7A, 0xEEEE, 0x50B3, 0xEEEF, 0x5168, 0xEEF0, 0x5178, + 0xEEF1, 0x524D, 0xEEF2, 0x526A, 0xEEF3, 0x5861, 0xEEF4, 0x587C, 0xEEF5, 0x5960, 0xEEF6, 0x5C08, 0xEEF7, 0x5C55, 0xEEF8, 0x5EDB, + 0xEEF9, 0x609B, 0xEEFA, 0x6230, 0xEEFB, 0x6813, 0xEEFC, 0x6BBF, 0xEEFD, 0x6C08, 0xEEFE, 0x6FB1, 0xEFA1, 0x714E, 0xEFA2, 0x7420, + 0xEFA3, 0x7530, 0xEFA4, 0x7538, 0xEFA5, 0x7551, 0xEFA6, 0x7672, 0xEFA7, 0x7B4C, 0xEFA8, 0x7B8B, 0xEFA9, 0x7BAD, 0xEFAA, 0x7BC6, + 0xEFAB, 0x7E8F, 0xEFAC, 0x8A6E, 0xEFAD, 0x8F3E, 0xEFAE, 0x8F49, 0xEFAF, 0x923F, 0xEFB0, 0x9293, 0xEFB1, 0x9322, 0xEFB2, 0x942B, + 0xEFB3, 0x96FB, 0xEFB4, 0x985A, 0xEFB5, 0x986B, 0xEFB6, 0x991E, 0xEFB7, 0x5207, 0xEFB8, 0x622A, 0xEFB9, 0x6298, 0xEFBA, 0x6D59, + 0xEFBB, 0x7664, 0xEFBC, 0x7ACA, 0xEFBD, 0x7BC0, 0xEFBE, 0x7D76, 0xEFBF, 0x5360, 0xEFC0, 0x5CBE, 0xEFC1, 0x5E97, 0xEFC2, 0x6F38, + 0xEFC3, 0x70B9, 0xEFC4, 0x7C98, 0xEFC5, 0x9711, 0xEFC6, 0x9B8E, 0xEFC7, 0x9EDE, 0xEFC8, 0x63A5, 0xEFC9, 0x647A, 0xEFCA, 0x8776, + 0xEFCB, 0x4E01, 0xEFCC, 0x4E95, 0xEFCD, 0x4EAD, 0xEFCE, 0x505C, 0xEFCF, 0x5075, 0xEFD0, 0x5448, 0xEFD1, 0x59C3, 0xEFD2, 0x5B9A, + 0xEFD3, 0x5E40, 0xEFD4, 0x5EAD, 0xEFD5, 0x5EF7, 0xEFD6, 0x5F81, 0xEFD7, 0x60C5, 0xEFD8, 0x633A, 0xEFD9, 0x653F, 0xEFDA, 0x6574, + 0xEFDB, 0x65CC, 0xEFDC, 0x6676, 0xEFDD, 0x6678, 0xEFDE, 0x67FE, 0xEFDF, 0x6968, 0xEFE0, 0x6A89, 0xEFE1, 0x6B63, 0xEFE2, 0x6C40, + 0xEFE3, 0x6DC0, 0xEFE4, 0x6DE8, 0xEFE5, 0x6E1F, 0xEFE6, 0x6E5E, 0xEFE7, 0x701E, 0xEFE8, 0x70A1, 0xEFE9, 0x738E, 0xEFEA, 0x73FD, + 0xEFEB, 0x753A, 0xEFEC, 0x775B, 0xEFED, 0x7887, 0xEFEE, 0x798E, 0xEFEF, 0x7A0B, 0xEFF0, 0x7A7D, 0xEFF1, 0x7CBE, 0xEFF2, 0x7D8E, + 0xEFF3, 0x8247, 0xEFF4, 0x8A02, 0xEFF5, 0x8AEA, 0xEFF6, 0x8C9E, 0xEFF7, 0x912D, 0xEFF8, 0x914A, 0xEFF9, 0x91D8, 0xEFFA, 0x9266, + 0xEFFB, 0x92CC, 0xEFFC, 0x9320, 0xEFFD, 0x9706, 0xEFFE, 0x9756, 0xF0A1, 0x975C, 0xF0A2, 0x9802, 0xF0A3, 0x9F0E, 0xF0A4, 0x5236, + 0xF0A5, 0x5291, 0xF0A6, 0x557C, 0xF0A7, 0x5824, 0xF0A8, 0x5E1D, 0xF0A9, 0x5F1F, 0xF0AA, 0x608C, 0xF0AB, 0x63D0, 0xF0AC, 0x68AF, + 0xF0AD, 0x6FDF, 0xF0AE, 0x796D, 0xF0AF, 0x7B2C, 0xF0B0, 0x81CD, 0xF0B1, 0x85BA, 0xF0B2, 0x88FD, 0xF0B3, 0x8AF8, 0xF0B4, 0x8E44, + 0xF0B5, 0x918D, 0xF0B6, 0x9664, 0xF0B7, 0x969B, 0xF0B8, 0x973D, 0xF0B9, 0x984C, 0xF0BA, 0x9F4A, 0xF0BB, 0x4FCE, 0xF0BC, 0x5146, + 0xF0BD, 0x51CB, 0xF0BE, 0x52A9, 0xF0BF, 0x5632, 0xF0C0, 0x5F14, 0xF0C1, 0x5F6B, 0xF0C2, 0x63AA, 0xF0C3, 0x64CD, 0xF0C4, 0x65E9, + 0xF0C5, 0x6641, 0xF0C6, 0x66FA, 0xF0C7, 0x66F9, 0xF0C8, 0x671D, 0xF0C9, 0x689D, 0xF0CA, 0x68D7, 0xF0CB, 0x69FD, 0xF0CC, 0x6F15, + 0xF0CD, 0x6F6E, 0xF0CE, 0x7167, 0xF0CF, 0x71E5, 0xF0D0, 0x722A, 0xF0D1, 0x74AA, 0xF0D2, 0x773A, 0xF0D3, 0x7956, 0xF0D4, 0x795A, + 0xF0D5, 0x79DF, 0xF0D6, 0x7A20, 0xF0D7, 0x7A95, 0xF0D8, 0x7C97, 0xF0D9, 0x7CDF, 0xF0DA, 0x7D44, 0xF0DB, 0x7E70, 0xF0DC, 0x8087, + 0xF0DD, 0x85FB, 0xF0DE, 0x86A4, 0xF0DF, 0x8A54, 0xF0E0, 0x8ABF, 0xF0E1, 0x8D99, 0xF0E2, 0x8E81, 0xF0E3, 0x9020, 0xF0E4, 0x906D, + 0xF0E5, 0x91E3, 0xF0E6, 0x963B, 0xF0E7, 0x96D5, 0xF0E8, 0x9CE5, 0xF0E9, 0x65CF, 0xF0EA, 0x7C07, 0xF0EB, 0x8DB3, 0xF0EC, 0x93C3, + 0xF0ED, 0x5B58, 0xF0EE, 0x5C0A, 0xF0EF, 0x5352, 0xF0F0, 0x62D9, 0xF0F1, 0x731D, 0xF0F2, 0x5027, 0xF0F3, 0x5B97, 0xF0F4, 0x5F9E, + 0xF0F5, 0x60B0, 0xF0F6, 0x616B, 0xF0F7, 0x68D5, 0xF0F8, 0x6DD9, 0xF0F9, 0x742E, 0xF0FA, 0x7A2E, 0xF0FB, 0x7D42, 0xF0FC, 0x7D9C, + 0xF0FD, 0x7E31, 0xF0FE, 0x816B, 0xF1A1, 0x8E2A, 0xF1A2, 0x8E35, 0xF1A3, 0x937E, 0xF1A4, 0x9418, 0xF1A5, 0x4F50, 0xF1A6, 0x5750, + 0xF1A7, 0x5DE6, 0xF1A8, 0x5EA7, 0xF1A9, 0x632B, 0xF1AA, 0x7F6A, 0xF1AB, 0x4E3B, 0xF1AC, 0x4F4F, 0xF1AD, 0x4F8F, 0xF1AE, 0x505A, + 0xF1AF, 0x59DD, 0xF1B0, 0x80C4, 0xF1B1, 0x546A, 0xF1B2, 0x5468, 0xF1B3, 0x55FE, 0xF1B4, 0x594F, 0xF1B5, 0x5B99, 0xF1B6, 0x5DDE, + 0xF1B7, 0x5EDA, 0xF1B8, 0x665D, 0xF1B9, 0x6731, 0xF1BA, 0x67F1, 0xF1BB, 0x682A, 0xF1BC, 0x6CE8, 0xF1BD, 0x6D32, 0xF1BE, 0x6E4A, + 0xF1BF, 0x6F8D, 0xF1C0, 0x70B7, 0xF1C1, 0x73E0, 0xF1C2, 0x7587, 0xF1C3, 0x7C4C, 0xF1C4, 0x7D02, 0xF1C5, 0x7D2C, 0xF1C6, 0x7DA2, + 0xF1C7, 0x821F, 0xF1C8, 0x86DB, 0xF1C9, 0x8A3B, 0xF1CA, 0x8A85, 0xF1CB, 0x8D70, 0xF1CC, 0x8E8A, 0xF1CD, 0x8F33, 0xF1CE, 0x9031, + 0xF1CF, 0x914E, 0xF1D0, 0x9152, 0xF1D1, 0x9444, 0xF1D2, 0x99D0, 0xF1D3, 0x7AF9, 0xF1D4, 0x7CA5, 0xF1D5, 0x4FCA, 0xF1D6, 0x5101, + 0xF1D7, 0x51C6, 0xF1D8, 0x57C8, 0xF1D9, 0x5BEF, 0xF1DA, 0x5CFB, 0xF1DB, 0x6659, 0xF1DC, 0x6A3D, 0xF1DD, 0x6D5A, 0xF1DE, 0x6E96, + 0xF1DF, 0x6FEC, 0xF1E0, 0x710C, 0xF1E1, 0x756F, 0xF1E2, 0x7AE3, 0xF1E3, 0x8822, 0xF1E4, 0x9021, 0xF1E5, 0x9075, 0xF1E6, 0x96CB, + 0xF1E7, 0x99FF, 0xF1E8, 0x8301, 0xF1E9, 0x4E2D, 0xF1EA, 0x4EF2, 0xF1EB, 0x8846, 0xF1EC, 0x91CD, 0xF1ED, 0x537D, 0xF1EE, 0x6ADB, + 0xF1EF, 0x696B, 0xF1F0, 0x6C41, 0xF1F1, 0x847A, 0xF1F2, 0x589E, 0xF1F3, 0x618E, 0xF1F4, 0x66FE, 0xF1F5, 0x62EF, 0xF1F6, 0x70DD, + 0xF1F7, 0x7511, 0xF1F8, 0x75C7, 0xF1F9, 0x7E52, 0xF1FA, 0x84B8, 0xF1FB, 0x8B49, 0xF1FC, 0x8D08, 0xF1FD, 0x4E4B, 0xF1FE, 0x53EA, + 0xF2A1, 0x54AB, 0xF2A2, 0x5730, 0xF2A3, 0x5740, 0xF2A4, 0x5FD7, 0xF2A5, 0x6301, 0xF2A6, 0x6307, 0xF2A7, 0x646F, 0xF2A8, 0x652F, + 0xF2A9, 0x65E8, 0xF2AA, 0x667A, 0xF2AB, 0x679D, 0xF2AC, 0x67B3, 0xF2AD, 0x6B62, 0xF2AE, 0x6C60, 0xF2AF, 0x6C9A, 0xF2B0, 0x6F2C, + 0xF2B1, 0x77E5, 0xF2B2, 0x7825, 0xF2B3, 0x7949, 0xF2B4, 0x7957, 0xF2B5, 0x7D19, 0xF2B6, 0x80A2, 0xF2B7, 0x8102, 0xF2B8, 0x81F3, + 0xF2B9, 0x829D, 0xF2BA, 0x82B7, 0xF2BB, 0x8718, 0xF2BC, 0x8A8C, 0xF2BD, 0xF9FC, 0xF2BE, 0x8D04, 0xF2BF, 0x8DBE, 0xF2C0, 0x9072, + 0xF2C1, 0x76F4, 0xF2C2, 0x7A19, 0xF2C3, 0x7A37, 0xF2C4, 0x7E54, 0xF2C5, 0x8077, 0xF2C6, 0x5507, 0xF2C7, 0x55D4, 0xF2C8, 0x5875, + 0xF2C9, 0x632F, 0xF2CA, 0x6422, 0xF2CB, 0x6649, 0xF2CC, 0x664B, 0xF2CD, 0x686D, 0xF2CE, 0x699B, 0xF2CF, 0x6B84, 0xF2D0, 0x6D25, + 0xF2D1, 0x6EB1, 0xF2D2, 0x73CD, 0xF2D3, 0x7468, 0xF2D4, 0x74A1, 0xF2D5, 0x755B, 0xF2D6, 0x75B9, 0xF2D7, 0x76E1, 0xF2D8, 0x771E, + 0xF2D9, 0x778B, 0xF2DA, 0x79E6, 0xF2DB, 0x7E09, 0xF2DC, 0x7E1D, 0xF2DD, 0x81FB, 0xF2DE, 0x852F, 0xF2DF, 0x8897, 0xF2E0, 0x8A3A, + 0xF2E1, 0x8CD1, 0xF2E2, 0x8EEB, 0xF2E3, 0x8FB0, 0xF2E4, 0x9032, 0xF2E5, 0x93AD, 0xF2E6, 0x9663, 0xF2E7, 0x9673, 0xF2E8, 0x9707, + 0xF2E9, 0x4F84, 0xF2EA, 0x53F1, 0xF2EB, 0x59EA, 0xF2EC, 0x5AC9, 0xF2ED, 0x5E19, 0xF2EE, 0x684E, 0xF2EF, 0x74C6, 0xF2F0, 0x75BE, + 0xF2F1, 0x79E9, 0xF2F2, 0x7A92, 0xF2F3, 0x81A3, 0xF2F4, 0x86ED, 0xF2F5, 0x8CEA, 0xF2F6, 0x8DCC, 0xF2F7, 0x8FED, 0xF2F8, 0x659F, + 0xF2F9, 0x6715, 0xF2FA, 0xF9FD, 0xF2FB, 0x57F7, 0xF2FC, 0x6F57, 0xF2FD, 0x7DDD, 0xF2FE, 0x8F2F, 0xF3A1, 0x93F6, 0xF3A2, 0x96C6, + 0xF3A3, 0x5FB5, 0xF3A4, 0x61F2, 0xF3A5, 0x6F84, 0xF3A6, 0x4E14, 0xF3A7, 0x4F98, 0xF3A8, 0x501F, 0xF3A9, 0x53C9, 0xF3AA, 0x55DF, + 0xF3AB, 0x5D6F, 0xF3AC, 0x5DEE, 0xF3AD, 0x6B21, 0xF3AE, 0x6B64, 0xF3AF, 0x78CB, 0xF3B0, 0x7B9A, 0xF3B1, 0xF9FE, 0xF3B2, 0x8E49, + 0xF3B3, 0x8ECA, 0xF3B4, 0x906E, 0xF3B5, 0x6349, 0xF3B6, 0x643E, 0xF3B7, 0x7740, 0xF3B8, 0x7A84, 0xF3B9, 0x932F, 0xF3BA, 0x947F, + 0xF3BB, 0x9F6A, 0xF3BC, 0x64B0, 0xF3BD, 0x6FAF, 0xF3BE, 0x71E6, 0xF3BF, 0x74A8, 0xF3C0, 0x74DA, 0xF3C1, 0x7AC4, 0xF3C2, 0x7C12, + 0xF3C3, 0x7E82, 0xF3C4, 0x7CB2, 0xF3C5, 0x7E98, 0xF3C6, 0x8B9A, 0xF3C7, 0x8D0A, 0xF3C8, 0x947D, 0xF3C9, 0x9910, 0xF3CA, 0x994C, + 0xF3CB, 0x5239, 0xF3CC, 0x5BDF, 0xF3CD, 0x64E6, 0xF3CE, 0x672D, 0xF3CF, 0x7D2E, 0xF3D0, 0x50ED, 0xF3D1, 0x53C3, 0xF3D2, 0x5879, + 0xF3D3, 0x6158, 0xF3D4, 0x6159, 0xF3D5, 0x61FA, 0xF3D6, 0x65AC, 0xF3D7, 0x7AD9, 0xF3D8, 0x8B92, 0xF3D9, 0x8B96, 0xF3DA, 0x5009, + 0xF3DB, 0x5021, 0xF3DC, 0x5275, 0xF3DD, 0x5531, 0xF3DE, 0x5A3C, 0xF3DF, 0x5EE0, 0xF3E0, 0x5F70, 0xF3E1, 0x6134, 0xF3E2, 0x655E, + 0xF3E3, 0x660C, 0xF3E4, 0x6636, 0xF3E5, 0x66A2, 0xF3E6, 0x69CD, 0xF3E7, 0x6EC4, 0xF3E8, 0x6F32, 0xF3E9, 0x7316, 0xF3EA, 0x7621, + 0xF3EB, 0x7A93, 0xF3EC, 0x8139, 0xF3ED, 0x8259, 0xF3EE, 0x83D6, 0xF3EF, 0x84BC, 0xF3F0, 0x50B5, 0xF3F1, 0x57F0, 0xF3F2, 0x5BC0, + 0xF3F3, 0x5BE8, 0xF3F4, 0x5F69, 0xF3F5, 0x63A1, 0xF3F6, 0x7826, 0xF3F7, 0x7DB5, 0xF3F8, 0x83DC, 0xF3F9, 0x8521, 0xF3FA, 0x91C7, + 0xF3FB, 0x91F5, 0xF3FC, 0x518A, 0xF3FD, 0x67F5, 0xF3FE, 0x7B56, 0xF4A1, 0x8CAC, 0xF4A2, 0x51C4, 0xF4A3, 0x59BB, 0xF4A4, 0x60BD, + 0xF4A5, 0x8655, 0xF4A6, 0x501C, 0xF4A7, 0xF9FF, 0xF4A8, 0x5254, 0xF4A9, 0x5C3A, 0xF4AA, 0x617D, 0xF4AB, 0x621A, 0xF4AC, 0x62D3, + 0xF4AD, 0x64F2, 0xF4AE, 0x65A5, 0xF4AF, 0x6ECC, 0xF4B0, 0x7620, 0xF4B1, 0x810A, 0xF4B2, 0x8E60, 0xF4B3, 0x965F, 0xF4B4, 0x96BB, + 0xF4B5, 0x4EDF, 0xF4B6, 0x5343, 0xF4B7, 0x5598, 0xF4B8, 0x5929, 0xF4B9, 0x5DDD, 0xF4BA, 0x64C5, 0xF4BB, 0x6CC9, 0xF4BC, 0x6DFA, + 0xF4BD, 0x7394, 0xF4BE, 0x7A7F, 0xF4BF, 0x821B, 0xF4C0, 0x85A6, 0xF4C1, 0x8CE4, 0xF4C2, 0x8E10, 0xF4C3, 0x9077, 0xF4C4, 0x91E7, + 0xF4C5, 0x95E1, 0xF4C6, 0x9621, 0xF4C7, 0x97C6, 0xF4C8, 0x51F8, 0xF4C9, 0x54F2, 0xF4CA, 0x5586, 0xF4CB, 0x5FB9, 0xF4CC, 0x64A4, + 0xF4CD, 0x6F88, 0xF4CE, 0x7DB4, 0xF4CF, 0x8F1F, 0xF4D0, 0x8F4D, 0xF4D1, 0x9435, 0xF4D2, 0x50C9, 0xF4D3, 0x5C16, 0xF4D4, 0x6CBE, + 0xF4D5, 0x6DFB, 0xF4D6, 0x751B, 0xF4D7, 0x77BB, 0xF4D8, 0x7C3D, 0xF4D9, 0x7C64, 0xF4DA, 0x8A79, 0xF4DB, 0x8AC2, 0xF4DC, 0x581E, + 0xF4DD, 0x59BE, 0xF4DE, 0x5E16, 0xF4DF, 0x6377, 0xF4E0, 0x7252, 0xF4E1, 0x758A, 0xF4E2, 0x776B, 0xF4E3, 0x8ADC, 0xF4E4, 0x8CBC, + 0xF4E5, 0x8F12, 0xF4E6, 0x5EF3, 0xF4E7, 0x6674, 0xF4E8, 0x6DF8, 0xF4E9, 0x807D, 0xF4EA, 0x83C1, 0xF4EB, 0x8ACB, 0xF4EC, 0x9751, + 0xF4ED, 0x9BD6, 0xF4EE, 0xFA00, 0xF4EF, 0x5243, 0xF4F0, 0x66FF, 0xF4F1, 0x6D95, 0xF4F2, 0x6EEF, 0xF4F3, 0x7DE0, 0xF4F4, 0x8AE6, + 0xF4F5, 0x902E, 0xF4F6, 0x905E, 0xF4F7, 0x9AD4, 0xF4F8, 0x521D, 0xF4F9, 0x527F, 0xF4FA, 0x54E8, 0xF4FB, 0x6194, 0xF4FC, 0x6284, + 0xF4FD, 0x62DB, 0xF4FE, 0x68A2, 0xF5A1, 0x6912, 0xF5A2, 0x695A, 0xF5A3, 0x6A35, 0xF5A4, 0x7092, 0xF5A5, 0x7126, 0xF5A6, 0x785D, + 0xF5A7, 0x7901, 0xF5A8, 0x790E, 0xF5A9, 0x79D2, 0xF5AA, 0x7A0D, 0xF5AB, 0x8096, 0xF5AC, 0x8278, 0xF5AD, 0x82D5, 0xF5AE, 0x8349, + 0xF5AF, 0x8549, 0xF5B0, 0x8C82, 0xF5B1, 0x8D85, 0xF5B2, 0x9162, 0xF5B3, 0x918B, 0xF5B4, 0x91AE, 0xF5B5, 0x4FC3, 0xF5B6, 0x56D1, + 0xF5B7, 0x71ED, 0xF5B8, 0x77D7, 0xF5B9, 0x8700, 0xF5BA, 0x89F8, 0xF5BB, 0x5BF8, 0xF5BC, 0x5FD6, 0xF5BD, 0x6751, 0xF5BE, 0x90A8, + 0xF5BF, 0x53E2, 0xF5C0, 0x585A, 0xF5C1, 0x5BF5, 0xF5C2, 0x60A4, 0xF5C3, 0x6181, 0xF5C4, 0x6460, 0xF5C5, 0x7E3D, 0xF5C6, 0x8070, + 0xF5C7, 0x8525, 0xF5C8, 0x9283, 0xF5C9, 0x64AE, 0xF5CA, 0x50AC, 0xF5CB, 0x5D14, 0xF5CC, 0x6700, 0xF5CD, 0x589C, 0xF5CE, 0x62BD, + 0xF5CF, 0x63A8, 0xF5D0, 0x690E, 0xF5D1, 0x6978, 0xF5D2, 0x6A1E, 0xF5D3, 0x6E6B, 0xF5D4, 0x76BA, 0xF5D5, 0x79CB, 0xF5D6, 0x82BB, + 0xF5D7, 0x8429, 0xF5D8, 0x8ACF, 0xF5D9, 0x8DA8, 0xF5DA, 0x8FFD, 0xF5DB, 0x9112, 0xF5DC, 0x914B, 0xF5DD, 0x919C, 0xF5DE, 0x9310, + 0xF5DF, 0x9318, 0xF5E0, 0x939A, 0xF5E1, 0x96DB, 0xF5E2, 0x9A36, 0xF5E3, 0x9C0D, 0xF5E4, 0x4E11, 0xF5E5, 0x755C, 0xF5E6, 0x795D, + 0xF5E7, 0x7AFA, 0xF5E8, 0x7B51, 0xF5E9, 0x7BC9, 0xF5EA, 0x7E2E, 0xF5EB, 0x84C4, 0xF5EC, 0x8E59, 0xF5ED, 0x8E74, 0xF5EE, 0x8EF8, + 0xF5EF, 0x9010, 0xF5F0, 0x6625, 0xF5F1, 0x693F, 0xF5F2, 0x7443, 0xF5F3, 0x51FA, 0xF5F4, 0x672E, 0xF5F5, 0x9EDC, 0xF5F6, 0x5145, + 0xF5F7, 0x5FE0, 0xF5F8, 0x6C96, 0xF5F9, 0x87F2, 0xF5FA, 0x885D, 0xF5FB, 0x8877, 0xF5FC, 0x60B4, 0xF5FD, 0x81B5, 0xF5FE, 0x8403, + 0xF6A1, 0x8D05, 0xF6A2, 0x53D6, 0xF6A3, 0x5439, 0xF6A4, 0x5634, 0xF6A5, 0x5A36, 0xF6A6, 0x5C31, 0xF6A7, 0x708A, 0xF6A8, 0x7FE0, + 0xF6A9, 0x805A, 0xF6AA, 0x8106, 0xF6AB, 0x81ED, 0xF6AC, 0x8DA3, 0xF6AD, 0x9189, 0xF6AE, 0x9A5F, 0xF6AF, 0x9DF2, 0xF6B0, 0x5074, + 0xF6B1, 0x4EC4, 0xF6B2, 0x53A0, 0xF6B3, 0x60FB, 0xF6B4, 0x6E2C, 0xF6B5, 0x5C64, 0xF6B6, 0x4F88, 0xF6B7, 0x5024, 0xF6B8, 0x55E4, + 0xF6B9, 0x5CD9, 0xF6BA, 0x5E5F, 0xF6BB, 0x6065, 0xF6BC, 0x6894, 0xF6BD, 0x6CBB, 0xF6BE, 0x6DC4, 0xF6BF, 0x71BE, 0xF6C0, 0x75D4, + 0xF6C1, 0x75F4, 0xF6C2, 0x7661, 0xF6C3, 0x7A1A, 0xF6C4, 0x7A49, 0xF6C5, 0x7DC7, 0xF6C6, 0x7DFB, 0xF6C7, 0x7F6E, 0xF6C8, 0x81F4, + 0xF6C9, 0x86A9, 0xF6CA, 0x8F1C, 0xF6CB, 0x96C9, 0xF6CC, 0x99B3, 0xF6CD, 0x9F52, 0xF6CE, 0x5247, 0xF6CF, 0x52C5, 0xF6D0, 0x98ED, + 0xF6D1, 0x89AA, 0xF6D2, 0x4E03, 0xF6D3, 0x67D2, 0xF6D4, 0x6F06, 0xF6D5, 0x4FB5, 0xF6D6, 0x5BE2, 0xF6D7, 0x6795, 0xF6D8, 0x6C88, + 0xF6D9, 0x6D78, 0xF6DA, 0x741B, 0xF6DB, 0x7827, 0xF6DC, 0x91DD, 0xF6DD, 0x937C, 0xF6DE, 0x87C4, 0xF6DF, 0x79E4, 0xF6E0, 0x7A31, + 0xF6E1, 0x5FEB, 0xF6E2, 0x4ED6, 0xF6E3, 0x54A4, 0xF6E4, 0x553E, 0xF6E5, 0x58AE, 0xF6E6, 0x59A5, 0xF6E7, 0x60F0, 0xF6E8, 0x6253, + 0xF6E9, 0x62D6, 0xF6EA, 0x6736, 0xF6EB, 0x6955, 0xF6EC, 0x8235, 0xF6ED, 0x9640, 0xF6EE, 0x99B1, 0xF6EF, 0x99DD, 0xF6F0, 0x502C, + 0xF6F1, 0x5353, 0xF6F2, 0x5544, 0xF6F3, 0x577C, 0xF6F4, 0xFA01, 0xF6F5, 0x6258, 0xF6F6, 0xFA02, 0xF6F7, 0x64E2, 0xF6F8, 0x666B, + 0xF6F9, 0x67DD, 0xF6FA, 0x6FC1, 0xF6FB, 0x6FEF, 0xF6FC, 0x7422, 0xF6FD, 0x7438, 0xF6FE, 0x8A17, 0xF7A1, 0x9438, 0xF7A2, 0x5451, + 0xF7A3, 0x5606, 0xF7A4, 0x5766, 0xF7A5, 0x5F48, 0xF7A6, 0x619A, 0xF7A7, 0x6B4E, 0xF7A8, 0x7058, 0xF7A9, 0x70AD, 0xF7AA, 0x7DBB, + 0xF7AB, 0x8A95, 0xF7AC, 0x596A, 0xF7AD, 0x812B, 0xF7AE, 0x63A2, 0xF7AF, 0x7708, 0xF7B0, 0x803D, 0xF7B1, 0x8CAA, 0xF7B2, 0x5854, + 0xF7B3, 0x642D, 0xF7B4, 0x69BB, 0xF7B5, 0x5B95, 0xF7B6, 0x5E11, 0xF7B7, 0x6E6F, 0xF7B8, 0xFA03, 0xF7B9, 0x8569, 0xF7BA, 0x514C, + 0xF7BB, 0x53F0, 0xF7BC, 0x592A, 0xF7BD, 0x6020, 0xF7BE, 0x614B, 0xF7BF, 0x6B86, 0xF7C0, 0x6C70, 0xF7C1, 0x6CF0, 0xF7C2, 0x7B1E, + 0xF7C3, 0x80CE, 0xF7C4, 0x82D4, 0xF7C5, 0x8DC6, 0xF7C6, 0x90B0, 0xF7C7, 0x98B1, 0xF7C8, 0xFA04, 0xF7C9, 0x64C7, 0xF7CA, 0x6FA4, + 0xF7CB, 0x6491, 0xF7CC, 0x6504, 0xF7CD, 0x514E, 0xF7CE, 0x5410, 0xF7CF, 0x571F, 0xF7D0, 0x8A0E, 0xF7D1, 0x615F, 0xF7D2, 0x6876, + 0xF7D3, 0xFA05, 0xF7D4, 0x75DB, 0xF7D5, 0x7B52, 0xF7D6, 0x7D71, 0xF7D7, 0x901A, 0xF7D8, 0x5806, 0xF7D9, 0x69CC, 0xF7DA, 0x817F, + 0xF7DB, 0x892A, 0xF7DC, 0x9000, 0xF7DD, 0x9839, 0xF7DE, 0x5078, 0xF7DF, 0x5957, 0xF7E0, 0x59AC, 0xF7E1, 0x6295, 0xF7E2, 0x900F, + 0xF7E3, 0x9B2A, 0xF7E4, 0x615D, 0xF7E5, 0x7279, 0xF7E6, 0x95D6, 0xF7E7, 0x5761, 0xF7E8, 0x5A46, 0xF7E9, 0x5DF4, 0xF7EA, 0x628A, + 0xF7EB, 0x64AD, 0xF7EC, 0x64FA, 0xF7ED, 0x6777, 0xF7EE, 0x6CE2, 0xF7EF, 0x6D3E, 0xF7F0, 0x722C, 0xF7F1, 0x7436, 0xF7F2, 0x7834, + 0xF7F3, 0x7F77, 0xF7F4, 0x82AD, 0xF7F5, 0x8DDB, 0xF7F6, 0x9817, 0xF7F7, 0x5224, 0xF7F8, 0x5742, 0xF7F9, 0x677F, 0xF7FA, 0x7248, + 0xF7FB, 0x74E3, 0xF7FC, 0x8CA9, 0xF7FD, 0x8FA6, 0xF7FE, 0x9211, 0xF8A1, 0x962A, 0xF8A2, 0x516B, 0xF8A3, 0x53ED, 0xF8A4, 0x634C, + 0xF8A5, 0x4F69, 0xF8A6, 0x5504, 0xF8A7, 0x6096, 0xF8A8, 0x6557, 0xF8A9, 0x6C9B, 0xF8AA, 0x6D7F, 0xF8AB, 0x724C, 0xF8AC, 0x72FD, + 0xF8AD, 0x7A17, 0xF8AE, 0x8987, 0xF8AF, 0x8C9D, 0xF8B0, 0x5F6D, 0xF8B1, 0x6F8E, 0xF8B2, 0x70F9, 0xF8B3, 0x81A8, 0xF8B4, 0x610E, + 0xF8B5, 0x4FBF, 0xF8B6, 0x504F, 0xF8B7, 0x6241, 0xF8B8, 0x7247, 0xF8B9, 0x7BC7, 0xF8BA, 0x7DE8, 0xF8BB, 0x7FE9, 0xF8BC, 0x904D, + 0xF8BD, 0x97AD, 0xF8BE, 0x9A19, 0xF8BF, 0x8CB6, 0xF8C0, 0x576A, 0xF8C1, 0x5E73, 0xF8C2, 0x67B0, 0xF8C3, 0x840D, 0xF8C4, 0x8A55, + 0xF8C5, 0x5420, 0xF8C6, 0x5B16, 0xF8C7, 0x5E63, 0xF8C8, 0x5EE2, 0xF8C9, 0x5F0A, 0xF8CA, 0x6583, 0xF8CB, 0x80BA, 0xF8CC, 0x853D, + 0xF8CD, 0x9589, 0xF8CE, 0x965B, 0xF8CF, 0x4F48, 0xF8D0, 0x5305, 0xF8D1, 0x530D, 0xF8D2, 0x530F, 0xF8D3, 0x5486, 0xF8D4, 0x54FA, + 0xF8D5, 0x5703, 0xF8D6, 0x5E03, 0xF8D7, 0x6016, 0xF8D8, 0x629B, 0xF8D9, 0x62B1, 0xF8DA, 0x6355, 0xF8DB, 0xFA06, 0xF8DC, 0x6CE1, + 0xF8DD, 0x6D66, 0xF8DE, 0x75B1, 0xF8DF, 0x7832, 0xF8E0, 0x80DE, 0xF8E1, 0x812F, 0xF8E2, 0x82DE, 0xF8E3, 0x8461, 0xF8E4, 0x84B2, + 0xF8E5, 0x888D, 0xF8E6, 0x8912, 0xF8E7, 0x900B, 0xF8E8, 0x92EA, 0xF8E9, 0x98FD, 0xF8EA, 0x9B91, 0xF8EB, 0x5E45, 0xF8EC, 0x66B4, + 0xF8ED, 0x66DD, 0xF8EE, 0x7011, 0xF8EF, 0x7206, 0xF8F0, 0xFA07, 0xF8F1, 0x4FF5, 0xF8F2, 0x527D, 0xF8F3, 0x5F6A, 0xF8F4, 0x6153, + 0xF8F5, 0x6753, 0xF8F6, 0x6A19, 0xF8F7, 0x6F02, 0xF8F8, 0x74E2, 0xF8F9, 0x7968, 0xF8FA, 0x8868, 0xF8FB, 0x8C79, 0xF8FC, 0x98C7, + 0xF8FD, 0x98C4, 0xF8FE, 0x9A43, 0xF9A1, 0x54C1, 0xF9A2, 0x7A1F, 0xF9A3, 0x6953, 0xF9A4, 0x8AF7, 0xF9A5, 0x8C4A, 0xF9A6, 0x98A8, + 0xF9A7, 0x99AE, 0xF9A8, 0x5F7C, 0xF9A9, 0x62AB, 0xF9AA, 0x75B2, 0xF9AB, 0x76AE, 0xF9AC, 0x88AB, 0xF9AD, 0x907F, 0xF9AE, 0x9642, + 0xF9AF, 0x5339, 0xF9B0, 0x5F3C, 0xF9B1, 0x5FC5, 0xF9B2, 0x6CCC, 0xF9B3, 0x73CC, 0xF9B4, 0x7562, 0xF9B5, 0x758B, 0xF9B6, 0x7B46, + 0xF9B7, 0x82FE, 0xF9B8, 0x999D, 0xF9B9, 0x4E4F, 0xF9BA, 0x903C, 0xF9BB, 0x4E0B, 0xF9BC, 0x4F55, 0xF9BD, 0x53A6, 0xF9BE, 0x590F, + 0xF9BF, 0x5EC8, 0xF9C0, 0x6630, 0xF9C1, 0x6CB3, 0xF9C2, 0x7455, 0xF9C3, 0x8377, 0xF9C4, 0x8766, 0xF9C5, 0x8CC0, 0xF9C6, 0x9050, + 0xF9C7, 0x971E, 0xF9C8, 0x9C15, 0xF9C9, 0x58D1, 0xF9CA, 0x5B78, 0xF9CB, 0x8650, 0xF9CC, 0x8B14, 0xF9CD, 0x9DB4, 0xF9CE, 0x5BD2, + 0xF9CF, 0x6068, 0xF9D0, 0x608D, 0xF9D1, 0x65F1, 0xF9D2, 0x6C57, 0xF9D3, 0x6F22, 0xF9D4, 0x6FA3, 0xF9D5, 0x701A, 0xF9D6, 0x7F55, + 0xF9D7, 0x7FF0, 0xF9D8, 0x9591, 0xF9D9, 0x9592, 0xF9DA, 0x9650, 0xF9DB, 0x97D3, 0xF9DC, 0x5272, 0xF9DD, 0x8F44, 0xF9DE, 0x51FD, + 0xF9DF, 0x542B, 0xF9E0, 0x54B8, 0xF9E1, 0x5563, 0xF9E2, 0x558A, 0xF9E3, 0x6ABB, 0xF9E4, 0x6DB5, 0xF9E5, 0x7DD8, 0xF9E6, 0x8266, + 0xF9E7, 0x929C, 0xF9E8, 0x9677, 0xF9E9, 0x9E79, 0xF9EA, 0x5408, 0xF9EB, 0x54C8, 0xF9EC, 0x76D2, 0xF9ED, 0x86E4, 0xF9EE, 0x95A4, + 0xF9EF, 0x95D4, 0xF9F0, 0x965C, 0xF9F1, 0x4EA2, 0xF9F2, 0x4F09, 0xF9F3, 0x59EE, 0xF9F4, 0x5AE6, 0xF9F5, 0x5DF7, 0xF9F6, 0x6052, + 0xF9F7, 0x6297, 0xF9F8, 0x676D, 0xF9F9, 0x6841, 0xF9FA, 0x6C86, 0xF9FB, 0x6E2F, 0xF9FC, 0x7F38, 0xF9FD, 0x809B, 0xF9FE, 0x822A, + 0xFAA1, 0xFA08, 0xFAA2, 0xFA09, 0xFAA3, 0x9805, 0xFAA4, 0x4EA5, 0xFAA5, 0x5055, 0xFAA6, 0x54B3, 0xFAA7, 0x5793, 0xFAA8, 0x595A, + 0xFAA9, 0x5B69, 0xFAAA, 0x5BB3, 0xFAAB, 0x61C8, 0xFAAC, 0x6977, 0xFAAD, 0x6D77, 0xFAAE, 0x7023, 0xFAAF, 0x87F9, 0xFAB0, 0x89E3, + 0xFAB1, 0x8A72, 0xFAB2, 0x8AE7, 0xFAB3, 0x9082, 0xFAB4, 0x99ED, 0xFAB5, 0x9AB8, 0xFAB6, 0x52BE, 0xFAB7, 0x6838, 0xFAB8, 0x5016, + 0xFAB9, 0x5E78, 0xFABA, 0x674F, 0xFABB, 0x8347, 0xFABC, 0x884C, 0xFABD, 0x4EAB, 0xFABE, 0x5411, 0xFABF, 0x56AE, 0xFAC0, 0x73E6, + 0xFAC1, 0x9115, 0xFAC2, 0x97FF, 0xFAC3, 0x9909, 0xFAC4, 0x9957, 0xFAC5, 0x9999, 0xFAC6, 0x5653, 0xFAC7, 0x589F, 0xFAC8, 0x865B, + 0xFAC9, 0x8A31, 0xFACA, 0x61B2, 0xFACB, 0x6AF6, 0xFACC, 0x737B, 0xFACD, 0x8ED2, 0xFACE, 0x6B47, 0xFACF, 0x96AA, 0xFAD0, 0x9A57, + 0xFAD1, 0x5955, 0xFAD2, 0x7200, 0xFAD3, 0x8D6B, 0xFAD4, 0x9769, 0xFAD5, 0x4FD4, 0xFAD6, 0x5CF4, 0xFAD7, 0x5F26, 0xFAD8, 0x61F8, + 0xFAD9, 0x665B, 0xFADA, 0x6CEB, 0xFADB, 0x70AB, 0xFADC, 0x7384, 0xFADD, 0x73B9, 0xFADE, 0x73FE, 0xFADF, 0x7729, 0xFAE0, 0x774D, + 0xFAE1, 0x7D43, 0xFAE2, 0x7D62, 0xFAE3, 0x7E23, 0xFAE4, 0x8237, 0xFAE5, 0x8852, 0xFAE6, 0xFA0A, 0xFAE7, 0x8CE2, 0xFAE8, 0x9249, + 0xFAE9, 0x986F, 0xFAEA, 0x5B51, 0xFAEB, 0x7A74, 0xFAEC, 0x8840, 0xFAED, 0x9801, 0xFAEE, 0x5ACC, 0xFAEF, 0x4FE0, 0xFAF0, 0x5354, + 0xFAF1, 0x593E, 0xFAF2, 0x5CFD, 0xFAF3, 0x633E, 0xFAF4, 0x6D79, 0xFAF5, 0x72F9, 0xFAF6, 0x8105, 0xFAF7, 0x8107, 0xFAF8, 0x83A2, + 0xFAF9, 0x92CF, 0xFAFA, 0x9830, 0xFAFB, 0x4EA8, 0xFAFC, 0x5144, 0xFAFD, 0x5211, 0xFAFE, 0x578B, 0xFBA1, 0x5F62, 0xFBA2, 0x6CC2, + 0xFBA3, 0x6ECE, 0xFBA4, 0x7005, 0xFBA5, 0x7050, 0xFBA6, 0x70AF, 0xFBA7, 0x7192, 0xFBA8, 0x73E9, 0xFBA9, 0x7469, 0xFBAA, 0x834A, + 0xFBAB, 0x87A2, 0xFBAC, 0x8861, 0xFBAD, 0x9008, 0xFBAE, 0x90A2, 0xFBAF, 0x93A3, 0xFBB0, 0x99A8, 0xFBB1, 0x516E, 0xFBB2, 0x5F57, + 0xFBB3, 0x60E0, 0xFBB4, 0x6167, 0xFBB5, 0x66B3, 0xFBB6, 0x8559, 0xFBB7, 0x8E4A, 0xFBB8, 0x91AF, 0xFBB9, 0x978B, 0xFBBA, 0x4E4E, + 0xFBBB, 0x4E92, 0xFBBC, 0x547C, 0xFBBD, 0x58D5, 0xFBBE, 0x58FA, 0xFBBF, 0x597D, 0xFBC0, 0x5CB5, 0xFBC1, 0x5F27, 0xFBC2, 0x6236, + 0xFBC3, 0x6248, 0xFBC4, 0x660A, 0xFBC5, 0x6667, 0xFBC6, 0x6BEB, 0xFBC7, 0x6D69, 0xFBC8, 0x6DCF, 0xFBC9, 0x6E56, 0xFBCA, 0x6EF8, + 0xFBCB, 0x6F94, 0xFBCC, 0x6FE0, 0xFBCD, 0x6FE9, 0xFBCE, 0x705D, 0xFBCF, 0x72D0, 0xFBD0, 0x7425, 0xFBD1, 0x745A, 0xFBD2, 0x74E0, + 0xFBD3, 0x7693, 0xFBD4, 0x795C, 0xFBD5, 0x7CCA, 0xFBD6, 0x7E1E, 0xFBD7, 0x80E1, 0xFBD8, 0x82A6, 0xFBD9, 0x846B, 0xFBDA, 0x84BF, + 0xFBDB, 0x864E, 0xFBDC, 0x865F, 0xFBDD, 0x8774, 0xFBDE, 0x8B77, 0xFBDF, 0x8C6A, 0xFBE0, 0x93AC, 0xFBE1, 0x9800, 0xFBE2, 0x9865, + 0xFBE3, 0x60D1, 0xFBE4, 0x6216, 0xFBE5, 0x9177, 0xFBE6, 0x5A5A, 0xFBE7, 0x660F, 0xFBE8, 0x6DF7, 0xFBE9, 0x6E3E, 0xFBEA, 0x743F, + 0xFBEB, 0x9B42, 0xFBEC, 0x5FFD, 0xFBED, 0x60DA, 0xFBEE, 0x7B0F, 0xFBEF, 0x54C4, 0xFBF0, 0x5F18, 0xFBF1, 0x6C5E, 0xFBF2, 0x6CD3, + 0xFBF3, 0x6D2A, 0xFBF4, 0x70D8, 0xFBF5, 0x7D05, 0xFBF6, 0x8679, 0xFBF7, 0x8A0C, 0xFBF8, 0x9D3B, 0xFBF9, 0x5316, 0xFBFA, 0x548C, + 0xFBFB, 0x5B05, 0xFBFC, 0x6A3A, 0xFBFD, 0x706B, 0xFBFE, 0x7575, 0xFCA1, 0x798D, 0xFCA2, 0x79BE, 0xFCA3, 0x82B1, 0xFCA4, 0x83EF, + 0xFCA5, 0x8A71, 0xFCA6, 0x8B41, 0xFCA7, 0x8CA8, 0xFCA8, 0x9774, 0xFCA9, 0xFA0B, 0xFCAA, 0x64F4, 0xFCAB, 0x652B, 0xFCAC, 0x78BA, + 0xFCAD, 0x78BB, 0xFCAE, 0x7A6B, 0xFCAF, 0x4E38, 0xFCB0, 0x559A, 0xFCB1, 0x5950, 0xFCB2, 0x5BA6, 0xFCB3, 0x5E7B, 0xFCB4, 0x60A3, + 0xFCB5, 0x63DB, 0xFCB6, 0x6B61, 0xFCB7, 0x6665, 0xFCB8, 0x6853, 0xFCB9, 0x6E19, 0xFCBA, 0x7165, 0xFCBB, 0x74B0, 0xFCBC, 0x7D08, + 0xFCBD, 0x9084, 0xFCBE, 0x9A69, 0xFCBF, 0x9C25, 0xFCC0, 0x6D3B, 0xFCC1, 0x6ED1, 0xFCC2, 0x733E, 0xFCC3, 0x8C41, 0xFCC4, 0x95CA, + 0xFCC5, 0x51F0, 0xFCC6, 0x5E4C, 0xFCC7, 0x5FA8, 0xFCC8, 0x604D, 0xFCC9, 0x60F6, 0xFCCA, 0x6130, 0xFCCB, 0x614C, 0xFCCC, 0x6643, + 0xFCCD, 0x6644, 0xFCCE, 0x69A5, 0xFCCF, 0x6CC1, 0xFCD0, 0x6E5F, 0xFCD1, 0x6EC9, 0xFCD2, 0x6F62, 0xFCD3, 0x714C, 0xFCD4, 0x749C, + 0xFCD5, 0x7687, 0xFCD6, 0x7BC1, 0xFCD7, 0x7C27, 0xFCD8, 0x8352, 0xFCD9, 0x8757, 0xFCDA, 0x9051, 0xFCDB, 0x968D, 0xFCDC, 0x9EC3, + 0xFCDD, 0x532F, 0xFCDE, 0x56DE, 0xFCDF, 0x5EFB, 0xFCE0, 0x5F8A, 0xFCE1, 0x6062, 0xFCE2, 0x6094, 0xFCE3, 0x61F7, 0xFCE4, 0x6666, + 0xFCE5, 0x6703, 0xFCE6, 0x6A9C, 0xFCE7, 0x6DEE, 0xFCE8, 0x6FAE, 0xFCE9, 0x7070, 0xFCEA, 0x736A, 0xFCEB, 0x7E6A, 0xFCEC, 0x81BE, + 0xFCED, 0x8334, 0xFCEE, 0x86D4, 0xFCEF, 0x8AA8, 0xFCF0, 0x8CC4, 0xFCF1, 0x5283, 0xFCF2, 0x7372, 0xFCF3, 0x5B96, 0xFCF4, 0x6A6B, + 0xFCF5, 0x9404, 0xFCF6, 0x54EE, 0xFCF7, 0x5686, 0xFCF8, 0x5B5D, 0xFCF9, 0x6548, 0xFCFA, 0x6585, 0xFCFB, 0x66C9, 0xFCFC, 0x689F, + 0xFCFD, 0x6D8D, 0xFCFE, 0x6DC6, 0xFDA1, 0x723B, 0xFDA2, 0x80B4, 0xFDA3, 0x9175, 0xFDA4, 0x9A4D, 0xFDA5, 0x4FAF, 0xFDA6, 0x5019, + 0xFDA7, 0x539A, 0xFDA8, 0x540E, 0xFDA9, 0x543C, 0xFDAA, 0x5589, 0xFDAB, 0x55C5, 0xFDAC, 0x5E3F, 0xFDAD, 0x5F8C, 0xFDAE, 0x673D, + 0xFDAF, 0x7166, 0xFDB0, 0x73DD, 0xFDB1, 0x9005, 0xFDB2, 0x52DB, 0xFDB3, 0x52F3, 0xFDB4, 0x5864, 0xFDB5, 0x58CE, 0xFDB6, 0x7104, + 0xFDB7, 0x718F, 0xFDB8, 0x71FB, 0xFDB9, 0x85B0, 0xFDBA, 0x8A13, 0xFDBB, 0x6688, 0xFDBC, 0x85A8, 0xFDBD, 0x55A7, 0xFDBE, 0x6684, + 0xFDBF, 0x714A, 0xFDC0, 0x8431, 0xFDC1, 0x5349, 0xFDC2, 0x5599, 0xFDC3, 0x6BC1, 0xFDC4, 0x5F59, 0xFDC5, 0x5FBD, 0xFDC6, 0x63EE, + 0xFDC7, 0x6689, 0xFDC8, 0x7147, 0xFDC9, 0x8AF1, 0xFDCA, 0x8F1D, 0xFDCB, 0x9EBE, 0xFDCC, 0x4F11, 0xFDCD, 0x643A, 0xFDCE, 0x70CB, + 0xFDCF, 0x7566, 0xFDD0, 0x8667, 0xFDD1, 0x6064, 0xFDD2, 0x8B4E, 0xFDD3, 0x9DF8, 0xFDD4, 0x5147, 0xFDD5, 0x51F6, 0xFDD6, 0x5308, + 0xFDD7, 0x6D36, 0xFDD8, 0x80F8, 0xFDD9, 0x9ED1, 0xFDDA, 0x6615, 0xFDDB, 0x6B23, 0xFDDC, 0x7098, 0xFDDD, 0x75D5, 0xFDDE, 0x5403, + 0xFDDF, 0x5C79, 0xFDE0, 0x7D07, 0xFDE1, 0x8A16, 0xFDE2, 0x6B20, 0xFDE3, 0x6B3D, 0xFDE4, 0x6B46, 0xFDE5, 0x5438, 0xFDE6, 0x6070, + 0xFDE7, 0x6D3D, 0xFDE8, 0x7FD5, 0xFDE9, 0x8208, 0xFDEA, 0x50D6, 0xFDEB, 0x51DE, 0xFDEC, 0x559C, 0xFDED, 0x566B, 0xFDEE, 0x56CD, + 0xFDEF, 0x59EC, 0xFDF0, 0x5B09, 0xFDF1, 0x5E0C, 0xFDF2, 0x6199, 0xFDF3, 0x6198, 0xFDF4, 0x6231, 0xFDF5, 0x665E, 0xFDF6, 0x66E6, + 0xFDF7, 0x7199, 0xFDF8, 0x71B9, 0xFDF9, 0x71BA, 0xFDFA, 0x72A7, 0xFDFB, 0x79A7, 0xFDFC, 0x7A00, 0xFDFD, 0x7FB2, 0xFDFE, 0x8A70, + 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 950 || FF_CODE_PAGE == 0 /* Traditional Chinese */ +static const WCHAR uni2oem950[] = { /* Unicode --> Big5 pairs */ + 0x00A7, 0xA1B1, 0x00AF, 0xA1C2, 0x00B0, 0xA258, 0x00B1, 0xA1D3, 0x00B7, 0xA150, 0x00D7, 0xA1D1, 0x00F7, 0xA1D2, 0x02C7, 0xA3BE, + 0x02C9, 0xA3BC, 0x02CA, 0xA3BD, 0x02CB, 0xA3BF, 0x02CD, 0xA1C5, 0x02D9, 0xA3BB, 0x0391, 0xA344, 0x0392, 0xA345, 0x0393, 0xA346, + 0x0394, 0xA347, 0x0395, 0xA348, 0x0396, 0xA349, 0x0397, 0xA34A, 0x0398, 0xA34B, 0x0399, 0xA34C, 0x039A, 0xA34D, 0x039B, 0xA34E, + 0x039C, 0xA34F, 0x039D, 0xA350, 0x039E, 0xA351, 0x039F, 0xA352, 0x03A0, 0xA353, 0x03A1, 0xA354, 0x03A3, 0xA355, 0x03A4, 0xA356, + 0x03A5, 0xA357, 0x03A6, 0xA358, 0x03A7, 0xA359, 0x03A8, 0xA35A, 0x03A9, 0xA35B, 0x03B1, 0xA35C, 0x03B2, 0xA35D, 0x03B3, 0xA35E, + 0x03B4, 0xA35F, 0x03B5, 0xA360, 0x03B6, 0xA361, 0x03B7, 0xA362, 0x03B8, 0xA363, 0x03B9, 0xA364, 0x03BA, 0xA365, 0x03BB, 0xA366, + 0x03BC, 0xA367, 0x03BD, 0xA368, 0x03BE, 0xA369, 0x03BF, 0xA36A, 0x03C0, 0xA36B, 0x03C1, 0xA36C, 0x03C3, 0xA36D, 0x03C4, 0xA36E, + 0x03C5, 0xA36F, 0x03C6, 0xA370, 0x03C7, 0xA371, 0x03C8, 0xA372, 0x03C9, 0xA373, 0x2013, 0xA156, 0x2014, 0xA158, 0x2018, 0xA1A5, + 0x2019, 0xA1A6, 0x201C, 0xA1A7, 0x201D, 0xA1A8, 0x2025, 0xA14C, 0x2026, 0xA14B, 0x2027, 0xA145, 0x2032, 0xA1AC, 0x2035, 0xA1AB, + 0x203B, 0xA1B0, 0x20AC, 0xA3E1, 0x2103, 0xA24A, 0x2105, 0xA1C1, 0x2109, 0xA24B, 0x2160, 0xA2B9, 0x2161, 0xA2BA, 0x2162, 0xA2BB, + 0x2163, 0xA2BC, 0x2164, 0xA2BD, 0x2165, 0xA2BE, 0x2166, 0xA2BF, 0x2167, 0xA2C0, 0x2168, 0xA2C1, 0x2169, 0xA2C2, 0x2190, 0xA1F6, + 0x2191, 0xA1F4, 0x2192, 0xA1F7, 0x2193, 0xA1F5, 0x2196, 0xA1F8, 0x2197, 0xA1F9, 0x2198, 0xA1FB, 0x2199, 0xA1FA, 0x2215, 0xA241, + 0x221A, 0xA1D4, 0x221E, 0xA1DB, 0x221F, 0xA1E8, 0x2220, 0xA1E7, 0x2223, 0xA1FD, 0x2225, 0xA1FC, 0x2229, 0xA1E4, 0x222A, 0xA1E5, + 0x222B, 0xA1EC, 0x222E, 0xA1ED, 0x2234, 0xA1EF, 0x2235, 0xA1EE, 0x2252, 0xA1DC, 0x2260, 0xA1DA, 0x2261, 0xA1DD, 0x2266, 0xA1D8, + 0x2267, 0xA1D9, 0x2295, 0xA1F2, 0x2299, 0xA1F3, 0x22A5, 0xA1E6, 0x22BF, 0xA1E9, 0x2500, 0xA277, 0x2502, 0xA278, 0x250C, 0xA27A, + 0x2510, 0xA27B, 0x2514, 0xA27C, 0x2518, 0xA27D, 0x251C, 0xA275, 0x2524, 0xA274, 0x252C, 0xA273, 0x2534, 0xA272, 0x253C, 0xA271, + 0x2550, 0xA2A4, 0x2550, 0xF9F9, 0x2551, 0xF9F8, 0x2552, 0xF9E6, 0x2553, 0xF9EF, 0x2554, 0xF9DD, 0x2555, 0xF9E8, 0x2556, 0xF9F1, + 0x2557, 0xF9DF, 0x2558, 0xF9EC, 0x2559, 0xF9F5, 0x255A, 0xF9E3, 0x255B, 0xF9EE, 0x255C, 0xF9F7, 0x255D, 0xF9E5, 0x255E, 0xA2A5, + 0x255E, 0xF9E9, 0x255F, 0xF9F2, 0x2560, 0xF9E0, 0x2561, 0xA2A7, 0x2561, 0xF9EB, 0x2562, 0xF9F4, 0x2563, 0xF9E2, 0x2564, 0xF9E7, + 0x2565, 0xF9F0, 0x2566, 0xF9DE, 0x2567, 0xF9ED, 0x2568, 0xF9F6, 0x2569, 0xF9E4, 0x256A, 0xA2A6, 0x256A, 0xF9EA, 0x256B, 0xF9F3, + 0x256C, 0xF9E1, 0x256D, 0xA27E, 0x256D, 0xF9FA, 0x256E, 0xA2A1, 0x256E, 0xF9FB, 0x256F, 0xA2A3, 0x256F, 0xF9FD, 0x2570, 0xA2A2, + 0x2570, 0xF9FC, 0x2571, 0xA2AC, 0x2572, 0xA2AD, 0x2573, 0xA2AE, 0x2574, 0xA15A, 0x2581, 0xA262, 0x2582, 0xA263, 0x2583, 0xA264, + 0x2584, 0xA265, 0x2585, 0xA266, 0x2586, 0xA267, 0x2587, 0xA268, 0x2588, 0xA269, 0x2589, 0xA270, 0x258A, 0xA26F, 0x258B, 0xA26E, + 0x258C, 0xA26D, 0x258D, 0xA26C, 0x258E, 0xA26B, 0x258F, 0xA26A, 0x2593, 0xF9FE, 0x2594, 0xA276, 0x2595, 0xA279, 0x25A0, 0xA1BD, + 0x25A1, 0xA1BC, 0x25B2, 0xA1B6, 0x25B3, 0xA1B5, 0x25BC, 0xA1BF, 0x25BD, 0xA1BE, 0x25C6, 0xA1BB, 0x25C7, 0xA1BA, 0x25CB, 0xA1B3, + 0x25CE, 0xA1B7, 0x25CF, 0xA1B4, 0x25E2, 0xA2A8, 0x25E3, 0xA2A9, 0x25E4, 0xA2AB, 0x25E5, 0xA2AA, 0x2605, 0xA1B9, 0x2606, 0xA1B8, + 0x2640, 0xA1F0, 0x2642, 0xA1F1, 0x3000, 0xA140, 0x3001, 0xA142, 0x3002, 0xA143, 0x3003, 0xA1B2, 0x3008, 0xA171, 0x3009, 0xA172, + 0x300A, 0xA16D, 0x300B, 0xA16E, 0x300C, 0xA175, 0x300D, 0xA176, 0x300E, 0xA179, 0x300F, 0xA17A, 0x3010, 0xA169, 0x3011, 0xA16A, + 0x3012, 0xA245, 0x3014, 0xA165, 0x3015, 0xA166, 0x301D, 0xA1A9, 0x301E, 0xA1AA, 0x3021, 0xA2C3, 0x3022, 0xA2C4, 0x3023, 0xA2C5, + 0x3024, 0xA2C6, 0x3025, 0xA2C7, 0x3026, 0xA2C8, 0x3027, 0xA2C9, 0x3028, 0xA2CA, 0x3029, 0xA2CB, 0x3105, 0xA374, 0x3106, 0xA375, + 0x3107, 0xA376, 0x3108, 0xA377, 0x3109, 0xA378, 0x310A, 0xA379, 0x310B, 0xA37A, 0x310C, 0xA37B, 0x310D, 0xA37C, 0x310E, 0xA37D, + 0x310F, 0xA37E, 0x3110, 0xA3A1, 0x3111, 0xA3A2, 0x3112, 0xA3A3, 0x3113, 0xA3A4, 0x3114, 0xA3A5, 0x3115, 0xA3A6, 0x3116, 0xA3A7, + 0x3117, 0xA3A8, 0x3118, 0xA3A9, 0x3119, 0xA3AA, 0x311A, 0xA3AB, 0x311B, 0xA3AC, 0x311C, 0xA3AD, 0x311D, 0xA3AE, 0x311E, 0xA3AF, + 0x311F, 0xA3B0, 0x3120, 0xA3B1, 0x3121, 0xA3B2, 0x3122, 0xA3B3, 0x3123, 0xA3B4, 0x3124, 0xA3B5, 0x3125, 0xA3B6, 0x3126, 0xA3B7, + 0x3127, 0xA3B8, 0x3128, 0xA3B9, 0x3129, 0xA3BA, 0x32A3, 0xA1C0, 0x338E, 0xA255, 0x338F, 0xA256, 0x339C, 0xA250, 0x339D, 0xA251, + 0x339E, 0xA252, 0x33A1, 0xA254, 0x33C4, 0xA257, 0x33CE, 0xA253, 0x33D1, 0xA1EB, 0x33D2, 0xA1EA, 0x33D5, 0xA24F, 0x4E00, 0xA440, + 0x4E01, 0xA442, 0x4E03, 0xA443, 0x4E07, 0xC945, 0x4E08, 0xA456, 0x4E09, 0xA454, 0x4E0A, 0xA457, 0x4E0B, 0xA455, 0x4E0C, 0xC946, + 0x4E0D, 0xA4A3, 0x4E0E, 0xC94F, 0x4E0F, 0xC94D, 0x4E10, 0xA4A2, 0x4E11, 0xA4A1, 0x4E14, 0xA542, 0x4E15, 0xA541, 0x4E16, 0xA540, + 0x4E18, 0xA543, 0x4E19, 0xA4FE, 0x4E1E, 0xA5E0, 0x4E1F, 0xA5E1, 0x4E26, 0xA8C3, 0x4E2B, 0xA458, 0x4E2D, 0xA4A4, 0x4E2E, 0xC950, + 0x4E30, 0xA4A5, 0x4E31, 0xC963, 0x4E32, 0xA6EA, 0x4E33, 0xCBB1, 0x4E38, 0xA459, 0x4E39, 0xA4A6, 0x4E3B, 0xA544, 0x4E3C, 0xC964, + 0x4E42, 0xC940, 0x4E43, 0xA444, 0x4E45, 0xA45B, 0x4E47, 0xC947, 0x4E48, 0xA45C, 0x4E4B, 0xA4A7, 0x4E4D, 0xA545, 0x4E4E, 0xA547, + 0x4E4F, 0xA546, 0x4E52, 0xA5E2, 0x4E53, 0xA5E3, 0x4E56, 0xA8C4, 0x4E58, 0xADBC, 0x4E59, 0xA441, 0x4E5C, 0xC941, 0x4E5D, 0xA445, + 0x4E5E, 0xA45E, 0x4E5F, 0xA45D, 0x4E69, 0xA5E4, 0x4E73, 0xA8C5, 0x4E7E, 0xB0AE, 0x4E7F, 0xD44B, 0x4E82, 0xB6C3, 0x4E83, 0xDCB1, + 0x4E84, 0xDCB2, 0x4E86, 0xA446, 0x4E88, 0xA4A9, 0x4E8B, 0xA8C6, 0x4E8C, 0xA447, 0x4E8D, 0xC948, 0x4E8E, 0xA45F, 0x4E91, 0xA4AA, + 0x4E92, 0xA4AC, 0x4E93, 0xC951, 0x4E94, 0xA4AD, 0x4E95, 0xA4AB, 0x4E99, 0xA5E5, 0x4E9B, 0xA8C7, 0x4E9E, 0xA8C8, 0x4E9F, 0xAB45, + 0x4EA1, 0xA460, 0x4EA2, 0xA4AE, 0x4EA4, 0xA5E6, 0x4EA5, 0xA5E8, 0x4EA6, 0xA5E7, 0x4EA8, 0xA6EB, 0x4EAB, 0xA8C9, 0x4EAC, 0xA8CA, + 0x4EAD, 0xAB46, 0x4EAE, 0xAB47, 0x4EB3, 0xADBD, 0x4EB6, 0xDCB3, 0x4EB9, 0xF6D6, 0x4EBA, 0xA448, 0x4EC0, 0xA4B0, 0x4EC1, 0xA4AF, + 0x4EC2, 0xC952, 0x4EC3, 0xA4B1, 0x4EC4, 0xA4B7, 0x4EC6, 0xA4B2, 0x4EC7, 0xA4B3, 0x4EC8, 0xC954, 0x4EC9, 0xC953, 0x4ECA, 0xA4B5, + 0x4ECB, 0xA4B6, 0x4ECD, 0xA4B4, 0x4ED4, 0xA54A, 0x4ED5, 0xA54B, 0x4ED6, 0xA54C, 0x4ED7, 0xA54D, 0x4ED8, 0xA549, 0x4ED9, 0xA550, + 0x4EDA, 0xC96A, 0x4EDC, 0xC966, 0x4EDD, 0xC969, 0x4EDE, 0xA551, 0x4EDF, 0xA561, 0x4EE1, 0xC968, 0x4EE3, 0xA54E, 0x4EE4, 0xA54F, + 0x4EE5, 0xA548, 0x4EE8, 0xC965, 0x4EE9, 0xC967, 0x4EF0, 0xA5F5, 0x4EF1, 0xC9B0, 0x4EF2, 0xA5F2, 0x4EF3, 0xA5F6, 0x4EF4, 0xC9BA, + 0x4EF5, 0xC9AE, 0x4EF6, 0xA5F3, 0x4EF7, 0xC9B2, 0x4EFB, 0xA5F4, 0x4EFD, 0xA5F7, 0x4EFF, 0xA5E9, 0x4F00, 0xC9B1, 0x4F01, 0xA5F8, + 0x4F02, 0xC9B5, 0x4F04, 0xC9B9, 0x4F05, 0xC9B6, 0x4F08, 0xC9B3, 0x4F09, 0xA5EA, 0x4F0A, 0xA5EC, 0x4F0B, 0xA5F9, 0x4F0D, 0xA5EE, + 0x4F0E, 0xC9AB, 0x4F0F, 0xA5F1, 0x4F10, 0xA5EF, 0x4F11, 0xA5F0, 0x4F12, 0xC9BB, 0x4F13, 0xC9B8, 0x4F14, 0xC9AF, 0x4F15, 0xA5ED, + 0x4F18, 0xC9AC, 0x4F19, 0xA5EB, 0x4F1D, 0xC9B4, 0x4F22, 0xC9B7, 0x4F2C, 0xC9AD, 0x4F2D, 0xCA66, 0x4F2F, 0xA742, 0x4F30, 0xA6F4, + 0x4F33, 0xCA67, 0x4F34, 0xA6F1, 0x4F36, 0xA744, 0x4F38, 0xA6F9, 0x4F3A, 0xA6F8, 0x4F3B, 0xCA5B, 0x4F3C, 0xA6FC, 0x4F3D, 0xA6F7, + 0x4F3E, 0xCA60, 0x4F3F, 0xCA68, 0x4F41, 0xCA64, 0x4F43, 0xA6FA, 0x4F46, 0xA6FD, 0x4F47, 0xA6EE, 0x4F48, 0xA747, 0x4F49, 0xCA5D, + 0x4F4C, 0xCBBD, 0x4F4D, 0xA6EC, 0x4F4E, 0xA743, 0x4F4F, 0xA6ED, 0x4F50, 0xA6F5, 0x4F51, 0xA6F6, 0x4F52, 0xCA62, 0x4F53, 0xCA5E, + 0x4F54, 0xA6FB, 0x4F55, 0xA6F3, 0x4F56, 0xCA5A, 0x4F57, 0xA6EF, 0x4F58, 0xCA65, 0x4F59, 0xA745, 0x4F5A, 0xA748, 0x4F5B, 0xA6F2, + 0x4F5C, 0xA740, 0x4F5D, 0xA746, 0x4F5E, 0xA6F0, 0x4F5F, 0xCA63, 0x4F60, 0xA741, 0x4F61, 0xCA69, 0x4F62, 0xCA5C, 0x4F63, 0xA6FE, + 0x4F64, 0xCA5F, 0x4F67, 0xCA61, 0x4F69, 0xA8D8, 0x4F6A, 0xCBBF, 0x4F6B, 0xCBCB, 0x4F6C, 0xA8D0, 0x4F6E, 0xCBCC, 0x4F6F, 0xA8CB, + 0x4F70, 0xA8D5, 0x4F73, 0xA8CE, 0x4F74, 0xCBB9, 0x4F75, 0xA8D6, 0x4F76, 0xCBB8, 0x4F77, 0xCBBC, 0x4F78, 0xCBC3, 0x4F79, 0xCBC1, + 0x4F7A, 0xA8DE, 0x4F7B, 0xA8D9, 0x4F7C, 0xCBB3, 0x4F7D, 0xCBB5, 0x4F7E, 0xA8DB, 0x4F7F, 0xA8CF, 0x4F80, 0xCBB6, 0x4F81, 0xCBC2, + 0x4F82, 0xCBC9, 0x4F83, 0xA8D4, 0x4F84, 0xCBBB, 0x4F85, 0xCBB4, 0x4F86, 0xA8D3, 0x4F87, 0xCBB7, 0x4F88, 0xA8D7, 0x4F89, 0xCBBA, + 0x4F8B, 0xA8D2, 0x4F8D, 0xA8CD, 0x4F8F, 0xA8DC, 0x4F90, 0xCBC4, 0x4F91, 0xA8DD, 0x4F92, 0xCBC8, 0x4F94, 0xCBC6, 0x4F95, 0xCBCA, + 0x4F96, 0xA8DA, 0x4F97, 0xCBBE, 0x4F98, 0xCBB2, 0x4F9A, 0xCBC0, 0x4F9B, 0xA8D1, 0x4F9C, 0xCBC5, 0x4F9D, 0xA8CC, 0x4F9E, 0xCBC7, + 0x4FAE, 0xAB56, 0x4FAF, 0xAB4A, 0x4FB2, 0xCDE0, 0x4FB3, 0xCDE8, 0x4FB5, 0xAB49, 0x4FB6, 0xAB51, 0x4FB7, 0xAB5D, 0x4FB9, 0xCDEE, + 0x4FBA, 0xCDEC, 0x4FBB, 0xCDE7, 0x4FBF, 0xAB4B, 0x4FC0, 0xCDED, 0x4FC1, 0xCDE3, 0x4FC2, 0xAB59, 0x4FC3, 0xAB50, 0x4FC4, 0xAB58, + 0x4FC5, 0xCDDE, 0x4FC7, 0xCDEA, 0x4FC9, 0xCDE1, 0x4FCA, 0xAB54, 0x4FCB, 0xCDE2, 0x4FCD, 0xCDDD, 0x4FCE, 0xAB5B, 0x4FCF, 0xAB4E, + 0x4FD0, 0xAB57, 0x4FD1, 0xAB4D, 0x4FD3, 0xCDDF, 0x4FD4, 0xCDE4, 0x4FD6, 0xCDEB, 0x4FD7, 0xAB55, 0x4FD8, 0xAB52, 0x4FD9, 0xCDE6, + 0x4FDA, 0xAB5A, 0x4FDB, 0xCDE9, 0x4FDC, 0xCDE5, 0x4FDD, 0xAB4F, 0x4FDE, 0xAB5C, 0x4FDF, 0xAB53, 0x4FE0, 0xAB4C, 0x4FE1, 0xAB48, + 0x4FEC, 0xCDEF, 0x4FEE, 0xADD7, 0x4FEF, 0xADC1, 0x4FF1, 0xADD1, 0x4FF3, 0xADD6, 0x4FF4, 0xD0D0, 0x4FF5, 0xD0CF, 0x4FF6, 0xD0D4, + 0x4FF7, 0xD0D5, 0x4FF8, 0xADC4, 0x4FFA, 0xADCD, 0x4FFE, 0xADDA, 0x5000, 0xADCE, 0x5005, 0xD0C9, 0x5006, 0xADC7, 0x5007, 0xD0CA, + 0x5009, 0xADDC, 0x500B, 0xADD3, 0x500C, 0xADBE, 0x500D, 0xADBF, 0x500E, 0xD0DD, 0x500F, 0xB0BF, 0x5011, 0xADCC, 0x5012, 0xADCB, + 0x5013, 0xD0CB, 0x5014, 0xADCF, 0x5015, 0xD45B, 0x5016, 0xADC6, 0x5017, 0xD0D6, 0x5018, 0xADD5, 0x5019, 0xADD4, 0x501A, 0xADCA, + 0x501B, 0xD0CE, 0x501C, 0xD0D7, 0x501E, 0xD0C8, 0x501F, 0xADC9, 0x5020, 0xD0D8, 0x5021, 0xADD2, 0x5022, 0xD0CC, 0x5023, 0xADC0, + 0x5025, 0xADC3, 0x5026, 0xADC2, 0x5027, 0xD0D9, 0x5028, 0xADD0, 0x5029, 0xADC5, 0x502A, 0xADD9, 0x502B, 0xADDB, 0x502C, 0xD0D3, + 0x502D, 0xADD8, 0x502F, 0xD0DB, 0x5030, 0xD0CD, 0x5031, 0xD0DC, 0x5033, 0xD0D1, 0x5035, 0xD0DA, 0x5037, 0xD0D2, 0x503C, 0xADC8, + 0x5040, 0xD463, 0x5041, 0xD457, 0x5043, 0xB0B3, 0x5045, 0xD45C, 0x5046, 0xD462, 0x5047, 0xB0B2, 0x5048, 0xD455, 0x5049, 0xB0B6, + 0x504A, 0xD459, 0x504B, 0xD452, 0x504C, 0xB0B4, 0x504D, 0xD456, 0x504E, 0xB0B9, 0x504F, 0xB0BE, 0x5051, 0xD467, 0x5053, 0xD451, + 0x5055, 0xB0BA, 0x5057, 0xD466, 0x505A, 0xB0B5, 0x505B, 0xD458, 0x505C, 0xB0B1, 0x505D, 0xD453, 0x505E, 0xD44F, 0x505F, 0xD45D, + 0x5060, 0xD450, 0x5061, 0xD44E, 0x5062, 0xD45A, 0x5063, 0xD460, 0x5064, 0xD461, 0x5065, 0xB0B7, 0x5068, 0xD85B, 0x5069, 0xD45E, + 0x506A, 0xD44D, 0x506B, 0xD45F, 0x506D, 0xB0C1, 0x506E, 0xD464, 0x506F, 0xB0C0, 0x5070, 0xD44C, 0x5072, 0xD454, 0x5073, 0xD465, + 0x5074, 0xB0BC, 0x5075, 0xB0BB, 0x5076, 0xB0B8, 0x5077, 0xB0BD, 0x507A, 0xB0AF, 0x507D, 0xB0B0, 0x5080, 0xB3C8, 0x5082, 0xD85E, + 0x5083, 0xD857, 0x5085, 0xB3C5, 0x5087, 0xD85F, 0x508B, 0xD855, 0x508C, 0xD858, 0x508D, 0xB3C4, 0x508E, 0xD859, 0x5091, 0xB3C7, + 0x5092, 0xD85D, 0x5094, 0xD853, 0x5095, 0xD852, 0x5096, 0xB3C9, 0x5098, 0xB3CA, 0x5099, 0xB3C6, 0x509A, 0xB3CB, 0x509B, 0xD851, + 0x509C, 0xD85C, 0x509D, 0xD85A, 0x509E, 0xD854, 0x50A2, 0xB3C3, 0x50A3, 0xD856, 0x50AC, 0xB6CA, 0x50AD, 0xB6C4, 0x50AE, 0xDCB7, + 0x50AF, 0xB6CD, 0x50B0, 0xDCBD, 0x50B1, 0xDCC0, 0x50B2, 0xB6C6, 0x50B3, 0xB6C7, 0x50B4, 0xDCBA, 0x50B5, 0xB6C5, 0x50B6, 0xDCC3, + 0x50B7, 0xB6CB, 0x50B8, 0xDCC4, 0x50BA, 0xDCBF, 0x50BB, 0xB6CC, 0x50BD, 0xDCB4, 0x50BE, 0xB6C9, 0x50BF, 0xDCB5, 0x50C1, 0xDCBE, + 0x50C2, 0xDCBC, 0x50C4, 0xDCB8, 0x50C5, 0xB6C8, 0x50C6, 0xDCB6, 0x50C7, 0xB6CE, 0x50C8, 0xDCBB, 0x50C9, 0xDCC2, 0x50CA, 0xDCB9, + 0x50CB, 0xDCC1, 0x50CE, 0xB9B6, 0x50CF, 0xB9B3, 0x50D1, 0xB9B4, 0x50D3, 0xE0F9, 0x50D4, 0xE0F1, 0x50D5, 0xB9B2, 0x50D6, 0xB9AF, + 0x50D7, 0xE0F2, 0x50DA, 0xB9B1, 0x50DB, 0xE0F5, 0x50DD, 0xE0F7, 0x50E0, 0xE0FE, 0x50E3, 0xE0FD, 0x50E4, 0xE0F8, 0x50E5, 0xB9AE, + 0x50E6, 0xE0F0, 0x50E7, 0xB9AC, 0x50E8, 0xE0F3, 0x50E9, 0xB9B7, 0x50EA, 0xE0F6, 0x50EC, 0xE0FA, 0x50ED, 0xB9B0, 0x50EE, 0xB9AD, + 0x50EF, 0xE0FC, 0x50F0, 0xE0FB, 0x50F1, 0xB9B5, 0x50F3, 0xE0F4, 0x50F5, 0xBBF8, 0x50F6, 0xE4EC, 0x50F8, 0xE4E9, 0x50F9, 0xBBF9, + 0x50FB, 0xBBF7, 0x50FD, 0xE4F0, 0x50FE, 0xE4ED, 0x50FF, 0xE4E6, 0x5100, 0xBBF6, 0x5102, 0xBBFA, 0x5103, 0xE4E7, 0x5104, 0xBBF5, + 0x5105, 0xBBFD, 0x5106, 0xE4EA, 0x5107, 0xE4EB, 0x5108, 0xBBFB, 0x5109, 0xBBFC, 0x510A, 0xE4F1, 0x510B, 0xE4EE, 0x510C, 0xE4EF, + 0x5110, 0xBEAA, 0x5111, 0xE8F8, 0x5112, 0xBEA7, 0x5113, 0xE8F5, 0x5114, 0xBEA9, 0x5115, 0xBEAB, 0x5117, 0xE8F6, 0x5118, 0xBEA8, + 0x511A, 0xE8F7, 0x511C, 0xE8F4, 0x511F, 0xC076, 0x5120, 0xECBD, 0x5121, 0xC077, 0x5122, 0xECBB, 0x5124, 0xECBC, 0x5125, 0xECBA, + 0x5126, 0xECB9, 0x5129, 0xECBE, 0x512A, 0xC075, 0x512D, 0xEFB8, 0x512E, 0xEFB9, 0x5130, 0xE4E8, 0x5131, 0xEFB7, 0x5132, 0xC078, + 0x5133, 0xC35F, 0x5134, 0xF1EB, 0x5135, 0xF1EC, 0x5137, 0xC4D7, 0x5138, 0xC4D8, 0x5139, 0xF5C1, 0x513A, 0xF5C0, 0x513B, 0xC56C, + 0x513C, 0xC56B, 0x513D, 0xF7D0, 0x513F, 0xA449, 0x5140, 0xA461, 0x5141, 0xA4B9, 0x5143, 0xA4B8, 0x5144, 0xA553, 0x5145, 0xA552, + 0x5146, 0xA5FC, 0x5147, 0xA5FB, 0x5148, 0xA5FD, 0x5149, 0xA5FA, 0x514B, 0xA74A, 0x514C, 0xA749, 0x514D, 0xA74B, 0x5152, 0xA8E0, + 0x5154, 0xA8DF, 0x5155, 0xA8E1, 0x5157, 0xAB5E, 0x5159, 0xA259, 0x515A, 0xD0DE, 0x515B, 0xA25A, 0x515C, 0xB0C2, 0x515D, 0xA25C, + 0x515E, 0xA25B, 0x515F, 0xD860, 0x5161, 0xA25D, 0x5162, 0xB9B8, 0x5163, 0xA25E, 0x5165, 0xA44A, 0x5167, 0xA4BA, 0x5168, 0xA5FE, + 0x5169, 0xA8E2, 0x516B, 0xA44B, 0x516C, 0xA4BD, 0x516D, 0xA4BB, 0x516E, 0xA4BC, 0x5171, 0xA640, 0x5175, 0xA74C, 0x5176, 0xA8E4, + 0x5177, 0xA8E3, 0x5178, 0xA8E5, 0x517C, 0xADDD, 0x5180, 0xBEAC, 0x5187, 0xC94E, 0x5189, 0xA554, 0x518A, 0xA555, 0x518D, 0xA641, + 0x518F, 0xCA6A, 0x5191, 0xAB60, 0x5192, 0xAB5F, 0x5193, 0xD0E0, 0x5194, 0xD0DF, 0x5195, 0xB0C3, 0x5197, 0xA4BE, 0x5198, 0xC955, + 0x519E, 0xCBCD, 0x51A0, 0xAB61, 0x51A2, 0xADE0, 0x51A4, 0xADDE, 0x51A5, 0xADDF, 0x51AA, 0xBEAD, 0x51AC, 0xA556, 0x51B0, 0xA642, + 0x51B1, 0xC9BC, 0x51B6, 0xA74D, 0x51B7, 0xA74E, 0x51B9, 0xCA6B, 0x51BC, 0xCBCE, 0x51BD, 0xA8E6, 0x51BE, 0xCBCF, 0x51C4, 0xD0E2, + 0x51C5, 0xD0E3, 0x51C6, 0xADE3, 0x51C8, 0xD0E4, 0x51CA, 0xD0E1, 0x51CB, 0xADE4, 0x51CC, 0xADE2, 0x51CD, 0xADE1, 0x51CE, 0xD0E5, + 0x51D0, 0xD468, 0x51D4, 0xD861, 0x51D7, 0xDCC5, 0x51D8, 0xE140, 0x51DC, 0xBBFE, 0x51DD, 0xBEAE, 0x51DE, 0xE8F9, 0x51E0, 0xA44C, + 0x51E1, 0xA45A, 0x51F0, 0xB0C4, 0x51F1, 0xB3CD, 0x51F3, 0xB9B9, 0x51F5, 0xC942, 0x51F6, 0xA4BF, 0x51F8, 0xA559, 0x51F9, 0xA557, + 0x51FA, 0xA558, 0x51FD, 0xA8E7, 0x5200, 0xA44D, 0x5201, 0xA44E, 0x5203, 0xA462, 0x5206, 0xA4C0, 0x5207, 0xA4C1, 0x5208, 0xA4C2, + 0x5209, 0xC9BE, 0x520A, 0xA55A, 0x520C, 0xC96B, 0x520E, 0xA646, 0x5210, 0xC9BF, 0x5211, 0xA644, 0x5212, 0xA645, 0x5213, 0xC9BD, + 0x5216, 0xA647, 0x5217, 0xA643, 0x521C, 0xCA6C, 0x521D, 0xAAEC, 0x521E, 0xCA6D, 0x5221, 0xCA6E, 0x5224, 0xA750, 0x5225, 0xA74F, + 0x5228, 0xA753, 0x5229, 0xA751, 0x522A, 0xA752, 0x522E, 0xA8ED, 0x5230, 0xA8EC, 0x5231, 0xCBD4, 0x5232, 0xCBD1, 0x5233, 0xCBD2, + 0x5235, 0xCBD0, 0x5236, 0xA8EE, 0x5237, 0xA8EA, 0x5238, 0xA8E9, 0x523A, 0xA8EB, 0x523B, 0xA8E8, 0x5241, 0xA8EF, 0x5243, 0xAB63, + 0x5244, 0xCDF0, 0x5246, 0xCBD3, 0x5247, 0xAB68, 0x5249, 0xCDF1, 0x524A, 0xAB64, 0x524B, 0xAB67, 0x524C, 0xAB66, 0x524D, 0xAB65, + 0x524E, 0xAB62, 0x5252, 0xD0E8, 0x5254, 0xADE7, 0x5255, 0xD0EB, 0x5256, 0xADE5, 0x525A, 0xD0E7, 0x525B, 0xADE8, 0x525C, 0xADE6, + 0x525D, 0xADE9, 0x525E, 0xD0E9, 0x525F, 0xD0EA, 0x5261, 0xD0E6, 0x5262, 0xD0EC, 0x5269, 0xB3D1, 0x526A, 0xB0C5, 0x526B, 0xD469, + 0x526C, 0xD46B, 0x526D, 0xD46A, 0x526E, 0xD46C, 0x526F, 0xB0C6, 0x5272, 0xB3CE, 0x5274, 0xB3CF, 0x5275, 0xB3D0, 0x5277, 0xB6D0, + 0x5278, 0xDCC7, 0x527A, 0xDCC6, 0x527B, 0xDCC8, 0x527C, 0xDCC9, 0x527D, 0xB6D1, 0x527F, 0xB6CF, 0x5280, 0xE141, 0x5281, 0xE142, + 0x5282, 0xB9BB, 0x5283, 0xB9BA, 0x5284, 0xE35A, 0x5287, 0xBC40, 0x5288, 0xBC41, 0x5289, 0xBC42, 0x528A, 0xBC44, 0x528B, 0xE4F2, + 0x528C, 0xE4F3, 0x528D, 0xBC43, 0x5291, 0xBEAF, 0x5293, 0xBEB0, 0x5296, 0xF1ED, 0x5297, 0xF5C3, 0x5298, 0xF5C2, 0x5299, 0xF7D1, + 0x529B, 0xA44F, 0x529F, 0xA55C, 0x52A0, 0xA55B, 0x52A3, 0xA648, 0x52A6, 0xC9C0, 0x52A9, 0xA755, 0x52AA, 0xA756, 0x52AB, 0xA754, + 0x52AC, 0xA757, 0x52AD, 0xCA6F, 0x52AE, 0xCA70, 0x52BB, 0xA8F1, 0x52BC, 0xCBD5, 0x52BE, 0xA8F0, 0x52C0, 0xCDF2, 0x52C1, 0xAB6C, + 0x52C2, 0xCDF3, 0x52C3, 0xAB6B, 0x52C7, 0xAB69, 0x52C9, 0xAB6A, 0x52CD, 0xD0ED, 0x52D2, 0xB0C7, 0x52D3, 0xD46E, 0x52D5, 0xB0CA, + 0x52D6, 0xD46D, 0x52D7, 0xB1E5, 0x52D8, 0xB0C9, 0x52D9, 0xB0C8, 0x52DB, 0xB3D4, 0x52DD, 0xB3D3, 0x52DE, 0xB3D2, 0x52DF, 0xB6D2, + 0x52E2, 0xB6D5, 0x52E3, 0xB6D6, 0x52E4, 0xB6D4, 0x52E6, 0xB6D3, 0x52E9, 0xE143, 0x52EB, 0xE144, 0x52EF, 0xE4F5, 0x52F0, 0xBC45, + 0x52F1, 0xE4F4, 0x52F3, 0xBEB1, 0x52F4, 0xECBF, 0x52F5, 0xC079, 0x52F7, 0xF1EE, 0x52F8, 0xC455, 0x52FA, 0xA463, 0x52FB, 0xA4C3, + 0x52FC, 0xC956, 0x52FE, 0xA4C4, 0x52FF, 0xA4C5, 0x5305, 0xA55D, 0x5306, 0xA55E, 0x5308, 0xA649, 0x5309, 0xCA71, 0x530A, 0xCBD6, + 0x530B, 0xCBD7, 0x530D, 0xAB6D, 0x530E, 0xD0EE, 0x530F, 0xB0CC, 0x5310, 0xB0CB, 0x5311, 0xD863, 0x5312, 0xD862, 0x5315, 0xA450, + 0x5316, 0xA4C6, 0x5317, 0xA55F, 0x5319, 0xB0CD, 0x531A, 0xC943, 0x531C, 0xC96C, 0x531D, 0xA560, 0x531F, 0xC9C2, 0x5320, 0xA64B, + 0x5321, 0xA64A, 0x5322, 0xC9C1, 0x5323, 0xA758, 0x532A, 0xADEA, 0x532D, 0xD46F, 0x532F, 0xB6D7, 0x5330, 0xE145, 0x5331, 0xB9BC, + 0x5334, 0xE8FA, 0x5337, 0xF3FD, 0x5339, 0xA4C7, 0x533C, 0xCBD8, 0x533D, 0xCDF4, 0x533E, 0xB0D0, 0x533F, 0xB0CE, 0x5340, 0xB0CF, + 0x5341, 0xA2CC, 0x5341, 0xA451, 0x5343, 0xA464, 0x5344, 0xA2CD, 0x5345, 0xA2CE, 0x5345, 0xA4CA, 0x5347, 0xA4C9, 0x5348, 0xA4C8, + 0x5349, 0xA563, 0x534A, 0xA562, 0x534C, 0xC96D, 0x534D, 0xC9C3, 0x5351, 0xA8F5, 0x5352, 0xA8F2, 0x5353, 0xA8F4, 0x5354, 0xA8F3, + 0x5357, 0xAB6E, 0x535A, 0xB3D5, 0x535C, 0xA452, 0x535E, 0xA4CB, 0x5360, 0xA565, 0x5361, 0xA564, 0x5363, 0xCA72, 0x5366, 0xA8F6, + 0x536C, 0xC957, 0x536E, 0xA567, 0x536F, 0xA566, 0x5370, 0xA64C, 0x5371, 0xA64D, 0x5372, 0xCA73, 0x5373, 0xA759, 0x5375, 0xA75A, + 0x5377, 0xA8F7, 0x5378, 0xA8F8, 0x5379, 0xA8F9, 0x537B, 0xAB6F, 0x537C, 0xCDF5, 0x537F, 0xADEB, 0x5382, 0xC944, 0x5384, 0xA4CC, + 0x538A, 0xC9C4, 0x538E, 0xCA74, 0x538F, 0xCA75, 0x5392, 0xCBD9, 0x5394, 0xCBDA, 0x5396, 0xCDF7, 0x5397, 0xCDF6, 0x5398, 0xCDF9, + 0x5399, 0xCDF8, 0x539A, 0xAB70, 0x539C, 0xD470, 0x539D, 0xADED, 0x539E, 0xD0EF, 0x539F, 0xADEC, 0x53A4, 0xD864, 0x53A5, 0xB3D6, + 0x53A7, 0xD865, 0x53AC, 0xE146, 0x53AD, 0xB9BD, 0x53B2, 0xBC46, 0x53B4, 0xF1EF, 0x53B9, 0xC958, 0x53BB, 0xA568, 0x53C3, 0xB0D1, + 0x53C8, 0xA453, 0x53C9, 0xA465, 0x53CA, 0xA4CE, 0x53CB, 0xA4CD, 0x53CD, 0xA4CF, 0x53D4, 0xA8FB, 0x53D6, 0xA8FA, 0x53D7, 0xA8FC, + 0x53DB, 0xAB71, 0x53DF, 0xADEE, 0x53E1, 0xE8FB, 0x53E2, 0xC24F, 0x53E3, 0xA466, 0x53E4, 0xA56A, 0x53E5, 0xA579, 0x53E6, 0xA574, + 0x53E8, 0xA56F, 0x53E9, 0xA56E, 0x53EA, 0xA575, 0x53EB, 0xA573, 0x53EC, 0xA56C, 0x53ED, 0xA57A, 0x53EE, 0xA56D, 0x53EF, 0xA569, + 0x53F0, 0xA578, 0x53F1, 0xA577, 0x53F2, 0xA576, 0x53F3, 0xA56B, 0x53F5, 0xA572, 0x53F8, 0xA571, 0x53FB, 0xA57B, 0x53FC, 0xA570, + 0x5401, 0xA653, 0x5403, 0xA659, 0x5404, 0xA655, 0x5406, 0xA65B, 0x5407, 0xC9C5, 0x5408, 0xA658, 0x5409, 0xA64E, 0x540A, 0xA651, + 0x540B, 0xA654, 0x540C, 0xA650, 0x540D, 0xA657, 0x540E, 0xA65A, 0x540F, 0xA64F, 0x5410, 0xA652, 0x5411, 0xA656, 0x5412, 0xA65C, + 0x5418, 0xCA7E, 0x5419, 0xCA7B, 0x541B, 0xA767, 0x541C, 0xCA7C, 0x541D, 0xA75B, 0x541E, 0xA75D, 0x541F, 0xA775, 0x5420, 0xA770, + 0x5424, 0xCAA5, 0x5425, 0xCA7D, 0x5426, 0xA75F, 0x5427, 0xA761, 0x5428, 0xCAA4, 0x5429, 0xA768, 0x542A, 0xCA78, 0x542B, 0xA774, + 0x542C, 0xA776, 0x542D, 0xA75C, 0x542E, 0xA76D, 0x5430, 0xCA76, 0x5431, 0xA773, 0x5433, 0xA764, 0x5435, 0xA76E, 0x5436, 0xA76F, + 0x5437, 0xCA77, 0x5438, 0xA76C, 0x5439, 0xA76A, 0x543B, 0xA76B, 0x543C, 0xA771, 0x543D, 0xCAA1, 0x543E, 0xA75E, 0x5440, 0xA772, + 0x5441, 0xCAA3, 0x5442, 0xA766, 0x5443, 0xA763, 0x5445, 0xCA7A, 0x5446, 0xA762, 0x5447, 0xCAA6, 0x5448, 0xA765, 0x544A, 0xA769, + 0x544E, 0xA760, 0x544F, 0xCAA2, 0x5454, 0xCA79, 0x5460, 0xCBEB, 0x5461, 0xCBEA, 0x5462, 0xA94F, 0x5463, 0xCBED, 0x5464, 0xCBEF, + 0x5465, 0xCBE4, 0x5466, 0xCBE7, 0x5467, 0xCBEE, 0x5468, 0xA950, 0x546B, 0xCBE1, 0x546C, 0xCBE5, 0x546F, 0xCBE9, 0x5470, 0xCE49, + 0x5471, 0xA94B, 0x5472, 0xCE4D, 0x5473, 0xA8FD, 0x5474, 0xCBE6, 0x5475, 0xA8FE, 0x5476, 0xA94C, 0x5477, 0xA945, 0x5478, 0xA941, + 0x547A, 0xCBE2, 0x547B, 0xA944, 0x547C, 0xA949, 0x547D, 0xA952, 0x547E, 0xCBE3, 0x547F, 0xCBDC, 0x5480, 0xA943, 0x5481, 0xCBDD, + 0x5482, 0xCBDF, 0x5484, 0xA946, 0x5486, 0xA948, 0x5487, 0xCBDB, 0x5488, 0xCBE0, 0x548B, 0xA951, 0x548C, 0xA94D, 0x548D, 0xCBE8, + 0x548E, 0xA953, 0x5490, 0xA94A, 0x5491, 0xCBDE, 0x5492, 0xA947, 0x5495, 0xA942, 0x5496, 0xA940, 0x5498, 0xCBEC, 0x549A, 0xA94E, + 0x54A0, 0xCE48, 0x54A1, 0xCDFB, 0x54A2, 0xCE4B, 0x54A5, 0xCDFD, 0x54A6, 0xAB78, 0x54A7, 0xABA8, 0x54A8, 0xAB74, 0x54A9, 0xABA7, + 0x54AA, 0xAB7D, 0x54AB, 0xABA4, 0x54AC, 0xAB72, 0x54AD, 0xCDFC, 0x54AE, 0xCE43, 0x54AF, 0xABA3, 0x54B0, 0xCE4F, 0x54B1, 0xABA5, + 0x54B3, 0xAB79, 0x54B6, 0xCE45, 0x54B7, 0xCE42, 0x54B8, 0xAB77, 0x54BA, 0xCDFA, 0x54BB, 0xABA6, 0x54BC, 0xCE4A, 0x54BD, 0xAB7C, + 0x54BE, 0xCE4C, 0x54BF, 0xABA9, 0x54C0, 0xAB73, 0x54C1, 0xAB7E, 0x54C2, 0xAB7B, 0x54C3, 0xCE40, 0x54C4, 0xABA1, 0x54C5, 0xCE46, + 0x54C6, 0xCE47, 0x54C7, 0xAB7A, 0x54C8, 0xABA2, 0x54C9, 0xAB76, 0x54CE, 0xAB75, 0x54CF, 0xCDFE, 0x54D6, 0xCE44, 0x54DE, 0xCE4E, + 0x54E0, 0xD144, 0x54E1, 0xADFB, 0x54E2, 0xD0F1, 0x54E4, 0xD0F6, 0x54E5, 0xADF4, 0x54E6, 0xAE40, 0x54E7, 0xD0F4, 0x54E8, 0xADEF, + 0x54E9, 0xADF9, 0x54EA, 0xADFE, 0x54EB, 0xD0FB, 0x54ED, 0xADFA, 0x54EE, 0xADFD, 0x54F1, 0xD0FE, 0x54F2, 0xADF5, 0x54F3, 0xD0F5, + 0x54F7, 0xD142, 0x54F8, 0xD143, 0x54FA, 0xADF7, 0x54FB, 0xD141, 0x54FC, 0xADF3, 0x54FD, 0xAE43, 0x54FF, 0xD0F8, 0x5501, 0xADF1, + 0x5503, 0xD146, 0x5504, 0xD0F9, 0x5505, 0xD0FD, 0x5506, 0xADF6, 0x5507, 0xAE42, 0x5508, 0xD0FA, 0x5509, 0xADFC, 0x550A, 0xD140, + 0x550B, 0xD147, 0x550C, 0xD4A1, 0x550E, 0xD145, 0x550F, 0xAE44, 0x5510, 0xADF0, 0x5511, 0xD0FC, 0x5512, 0xD0F3, 0x5514, 0xADF8, + 0x5517, 0xD0F2, 0x551A, 0xD0F7, 0x5526, 0xD0F0, 0x5527, 0xAE41, 0x552A, 0xD477, 0x552C, 0xB0E4, 0x552D, 0xD4A7, 0x552E, 0xB0E2, + 0x552F, 0xB0DF, 0x5530, 0xD47C, 0x5531, 0xB0DB, 0x5532, 0xD4A2, 0x5533, 0xB0E6, 0x5534, 0xD476, 0x5535, 0xD47B, 0x5536, 0xD47A, + 0x5537, 0xADF2, 0x5538, 0xB0E1, 0x5539, 0xD4A5, 0x553B, 0xD4A8, 0x553C, 0xD473, 0x553E, 0xB3E8, 0x5540, 0xD4A9, 0x5541, 0xB0E7, + 0x5543, 0xB0D9, 0x5544, 0xB0D6, 0x5545, 0xD47E, 0x5546, 0xB0D3, 0x5548, 0xD4A6, 0x554A, 0xB0DA, 0x554B, 0xD4AA, 0x554D, 0xD474, + 0x554E, 0xD4A4, 0x554F, 0xB0DD, 0x5550, 0xD475, 0x5551, 0xD478, 0x5552, 0xD47D, 0x5555, 0xB0DE, 0x5556, 0xB0DC, 0x5557, 0xB0E8, + 0x555C, 0xB0E3, 0x555E, 0xB0D7, 0x555F, 0xB1D2, 0x5561, 0xB0D8, 0x5562, 0xD479, 0x5563, 0xB0E5, 0x5564, 0xB0E0, 0x5565, 0xD4A3, + 0x5566, 0xB0D5, 0x556A, 0xB0D4, 0x5575, 0xD471, 0x5576, 0xD472, 0x5577, 0xD86A, 0x557B, 0xB3D7, 0x557C, 0xB3DA, 0x557D, 0xD875, + 0x557E, 0xB3EE, 0x557F, 0xD878, 0x5580, 0xB3D8, 0x5581, 0xD871, 0x5582, 0xB3DE, 0x5583, 0xB3E4, 0x5584, 0xB5BD, 0x5587, 0xB3E2, + 0x5588, 0xD86E, 0x5589, 0xB3EF, 0x558A, 0xB3DB, 0x558B, 0xB3E3, 0x558C, 0xD876, 0x558D, 0xDCD7, 0x558E, 0xD87B, 0x558F, 0xD86F, + 0x5591, 0xD866, 0x5592, 0xD873, 0x5593, 0xD86D, 0x5594, 0xB3E1, 0x5595, 0xD879, 0x5598, 0xB3DD, 0x5599, 0xB3F1, 0x559A, 0xB3EA, + 0x559C, 0xB3DF, 0x559D, 0xB3DC, 0x559F, 0xB3E7, 0x55A1, 0xD87A, 0x55A2, 0xD86C, 0x55A3, 0xD872, 0x55A4, 0xD874, 0x55A5, 0xD868, + 0x55A6, 0xD877, 0x55A7, 0xB3D9, 0x55A8, 0xD867, 0x55AA, 0xB3E0, 0x55AB, 0xB3F0, 0x55AC, 0xB3EC, 0x55AD, 0xD869, 0x55AE, 0xB3E6, + 0x55B1, 0xB3ED, 0x55B2, 0xB3E9, 0x55B3, 0xB3E5, 0x55B5, 0xD870, 0x55BB, 0xB3EB, 0x55BF, 0xDCD5, 0x55C0, 0xDCD1, 0x55C2, 0xDCE0, + 0x55C3, 0xDCCA, 0x55C4, 0xDCD3, 0x55C5, 0xB6E5, 0x55C6, 0xB6E6, 0x55C7, 0xB6DE, 0x55C8, 0xDCDC, 0x55C9, 0xB6E8, 0x55CA, 0xDCCF, + 0x55CB, 0xDCCE, 0x55CC, 0xDCCC, 0x55CD, 0xDCDE, 0x55CE, 0xB6DC, 0x55CF, 0xDCD8, 0x55D0, 0xDCCD, 0x55D1, 0xB6DF, 0x55D2, 0xDCD6, + 0x55D3, 0xB6DA, 0x55D4, 0xDCD2, 0x55D5, 0xDCD9, 0x55D6, 0xDCDB, 0x55D9, 0xDCDF, 0x55DA, 0xB6E3, 0x55DB, 0xDCCB, 0x55DC, 0xB6DD, + 0x55DD, 0xDCD0, 0x55DF, 0xB6D8, 0x55E1, 0xB6E4, 0x55E2, 0xDCDA, 0x55E3, 0xB6E0, 0x55E4, 0xB6E1, 0x55E5, 0xB6E7, 0x55E6, 0xB6DB, + 0x55E7, 0xA25F, 0x55E8, 0xB6D9, 0x55E9, 0xDCD4, 0x55EF, 0xB6E2, 0x55F2, 0xDCDD, 0x55F6, 0xB9CD, 0x55F7, 0xB9C8, 0x55F9, 0xE155, + 0x55FA, 0xE151, 0x55FC, 0xE14B, 0x55FD, 0xB9C2, 0x55FE, 0xB9BE, 0x55FF, 0xE154, 0x5600, 0xB9BF, 0x5601, 0xE14E, 0x5602, 0xE150, + 0x5604, 0xE153, 0x5606, 0xB9C4, 0x5608, 0xB9CB, 0x5609, 0xB9C5, 0x560C, 0xE149, 0x560D, 0xB9C6, 0x560E, 0xB9C7, 0x560F, 0xE14C, + 0x5610, 0xB9CC, 0x5612, 0xE14A, 0x5613, 0xE14F, 0x5614, 0xB9C3, 0x5615, 0xE148, 0x5616, 0xB9C9, 0x5617, 0xB9C1, 0x561B, 0xB9C0, + 0x561C, 0xE14D, 0x561D, 0xE152, 0x561F, 0xB9CA, 0x5627, 0xE147, 0x5629, 0xBC4D, 0x562A, 0xE547, 0x562C, 0xE544, 0x562E, 0xBC47, + 0x562F, 0xBC53, 0x5630, 0xBC54, 0x5632, 0xBC4A, 0x5633, 0xE542, 0x5634, 0xBC4C, 0x5635, 0xE4F9, 0x5636, 0xBC52, 0x5638, 0xE546, + 0x5639, 0xBC49, 0x563A, 0xE548, 0x563B, 0xBC48, 0x563D, 0xE543, 0x563E, 0xE545, 0x563F, 0xBC4B, 0x5640, 0xE541, 0x5641, 0xE4FA, + 0x5642, 0xE4F7, 0x5645, 0xD86B, 0x5646, 0xE4FD, 0x5648, 0xE4F6, 0x5649, 0xE4FC, 0x564A, 0xE4FB, 0x564C, 0xE4F8, 0x564E, 0xBC4F, + 0x5653, 0xBC4E, 0x5657, 0xBC50, 0x5658, 0xE4FE, 0x5659, 0xBEB2, 0x565A, 0xE540, 0x565E, 0xE945, 0x5660, 0xE8FD, 0x5662, 0xBEBE, + 0x5663, 0xE942, 0x5664, 0xBEB6, 0x5665, 0xBEBA, 0x5666, 0xE941, 0x5668, 0xBEB9, 0x5669, 0xBEB5, 0x566A, 0xBEB8, 0x566B, 0xBEB3, + 0x566C, 0xBEBD, 0x566D, 0xE943, 0x566E, 0xE8FE, 0x566F, 0xBEBC, 0x5670, 0xE8FC, 0x5671, 0xBEBB, 0x5672, 0xE944, 0x5673, 0xE940, + 0x5674, 0xBC51, 0x5676, 0xBEBF, 0x5677, 0xE946, 0x5678, 0xBEB7, 0x5679, 0xBEB4, 0x567E, 0xECC6, 0x567F, 0xECC8, 0x5680, 0xC07B, + 0x5681, 0xECC9, 0x5682, 0xECC7, 0x5683, 0xECC5, 0x5684, 0xECC4, 0x5685, 0xC07D, 0x5686, 0xECC3, 0x5687, 0xC07E, 0x568C, 0xECC1, + 0x568D, 0xECC2, 0x568E, 0xC07A, 0x568F, 0xC0A1, 0x5690, 0xC07C, 0x5693, 0xECC0, 0x5695, 0xC250, 0x5697, 0xEFBC, 0x5698, 0xEFBA, + 0x5699, 0xEFBF, 0x569A, 0xEFBD, 0x569C, 0xEFBB, 0x569D, 0xEFBE, 0x56A5, 0xC360, 0x56A6, 0xF1F2, 0x56A7, 0xF1F3, 0x56A8, 0xC456, + 0x56AA, 0xF1F4, 0x56AB, 0xF1F0, 0x56AC, 0xF1F5, 0x56AD, 0xF1F1, 0x56AE, 0xC251, 0x56B2, 0xF3FE, 0x56B3, 0xF441, 0x56B4, 0xC459, + 0x56B5, 0xF440, 0x56B6, 0xC458, 0x56B7, 0xC457, 0x56BC, 0xC45A, 0x56BD, 0xF5C5, 0x56BE, 0xF5C6, 0x56C0, 0xC4DA, 0x56C1, 0xC4D9, + 0x56C2, 0xC4DB, 0x56C3, 0xF5C4, 0x56C5, 0xF6D8, 0x56C6, 0xF6D7, 0x56C8, 0xC56D, 0x56C9, 0xC56F, 0x56CA, 0xC56E, 0x56CB, 0xF6D9, + 0x56CC, 0xC5C8, 0x56CD, 0xF8A6, 0x56D1, 0xC5F1, 0x56D3, 0xF8A5, 0x56D4, 0xF8EE, 0x56D7, 0xC949, 0x56DA, 0xA57D, 0x56DB, 0xA57C, + 0x56DD, 0xA65F, 0x56DE, 0xA65E, 0x56DF, 0xC9C7, 0x56E0, 0xA65D, 0x56E1, 0xC9C6, 0x56E4, 0xA779, 0x56E5, 0xCAA9, 0x56E7, 0xCAA8, + 0x56EA, 0xA777, 0x56EB, 0xA77A, 0x56EE, 0xCAA7, 0x56F0, 0xA778, 0x56F7, 0xCBF0, 0x56F9, 0xCBF1, 0x56FA, 0xA954, 0x56FF, 0xABAA, + 0x5701, 0xD148, 0x5702, 0xD149, 0x5703, 0xAE45, 0x5704, 0xAE46, 0x5707, 0xD4AC, 0x5708, 0xB0E9, 0x5709, 0xB0EB, 0x570A, 0xD4AB, + 0x570B, 0xB0EA, 0x570C, 0xD87C, 0x570D, 0xB3F2, 0x5712, 0xB6E9, 0x5713, 0xB6EA, 0x5714, 0xDCE1, 0x5716, 0xB9CF, 0x5718, 0xB9CE, + 0x571A, 0xE549, 0x571B, 0xE948, 0x571C, 0xE947, 0x571E, 0xF96B, 0x571F, 0xA467, 0x5720, 0xC959, 0x5722, 0xC96E, 0x5723, 0xC96F, + 0x5728, 0xA662, 0x5729, 0xA666, 0x572A, 0xC9C9, 0x572C, 0xA664, 0x572D, 0xA663, 0x572E, 0xC9C8, 0x572F, 0xA665, 0x5730, 0xA661, + 0x5733, 0xA660, 0x5734, 0xC9CA, 0x573B, 0xA7A6, 0x573E, 0xA7A3, 0x5740, 0xA77D, 0x5741, 0xCAAA, 0x5745, 0xCAAB, 0x5747, 0xA7A1, + 0x5749, 0xCAAD, 0x574A, 0xA77B, 0x574B, 0xCAAE, 0x574C, 0xCAAC, 0x574D, 0xA77E, 0x574E, 0xA7A2, 0x574F, 0xA7A5, 0x5750, 0xA7A4, + 0x5751, 0xA77C, 0x5752, 0xCAAF, 0x5761, 0xA959, 0x5762, 0xCBFE, 0x5764, 0xA95B, 0x5766, 0xA95A, 0x5768, 0xCC40, 0x5769, 0xA958, + 0x576A, 0xA957, 0x576B, 0xCBF5, 0x576D, 0xCBF4, 0x576F, 0xCBF2, 0x5770, 0xCBF7, 0x5771, 0xCBF6, 0x5772, 0xCBF3, 0x5773, 0xCBFC, + 0x5774, 0xCBFD, 0x5775, 0xCBFA, 0x5776, 0xCBF8, 0x5777, 0xA956, 0x577B, 0xCBFB, 0x577C, 0xA95C, 0x577D, 0xCC41, 0x5780, 0xCBF9, + 0x5782, 0xABAB, 0x5783, 0xA955, 0x578B, 0xABAC, 0x578C, 0xCE54, 0x578F, 0xCE5A, 0x5793, 0xABB2, 0x5794, 0xCE58, 0x5795, 0xCE5E, + 0x5797, 0xCE55, 0x5798, 0xCE59, 0x5799, 0xCE5B, 0x579A, 0xCE5D, 0x579B, 0xCE57, 0x579D, 0xCE56, 0x579E, 0xCE51, 0x579F, 0xCE52, + 0x57A0, 0xABAD, 0x57A2, 0xABAF, 0x57A3, 0xABAE, 0x57A4, 0xCE53, 0x57A5, 0xCE5C, 0x57AE, 0xABB1, 0x57B5, 0xCE50, 0x57B6, 0xD153, + 0x57B8, 0xD152, 0x57B9, 0xD157, 0x57BA, 0xD14E, 0x57BC, 0xD151, 0x57BD, 0xD150, 0x57BF, 0xD154, 0x57C1, 0xD158, 0x57C2, 0xAE47, + 0x57C3, 0xAE4A, 0x57C6, 0xD14F, 0x57C7, 0xD155, 0x57CB, 0xAE49, 0x57CC, 0xD14A, 0x57CE, 0xABB0, 0x57CF, 0xD4BA, 0x57D0, 0xD156, + 0x57D2, 0xD14D, 0x57D4, 0xAE48, 0x57D5, 0xD14C, 0x57DC, 0xD4B1, 0x57DF, 0xB0EC, 0x57E0, 0xB0F0, 0x57E1, 0xD4C1, 0x57E2, 0xD4AF, + 0x57E3, 0xD4BD, 0x57E4, 0xB0F1, 0x57E5, 0xD4BF, 0x57E7, 0xD4C5, 0x57E9, 0xD4C9, 0x57EC, 0xD4C0, 0x57ED, 0xD4B4, 0x57EE, 0xD4BC, + 0x57F0, 0xD4CA, 0x57F1, 0xD4C8, 0x57F2, 0xD4BE, 0x57F3, 0xD4B9, 0x57F4, 0xD4B2, 0x57F5, 0xD8A6, 0x57F6, 0xD4B0, 0x57F7, 0xB0F5, + 0x57F8, 0xD4B7, 0x57F9, 0xB0F6, 0x57FA, 0xB0F2, 0x57FB, 0xD4AD, 0x57FC, 0xD4C3, 0x57FD, 0xD4B5, 0x5800, 0xD4B3, 0x5801, 0xD4C6, + 0x5802, 0xB0F3, 0x5804, 0xD4CC, 0x5805, 0xB0ED, 0x5806, 0xB0EF, 0x5807, 0xD4BB, 0x5808, 0xD4B6, 0x5809, 0xAE4B, 0x580A, 0xB0EE, + 0x580B, 0xD4B8, 0x580C, 0xD4C7, 0x580D, 0xD4CB, 0x580E, 0xD4C2, 0x5810, 0xD4C4, 0x5814, 0xD4AE, 0x5819, 0xD8A1, 0x581B, 0xD8AA, + 0x581C, 0xD8A9, 0x581D, 0xB3FA, 0x581E, 0xD8A2, 0x5820, 0xB3FB, 0x5821, 0xB3F9, 0x5823, 0xD8A4, 0x5824, 0xB3F6, 0x5825, 0xD8A8, + 0x5827, 0xD8A3, 0x5828, 0xD8A5, 0x5829, 0xD87D, 0x582A, 0xB3F4, 0x582C, 0xD8B2, 0x582D, 0xD8B1, 0x582E, 0xD8AE, 0x582F, 0xB3F3, + 0x5830, 0xB3F7, 0x5831, 0xB3F8, 0x5832, 0xD14B, 0x5833, 0xD8AB, 0x5834, 0xB3F5, 0x5835, 0xB0F4, 0x5836, 0xD8AD, 0x5837, 0xD87E, + 0x5838, 0xD8B0, 0x5839, 0xD8AF, 0x583B, 0xD8B3, 0x583D, 0xDCEF, 0x583F, 0xD8AC, 0x5848, 0xD8A7, 0x5849, 0xDCE7, 0x584A, 0xB6F4, + 0x584B, 0xB6F7, 0x584C, 0xB6F2, 0x584D, 0xDCE6, 0x584E, 0xDCEA, 0x584F, 0xDCE5, 0x5851, 0xB6EC, 0x5852, 0xB6F6, 0x5853, 0xDCE2, + 0x5854, 0xB6F0, 0x5855, 0xDCE9, 0x5857, 0xB6EE, 0x5858, 0xB6ED, 0x5859, 0xDCEC, 0x585A, 0xB6EF, 0x585B, 0xDCEE, 0x585D, 0xDCEB, + 0x585E, 0xB6EB, 0x5862, 0xB6F5, 0x5863, 0xDCF0, 0x5864, 0xDCE4, 0x5865, 0xDCED, 0x5868, 0xDCE3, 0x586B, 0xB6F1, 0x586D, 0xB6F3, + 0x586F, 0xDCE8, 0x5871, 0xDCF1, 0x5874, 0xE15D, 0x5875, 0xB9D0, 0x5876, 0xE163, 0x5879, 0xB9D5, 0x587A, 0xE15F, 0x587B, 0xE166, + 0x587C, 0xE157, 0x587D, 0xB9D7, 0x587E, 0xB9D1, 0x587F, 0xE15C, 0x5880, 0xBC55, 0x5881, 0xE15B, 0x5882, 0xE164, 0x5883, 0xB9D2, + 0x5885, 0xB9D6, 0x5886, 0xE15A, 0x5887, 0xE160, 0x5888, 0xE165, 0x5889, 0xE156, 0x588A, 0xB9D4, 0x588B, 0xE15E, 0x588E, 0xE162, + 0x588F, 0xE168, 0x5890, 0xE158, 0x5891, 0xE161, 0x5893, 0xB9D3, 0x5894, 0xE167, 0x5898, 0xE159, 0x589C, 0xBC59, 0x589D, 0xE54B, + 0x589E, 0xBC57, 0x589F, 0xBC56, 0x58A0, 0xE54D, 0x58A1, 0xE552, 0x58A3, 0xE54E, 0x58A5, 0xE551, 0x58A6, 0xBC5C, 0x58A8, 0xBEA5, + 0x58A9, 0xBC5B, 0x58AB, 0xE54A, 0x58AC, 0xE550, 0x58AE, 0xBC5A, 0x58AF, 0xE54F, 0x58B1, 0xE54C, 0x58B3, 0xBC58, 0x58BA, 0xE94D, + 0x58BB, 0xF9D9, 0x58BC, 0xE94F, 0x58BD, 0xE94A, 0x58BE, 0xBEC1, 0x58BF, 0xE94C, 0x58C1, 0xBEC0, 0x58C2, 0xE94E, 0x58C5, 0xBEC3, + 0x58C6, 0xE950, 0x58C7, 0xBEC2, 0x58C8, 0xE949, 0x58C9, 0xE94B, 0x58CE, 0xC0A5, 0x58CF, 0xECCC, 0x58D1, 0xC0A4, 0x58D2, 0xECCD, + 0x58D3, 0xC0A3, 0x58D4, 0xECCB, 0x58D5, 0xC0A2, 0x58D6, 0xECCA, 0x58D8, 0xC253, 0x58D9, 0xC252, 0x58DA, 0xF1F6, 0x58DB, 0xF1F8, + 0x58DD, 0xF1F7, 0x58DE, 0xC361, 0x58DF, 0xC362, 0x58E2, 0xC363, 0x58E3, 0xF442, 0x58E4, 0xC45B, 0x58E7, 0xF7D3, 0x58E8, 0xF7D2, + 0x58E9, 0xC5F2, 0x58EB, 0xA468, 0x58EC, 0xA4D0, 0x58EF, 0xA7A7, 0x58F4, 0xCE5F, 0x58F9, 0xB3FC, 0x58FA, 0xB3FD, 0x58FC, 0xDCF2, + 0x58FD, 0xB9D8, 0x58FE, 0xE169, 0x58FF, 0xE553, 0x5903, 0xC95A, 0x5906, 0xCAB0, 0x590C, 0xCC42, 0x590D, 0xCE60, 0x590E, 0xD159, + 0x590F, 0xAE4C, 0x5912, 0xF1F9, 0x5914, 0xC4DC, 0x5915, 0xA469, 0x5916, 0xA57E, 0x5917, 0xC970, 0x5919, 0xA667, 0x591A, 0xA668, + 0x591C, 0xA95D, 0x5920, 0xB0F7, 0x5922, 0xB9DA, 0x5924, 0xB9DB, 0x5925, 0xB9D9, 0x5927, 0xA46A, 0x5929, 0xA4D1, 0x592A, 0xA4D3, + 0x592B, 0xA4D2, 0x592C, 0xC95B, 0x592D, 0xA4D4, 0x592E, 0xA5A1, 0x592F, 0xC971, 0x5931, 0xA5A2, 0x5937, 0xA669, 0x5938, 0xA66A, + 0x593C, 0xC9CB, 0x593E, 0xA7A8, 0x5940, 0xCAB1, 0x5944, 0xA961, 0x5945, 0xCC43, 0x5947, 0xA95F, 0x5948, 0xA960, 0x5949, 0xA95E, + 0x594A, 0xD15A, 0x594E, 0xABB6, 0x594F, 0xABB5, 0x5950, 0xABB7, 0x5951, 0xABB4, 0x5953, 0xCE61, 0x5954, 0xA962, 0x5955, 0xABB3, + 0x5957, 0xAE4D, 0x5958, 0xAE4E, 0x595A, 0xAE4F, 0x595C, 0xD4CD, 0x5960, 0xB3FE, 0x5961, 0xD8B4, 0x5962, 0xB0F8, 0x5967, 0xB6F8, + 0x5969, 0xB9DD, 0x596A, 0xB9DC, 0x596B, 0xE16A, 0x596D, 0xBC5D, 0x596E, 0xBEC4, 0x5970, 0xEFC0, 0x5971, 0xF6DA, 0x5972, 0xF7D4, + 0x5973, 0xA46B, 0x5974, 0xA5A3, 0x5976, 0xA5A4, 0x5977, 0xC9D1, 0x5978, 0xA66C, 0x5979, 0xA66F, 0x597B, 0xC9CF, 0x597C, 0xC9CD, + 0x597D, 0xA66E, 0x597E, 0xC9D0, 0x597F, 0xC9D2, 0x5980, 0xC9CC, 0x5981, 0xA671, 0x5982, 0xA670, 0x5983, 0xA66D, 0x5984, 0xA66B, + 0x5985, 0xC9CE, 0x598A, 0xA7B3, 0x598D, 0xA7B0, 0x598E, 0xCAB6, 0x598F, 0xCAB9, 0x5990, 0xCAB8, 0x5992, 0xA7AA, 0x5993, 0xA7B2, + 0x5996, 0xA7AF, 0x5997, 0xCAB5, 0x5998, 0xCAB3, 0x5999, 0xA7AE, 0x599D, 0xA7A9, 0x599E, 0xA7AC, 0x59A0, 0xCAB4, 0x59A1, 0xCABB, + 0x59A2, 0xCAB7, 0x59A3, 0xA7AD, 0x59A4, 0xA7B1, 0x59A5, 0xA7B4, 0x59A6, 0xCAB2, 0x59A7, 0xCABA, 0x59A8, 0xA7AB, 0x59AE, 0xA967, + 0x59AF, 0xA96F, 0x59B1, 0xCC4F, 0x59B2, 0xCC48, 0x59B3, 0xA970, 0x59B4, 0xCC53, 0x59B5, 0xCC44, 0x59B6, 0xCC4B, 0x59B9, 0xA966, + 0x59BA, 0xCC45, 0x59BB, 0xA964, 0x59BC, 0xCC4C, 0x59BD, 0xCC50, 0x59BE, 0xA963, 0x59C0, 0xCC51, 0x59C1, 0xCC4A, 0x59C3, 0xCC4D, + 0x59C5, 0xA972, 0x59C6, 0xA969, 0x59C7, 0xCC54, 0x59C8, 0xCC52, 0x59CA, 0xA96E, 0x59CB, 0xA96C, 0x59CC, 0xCC49, 0x59CD, 0xA96B, + 0x59CE, 0xCC47, 0x59CF, 0xCC46, 0x59D0, 0xA96A, 0x59D1, 0xA968, 0x59D2, 0xA971, 0x59D3, 0xA96D, 0x59D4, 0xA965, 0x59D6, 0xCC4E, + 0x59D8, 0xABB9, 0x59DA, 0xABC0, 0x59DB, 0xCE6F, 0x59DC, 0xABB8, 0x59DD, 0xCE67, 0x59DE, 0xCE63, 0x59E0, 0xCE73, 0x59E1, 0xCE62, + 0x59E3, 0xABBB, 0x59E4, 0xCE6C, 0x59E5, 0xABBE, 0x59E6, 0xABC1, 0x59E8, 0xABBC, 0x59E9, 0xCE70, 0x59EA, 0xABBF, 0x59EC, 0xAE56, + 0x59ED, 0xCE76, 0x59EE, 0xCE64, 0x59F1, 0xCE66, 0x59F2, 0xCE6D, 0x59F3, 0xCE71, 0x59F4, 0xCE75, 0x59F5, 0xCE72, 0x59F6, 0xCE6B, + 0x59F7, 0xCE6E, 0x59FA, 0xCE68, 0x59FB, 0xABC3, 0x59FC, 0xCE6A, 0x59FD, 0xCE69, 0x59FE, 0xCE74, 0x59FF, 0xABBA, 0x5A00, 0xCE65, + 0x5A01, 0xABC2, 0x5A03, 0xABBD, 0x5A09, 0xAE5C, 0x5A0A, 0xD162, 0x5A0C, 0xAE5B, 0x5A0F, 0xD160, 0x5A11, 0xAE50, 0x5A13, 0xAE55, + 0x5A15, 0xD15F, 0x5A16, 0xD15C, 0x5A17, 0xD161, 0x5A18, 0xAE51, 0x5A19, 0xD15B, 0x5A1B, 0xAE54, 0x5A1C, 0xAE52, 0x5A1E, 0xD163, + 0x5A1F, 0xAE53, 0x5A20, 0xAE57, 0x5A23, 0xAE58, 0x5A25, 0xAE5A, 0x5A29, 0xAE59, 0x5A2D, 0xD15D, 0x5A2E, 0xD15E, 0x5A33, 0xD164, + 0x5A35, 0xD4D4, 0x5A36, 0xB0F9, 0x5A37, 0xD8C2, 0x5A38, 0xD4D3, 0x5A39, 0xD4E6, 0x5A3C, 0xB140, 0x5A3E, 0xD4E4, 0x5A40, 0xB0FE, + 0x5A41, 0xB0FA, 0x5A42, 0xD4ED, 0x5A43, 0xD4DD, 0x5A44, 0xD4E0, 0x5A46, 0xB143, 0x5A47, 0xD4EA, 0x5A48, 0xD4E2, 0x5A49, 0xB0FB, + 0x5A4A, 0xB144, 0x5A4C, 0xD4E7, 0x5A4D, 0xD4E5, 0x5A50, 0xD4D6, 0x5A51, 0xD4EB, 0x5A52, 0xD4DF, 0x5A53, 0xD4DA, 0x5A55, 0xD4D0, + 0x5A56, 0xD4EC, 0x5A57, 0xD4DC, 0x5A58, 0xD4CF, 0x5A5A, 0xB142, 0x5A5B, 0xD4E1, 0x5A5C, 0xD4EE, 0x5A5D, 0xD4DE, 0x5A5E, 0xD4D2, + 0x5A5F, 0xD4D7, 0x5A60, 0xD4CE, 0x5A62, 0xB141, 0x5A64, 0xD4DB, 0x5A65, 0xD4D8, 0x5A66, 0xB0FC, 0x5A67, 0xD4D1, 0x5A69, 0xD4E9, + 0x5A6A, 0xB0FD, 0x5A6C, 0xD4D9, 0x5A6D, 0xD4D5, 0x5A70, 0xD4E8, 0x5A77, 0xB440, 0x5A78, 0xD8BB, 0x5A7A, 0xD8B8, 0x5A7B, 0xD8C9, + 0x5A7C, 0xD8BD, 0x5A7D, 0xD8CA, 0x5A7F, 0xB442, 0x5A83, 0xD8C6, 0x5A84, 0xD8C3, 0x5A8A, 0xD8C4, 0x5A8B, 0xD8C7, 0x5A8C, 0xD8CB, + 0x5A8E, 0xD4E3, 0x5A8F, 0xD8CD, 0x5A90, 0xDD47, 0x5A92, 0xB443, 0x5A93, 0xD8CE, 0x5A94, 0xD8B6, 0x5A95, 0xD8C0, 0x5A97, 0xD8C5, + 0x5A9A, 0xB441, 0x5A9B, 0xB444, 0x5A9C, 0xD8CC, 0x5A9D, 0xD8CF, 0x5A9E, 0xD8BA, 0x5A9F, 0xD8B7, 0x5AA2, 0xD8B9, 0x5AA5, 0xD8BE, + 0x5AA6, 0xD8BC, 0x5AA7, 0xB445, 0x5AA9, 0xD8C8, 0x5AAC, 0xD8BF, 0x5AAE, 0xD8C1, 0x5AAF, 0xD8B5, 0x5AB0, 0xDCFA, 0x5AB1, 0xDCF8, + 0x5AB2, 0xB742, 0x5AB3, 0xB740, 0x5AB4, 0xDD43, 0x5AB5, 0xDCF9, 0x5AB6, 0xDD44, 0x5AB7, 0xDD40, 0x5AB8, 0xDCF7, 0x5AB9, 0xDD46, + 0x5ABA, 0xDCF6, 0x5ABB, 0xDCFD, 0x5ABC, 0xB6FE, 0x5ABD, 0xB6FD, 0x5ABE, 0xB6FC, 0x5ABF, 0xDCFB, 0x5AC0, 0xDD41, 0x5AC1, 0xB6F9, + 0x5AC2, 0xB741, 0x5AC4, 0xDCF4, 0x5AC6, 0xDCFE, 0x5AC7, 0xDCF3, 0x5AC8, 0xDCFC, 0x5AC9, 0xB6FA, 0x5ACA, 0xDD42, 0x5ACB, 0xDCF5, + 0x5ACC, 0xB6FB, 0x5ACD, 0xDD45, 0x5AD5, 0xE16E, 0x5AD6, 0xB9E2, 0x5AD7, 0xB9E1, 0x5AD8, 0xB9E3, 0x5AD9, 0xE17A, 0x5ADA, 0xE170, + 0x5ADB, 0xE176, 0x5ADC, 0xE16B, 0x5ADD, 0xE179, 0x5ADE, 0xE178, 0x5ADF, 0xE17C, 0x5AE0, 0xE175, 0x5AE1, 0xB9DE, 0x5AE2, 0xE174, + 0x5AE3, 0xB9E4, 0x5AE5, 0xE16D, 0x5AE6, 0xB9DF, 0x5AE8, 0xE17B, 0x5AE9, 0xB9E0, 0x5AEA, 0xE16F, 0x5AEB, 0xE172, 0x5AEC, 0xE177, + 0x5AED, 0xE171, 0x5AEE, 0xE16C, 0x5AF3, 0xE173, 0x5AF4, 0xE555, 0x5AF5, 0xBC61, 0x5AF6, 0xE558, 0x5AF7, 0xE557, 0x5AF8, 0xE55A, + 0x5AF9, 0xE55C, 0x5AFA, 0xF9DC, 0x5AFB, 0xBC5F, 0x5AFD, 0xE556, 0x5AFF, 0xE554, 0x5B01, 0xE55D, 0x5B02, 0xE55B, 0x5B03, 0xE559, + 0x5B05, 0xE55F, 0x5B07, 0xE55E, 0x5B08, 0xBC63, 0x5B09, 0xBC5E, 0x5B0B, 0xBC60, 0x5B0C, 0xBC62, 0x5B0F, 0xE560, 0x5B10, 0xE957, + 0x5B13, 0xE956, 0x5B14, 0xE955, 0x5B16, 0xE958, 0x5B17, 0xE951, 0x5B19, 0xE952, 0x5B1A, 0xE95A, 0x5B1B, 0xE953, 0x5B1D, 0xBEC5, + 0x5B1E, 0xE95C, 0x5B20, 0xE95B, 0x5B21, 0xE954, 0x5B23, 0xECD1, 0x5B24, 0xC0A8, 0x5B25, 0xECCF, 0x5B26, 0xECD4, 0x5B27, 0xECD3, + 0x5B28, 0xE959, 0x5B2A, 0xC0A7, 0x5B2C, 0xECD2, 0x5B2D, 0xECCE, 0x5B2E, 0xECD6, 0x5B2F, 0xECD5, 0x5B30, 0xC0A6, 0x5B32, 0xECD0, + 0x5B34, 0xBEC6, 0x5B38, 0xC254, 0x5B3C, 0xEFC1, 0x5B3D, 0xF1FA, 0x5B3E, 0xF1FB, 0x5B3F, 0xF1FC, 0x5B40, 0xC45C, 0x5B43, 0xC45D, + 0x5B45, 0xF443, 0x5B47, 0xF5C8, 0x5B48, 0xF5C7, 0x5B4B, 0xF6DB, 0x5B4C, 0xF6DC, 0x5B4D, 0xF7D5, 0x5B4E, 0xF8A7, 0x5B50, 0xA46C, + 0x5B51, 0xA46D, 0x5B53, 0xA46E, 0x5B54, 0xA4D5, 0x5B55, 0xA5A5, 0x5B56, 0xC9D3, 0x5B57, 0xA672, 0x5B58, 0xA673, 0x5B5A, 0xA7B7, + 0x5B5B, 0xA7B8, 0x5B5C, 0xA7B6, 0x5B5D, 0xA7B5, 0x5B5F, 0xA973, 0x5B62, 0xCC55, 0x5B63, 0xA975, 0x5B64, 0xA974, 0x5B65, 0xCC56, + 0x5B69, 0xABC4, 0x5B6B, 0xAE5D, 0x5B6C, 0xD165, 0x5B6E, 0xD4F0, 0x5B70, 0xB145, 0x5B71, 0xB447, 0x5B72, 0xD4EF, 0x5B73, 0xB446, + 0x5B75, 0xB9E5, 0x5B77, 0xE17D, 0x5B78, 0xBEC7, 0x5B7A, 0xC0A9, 0x5B7B, 0xECD7, 0x5B7D, 0xC45E, 0x5B7F, 0xC570, 0x5B81, 0xC972, + 0x5B83, 0xA5A6, 0x5B84, 0xC973, 0x5B85, 0xA676, 0x5B87, 0xA674, 0x5B88, 0xA675, 0x5B89, 0xA677, 0x5B8B, 0xA7BA, 0x5B8C, 0xA7B9, + 0x5B8E, 0xCABC, 0x5B8F, 0xA7BB, 0x5B92, 0xCABD, 0x5B93, 0xCC57, 0x5B95, 0xCC58, 0x5B97, 0xA976, 0x5B98, 0xA978, 0x5B99, 0xA97A, + 0x5B9A, 0xA977, 0x5B9B, 0xA97B, 0x5B9C, 0xA979, 0x5BA2, 0xABC8, 0x5BA3, 0xABC5, 0x5BA4, 0xABC7, 0x5BA5, 0xABC9, 0x5BA6, 0xABC6, + 0x5BA7, 0xD166, 0x5BA8, 0xCE77, 0x5BAC, 0xD168, 0x5BAD, 0xD167, 0x5BAE, 0xAE63, 0x5BB0, 0xAE5F, 0x5BB3, 0xAE60, 0x5BB4, 0xAE62, + 0x5BB5, 0xAE64, 0x5BB6, 0xAE61, 0x5BB8, 0xAE66, 0x5BB9, 0xAE65, 0x5BBF, 0xB14A, 0x5BC0, 0xD4F2, 0x5BC1, 0xD4F1, 0x5BC2, 0xB149, + 0x5BC4, 0xB148, 0x5BC5, 0xB147, 0x5BC6, 0xB14B, 0x5BC7, 0xB146, 0x5BCA, 0xD8D5, 0x5BCB, 0xD8D2, 0x5BCC, 0xB449, 0x5BCD, 0xD8D1, + 0x5BCE, 0xD8D6, 0x5BD0, 0xB44B, 0x5BD1, 0xD8D4, 0x5BD2, 0xB448, 0x5BD3, 0xB44A, 0x5BD4, 0xD8D3, 0x5BD6, 0xDD48, 0x5BD8, 0xDD49, + 0x5BD9, 0xDD4A, 0x5BDE, 0xB9E6, 0x5BDF, 0xB9EE, 0x5BE0, 0xE17E, 0x5BE1, 0xB9E8, 0x5BE2, 0xB9EC, 0x5BE3, 0xE1A1, 0x5BE4, 0xB9ED, + 0x5BE5, 0xB9E9, 0x5BE6, 0xB9EA, 0x5BE7, 0xB9E7, 0x5BE8, 0xB9EB, 0x5BE9, 0xBC66, 0x5BEA, 0xD8D0, 0x5BEB, 0xBC67, 0x5BEC, 0xBC65, + 0x5BEE, 0xBC64, 0x5BEF, 0xE95D, 0x5BF0, 0xBEC8, 0x5BF1, 0xECD8, 0x5BF2, 0xECD9, 0x5BF5, 0xC364, 0x5BF6, 0xC45F, 0x5BF8, 0xA46F, + 0x5BFA, 0xA678, 0x5C01, 0xABCA, 0x5C03, 0xD169, 0x5C04, 0xAE67, 0x5C07, 0xB14E, 0x5C08, 0xB14D, 0x5C09, 0xB14C, 0x5C0A, 0xB44C, + 0x5C0B, 0xB44D, 0x5C0C, 0xD8D7, 0x5C0D, 0xB9EF, 0x5C0E, 0xBEC9, 0x5C0F, 0xA470, 0x5C10, 0xC95C, 0x5C11, 0xA4D6, 0x5C12, 0xC974, + 0x5C15, 0xC9D4, 0x5C16, 0xA679, 0x5C1A, 0xA97C, 0x5C1F, 0xDD4B, 0x5C22, 0xA471, 0x5C24, 0xA4D7, 0x5C25, 0xC9D5, 0x5C28, 0xCABE, + 0x5C2A, 0xCABF, 0x5C2C, 0xA7BC, 0x5C30, 0xD8D8, 0x5C31, 0xB44E, 0x5C33, 0xDD4C, 0x5C37, 0xC0AA, 0x5C38, 0xA472, 0x5C39, 0xA4A8, + 0x5C3A, 0xA4D8, 0x5C3B, 0xC975, 0x5C3C, 0xA5A7, 0x5C3E, 0xA7C0, 0x5C3F, 0xA7BF, 0x5C40, 0xA7BD, 0x5C41, 0xA7BE, 0x5C44, 0xCC59, + 0x5C45, 0xA97E, 0x5C46, 0xA9A1, 0x5C47, 0xCC5A, 0x5C48, 0xA97D, 0x5C4B, 0xABCE, 0x5C4C, 0xCE78, 0x5C4D, 0xABCD, 0x5C4E, 0xABCB, + 0x5C4F, 0xABCC, 0x5C50, 0xAE6A, 0x5C51, 0xAE68, 0x5C54, 0xD16B, 0x5C55, 0xAE69, 0x5C56, 0xD16A, 0x5C58, 0xAE5E, 0x5C59, 0xD4F3, + 0x5C5C, 0xB150, 0x5C5D, 0xB151, 0x5C60, 0xB14F, 0x5C62, 0xB9F0, 0x5C63, 0xE1A2, 0x5C64, 0xBC68, 0x5C65, 0xBC69, 0x5C67, 0xE561, + 0x5C68, 0xC0AB, 0x5C69, 0xEFC2, 0x5C6A, 0xEFC3, 0x5C6C, 0xC4DD, 0x5C6D, 0xF8A8, 0x5C6E, 0xC94B, 0x5C6F, 0xA4D9, 0x5C71, 0xA473, + 0x5C73, 0xC977, 0x5C74, 0xC976, 0x5C79, 0xA67A, 0x5C7A, 0xC9D7, 0x5C7B, 0xC9D8, 0x5C7C, 0xC9D6, 0x5C7E, 0xC9D9, 0x5C86, 0xCAC7, + 0x5C88, 0xCAC2, 0x5C89, 0xCAC4, 0x5C8A, 0xCAC6, 0x5C8B, 0xCAC3, 0x5C8C, 0xA7C4, 0x5C8D, 0xCAC0, 0x5C8F, 0xCAC1, 0x5C90, 0xA7C1, + 0x5C91, 0xA7C2, 0x5C92, 0xCAC5, 0x5C93, 0xCAC8, 0x5C94, 0xA7C3, 0x5C95, 0xCAC9, 0x5C9D, 0xCC68, 0x5C9F, 0xCC62, 0x5CA0, 0xCC5D, + 0x5CA1, 0xA9A3, 0x5CA2, 0xCC65, 0x5CA3, 0xCC63, 0x5CA4, 0xCC5C, 0x5CA5, 0xCC69, 0x5CA6, 0xCC6C, 0x5CA7, 0xCC67, 0x5CA8, 0xCC60, + 0x5CA9, 0xA9A5, 0x5CAA, 0xCC66, 0x5CAB, 0xA9A6, 0x5CAC, 0xCC61, 0x5CAD, 0xCC64, 0x5CAE, 0xCC5B, 0x5CAF, 0xCC5F, 0x5CB0, 0xCC6B, + 0x5CB1, 0xA9A7, 0x5CB3, 0xA9A8, 0x5CB5, 0xCC5E, 0x5CB6, 0xCC6A, 0x5CB7, 0xA9A2, 0x5CB8, 0xA9A4, 0x5CC6, 0xCEAB, 0x5CC7, 0xCEA4, + 0x5CC8, 0xCEAA, 0x5CC9, 0xCEA3, 0x5CCA, 0xCEA5, 0x5CCB, 0xCE7D, 0x5CCC, 0xCE7B, 0x5CCE, 0xCEAC, 0x5CCF, 0xCEA9, 0x5CD0, 0xCE79, + 0x5CD2, 0xABD0, 0x5CD3, 0xCEA7, 0x5CD4, 0xCEA8, 0x5CD6, 0xCEA6, 0x5CD7, 0xCE7C, 0x5CD8, 0xCE7A, 0x5CD9, 0xABCF, 0x5CDA, 0xCEA2, + 0x5CDB, 0xCE7E, 0x5CDE, 0xCEA1, 0x5CDF, 0xCEAD, 0x5CE8, 0xAE6F, 0x5CEA, 0xAE6E, 0x5CEC, 0xD16C, 0x5CED, 0xAE6B, 0x5CEE, 0xD16E, + 0x5CF0, 0xAE70, 0x5CF1, 0xD16F, 0x5CF4, 0xAE73, 0x5CF6, 0xAE71, 0x5CF7, 0xD170, 0x5CF8, 0xCEAE, 0x5CF9, 0xD172, 0x5CFB, 0xAE6D, + 0x5CFD, 0xAE6C, 0x5CFF, 0xD16D, 0x5D00, 0xD171, 0x5D01, 0xAE72, 0x5D06, 0xB153, 0x5D07, 0xB152, 0x5D0B, 0xD4F5, 0x5D0C, 0xD4F9, + 0x5D0D, 0xD4FB, 0x5D0E, 0xB154, 0x5D0F, 0xD4FE, 0x5D11, 0xB158, 0x5D12, 0xD541, 0x5D14, 0xB15A, 0x5D16, 0xB156, 0x5D17, 0xB15E, + 0x5D19, 0xB15B, 0x5D1A, 0xD4F7, 0x5D1B, 0xB155, 0x5D1D, 0xD4F6, 0x5D1E, 0xD4F4, 0x5D1F, 0xD543, 0x5D20, 0xD4F8, 0x5D22, 0xB157, + 0x5D23, 0xD542, 0x5D24, 0xB15C, 0x5D25, 0xD4FD, 0x5D26, 0xD4FC, 0x5D27, 0xB15D, 0x5D28, 0xD4FA, 0x5D29, 0xB159, 0x5D2E, 0xD544, + 0x5D30, 0xD540, 0x5D31, 0xD8E7, 0x5D32, 0xD8EE, 0x5D33, 0xD8E3, 0x5D34, 0xB451, 0x5D35, 0xD8DF, 0x5D36, 0xD8EF, 0x5D37, 0xD8D9, + 0x5D38, 0xD8EC, 0x5D39, 0xD8EA, 0x5D3A, 0xD8E4, 0x5D3C, 0xD8ED, 0x5D3D, 0xD8E6, 0x5D3F, 0xD8DE, 0x5D40, 0xD8F0, 0x5D41, 0xD8DC, + 0x5D42, 0xD8E9, 0x5D43, 0xD8DA, 0x5D45, 0xD8F1, 0x5D47, 0xB452, 0x5D49, 0xD8EB, 0x5D4A, 0xDD4F, 0x5D4B, 0xD8DD, 0x5D4C, 0xB44F, + 0x5D4E, 0xD8E1, 0x5D50, 0xB450, 0x5D51, 0xD8E0, 0x5D52, 0xD8E5, 0x5D55, 0xD8E2, 0x5D59, 0xD8E8, 0x5D5E, 0xDD53, 0x5D62, 0xDD56, + 0x5D63, 0xDD4E, 0x5D65, 0xDD50, 0x5D67, 0xDD55, 0x5D68, 0xDD54, 0x5D69, 0xB743, 0x5D6B, 0xD8DB, 0x5D6C, 0xDD52, 0x5D6F, 0xB744, + 0x5D71, 0xDD4D, 0x5D72, 0xDD51, 0x5D77, 0xE1A9, 0x5D79, 0xE1B0, 0x5D7A, 0xE1A7, 0x5D7C, 0xE1AE, 0x5D7D, 0xE1A5, 0x5D7E, 0xE1AD, + 0x5D7F, 0xE1B1, 0x5D80, 0xE1A4, 0x5D81, 0xE1A8, 0x5D82, 0xE1A3, 0x5D84, 0xB9F1, 0x5D86, 0xE1A6, 0x5D87, 0xB9F2, 0x5D88, 0xE1AC, + 0x5D89, 0xE1AB, 0x5D8A, 0xE1AA, 0x5D8D, 0xE1AF, 0x5D92, 0xE565, 0x5D93, 0xE567, 0x5D94, 0xBC6B, 0x5D95, 0xE568, 0x5D97, 0xE563, + 0x5D99, 0xE562, 0x5D9A, 0xE56C, 0x5D9C, 0xE56A, 0x5D9D, 0xBC6A, 0x5D9E, 0xE56D, 0x5D9F, 0xE564, 0x5DA0, 0xE569, 0x5DA1, 0xE56B, + 0x5DA2, 0xE566, 0x5DA7, 0xE961, 0x5DA8, 0xE966, 0x5DA9, 0xE960, 0x5DAA, 0xE965, 0x5DAC, 0xE95E, 0x5DAD, 0xE968, 0x5DAE, 0xE964, + 0x5DAF, 0xE969, 0x5DB0, 0xE963, 0x5DB1, 0xE95F, 0x5DB2, 0xE967, 0x5DB4, 0xE96A, 0x5DB5, 0xE962, 0x5DB7, 0xECDA, 0x5DB8, 0xC0AF, + 0x5DBA, 0xC0AD, 0x5DBC, 0xC0AC, 0x5DBD, 0xC0AE, 0x5DC0, 0xEFC4, 0x5DC2, 0xF172, 0x5DC3, 0xF1FD, 0x5DC6, 0xF444, 0x5DC7, 0xF445, + 0x5DC9, 0xC460, 0x5DCB, 0xF5C9, 0x5DCD, 0xC4DE, 0x5DCF, 0xF5CA, 0x5DD1, 0xF6DE, 0x5DD2, 0xC572, 0x5DD4, 0xC571, 0x5DD5, 0xF6DD, + 0x5DD6, 0xC5C9, 0x5DD8, 0xF7D6, 0x5DDD, 0xA474, 0x5DDE, 0xA67B, 0x5DDF, 0xC9DA, 0x5DE0, 0xCACA, 0x5DE1, 0xA8B5, 0x5DE2, 0xB15F, + 0x5DE5, 0xA475, 0x5DE6, 0xA5AA, 0x5DE7, 0xA5A9, 0x5DE8, 0xA5A8, 0x5DEB, 0xA7C5, 0x5DEE, 0xAE74, 0x5DF0, 0xDD57, 0x5DF1, 0xA476, + 0x5DF2, 0xA477, 0x5DF3, 0xA478, 0x5DF4, 0xA4DA, 0x5DF7, 0xABD1, 0x5DF9, 0xCEAF, 0x5DFD, 0xB453, 0x5DFE, 0xA479, 0x5DFF, 0xC95D, + 0x5E02, 0xA5AB, 0x5E03, 0xA5AC, 0x5E04, 0xC978, 0x5E06, 0xA67C, 0x5E0A, 0xCACB, 0x5E0C, 0xA7C6, 0x5E0E, 0xCACC, 0x5E11, 0xA9AE, + 0x5E14, 0xCC6E, 0x5E15, 0xA9AC, 0x5E16, 0xA9AB, 0x5E17, 0xCC6D, 0x5E18, 0xA9A9, 0x5E19, 0xCC6F, 0x5E1A, 0xA9AA, 0x5E1B, 0xA9AD, + 0x5E1D, 0xABD2, 0x5E1F, 0xABD4, 0x5E20, 0xCEB3, 0x5E21, 0xCEB0, 0x5E22, 0xCEB1, 0x5E23, 0xCEB2, 0x5E24, 0xCEB4, 0x5E25, 0xABD3, + 0x5E28, 0xD174, 0x5E29, 0xD173, 0x5E2B, 0xAE76, 0x5E2D, 0xAE75, 0x5E33, 0xB162, 0x5E34, 0xD546, 0x5E36, 0xB161, 0x5E37, 0xB163, + 0x5E38, 0xB160, 0x5E3D, 0xB455, 0x5E3E, 0xD545, 0x5E40, 0xB456, 0x5E41, 0xD8F3, 0x5E43, 0xB457, 0x5E44, 0xD8F2, 0x5E45, 0xB454, + 0x5E4A, 0xDD5A, 0x5E4B, 0xDD5C, 0x5E4C, 0xB745, 0x5E4D, 0xDD5B, 0x5E4E, 0xDD59, 0x5E4F, 0xDD58, 0x5E53, 0xE1B4, 0x5E54, 0xB9F7, + 0x5E55, 0xB9F5, 0x5E57, 0xB9F6, 0x5E58, 0xE1B2, 0x5E59, 0xE1B3, 0x5E5B, 0xB9F3, 0x5E5C, 0xE571, 0x5E5D, 0xE56F, 0x5E5F, 0xBC6D, + 0x5E60, 0xE570, 0x5E61, 0xBC6E, 0x5E62, 0xBC6C, 0x5E63, 0xB9F4, 0x5E66, 0xE96D, 0x5E67, 0xE96B, 0x5E68, 0xE96C, 0x5E69, 0xE56E, + 0x5E6A, 0xECDC, 0x5E6B, 0xC0B0, 0x5E6C, 0xECDB, 0x5E6D, 0xEFC5, 0x5E6E, 0xEFC6, 0x5E6F, 0xE96E, 0x5E70, 0xF1FE, 0x5E72, 0xA47A, + 0x5E73, 0xA5AD, 0x5E74, 0xA67E, 0x5E75, 0xC9DB, 0x5E76, 0xA67D, 0x5E78, 0xA9AF, 0x5E79, 0xB746, 0x5E7B, 0xA4DB, 0x5E7C, 0xA5AE, + 0x5E7D, 0xABD5, 0x5E7E, 0xB458, 0x5E80, 0xC979, 0x5E82, 0xC97A, 0x5E84, 0xC9DC, 0x5E87, 0xA7C8, 0x5E88, 0xCAD0, 0x5E89, 0xCACE, + 0x5E8A, 0xA7C9, 0x5E8B, 0xCACD, 0x5E8C, 0xCACF, 0x5E8D, 0xCAD1, 0x5E8F, 0xA7C7, 0x5E95, 0xA9B3, 0x5E96, 0xA9B4, 0x5E97, 0xA9B1, + 0x5E9A, 0xA9B0, 0x5E9B, 0xCEB8, 0x5E9C, 0xA9B2, 0x5EA0, 0xABD6, 0x5EA2, 0xCEB7, 0x5EA3, 0xCEB9, 0x5EA4, 0xCEB6, 0x5EA5, 0xCEBA, + 0x5EA6, 0xABD7, 0x5EA7, 0xAE79, 0x5EA8, 0xD175, 0x5EAA, 0xD177, 0x5EAB, 0xAE77, 0x5EAC, 0xD178, 0x5EAD, 0xAE78, 0x5EAE, 0xD176, + 0x5EB0, 0xCEB5, 0x5EB1, 0xD547, 0x5EB2, 0xD54A, 0x5EB3, 0xD54B, 0x5EB4, 0xD548, 0x5EB5, 0xB167, 0x5EB6, 0xB166, 0x5EB7, 0xB164, + 0x5EB8, 0xB165, 0x5EB9, 0xD549, 0x5EBE, 0xB168, 0x5EC1, 0xB45A, 0x5EC2, 0xB45B, 0x5EC4, 0xB45C, 0x5EC5, 0xDD5D, 0x5EC6, 0xDD5F, + 0x5EC7, 0xDD61, 0x5EC8, 0xB748, 0x5EC9, 0xB747, 0x5ECA, 0xB459, 0x5ECB, 0xDD60, 0x5ECC, 0xDD5E, 0x5ECE, 0xE1B8, 0x5ED1, 0xE1B6, + 0x5ED2, 0xE1BC, 0x5ED3, 0xB9F8, 0x5ED4, 0xE1BD, 0x5ED5, 0xE1BA, 0x5ED6, 0xB9F9, 0x5ED7, 0xE1B7, 0x5ED8, 0xE1B5, 0x5ED9, 0xE1BB, + 0x5EDA, 0xBC70, 0x5EDB, 0xE573, 0x5EDC, 0xE1B9, 0x5EDD, 0xBC72, 0x5EDE, 0xE574, 0x5EDF, 0xBC71, 0x5EE0, 0xBC74, 0x5EE1, 0xE575, + 0x5EE2, 0xBC6F, 0x5EE3, 0xBC73, 0x5EE5, 0xE973, 0x5EE6, 0xE971, 0x5EE7, 0xE970, 0x5EE8, 0xE972, 0x5EE9, 0xE96F, 0x5EEC, 0xC366, + 0x5EEE, 0xF446, 0x5EEF, 0xF447, 0x5EF1, 0xF5CB, 0x5EF2, 0xF6DF, 0x5EF3, 0xC655, 0x5EF6, 0xA9B5, 0x5EF7, 0xA7CA, 0x5EFA, 0xABD8, + 0x5EFE, 0xA47B, 0x5EFF, 0xA4DC, 0x5F01, 0xA5AF, 0x5F02, 0xC9DD, 0x5F04, 0xA7CB, 0x5F05, 0xCAD2, 0x5F07, 0xCEBB, 0x5F08, 0xABD9, + 0x5F0A, 0xB9FA, 0x5F0B, 0xA47C, 0x5F0F, 0xA6A1, 0x5F12, 0xB749, 0x5F13, 0xA47D, 0x5F14, 0xA4DD, 0x5F15, 0xA4DE, 0x5F17, 0xA5B1, + 0x5F18, 0xA5B0, 0x5F1A, 0xC9DE, 0x5F1B, 0xA6A2, 0x5F1D, 0xCAD3, 0x5F1F, 0xA7CC, 0x5F22, 0xCC71, 0x5F23, 0xCC72, 0x5F24, 0xCC73, + 0x5F26, 0xA9B6, 0x5F27, 0xA9B7, 0x5F28, 0xCC70, 0x5F29, 0xA9B8, 0x5F2D, 0xABDA, 0x5F2E, 0xCEBC, 0x5F30, 0xD17A, 0x5F31, 0xAE7A, + 0x5F33, 0xD179, 0x5F35, 0xB169, 0x5F36, 0xD54C, 0x5F37, 0xB16A, 0x5F38, 0xD54D, 0x5F3C, 0xB45D, 0x5F40, 0xDD62, 0x5F43, 0xE1BF, + 0x5F44, 0xE1BE, 0x5F46, 0xB9FB, 0x5F48, 0xBC75, 0x5F49, 0xE576, 0x5F4A, 0xBECA, 0x5F4B, 0xE974, 0x5F4C, 0xC0B1, 0x5F4E, 0xC573, + 0x5F4F, 0xF7D8, 0x5F54, 0xCC74, 0x5F56, 0xCEBD, 0x5F57, 0xB16B, 0x5F58, 0xD8F4, 0x5F59, 0xB74A, 0x5F5D, 0xC255, 0x5F62, 0xA7CE, + 0x5F64, 0xA7CD, 0x5F65, 0xABDB, 0x5F67, 0xD17B, 0x5F69, 0xB16D, 0x5F6A, 0xB343, 0x5F6B, 0xB16E, 0x5F6C, 0xB16C, 0x5F6D, 0xB45E, + 0x5F6F, 0xE1C0, 0x5F70, 0xB9FC, 0x5F71, 0xBC76, 0x5F73, 0xC94C, 0x5F74, 0xC9DF, 0x5F76, 0xCAD5, 0x5F77, 0xA7CF, 0x5F78, 0xCAD4, + 0x5F79, 0xA7D0, 0x5F7C, 0xA9BC, 0x5F7D, 0xCC77, 0x5F7E, 0xCC76, 0x5F7F, 0xA9BB, 0x5F80, 0xA9B9, 0x5F81, 0xA9BA, 0x5F82, 0xCC75, + 0x5F85, 0xABDD, 0x5F86, 0xCEBE, 0x5F87, 0xABE0, 0x5F88, 0xABDC, 0x5F89, 0xABE2, 0x5F8A, 0xABDE, 0x5F8B, 0xABDF, 0x5F8C, 0xABE1, + 0x5F90, 0xAE7D, 0x5F91, 0xAE7C, 0x5F92, 0xAE7B, 0x5F96, 0xD54F, 0x5F97, 0xB16F, 0x5F98, 0xB172, 0x5F99, 0xB170, 0x5F9B, 0xD54E, + 0x5F9C, 0xB175, 0x5F9E, 0xB171, 0x5F9F, 0xD550, 0x5FA0, 0xB174, 0x5FA1, 0xB173, 0x5FA5, 0xD8F6, 0x5FA6, 0xD8F5, 0x5FA8, 0xB461, + 0x5FA9, 0xB45F, 0x5FAA, 0xB460, 0x5FAB, 0xD8F7, 0x5FAC, 0xB74B, 0x5FAD, 0xDD64, 0x5FAE, 0xB74C, 0x5FAF, 0xDD63, 0x5FB2, 0xE577, + 0x5FB5, 0xBC78, 0x5FB6, 0xE1C1, 0x5FB7, 0xBC77, 0x5FB9, 0xB9FD, 0x5FBB, 0xECDE, 0x5FBC, 0xE975, 0x5FBD, 0xC0B2, 0x5FBE, 0xECDD, + 0x5FBF, 0xF240, 0x5FC0, 0xF448, 0x5FC1, 0xF449, 0x5FC3, 0xA4DF, 0x5FC5, 0xA5B2, 0x5FC9, 0xC97B, 0x5FCC, 0xA7D2, 0x5FCD, 0xA7D4, + 0x5FCF, 0xC9E2, 0x5FD0, 0xCAD8, 0x5FD1, 0xCAD7, 0x5FD2, 0xCAD6, 0x5FD4, 0xC9E1, 0x5FD5, 0xC9E0, 0x5FD6, 0xA6A4, 0x5FD7, 0xA7D3, + 0x5FD8, 0xA7D1, 0x5FD9, 0xA6A3, 0x5FDD, 0xA9BD, 0x5FDE, 0xCC78, 0x5FE0, 0xA9BE, 0x5FE1, 0xCADD, 0x5FE3, 0xCADF, 0x5FE4, 0xCADE, + 0x5FE5, 0xCC79, 0x5FE8, 0xCADA, 0x5FEA, 0xA7D8, 0x5FEB, 0xA7D6, 0x5FED, 0xCAD9, 0x5FEE, 0xCADB, 0x5FEF, 0xCAE1, 0x5FF1, 0xA7D5, + 0x5FF3, 0xCADC, 0x5FF4, 0xCAE5, 0x5FF5, 0xA9C0, 0x5FF7, 0xCAE2, 0x5FF8, 0xA7D7, 0x5FFA, 0xCAE0, 0x5FFB, 0xCAE3, 0x5FFD, 0xA9BF, + 0x5FFF, 0xA9C1, 0x6000, 0xCAE4, 0x6009, 0xCCAF, 0x600A, 0xCCA2, 0x600B, 0xCC7E, 0x600C, 0xCCAE, 0x600D, 0xCCA9, 0x600E, 0xABE7, + 0x600F, 0xA9C2, 0x6010, 0xCCAA, 0x6011, 0xCCAD, 0x6012, 0xABE3, 0x6013, 0xCCAC, 0x6014, 0xA9C3, 0x6015, 0xA9C8, 0x6016, 0xA9C6, + 0x6017, 0xCCA3, 0x6019, 0xCC7C, 0x601A, 0xCCA5, 0x601B, 0xA9CD, 0x601C, 0xCCB0, 0x601D, 0xABE4, 0x601E, 0xCCA6, 0x6020, 0xABE5, + 0x6021, 0xA9C9, 0x6022, 0xCCA8, 0x6024, 0xCECD, 0x6025, 0xABE6, 0x6026, 0xCC7B, 0x6027, 0xA9CA, 0x6028, 0xABE8, 0x6029, 0xA9CB, + 0x602A, 0xA9C7, 0x602B, 0xA9CC, 0x602C, 0xCCA7, 0x602D, 0xCC7A, 0x602E, 0xCCAB, 0x602F, 0xA9C4, 0x6032, 0xCC7D, 0x6033, 0xCCA4, + 0x6034, 0xCCA1, 0x6035, 0xA9C5, 0x6037, 0xCEBF, 0x6039, 0xCEC0, 0x6040, 0xCECA, 0x6041, 0xD1A1, 0x6042, 0xCECB, 0x6043, 0xABEE, + 0x6044, 0xCECE, 0x6045, 0xCEC4, 0x6046, 0xABED, 0x6047, 0xCEC6, 0x6049, 0xCEC7, 0x604C, 0xCEC9, 0x604D, 0xABE9, 0x6050, 0xAEA3, + 0x6052, 0xF9DA, 0x6053, 0xCEC5, 0x6054, 0xCEC1, 0x6055, 0xAEA4, 0x6058, 0xCECF, 0x6059, 0xAE7E, 0x605A, 0xD17D, 0x605B, 0xCEC8, + 0x605D, 0xD17C, 0x605E, 0xCEC3, 0x605F, 0xCECC, 0x6062, 0xABEC, 0x6063, 0xAEA1, 0x6064, 0xABF2, 0x6065, 0xAEA2, 0x6066, 0xCED0, + 0x6067, 0xD17E, 0x6068, 0xABEB, 0x6069, 0xAEA6, 0x606A, 0xABF1, 0x606B, 0xABF0, 0x606C, 0xABEF, 0x606D, 0xAEA5, 0x606E, 0xCED1, + 0x606F, 0xAEA7, 0x6070, 0xABEA, 0x6072, 0xCEC2, 0x607F, 0xB176, 0x6080, 0xD1A4, 0x6081, 0xD1A6, 0x6083, 0xD1A8, 0x6084, 0xAEA8, + 0x6085, 0xAEAE, 0x6086, 0xD553, 0x6087, 0xD1AC, 0x6088, 0xD1A3, 0x6089, 0xB178, 0x608A, 0xD551, 0x608C, 0xAEAD, 0x608D, 0xAEAB, + 0x608E, 0xD1AE, 0x6090, 0xD552, 0x6092, 0xD1A5, 0x6094, 0xAEAC, 0x6095, 0xD1A9, 0x6096, 0xAEAF, 0x6097, 0xD1AB, 0x609A, 0xAEAA, + 0x609B, 0xD1AA, 0x609C, 0xD1AD, 0x609D, 0xD1A7, 0x609F, 0xAEA9, 0x60A0, 0xB179, 0x60A2, 0xD1A2, 0x60A3, 0xB177, 0x60A8, 0xB17A, + 0x60B0, 0xD555, 0x60B1, 0xD55E, 0x60B2, 0xB464, 0x60B4, 0xB17C, 0x60B5, 0xB1A3, 0x60B6, 0xB465, 0x60B7, 0xD560, 0x60B8, 0xB1AA, + 0x60B9, 0xD8F9, 0x60BA, 0xD556, 0x60BB, 0xB1A2, 0x60BC, 0xB1A5, 0x60BD, 0xB17E, 0x60BE, 0xD554, 0x60BF, 0xD562, 0x60C0, 0xD565, + 0x60C1, 0xD949, 0x60C3, 0xD563, 0x60C4, 0xD8FD, 0x60C5, 0xB1A1, 0x60C6, 0xB1A8, 0x60C7, 0xB1AC, 0x60C8, 0xD55D, 0x60C9, 0xD8F8, + 0x60CA, 0xD561, 0x60CB, 0xB17B, 0x60CC, 0xD8FA, 0x60CD, 0xD564, 0x60CE, 0xD8FC, 0x60CF, 0xD559, 0x60D1, 0xB462, 0x60D3, 0xD557, + 0x60D4, 0xD558, 0x60D5, 0xB1A7, 0x60D8, 0xB1A6, 0x60D9, 0xD55B, 0x60DA, 0xB1AB, 0x60DB, 0xD55F, 0x60DC, 0xB1A4, 0x60DD, 0xD55C, + 0x60DF, 0xB1A9, 0x60E0, 0xB466, 0x60E1, 0xB463, 0x60E2, 0xD8FB, 0x60E4, 0xD55A, 0x60E6, 0xB17D, 0x60F0, 0xB46B, 0x60F1, 0xB46F, + 0x60F2, 0xD940, 0x60F3, 0xB751, 0x60F4, 0xB46D, 0x60F5, 0xD944, 0x60F6, 0xB471, 0x60F7, 0xDD65, 0x60F8, 0xD946, 0x60F9, 0xB753, + 0x60FA, 0xB469, 0x60FB, 0xB46C, 0x60FC, 0xD947, 0x60FE, 0xD948, 0x60FF, 0xD94E, 0x6100, 0xB473, 0x6101, 0xB754, 0x6103, 0xD94A, + 0x6104, 0xD94F, 0x6105, 0xD943, 0x6106, 0xB75E, 0x6108, 0xB755, 0x6109, 0xB472, 0x610A, 0xD941, 0x610B, 0xD950, 0x610D, 0xB75D, + 0x610E, 0xB470, 0x610F, 0xB74E, 0x6110, 0xD94D, 0x6112, 0xB474, 0x6113, 0xD945, 0x6114, 0xD8FE, 0x6115, 0xB46A, 0x6116, 0xD942, + 0x6118, 0xD94B, 0x611A, 0xB74D, 0x611B, 0xB752, 0x611C, 0xB467, 0x611D, 0xD94C, 0x611F, 0xB750, 0x6123, 0xB468, 0x6127, 0xB75C, + 0x6128, 0xE1C3, 0x6129, 0xDD70, 0x612B, 0xDD68, 0x612C, 0xE1C2, 0x612E, 0xDD6C, 0x612F, 0xDD6E, 0x6132, 0xDD6B, 0x6134, 0xB75B, + 0x6136, 0xDD6A, 0x6137, 0xB75F, 0x613B, 0xE1D2, 0x613E, 0xB75A, 0x613F, 0xBA40, 0x6140, 0xDD71, 0x6141, 0xE1C4, 0x6144, 0xB758, + 0x6145, 0xDD69, 0x6146, 0xDD6D, 0x6147, 0xB9FE, 0x6148, 0xB74F, 0x6149, 0xDD66, 0x614A, 0xDD67, 0x614B, 0xBA41, 0x614C, 0xB757, + 0x614D, 0xB759, 0x614E, 0xB756, 0x614F, 0xDD6F, 0x6152, 0xE1C8, 0x6153, 0xE1C9, 0x6154, 0xE1CE, 0x6155, 0xBC7D, 0x6156, 0xE1D5, + 0x6158, 0xBA47, 0x615A, 0xBA46, 0x615B, 0xE1D0, 0x615D, 0xBC7C, 0x615E, 0xE1C5, 0x615F, 0xBA45, 0x6161, 0xE1D4, 0x6162, 0xBA43, + 0x6163, 0xBA44, 0x6165, 0xE1D1, 0x6166, 0xE5AA, 0x6167, 0xBC7A, 0x6168, 0xB46E, 0x616A, 0xE1D3, 0x616B, 0xBCA3, 0x616C, 0xE1CB, + 0x616E, 0xBC7B, 0x6170, 0xBCA2, 0x6171, 0xE1C6, 0x6172, 0xE1CA, 0x6173, 0xE1C7, 0x6174, 0xE1CD, 0x6175, 0xBA48, 0x6176, 0xBC79, + 0x6177, 0xBA42, 0x6179, 0xE57A, 0x617A, 0xE1CF, 0x617C, 0xBCA1, 0x617E, 0xBCA4, 0x6180, 0xE1CC, 0x6182, 0xBC7E, 0x6183, 0xE579, + 0x6189, 0xE57E, 0x618A, 0xBECE, 0x618B, 0xE578, 0x618C, 0xE9A3, 0x618D, 0xE5A9, 0x618E, 0xBCA8, 0x6190, 0xBCA6, 0x6191, 0xBECC, + 0x6192, 0xE5A6, 0x6193, 0xE5A2, 0x6194, 0xBCAC, 0x6196, 0xE978, 0x619A, 0xBCAA, 0x619B, 0xE5A1, 0x619D, 0xE976, 0x619F, 0xE5A5, + 0x61A1, 0xE5A8, 0x61A2, 0xE57D, 0x61A4, 0xBCAB, 0x61A7, 0xBCA5, 0x61A8, 0xE977, 0x61A9, 0xBECD, 0x61AA, 0xE5A7, 0x61AB, 0xBCA7, + 0x61AC, 0xBCA9, 0x61AD, 0xE5A4, 0x61AE, 0xBCAD, 0x61AF, 0xE5A3, 0x61B0, 0xE57C, 0x61B1, 0xE57B, 0x61B2, 0xBECB, 0x61B3, 0xE5AB, + 0x61B4, 0xE97A, 0x61B5, 0xECE0, 0x61B6, 0xBED0, 0x61B8, 0xE9A2, 0x61BA, 0xE97E, 0x61BC, 0xECE1, 0x61BE, 0xBED1, 0x61BF, 0xE9A1, + 0x61C1, 0xE97C, 0x61C2, 0xC0B4, 0x61C3, 0xECDF, 0x61C5, 0xE979, 0x61C6, 0xE97B, 0x61C7, 0xC0B5, 0x61C8, 0xBED3, 0x61C9, 0xC0B3, + 0x61CA, 0xBED2, 0x61CB, 0xC0B7, 0x61CC, 0xE97D, 0x61CD, 0xBECF, 0x61D6, 0xEFCF, 0x61D8, 0xEFC7, 0x61DE, 0xECE7, 0x61DF, 0xEFC8, + 0x61E0, 0xECE3, 0x61E3, 0xC256, 0x61E4, 0xECE5, 0x61E5, 0xECE4, 0x61E6, 0xC0B6, 0x61E7, 0xECE2, 0x61E8, 0xECE6, 0x61E9, 0xEFD0, + 0x61EA, 0xEFCC, 0x61EB, 0xEFCE, 0x61ED, 0xEFC9, 0x61EE, 0xEFCA, 0x61F0, 0xEFCD, 0x61F1, 0xEFCB, 0x61F2, 0xC367, 0x61F5, 0xC36A, + 0x61F6, 0xC369, 0x61F7, 0xC368, 0x61F8, 0xC461, 0x61F9, 0xF44A, 0x61FA, 0xC462, 0x61FB, 0xF241, 0x61FC, 0xC4DF, 0x61FD, 0xF5CC, + 0x61FE, 0xC4E0, 0x61FF, 0xC574, 0x6200, 0xC5CA, 0x6201, 0xF7D9, 0x6203, 0xF7DA, 0x6204, 0xF7DB, 0x6207, 0xF9BA, 0x6208, 0xA4E0, + 0x6209, 0xC97C, 0x620A, 0xA5B3, 0x620C, 0xA6A6, 0x620D, 0xA6A7, 0x620E, 0xA6A5, 0x6210, 0xA6A8, 0x6211, 0xA7DA, 0x6212, 0xA7D9, + 0x6214, 0xCCB1, 0x6215, 0xA9CF, 0x6216, 0xA9CE, 0x6219, 0xD1AF, 0x621A, 0xB1AD, 0x621B, 0xB1AE, 0x621F, 0xB475, 0x6220, 0xDD72, + 0x6221, 0xB760, 0x6222, 0xB761, 0x6223, 0xDD74, 0x6224, 0xDD76, 0x6225, 0xDD75, 0x6227, 0xE1D7, 0x6229, 0xE1D6, 0x622A, 0xBA49, + 0x622B, 0xE1D8, 0x622D, 0xE5AC, 0x622E, 0xBCAE, 0x6230, 0xBED4, 0x6232, 0xC0B8, 0x6233, 0xC257, 0x6234, 0xC0B9, 0x6236, 0xA4E1, + 0x623A, 0xCAE6, 0x623D, 0xCCB2, 0x623E, 0xA9D1, 0x623F, 0xA9D0, 0x6240, 0xA9D2, 0x6241, 0xABF3, 0x6242, 0xCED2, 0x6243, 0xCED3, + 0x6246, 0xD1B0, 0x6247, 0xAEB0, 0x6248, 0xB1AF, 0x6249, 0xB476, 0x624A, 0xD951, 0x624B, 0xA4E2, 0x624D, 0xA47E, 0x624E, 0xA4E3, + 0x6250, 0xC97D, 0x6251, 0xA5B7, 0x6252, 0xA5B6, 0x6253, 0xA5B4, 0x6254, 0xA5B5, 0x6258, 0xA6AB, 0x6259, 0xC9E9, 0x625A, 0xC9EB, + 0x625B, 0xA6AA, 0x625C, 0xC9E3, 0x625E, 0xC9E4, 0x6260, 0xC9EA, 0x6261, 0xC9E6, 0x6262, 0xC9E8, 0x6263, 0xA6A9, 0x6264, 0xC9E5, + 0x6265, 0xC9EC, 0x6266, 0xC9E7, 0x626D, 0xA7E1, 0x626E, 0xA7EA, 0x626F, 0xA7E8, 0x6270, 0xCAF0, 0x6271, 0xCAED, 0x6272, 0xCAF5, + 0x6273, 0xA7E6, 0x6274, 0xCAF6, 0x6276, 0xA7DF, 0x6277, 0xCAF3, 0x6279, 0xA7E5, 0x627A, 0xCAEF, 0x627B, 0xCAEE, 0x627C, 0xA7E3, + 0x627D, 0xCAF4, 0x627E, 0xA7E4, 0x627F, 0xA9D3, 0x6280, 0xA7DE, 0x6281, 0xCAF1, 0x6283, 0xCAE7, 0x6284, 0xA7DB, 0x6286, 0xA7EE, + 0x6287, 0xCAEC, 0x6288, 0xCAF2, 0x6289, 0xA7E0, 0x628A, 0xA7E2, 0x628C, 0xCAE8, 0x628E, 0xCAE9, 0x628F, 0xCAEA, 0x6291, 0xA7ED, + 0x6292, 0xA7E7, 0x6293, 0xA7EC, 0x6294, 0xCAEB, 0x6295, 0xA7EB, 0x6296, 0xA7DD, 0x6297, 0xA7DC, 0x6298, 0xA7E9, 0x62A8, 0xA9E1, + 0x62A9, 0xCCBE, 0x62AA, 0xCCB7, 0x62AB, 0xA9DC, 0x62AC, 0xA9EF, 0x62AD, 0xCCB3, 0x62AE, 0xCCBA, 0x62AF, 0xCCBC, 0x62B0, 0xCCBF, + 0x62B1, 0xA9EA, 0x62B3, 0xCCBB, 0x62B4, 0xCCB4, 0x62B5, 0xA9E8, 0x62B6, 0xCCB8, 0x62B8, 0xCCC0, 0x62B9, 0xA9D9, 0x62BB, 0xCCBD, + 0x62BC, 0xA9E3, 0x62BD, 0xA9E2, 0x62BE, 0xCCB6, 0x62BF, 0xA9D7, 0x62C2, 0xA9D8, 0x62C4, 0xA9D6, 0x62C6, 0xA9EE, 0x62C7, 0xA9E6, + 0x62C8, 0xA9E0, 0x62C9, 0xA9D4, 0x62CA, 0xCCB9, 0x62CB, 0xA9DF, 0x62CC, 0xA9D5, 0x62CD, 0xA9E7, 0x62CE, 0xA9F0, 0x62CF, 0xCED4, + 0x62D0, 0xA9E4, 0x62D1, 0xCCB5, 0x62D2, 0xA9DA, 0x62D3, 0xA9DD, 0x62D4, 0xA9DE, 0x62D6, 0xA9EC, 0x62D7, 0xA9ED, 0x62D8, 0xA9EB, + 0x62D9, 0xA9E5, 0x62DA, 0xA9E9, 0x62DB, 0xA9DB, 0x62DC, 0xABF4, 0x62EB, 0xCEDA, 0x62EC, 0xAC41, 0x62ED, 0xABF8, 0x62EE, 0xABFA, + 0x62EF, 0xAC40, 0x62F0, 0xCEE6, 0x62F1, 0xABFD, 0x62F2, 0xD1B1, 0x62F3, 0xAEB1, 0x62F4, 0xAC43, 0x62F5, 0xCED7, 0x62F6, 0xCEDF, + 0x62F7, 0xABFE, 0x62F8, 0xCEDE, 0x62F9, 0xCEDB, 0x62FA, 0xCEE3, 0x62FB, 0xCEE5, 0x62FC, 0xABF7, 0x62FD, 0xABFB, 0x62FE, 0xAC42, + 0x62FF, 0xAEB3, 0x6300, 0xCEE0, 0x6301, 0xABF9, 0x6302, 0xAC45, 0x6303, 0xCED9, 0x6307, 0xABFC, 0x6308, 0xAEB2, 0x6309, 0xABF6, + 0x630B, 0xCED6, 0x630C, 0xCEDD, 0x630D, 0xCED5, 0x630E, 0xCED8, 0x630F, 0xCEDC, 0x6310, 0xD1B2, 0x6311, 0xAC44, 0x6313, 0xCEE1, + 0x6314, 0xCEE2, 0x6315, 0xCEE4, 0x6316, 0xABF5, 0x6328, 0xAEC1, 0x6329, 0xD1BE, 0x632A, 0xAEBF, 0x632B, 0xAEC0, 0x632C, 0xD1B4, + 0x632D, 0xD1C4, 0x632F, 0xAEB6, 0x6332, 0xD566, 0x6333, 0xD1C6, 0x6334, 0xD1C0, 0x6336, 0xD1B7, 0x6338, 0xD1C9, 0x6339, 0xD1BA, + 0x633A, 0xAEBC, 0x633B, 0xD57D, 0x633C, 0xD1BD, 0x633D, 0xAEBE, 0x633E, 0xAEB5, 0x6340, 0xD1CB, 0x6341, 0xD1BF, 0x6342, 0xAEB8, + 0x6343, 0xD1B8, 0x6344, 0xD1B5, 0x6345, 0xD1B6, 0x6346, 0xAEB9, 0x6347, 0xD1C5, 0x6348, 0xD1CC, 0x6349, 0xAEBB, 0x634A, 0xD1BC, + 0x634B, 0xD1BB, 0x634C, 0xAEC3, 0x634D, 0xAEC2, 0x634E, 0xAEB4, 0x634F, 0xAEBA, 0x6350, 0xAEBD, 0x6351, 0xD1C8, 0x6354, 0xD1C2, + 0x6355, 0xAEB7, 0x6356, 0xD1B3, 0x6357, 0xD1CA, 0x6358, 0xD1C1, 0x6359, 0xD1C3, 0x635A, 0xD1C7, 0x6365, 0xD567, 0x6367, 0xB1B7, + 0x6368, 0xB1CB, 0x6369, 0xB1CA, 0x636B, 0xB1BF, 0x636D, 0xD579, 0x636E, 0xD575, 0x636F, 0xD572, 0x6370, 0xD5A6, 0x6371, 0xB1BA, + 0x6372, 0xB1B2, 0x6375, 0xD577, 0x6376, 0xB4A8, 0x6377, 0xB1B6, 0x6378, 0xD5A1, 0x637A, 0xB1CC, 0x637B, 0xB1C9, 0x637C, 0xD57B, + 0x637D, 0xD56A, 0x6380, 0xB1C8, 0x6381, 0xD5A3, 0x6382, 0xD569, 0x6383, 0xB1BD, 0x6384, 0xB1C1, 0x6385, 0xD5A2, 0x6387, 0xD573, + 0x6388, 0xB1C2, 0x6389, 0xB1BC, 0x638A, 0xD568, 0x638C, 0xB478, 0x638D, 0xD5A5, 0x638E, 0xD571, 0x638F, 0xB1C7, 0x6390, 0xD574, + 0x6391, 0xD5A4, 0x6392, 0xB1C6, 0x6394, 0xD952, 0x6396, 0xB1B3, 0x6397, 0xD56F, 0x6398, 0xB1B8, 0x6399, 0xB1C3, 0x639B, 0xB1BE, + 0x639C, 0xD578, 0x639D, 0xD56E, 0x639E, 0xD56C, 0x639F, 0xD57E, 0x63A0, 0xB1B0, 0x63A1, 0xB1C4, 0x63A2, 0xB1B4, 0x63A3, 0xB477, + 0x63A4, 0xD57C, 0x63A5, 0xB1B5, 0x63A7, 0xB1B1, 0x63A8, 0xB1C0, 0x63A9, 0xB1BB, 0x63AA, 0xB1B9, 0x63AB, 0xD570, 0x63AC, 0xB1C5, + 0x63AD, 0xD56D, 0x63AE, 0xD57A, 0x63AF, 0xD576, 0x63B0, 0xD954, 0x63B1, 0xD953, 0x63BD, 0xD56B, 0x63BE, 0xD964, 0x63C0, 0xB47A, + 0x63C2, 0xD96A, 0x63C3, 0xD959, 0x63C4, 0xD967, 0x63C5, 0xDD77, 0x63C6, 0xB47D, 0x63C7, 0xD96B, 0x63C8, 0xD96E, 0x63C9, 0xB47C, + 0x63CA, 0xD95C, 0x63CB, 0xD96D, 0x63CC, 0xD96C, 0x63CD, 0xB47E, 0x63CE, 0xD955, 0x63CF, 0xB479, 0x63D0, 0xB4A3, 0x63D2, 0xB4A1, + 0x63D3, 0xD969, 0x63D5, 0xD95F, 0x63D6, 0xB4A5, 0x63D7, 0xD970, 0x63D8, 0xD968, 0x63D9, 0xD971, 0x63DA, 0xB4AD, 0x63DB, 0xB4AB, + 0x63DC, 0xD966, 0x63DD, 0xD965, 0x63DF, 0xD963, 0x63E0, 0xD95D, 0x63E1, 0xB4A4, 0x63E3, 0xB4A2, 0x63E4, 0xD1B9, 0x63E5, 0xD956, + 0x63E7, 0xDDB7, 0x63E8, 0xD957, 0x63E9, 0xB47B, 0x63EA, 0xB4AA, 0x63EB, 0xDD79, 0x63ED, 0xB4A6, 0x63EE, 0xB4A7, 0x63EF, 0xD958, + 0x63F0, 0xD96F, 0x63F1, 0xDD78, 0x63F2, 0xD960, 0x63F3, 0xD95B, 0x63F4, 0xB4A9, 0x63F5, 0xD961, 0x63F6, 0xD95E, 0x63F9, 0xB4AE, + 0x6406, 0xB770, 0x6409, 0xDD7C, 0x640A, 0xDDB1, 0x640B, 0xDDB6, 0x640C, 0xDDAA, 0x640D, 0xB76C, 0x640E, 0xDDBB, 0x640F, 0xB769, + 0x6410, 0xDD7A, 0x6412, 0xDD7B, 0x6413, 0xB762, 0x6414, 0xB76B, 0x6415, 0xDDA4, 0x6416, 0xB76E, 0x6417, 0xB76F, 0x6418, 0xDDA5, + 0x641A, 0xDDB2, 0x641B, 0xDDB8, 0x641C, 0xB76A, 0x641E, 0xB764, 0x641F, 0xDDA3, 0x6420, 0xDD7D, 0x6421, 0xDDBA, 0x6422, 0xDDA8, + 0x6423, 0xDDA9, 0x6424, 0xDD7E, 0x6425, 0xDDB4, 0x6426, 0xDDAB, 0x6427, 0xDDB5, 0x6428, 0xDDAD, 0x642A, 0xB765, 0x642B, 0xE1D9, + 0x642C, 0xB768, 0x642D, 0xB766, 0x642E, 0xDDB9, 0x642F, 0xDDB0, 0x6430, 0xDDAC, 0x6433, 0xDDA1, 0x6434, 0xBA53, 0x6435, 0xDDAF, + 0x6436, 0xB76D, 0x6437, 0xDDA7, 0x6439, 0xDDA6, 0x643D, 0xB767, 0x643E, 0xB763, 0x643F, 0xE1EE, 0x6440, 0xDDB3, 0x6441, 0xDDAE, + 0x6443, 0xDDA2, 0x644B, 0xE1E9, 0x644D, 0xE1DA, 0x644E, 0xE1E5, 0x6450, 0xE1EC, 0x6451, 0xBA51, 0x6452, 0xB4AC, 0x6453, 0xE1EA, + 0x6454, 0xBA4C, 0x6458, 0xBA4B, 0x6459, 0xE1F1, 0x645B, 0xE1DB, 0x645C, 0xE1E8, 0x645D, 0xE1DC, 0x645E, 0xE1E7, 0x645F, 0xBA4F, + 0x6460, 0xE1EB, 0x6461, 0xD962, 0x6465, 0xE1F2, 0x6466, 0xE1E3, 0x6467, 0xBA52, 0x6468, 0xE5BA, 0x6469, 0xBCAF, 0x646B, 0xE1F0, + 0x646C, 0xE1EF, 0x646D, 0xBA54, 0x646E, 0xE5AD, 0x646F, 0xBCB0, 0x6470, 0xE5AE, 0x6472, 0xE1DF, 0x6473, 0xE1E0, 0x6474, 0xE1DD, + 0x6475, 0xE1E2, 0x6476, 0xE1DE, 0x6477, 0xE1F3, 0x6478, 0xBA4E, 0x6479, 0xBCB1, 0x647A, 0xBA50, 0x647B, 0xBA55, 0x647D, 0xE1E1, + 0x647F, 0xE1ED, 0x6482, 0xE1E6, 0x6485, 0xE5B1, 0x6487, 0xBA4A, 0x6488, 0xBCB4, 0x6489, 0xE9AA, 0x648A, 0xE5B6, 0x648B, 0xE5B5, + 0x648C, 0xE5B7, 0x648F, 0xE5B4, 0x6490, 0xBCB5, 0x6492, 0xBCBB, 0x6493, 0xBCB8, 0x6495, 0xBCB9, 0x6496, 0xE5AF, 0x6497, 0xE5B2, + 0x6498, 0xE5BC, 0x6499, 0xBCC1, 0x649A, 0xBCBF, 0x649C, 0xE5B3, 0x649D, 0xD95A, 0x649E, 0xBCB2, 0x649F, 0xE5B9, 0x64A0, 0xE5B0, + 0x64A2, 0xBCC2, 0x64A3, 0xE5B8, 0x64A4, 0xBA4D, 0x64A5, 0xBCB7, 0x64A6, 0xE1E4, 0x64A9, 0xBCBA, 0x64AB, 0xBCBE, 0x64AC, 0xBCC0, + 0x64AD, 0xBCBD, 0x64AE, 0xBCBC, 0x64B0, 0xBCB6, 0x64B1, 0xE5BB, 0x64B2, 0xBCB3, 0x64B3, 0xBCC3, 0x64BB, 0xBED8, 0x64BC, 0xBED9, + 0x64BD, 0xE9A9, 0x64BE, 0xBEE2, 0x64BF, 0xBEDF, 0x64C1, 0xBED6, 0x64C2, 0xBEDD, 0x64C3, 0xE9AB, 0x64C4, 0xBEDB, 0x64C5, 0xBED5, + 0x64C7, 0xBEDC, 0x64C9, 0xE9A8, 0x64CA, 0xC0BB, 0x64CB, 0xBED7, 0x64CD, 0xBEDE, 0x64CE, 0xC0BA, 0x64CF, 0xE9A7, 0x64D0, 0xE9A6, + 0x64D2, 0xBEE0, 0x64D4, 0xBEE1, 0x64D6, 0xE9A5, 0x64D7, 0xE9A4, 0x64D8, 0xC0BC, 0x64D9, 0xE9AE, 0x64DA, 0xBEDA, 0x64DB, 0xE9AC, + 0x64E0, 0xC0BD, 0x64E2, 0xC0C2, 0x64E3, 0xECEA, 0x64E4, 0xECEC, 0x64E6, 0xC0BF, 0x64E8, 0xECED, 0x64E9, 0xECE9, 0x64EB, 0xECEB, + 0x64EC, 0xC0C0, 0x64ED, 0xC0C3, 0x64EF, 0xECE8, 0x64F0, 0xC0BE, 0x64F1, 0xC0C1, 0x64F2, 0xC259, 0x64F3, 0xE9AD, 0x64F4, 0xC258, + 0x64F7, 0xC25E, 0x64F8, 0xEFD4, 0x64FA, 0xC25C, 0x64FB, 0xC25D, 0x64FC, 0xEFD7, 0x64FD, 0xEFD3, 0x64FE, 0xC25A, 0x64FF, 0xEFD1, + 0x6500, 0xC36B, 0x6501, 0xEFD5, 0x6503, 0xEFD6, 0x6504, 0xEFD2, 0x6506, 0xC25B, 0x6507, 0xF242, 0x6509, 0xF245, 0x650C, 0xF246, + 0x650D, 0xF244, 0x650E, 0xF247, 0x650F, 0xC36C, 0x6510, 0xF243, 0x6513, 0xF44E, 0x6514, 0xC464, 0x6515, 0xF44D, 0x6516, 0xF44C, + 0x6517, 0xF44B, 0x6518, 0xC463, 0x6519, 0xC465, 0x651B, 0xF5CD, 0x651C, 0xC4E2, 0x651D, 0xC4E1, 0x6520, 0xF6E1, 0x6521, 0xF6E0, + 0x6522, 0xF6E3, 0x6523, 0xC5CB, 0x6524, 0xC575, 0x6525, 0xF7DD, 0x6526, 0xF6E2, 0x6529, 0xF7DC, 0x652A, 0xC5CD, 0x652B, 0xC5CC, + 0x652C, 0xC5F3, 0x652D, 0xF8A9, 0x652E, 0xF8EF, 0x652F, 0xA4E4, 0x6532, 0xD972, 0x6533, 0xE9AF, 0x6536, 0xA6AC, 0x6537, 0xCAF7, + 0x6538, 0xA7F1, 0x6539, 0xA7EF, 0x653B, 0xA7F0, 0x653D, 0xCCC1, 0x653E, 0xA9F1, 0x653F, 0xAC46, 0x6541, 0xCEE7, 0x6543, 0xCEE8, + 0x6545, 0xAC47, 0x6546, 0xD1CE, 0x6548, 0xAEC4, 0x6549, 0xAEC5, 0x654A, 0xD1CD, 0x654F, 0xB1D3, 0x6551, 0xB1CF, 0x6553, 0xD5A7, + 0x6554, 0xB1D6, 0x6555, 0xB1D5, 0x6556, 0xB1CE, 0x6557, 0xB1D1, 0x6558, 0xB1D4, 0x6559, 0xB1D0, 0x655C, 0xD976, 0x655D, 0xB1CD, + 0x655E, 0xB4AF, 0x6562, 0xB4B1, 0x6563, 0xB4B2, 0x6564, 0xD975, 0x6565, 0xD978, 0x6566, 0xB4B0, 0x6567, 0xD973, 0x6568, 0xD977, + 0x656A, 0xD974, 0x656C, 0xB771, 0x656F, 0xDDBC, 0x6572, 0xBA56, 0x6573, 0xE1F4, 0x6574, 0xBEE3, 0x6575, 0xBCC4, 0x6576, 0xE5BD, + 0x6577, 0xBCC5, 0x6578, 0xBCC6, 0x6579, 0xE5BF, 0x657A, 0xE5BE, 0x657B, 0xE5C0, 0x657C, 0xE9B1, 0x657F, 0xE9B0, 0x6580, 0xECEF, + 0x6581, 0xECEE, 0x6582, 0xC0C4, 0x6583, 0xC0C5, 0x6584, 0xF248, 0x6587, 0xA4E5, 0x658C, 0xD979, 0x6590, 0xB4B4, 0x6591, 0xB4B3, + 0x6592, 0xDDBD, 0x6594, 0xEFD8, 0x6595, 0xC4E3, 0x6596, 0xF7DE, 0x6597, 0xA4E6, 0x6599, 0xAEC6, 0x659B, 0xB1D8, 0x659C, 0xB1D7, + 0x659D, 0xD97A, 0x659E, 0xD97B, 0x659F, 0xB772, 0x65A0, 0xE1F5, 0x65A1, 0xBA57, 0x65A2, 0xE9B2, 0x65A4, 0xA4E7, 0x65A5, 0xA5B8, + 0x65A7, 0xA9F2, 0x65A8, 0xCCC2, 0x65AA, 0xCEE9, 0x65AB, 0xAC48, 0x65AC, 0xB1D9, 0x65AE, 0xD97C, 0x65AF, 0xB4B5, 0x65B0, 0xB773, + 0x65B2, 0xE5C1, 0x65B3, 0xE5C2, 0x65B6, 0xECF0, 0x65B7, 0xC25F, 0x65B8, 0xF8F0, 0x65B9, 0xA4E8, 0x65BB, 0xCCC3, 0x65BC, 0xA9F3, + 0x65BD, 0xAC49, 0x65BF, 0xCEEA, 0x65C1, 0xAEC7, 0x65C2, 0xD1D2, 0x65C3, 0xD1D0, 0x65C4, 0xD1D1, 0x65C5, 0xAEC8, 0x65C6, 0xD1CF, + 0x65CB, 0xB1DB, 0x65CC, 0xB1DC, 0x65CD, 0xD5A8, 0x65CE, 0xB1DD, 0x65CF, 0xB1DA, 0x65D0, 0xD97D, 0x65D2, 0xD97E, 0x65D3, 0xDDBE, + 0x65D6, 0xBA59, 0x65D7, 0xBA58, 0x65DA, 0xECF1, 0x65DB, 0xEFD9, 0x65DD, 0xF24A, 0x65DE, 0xF249, 0x65DF, 0xF44F, 0x65E1, 0xC95E, + 0x65E2, 0xAC4A, 0x65E5, 0xA4E9, 0x65E6, 0xA5B9, 0x65E8, 0xA6AE, 0x65E9, 0xA6AD, 0x65EC, 0xA6AF, 0x65ED, 0xA6B0, 0x65EE, 0xC9EE, + 0x65EF, 0xC9ED, 0x65F0, 0xCAF8, 0x65F1, 0xA7F2, 0x65F2, 0xCAFB, 0x65F3, 0xCAFA, 0x65F4, 0xCAF9, 0x65F5, 0xCAFC, 0x65FA, 0xA9F4, + 0x65FB, 0xCCC9, 0x65FC, 0xCCC5, 0x65FD, 0xCCCE, 0x6600, 0xA9FB, 0x6602, 0xA9F9, 0x6603, 0xCCCA, 0x6604, 0xCCC6, 0x6605, 0xCCCD, + 0x6606, 0xA9F8, 0x6607, 0xAA40, 0x6608, 0xCCC8, 0x6609, 0xCCC4, 0x660A, 0xA9FE, 0x660B, 0xCCCB, 0x660C, 0xA9F7, 0x660D, 0xCCCC, + 0x660E, 0xA9FA, 0x660F, 0xA9FC, 0x6610, 0xCCD0, 0x6611, 0xCCCF, 0x6612, 0xCCC7, 0x6613, 0xA9F6, 0x6614, 0xA9F5, 0x6615, 0xA9FD, + 0x661C, 0xCEEF, 0x661D, 0xCEF5, 0x661F, 0xAC50, 0x6620, 0xAC4D, 0x6621, 0xCEEC, 0x6622, 0xCEF1, 0x6624, 0xAC53, 0x6625, 0xAC4B, + 0x6626, 0xCEF0, 0x6627, 0xAC4E, 0x6628, 0xAC51, 0x662B, 0xCEF3, 0x662D, 0xAC4C, 0x662E, 0xCEF8, 0x662F, 0xAC4F, 0x6631, 0xAC52, + 0x6632, 0xCEED, 0x6633, 0xCEF2, 0x6634, 0xCEF6, 0x6635, 0xCEEE, 0x6636, 0xCEEB, 0x6639, 0xCEF7, 0x663A, 0xCEF4, 0x6641, 0xAED0, + 0x6642, 0xAEC9, 0x6643, 0xAECC, 0x6645, 0xAECF, 0x6647, 0xD1D5, 0x6649, 0xAECA, 0x664A, 0xD1D3, 0x664C, 0xAECE, 0x664F, 0xAECB, + 0x6651, 0xD1D6, 0x6652, 0xAECD, 0x6659, 0xD5AC, 0x665A, 0xB1DF, 0x665B, 0xD5AB, 0x665C, 0xD5AD, 0x665D, 0xB1DE, 0x665E, 0xB1E3, + 0x665F, 0xD1D4, 0x6661, 0xD5AA, 0x6662, 0xD5AE, 0x6664, 0xB1E0, 0x6665, 0xD5A9, 0x6666, 0xB1E2, 0x6668, 0xB1E1, 0x666A, 0xD9A7, + 0x666C, 0xD9A2, 0x666E, 0xB4B6, 0x666F, 0xB4BA, 0x6670, 0xB4B7, 0x6671, 0xD9A5, 0x6672, 0xD9A8, 0x6674, 0xB4B8, 0x6676, 0xB4B9, + 0x6677, 0xB4BE, 0x6678, 0xDDC7, 0x6679, 0xD9A6, 0x667A, 0xB4BC, 0x667B, 0xD9A3, 0x667C, 0xD9A1, 0x667E, 0xB4BD, 0x6680, 0xD9A4, + 0x6684, 0xB779, 0x6686, 0xDDBF, 0x6687, 0xB776, 0x6688, 0xB777, 0x6689, 0xB775, 0x668A, 0xDDC4, 0x668B, 0xDDC3, 0x668C, 0xDDC0, + 0x668D, 0xB77B, 0x6690, 0xDDC2, 0x6691, 0xB4BB, 0x6694, 0xDDC6, 0x6695, 0xDDC1, 0x6696, 0xB778, 0x6697, 0xB774, 0x6698, 0xB77A, + 0x6699, 0xDDC5, 0x669D, 0xBA5C, 0x669F, 0xE1F8, 0x66A0, 0xE1F7, 0x66A1, 0xE1F6, 0x66A2, 0xBA5A, 0x66A8, 0xBA5B, 0x66A9, 0xE5C5, + 0x66AA, 0xE5C8, 0x66AB, 0xBCC8, 0x66AE, 0xBCC7, 0x66AF, 0xE5C9, 0x66B0, 0xE5C4, 0x66B1, 0xBCCA, 0x66B2, 0xE5C6, 0x66B4, 0xBCC9, + 0x66B5, 0xE5C3, 0x66B7, 0xE5C7, 0x66B8, 0xBEE9, 0x66B9, 0xBEE6, 0x66BA, 0xE9BB, 0x66BB, 0xE9BA, 0x66BD, 0xE9B9, 0x66BE, 0xE9B4, + 0x66C0, 0xE9B5, 0x66C4, 0xBEE7, 0x66C6, 0xBEE4, 0x66C7, 0xBEE8, 0x66C8, 0xE9B3, 0x66C9, 0xBEE5, 0x66CA, 0xE9B6, 0x66CB, 0xE9B7, + 0x66CC, 0xE9BC, 0x66CF, 0xE9B8, 0x66D2, 0xECF2, 0x66D6, 0xC0C7, 0x66D8, 0xEFDC, 0x66D9, 0xC0C6, 0x66DA, 0xEFDA, 0x66DB, 0xEFDB, + 0x66DC, 0xC260, 0x66DD, 0xC36E, 0x66DE, 0xF24B, 0x66E0, 0xC36D, 0x66E3, 0xF451, 0x66E4, 0xF452, 0x66E6, 0xC466, 0x66E8, 0xF450, + 0x66E9, 0xC4E4, 0x66EB, 0xF7DF, 0x66EC, 0xC5CE, 0x66ED, 0xF8AA, 0x66EE, 0xF8AB, 0x66F0, 0xA4EA, 0x66F2, 0xA6B1, 0x66F3, 0xA6B2, + 0x66F4, 0xA7F3, 0x66F6, 0xCCD1, 0x66F7, 0xAC54, 0x66F8, 0xAED1, 0x66F9, 0xB1E4, 0x66FC, 0xB0D2, 0x66FE, 0xB4BF, 0x66FF, 0xB4C0, + 0x6700, 0xB3CC, 0x6701, 0xD9A9, 0x6703, 0xB77C, 0x6704, 0xE1FA, 0x6705, 0xE1F9, 0x6708, 0xA4EB, 0x6709, 0xA6B3, 0x670A, 0xCCD2, + 0x670B, 0xAA42, 0x670D, 0xAA41, 0x670F, 0xCEF9, 0x6710, 0xCEFA, 0x6712, 0xD1D7, 0x6713, 0xD1D8, 0x6714, 0xAED2, 0x6715, 0xAED3, + 0x6717, 0xAED4, 0x6718, 0xD5AF, 0x671B, 0xB1E6, 0x671D, 0xB4C2, 0x671F, 0xB4C1, 0x6720, 0xDDC8, 0x6721, 0xDF7A, 0x6722, 0xE1FB, + 0x6723, 0xE9BD, 0x6726, 0xC261, 0x6727, 0xC467, 0x6728, 0xA4EC, 0x672A, 0xA5BC, 0x672B, 0xA5BD, 0x672C, 0xA5BB, 0x672D, 0xA5BE, + 0x672E, 0xA5BA, 0x6731, 0xA6B6, 0x6733, 0xC9F6, 0x6734, 0xA6B5, 0x6735, 0xA6B7, 0x6738, 0xC9F1, 0x6739, 0xC9F0, 0x673A, 0xC9F3, + 0x673B, 0xC9F2, 0x673C, 0xC9F5, 0x673D, 0xA6B4, 0x673E, 0xC9EF, 0x673F, 0xC9F4, 0x6745, 0xCAFD, 0x6746, 0xA7FD, 0x6747, 0xCAFE, + 0x6748, 0xCB43, 0x6749, 0xA7FC, 0x674B, 0xCB47, 0x674C, 0xCB42, 0x674D, 0xCB45, 0x674E, 0xA7F5, 0x674F, 0xA7F6, 0x6750, 0xA7F7, + 0x6751, 0xA7F8, 0x6753, 0xA840, 0x6755, 0xCB41, 0x6756, 0xA7FA, 0x6757, 0xA841, 0x6759, 0xCB40, 0x675A, 0xCB46, 0x675C, 0xA7F9, + 0x675D, 0xCB44, 0x675E, 0xA7FB, 0x675F, 0xA7F4, 0x6760, 0xA7FE, 0x676A, 0xAA57, 0x676C, 0xCCD4, 0x676D, 0xAA43, 0x676F, 0xAA4D, + 0x6770, 0xAA4E, 0x6771, 0xAA46, 0x6772, 0xAA58, 0x6773, 0xAA48, 0x6774, 0xCCDC, 0x6775, 0xAA53, 0x6776, 0xCCD7, 0x6777, 0xAA49, + 0x6778, 0xCCE6, 0x6779, 0xCCE7, 0x677A, 0xCCDF, 0x677B, 0xCCD8, 0x677C, 0xAA56, 0x677D, 0xCCE4, 0x677E, 0xAA51, 0x677F, 0xAA4F, + 0x6781, 0xCCE5, 0x6783, 0xCCE3, 0x6784, 0xCCDB, 0x6785, 0xCCD3, 0x6786, 0xCCDA, 0x6787, 0xAA4A, 0x6789, 0xAA50, 0x678B, 0xAA44, + 0x678C, 0xCCDE, 0x678D, 0xCCDD, 0x678E, 0xCCD5, 0x6790, 0xAA52, 0x6791, 0xCCE1, 0x6792, 0xCCD6, 0x6793, 0xAA55, 0x6794, 0xCCE8, + 0x6795, 0xAA45, 0x6797, 0xAA4C, 0x6798, 0xCCD9, 0x6799, 0xCCE2, 0x679A, 0xAA54, 0x679C, 0xAA47, 0x679D, 0xAA4B, 0x679F, 0xCCE0, + 0x67AE, 0xCF5B, 0x67AF, 0xAC5C, 0x67B0, 0xAC69, 0x67B2, 0xCF56, 0x67B3, 0xCF4C, 0x67B4, 0xAC62, 0x67B5, 0xCF4A, 0x67B6, 0xAC5B, + 0x67B7, 0xCF45, 0x67B8, 0xAC65, 0x67B9, 0xCF52, 0x67BA, 0xCEFE, 0x67BB, 0xCF41, 0x67C0, 0xCF44, 0x67C1, 0xCEFB, 0x67C2, 0xCF51, + 0x67C3, 0xCF61, 0x67C4, 0xAC60, 0x67C5, 0xCF46, 0x67C6, 0xCF58, 0x67C8, 0xCEFD, 0x67C9, 0xCF5F, 0x67CA, 0xCF60, 0x67CB, 0xCF63, + 0x67CC, 0xCF5A, 0x67CD, 0xCF4B, 0x67CE, 0xCF53, 0x67CF, 0xAC66, 0x67D0, 0xAC59, 0x67D1, 0xAC61, 0x67D2, 0xAC6D, 0x67D3, 0xAC56, + 0x67D4, 0xAC58, 0x67D8, 0xCF43, 0x67D9, 0xAC6A, 0x67DA, 0xAC63, 0x67DB, 0xCF5D, 0x67DC, 0xCF40, 0x67DD, 0xAC6C, 0x67DE, 0xAC67, + 0x67DF, 0xCF49, 0x67E2, 0xAC6B, 0x67E3, 0xCF50, 0x67E4, 0xCF48, 0x67E5, 0xAC64, 0x67E6, 0xCF5C, 0x67E7, 0xCF54, 0x67E9, 0xAC5E, + 0x67EA, 0xCF62, 0x67EB, 0xCF47, 0x67EC, 0xAC5A, 0x67ED, 0xCF59, 0x67EE, 0xCF4F, 0x67EF, 0xAC5F, 0x67F0, 0xCF55, 0x67F1, 0xAC57, + 0x67F2, 0xCEFC, 0x67F3, 0xAC68, 0x67F4, 0xAEE3, 0x67F5, 0xAC5D, 0x67F6, 0xCF4E, 0x67F7, 0xCF4D, 0x67F8, 0xCF42, 0x67FA, 0xCF5E, + 0x67FC, 0xCF57, 0x67FF, 0xAC55, 0x6812, 0xD1EC, 0x6813, 0xAEEA, 0x6814, 0xD1ED, 0x6816, 0xD1E1, 0x6817, 0xAEDF, 0x6818, 0xAEEB, + 0x681A, 0xD1DA, 0x681C, 0xD1E3, 0x681D, 0xD1EB, 0x681F, 0xD1D9, 0x6820, 0xD1F4, 0x6821, 0xAED5, 0x6825, 0xD1F3, 0x6826, 0xD1EE, + 0x6828, 0xD1EF, 0x6829, 0xAEDD, 0x682A, 0xAEE8, 0x682B, 0xD1E5, 0x682D, 0xD1E6, 0x682E, 0xD1F0, 0x682F, 0xD1E7, 0x6831, 0xD1E2, + 0x6832, 0xD1DC, 0x6833, 0xD1DD, 0x6834, 0xD1EA, 0x6835, 0xD1E4, 0x6838, 0xAED6, 0x6839, 0xAEDA, 0x683A, 0xD1F2, 0x683B, 0xD1DE, + 0x683C, 0xAEE6, 0x683D, 0xAEE2, 0x6840, 0xAEE5, 0x6841, 0xAEEC, 0x6842, 0xAEDB, 0x6843, 0xAEE7, 0x6844, 0xD1E9, 0x6845, 0xAEE9, + 0x6846, 0xAED8, 0x6848, 0xAED7, 0x6849, 0xD1DB, 0x684B, 0xD1DF, 0x684C, 0xAEE0, 0x684D, 0xD1F1, 0x684E, 0xD1E8, 0x684F, 0xD1E0, + 0x6850, 0xAEE4, 0x6851, 0xAEE1, 0x6853, 0xAED9, 0x6854, 0xAEDC, 0x686B, 0xD5C4, 0x686D, 0xD5B4, 0x686E, 0xD5B5, 0x686F, 0xD5B9, + 0x6871, 0xD5C8, 0x6872, 0xD5C5, 0x6874, 0xD5BE, 0x6875, 0xD5BD, 0x6876, 0xB1ED, 0x6877, 0xD5C1, 0x6878, 0xD5D0, 0x6879, 0xD5B0, + 0x687B, 0xD5D1, 0x687C, 0xD5C3, 0x687D, 0xD5D5, 0x687E, 0xD5C9, 0x687F, 0xB1EC, 0x6880, 0xD5C7, 0x6881, 0xB1E7, 0x6882, 0xB1FC, + 0x6883, 0xB1F2, 0x6885, 0xB1F6, 0x6886, 0xB1F5, 0x6887, 0xD5B1, 0x6889, 0xD5CE, 0x688A, 0xD5D4, 0x688B, 0xD5CC, 0x688C, 0xD5D3, + 0x688F, 0xD5C0, 0x6890, 0xD5B2, 0x6891, 0xD5D2, 0x6892, 0xD5C2, 0x6893, 0xB1EA, 0x6894, 0xB1F7, 0x6896, 0xD5CB, 0x6897, 0xB1F0, + 0x689B, 0xD5CA, 0x689C, 0xD5B3, 0x689D, 0xB1F8, 0x689F, 0xB1FA, 0x68A0, 0xD5CD, 0x68A1, 0xB1FB, 0x68A2, 0xB1E9, 0x68A3, 0xD5BA, + 0x68A4, 0xD5CF, 0x68A7, 0xB1EF, 0x68A8, 0xB1F9, 0x68A9, 0xD5BC, 0x68AA, 0xD5C6, 0x68AB, 0xD5B7, 0x68AC, 0xD5BB, 0x68AD, 0xB1F4, + 0x68AE, 0xD5B6, 0x68AF, 0xB1E8, 0x68B0, 0xB1F1, 0x68B1, 0xB1EE, 0x68B2, 0xD5BF, 0x68B3, 0xAEDE, 0x68B4, 0xD9C0, 0x68B5, 0xB1EB, + 0x68C4, 0xB1F3, 0x68C6, 0xD9C3, 0x68C7, 0xD9D9, 0x68C8, 0xD9CE, 0x68C9, 0xB4D6, 0x68CB, 0xB4D1, 0x68CC, 0xD9BD, 0x68CD, 0xB4D2, + 0x68CE, 0xD9CD, 0x68D0, 0xD9C6, 0x68D1, 0xD9D3, 0x68D2, 0xB4CE, 0x68D3, 0xD9AB, 0x68D4, 0xD9D5, 0x68D5, 0xB4C4, 0x68D6, 0xD9B3, + 0x68D7, 0xB4C7, 0x68D8, 0xB4C6, 0x68DA, 0xB4D7, 0x68DC, 0xD9AD, 0x68DD, 0xD9CF, 0x68DE, 0xD9D0, 0x68DF, 0xB4C9, 0x68E0, 0xB4C5, + 0x68E1, 0xD9BB, 0x68E3, 0xB4D0, 0x68E4, 0xD9B6, 0x68E6, 0xD9D1, 0x68E7, 0xB4CC, 0x68E8, 0xD9C9, 0x68E9, 0xD9D6, 0x68EA, 0xD9B0, + 0x68EB, 0xD9B5, 0x68EC, 0xD9AF, 0x68EE, 0xB4CB, 0x68EF, 0xD9C2, 0x68F0, 0xDDDE, 0x68F1, 0xD9B1, 0x68F2, 0xB4CF, 0x68F3, 0xD9BA, + 0x68F4, 0xD9D2, 0x68F5, 0xB4CA, 0x68F6, 0xD9B7, 0x68F7, 0xD9B4, 0x68F8, 0xD9C5, 0x68F9, 0xB4CD, 0x68FA, 0xB4C3, 0x68FB, 0xB4D9, + 0x68FC, 0xD9C8, 0x68FD, 0xD9C7, 0x6904, 0xD9AC, 0x6905, 0xB4C8, 0x6906, 0xD9D4, 0x6907, 0xD9BC, 0x6908, 0xD9BE, 0x690A, 0xD9CB, + 0x690B, 0xD9CA, 0x690C, 0xD9AA, 0x690D, 0xB4D3, 0x690E, 0xB4D5, 0x690F, 0xD9B2, 0x6910, 0xD9B9, 0x6911, 0xD9C1, 0x6912, 0xB4D4, + 0x6913, 0xD9B8, 0x6914, 0xD9C4, 0x6915, 0xD9D7, 0x6917, 0xD9CC, 0x6925, 0xD9D8, 0x692A, 0xD9AE, 0x692F, 0xDDF2, 0x6930, 0xB7A6, + 0x6932, 0xDDF0, 0x6933, 0xDDDB, 0x6934, 0xDDE0, 0x6935, 0xDDD9, 0x6937, 0xDDEC, 0x6938, 0xDDCB, 0x6939, 0xDDD2, 0x693B, 0xDDEA, + 0x693C, 0xDDF4, 0x693D, 0xDDDC, 0x693F, 0xDDCF, 0x6940, 0xDDE2, 0x6941, 0xDDE7, 0x6942, 0xDDD3, 0x6944, 0xDDE4, 0x6945, 0xDDD0, + 0x6948, 0xDDD7, 0x6949, 0xDDD8, 0x694A, 0xB7A8, 0x694B, 0xDDEB, 0x694C, 0xDDE9, 0x694E, 0xDDCC, 0x694F, 0xDDEE, 0x6951, 0xDDEF, + 0x6952, 0xDDF1, 0x6953, 0xB7AC, 0x6954, 0xB7A4, 0x6956, 0xD5B8, 0x6957, 0xDDD4, 0x6958, 0xDDE6, 0x6959, 0xDDD5, 0x695A, 0xB7A1, + 0x695B, 0xB7B1, 0x695C, 0xDDED, 0x695D, 0xB7AF, 0x695E, 0xB7AB, 0x695F, 0xDDCA, 0x6960, 0xB7A3, 0x6962, 0xDDCD, 0x6963, 0xB7B0, + 0x6965, 0xDDDD, 0x6966, 0xDDC9, 0x6968, 0xB7A9, 0x6969, 0xDDE1, 0x696A, 0xDDD1, 0x696B, 0xB7AA, 0x696C, 0xDDDA, 0x696D, 0xB77E, + 0x696E, 0xB4D8, 0x696F, 0xDDE3, 0x6970, 0xD9BF, 0x6971, 0xDDCE, 0x6974, 0xDDE8, 0x6975, 0xB7A5, 0x6976, 0xDDE5, 0x6977, 0xB7A2, + 0x6978, 0xDDDF, 0x6979, 0xB7AD, 0x697A, 0xDDD6, 0x697B, 0xDDF3, 0x6982, 0xB7A7, 0x6983, 0xDEC6, 0x6986, 0xB7AE, 0x698D, 0xE24A, + 0x698E, 0xE248, 0x6990, 0xE25E, 0x6991, 0xE246, 0x6993, 0xE258, 0x6994, 0xB77D, 0x6995, 0xBA5F, 0x6996, 0xE242, 0x6997, 0xE25D, + 0x6999, 0xE247, 0x699A, 0xE255, 0x699B, 0xBA64, 0x699C, 0xBA5D, 0x699E, 0xE25B, 0x69A0, 0xE240, 0x69A1, 0xE25A, 0x69A3, 0xBA6F, + 0x69A4, 0xE251, 0x69A5, 0xE261, 0x69A6, 0xBA6D, 0x69A7, 0xE249, 0x69A8, 0xBA5E, 0x69A9, 0xE24B, 0x69AA, 0xE259, 0x69AB, 0xBA67, + 0x69AC, 0xE244, 0x69AD, 0xBA6B, 0x69AE, 0xBA61, 0x69AF, 0xE24D, 0x69B0, 0xE243, 0x69B1, 0xE1FC, 0x69B3, 0xE257, 0x69B4, 0xBA68, + 0x69B5, 0xE260, 0x69B6, 0xE1FD, 0x69B7, 0xBA65, 0x69B9, 0xE253, 0x69BB, 0xBA66, 0x69BC, 0xE245, 0x69BD, 0xE250, 0x69BE, 0xE24C, + 0x69BF, 0xE24E, 0x69C1, 0xBA60, 0x69C2, 0xE25F, 0x69C3, 0xBA6E, 0x69C4, 0xE24F, 0x69C6, 0xE262, 0x69C9, 0xE1FE, 0x69CA, 0xE254, + 0x69CB, 0xBA63, 0x69CC, 0xBA6C, 0x69CD, 0xBA6A, 0x69CE, 0xE241, 0x69CF, 0xE256, 0x69D0, 0xBA69, 0x69D3, 0xBA62, 0x69D4, 0xE252, + 0x69D9, 0xE25C, 0x69E2, 0xE5D5, 0x69E4, 0xE5D1, 0x69E5, 0xE5CD, 0x69E6, 0xE5E1, 0x69E7, 0xE5DE, 0x69E8, 0xBCCD, 0x69EB, 0xE5E5, + 0x69EC, 0xE5D4, 0x69ED, 0xBCD8, 0x69EE, 0xE5DB, 0x69F1, 0xE5D0, 0x69F2, 0xE5DA, 0x69F3, 0xBCD5, 0x69F4, 0xE5EE, 0x69F6, 0xE5EB, + 0x69F7, 0xE5DD, 0x69F8, 0xE5CE, 0x69FB, 0xE5E2, 0x69FC, 0xE5E4, 0x69FD, 0xBCD1, 0x69FE, 0xE5D8, 0x69FF, 0xE5D3, 0x6A00, 0xE5CA, + 0x6A01, 0xBCCE, 0x6A02, 0xBCD6, 0x6A04, 0xE5E7, 0x6A05, 0xBCD7, 0x6A06, 0xE5CB, 0x6A07, 0xE5ED, 0x6A08, 0xE5E0, 0x6A09, 0xE5E6, + 0x6A0A, 0xBCD4, 0x6A0D, 0xE5E3, 0x6A0F, 0xE5EA, 0x6A11, 0xBCD9, 0x6A13, 0xBCD3, 0x6A14, 0xE5DC, 0x6A15, 0xE5CF, 0x6A16, 0xE5EF, + 0x6A17, 0xE5CC, 0x6A18, 0xE5E8, 0x6A19, 0xBCD0, 0x6A1B, 0xE5D6, 0x6A1D, 0xE5D7, 0x6A1E, 0xBCCF, 0x6A1F, 0xBCCC, 0x6A20, 0xE5D2, + 0x6A21, 0xBCD2, 0x6A23, 0xBCCB, 0x6A25, 0xE5E9, 0x6A26, 0xE5EC, 0x6A27, 0xE5D9, 0x6A28, 0xE9CA, 0x6A32, 0xE9C2, 0x6A34, 0xE9BE, + 0x6A35, 0xBEF6, 0x6A38, 0xBEEB, 0x6A39, 0xBEF0, 0x6A3A, 0xBEEC, 0x6A3B, 0xE9CC, 0x6A3C, 0xE9D7, 0x6A3D, 0xBEEA, 0x6A3E, 0xE9C4, + 0x6A3F, 0xE9CD, 0x6A40, 0xE5DF, 0x6A41, 0xE9CE, 0x6A44, 0xBEF1, 0x6A46, 0xE9DD, 0x6A47, 0xBEF5, 0x6A48, 0xBEF8, 0x6A49, 0xE9C0, + 0x6A4B, 0xBEF4, 0x6A4D, 0xE9DB, 0x6A4E, 0xE9DC, 0x6A4F, 0xE9D2, 0x6A50, 0xE9D1, 0x6A51, 0xE9C9, 0x6A54, 0xE9D3, 0x6A55, 0xE9DA, + 0x6A56, 0xE9D9, 0x6A58, 0xBEEF, 0x6A59, 0xBEED, 0x6A5A, 0xE9CB, 0x6A5B, 0xE9C8, 0x6A5D, 0xE9C5, 0x6A5E, 0xE9D8, 0x6A5F, 0xBEF7, + 0x6A60, 0xE9D6, 0x6A61, 0xBEF3, 0x6A62, 0xBEF2, 0x6A64, 0xE9D0, 0x6A66, 0xE9BF, 0x6A67, 0xE9C1, 0x6A68, 0xE9C3, 0x6A69, 0xE9D5, + 0x6A6A, 0xE9CF, 0x6A6B, 0xBEEE, 0x6A6D, 0xE9C6, 0x6A6F, 0xE9D4, 0x6A76, 0xE9C7, 0x6A7E, 0xC0CF, 0x6A7F, 0xED45, 0x6A80, 0xC0C8, + 0x6A81, 0xECF5, 0x6A83, 0xED41, 0x6A84, 0xC0CA, 0x6A85, 0xED48, 0x6A87, 0xECFC, 0x6A89, 0xECF7, 0x6A8C, 0xED49, 0x6A8D, 0xECF3, + 0x6A8E, 0xECFE, 0x6A90, 0xC0D1, 0x6A91, 0xED44, 0x6A92, 0xED4A, 0x6A93, 0xECFD, 0x6A94, 0xC0C9, 0x6A95, 0xED40, 0x6A96, 0xECF4, + 0x6A97, 0xC0D0, 0x6A9A, 0xED47, 0x6A9B, 0xECF9, 0x6A9C, 0xC0CC, 0x6A9E, 0xECFB, 0x6A9F, 0xECF8, 0x6AA0, 0xC0D2, 0x6AA1, 0xECFA, + 0x6AA2, 0xC0CB, 0x6AA3, 0xC0CE, 0x6AA4, 0xED43, 0x6AA5, 0xECF6, 0x6AA6, 0xED46, 0x6AA8, 0xED42, 0x6AAC, 0xC263, 0x6AAD, 0xEFE7, + 0x6AAE, 0xC268, 0x6AAF, 0xC269, 0x6AB3, 0xC262, 0x6AB4, 0xEFE6, 0x6AB6, 0xEFE3, 0x6AB7, 0xEFE4, 0x6AB8, 0xC266, 0x6AB9, 0xEFDE, + 0x6ABA, 0xEFE2, 0x6ABB, 0xC265, 0x6ABD, 0xEFDF, 0x6AC2, 0xC267, 0x6AC3, 0xC264, 0x6AC5, 0xEFDD, 0x6AC6, 0xEFE1, 0x6AC7, 0xEFE5, + 0x6ACB, 0xF251, 0x6ACC, 0xF24E, 0x6ACD, 0xF257, 0x6ACF, 0xF256, 0x6AD0, 0xF254, 0x6AD1, 0xF24F, 0x6AD3, 0xC372, 0x6AD9, 0xF250, + 0x6ADA, 0xC371, 0x6ADB, 0xC0CD, 0x6ADC, 0xF253, 0x6ADD, 0xC370, 0x6ADE, 0xF258, 0x6ADF, 0xF252, 0x6AE0, 0xF24D, 0x6AE1, 0xEFE0, + 0x6AE5, 0xC36F, 0x6AE7, 0xF24C, 0x6AE8, 0xF456, 0x6AEA, 0xF455, 0x6AEB, 0xF255, 0x6AEC, 0xC468, 0x6AEE, 0xF459, 0x6AEF, 0xF45A, + 0x6AF0, 0xF454, 0x6AF1, 0xF458, 0x6AF3, 0xF453, 0x6AF8, 0xF5D1, 0x6AF9, 0xF457, 0x6AFA, 0xC4E7, 0x6AFB, 0xC4E5, 0x6AFC, 0xF5CF, + 0x6B00, 0xF5D2, 0x6B02, 0xF5CE, 0x6B03, 0xF5D0, 0x6B04, 0xC4E6, 0x6B08, 0xF6E5, 0x6B09, 0xF6E6, 0x6B0A, 0xC576, 0x6B0B, 0xF6E4, + 0x6B0F, 0xF7E2, 0x6B10, 0xC5CF, 0x6B11, 0xF7E0, 0x6B12, 0xF7E1, 0x6B13, 0xF8AC, 0x6B16, 0xC656, 0x6B17, 0xF8F3, 0x6B18, 0xF8F1, + 0x6B19, 0xF8F2, 0x6B1A, 0xF8F4, 0x6B1E, 0xF9BB, 0x6B20, 0xA4ED, 0x6B21, 0xA6B8, 0x6B23, 0xAA59, 0x6B25, 0xCCE9, 0x6B28, 0xCF64, + 0x6B2C, 0xD1F5, 0x6B2D, 0xD1F7, 0x6B2F, 0xD1F6, 0x6B31, 0xD1F8, 0x6B32, 0xB1FD, 0x6B33, 0xD5D7, 0x6B34, 0xD1F9, 0x6B36, 0xD5D6, + 0x6B37, 0xD5D8, 0x6B38, 0xD5D9, 0x6B39, 0xD9DA, 0x6B3A, 0xB4DB, 0x6B3B, 0xD9DB, 0x6B3C, 0xD9DD, 0x6B3D, 0xB4DC, 0x6B3E, 0xB4DA, + 0x6B3F, 0xD9DC, 0x6B41, 0xDDFA, 0x6B42, 0xDDF8, 0x6B43, 0xDDF7, 0x6B45, 0xDDF6, 0x6B46, 0xDDF5, 0x6B47, 0xB7B2, 0x6B48, 0xDDF9, + 0x6B49, 0xBA70, 0x6B4A, 0xE263, 0x6B4B, 0xE265, 0x6B4C, 0xBA71, 0x6B4D, 0xE264, 0x6B4E, 0xBCDB, 0x6B50, 0xBCDA, 0x6B51, 0xE5F0, + 0x6B54, 0xE9DF, 0x6B55, 0xE9DE, 0x6B56, 0xE9E0, 0x6B59, 0xBEF9, 0x6B5B, 0xED4B, 0x6B5C, 0xC0D3, 0x6B5E, 0xEFE8, 0x6B5F, 0xC26A, + 0x6B60, 0xF259, 0x6B61, 0xC577, 0x6B62, 0xA4EE, 0x6B63, 0xA5BF, 0x6B64, 0xA6B9, 0x6B65, 0xA842, 0x6B66, 0xAA5A, 0x6B67, 0xAA5B, + 0x6B6A, 0xAC6E, 0x6B6D, 0xD1FA, 0x6B72, 0xB7B3, 0x6B76, 0xE6D1, 0x6B77, 0xBEFA, 0x6B78, 0xC26B, 0x6B79, 0xA4EF, 0x6B7B, 0xA6BA, + 0x6B7E, 0xCCEB, 0x6B7F, 0xAA5C, 0x6B80, 0xCCEA, 0x6B82, 0xCF65, 0x6B83, 0xAC6F, 0x6B84, 0xCF66, 0x6B86, 0xAC70, 0x6B88, 0xD1FC, + 0x6B89, 0xAEEE, 0x6B8A, 0xAEED, 0x6B8C, 0xD5DE, 0x6B8D, 0xD5DC, 0x6B8E, 0xD5DD, 0x6B8F, 0xD5DB, 0x6B91, 0xD5DA, 0x6B94, 0xD9DE, + 0x6B95, 0xD9E1, 0x6B96, 0xB4DE, 0x6B97, 0xD9DF, 0x6B98, 0xB4DD, 0x6B99, 0xD9E0, 0x6B9B, 0xDDFB, 0x6B9E, 0xE266, 0x6B9F, 0xE267, + 0x6BA0, 0xE268, 0x6BA2, 0xE5F3, 0x6BA3, 0xE5F2, 0x6BA4, 0xBCDC, 0x6BA5, 0xE5F1, 0x6BA6, 0xE5F4, 0x6BA7, 0xE9E1, 0x6BAA, 0xE9E2, + 0x6BAB, 0xE9E3, 0x6BAD, 0xED4C, 0x6BAE, 0xC0D4, 0x6BAF, 0xC26C, 0x6BB0, 0xF25A, 0x6BB2, 0xC4E8, 0x6BB3, 0xC95F, 0x6BB5, 0xAC71, + 0x6BB6, 0xCF67, 0x6BB7, 0xAEEF, 0x6BBA, 0xB1FE, 0x6BBC, 0xB4DF, 0x6BBD, 0xD9E2, 0x6BBF, 0xB7B5, 0x6BC0, 0xB7B4, 0x6BC3, 0xE269, + 0x6BC4, 0xE26A, 0x6BC5, 0xBCDD, 0x6BC6, 0xBCDE, 0x6BC7, 0xE9E5, 0x6BC8, 0xE9E4, 0x6BC9, 0xEFE9, 0x6BCA, 0xF7E3, 0x6BCB, 0xA4F0, + 0x6BCC, 0xC960, 0x6BCD, 0xA5C0, 0x6BCF, 0xA843, 0x6BD0, 0xCB48, 0x6BD2, 0xAC72, 0x6BD3, 0xB7B6, 0x6BD4, 0xA4F1, 0x6BD6, 0xCF68, + 0x6BD7, 0xAC73, 0x6BD8, 0xCF69, 0x6BDA, 0xC0D5, 0x6BDB, 0xA4F2, 0x6BDE, 0xCCEC, 0x6BE0, 0xCF6A, 0x6BE2, 0xD242, 0x6BE3, 0xD241, + 0x6BE4, 0xD1FE, 0x6BE6, 0xD1FD, 0x6BE7, 0xD243, 0x6BE8, 0xD240, 0x6BEB, 0xB240, 0x6BEC, 0xB241, 0x6BEF, 0xB4E0, 0x6BF0, 0xD9E3, + 0x6BF2, 0xD9E4, 0x6BF3, 0xD9E5, 0x6BF7, 0xDE41, 0x6BF8, 0xDE42, 0x6BF9, 0xDE40, 0x6BFB, 0xDDFD, 0x6BFC, 0xDDFE, 0x6BFD, 0xB7B7, + 0x6BFE, 0xE26B, 0x6BFF, 0xE5F7, 0x6C00, 0xE5F6, 0x6C01, 0xE5F5, 0x6C02, 0xE5F8, 0x6C03, 0xE9E7, 0x6C04, 0xE9E6, 0x6C05, 0xBEFB, + 0x6C06, 0xE9E8, 0x6C08, 0xC0D6, 0x6C09, 0xED4D, 0x6C0B, 0xEFEA, 0x6C0C, 0xF25B, 0x6C0D, 0xF6E7, 0x6C0F, 0xA4F3, 0x6C10, 0xA5C2, + 0x6C11, 0xA5C1, 0x6C13, 0xAA5D, 0x6C14, 0xC961, 0x6C15, 0xC97E, 0x6C16, 0xA6BB, 0x6C18, 0xC9F7, 0x6C19, 0xCB49, 0x6C1A, 0xCB4A, + 0x6C1B, 0xAA5E, 0x6C1D, 0xCCED, 0x6C1F, 0xAC74, 0x6C20, 0xCF6B, 0x6C21, 0xCF6C, 0x6C23, 0xAEF0, 0x6C24, 0xAEF4, 0x6C25, 0xD244, + 0x6C26, 0xAEF3, 0x6C27, 0xAEF1, 0x6C28, 0xAEF2, 0x6C2A, 0xD5DF, 0x6C2B, 0xB242, 0x6C2C, 0xB4E3, 0x6C2E, 0xB4E1, 0x6C2F, 0xB4E2, + 0x6C30, 0xD9E6, 0x6C33, 0xBA72, 0x6C34, 0xA4F4, 0x6C36, 0xC9A1, 0x6C38, 0xA5C3, 0x6C3B, 0xC9A4, 0x6C3E, 0xA5C6, 0x6C3F, 0xC9A3, + 0x6C40, 0xA5C5, 0x6C41, 0xA5C4, 0x6C42, 0xA844, 0x6C43, 0xC9A2, 0x6C46, 0xC9F8, 0x6C4A, 0xC9FC, 0x6C4B, 0xC9FE, 0x6C4C, 0xCA40, + 0x6C4D, 0xA6C5, 0x6C4E, 0xA6C6, 0x6C4F, 0xC9FB, 0x6C50, 0xA6C1, 0x6C52, 0xC9F9, 0x6C54, 0xC9FD, 0x6C55, 0xA6C2, 0x6C57, 0xA6BD, + 0x6C59, 0xA6BE, 0x6C5B, 0xA6C4, 0x6C5C, 0xC9FA, 0x6C5D, 0xA6BC, 0x6C5E, 0xA845, 0x6C5F, 0xA6BF, 0x6C60, 0xA6C0, 0x6C61, 0xA6C3, + 0x6C65, 0xCB5B, 0x6C66, 0xCB59, 0x6C67, 0xCB4C, 0x6C68, 0xA851, 0x6C69, 0xCB53, 0x6C6A, 0xA84C, 0x6C6B, 0xCB4D, 0x6C6D, 0xCB55, + 0x6C6F, 0xCB52, 0x6C70, 0xA84F, 0x6C71, 0xCB51, 0x6C72, 0xA856, 0x6C73, 0xCB5A, 0x6C74, 0xA858, 0x6C76, 0xA85A, 0x6C78, 0xCB4B, + 0x6C7A, 0xA84D, 0x6C7B, 0xCB5C, 0x6C7D, 0xA854, 0x6C7E, 0xA857, 0x6C80, 0xCD45, 0x6C81, 0xA847, 0x6C82, 0xA85E, 0x6C83, 0xA855, + 0x6C84, 0xCB4E, 0x6C85, 0xA84A, 0x6C86, 0xA859, 0x6C87, 0xCB56, 0x6C88, 0xA848, 0x6C89, 0xA849, 0x6C8A, 0xCD43, 0x6C8B, 0xCB4F, + 0x6C8C, 0xA850, 0x6C8D, 0xA85B, 0x6C8E, 0xCB5D, 0x6C8F, 0xCB50, 0x6C90, 0xA84E, 0x6C92, 0xA853, 0x6C93, 0xCCEE, 0x6C94, 0xA85C, + 0x6C95, 0xCB57, 0x6C96, 0xA852, 0x6C98, 0xA85D, 0x6C99, 0xA846, 0x6C9A, 0xCB54, 0x6C9B, 0xA84B, 0x6C9C, 0xCB58, 0x6C9D, 0xCD44, + 0x6CAB, 0xAA6A, 0x6CAC, 0xAA7A, 0x6CAD, 0xCCF5, 0x6CAE, 0xAA71, 0x6CB0, 0xCD4B, 0x6CB1, 0xAA62, 0x6CB3, 0xAA65, 0x6CB4, 0xCD42, + 0x6CB6, 0xCCF3, 0x6CB7, 0xCCF7, 0x6CB8, 0xAA6D, 0x6CB9, 0xAA6F, 0x6CBA, 0xCCFA, 0x6CBB, 0xAA76, 0x6CBC, 0xAA68, 0x6CBD, 0xAA66, + 0x6CBE, 0xAA67, 0x6CBF, 0xAA75, 0x6CC0, 0xCD47, 0x6CC1, 0xAA70, 0x6CC2, 0xCCF9, 0x6CC3, 0xCCFB, 0x6CC4, 0xAA6E, 0x6CC5, 0xAA73, + 0x6CC6, 0xCCFC, 0x6CC7, 0xCD4A, 0x6CC9, 0xAC75, 0x6CCA, 0xAA79, 0x6CCC, 0xAA63, 0x6CCD, 0xCD49, 0x6CCF, 0xCD4D, 0x6CD0, 0xCCF8, + 0x6CD1, 0xCD4F, 0x6CD2, 0xCD40, 0x6CD3, 0xAA6C, 0x6CD4, 0xCCF4, 0x6CD5, 0xAA6B, 0x6CD6, 0xAA7D, 0x6CD7, 0xAA72, 0x6CD9, 0xCCF2, + 0x6CDA, 0xCF75, 0x6CDB, 0xAA78, 0x6CDC, 0xAA7C, 0x6CDD, 0xCD41, 0x6CDE, 0xCD46, 0x6CE0, 0xAA7E, 0x6CE1, 0xAA77, 0x6CE2, 0xAA69, + 0x6CE3, 0xAA5F, 0x6CE5, 0xAA64, 0x6CE7, 0xCCF6, 0x6CE8, 0xAA60, 0x6CE9, 0xCD4E, 0x6CEB, 0xCCF0, 0x6CEC, 0xCCEF, 0x6CED, 0xCCFD, + 0x6CEE, 0xCCF1, 0x6CEF, 0xAA7B, 0x6CF0, 0xAEF5, 0x6CF1, 0xAA74, 0x6CF2, 0xCCFE, 0x6CF3, 0xAA61, 0x6CF5, 0xACA6, 0x6CF9, 0xCD4C, + 0x6D00, 0xCF7C, 0x6D01, 0xCFA1, 0x6D03, 0xCFA4, 0x6D04, 0xCF77, 0x6D07, 0xCFA7, 0x6D08, 0xCFAA, 0x6D09, 0xCFAC, 0x6D0A, 0xCF74, + 0x6D0B, 0xAC76, 0x6D0C, 0xAC7B, 0x6D0D, 0xD249, 0x6D0E, 0xACAD, 0x6D0F, 0xCFA5, 0x6D10, 0xCFAD, 0x6D11, 0xCF7B, 0x6D12, 0xCF73, + 0x6D16, 0xD264, 0x6D17, 0xAC7E, 0x6D18, 0xCFA2, 0x6D19, 0xCF78, 0x6D1A, 0xCF7A, 0x6D1B, 0xACA5, 0x6D1D, 0xCF7D, 0x6D1E, 0xAC7D, + 0x6D1F, 0xCF70, 0x6D20, 0xCFA8, 0x6D22, 0xCFAB, 0x6D25, 0xAC7A, 0x6D27, 0xACA8, 0x6D28, 0xCF6D, 0x6D29, 0xACAA, 0x6D2A, 0xAC78, + 0x6D2B, 0xACAE, 0x6D2C, 0xCFA9, 0x6D2D, 0xCF6F, 0x6D2E, 0xACAB, 0x6D2F, 0xD25E, 0x6D30, 0xCD48, 0x6D31, 0xAC7C, 0x6D32, 0xAC77, + 0x6D33, 0xCF76, 0x6D34, 0xCF6E, 0x6D35, 0xACAC, 0x6D36, 0xACA4, 0x6D37, 0xCFA3, 0x6D38, 0xACA9, 0x6D39, 0xACA7, 0x6D3A, 0xCF79, + 0x6D3B, 0xACA1, 0x6D3C, 0xCF71, 0x6D3D, 0xACA2, 0x6D3E, 0xACA3, 0x6D3F, 0xCF72, 0x6D40, 0xCFA6, 0x6D41, 0xAC79, 0x6D42, 0xCF7E, + 0x6D58, 0xD24C, 0x6D59, 0xAEFD, 0x6D5A, 0xAF43, 0x6D5E, 0xD255, 0x6D5F, 0xD25B, 0x6D60, 0xD257, 0x6D61, 0xD24A, 0x6D62, 0xD24D, + 0x6D63, 0xD246, 0x6D64, 0xD247, 0x6D65, 0xAF4A, 0x6D66, 0xAEFA, 0x6D67, 0xD256, 0x6D68, 0xD25F, 0x6D69, 0xAF45, 0x6D6A, 0xAEF6, + 0x6D6C, 0xAF40, 0x6D6D, 0xD24E, 0x6D6E, 0xAF42, 0x6D6F, 0xD24F, 0x6D70, 0xD259, 0x6D74, 0xAF44, 0x6D75, 0xD268, 0x6D76, 0xD248, + 0x6D77, 0xAEFC, 0x6D78, 0xAEFB, 0x6D79, 0xAF48, 0x6D7A, 0xD245, 0x6D7B, 0xD266, 0x6D7C, 0xD25A, 0x6D7D, 0xD267, 0x6D7E, 0xD261, + 0x6D7F, 0xD253, 0x6D80, 0xD262, 0x6D82, 0xD25C, 0x6D83, 0xD265, 0x6D84, 0xD263, 0x6D85, 0xAF49, 0x6D86, 0xD254, 0x6D87, 0xAEF9, + 0x6D88, 0xAEF8, 0x6D89, 0xAF41, 0x6D8A, 0xAF47, 0x6D8B, 0xD260, 0x6D8C, 0xAF46, 0x6D8D, 0xD251, 0x6D8E, 0xB243, 0x6D90, 0xD269, + 0x6D91, 0xD250, 0x6D92, 0xD24B, 0x6D93, 0xAEFE, 0x6D94, 0xAF4B, 0x6D95, 0xAEF7, 0x6D97, 0xD258, 0x6D98, 0xD25D, 0x6DAA, 0xB265, + 0x6DAB, 0xD5E1, 0x6DAC, 0xD5E5, 0x6DAE, 0xB252, 0x6DAF, 0xB250, 0x6DB2, 0xB247, 0x6DB3, 0xD5E3, 0x6DB4, 0xD5E2, 0x6DB5, 0xB25B, + 0x6DB7, 0xD5E8, 0x6DB8, 0xB255, 0x6DBA, 0xD5FA, 0x6DBB, 0xD647, 0x6DBC, 0xB244, 0x6DBD, 0xD5F7, 0x6DBE, 0xD5F0, 0x6DBF, 0xB267, + 0x6DC0, 0xD5E0, 0x6DC2, 0xD5FC, 0x6DC4, 0xB264, 0x6DC5, 0xB258, 0x6DC6, 0xB263, 0x6DC7, 0xB24E, 0x6DC8, 0xD5EC, 0x6DC9, 0xD5FE, + 0x6DCA, 0xD5F6, 0x6DCB, 0xB24F, 0x6DCC, 0xB249, 0x6DCD, 0xD645, 0x6DCF, 0xD5FD, 0x6DD0, 0xD640, 0x6DD1, 0xB251, 0x6DD2, 0xB259, + 0x6DD3, 0xD642, 0x6DD4, 0xD5EA, 0x6DD5, 0xD5FB, 0x6DD6, 0xD5EF, 0x6DD7, 0xD644, 0x6DD8, 0xB25E, 0x6DD9, 0xB246, 0x6DDA, 0xB25C, + 0x6DDB, 0xD5F4, 0x6DDC, 0xD5F2, 0x6DDD, 0xD5F3, 0x6DDE, 0xB253, 0x6DDF, 0xD5EE, 0x6DE0, 0xD5ED, 0x6DE1, 0xB248, 0x6DE2, 0xD5E7, + 0x6DE3, 0xD646, 0x6DE4, 0xB24A, 0x6DE5, 0xD5F1, 0x6DE6, 0xB268, 0x6DE8, 0xB262, 0x6DE9, 0xD5E6, 0x6DEA, 0xB25F, 0x6DEB, 0xB25D, + 0x6DEC, 0xB266, 0x6DED, 0xD5F8, 0x6DEE, 0xB261, 0x6DEF, 0xD252, 0x6DF0, 0xD5F9, 0x6DF1, 0xB260, 0x6DF2, 0xD641, 0x6DF3, 0xB245, + 0x6DF4, 0xD5F5, 0x6DF5, 0xB257, 0x6DF6, 0xD5E9, 0x6DF7, 0xB256, 0x6DF9, 0xB254, 0x6DFA, 0xB24C, 0x6DFB, 0xB24B, 0x6DFC, 0xD9E7, + 0x6DFD, 0xD643, 0x6E00, 0xD5EB, 0x6E03, 0xD9FC, 0x6E05, 0xB24D, 0x6E19, 0xB541, 0x6E1A, 0xB25A, 0x6E1B, 0xB4EE, 0x6E1C, 0xD9F6, + 0x6E1D, 0xB4FC, 0x6E1F, 0xD9EA, 0x6E20, 0xB4EB, 0x6E21, 0xB4E7, 0x6E22, 0xDA49, 0x6E23, 0xB4ED, 0x6E24, 0xB4F1, 0x6E25, 0xB4EC, + 0x6E26, 0xB4F5, 0x6E27, 0xDA4D, 0x6E28, 0xDA44, 0x6E2B, 0xD9F1, 0x6E2C, 0xB4FA, 0x6E2D, 0xB4F4, 0x6E2E, 0xD9FD, 0x6E2F, 0xB4E4, + 0x6E30, 0xDA4A, 0x6E31, 0xDA43, 0x6E32, 0xB4E8, 0x6E33, 0xD9F7, 0x6E34, 0xB4F7, 0x6E35, 0xDA55, 0x6E36, 0xDA56, 0x6E38, 0xB4E5, + 0x6E39, 0xDA48, 0x6E3A, 0xB4F9, 0x6E3B, 0xD9FB, 0x6E3C, 0xD9ED, 0x6E3D, 0xD9EE, 0x6E3E, 0xB4FD, 0x6E3F, 0xD9F2, 0x6E40, 0xD9F9, + 0x6E41, 0xD9F3, 0x6E43, 0xB4FB, 0x6E44, 0xB544, 0x6E45, 0xD9EF, 0x6E46, 0xD9E8, 0x6E47, 0xD9E9, 0x6E49, 0xD9EB, 0x6E4A, 0xB4EA, + 0x6E4B, 0xD9F8, 0x6E4D, 0xB4F8, 0x6E4E, 0xB542, 0x6E51, 0xD9FA, 0x6E52, 0xDA53, 0x6E53, 0xDA4B, 0x6E54, 0xB4E6, 0x6E55, 0xDA51, + 0x6E56, 0xB4F2, 0x6E58, 0xB4F0, 0x6E5A, 0xDA57, 0x6E5B, 0xB4EF, 0x6E5C, 0xDA41, 0x6E5D, 0xD9F4, 0x6E5E, 0xD9FE, 0x6E5F, 0xB547, + 0x6E60, 0xDA45, 0x6E61, 0xDA42, 0x6E62, 0xD9F0, 0x6E63, 0xB543, 0x6E64, 0xDA4F, 0x6E65, 0xDA4C, 0x6E66, 0xDA54, 0x6E67, 0xB4E9, + 0x6E68, 0xDA40, 0x6E69, 0xB546, 0x6E6B, 0xDA47, 0x6E6E, 0xB4F3, 0x6E6F, 0xB4F6, 0x6E71, 0xDA46, 0x6E72, 0xB545, 0x6E73, 0xD9F5, + 0x6E74, 0xD5E4, 0x6E77, 0xDA50, 0x6E78, 0xDA4E, 0x6E79, 0xDA52, 0x6E88, 0xD9EC, 0x6E89, 0xB540, 0x6E8D, 0xDE61, 0x6E8E, 0xDE60, + 0x6E8F, 0xDE46, 0x6E90, 0xB7BD, 0x6E92, 0xDE5F, 0x6E93, 0xDE49, 0x6E94, 0xDE4A, 0x6E96, 0xB7C7, 0x6E97, 0xDE68, 0x6E98, 0xB7C2, + 0x6E99, 0xDE5E, 0x6E9B, 0xDE43, 0x6E9C, 0xB7C8, 0x6E9D, 0xB7BE, 0x6E9E, 0xDE52, 0x6E9F, 0xDE48, 0x6EA0, 0xDE4B, 0x6EA1, 0xDE63, + 0x6EA2, 0xB7B8, 0x6EA3, 0xDE6A, 0x6EA4, 0xDE62, 0x6EA5, 0xB7C1, 0x6EA6, 0xDE57, 0x6EA7, 0xB7CC, 0x6EAA, 0xB7CB, 0x6EAB, 0xB7C5, + 0x6EAE, 0xDE69, 0x6EAF, 0xB7B9, 0x6EB0, 0xDE55, 0x6EB1, 0xDE4C, 0x6EB2, 0xDE59, 0x6EB3, 0xDE65, 0x6EB4, 0xB7CD, 0x6EB6, 0xB7BB, + 0x6EB7, 0xDE54, 0x6EB9, 0xDE4D, 0x6EBA, 0xB7C4, 0x6EBC, 0xB7C3, 0x6EBD, 0xDE50, 0x6EBE, 0xDE5A, 0x6EBF, 0xDE64, 0x6EC0, 0xDE47, + 0x6EC1, 0xDE51, 0x6EC2, 0xB7BC, 0x6EC3, 0xDE5B, 0x6EC4, 0xB7C9, 0x6EC5, 0xB7C0, 0x6EC6, 0xDE4E, 0x6EC7, 0xB7BF, 0x6EC8, 0xDE45, + 0x6EC9, 0xDE53, 0x6ECA, 0xDE67, 0x6ECB, 0xB4FE, 0x6ECC, 0xBAB0, 0x6ECD, 0xDE56, 0x6ECE, 0xE26C, 0x6ECF, 0xDE58, 0x6ED0, 0xDE66, + 0x6ED1, 0xB7C6, 0x6ED2, 0xDE4F, 0x6ED3, 0xB7BA, 0x6ED4, 0xB7CA, 0x6ED5, 0xBCF0, 0x6ED6, 0xDE44, 0x6ED8, 0xDE5D, 0x6EDC, 0xDE5C, + 0x6EEB, 0xE2AA, 0x6EEC, 0xBAAD, 0x6EED, 0xE27D, 0x6EEE, 0xE2A4, 0x6EEF, 0xBAA2, 0x6EF1, 0xE26E, 0x6EF2, 0xBAAF, 0x6EF4, 0xBA77, + 0x6EF5, 0xE26D, 0x6EF6, 0xE2B0, 0x6EF7, 0xBAB1, 0x6EF8, 0xE271, 0x6EF9, 0xE2A3, 0x6EFB, 0xE273, 0x6EFC, 0xE2B3, 0x6EFD, 0xE2AF, + 0x6EFE, 0xBA75, 0x6EFF, 0xBAA1, 0x6F00, 0xE653, 0x6F01, 0xBAAE, 0x6F02, 0xBA7D, 0x6F03, 0xE26F, 0x6F05, 0xE2AE, 0x6F06, 0xBAA3, + 0x6F07, 0xE2AB, 0x6F08, 0xE2B8, 0x6F09, 0xE275, 0x6F0A, 0xE27E, 0x6F0D, 0xE2B6, 0x6F0E, 0xE2AC, 0x6F0F, 0xBA7C, 0x6F12, 0xE27C, + 0x6F13, 0xBA76, 0x6F14, 0xBA74, 0x6F15, 0xBAA8, 0x6F18, 0xE27A, 0x6F19, 0xE277, 0x6F1A, 0xE278, 0x6F1C, 0xE2B2, 0x6F1E, 0xE2B7, + 0x6F1F, 0xE2B5, 0x6F20, 0xBA7A, 0x6F21, 0xE2B9, 0x6F22, 0xBA7E, 0x6F23, 0xBAA7, 0x6F25, 0xE270, 0x6F26, 0xE5FA, 0x6F27, 0xE279, + 0x6F29, 0xBA78, 0x6F2A, 0xBAAC, 0x6F2B, 0xBAA9, 0x6F2C, 0xBA7B, 0x6F2D, 0xE2A5, 0x6F2E, 0xE274, 0x6F2F, 0xBAAA, 0x6F30, 0xE2A7, + 0x6F31, 0xBAA4, 0x6F32, 0xBAA6, 0x6F33, 0xBA73, 0x6F35, 0xE2A9, 0x6F36, 0xE2A1, 0x6F37, 0xE272, 0x6F38, 0xBAA5, 0x6F39, 0xE2B1, + 0x6F3A, 0xE2B4, 0x6F3B, 0xE27B, 0x6F3C, 0xE2A8, 0x6F3E, 0xBA79, 0x6F3F, 0xBCDF, 0x6F40, 0xE2A6, 0x6F41, 0xE5F9, 0x6F43, 0xE2AD, + 0x6F4E, 0xE276, 0x6F4F, 0xE644, 0x6F50, 0xE64E, 0x6F51, 0xBCE2, 0x6F52, 0xE64D, 0x6F53, 0xE659, 0x6F54, 0xBCE4, 0x6F55, 0xE64B, + 0x6F57, 0xE64F, 0x6F58, 0xBCEF, 0x6F5A, 0xE646, 0x6F5B, 0xBCE7, 0x6F5D, 0xE652, 0x6F5E, 0xE9F0, 0x6F5F, 0xBCF3, 0x6F60, 0xBCF2, + 0x6F61, 0xE654, 0x6F62, 0xE643, 0x6F63, 0xE65E, 0x6F64, 0xBCED, 0x6F66, 0xBCE3, 0x6F67, 0xE657, 0x6F69, 0xE65B, 0x6F6A, 0xE660, + 0x6F6B, 0xE655, 0x6F6C, 0xE649, 0x6F6D, 0xBCE6, 0x6F6E, 0xBCE9, 0x6F6F, 0xBCF1, 0x6F70, 0xBCEC, 0x6F72, 0xE64C, 0x6F73, 0xE2A2, + 0x6F76, 0xE648, 0x6F77, 0xE65F, 0x6F78, 0xBCE8, 0x6F7A, 0xBCEB, 0x6F7B, 0xE661, 0x6F7C, 0xBCE0, 0x6F7D, 0xE656, 0x6F7E, 0xE5FB, + 0x6F7F, 0xE65C, 0x6F80, 0xC0DF, 0x6F82, 0xE64A, 0x6F84, 0xBCE1, 0x6F85, 0xE645, 0x6F86, 0xBCE5, 0x6F87, 0xE5FC, 0x6F88, 0xBAAB, + 0x6F89, 0xE641, 0x6F8B, 0xE65A, 0x6F8C, 0xE642, 0x6F8D, 0xE640, 0x6F8E, 0xBCEA, 0x6F90, 0xE658, 0x6F92, 0xE5FE, 0x6F93, 0xE651, + 0x6F94, 0xE650, 0x6F95, 0xE65D, 0x6F96, 0xE647, 0x6F97, 0xBCEE, 0x6F9E, 0xE9F3, 0x6FA0, 0xBF49, 0x6FA1, 0xBEFE, 0x6FA2, 0xEA40, + 0x6FA3, 0xE9EB, 0x6FA4, 0xBF41, 0x6FA5, 0xE9F7, 0x6FA6, 0xBF48, 0x6FA7, 0xBF43, 0x6FA8, 0xE9F5, 0x6FA9, 0xED4F, 0x6FAA, 0xE9FB, + 0x6FAB, 0xEA42, 0x6FAC, 0xE9FA, 0x6FAD, 0xE9E9, 0x6FAE, 0xE9F8, 0x6FAF, 0xEA44, 0x6FB0, 0xEA46, 0x6FB1, 0xBEFD, 0x6FB2, 0xEA45, + 0x6FB3, 0xBF44, 0x6FB4, 0xBF4A, 0x6FB6, 0xBF47, 0x6FB8, 0xE9FE, 0x6FB9, 0xBF46, 0x6FBA, 0xE9F9, 0x6FBC, 0xE9ED, 0x6FBD, 0xE9F2, + 0x6FBF, 0xE9FD, 0x6FC0, 0xBF45, 0x6FC1, 0xBF42, 0x6FC2, 0xBEFC, 0x6FC3, 0xBF40, 0x6FC4, 0xE9F1, 0x6FC6, 0xE5FD, 0x6FC7, 0xE9EC, + 0x6FC8, 0xE9EF, 0x6FC9, 0xEA41, 0x6FCA, 0xE9F4, 0x6FCB, 0xE9EA, 0x6FCC, 0xED4E, 0x6FCD, 0xEA43, 0x6FCE, 0xE9EE, 0x6FCF, 0xE9FC, + 0x6FD4, 0xED51, 0x6FD5, 0xC0E3, 0x6FD8, 0xC0D7, 0x6FDB, 0xC0DB, 0x6FDC, 0xED53, 0x6FDD, 0xED59, 0x6FDE, 0xED57, 0x6FDF, 0xC0D9, + 0x6FE0, 0xC0DA, 0x6FE1, 0xC0E1, 0x6FE2, 0xED5A, 0x6FE3, 0xED52, 0x6FE4, 0xC0DC, 0x6FE6, 0xED56, 0x6FE7, 0xED55, 0x6FE8, 0xED5B, + 0x6FE9, 0xC0E2, 0x6FEB, 0xC0DD, 0x6FEC, 0xC0E0, 0x6FED, 0xED54, 0x6FEE, 0xC0E4, 0x6FEF, 0xC0DE, 0x6FF0, 0xC0E5, 0x6FF1, 0xC0D8, + 0x6FF2, 0xED58, 0x6FF4, 0xED50, 0x6FF7, 0xEFF7, 0x6FFA, 0xC271, 0x6FFB, 0xEFF4, 0x6FFC, 0xEFF6, 0x6FFE, 0xC26F, 0x6FFF, 0xEFF2, + 0x7000, 0xEFF3, 0x7001, 0xEFEE, 0x7004, 0xE9F6, 0x7005, 0xEFEF, 0x7006, 0xC270, 0x7007, 0xEFEB, 0x7009, 0xC26D, 0x700A, 0xEFF8, + 0x700B, 0xC26E, 0x700C, 0xEFEC, 0x700D, 0xEFED, 0x700E, 0xEFF1, 0x700F, 0xC273, 0x7011, 0xC272, 0x7014, 0xEFF0, 0x7015, 0xC378, + 0x7016, 0xF25F, 0x7017, 0xF265, 0x7018, 0xC379, 0x7019, 0xF25C, 0x701A, 0xC376, 0x701B, 0xC373, 0x701C, 0xF267, 0x701D, 0xC377, + 0x701F, 0xC374, 0x7020, 0xF25E, 0x7021, 0xF261, 0x7022, 0xF262, 0x7023, 0xF263, 0x7024, 0xF266, 0x7026, 0xEFF5, 0x7027, 0xF25D, + 0x7028, 0xC375, 0x7029, 0xF264, 0x702A, 0xF268, 0x702B, 0xF260, 0x702F, 0xF45D, 0x7030, 0xC46A, 0x7031, 0xF460, 0x7032, 0xC46B, + 0x7033, 0xF468, 0x7034, 0xF45F, 0x7035, 0xF45C, 0x7037, 0xF45E, 0x7038, 0xF462, 0x7039, 0xF465, 0x703A, 0xF464, 0x703B, 0xF467, + 0x703C, 0xF45B, 0x703E, 0xC469, 0x703F, 0xF463, 0x7040, 0xF466, 0x7041, 0xF469, 0x7042, 0xF461, 0x7043, 0xF5D3, 0x7044, 0xF5D4, + 0x7045, 0xF5D8, 0x7046, 0xF5D9, 0x7048, 0xF5D6, 0x7049, 0xF5D7, 0x704A, 0xF5D5, 0x704C, 0xC4E9, 0x7051, 0xC578, 0x7052, 0xF6EB, + 0x7055, 0xF6E8, 0x7056, 0xF6E9, 0x7057, 0xF6EA, 0x7058, 0xC579, 0x705A, 0xF7E5, 0x705B, 0xF7E4, 0x705D, 0xF8AF, 0x705E, 0xC5F4, + 0x705F, 0xF8AD, 0x7060, 0xF8B0, 0x7061, 0xF8AE, 0x7062, 0xF8F5, 0x7063, 0xC657, 0x7064, 0xC665, 0x7065, 0xF9A3, 0x7066, 0xF96C, + 0x7068, 0xF9A2, 0x7069, 0xF9D0, 0x706A, 0xF9D1, 0x706B, 0xA4F5, 0x7070, 0xA6C7, 0x7071, 0xCA41, 0x7074, 0xCB5E, 0x7076, 0xA85F, + 0x7078, 0xA862, 0x707A, 0xCB5F, 0x707C, 0xA860, 0x707D, 0xA861, 0x7082, 0xCD58, 0x7083, 0xCD5A, 0x7084, 0xCD55, 0x7085, 0xCD52, + 0x7086, 0xCD54, 0x708A, 0xAAA4, 0x708E, 0xAAA2, 0x7091, 0xCD56, 0x7092, 0xAAA3, 0x7093, 0xCD53, 0x7094, 0xCD50, 0x7095, 0xAAA1, + 0x7096, 0xCD57, 0x7098, 0xCD51, 0x7099, 0xAAA5, 0x709A, 0xCD59, 0x709F, 0xCFAF, 0x70A1, 0xCFB3, 0x70A4, 0xACB7, 0x70A9, 0xCFB6, + 0x70AB, 0xACAF, 0x70AC, 0xACB2, 0x70AD, 0xACB4, 0x70AE, 0xACB6, 0x70AF, 0xACB3, 0x70B0, 0xCFB2, 0x70B1, 0xCFB1, 0x70B3, 0xACB1, + 0x70B4, 0xCFB4, 0x70B5, 0xCFB5, 0x70B7, 0xCFAE, 0x70B8, 0xACB5, 0x70BA, 0xACB0, 0x70BE, 0xCFB0, 0x70C5, 0xD277, 0x70C6, 0xD278, + 0x70C7, 0xD279, 0x70C8, 0xAF50, 0x70CA, 0xAF4C, 0x70CB, 0xD26E, 0x70CD, 0xD276, 0x70CE, 0xD27B, 0x70CF, 0xAF51, 0x70D1, 0xD26C, + 0x70D2, 0xD272, 0x70D3, 0xD26B, 0x70D4, 0xD275, 0x70D7, 0xD271, 0x70D8, 0xAF4D, 0x70D9, 0xAF4F, 0x70DA, 0xD27A, 0x70DC, 0xD26A, + 0x70DD, 0xD26D, 0x70DE, 0xD273, 0x70E0, 0xD274, 0x70E1, 0xD27C, 0x70E2, 0xD270, 0x70E4, 0xAF4E, 0x70EF, 0xB26D, 0x70F0, 0xD64E, + 0x70F3, 0xD650, 0x70F4, 0xD64C, 0x70F6, 0xD658, 0x70F7, 0xD64A, 0x70F8, 0xD657, 0x70F9, 0xB269, 0x70FA, 0xD648, 0x70FB, 0xDA5B, + 0x70FC, 0xD652, 0x70FD, 0xB26C, 0x70FF, 0xD653, 0x7100, 0xD656, 0x7102, 0xD65A, 0x7104, 0xD64F, 0x7106, 0xD654, 0x7109, 0xB26A, + 0x710A, 0xB26B, 0x710B, 0xD659, 0x710C, 0xD64D, 0x710D, 0xD649, 0x710E, 0xD65B, 0x7110, 0xD651, 0x7113, 0xD655, 0x7117, 0xD64B, + 0x7119, 0xB548, 0x711A, 0xB549, 0x711B, 0xDA65, 0x711C, 0xB54F, 0x711E, 0xDA59, 0x711F, 0xDA62, 0x7120, 0xDA58, 0x7121, 0xB54C, + 0x7122, 0xDA60, 0x7123, 0xDA5E, 0x7125, 0xDA5F, 0x7126, 0xB54A, 0x7128, 0xDA63, 0x712E, 0xDA5C, 0x712F, 0xDA5A, 0x7130, 0xB54B, + 0x7131, 0xDA5D, 0x7132, 0xDA61, 0x7136, 0xB54D, 0x713A, 0xDA64, 0x7141, 0xDE70, 0x7142, 0xDE77, 0x7143, 0xDE79, 0x7144, 0xDEA1, + 0x7146, 0xB7DA, 0x7147, 0xDE6B, 0x7149, 0xB7D2, 0x714B, 0xDE7A, 0x714C, 0xB7D7, 0x714D, 0xDEA2, 0x714E, 0xB7CE, 0x7150, 0xDE7D, + 0x7152, 0xDE6D, 0x7153, 0xDE7E, 0x7154, 0xDE6C, 0x7156, 0xB7DC, 0x7158, 0xDE78, 0x7159, 0xB7CF, 0x715A, 0xDEA3, 0x715C, 0xB7D4, + 0x715D, 0xDE71, 0x715E, 0xB7D9, 0x715F, 0xDE7C, 0x7160, 0xDE6F, 0x7161, 0xDE76, 0x7162, 0xDE72, 0x7163, 0xDE6E, 0x7164, 0xB7D1, + 0x7165, 0xB7D8, 0x7166, 0xB7D6, 0x7167, 0xB7D3, 0x7168, 0xB7DB, 0x7169, 0xB7D0, 0x716A, 0xDE75, 0x716C, 0xB7D5, 0x716E, 0xB54E, + 0x7170, 0xDE7B, 0x7172, 0xDE73, 0x7178, 0xDE74, 0x717B, 0xE2C1, 0x717D, 0xBAB4, 0x7180, 0xE2BD, 0x7181, 0xE2C3, 0x7182, 0xE2BF, + 0x7184, 0xBAB6, 0x7185, 0xE2BE, 0x7186, 0xE2C2, 0x7187, 0xE2BA, 0x7189, 0xE2BC, 0x718A, 0xBAB5, 0x718F, 0xE2C0, 0x7190, 0xE2BB, + 0x7192, 0xBAB7, 0x7194, 0xBAB2, 0x7197, 0xE2C4, 0x7199, 0xBAB3, 0x719A, 0xE667, 0x719B, 0xE664, 0x719C, 0xE670, 0x719D, 0xE66A, + 0x719E, 0xE66C, 0x719F, 0xBCF4, 0x71A0, 0xE666, 0x71A1, 0xE66E, 0x71A4, 0xE66D, 0x71A5, 0xE66B, 0x71A7, 0xE671, 0x71A8, 0xBCF7, + 0x71A9, 0xE668, 0x71AA, 0xE66F, 0x71AC, 0xBCF5, 0x71AF, 0xE663, 0x71B0, 0xE665, 0x71B1, 0xBCF6, 0x71B2, 0xE662, 0x71B3, 0xE672, + 0x71B5, 0xE669, 0x71B8, 0xEA4A, 0x71B9, 0xBF51, 0x71BC, 0xEA55, 0x71BD, 0xEA53, 0x71BE, 0xBF4B, 0x71BF, 0xEA49, 0x71C0, 0xEA4C, + 0x71C1, 0xEA4D, 0x71C2, 0xEA48, 0x71C3, 0xBF55, 0x71C4, 0xBF56, 0x71C5, 0xEA47, 0x71C6, 0xEA56, 0x71C7, 0xEA51, 0x71C8, 0xBF4F, + 0x71C9, 0xBF4C, 0x71CA, 0xEA50, 0x71CB, 0xEA4E, 0x71CE, 0xBF52, 0x71CF, 0xEA52, 0x71D0, 0xBF4D, 0x71D2, 0xBF4E, 0x71D4, 0xEA4F, + 0x71D5, 0xBF50, 0x71D6, 0xEA4B, 0x71D8, 0xEA54, 0x71D9, 0xBF53, 0x71DA, 0xEA57, 0x71DB, 0xEA58, 0x71DC, 0xBF54, 0x71DF, 0xC0E7, + 0x71E0, 0xC0EE, 0x71E1, 0xED5C, 0x71E2, 0xED62, 0x71E4, 0xED60, 0x71E5, 0xC0EA, 0x71E6, 0xC0E9, 0x71E7, 0xC0E6, 0x71E8, 0xED5E, + 0x71EC, 0xC0EC, 0x71ED, 0xC0EB, 0x71EE, 0xC0E8, 0x71F0, 0xED61, 0x71F1, 0xED5D, 0x71F2, 0xED5F, 0x71F4, 0xC0ED, 0x71F8, 0xC277, + 0x71F9, 0xEFFB, 0x71FB, 0xC274, 0x71FC, 0xC275, 0x71FD, 0xEFFD, 0x71FE, 0xC276, 0x71FF, 0xEFFA, 0x7201, 0xEFF9, 0x7202, 0xF26C, + 0x7203, 0xEFFC, 0x7205, 0xF26D, 0x7206, 0xC37A, 0x7207, 0xF26B, 0x720A, 0xF26A, 0x720C, 0xF269, 0x720D, 0xC37B, 0x7210, 0xC46C, + 0x7213, 0xF46A, 0x7214, 0xF46B, 0x7219, 0xF5DC, 0x721A, 0xF5DB, 0x721B, 0xC4EA, 0x721D, 0xF5DA, 0x721E, 0xF6EC, 0x721F, 0xF6ED, + 0x7222, 0xF7E6, 0x7223, 0xF8B1, 0x7226, 0xF8F6, 0x7227, 0xF9BC, 0x7228, 0xC679, 0x7229, 0xF9C6, 0x722A, 0xA4F6, 0x722C, 0xAAA6, + 0x722D, 0xAAA7, 0x7230, 0xACB8, 0x7235, 0xC0EF, 0x7236, 0xA4F7, 0x7238, 0xAAA8, 0x7239, 0xAF52, 0x723A, 0xB7DD, 0x723B, 0xA4F8, + 0x723D, 0xB26E, 0x723E, 0xBAB8, 0x723F, 0xC962, 0x7241, 0xCFB7, 0x7242, 0xD27D, 0x7244, 0xE2C5, 0x7246, 0xC0F0, 0x7247, 0xA4F9, + 0x7248, 0xAAA9, 0x7249, 0xCFB8, 0x724A, 0xCFB9, 0x724B, 0xDA66, 0x724C, 0xB550, 0x724F, 0xDEA4, 0x7252, 0xB7DE, 0x7253, 0xE2C6, + 0x7256, 0xBCF8, 0x7258, 0xC37C, 0x7259, 0xA4FA, 0x725A, 0xDA67, 0x725B, 0xA4FB, 0x725D, 0xA6C9, 0x725E, 0xCA42, 0x725F, 0xA6C8, + 0x7260, 0xA865, 0x7261, 0xA864, 0x7262, 0xA863, 0x7263, 0xCB60, 0x7267, 0xAAAA, 0x7269, 0xAAAB, 0x726A, 0xCD5B, 0x726C, 0xCFBA, + 0x726E, 0xCFBD, 0x726F, 0xACBA, 0x7270, 0xCFBB, 0x7272, 0xACB9, 0x7273, 0xCFBC, 0x7274, 0xACBB, 0x7276, 0xD2A2, 0x7277, 0xD2A1, + 0x7278, 0xD27E, 0x7279, 0xAF53, 0x727B, 0xD65D, 0x727C, 0xD65E, 0x727D, 0xB26F, 0x727E, 0xD65C, 0x727F, 0xD65F, 0x7280, 0xB552, + 0x7281, 0xB270, 0x7284, 0xB551, 0x7285, 0xDA6B, 0x7286, 0xDA6A, 0x7288, 0xDA68, 0x7289, 0xDA69, 0x728B, 0xDA6C, 0x728C, 0xDEA6, + 0x728D, 0xDEA5, 0x728E, 0xDEA9, 0x7290, 0xDEA8, 0x7291, 0xDEA7, 0x7292, 0xBAB9, 0x7293, 0xE2C9, 0x7295, 0xE2C8, 0x7296, 0xBABA, + 0x7297, 0xE2C7, 0x7298, 0xE673, 0x729A, 0xE674, 0x729B, 0xBCF9, 0x729D, 0xEA59, 0x729E, 0xEA5A, 0x72A1, 0xF272, 0x72A2, 0xC37D, + 0x72A3, 0xF271, 0x72A4, 0xF270, 0x72A5, 0xF26E, 0x72A6, 0xF26F, 0x72A7, 0xC4EB, 0x72A8, 0xF46C, 0x72A9, 0xF6EE, 0x72AA, 0xF8F7, + 0x72AC, 0xA4FC, 0x72AE, 0xC9A5, 0x72AF, 0xA5C7, 0x72B0, 0xC9A6, 0x72B4, 0xCA43, 0x72B5, 0xCA44, 0x72BA, 0xCB66, 0x72BD, 0xCB62, + 0x72BF, 0xCB61, 0x72C0, 0xAAAC, 0x72C1, 0xCB65, 0x72C2, 0xA867, 0x72C3, 0xCB63, 0x72C4, 0xA866, 0x72C5, 0xCB67, 0x72C6, 0xCB64, + 0x72C9, 0xCD5F, 0x72CA, 0xCFBE, 0x72CB, 0xCD5D, 0x72CC, 0xCD64, 0x72CE, 0xAAAD, 0x72D0, 0xAAB0, 0x72D1, 0xCD65, 0x72D2, 0xCD61, + 0x72D4, 0xCD62, 0x72D6, 0xCD5C, 0x72D7, 0xAAAF, 0x72D8, 0xCD5E, 0x72D9, 0xAAAE, 0x72DA, 0xCD63, 0x72DC, 0xCD60, 0x72DF, 0xCFC2, + 0x72E0, 0xACBD, 0x72E1, 0xACBE, 0x72E3, 0xCFC5, 0x72E4, 0xCFBF, 0x72E6, 0xCFC4, 0x72E8, 0xCFC0, 0x72E9, 0xACBC, 0x72EA, 0xCFC3, + 0x72EB, 0xCFC1, 0x72F3, 0xD2A8, 0x72F4, 0xD2A5, 0x72F6, 0xD2A7, 0x72F7, 0xAF58, 0x72F8, 0xAF57, 0x72F9, 0xAF55, 0x72FA, 0xD2A4, + 0x72FB, 0xD2A9, 0x72FC, 0xAF54, 0x72FD, 0xAF56, 0x72FE, 0xD2A6, 0x72FF, 0xD667, 0x7300, 0xD2A3, 0x7301, 0xD2AA, 0x7307, 0xD662, + 0x7308, 0xD666, 0x730A, 0xD665, 0x730B, 0xDA6E, 0x730C, 0xDA79, 0x730F, 0xD668, 0x7311, 0xD663, 0x7312, 0xDA6D, 0x7313, 0xB274, + 0x7316, 0xB273, 0x7317, 0xD661, 0x7318, 0xD664, 0x7319, 0xB275, 0x731B, 0xB272, 0x731C, 0xB271, 0x731D, 0xD660, 0x731E, 0xD669, + 0x7322, 0xDA70, 0x7323, 0xDA77, 0x7325, 0xB554, 0x7326, 0xDA76, 0x7327, 0xDA73, 0x7329, 0xB556, 0x732D, 0xDA75, 0x7330, 0xDA6F, + 0x7331, 0xDA71, 0x7332, 0xDA74, 0x7333, 0xDA72, 0x7334, 0xB555, 0x7335, 0xDA78, 0x7336, 0xB553, 0x7337, 0xB7DF, 0x733A, 0xDEAD, + 0x733B, 0xDEAC, 0x733C, 0xDEAA, 0x733E, 0xB7E2, 0x733F, 0xB7E1, 0x7340, 0xDEAE, 0x7342, 0xDEAB, 0x7343, 0xE2CA, 0x7344, 0xBABB, + 0x7345, 0xB7E0, 0x7349, 0xDEB0, 0x734A, 0xDEAF, 0x734C, 0xE2CD, 0x734D, 0xE2CB, 0x734E, 0xBCFA, 0x7350, 0xBABC, 0x7351, 0xE2CC, + 0x7352, 0xE676, 0x7357, 0xBCFB, 0x7358, 0xE675, 0x7359, 0xE67E, 0x735A, 0xE67D, 0x735B, 0xE67B, 0x735D, 0xE67A, 0x735E, 0xE677, + 0x735F, 0xE678, 0x7360, 0xE679, 0x7361, 0xE67C, 0x7362, 0xE6A1, 0x7365, 0xEA5F, 0x7366, 0xEA5C, 0x7367, 0xEA5D, 0x7368, 0xBF57, + 0x7369, 0xEA5B, 0x736A, 0xEA61, 0x736B, 0xEA60, 0x736C, 0xEA5E, 0x736E, 0xED64, 0x736F, 0xED65, 0x7370, 0xC0F1, 0x7372, 0xC0F2, + 0x7373, 0xED63, 0x7375, 0xC279, 0x7376, 0xEFFE, 0x7377, 0xC278, 0x7378, 0xC37E, 0x737A, 0xC3A1, 0x737B, 0xC46D, 0x737C, 0xF46E, + 0x737D, 0xF46D, 0x737E, 0xF5DD, 0x737F, 0xF6EF, 0x7380, 0xC57A, 0x7381, 0xF7E8, 0x7382, 0xF7E7, 0x7383, 0xF7E9, 0x7384, 0xA5C8, + 0x7385, 0xCFC6, 0x7386, 0xAF59, 0x7387, 0xB276, 0x7388, 0xD66A, 0x7389, 0xA5C9, 0x738A, 0xC9A7, 0x738B, 0xA4FD, 0x738E, 0xCA45, + 0x7392, 0xCB6C, 0x7393, 0xCB6A, 0x7394, 0xCB6B, 0x7395, 0xCB68, 0x7396, 0xA868, 0x7397, 0xCB69, 0x739D, 0xCD6D, 0x739F, 0xAAB3, + 0x73A0, 0xCD6B, 0x73A1, 0xCD67, 0x73A2, 0xCD6A, 0x73A4, 0xCD66, 0x73A5, 0xAAB5, 0x73A6, 0xCD69, 0x73A8, 0xAAB2, 0x73A9, 0xAAB1, + 0x73AB, 0xAAB4, 0x73AC, 0xCD6C, 0x73AD, 0xCD68, 0x73B2, 0xACC2, 0x73B3, 0xACC5, 0x73B4, 0xCFCE, 0x73B5, 0xCFCD, 0x73B6, 0xCFCC, + 0x73B7, 0xACBF, 0x73B8, 0xCFD5, 0x73B9, 0xCFCB, 0x73BB, 0xACC1, 0x73BC, 0xD2AF, 0x73BE, 0xCFD2, 0x73BF, 0xCFD0, 0x73C0, 0xACC4, + 0x73C2, 0xCFC8, 0x73C3, 0xCFD3, 0x73C5, 0xCFCA, 0x73C6, 0xCFD4, 0x73C7, 0xCFD1, 0x73C8, 0xCFC9, 0x73CA, 0xACC0, 0x73CB, 0xCFD6, + 0x73CC, 0xCFC7, 0x73CD, 0xACC3, 0x73D2, 0xD2B4, 0x73D3, 0xD2AB, 0x73D4, 0xD2B6, 0x73D6, 0xD2AE, 0x73D7, 0xD2B9, 0x73D8, 0xD2BA, + 0x73D9, 0xD2AC, 0x73DA, 0xD2B8, 0x73DB, 0xD2B5, 0x73DC, 0xD2B3, 0x73DD, 0xD2B7, 0x73DE, 0xAF5F, 0x73E0, 0xAF5D, 0x73E3, 0xD2B1, + 0x73E5, 0xD2AD, 0x73E7, 0xD2B0, 0x73E8, 0xD2BB, 0x73E9, 0xD2B2, 0x73EA, 0xAF5E, 0x73EB, 0xCFCF, 0x73ED, 0xAF5A, 0x73EE, 0xAF5C, + 0x73F4, 0xD678, 0x73F5, 0xD66D, 0x73F6, 0xD66B, 0x73F8, 0xD66C, 0x73FA, 0xD673, 0x73FC, 0xD674, 0x73FD, 0xD670, 0x73FE, 0xB27B, + 0x73FF, 0xD675, 0x7400, 0xD672, 0x7401, 0xD66F, 0x7403, 0xB279, 0x7404, 0xD66E, 0x7405, 0xB277, 0x7406, 0xB27A, 0x7407, 0xD671, + 0x7408, 0xD679, 0x7409, 0xAF5B, 0x740A, 0xB278, 0x740B, 0xD677, 0x740C, 0xD676, 0x740D, 0xB27C, 0x7416, 0xDA7E, 0x741A, 0xDAA1, + 0x741B, 0xB560, 0x741D, 0xDAA7, 0x7420, 0xDAA9, 0x7421, 0xDAA2, 0x7422, 0xB55A, 0x7423, 0xDAA6, 0x7424, 0xDAA5, 0x7425, 0xB55B, + 0x7426, 0xB561, 0x7428, 0xB562, 0x7429, 0xDAA8, 0x742A, 0xB558, 0x742B, 0xDA7D, 0x742C, 0xDA7B, 0x742D, 0xDAA3, 0x742E, 0xDA7A, + 0x742F, 0xB55F, 0x7430, 0xDA7C, 0x7431, 0xDAA4, 0x7432, 0xDAAA, 0x7433, 0xB559, 0x7434, 0xB55E, 0x7435, 0xB55C, 0x7436, 0xB55D, + 0x743A, 0xB557, 0x743F, 0xB7E9, 0x7440, 0xDEB7, 0x7441, 0xB7E8, 0x7442, 0xDEBB, 0x7444, 0xDEB1, 0x7446, 0xDEBC, 0x744A, 0xDEB2, + 0x744B, 0xDEB3, 0x744D, 0xDEBD, 0x744E, 0xDEBA, 0x744F, 0xDEB8, 0x7450, 0xDEB9, 0x7451, 0xDEB5, 0x7452, 0xDEB4, 0x7454, 0xDEBE, + 0x7455, 0xB7E5, 0x7457, 0xDEB6, 0x7459, 0xB7EA, 0x745A, 0xB7E4, 0x745B, 0xB7EB, 0x745C, 0xB7EC, 0x745E, 0xB7E7, 0x745F, 0xB7E6, + 0x7462, 0xE2CE, 0x7463, 0xBABE, 0x7464, 0xBABD, 0x7467, 0xE2D3, 0x7469, 0xBCFC, 0x746A, 0xBABF, 0x746D, 0xBAC1, 0x746E, 0xE2D4, + 0x746F, 0xB7E3, 0x7470, 0xBAC0, 0x7471, 0xE2D0, 0x7472, 0xE2D2, 0x7473, 0xE2CF, 0x7475, 0xE2D1, 0x7479, 0xE6AB, 0x747C, 0xE6AA, + 0x747D, 0xE6A7, 0x747E, 0xBD40, 0x747F, 0xEA62, 0x7480, 0xBD41, 0x7481, 0xE6A6, 0x7483, 0xBCFE, 0x7485, 0xE6A8, 0x7486, 0xE6A5, + 0x7487, 0xE6A2, 0x7488, 0xE6A9, 0x7489, 0xE6A3, 0x748A, 0xE6A4, 0x748B, 0xBCFD, 0x7490, 0xED69, 0x7492, 0xEA66, 0x7494, 0xEA65, + 0x7495, 0xEA67, 0x7497, 0xED66, 0x7498, 0xBF5A, 0x749A, 0xEA63, 0x749C, 0xBF58, 0x749E, 0xBF5C, 0x749F, 0xBF5B, 0x74A0, 0xEA64, + 0x74A1, 0xEA68, 0x74A3, 0xBF59, 0x74A5, 0xED6D, 0x74A6, 0xC0F5, 0x74A7, 0xC27A, 0x74A8, 0xC0F6, 0x74A9, 0xC0F3, 0x74AA, 0xED6A, + 0x74AB, 0xED68, 0x74AD, 0xED6B, 0x74AF, 0xED6E, 0x74B0, 0xC0F4, 0x74B1, 0xED6C, 0x74B2, 0xED67, 0x74B5, 0xF042, 0x74B6, 0xF045, + 0x74B7, 0xF275, 0x74B8, 0xF040, 0x74BA, 0xF46F, 0x74BB, 0xF046, 0x74BD, 0xC3A2, 0x74BE, 0xF044, 0x74BF, 0xC27B, 0x74C0, 0xF041, + 0x74C1, 0xF043, 0x74C2, 0xF047, 0x74C3, 0xF276, 0x74C5, 0xF274, 0x74CA, 0xC3A3, 0x74CB, 0xF273, 0x74CF, 0xC46E, 0x74D4, 0xC4ED, + 0x74D5, 0xF6F1, 0x74D6, 0xC4EC, 0x74D7, 0xF6F3, 0x74D8, 0xF6F0, 0x74D9, 0xF6F2, 0x74DA, 0xC5D0, 0x74DB, 0xF8B2, 0x74DC, 0xA5CA, + 0x74DD, 0xCD6E, 0x74DE, 0xD2BC, 0x74DF, 0xD2BD, 0x74E0, 0xB27D, 0x74E1, 0xDEBF, 0x74E2, 0xBF5D, 0x74E3, 0xC3A4, 0x74E4, 0xC57B, + 0x74E5, 0xF8B3, 0x74E6, 0xA5CB, 0x74E8, 0xCD6F, 0x74E9, 0xA260, 0x74EC, 0xCFD7, 0x74EE, 0xCFD8, 0x74F4, 0xD2BE, 0x74F5, 0xD2BF, + 0x74F6, 0xB27E, 0x74F7, 0xB2A1, 0x74FB, 0xDAAB, 0x74FD, 0xDEC2, 0x74FE, 0xDEC1, 0x74FF, 0xDEC0, 0x7500, 0xE2D5, 0x7502, 0xE2D6, + 0x7503, 0xE2D7, 0x7504, 0xBAC2, 0x7507, 0xE6AD, 0x7508, 0xE6AC, 0x750B, 0xEA69, 0x750C, 0xBF5E, 0x750D, 0xBF5F, 0x750F, 0xED72, + 0x7510, 0xED6F, 0x7511, 0xED70, 0x7512, 0xED71, 0x7513, 0xF049, 0x7514, 0xF048, 0x7515, 0xC27C, 0x7516, 0xF277, 0x7517, 0xF5DE, + 0x7518, 0xA5CC, 0x751A, 0xACC6, 0x751C, 0xB2A2, 0x751D, 0xDEC3, 0x751F, 0xA5CD, 0x7521, 0xD2C0, 0x7522, 0xB2A3, 0x7525, 0xB563, + 0x7526, 0xB564, 0x7528, 0xA5CE, 0x7529, 0xA5CF, 0x752A, 0xCA46, 0x752B, 0xA86A, 0x752C, 0xA869, 0x752D, 0xACC7, 0x752E, 0xCFD9, + 0x752F, 0xDAAC, 0x7530, 0xA5D0, 0x7531, 0xA5D1, 0x7532, 0xA5D2, 0x7533, 0xA5D3, 0x7537, 0xA86B, 0x7538, 0xA86C, 0x7539, 0xCB6E, + 0x753A, 0xCB6D, 0x753D, 0xAAB6, 0x753E, 0xCD72, 0x753F, 0xCD70, 0x7540, 0xCD71, 0x7547, 0xCFDA, 0x7548, 0xCFDB, 0x754B, 0xACCB, + 0x754C, 0xACC9, 0x754E, 0xACCA, 0x754F, 0xACC8, 0x7554, 0xAF60, 0x7559, 0xAF64, 0x755A, 0xAF63, 0x755B, 0xD2C1, 0x755C, 0xAF62, + 0x755D, 0xAF61, 0x755F, 0xD2C2, 0x7562, 0xB2A6, 0x7563, 0xD67B, 0x7564, 0xD67A, 0x7565, 0xB2A4, 0x7566, 0xB2A5, 0x756A, 0xB566, + 0x756B, 0xB565, 0x756C, 0xDAAE, 0x756F, 0xDAAD, 0x7570, 0xB2A7, 0x7576, 0xB7ED, 0x7577, 0xDEC5, 0x7578, 0xB7EE, 0x7579, 0xDEC4, + 0x757D, 0xE2D8, 0x757E, 0xE6AE, 0x757F, 0xBD42, 0x7580, 0xEA6A, 0x7584, 0xED73, 0x7586, 0xC3A6, 0x7587, 0xC3A5, 0x758A, 0xC57C, + 0x758B, 0xA5D4, 0x758C, 0xCD73, 0x758F, 0xB2A8, 0x7590, 0xE2D9, 0x7591, 0xBAC3, 0x7594, 0xCB6F, 0x7595, 0xCB70, 0x7598, 0xCD74, + 0x7599, 0xAAB8, 0x759A, 0xAAB9, 0x759D, 0xAAB7, 0x75A2, 0xACCF, 0x75A3, 0xACD0, 0x75A4, 0xACCD, 0x75A5, 0xACCE, 0x75A7, 0xCFDC, + 0x75AA, 0xCFDD, 0x75AB, 0xACCC, 0x75B0, 0xD2C3, 0x75B2, 0xAF68, 0x75B3, 0xAF69, 0x75B5, 0xB2AB, 0x75B6, 0xD2C9, 0x75B8, 0xAF6E, + 0x75B9, 0xAF6C, 0x75BA, 0xD2CA, 0x75BB, 0xD2C5, 0x75BC, 0xAF6B, 0x75BD, 0xAF6A, 0x75BE, 0xAF65, 0x75BF, 0xD2C8, 0x75C0, 0xD2C7, + 0x75C1, 0xD2C4, 0x75C2, 0xAF6D, 0x75C4, 0xD2C6, 0x75C5, 0xAF66, 0x75C7, 0xAF67, 0x75CA, 0xB2AC, 0x75CB, 0xD6A1, 0x75CC, 0xD6A2, + 0x75CD, 0xB2AD, 0x75CE, 0xD67C, 0x75CF, 0xD67E, 0x75D0, 0xD6A4, 0x75D1, 0xD6A3, 0x75D2, 0xD67D, 0x75D4, 0xB2A9, 0x75D5, 0xB2AA, + 0x75D7, 0xDAB6, 0x75D8, 0xB56B, 0x75D9, 0xB56A, 0x75DA, 0xDAB0, 0x75DB, 0xB568, 0x75DD, 0xDAB3, 0x75DE, 0xB56C, 0x75DF, 0xDAB4, + 0x75E0, 0xB56D, 0x75E1, 0xDAB1, 0x75E2, 0xB567, 0x75E3, 0xB569, 0x75E4, 0xDAB5, 0x75E6, 0xDAB2, 0x75E7, 0xDAAF, 0x75ED, 0xDED2, + 0x75EF, 0xDEC7, 0x75F0, 0xB7F0, 0x75F1, 0xB7F3, 0x75F2, 0xB7F2, 0x75F3, 0xB7F7, 0x75F4, 0xB7F6, 0x75F5, 0xDED3, 0x75F6, 0xDED1, + 0x75F7, 0xDECA, 0x75F8, 0xDECE, 0x75F9, 0xDECD, 0x75FA, 0xB7F4, 0x75FB, 0xDED0, 0x75FC, 0xDECC, 0x75FD, 0xDED4, 0x75FE, 0xDECB, + 0x75FF, 0xB7F5, 0x7600, 0xB7EF, 0x7601, 0xB7F1, 0x7603, 0xDEC9, 0x7608, 0xE2DB, 0x7609, 0xBAC7, 0x760A, 0xE2DF, 0x760B, 0xBAC6, + 0x760C, 0xE2DC, 0x760D, 0xBAC5, 0x760F, 0xDEC8, 0x7610, 0xDECF, 0x7611, 0xE2DE, 0x7613, 0xBAC8, 0x7614, 0xE2E0, 0x7615, 0xE2DD, + 0x7616, 0xE2DA, 0x7619, 0xE6B1, 0x761A, 0xE6B5, 0x761B, 0xE6B7, 0x761C, 0xE6B3, 0x761D, 0xE6B2, 0x761E, 0xE6B0, 0x761F, 0xBD45, + 0x7620, 0xBD43, 0x7621, 0xBD48, 0x7622, 0xBD49, 0x7623, 0xE6B4, 0x7624, 0xBD46, 0x7625, 0xE6AF, 0x7626, 0xBD47, 0x7627, 0xBAC4, + 0x7628, 0xE6B6, 0x7629, 0xBD44, 0x762D, 0xEA6C, 0x762F, 0xEA6B, 0x7630, 0xEA73, 0x7631, 0xEA6D, 0x7632, 0xEA72, 0x7633, 0xEA6F, + 0x7634, 0xBF60, 0x7635, 0xEA71, 0x7638, 0xBF61, 0x763A, 0xBF62, 0x763C, 0xEA70, 0x763D, 0xEA6E, 0x7642, 0xC0F8, 0x7643, 0xED74, + 0x7646, 0xC0F7, 0x7647, 0xED77, 0x7648, 0xED75, 0x7649, 0xED76, 0x764C, 0xC0F9, 0x7650, 0xF04D, 0x7652, 0xC2A1, 0x7653, 0xF04E, + 0x7656, 0xC27D, 0x7657, 0xF04F, 0x7658, 0xC27E, 0x7659, 0xF04C, 0x765A, 0xF050, 0x765C, 0xF04A, 0x765F, 0xC3A7, 0x7660, 0xF278, + 0x7661, 0xC3A8, 0x7662, 0xC46F, 0x7664, 0xF04B, 0x7665, 0xC470, 0x7669, 0xC4EE, 0x766A, 0xF5DF, 0x766C, 0xC57E, 0x766D, 0xF6F4, + 0x766E, 0xC57D, 0x7670, 0xF7EA, 0x7671, 0xC5F5, 0x7672, 0xC5F6, 0x7675, 0xF9CC, 0x7678, 0xACD1, 0x7679, 0xCFDE, 0x767B, 0xB56E, + 0x767C, 0xB56F, 0x767D, 0xA5D5, 0x767E, 0xA6CA, 0x767F, 0xCA47, 0x7681, 0xCB71, 0x7682, 0xA86D, 0x7684, 0xAABA, 0x7686, 0xACD2, + 0x7687, 0xACD3, 0x7688, 0xACD4, 0x7689, 0xD6A6, 0x768A, 0xD2CB, 0x768B, 0xAF6F, 0x768E, 0xB2AE, 0x768F, 0xD6A5, 0x7692, 0xDAB8, + 0x7693, 0xB571, 0x7695, 0xDAB7, 0x7696, 0xB570, 0x7699, 0xDED5, 0x769A, 0xBD4A, 0x769B, 0xE6BB, 0x769C, 0xE6B8, 0x769D, 0xE6B9, + 0x769E, 0xE6BA, 0x76A4, 0xED78, 0x76A6, 0xF051, 0x76AA, 0xF471, 0x76AB, 0xF470, 0x76AD, 0xF6F5, 0x76AE, 0xA5D6, 0x76AF, 0xCD75, + 0x76B0, 0xAF70, 0x76B4, 0xB572, 0x76B5, 0xDED6, 0x76B8, 0xE2E1, 0x76BA, 0xBD4B, 0x76BB, 0xEA74, 0x76BD, 0xF052, 0x76BE, 0xF472, + 0x76BF, 0xA5D7, 0x76C2, 0xAABB, 0x76C3, 0xACD7, 0x76C4, 0xCFDF, 0x76C5, 0xACD8, 0x76C6, 0xACD6, 0x76C8, 0xACD5, 0x76C9, 0xD2CC, + 0x76CA, 0xAF71, 0x76CD, 0xAF72, 0x76CE, 0xAF73, 0x76D2, 0xB2B0, 0x76D3, 0xD6A7, 0x76D4, 0xB2AF, 0x76DA, 0xDAB9, 0x76DB, 0xB2B1, + 0x76DC, 0xB573, 0x76DD, 0xDED7, 0x76DE, 0xB7F8, 0x76DF, 0xB7F9, 0x76E1, 0xBAC9, 0x76E3, 0xBACA, 0x76E4, 0xBD4C, 0x76E5, 0xBF64, + 0x76E6, 0xEA75, 0x76E7, 0xBF63, 0x76E9, 0xED79, 0x76EA, 0xC0FA, 0x76EC, 0xF053, 0x76ED, 0xF473, 0x76EE, 0xA5D8, 0x76EF, 0xA86E, + 0x76F0, 0xCD78, 0x76F1, 0xCD77, 0x76F2, 0xAABC, 0x76F3, 0xCD76, 0x76F4, 0xAABD, 0x76F5, 0xCD79, 0x76F7, 0xCFE5, 0x76F8, 0xACDB, + 0x76F9, 0xACDA, 0x76FA, 0xCFE7, 0x76FB, 0xCFE6, 0x76FC, 0xACDF, 0x76FE, 0xACDE, 0x7701, 0xACD9, 0x7703, 0xCFE1, 0x7704, 0xCFE2, + 0x7705, 0xCFE3, 0x7707, 0xACE0, 0x7708, 0xCFE0, 0x7709, 0xACDC, 0x770A, 0xCFE4, 0x770B, 0xACDD, 0x7710, 0xD2CF, 0x7711, 0xD2D3, + 0x7712, 0xD2D1, 0x7713, 0xD2D0, 0x7715, 0xD2D4, 0x7719, 0xD2D5, 0x771A, 0xD2D6, 0x771B, 0xD2CE, 0x771D, 0xD2CD, 0x771F, 0xAF75, + 0x7720, 0xAF76, 0x7722, 0xD2D7, 0x7723, 0xD2D2, 0x7725, 0xD6B0, 0x7727, 0xD2D8, 0x7728, 0xAF77, 0x7729, 0xAF74, 0x772D, 0xD6AA, + 0x772F, 0xD6A9, 0x7731, 0xD6AB, 0x7732, 0xD6AC, 0x7733, 0xD6AE, 0x7734, 0xD6AD, 0x7735, 0xD6B2, 0x7736, 0xB2B5, 0x7737, 0xB2B2, + 0x7738, 0xB2B6, 0x7739, 0xD6A8, 0x773A, 0xB2B7, 0x773B, 0xD6B1, 0x773C, 0xB2B4, 0x773D, 0xD6AF, 0x773E, 0xB2B3, 0x7744, 0xDABC, + 0x7745, 0xDABE, 0x7746, 0xDABA, 0x7747, 0xDABB, 0x774A, 0xDABF, 0x774B, 0xDAC1, 0x774C, 0xDAC2, 0x774D, 0xDABD, 0x774E, 0xDAC0, + 0x774F, 0xB574, 0x7752, 0xDEDB, 0x7754, 0xDEE0, 0x7755, 0xDED8, 0x7756, 0xDEDC, 0x7759, 0xDEE1, 0x775A, 0xDEDD, 0x775B, 0xB7FA, + 0x775C, 0xB843, 0x775E, 0xB7FD, 0x775F, 0xDED9, 0x7760, 0xDEDA, 0x7761, 0xBACE, 0x7762, 0xB846, 0x7763, 0xB7FE, 0x7765, 0xB844, + 0x7766, 0xB7FC, 0x7767, 0xDEDF, 0x7768, 0xB845, 0x7769, 0xDEDE, 0x776A, 0xB841, 0x776B, 0xB7FB, 0x776C, 0xB842, 0x776D, 0xDEE2, + 0x776E, 0xE2E6, 0x776F, 0xE2E8, 0x7779, 0xB840, 0x777C, 0xE2E3, 0x777D, 0xBACC, 0x777E, 0xE2E9, 0x777F, 0xBACD, 0x7780, 0xE2E7, + 0x7781, 0xE2E2, 0x7782, 0xE2E5, 0x7783, 0xE2EA, 0x7784, 0xBACB, 0x7785, 0xE2E4, 0x7787, 0xBD4E, 0x7788, 0xE6BF, 0x7789, 0xE6BE, + 0x778B, 0xBD51, 0x778C, 0xBD4F, 0x778D, 0xE6BC, 0x778E, 0xBD4D, 0x778F, 0xE6BD, 0x7791, 0xBD50, 0x7795, 0xEA7D, 0x7797, 0xEAA1, + 0x7799, 0xEA7E, 0x779A, 0xEA76, 0x779B, 0xEA7A, 0x779C, 0xEA79, 0x779D, 0xEA77, 0x779E, 0xBF66, 0x779F, 0xBF67, 0x77A0, 0xBF65, + 0x77A1, 0xEA78, 0x77A2, 0xEA7B, 0x77A3, 0xEA7C, 0x77A5, 0xBF68, 0x77A7, 0xC140, 0x77A8, 0xEDA3, 0x77AA, 0xC0FC, 0x77AB, 0xED7B, + 0x77AC, 0xC0FE, 0x77AD, 0xC141, 0x77B0, 0xC0FD, 0x77B1, 0xEDA2, 0x77B2, 0xED7C, 0x77B3, 0xC0FB, 0x77B4, 0xEDA1, 0x77B5, 0xED7A, + 0x77B6, 0xED7E, 0x77B7, 0xED7D, 0x77BA, 0xF055, 0x77BB, 0xC2A4, 0x77BC, 0xC2A5, 0x77BD, 0xC2A2, 0x77BF, 0xC2A3, 0x77C2, 0xF054, + 0x77C4, 0xF27B, 0x77C7, 0xC3A9, 0x77C9, 0xF279, 0x77CA, 0xF27A, 0x77CC, 0xF474, 0x77CD, 0xF477, 0x77CE, 0xF475, 0x77CF, 0xF476, + 0x77D0, 0xF5E0, 0x77D3, 0xC4EF, 0x77D4, 0xF7EB, 0x77D5, 0xF8B4, 0x77D7, 0xC5F7, 0x77D8, 0xF8F8, 0x77D9, 0xF8F9, 0x77DA, 0xC666, + 0x77DB, 0xA5D9, 0x77DC, 0xACE1, 0x77DE, 0xDAC3, 0x77E0, 0xDEE3, 0x77E2, 0xA5DA, 0x77E3, 0xA86F, 0x77E5, 0xAABE, 0x77E7, 0xCFE8, + 0x77E8, 0xCFE9, 0x77E9, 0xAF78, 0x77EC, 0xDAC4, 0x77ED, 0xB575, 0x77EE, 0xB847, 0x77EF, 0xC142, 0x77F0, 0xEDA4, 0x77F1, 0xF27C, + 0x77F2, 0xF478, 0x77F3, 0xA5DB, 0x77F7, 0xCDA1, 0x77F8, 0xCD7A, 0x77F9, 0xCD7C, 0x77FA, 0xCD7E, 0x77FB, 0xCD7D, 0x77FC, 0xCD7B, + 0x77FD, 0xAABF, 0x7802, 0xACE2, 0x7803, 0xCFF2, 0x7805, 0xCFED, 0x7806, 0xCFEA, 0x7809, 0xCFF1, 0x780C, 0xACE4, 0x780D, 0xACE5, + 0x780E, 0xCFF0, 0x780F, 0xCFEF, 0x7810, 0xCFEE, 0x7811, 0xCFEB, 0x7812, 0xCFEC, 0x7813, 0xCFF3, 0x7814, 0xACE3, 0x781D, 0xAF7C, + 0x781F, 0xAFA4, 0x7820, 0xAFA3, 0x7821, 0xD2E1, 0x7822, 0xD2DB, 0x7823, 0xD2D9, 0x7825, 0xAFA1, 0x7826, 0xD6B9, 0x7827, 0xAF7A, + 0x7828, 0xD2DE, 0x7829, 0xD2E2, 0x782A, 0xD2E4, 0x782B, 0xD2E0, 0x782C, 0xD2DA, 0x782D, 0xAFA2, 0x782E, 0xD2DF, 0x782F, 0xD2DD, + 0x7830, 0xAF79, 0x7831, 0xD2E5, 0x7832, 0xAFA5, 0x7833, 0xD2E3, 0x7834, 0xAF7D, 0x7835, 0xD2DC, 0x7837, 0xAF7E, 0x7838, 0xAF7B, + 0x7843, 0xB2B9, 0x7845, 0xD6BA, 0x7848, 0xD6B3, 0x7849, 0xD6B5, 0x784A, 0xD6B7, 0x784C, 0xD6B8, 0x784D, 0xD6B6, 0x784E, 0xB2BA, + 0x7850, 0xD6BB, 0x7852, 0xD6B4, 0x785C, 0xDAC8, 0x785D, 0xB576, 0x785E, 0xDAD0, 0x7860, 0xDAC5, 0x7862, 0xDAD1, 0x7864, 0xDAC6, + 0x7865, 0xDAC7, 0x7868, 0xDACF, 0x7869, 0xDACE, 0x786A, 0xDACB, 0x786B, 0xB2B8, 0x786C, 0xB577, 0x786D, 0xDAC9, 0x786E, 0xDACC, + 0x786F, 0xB578, 0x7870, 0xDACD, 0x7871, 0xDACA, 0x7879, 0xDEEE, 0x787B, 0xDEF2, 0x787C, 0xB84E, 0x787E, 0xE2F0, 0x787F, 0xB851, + 0x7880, 0xDEF0, 0x7881, 0xF9D6, 0x7883, 0xDEED, 0x7884, 0xDEE8, 0x7885, 0xDEEA, 0x7886, 0xDEEB, 0x7887, 0xDEE4, 0x7889, 0xB84D, + 0x788C, 0xB84C, 0x788E, 0xB848, 0x788F, 0xDEE7, 0x7891, 0xB84F, 0x7893, 0xB850, 0x7894, 0xDEE6, 0x7895, 0xDEE9, 0x7896, 0xDEF1, + 0x7897, 0xB84A, 0x7898, 0xB84B, 0x7899, 0xDEEF, 0x789A, 0xDEE5, 0x789E, 0xE2F2, 0x789F, 0xBAD0, 0x78A0, 0xE2F4, 0x78A1, 0xDEEC, + 0x78A2, 0xE2F6, 0x78A3, 0xBAD4, 0x78A4, 0xE2F7, 0x78A5, 0xE2F3, 0x78A7, 0xBAD1, 0x78A8, 0xE2EF, 0x78A9, 0xBAD3, 0x78AA, 0xE2EC, + 0x78AB, 0xE2F1, 0x78AC, 0xE2F5, 0x78AD, 0xE2EE, 0x78B0, 0xB849, 0x78B2, 0xE2EB, 0x78B3, 0xBAD2, 0x78B4, 0xE2ED, 0x78BA, 0xBD54, + 0x78BB, 0xE6C1, 0x78BC, 0xBD58, 0x78BE, 0xBD56, 0x78C1, 0xBACF, 0x78C3, 0xE6C8, 0x78C4, 0xE6C9, 0x78C5, 0xBD53, 0x78C8, 0xE6C7, + 0x78C9, 0xE6CA, 0x78CA, 0xBD55, 0x78CB, 0xBD52, 0x78CC, 0xE6C3, 0x78CD, 0xE6C0, 0x78CE, 0xE6C5, 0x78CF, 0xE6C2, 0x78D0, 0xBD59, + 0x78D1, 0xE6C4, 0x78D4, 0xE6C6, 0x78D5, 0xBD57, 0x78DA, 0xBF6A, 0x78DB, 0xEAA8, 0x78DD, 0xEAA2, 0x78DE, 0xEAA6, 0x78DF, 0xEAAC, + 0x78E0, 0xEAAD, 0x78E1, 0xEAA9, 0x78E2, 0xEAAA, 0x78E3, 0xEAA7, 0x78E5, 0xEAA4, 0x78E7, 0xBF6C, 0x78E8, 0xBF69, 0x78E9, 0xEAA3, + 0x78EA, 0xEAA5, 0x78EC, 0xBF6B, 0x78ED, 0xEAAB, 0x78EF, 0xC146, 0x78F2, 0xEDAA, 0x78F3, 0xEDA5, 0x78F4, 0xC145, 0x78F7, 0xC143, + 0x78F9, 0xEDAC, 0x78FA, 0xC144, 0x78FB, 0xEDA8, 0x78FC, 0xEDA9, 0x78FD, 0xEDA6, 0x78FE, 0xEDAD, 0x78FF, 0xF056, 0x7901, 0xC147, + 0x7902, 0xEDA7, 0x7904, 0xEDAE, 0x7905, 0xEDAB, 0x7909, 0xF05A, 0x790C, 0xF057, 0x790E, 0xC2A6, 0x7910, 0xF05B, 0x7911, 0xF05D, + 0x7912, 0xF05C, 0x7913, 0xF058, 0x7914, 0xF059, 0x7917, 0xF2A3, 0x7919, 0xC3AA, 0x791B, 0xF27E, 0x791C, 0xF2A2, 0x791D, 0xF27D, + 0x791E, 0xF2A4, 0x7921, 0xF2A1, 0x7923, 0xF47A, 0x7924, 0xF47D, 0x7925, 0xF479, 0x7926, 0xC471, 0x7927, 0xF47B, 0x7928, 0xF47C, + 0x7929, 0xF47E, 0x792A, 0xC472, 0x792B, 0xC474, 0x792C, 0xC473, 0x792D, 0xF5E1, 0x792F, 0xF5E3, 0x7931, 0xF5E2, 0x7935, 0xF6F6, + 0x7938, 0xF8B5, 0x7939, 0xF8FA, 0x793A, 0xA5DC, 0x793D, 0xCB72, 0x793E, 0xAAC0, 0x793F, 0xCDA3, 0x7940, 0xAAC1, 0x7941, 0xAAC2, + 0x7942, 0xCDA2, 0x7944, 0xCFF8, 0x7945, 0xCFF7, 0x7946, 0xACE6, 0x7947, 0xACE9, 0x7948, 0xACE8, 0x7949, 0xACE7, 0x794A, 0xCFF4, + 0x794B, 0xCFF6, 0x794C, 0xCFF5, 0x794F, 0xD2E8, 0x7950, 0xAFA7, 0x7951, 0xD2EC, 0x7952, 0xD2EB, 0x7953, 0xD2EA, 0x7954, 0xD2E6, + 0x7955, 0xAFA6, 0x7956, 0xAFAA, 0x7957, 0xAFAD, 0x795A, 0xAFAE, 0x795B, 0xD2E7, 0x795C, 0xD2E9, 0x795D, 0xAFAC, 0x795E, 0xAFAB, + 0x795F, 0xAFA9, 0x7960, 0xAFA8, 0x7961, 0xD6C2, 0x7963, 0xD6C0, 0x7964, 0xD6BC, 0x7965, 0xB2BB, 0x7967, 0xD6BD, 0x7968, 0xB2BC, + 0x7969, 0xD6BE, 0x796A, 0xD6BF, 0x796B, 0xD6C1, 0x796D, 0xB2BD, 0x7970, 0xDAD5, 0x7972, 0xDAD4, 0x7973, 0xDAD3, 0x7974, 0xDAD2, + 0x7979, 0xDEF6, 0x797A, 0xB852, 0x797C, 0xDEF3, 0x797D, 0xDEF5, 0x797F, 0xB853, 0x7981, 0xB854, 0x7982, 0xDEF4, 0x7988, 0xE341, + 0x798A, 0xE2F9, 0x798B, 0xE2FA, 0x798D, 0xBAD7, 0x798E, 0xBAD5, 0x798F, 0xBAD6, 0x7990, 0xE343, 0x7992, 0xE342, 0x7993, 0xE2FE, + 0x7994, 0xE2FD, 0x7995, 0xE2FC, 0x7996, 0xE2FB, 0x7997, 0xE340, 0x7998, 0xE2F8, 0x799A, 0xE6CB, 0x799B, 0xE6D0, 0x799C, 0xE6CE, + 0x79A0, 0xE6CD, 0x79A1, 0xE6CC, 0x79A2, 0xE6CF, 0x79A4, 0xEAAE, 0x79A6, 0xBF6D, 0x79A7, 0xC148, 0x79A8, 0xEDB0, 0x79AA, 0xC149, + 0x79AB, 0xEDAF, 0x79AC, 0xF05F, 0x79AD, 0xF05E, 0x79AE, 0xC2A7, 0x79B0, 0xF2A5, 0x79B1, 0xC3AB, 0x79B2, 0xF4A1, 0x79B3, 0xC5A1, + 0x79B4, 0xF6F7, 0x79B6, 0xF8B7, 0x79B7, 0xF8B6, 0x79B8, 0xC9A8, 0x79B9, 0xACEA, 0x79BA, 0xACEB, 0x79BB, 0xD6C3, 0x79BD, 0xB856, + 0x79BE, 0xA5DD, 0x79BF, 0xA872, 0x79C0, 0xA871, 0x79C1, 0xA870, 0x79C5, 0xCDA4, 0x79C8, 0xAAC4, 0x79C9, 0xAAC3, 0x79CB, 0xACEE, + 0x79CD, 0xCFFA, 0x79CE, 0xCFFD, 0x79CF, 0xCFFB, 0x79D1, 0xACEC, 0x79D2, 0xACED, 0x79D5, 0xCFF9, 0x79D6, 0xCFFC, 0x79D8, 0xAFB5, + 0x79DC, 0xD2F3, 0x79DD, 0xD2F5, 0x79DE, 0xD2F4, 0x79DF, 0xAFB2, 0x79E0, 0xD2EF, 0x79E3, 0xAFB0, 0x79E4, 0xAFAF, 0x79E6, 0xAFB3, + 0x79E7, 0xAFB1, 0x79E9, 0xAFB4, 0x79EA, 0xD2F2, 0x79EB, 0xD2ED, 0x79EC, 0xD2EE, 0x79ED, 0xD2F1, 0x79EE, 0xD2F0, 0x79F6, 0xD6C6, + 0x79F7, 0xD6C7, 0x79F8, 0xD6C5, 0x79FA, 0xD6C4, 0x79FB, 0xB2BE, 0x7A00, 0xB57D, 0x7A02, 0xDAD6, 0x7A03, 0xDAD8, 0x7A04, 0xDADA, + 0x7A05, 0xB57C, 0x7A08, 0xB57A, 0x7A0A, 0xDAD7, 0x7A0B, 0xB57B, 0x7A0C, 0xDAD9, 0x7A0D, 0xB579, 0x7A10, 0xDF41, 0x7A11, 0xDEF7, + 0x7A12, 0xDEFA, 0x7A13, 0xDEFE, 0x7A14, 0xB85A, 0x7A15, 0xDEFC, 0x7A17, 0xDEFB, 0x7A18, 0xDEF8, 0x7A19, 0xDEF9, 0x7A1A, 0xB858, + 0x7A1B, 0xDF40, 0x7A1C, 0xB857, 0x7A1E, 0xB85C, 0x7A1F, 0xB85B, 0x7A20, 0xB859, 0x7A22, 0xDEFD, 0x7A26, 0xE349, 0x7A28, 0xE348, + 0x7A2B, 0xE344, 0x7A2E, 0xBAD8, 0x7A2F, 0xE347, 0x7A30, 0xE346, 0x7A31, 0xBAD9, 0x7A37, 0xBD5E, 0x7A39, 0xE6D2, 0x7A3B, 0xBD5F, + 0x7A3C, 0xBD5B, 0x7A3D, 0xBD5D, 0x7A3F, 0xBD5A, 0x7A40, 0xBD5C, 0x7A44, 0xEAAF, 0x7A46, 0xBF70, 0x7A47, 0xEAB1, 0x7A48, 0xEAB0, + 0x7A4A, 0xE345, 0x7A4B, 0xBF72, 0x7A4C, 0xBF71, 0x7A4D, 0xBF6E, 0x7A4E, 0xBF6F, 0x7A54, 0xEDB5, 0x7A56, 0xEDB3, 0x7A57, 0xC14A, + 0x7A58, 0xEDB4, 0x7A5A, 0xEDB6, 0x7A5B, 0xEDB2, 0x7A5C, 0xEDB1, 0x7A5F, 0xF060, 0x7A60, 0xC2AA, 0x7A61, 0xC2A8, 0x7A62, 0xC2A9, + 0x7A67, 0xF2A6, 0x7A68, 0xF2A7, 0x7A69, 0xC3AD, 0x7A6B, 0xC3AC, 0x7A6C, 0xF4A3, 0x7A6D, 0xF4A4, 0x7A6E, 0xF4A2, 0x7A70, 0xF6F8, + 0x7A71, 0xF6F9, 0x7A74, 0xA5DE, 0x7A75, 0xCA48, 0x7A76, 0xA873, 0x7A78, 0xCDA5, 0x7A79, 0xAAC6, 0x7A7A, 0xAAC5, 0x7A7B, 0xCDA6, + 0x7A7E, 0xD040, 0x7A7F, 0xACEF, 0x7A80, 0xCFFE, 0x7A81, 0xACF0, 0x7A84, 0xAFB6, 0x7A85, 0xD2F8, 0x7A86, 0xD2F6, 0x7A87, 0xD2FC, + 0x7A88, 0xAFB7, 0x7A89, 0xD2F7, 0x7A8A, 0xD2FB, 0x7A8B, 0xD2F9, 0x7A8C, 0xD2FA, 0x7A8F, 0xD6C8, 0x7A90, 0xD6CA, 0x7A92, 0xB2BF, + 0x7A94, 0xD6C9, 0x7A95, 0xB2C0, 0x7A96, 0xB5A2, 0x7A97, 0xB5A1, 0x7A98, 0xB57E, 0x7A99, 0xDADB, 0x7A9E, 0xDF44, 0x7A9F, 0xB85D, + 0x7AA0, 0xB85E, 0x7AA2, 0xDF43, 0x7AA3, 0xDF42, 0x7AA8, 0xE34A, 0x7AA9, 0xBADB, 0x7AAA, 0xBADA, 0x7AAB, 0xE34B, 0x7AAC, 0xE34C, + 0x7AAE, 0xBD61, 0x7AAF, 0xBD60, 0x7AB1, 0xEAB5, 0x7AB2, 0xE6D3, 0x7AB3, 0xE6D5, 0x7AB4, 0xE6D4, 0x7AB5, 0xEAB4, 0x7AB6, 0xEAB2, + 0x7AB7, 0xEAB6, 0x7AB8, 0xEAB3, 0x7ABA, 0xBF73, 0x7ABE, 0xEDB7, 0x7ABF, 0xC14B, 0x7AC0, 0xEDB8, 0x7AC1, 0xEDB9, 0x7AC4, 0xC2AB, + 0x7AC5, 0xC2AC, 0x7AC7, 0xC475, 0x7ACA, 0xC5D1, 0x7ACB, 0xA5DF, 0x7AD1, 0xD041, 0x7AD8, 0xD2FD, 0x7AD9, 0xAFB8, 0x7ADF, 0xB3BA, + 0x7AE0, 0xB3B9, 0x7AE3, 0xB5A4, 0x7AE4, 0xDADD, 0x7AE5, 0xB5A3, 0x7AE6, 0xDADC, 0x7AEB, 0xDF45, 0x7AED, 0xBADC, 0x7AEE, 0xE34D, + 0x7AEF, 0xBADD, 0x7AF6, 0xC476, 0x7AF7, 0xF4A5, 0x7AF9, 0xA6CB, 0x7AFA, 0xAAC7, 0x7AFB, 0xCDA7, 0x7AFD, 0xACF2, 0x7AFF, 0xACF1, + 0x7B00, 0xD042, 0x7B01, 0xD043, 0x7B04, 0xD340, 0x7B05, 0xD342, 0x7B06, 0xAFB9, 0x7B08, 0xD344, 0x7B09, 0xD347, 0x7B0A, 0xD345, + 0x7B0E, 0xD346, 0x7B0F, 0xD343, 0x7B10, 0xD2FE, 0x7B11, 0xAFBA, 0x7B12, 0xD348, 0x7B13, 0xD341, 0x7B18, 0xD6D3, 0x7B19, 0xB2C6, + 0x7B1A, 0xD6DC, 0x7B1B, 0xB2C3, 0x7B1D, 0xD6D5, 0x7B1E, 0xB2C7, 0x7B20, 0xB2C1, 0x7B22, 0xD6D0, 0x7B23, 0xD6DD, 0x7B24, 0xD6D1, + 0x7B25, 0xD6CE, 0x7B26, 0xB2C5, 0x7B28, 0xB2C2, 0x7B2A, 0xD6D4, 0x7B2B, 0xD6D7, 0x7B2C, 0xB2C4, 0x7B2D, 0xD6D8, 0x7B2E, 0xB2C8, + 0x7B2F, 0xD6D9, 0x7B30, 0xD6CF, 0x7B31, 0xD6D6, 0x7B32, 0xD6DA, 0x7B33, 0xD6D2, 0x7B34, 0xD6CD, 0x7B35, 0xD6CB, 0x7B38, 0xD6DB, + 0x7B3B, 0xDADF, 0x7B40, 0xDAE4, 0x7B44, 0xDAE0, 0x7B45, 0xDAE6, 0x7B46, 0xB5A7, 0x7B47, 0xD6CC, 0x7B48, 0xDAE1, 0x7B49, 0xB5A5, + 0x7B4A, 0xDADE, 0x7B4B, 0xB5AC, 0x7B4C, 0xDAE2, 0x7B4D, 0xB5AB, 0x7B4E, 0xDAE3, 0x7B4F, 0xB5AD, 0x7B50, 0xB5A8, 0x7B51, 0xB5AE, + 0x7B52, 0xB5A9, 0x7B54, 0xB5AA, 0x7B56, 0xB5A6, 0x7B58, 0xDAE5, 0x7B60, 0xB861, 0x7B61, 0xDF50, 0x7B63, 0xDF53, 0x7B64, 0xDF47, + 0x7B65, 0xDF4C, 0x7B66, 0xDF46, 0x7B67, 0xB863, 0x7B69, 0xDF4A, 0x7B6D, 0xDF48, 0x7B6E, 0xB862, 0x7B70, 0xDF4F, 0x7B71, 0xDF4E, + 0x7B72, 0xDF4B, 0x7B73, 0xDF4D, 0x7B74, 0xDF49, 0x7B75, 0xBAE1, 0x7B76, 0xDF52, 0x7B77, 0xB85F, 0x7B78, 0xDF51, 0x7B82, 0xE35D, + 0x7B84, 0xBAE8, 0x7B85, 0xE358, 0x7B87, 0xBAE7, 0x7B88, 0xE34E, 0x7B8A, 0xE350, 0x7B8B, 0xBAE0, 0x7B8C, 0xE355, 0x7B8D, 0xE354, + 0x7B8E, 0xE357, 0x7B8F, 0xBAE5, 0x7B90, 0xE352, 0x7B91, 0xE351, 0x7B94, 0xBAE4, 0x7B95, 0xBADF, 0x7B96, 0xE353, 0x7B97, 0xBAE2, + 0x7B98, 0xE359, 0x7B99, 0xE35B, 0x7B9B, 0xE356, 0x7B9C, 0xE34F, 0x7B9D, 0xBAE3, 0x7BA0, 0xBD69, 0x7BA1, 0xBADE, 0x7BA4, 0xE35C, + 0x7BAC, 0xE6D9, 0x7BAD, 0xBD62, 0x7BAF, 0xE6DB, 0x7BB1, 0xBD63, 0x7BB4, 0xBD65, 0x7BB5, 0xE6DE, 0x7BB7, 0xE6D6, 0x7BB8, 0xBAE6, + 0x7BB9, 0xE6DC, 0x7BBE, 0xE6D8, 0x7BC0, 0xB860, 0x7BC1, 0xBD68, 0x7BC4, 0xBD64, 0x7BC6, 0xBD66, 0x7BC7, 0xBD67, 0x7BC9, 0xBF76, + 0x7BCA, 0xE6DD, 0x7BCB, 0xE6D7, 0x7BCC, 0xBD6A, 0x7BCE, 0xE6DA, 0x7BD4, 0xEAC0, 0x7BD5, 0xEABB, 0x7BD8, 0xEAC5, 0x7BD9, 0xBF74, + 0x7BDA, 0xEABD, 0x7BDB, 0xBF78, 0x7BDC, 0xEAC3, 0x7BDD, 0xEABA, 0x7BDE, 0xEAB7, 0x7BDF, 0xEAC6, 0x7BE0, 0xC151, 0x7BE1, 0xBF79, + 0x7BE2, 0xEAC2, 0x7BE3, 0xEAB8, 0x7BE4, 0xBF77, 0x7BE5, 0xEABC, 0x7BE6, 0xBF7B, 0x7BE7, 0xEAB9, 0x7BE8, 0xEABE, 0x7BE9, 0xBF7A, + 0x7BEA, 0xEAC1, 0x7BEB, 0xEAC4, 0x7BF0, 0xEDCB, 0x7BF1, 0xEDCC, 0x7BF2, 0xEDBC, 0x7BF3, 0xEDC3, 0x7BF4, 0xEDC1, 0x7BF7, 0xC14F, + 0x7BF8, 0xEDC8, 0x7BF9, 0xEABF, 0x7BFB, 0xEDBF, 0x7BFD, 0xEDC9, 0x7BFE, 0xC14E, 0x7BFF, 0xEDBE, 0x7C00, 0xEDBD, 0x7C01, 0xEDC7, + 0x7C02, 0xEDC4, 0x7C03, 0xEDC6, 0x7C05, 0xEDBA, 0x7C06, 0xEDCA, 0x7C07, 0xC14C, 0x7C09, 0xEDC5, 0x7C0A, 0xEDCE, 0x7C0B, 0xEDC2, + 0x7C0C, 0xC150, 0x7C0D, 0xC14D, 0x7C0E, 0xEDC0, 0x7C0F, 0xEDBB, 0x7C10, 0xEDCD, 0x7C11, 0xBF75, 0x7C19, 0xF063, 0x7C1C, 0xF061, + 0x7C1D, 0xF067, 0x7C1E, 0xC2B0, 0x7C1F, 0xF065, 0x7C20, 0xF064, 0x7C21, 0xC2B2, 0x7C22, 0xF06A, 0x7C23, 0xC2B1, 0x7C25, 0xF06B, + 0x7C26, 0xF068, 0x7C27, 0xC2AE, 0x7C28, 0xF069, 0x7C29, 0xF062, 0x7C2A, 0xC2AF, 0x7C2B, 0xC2AD, 0x7C2C, 0xF2AB, 0x7C2D, 0xF066, + 0x7C30, 0xF06C, 0x7C33, 0xF2A8, 0x7C37, 0xC3B2, 0x7C38, 0xC3B0, 0x7C39, 0xF2AA, 0x7C3B, 0xF2AC, 0x7C3C, 0xF2A9, 0x7C3D, 0xC3B1, + 0x7C3E, 0xC3AE, 0x7C3F, 0xC3AF, 0x7C40, 0xC3B3, 0x7C43, 0xC478, 0x7C45, 0xF4AA, 0x7C47, 0xF4A9, 0x7C48, 0xF4A7, 0x7C49, 0xF4A6, + 0x7C4A, 0xF4A8, 0x7C4C, 0xC477, 0x7C4D, 0xC479, 0x7C50, 0xC4F0, 0x7C53, 0xF5E5, 0x7C54, 0xF5E4, 0x7C57, 0xF6FA, 0x7C59, 0xF6FC, + 0x7C5A, 0xF6FE, 0x7C5B, 0xF6FD, 0x7C5C, 0xF6FB, 0x7C5F, 0xC5A3, 0x7C60, 0xC5A2, 0x7C63, 0xC5D3, 0x7C64, 0xC5D2, 0x7C65, 0xC5D4, + 0x7C66, 0xF7ED, 0x7C67, 0xF7EC, 0x7C69, 0xF8FB, 0x7C6A, 0xF8B8, 0x7C6B, 0xF8FC, 0x7C6C, 0xC658, 0x7C6E, 0xC659, 0x7C6F, 0xF96D, + 0x7C72, 0xC67E, 0x7C73, 0xA6CC, 0x7C75, 0xCDA8, 0x7C78, 0xD045, 0x7C79, 0xD046, 0x7C7A, 0xD044, 0x7C7D, 0xACF3, 0x7C7F, 0xD047, + 0x7C80, 0xD048, 0x7C81, 0xD049, 0x7C84, 0xD349, 0x7C85, 0xD34F, 0x7C88, 0xD34D, 0x7C89, 0xAFBB, 0x7C8A, 0xD34B, 0x7C8C, 0xD34C, + 0x7C8D, 0xD34E, 0x7C91, 0xD34A, 0x7C92, 0xB2C9, 0x7C94, 0xD6DE, 0x7C95, 0xB2CB, 0x7C96, 0xD6E0, 0x7C97, 0xB2CA, 0x7C98, 0xD6DF, + 0x7C9E, 0xDAE8, 0x7C9F, 0xB5AF, 0x7CA1, 0xDAEA, 0x7CA2, 0xDAE7, 0x7CA3, 0xD6E1, 0x7CA5, 0xB5B0, 0x7CA7, 0xF9DB, 0x7CA8, 0xDAE9, + 0x7CAF, 0xDF56, 0x7CB1, 0xB864, 0x7CB2, 0xDF54, 0x7CB3, 0xB865, 0x7CB4, 0xDF55, 0x7CB5, 0xB866, 0x7CB9, 0xBAE9, 0x7CBA, 0xE361, + 0x7CBB, 0xE35E, 0x7CBC, 0xE360, 0x7CBD, 0xBAEA, 0x7CBE, 0xBAEB, 0x7CBF, 0xE35F, 0x7CC5, 0xE6DF, 0x7CC8, 0xE6E0, 0x7CCA, 0xBD6B, + 0x7CCB, 0xE6E2, 0x7CCC, 0xE6E1, 0x7CCE, 0xA261, 0x7CD0, 0xEACA, 0x7CD1, 0xEACB, 0x7CD2, 0xEAC7, 0x7CD4, 0xEAC8, 0x7CD5, 0xBF7C, + 0x7CD6, 0xBF7D, 0x7CD7, 0xEAC9, 0x7CD9, 0xC157, 0x7CDC, 0xC153, 0x7CDD, 0xC158, 0x7CDE, 0xC154, 0x7CDF, 0xC156, 0x7CE0, 0xC152, + 0x7CE2, 0xC155, 0x7CE7, 0xC2B3, 0x7CE8, 0xEDCF, 0x7CEA, 0xF2AE, 0x7CEC, 0xF2AD, 0x7CEE, 0xF4AB, 0x7CEF, 0xC47A, 0x7CF0, 0xC47B, + 0x7CF1, 0xF741, 0x7CF2, 0xF5E6, 0x7CF4, 0xF740, 0x7CF6, 0xF8FD, 0x7CF7, 0xF9A4, 0x7CF8, 0xA6CD, 0x7CFB, 0xA874, 0x7CFD, 0xCDA9, + 0x7CFE, 0xAAC8, 0x7D00, 0xACF6, 0x7D01, 0xD04C, 0x7D02, 0xACF4, 0x7D03, 0xD04A, 0x7D04, 0xACF9, 0x7D05, 0xACF5, 0x7D06, 0xACFA, + 0x7D07, 0xACF8, 0x7D08, 0xD04B, 0x7D09, 0xACF7, 0x7D0A, 0xAFBF, 0x7D0B, 0xAFBE, 0x7D0C, 0xD35A, 0x7D0D, 0xAFC7, 0x7D0E, 0xD353, + 0x7D0F, 0xD359, 0x7D10, 0xAFC3, 0x7D11, 0xD352, 0x7D12, 0xD358, 0x7D13, 0xD356, 0x7D14, 0xAFC2, 0x7D15, 0xAFC4, 0x7D16, 0xD355, + 0x7D17, 0xAFBD, 0x7D18, 0xD354, 0x7D19, 0xAFC8, 0x7D1A, 0xAFC5, 0x7D1B, 0xAFC9, 0x7D1C, 0xAFC6, 0x7D1D, 0xD351, 0x7D1E, 0xD350, + 0x7D1F, 0xD357, 0x7D20, 0xAFC0, 0x7D21, 0xAFBC, 0x7D22, 0xAFC1, 0x7D28, 0xD6F0, 0x7D29, 0xD6E9, 0x7D2B, 0xB5B5, 0x7D2C, 0xD6E8, + 0x7D2E, 0xB2CF, 0x7D2F, 0xB2D6, 0x7D30, 0xB2D3, 0x7D31, 0xB2D9, 0x7D32, 0xB2D8, 0x7D33, 0xB2D4, 0x7D35, 0xD6E2, 0x7D36, 0xD6E5, + 0x7D38, 0xD6E4, 0x7D39, 0xB2D0, 0x7D3A, 0xD6E6, 0x7D3B, 0xD6EF, 0x7D3C, 0xB2D1, 0x7D3D, 0xD6E3, 0x7D3E, 0xD6EC, 0x7D3F, 0xD6ED, + 0x7D40, 0xB2D2, 0x7D41, 0xD6EA, 0x7D42, 0xB2D7, 0x7D43, 0xB2CD, 0x7D44, 0xB2D5, 0x7D45, 0xD6E7, 0x7D46, 0xB2CC, 0x7D47, 0xD6EB, + 0x7D4A, 0xD6EE, 0x7D4E, 0xDAFB, 0x7D4F, 0xDAF2, 0x7D50, 0xB5B2, 0x7D51, 0xDAF9, 0x7D52, 0xDAF6, 0x7D53, 0xDAEE, 0x7D54, 0xDAF7, + 0x7D55, 0xB5B4, 0x7D56, 0xDAEF, 0x7D58, 0xDAEB, 0x7D5B, 0xB86C, 0x7D5C, 0xDAF4, 0x7D5E, 0xB5B1, 0x7D5F, 0xDAFA, 0x7D61, 0xB5B8, + 0x7D62, 0xB5BA, 0x7D63, 0xDAED, 0x7D66, 0xB5B9, 0x7D67, 0xDAF0, 0x7D68, 0xB5B3, 0x7D69, 0xDAF8, 0x7D6A, 0xDAF1, 0x7D6B, 0xDAF5, + 0x7D6D, 0xDAF3, 0x7D6E, 0xB5B6, 0x7D6F, 0xDAEC, 0x7D70, 0xB5BB, 0x7D71, 0xB2CE, 0x7D72, 0xB5B7, 0x7D73, 0xB5BC, 0x7D79, 0xB868, + 0x7D7A, 0xDF5D, 0x7D7B, 0xDF5F, 0x7D7C, 0xDF61, 0x7D7D, 0xDF65, 0x7D7F, 0xDF5B, 0x7D80, 0xDF59, 0x7D81, 0xB86A, 0x7D83, 0xDF60, + 0x7D84, 0xDF64, 0x7D85, 0xDF5C, 0x7D86, 0xDF58, 0x7D88, 0xDF57, 0x7D8C, 0xDF62, 0x7D8D, 0xDF5A, 0x7D8E, 0xDF5E, 0x7D8F, 0xB86B, + 0x7D91, 0xB869, 0x7D92, 0xDF66, 0x7D93, 0xB867, 0x7D94, 0xDF63, 0x7D96, 0xE372, 0x7D9C, 0xBAEE, 0x7D9D, 0xE36A, 0x7D9E, 0xBD78, + 0x7D9F, 0xE374, 0x7DA0, 0xBAF1, 0x7DA1, 0xE378, 0x7DA2, 0xBAF7, 0x7DA3, 0xE365, 0x7DA6, 0xE375, 0x7DA7, 0xE362, 0x7DA9, 0xE377, + 0x7DAA, 0xE366, 0x7DAC, 0xBAFE, 0x7DAD, 0xBAFB, 0x7DAE, 0xE376, 0x7DAF, 0xE370, 0x7DB0, 0xBAED, 0x7DB1, 0xBAF5, 0x7DB2, 0xBAF4, + 0x7DB4, 0xBAF3, 0x7DB5, 0xBAF9, 0x7DB7, 0xE363, 0x7DB8, 0xBAFA, 0x7DB9, 0xE371, 0x7DBA, 0xBAF6, 0x7DBB, 0xBAEC, 0x7DBC, 0xE373, + 0x7DBD, 0xBAEF, 0x7DBE, 0xBAF0, 0x7DBF, 0xBAF8, 0x7DC0, 0xE368, 0x7DC1, 0xE367, 0x7DC2, 0xE364, 0x7DC4, 0xE36C, 0x7DC5, 0xE369, + 0x7DC6, 0xE36D, 0x7DC7, 0xBAFD, 0x7DC9, 0xE379, 0x7DCA, 0xBAF2, 0x7DCB, 0xE36E, 0x7DCC, 0xE36F, 0x7DCE, 0xE36B, 0x7DD2, 0xBAFC, + 0x7DD7, 0xE6E7, 0x7DD8, 0xBD70, 0x7DD9, 0xBD79, 0x7DDA, 0xBD75, 0x7DDB, 0xE6E4, 0x7DDD, 0xBD72, 0x7DDE, 0xBD76, 0x7DDF, 0xE6F0, + 0x7DE0, 0xBD6C, 0x7DE1, 0xE6E8, 0x7DE3, 0xBD74, 0x7DE6, 0xE6EB, 0x7DE7, 0xE6E6, 0x7DE8, 0xBD73, 0x7DE9, 0xBD77, 0x7DEA, 0xE6E5, + 0x7DEC, 0xBD71, 0x7DEE, 0xE6EF, 0x7DEF, 0xBD6E, 0x7DF0, 0xE6EE, 0x7DF1, 0xE6ED, 0x7DF2, 0xBD7A, 0x7DF3, 0xE572, 0x7DF4, 0xBD6D, + 0x7DF6, 0xE6EC, 0x7DF7, 0xE6E3, 0x7DF9, 0xBD7B, 0x7DFA, 0xE6EA, 0x7DFB, 0xBD6F, 0x7E03, 0xE6E9, 0x7E08, 0xBFA2, 0x7E09, 0xBFA7, + 0x7E0A, 0xBF7E, 0x7E0B, 0xEAD8, 0x7E0C, 0xEACF, 0x7E0D, 0xEADB, 0x7E0E, 0xEAD3, 0x7E0F, 0xEAD9, 0x7E10, 0xBFA8, 0x7E11, 0xBFA1, + 0x7E12, 0xEACC, 0x7E13, 0xEAD2, 0x7E14, 0xEADC, 0x7E15, 0xEAD5, 0x7E16, 0xEADA, 0x7E17, 0xEACE, 0x7E1A, 0xEAD6, 0x7E1B, 0xBFA3, + 0x7E1C, 0xEAD4, 0x7E1D, 0xBFA6, 0x7E1E, 0xBFA5, 0x7E1F, 0xEAD0, 0x7E20, 0xEAD1, 0x7E21, 0xEACD, 0x7E22, 0xEAD7, 0x7E23, 0xBFA4, + 0x7E24, 0xEADE, 0x7E25, 0xEADD, 0x7E29, 0xEDDA, 0x7E2A, 0xEDD6, 0x7E2B, 0xC15F, 0x7E2D, 0xEDD0, 0x7E2E, 0xC159, 0x7E2F, 0xC169, + 0x7E30, 0xEDDC, 0x7E31, 0xC161, 0x7E32, 0xC15D, 0x7E33, 0xEDD3, 0x7E34, 0xC164, 0x7E35, 0xC167, 0x7E36, 0xEDDE, 0x7E37, 0xC15C, + 0x7E38, 0xEDD5, 0x7E39, 0xC165, 0x7E3A, 0xEDE0, 0x7E3B, 0xEDDD, 0x7E3C, 0xEDD1, 0x7E3D, 0xC160, 0x7E3E, 0xC15A, 0x7E3F, 0xC168, + 0x7E40, 0xEDD8, 0x7E41, 0xC163, 0x7E42, 0xEDD2, 0x7E43, 0xC15E, 0x7E44, 0xEDDF, 0x7E45, 0xC162, 0x7E46, 0xC15B, 0x7E47, 0xEDD9, + 0x7E48, 0xC166, 0x7E49, 0xEDD7, 0x7E4C, 0xEDDB, 0x7E50, 0xF06E, 0x7E51, 0xF074, 0x7E52, 0xC2B9, 0x7E53, 0xF077, 0x7E54, 0xC2B4, + 0x7E55, 0xC2B5, 0x7E56, 0xF06F, 0x7E57, 0xF076, 0x7E58, 0xF071, 0x7E59, 0xC2BA, 0x7E5A, 0xC2B7, 0x7E5C, 0xF06D, 0x7E5E, 0xC2B6, + 0x7E5F, 0xF073, 0x7E60, 0xF075, 0x7E61, 0xC2B8, 0x7E62, 0xF072, 0x7E63, 0xF070, 0x7E68, 0xF2B8, 0x7E69, 0xC3B7, 0x7E6A, 0xC3B8, + 0x7E6B, 0xC3B4, 0x7E6D, 0xC3B5, 0x7E6F, 0xF2B4, 0x7E70, 0xF2B2, 0x7E72, 0xF2B6, 0x7E73, 0xC3BA, 0x7E74, 0xF2B7, 0x7E75, 0xF2B0, + 0x7E76, 0xF2AF, 0x7E77, 0xF2B3, 0x7E78, 0xF2B1, 0x7E79, 0xC3B6, 0x7E7A, 0xF2B5, 0x7E7B, 0xF4AC, 0x7E7C, 0xC47E, 0x7E7D, 0xC47D, + 0x7E7E, 0xF4AD, 0x7E80, 0xF4AF, 0x7E81, 0xF4AE, 0x7E82, 0xC4A1, 0x7E86, 0xF5EB, 0x7E87, 0xF5E8, 0x7E88, 0xF5E9, 0x7E8A, 0xF5E7, + 0x7E8B, 0xF5EA, 0x7E8C, 0xC4F2, 0x7E8D, 0xF5EC, 0x7E8F, 0xC4F1, 0x7E91, 0xF742, 0x7E93, 0xC5D5, 0x7E94, 0xC5D7, 0x7E95, 0xF7EE, + 0x7E96, 0xC5D6, 0x7E97, 0xF8B9, 0x7E98, 0xF940, 0x7E99, 0xF942, 0x7E9A, 0xF8FE, 0x7E9B, 0xF941, 0x7E9C, 0xC66C, 0x7F36, 0xA6CE, + 0x7F38, 0xACFB, 0x7F39, 0xD26F, 0x7F3A, 0xAFCA, 0x7F3D, 0xB2DA, 0x7F3E, 0xDAFC, 0x7F3F, 0xDAFD, 0x7F43, 0xEADF, 0x7F44, 0xC16A, + 0x7F45, 0xEDE1, 0x7F48, 0xC2BB, 0x7F4A, 0xF2BA, 0x7F4B, 0xF2B9, 0x7F4C, 0xC4A2, 0x7F4D, 0xF5ED, 0x7F4F, 0xF743, 0x7F50, 0xC5F8, + 0x7F51, 0xCA49, 0x7F54, 0xAAC9, 0x7F55, 0xA875, 0x7F58, 0xD04D, 0x7F5B, 0xD360, 0x7F5C, 0xD35B, 0x7F5D, 0xD35F, 0x7F5E, 0xD35D, + 0x7F5F, 0xAFCB, 0x7F60, 0xD35E, 0x7F61, 0xD35C, 0x7F63, 0xD6F1, 0x7F65, 0xDAFE, 0x7F66, 0xDB40, 0x7F67, 0xDF69, 0x7F68, 0xDF6A, + 0x7F69, 0xB86E, 0x7F6A, 0xB86F, 0x7F6B, 0xDF68, 0x7F6C, 0xDF6B, 0x7F6D, 0xDF67, 0x7F6E, 0xB86D, 0x7F70, 0xBB40, 0x7F72, 0xB870, + 0x7F73, 0xE37A, 0x7F75, 0xBD7C, 0x7F76, 0xE6F1, 0x7F77, 0xBD7D, 0x7F79, 0xBFA9, 0x7F7A, 0xEAE2, 0x7F7B, 0xEAE0, 0x7F7C, 0xEAE1, + 0x7F7D, 0xEDE4, 0x7F7E, 0xEDE3, 0x7F7F, 0xEDE2, 0x7F83, 0xF2BB, 0x7F85, 0xC3B9, 0x7F86, 0xF2BC, 0x7F87, 0xF744, 0x7F88, 0xC5F9, + 0x7F89, 0xF8BA, 0x7F8A, 0xA6CF, 0x7F8B, 0xAACB, 0x7F8C, 0xAACA, 0x7F8D, 0xD04F, 0x7F8E, 0xACFC, 0x7F91, 0xD04E, 0x7F92, 0xD362, + 0x7F94, 0xAFCC, 0x7F95, 0xD6F2, 0x7F96, 0xD361, 0x7F9A, 0xB2DC, 0x7F9B, 0xD6F5, 0x7F9C, 0xD6F3, 0x7F9D, 0xD6F4, 0x7F9E, 0xB2DB, + 0x7FA0, 0xDB42, 0x7FA1, 0xDB43, 0x7FA2, 0xDB41, 0x7FA4, 0xB873, 0x7FA5, 0xDF6D, 0x7FA6, 0xDF6C, 0x7FA7, 0xDF6E, 0x7FA8, 0xB872, + 0x7FA9, 0xB871, 0x7FAC, 0xE6F2, 0x7FAD, 0xE6F4, 0x7FAF, 0xBD7E, 0x7FB0, 0xE6F3, 0x7FB1, 0xEAE3, 0x7FB2, 0xBFAA, 0x7FB3, 0xF079, + 0x7FB5, 0xF078, 0x7FB6, 0xC3BB, 0x7FB7, 0xF2BD, 0x7FB8, 0xC3BD, 0x7FB9, 0xC3BC, 0x7FBA, 0xF4B0, 0x7FBB, 0xF5EE, 0x7FBC, 0xC4F3, + 0x7FBD, 0xA6D0, 0x7FBE, 0xD050, 0x7FBF, 0xACFD, 0x7FC0, 0xD365, 0x7FC1, 0xAFCE, 0x7FC2, 0xD364, 0x7FC3, 0xD363, 0x7FC5, 0xAFCD, + 0x7FC7, 0xD6FB, 0x7FC9, 0xD6FD, 0x7FCA, 0xD6F6, 0x7FCB, 0xD6F7, 0x7FCC, 0xB2DD, 0x7FCD, 0xD6F8, 0x7FCE, 0xB2DE, 0x7FCF, 0xD6FC, + 0x7FD0, 0xD6F9, 0x7FD1, 0xD6FA, 0x7FD2, 0xB2DF, 0x7FD4, 0xB5BE, 0x7FD5, 0xB5BF, 0x7FD7, 0xDB44, 0x7FDB, 0xDF6F, 0x7FDC, 0xDF70, + 0x7FDE, 0xE37E, 0x7FDF, 0xBB43, 0x7FE0, 0xBB41, 0x7FE1, 0xBB42, 0x7FE2, 0xE37B, 0x7FE3, 0xE37C, 0x7FE5, 0xE37D, 0x7FE6, 0xE6F9, + 0x7FE8, 0xE6FA, 0x7FE9, 0xBDA1, 0x7FEA, 0xE6F7, 0x7FEB, 0xE6F6, 0x7FEC, 0xE6F8, 0x7FED, 0xE6F5, 0x7FEE, 0xBFAD, 0x7FEF, 0xEAE4, + 0x7FF0, 0xBFAB, 0x7FF1, 0xBFAC, 0x7FF2, 0xEDE6, 0x7FF3, 0xC16B, 0x7FF4, 0xEDE5, 0x7FF5, 0xEFA8, 0x7FF7, 0xF07A, 0x7FF8, 0xF07B, + 0x7FF9, 0xC2BC, 0x7FFB, 0xC2BD, 0x7FFC, 0xC16C, 0x7FFD, 0xF2BE, 0x7FFE, 0xF2BF, 0x7FFF, 0xF4B1, 0x8000, 0xC4A3, 0x8001, 0xA6D1, + 0x8003, 0xA6D2, 0x8004, 0xACFE, 0x8005, 0xAACC, 0x8006, 0xAFCF, 0x8007, 0xD051, 0x800B, 0xB5C0, 0x800C, 0xA6D3, 0x800D, 0xAD41, + 0x800E, 0xD052, 0x800F, 0xD053, 0x8010, 0xAD40, 0x8011, 0xAD42, 0x8012, 0xA6D4, 0x8014, 0xD054, 0x8015, 0xAFD1, 0x8016, 0xD366, + 0x8017, 0xAFD3, 0x8018, 0xAFD0, 0x8019, 0xAFD2, 0x801B, 0xD741, 0x801C, 0xB2E0, 0x801E, 0xD740, 0x801F, 0xD6FE, 0x8021, 0xDF71, + 0x8024, 0xE3A1, 0x8026, 0xBDA2, 0x8028, 0xBFAE, 0x8029, 0xEAE6, 0x802A, 0xEAE5, 0x802C, 0xEDE7, 0x8030, 0xF5EF, 0x8033, 0xA6D5, + 0x8034, 0xCB73, 0x8035, 0xCDAA, 0x8036, 0xAD43, 0x8037, 0xD055, 0x8039, 0xD368, 0x803D, 0xAFD4, 0x803E, 0xD367, 0x803F, 0xAFD5, + 0x8043, 0xD743, 0x8046, 0xB2E2, 0x8047, 0xD742, 0x8048, 0xD744, 0x804A, 0xB2E1, 0x804F, 0xDB46, 0x8050, 0xDB47, 0x8051, 0xDB45, + 0x8052, 0xB5C1, 0x8056, 0xB874, 0x8058, 0xB875, 0x805A, 0xBB45, 0x805C, 0xE3A3, 0x805D, 0xE3A2, 0x805E, 0xBB44, 0x8064, 0xE6FB, + 0x8067, 0xE6FC, 0x806C, 0xEAE7, 0x806F, 0xC170, 0x8070, 0xC16F, 0x8071, 0xC16D, 0x8072, 0xC16E, 0x8073, 0xC171, 0x8075, 0xF07C, + 0x8076, 0xC2BF, 0x8077, 0xC2BE, 0x8078, 0xF2C0, 0x8079, 0xF4B2, 0x807D, 0xC5A5, 0x807E, 0xC5A4, 0x807F, 0xA6D6, 0x8082, 0xD1FB, + 0x8084, 0xB877, 0x8085, 0xB5C2, 0x8086, 0xB876, 0x8087, 0xBB46, 0x8089, 0xA6D7, 0x808A, 0xC9A9, 0x808B, 0xA6D8, 0x808C, 0xA6D9, + 0x808F, 0xCDAB, 0x8090, 0xCB76, 0x8092, 0xCB77, 0x8093, 0xA877, 0x8095, 0xCB74, 0x8096, 0xA876, 0x8098, 0xA879, 0x8099, 0xCB75, + 0x809A, 0xA87B, 0x809B, 0xA87A, 0x809C, 0xCB78, 0x809D, 0xA878, 0x80A1, 0xAAD1, 0x80A2, 0xAACF, 0x80A3, 0xCDAD, 0x80A5, 0xAACE, + 0x80A9, 0xAAD3, 0x80AA, 0xAAD5, 0x80AB, 0xAAD2, 0x80AD, 0xCDB0, 0x80AE, 0xCDAC, 0x80AF, 0xAAD6, 0x80B1, 0xAAD0, 0x80B2, 0xA87C, + 0x80B4, 0xAAD4, 0x80B5, 0xCDAF, 0x80B8, 0xCDAE, 0x80BA, 0xAACD, 0x80C2, 0xD05B, 0x80C3, 0xAD47, 0x80C4, 0xAD48, 0x80C5, 0xD05D, + 0x80C7, 0xD057, 0x80C8, 0xD05A, 0x80C9, 0xD063, 0x80CA, 0xD061, 0x80CC, 0xAD49, 0x80CD, 0xD067, 0x80CE, 0xAD4C, 0x80CF, 0xD064, + 0x80D0, 0xD05C, 0x80D1, 0xD059, 0x80D4, 0xDB49, 0x80D5, 0xD062, 0x80D6, 0xAD44, 0x80D7, 0xD065, 0x80D8, 0xD056, 0x80D9, 0xD05F, + 0x80DA, 0xAD46, 0x80DB, 0xAD4B, 0x80DC, 0xD060, 0x80DD, 0xAD4F, 0x80DE, 0xAD4D, 0x80E0, 0xD058, 0x80E1, 0xAD4A, 0x80E3, 0xD05E, + 0x80E4, 0xAD4E, 0x80E5, 0xAD45, 0x80E6, 0xD066, 0x80ED, 0xAFDA, 0x80EF, 0xAFE3, 0x80F0, 0xAFD8, 0x80F1, 0xAFD6, 0x80F2, 0xD36A, + 0x80F3, 0xAFDE, 0x80F4, 0xAFDB, 0x80F5, 0xD36C, 0x80F8, 0xAFDD, 0x80F9, 0xD36B, 0x80FA, 0xD369, 0x80FB, 0xD36E, 0x80FC, 0xAFE2, + 0x80FD, 0xAFE0, 0x80FE, 0xDB48, 0x8100, 0xD36F, 0x8101, 0xD36D, 0x8102, 0xAFD7, 0x8105, 0xAFD9, 0x8106, 0xAFDC, 0x8108, 0xAFDF, + 0x810A, 0xAFE1, 0x8115, 0xD74E, 0x8116, 0xB2E4, 0x8118, 0xD745, 0x8119, 0xD747, 0x811B, 0xD748, 0x811D, 0xD750, 0x811E, 0xD74C, + 0x811F, 0xD74A, 0x8121, 0xD74D, 0x8122, 0xD751, 0x8123, 0xB2E5, 0x8124, 0xB2E9, 0x8125, 0xD746, 0x8127, 0xD74F, 0x8129, 0xB2E7, + 0x812B, 0xB2E6, 0x812C, 0xD74B, 0x812D, 0xD749, 0x812F, 0xB2E3, 0x8130, 0xB2E8, 0x8139, 0xB5C8, 0x813A, 0xDB51, 0x813D, 0xDB4F, + 0x813E, 0xB5CA, 0x8143, 0xDB4A, 0x8144, 0xDFA1, 0x8146, 0xB5C9, 0x8147, 0xDB4E, 0x814A, 0xDB4B, 0x814B, 0xB5C5, 0x814C, 0xB5CB, + 0x814D, 0xDB50, 0x814E, 0xB5C7, 0x814F, 0xDB4D, 0x8150, 0xBB47, 0x8151, 0xB5C6, 0x8152, 0xDB4C, 0x8153, 0xB5CC, 0x8154, 0xB5C4, + 0x8155, 0xB5C3, 0x815B, 0xDF77, 0x815C, 0xDF75, 0x815E, 0xDF7B, 0x8160, 0xDF73, 0x8161, 0xDFA2, 0x8162, 0xDF78, 0x8164, 0xDF72, + 0x8165, 0xB87B, 0x8166, 0xB8A3, 0x8167, 0xDF7D, 0x8169, 0xDF76, 0x816B, 0xB87E, 0x816E, 0xB87C, 0x816F, 0xDF7E, 0x8170, 0xB879, + 0x8171, 0xB878, 0x8172, 0xDF79, 0x8173, 0xB87D, 0x8174, 0xB5CD, 0x8176, 0xDF7C, 0x8177, 0xDF74, 0x8178, 0xB87A, 0x8179, 0xB8A1, + 0x817A, 0xB8A2, 0x817F, 0xBB4C, 0x8180, 0xBB48, 0x8182, 0xBB4D, 0x8183, 0xE3A6, 0x8186, 0xE3A5, 0x8187, 0xE3A7, 0x8188, 0xBB4A, + 0x8189, 0xE3A4, 0x818A, 0xBB4B, 0x818B, 0xE3AA, 0x818C, 0xE3A9, 0x818D, 0xE3A8, 0x818F, 0xBB49, 0x8195, 0xE741, 0x8197, 0xE744, + 0x8198, 0xBDA8, 0x8199, 0xE743, 0x819A, 0xBDA7, 0x819B, 0xBDA3, 0x819C, 0xBDA4, 0x819D, 0xBDA5, 0x819E, 0xE740, 0x819F, 0xE6FE, + 0x81A0, 0xBDA6, 0x81A2, 0xE742, 0x81A3, 0xE6FD, 0x81A6, 0xEAE9, 0x81A7, 0xEAF3, 0x81A8, 0xBFB1, 0x81A9, 0xBFB0, 0x81AB, 0xEAED, + 0x81AC, 0xEAEF, 0x81AE, 0xEAEA, 0x81B0, 0xEAEE, 0x81B1, 0xEAE8, 0x81B2, 0xEAF1, 0x81B3, 0xBFAF, 0x81B4, 0xEAF0, 0x81B5, 0xEAEC, + 0x81B7, 0xEAF2, 0x81B9, 0xEAEB, 0x81BA, 0xC174, 0x81BB, 0xEDE8, 0x81BC, 0xEDEE, 0x81BD, 0xC178, 0x81BE, 0xC17A, 0x81BF, 0xC177, + 0x81C0, 0xC176, 0x81C2, 0xC175, 0x81C3, 0xC173, 0x81C4, 0xEDE9, 0x81C5, 0xEDEC, 0x81C6, 0xC172, 0x81C7, 0xEDED, 0x81C9, 0xC179, + 0x81CA, 0xEDEB, 0x81CC, 0xEDEA, 0x81CD, 0xC2C0, 0x81CF, 0xC2C1, 0x81D0, 0xF0A1, 0x81D1, 0xF07D, 0x81D2, 0xF07E, 0x81D5, 0xF2C2, + 0x81D7, 0xF2C1, 0x81D8, 0xC3BE, 0x81D9, 0xF4B4, 0x81DA, 0xC4A4, 0x81DB, 0xF4B3, 0x81DD, 0xF5F0, 0x81DE, 0xF745, 0x81DF, 0xC5A6, + 0x81E0, 0xF943, 0x81E1, 0xF944, 0x81E2, 0xC5D8, 0x81E3, 0xA6DA, 0x81E5, 0xAAD7, 0x81E6, 0xDB52, 0x81E7, 0xBB4E, 0x81E8, 0xC17B, + 0x81E9, 0xEDEF, 0x81EA, 0xA6DB, 0x81EC, 0xAFE5, 0x81ED, 0xAFE4, 0x81EE, 0xDB53, 0x81F2, 0xEAF4, 0x81F3, 0xA6DC, 0x81F4, 0xAD50, + 0x81F7, 0xDB54, 0x81F8, 0xDB55, 0x81F9, 0xDB56, 0x81FA, 0xBB4F, 0x81FB, 0xBFB2, 0x81FC, 0xA6DD, 0x81FE, 0xAAD8, 0x81FF, 0xD068, + 0x8200, 0xAFE6, 0x8201, 0xD370, 0x8202, 0xB2EA, 0x8204, 0xDB57, 0x8205, 0xB8A4, 0x8207, 0xBB50, 0x8208, 0xBFB3, 0x8209, 0xC17C, + 0x820A, 0xC2C2, 0x820B, 0xF4B5, 0x820C, 0xA6DE, 0x820D, 0xAAD9, 0x8210, 0xAFE7, 0x8211, 0xD752, 0x8212, 0xB5CE, 0x8214, 0xBB51, + 0x8215, 0xE3AB, 0x8216, 0xE745, 0x821B, 0xA6DF, 0x821C, 0xB5CF, 0x821D, 0xDFA3, 0x821E, 0xBB52, 0x821F, 0xA6E0, 0x8220, 0xCDB1, + 0x8221, 0xD069, 0x8222, 0xAD51, 0x8225, 0xD372, 0x8228, 0xAFEA, 0x822A, 0xAFE8, 0x822B, 0xAFE9, 0x822C, 0xAFEB, 0x822F, 0xD371, + 0x8232, 0xD757, 0x8233, 0xD754, 0x8234, 0xD756, 0x8235, 0xB2EB, 0x8236, 0xB2ED, 0x8237, 0xB2EC, 0x8238, 0xD753, 0x8239, 0xB2EE, + 0x823A, 0xD755, 0x823C, 0xDB58, 0x823D, 0xDB59, 0x823F, 0xDB5A, 0x8240, 0xDFA6, 0x8242, 0xDFA7, 0x8244, 0xDFA5, 0x8245, 0xDFA8, + 0x8247, 0xB8A5, 0x8249, 0xDFA4, 0x824B, 0xBB53, 0x824E, 0xE74A, 0x824F, 0xE746, 0x8250, 0xE749, 0x8251, 0xE74B, 0x8252, 0xE748, + 0x8253, 0xE747, 0x8255, 0xEAF5, 0x8256, 0xEAF6, 0x8257, 0xEAF7, 0x8258, 0xBFB4, 0x8259, 0xBFB5, 0x825A, 0xEDF1, 0x825B, 0xEDF0, + 0x825C, 0xEDF2, 0x825E, 0xF0A3, 0x825F, 0xF0A2, 0x8261, 0xF2C4, 0x8263, 0xF2C5, 0x8264, 0xF2C3, 0x8266, 0xC4A5, 0x8268, 0xF4B6, + 0x8269, 0xF4B7, 0x826B, 0xF746, 0x826C, 0xF7EF, 0x826D, 0xF8BB, 0x826E, 0xA6E1, 0x826F, 0xA87D, 0x8271, 0xC17D, 0x8272, 0xA6E2, + 0x8274, 0xD758, 0x8275, 0xDB5B, 0x8277, 0xC641, 0x8278, 0xCA4A, 0x827C, 0xCA4B, 0x827D, 0xCA4D, 0x827E, 0xA6E3, 0x827F, 0xCA4E, + 0x8280, 0xCA4C, 0x8283, 0xCBA2, 0x8284, 0xCBA3, 0x8285, 0xCB7B, 0x828A, 0xCBA1, 0x828B, 0xA8A1, 0x828D, 0xA8A2, 0x828E, 0xCB7C, + 0x828F, 0xCB7A, 0x8290, 0xCB79, 0x8291, 0xCB7D, 0x8292, 0xA87E, 0x8293, 0xCB7E, 0x8294, 0xD06A, 0x8298, 0xCDB6, 0x8299, 0xAADC, + 0x829A, 0xCDB5, 0x829B, 0xCDB7, 0x829D, 0xAADB, 0x829E, 0xCDBC, 0x829F, 0xAADF, 0x82A0, 0xCDB2, 0x82A1, 0xCDC0, 0x82A2, 0xCDC6, + 0x82A3, 0xAAE6, 0x82A4, 0xCDC3, 0x82A5, 0xAAE3, 0x82A7, 0xCDB9, 0x82A8, 0xCDBF, 0x82A9, 0xCDC1, 0x82AB, 0xCDB4, 0x82AC, 0xAAE2, + 0x82AD, 0xAADD, 0x82AE, 0xCDBA, 0x82AF, 0xAAE4, 0x82B0, 0xAAE7, 0x82B1, 0xAAE1, 0x82B3, 0xAADA, 0x82B4, 0xCDBE, 0x82B5, 0xCDB8, + 0x82B6, 0xCDC5, 0x82B7, 0xAAE9, 0x82B8, 0xAAE5, 0x82B9, 0xAAE0, 0x82BA, 0xCDBD, 0x82BB, 0xAFEC, 0x82BC, 0xCDBB, 0x82BD, 0xAADE, + 0x82BE, 0xAAE8, 0x82C0, 0xCDB3, 0x82C2, 0xCDC2, 0x82C3, 0xCDC4, 0x82D1, 0xAD62, 0x82D2, 0xAD5C, 0x82D3, 0xAD64, 0x82D4, 0xAD61, + 0x82D5, 0xD071, 0x82D6, 0xD074, 0x82D7, 0xAD5D, 0x82D9, 0xD06B, 0x82DB, 0xAD56, 0x82DC, 0xAD60, 0x82DE, 0xAD63, 0x82DF, 0xAD65, + 0x82E0, 0xD0A2, 0x82E1, 0xD077, 0x82E3, 0xAD55, 0x82E4, 0xD0A1, 0x82E5, 0xAD59, 0x82E6, 0xAD57, 0x82E7, 0xAD52, 0x82E8, 0xD06F, + 0x82EA, 0xD07E, 0x82EB, 0xD073, 0x82EC, 0xD076, 0x82ED, 0xD0A5, 0x82EF, 0xAD66, 0x82F0, 0xD07D, 0x82F1, 0xAD5E, 0x82F2, 0xD078, + 0x82F3, 0xD0A4, 0x82F4, 0xD075, 0x82F5, 0xD079, 0x82F6, 0xD07C, 0x82F9, 0xD06D, 0x82FA, 0xD0A3, 0x82FB, 0xD07B, 0x82FE, 0xD06C, + 0x8300, 0xD070, 0x8301, 0xAD5F, 0x8302, 0xAD5A, 0x8303, 0xAD53, 0x8304, 0xAD58, 0x8305, 0xAD54, 0x8306, 0xAD67, 0x8307, 0xD06E, + 0x8308, 0xD3A5, 0x8309, 0xAD5B, 0x830C, 0xD07A, 0x830D, 0xCE41, 0x8316, 0xD3A8, 0x8317, 0xAFFA, 0x8319, 0xD376, 0x831B, 0xD3A3, + 0x831C, 0xD37D, 0x831E, 0xD3B2, 0x8320, 0xD3AA, 0x8322, 0xD37E, 0x8324, 0xD3A9, 0x8325, 0xD378, 0x8326, 0xD37C, 0x8327, 0xD3B5, + 0x8328, 0xAFFD, 0x8329, 0xD3AD, 0x832A, 0xD3A4, 0x832B, 0xAFED, 0x832C, 0xD3B3, 0x832D, 0xD374, 0x832F, 0xD3AC, 0x8331, 0xAFFC, + 0x8332, 0xAFF7, 0x8333, 0xD373, 0x8334, 0xAFF5, 0x8335, 0xAFF4, 0x8336, 0xAFF9, 0x8337, 0xD3AB, 0x8338, 0xAFF1, 0x8339, 0xAFF8, + 0x833A, 0xD072, 0x833B, 0xDB5C, 0x833C, 0xD3A6, 0x833F, 0xD37A, 0x8340, 0xAFFB, 0x8341, 0xD37B, 0x8342, 0xD3A1, 0x8343, 0xAFFE, + 0x8344, 0xD375, 0x8345, 0xD3AF, 0x8347, 0xD3AE, 0x8348, 0xD3B6, 0x8349, 0xAFF3, 0x834A, 0xAFF0, 0x834B, 0xD3B4, 0x834C, 0xD3B0, + 0x834D, 0xD3A7, 0x834E, 0xD3A2, 0x834F, 0xAFF6, 0x8350, 0xAFF2, 0x8351, 0xD377, 0x8352, 0xAFEE, 0x8353, 0xD3B1, 0x8354, 0xAFEF, + 0x8356, 0xD379, 0x8373, 0xD75E, 0x8374, 0xD760, 0x8375, 0xD765, 0x8376, 0xD779, 0x8377, 0xB2FC, 0x8378, 0xB2F2, 0x837A, 0xD75D, + 0x837B, 0xB2FD, 0x837C, 0xB2FE, 0x837D, 0xD768, 0x837E, 0xD76F, 0x837F, 0xD775, 0x8381, 0xD762, 0x8383, 0xD769, 0x8386, 0xB340, + 0x8387, 0xD777, 0x8388, 0xD772, 0x8389, 0xB2FA, 0x838A, 0xB2F8, 0x838B, 0xD76E, 0x838C, 0xD76A, 0x838D, 0xD75C, 0x838E, 0xB2EF, + 0x838F, 0xD761, 0x8390, 0xD759, 0x8392, 0xB2F7, 0x8393, 0xB2F9, 0x8394, 0xD766, 0x8395, 0xD763, 0x8396, 0xB2F4, 0x8397, 0xD773, + 0x8398, 0xB2F1, 0x8399, 0xD764, 0x839A, 0xD77A, 0x839B, 0xD76C, 0x839D, 0xD76B, 0x839E, 0xB2F0, 0x83A0, 0xB2FB, 0x83A2, 0xB2F3, + 0x83A3, 0xD75A, 0x83A4, 0xD75F, 0x83A5, 0xD770, 0x83A6, 0xD776, 0x83A7, 0xB341, 0x83A8, 0xD75B, 0x83A9, 0xD767, 0x83AA, 0xD76D, + 0x83AB, 0xB2F6, 0x83AE, 0xD778, 0x83AF, 0xD771, 0x83B0, 0xD774, 0x83BD, 0xB2F5, 0x83BF, 0xDB6C, 0x83C0, 0xDB60, 0x83C1, 0xB5D7, + 0x83C2, 0xDB7D, 0x83C3, 0xDBA7, 0x83C4, 0xDBAA, 0x83C5, 0xB5D5, 0x83C6, 0xDB68, 0x83C7, 0xDBA3, 0x83C8, 0xDB69, 0x83C9, 0xDB77, + 0x83CA, 0xB5E2, 0x83CB, 0xDB73, 0x83CC, 0xB5DF, 0x83CE, 0xDB74, 0x83CF, 0xDB5D, 0x83D1, 0xDBA4, 0x83D4, 0xB5E8, 0x83D5, 0xDBA1, + 0x83D6, 0xDB75, 0x83D7, 0xDBAC, 0x83D8, 0xDB70, 0x83D9, 0xDFC8, 0x83DB, 0xDBAF, 0x83DC, 0xB5E6, 0x83DD, 0xDB6E, 0x83DE, 0xDB7A, + 0x83DF, 0xB5E9, 0x83E0, 0xB5D4, 0x83E1, 0xDB72, 0x83E2, 0xDBAD, 0x83E3, 0xDB6B, 0x83E4, 0xDB64, 0x83E5, 0xDB6F, 0x83E7, 0xDB63, + 0x83E8, 0xDB61, 0x83E9, 0xB5D0, 0x83EA, 0xDBA5, 0x83EB, 0xDB6A, 0x83EC, 0xDBA8, 0x83EE, 0xDBA9, 0x83EF, 0xB5D8, 0x83F0, 0xB5DD, + 0x83F1, 0xB5D9, 0x83F2, 0xB5E1, 0x83F3, 0xDB7E, 0x83F4, 0xB5DA, 0x83F5, 0xDB76, 0x83F6, 0xDB66, 0x83F8, 0xB5D2, 0x83F9, 0xDB5E, + 0x83FA, 0xDBA2, 0x83FB, 0xDBAB, 0x83FC, 0xDB65, 0x83FD, 0xB5E0, 0x83FE, 0xDBB0, 0x83FF, 0xDB71, 0x8401, 0xDB6D, 0x8403, 0xB5D1, + 0x8404, 0xB5E5, 0x8406, 0xDB7C, 0x8407, 0xB5E7, 0x8409, 0xDB78, 0x840A, 0xB5DC, 0x840B, 0xB5D6, 0x840C, 0xB5DE, 0x840D, 0xB5D3, + 0x840E, 0xB5E4, 0x840F, 0xDB79, 0x8410, 0xDB67, 0x8411, 0xDB7B, 0x8412, 0xDB62, 0x8413, 0xDBA6, 0x841B, 0xDBAE, 0x8423, 0xDB5F, + 0x8429, 0xDFC7, 0x842B, 0xDFDD, 0x842C, 0xB855, 0x842D, 0xDFCC, 0x842F, 0xDFCA, 0x8430, 0xDFB5, 0x8431, 0xB8A9, 0x8432, 0xDFC5, + 0x8433, 0xDFD9, 0x8434, 0xDFC1, 0x8435, 0xB8B1, 0x8436, 0xDFD8, 0x8437, 0xDFBF, 0x8438, 0xB5E3, 0x8439, 0xDFCF, 0x843A, 0xDFC0, + 0x843B, 0xDFD6, 0x843C, 0xB8B0, 0x843D, 0xB8A8, 0x843F, 0xDFAA, 0x8440, 0xDFB2, 0x8442, 0xDFCB, 0x8443, 0xDFC3, 0x8444, 0xDFDC, + 0x8445, 0xDFC6, 0x8446, 0xB8B6, 0x8447, 0xDFD7, 0x8449, 0xB8AD, 0x844B, 0xDFC9, 0x844C, 0xDFD1, 0x844D, 0xDFB6, 0x844E, 0xDFD0, + 0x8450, 0xDFE1, 0x8451, 0xDFB1, 0x8452, 0xDFD2, 0x8454, 0xDFDF, 0x8456, 0xDFAB, 0x8457, 0xB5DB, 0x8459, 0xDFB9, 0x845A, 0xDFB8, + 0x845B, 0xB8AF, 0x845D, 0xDFBC, 0x845E, 0xDFBE, 0x845F, 0xDFCD, 0x8460, 0xDFDE, 0x8461, 0xB8B2, 0x8463, 0xB8B3, 0x8465, 0xDFB0, + 0x8466, 0xB8AB, 0x8467, 0xDFB4, 0x8468, 0xDFDA, 0x8469, 0xB8B4, 0x846B, 0xB8AC, 0x846C, 0xB8AE, 0x846D, 0xB8B5, 0x846E, 0xDFE0, + 0x846F, 0xDFD3, 0x8470, 0xDFCE, 0x8473, 0xDFBB, 0x8474, 0xDFBA, 0x8475, 0xB8AA, 0x8476, 0xDFAC, 0x8477, 0xB8A7, 0x8478, 0xDFC4, + 0x8479, 0xDFAD, 0x847A, 0xDFC2, 0x847D, 0xDFB7, 0x847E, 0xDFDB, 0x8482, 0xB8A6, 0x8486, 0xDFB3, 0x848D, 0xDFAF, 0x848E, 0xDFD5, + 0x848F, 0xDFAE, 0x8490, 0xBB60, 0x8491, 0xE3D3, 0x8494, 0xE3C2, 0x8497, 0xE3AC, 0x8498, 0xE3CA, 0x8499, 0xBB58, 0x849A, 0xE3BB, + 0x849B, 0xE3C5, 0x849C, 0xBB5B, 0x849D, 0xE3BE, 0x849E, 0xBB59, 0x849F, 0xE3AF, 0x84A0, 0xE3CD, 0x84A1, 0xE3AE, 0x84A2, 0xE3C1, + 0x84A4, 0xE3AD, 0x84A7, 0xE3BF, 0x84A8, 0xE3C8, 0x84A9, 0xE3C6, 0x84AA, 0xE3BA, 0x84AB, 0xE3B5, 0x84AC, 0xE3B3, 0x84AE, 0xE3B4, + 0x84AF, 0xE3C7, 0x84B0, 0xE3D2, 0x84B1, 0xE3BC, 0x84B2, 0xBB5A, 0x84B4, 0xE3B7, 0x84B6, 0xE3CB, 0x84B8, 0xBB5D, 0x84B9, 0xE3B6, + 0x84BA, 0xE3B0, 0x84BB, 0xE3C0, 0x84BC, 0xBB61, 0x84BF, 0xBB55, 0x84C0, 0xBB5E, 0x84C1, 0xE3B8, 0x84C2, 0xE3B2, 0x84C4, 0xBB57, + 0x84C5, 0xDFD4, 0x84C6, 0xBB56, 0x84C7, 0xE3C3, 0x84C9, 0xBB54, 0x84CA, 0xBB63, 0x84CB, 0xBB5C, 0x84CC, 0xE3C4, 0x84CD, 0xE3B9, + 0x84CE, 0xE3B1, 0x84CF, 0xE3CC, 0x84D0, 0xE3BD, 0x84D1, 0xBB62, 0x84D2, 0xE3D0, 0x84D3, 0xBB5F, 0x84D4, 0xE3CF, 0x84D6, 0xE3C9, + 0x84D7, 0xE3CE, 0x84DB, 0xE3D1, 0x84E7, 0xE773, 0x84E8, 0xE774, 0x84E9, 0xE767, 0x84EA, 0xE766, 0x84EB, 0xE762, 0x84EC, 0xBDB4, + 0x84EE, 0xBDAC, 0x84EF, 0xE776, 0x84F0, 0xE775, 0x84F1, 0xDFA9, 0x84F2, 0xE75F, 0x84F3, 0xE763, 0x84F4, 0xE75D, 0x84F6, 0xE770, + 0x84F7, 0xE761, 0x84F9, 0xE777, 0x84FA, 0xE75A, 0x84FB, 0xE758, 0x84FC, 0xE764, 0x84FD, 0xE76E, 0x84FE, 0xE769, 0x84FF, 0xBDB6, + 0x8500, 0xE74F, 0x8502, 0xE76D, 0x8506, 0xBDB7, 0x8507, 0xDFBD, 0x8508, 0xE75B, 0x8509, 0xE752, 0x850A, 0xE755, 0x850B, 0xE77B, + 0x850C, 0xE75C, 0x850D, 0xE753, 0x850E, 0xE751, 0x850F, 0xE74E, 0x8511, 0xBDB0, 0x8512, 0xE765, 0x8513, 0xBDAF, 0x8514, 0xBDB3, + 0x8515, 0xE760, 0x8516, 0xE768, 0x8517, 0xBDA9, 0x8518, 0xE778, 0x8519, 0xE77C, 0x851A, 0xBDAB, 0x851C, 0xE757, 0x851D, 0xE76B, + 0x851E, 0xE76F, 0x851F, 0xE754, 0x8520, 0xE779, 0x8521, 0xBDB2, 0x8523, 0xBDB1, 0x8524, 0xE74C, 0x8525, 0xBDB5, 0x8526, 0xE772, + 0x8527, 0xE756, 0x8528, 0xE76A, 0x8529, 0xE750, 0x852A, 0xE75E, 0x852B, 0xE759, 0x852C, 0xBDAD, 0x852D, 0xBDAE, 0x852E, 0xE76C, + 0x852F, 0xE77D, 0x8530, 0xE77A, 0x8531, 0xE771, 0x853B, 0xE74D, 0x853D, 0xBDAA, 0x853E, 0xEB49, 0x8540, 0xEB40, 0x8541, 0xEB43, + 0x8543, 0xBFBB, 0x8544, 0xEB45, 0x8545, 0xEAF9, 0x8546, 0xEB41, 0x8547, 0xEB47, 0x8548, 0xBFB8, 0x8549, 0xBFBC, 0x854A, 0xBFB6, + 0x854D, 0xEAFB, 0x854E, 0xEB4C, 0x8551, 0xEB46, 0x8553, 0xEAFC, 0x8554, 0xEB55, 0x8555, 0xEB4F, 0x8556, 0xEAF8, 0x8557, 0xEE46, + 0x8558, 0xEAFE, 0x8559, 0xBFB7, 0x855B, 0xEB4A, 0x855D, 0xEB54, 0x855E, 0xBFBF, 0x8560, 0xEB51, 0x8561, 0xEAFD, 0x8562, 0xEB44, + 0x8563, 0xEB48, 0x8564, 0xEB42, 0x8565, 0xEB56, 0x8566, 0xEB53, 0x8567, 0xEB50, 0x8568, 0xBFB9, 0x8569, 0xBFBA, 0x856A, 0xBFBE, + 0x856B, 0xEAFA, 0x856C, 0xEB57, 0x856D, 0xBFBD, 0x856E, 0xEB4D, 0x8571, 0xEB4B, 0x8575, 0xEB4E, 0x8576, 0xEE53, 0x8577, 0xEE40, + 0x8578, 0xEE45, 0x8579, 0xEE52, 0x857A, 0xEE44, 0x857B, 0xEDFB, 0x857C, 0xEE41, 0x857E, 0xC1A2, 0x8580, 0xEDF4, 0x8581, 0xEE4D, + 0x8582, 0xEE4F, 0x8583, 0xEDF3, 0x8584, 0xC1A1, 0x8585, 0xEE51, 0x8586, 0xEE49, 0x8587, 0xC1A8, 0x8588, 0xEE50, 0x8589, 0xEE42, + 0x858A, 0xC1AA, 0x858B, 0xEDF9, 0x858C, 0xEB52, 0x858D, 0xEE4A, 0x858E, 0xEE47, 0x858F, 0xEDF5, 0x8590, 0xEE55, 0x8591, 0xC1A4, + 0x8594, 0xC1A5, 0x8595, 0xEDF7, 0x8596, 0xEE48, 0x8598, 0xEE54, 0x8599, 0xEE4B, 0x859A, 0xEDFD, 0x859B, 0xC1A7, 0x859C, 0xC1A3, + 0x859D, 0xEE4C, 0x859E, 0xEDFE, 0x859F, 0xEE56, 0x85A0, 0xEDF8, 0x85A1, 0xEE43, 0x85A2, 0xEE4E, 0x85A3, 0xEDFA, 0x85A4, 0xEDFC, + 0x85A6, 0xC2CB, 0x85A7, 0xEDF6, 0x85A8, 0xC1A9, 0x85A9, 0xC2C4, 0x85AA, 0xC17E, 0x85AF, 0xC1A6, 0x85B0, 0xC2C8, 0x85B1, 0xF0B3, + 0x85B3, 0xF0A9, 0x85B4, 0xF0A4, 0x85B5, 0xF0AA, 0x85B6, 0xF0B4, 0x85B7, 0xF0B8, 0x85B8, 0xF0B7, 0x85B9, 0xC2CA, 0x85BA, 0xC2C9, + 0x85BD, 0xF0AB, 0x85BE, 0xF0B9, 0x85BF, 0xF0AE, 0x85C0, 0xF0A6, 0x85C2, 0xF0A8, 0x85C3, 0xF0A7, 0x85C4, 0xF0AD, 0x85C5, 0xF0B2, + 0x85C6, 0xF0A5, 0x85C7, 0xF0AC, 0x85C8, 0xF0B1, 0x85C9, 0xC2C7, 0x85CB, 0xF0AF, 0x85CD, 0xC2C5, 0x85CE, 0xF0B0, 0x85CF, 0xC2C3, + 0x85D0, 0xC2C6, 0x85D1, 0xF2D5, 0x85D2, 0xF0B5, 0x85D5, 0xC3C2, 0x85D7, 0xF2CD, 0x85D8, 0xF2D1, 0x85D9, 0xF2C9, 0x85DA, 0xF2CC, + 0x85DC, 0xF2D4, 0x85DD, 0xC3C0, 0x85DE, 0xF2D9, 0x85DF, 0xF2D2, 0x85E1, 0xF2CA, 0x85E2, 0xF2DA, 0x85E3, 0xF2D3, 0x85E4, 0xC3C3, + 0x85E5, 0xC3C4, 0x85E6, 0xF2D7, 0x85E8, 0xF2CB, 0x85E9, 0xC3BF, 0x85EA, 0xC3C1, 0x85EB, 0xF2C6, 0x85EC, 0xF2CE, 0x85ED, 0xF2C8, + 0x85EF, 0xF2D8, 0x85F0, 0xF2D6, 0x85F1, 0xF2C7, 0x85F2, 0xF2CF, 0x85F6, 0xF4BE, 0x85F7, 0xC3C5, 0x85F8, 0xF2D0, 0x85F9, 0xC4A7, + 0x85FA, 0xC4A9, 0x85FB, 0xC4A6, 0x85FD, 0xF4C3, 0x85FE, 0xF4BB, 0x85FF, 0xF4B9, 0x8600, 0xF4BD, 0x8601, 0xF4BA, 0x8604, 0xF4BF, + 0x8605, 0xF4C1, 0x8606, 0xC4AA, 0x8607, 0xC4AC, 0x8609, 0xF4C0, 0x860A, 0xC4AD, 0x860B, 0xC4AB, 0x860C, 0xF4C2, 0x8611, 0xC4A8, + 0x8617, 0xC4F4, 0x8618, 0xF5F1, 0x8619, 0xF5F7, 0x861A, 0xC4F6, 0x861B, 0xF4BC, 0x861C, 0xF5F6, 0x861E, 0xF5FD, 0x861F, 0xF5F4, + 0x8620, 0xF5FB, 0x8621, 0xF5FA, 0x8622, 0xF4B8, 0x8623, 0xF5F5, 0x8624, 0xF0B6, 0x8625, 0xF5FE, 0x8626, 0xF5F3, 0x8627, 0xF5F8, + 0x8629, 0xF5FC, 0x862A, 0xF5F2, 0x862C, 0xF74A, 0x862D, 0xC4F5, 0x862E, 0xF5F9, 0x8631, 0xF7F4, 0x8632, 0xF74B, 0x8633, 0xF749, + 0x8634, 0xF747, 0x8635, 0xF748, 0x8636, 0xF74C, 0x8638, 0xC5D9, 0x8639, 0xF7F2, 0x863A, 0xF7F0, 0x863B, 0xF7F5, 0x863C, 0xF7F3, + 0x863E, 0xF7F6, 0x863F, 0xC5DA, 0x8640, 0xF7F1, 0x8643, 0xF8BC, 0x8646, 0xF945, 0x8647, 0xF946, 0x8648, 0xF947, 0x864B, 0xF9C7, + 0x864C, 0xF9BD, 0x864D, 0xCA4F, 0x864E, 0xAAEA, 0x8650, 0xAD68, 0x8652, 0xD3B8, 0x8653, 0xD3B7, 0x8654, 0xB040, 0x8655, 0xB342, + 0x8656, 0xD77C, 0x8659, 0xD77B, 0x865B, 0xB5EA, 0x865C, 0xB8B8, 0x865E, 0xB8B7, 0x865F, 0xB8B9, 0x8661, 0xE3D4, 0x8662, 0xE77E, + 0x8663, 0xEB58, 0x8664, 0xEB5A, 0x8665, 0xEB59, 0x8667, 0xC1AB, 0x8668, 0xEE57, 0x8669, 0xF0BA, 0x866A, 0xF9A5, 0x866B, 0xA6E4, + 0x866D, 0xCDC9, 0x866E, 0xCDCA, 0x866F, 0xCDC8, 0x8670, 0xCDC7, 0x8671, 0xAAEB, 0x8673, 0xD0A9, 0x8674, 0xD0A7, 0x8677, 0xD0A6, + 0x8679, 0xAD69, 0x867A, 0xAD6B, 0x867B, 0xAD6A, 0x867C, 0xD0A8, 0x8685, 0xD3C4, 0x8686, 0xD3C1, 0x8687, 0xD3BF, 0x868A, 0xB041, + 0x868B, 0xD3C2, 0x868C, 0xB046, 0x868D, 0xD3BC, 0x868E, 0xD3CB, 0x8690, 0xD3CD, 0x8691, 0xD3BD, 0x8693, 0xB043, 0x8694, 0xD3CE, + 0x8695, 0xD3C9, 0x8696, 0xD3BB, 0x8697, 0xD3C0, 0x8698, 0xD3CA, 0x8699, 0xD3C6, 0x869A, 0xD3C3, 0x869C, 0xB048, 0x869D, 0xD3CC, + 0x869E, 0xD3BE, 0x86A1, 0xD3C7, 0x86A2, 0xD3B9, 0x86A3, 0xB047, 0x86A4, 0xB044, 0x86A5, 0xD3C5, 0x86A7, 0xD3C8, 0x86A8, 0xD3BA, + 0x86A9, 0xB045, 0x86AA, 0xB042, 0x86AF, 0xB34C, 0x86B0, 0xD7A5, 0x86B1, 0xB34B, 0x86B3, 0xD7A8, 0x86B4, 0xD7AB, 0x86B5, 0xB348, + 0x86B6, 0xB346, 0x86B7, 0xD77E, 0x86B8, 0xD7A9, 0x86B9, 0xD7A7, 0x86BA, 0xD7A4, 0x86BB, 0xD7AC, 0x86BC, 0xD7AD, 0x86BD, 0xD7AF, + 0x86BE, 0xD7B0, 0x86BF, 0xD77D, 0x86C0, 0xB345, 0x86C1, 0xD7A2, 0x86C2, 0xD7A1, 0x86C3, 0xD7AE, 0x86C4, 0xB347, 0x86C5, 0xD7A3, + 0x86C6, 0xB349, 0x86C7, 0xB344, 0x86C8, 0xD7A6, 0x86C9, 0xB34D, 0x86CB, 0xB34A, 0x86CC, 0xD7AA, 0x86D0, 0xB5F1, 0x86D1, 0xDBBF, + 0x86D3, 0xDBB4, 0x86D4, 0xB5EE, 0x86D6, 0xDFE7, 0x86D7, 0xDBBD, 0x86D8, 0xDBB1, 0x86D9, 0xB5EC, 0x86DA, 0xDBB6, 0x86DB, 0xB5EF, + 0x86DC, 0xDBBA, 0x86DD, 0xDBB8, 0x86DE, 0xB5F2, 0x86DF, 0xB5EB, 0x86E2, 0xDBB2, 0x86E3, 0xDBB5, 0x86E4, 0xB5F0, 0x86E6, 0xDBB3, + 0x86E8, 0xDBBE, 0x86E9, 0xDBBC, 0x86EA, 0xDBB7, 0x86EB, 0xDBB9, 0x86EC, 0xDBBB, 0x86ED, 0xB5ED, 0x86F5, 0xDFE8, 0x86F6, 0xDFEE, + 0x86F7, 0xDFE4, 0x86F8, 0xDFEA, 0x86F9, 0xB8BA, 0x86FA, 0xDFE6, 0x86FB, 0xB8C0, 0x86FE, 0xB8BF, 0x8700, 0xB8BE, 0x8701, 0xDFED, + 0x8702, 0xB8C1, 0x8703, 0xB8C2, 0x8704, 0xDFE3, 0x8705, 0xDFF0, 0x8706, 0xB8C3, 0x8707, 0xB8BD, 0x8708, 0xB8BC, 0x8709, 0xDFEC, + 0x870A, 0xB8C4, 0x870B, 0xDFE2, 0x870C, 0xDFE5, 0x870D, 0xDFEF, 0x870E, 0xDFEB, 0x8711, 0xE3F4, 0x8712, 0xE3E9, 0x8713, 0xB8BB, + 0x8718, 0xBB6A, 0x8719, 0xE3DD, 0x871A, 0xE3F2, 0x871B, 0xE3DE, 0x871C, 0xBB65, 0x871E, 0xE3DB, 0x8720, 0xE3E4, 0x8721, 0xE3DC, + 0x8722, 0xBB67, 0x8723, 0xE3D6, 0x8724, 0xE3F1, 0x8725, 0xBB68, 0x8726, 0xE3EE, 0x8727, 0xE3EF, 0x8728, 0xE3D7, 0x8729, 0xBB6D, + 0x872A, 0xE3E6, 0x872C, 0xE3E0, 0x872D, 0xE3E7, 0x872E, 0xE3DA, 0x8730, 0xE3F3, 0x8731, 0xE3EB, 0x8732, 0xE3E5, 0x8733, 0xE3D5, + 0x8734, 0xBB69, 0x8735, 0xE3EC, 0x8737, 0xBB6C, 0x8738, 0xE3F0, 0x873A, 0xE3EA, 0x873B, 0xBB66, 0x873C, 0xE3E8, 0x873E, 0xE3E2, + 0x873F, 0xBB64, 0x8740, 0xE3D9, 0x8741, 0xE3E1, 0x8742, 0xE3ED, 0x8743, 0xE3DF, 0x8746, 0xE3E3, 0x874C, 0xBDC1, 0x874D, 0xDFE9, + 0x874E, 0xE7B2, 0x874F, 0xE7BB, 0x8750, 0xE7B1, 0x8751, 0xE7AD, 0x8752, 0xE7AA, 0x8753, 0xBDC2, 0x8754, 0xE7A8, 0x8755, 0xBB6B, + 0x8756, 0xE7A1, 0x8757, 0xBDC0, 0x8758, 0xE7A7, 0x8759, 0xBDBF, 0x875A, 0xE7AC, 0x875B, 0xE7A9, 0x875C, 0xE7B9, 0x875D, 0xE7B4, + 0x875E, 0xE7AE, 0x875F, 0xE7B3, 0x8760, 0xBDBB, 0x8761, 0xE7AB, 0x8762, 0xE7BE, 0x8763, 0xE7A2, 0x8764, 0xE7A3, 0x8765, 0xE7BA, + 0x8766, 0xBDBC, 0x8767, 0xE7BF, 0x8768, 0xBDBE, 0x8769, 0xE7C0, 0x876A, 0xE7B0, 0x876B, 0xE3D8, 0x876C, 0xE7B6, 0x876D, 0xE7AF, + 0x876E, 0xE7B8, 0x876F, 0xE7B5, 0x8773, 0xE7A6, 0x8774, 0xBDB9, 0x8775, 0xE7BD, 0x8776, 0xBDBA, 0x8777, 0xE7A4, 0x8778, 0xBDBD, + 0x8779, 0xEB64, 0x877A, 0xE7B7, 0x877B, 0xE7BC, 0x8781, 0xEB61, 0x8782, 0xBDB8, 0x8783, 0xBFC0, 0x8784, 0xEB6B, 0x8785, 0xEB67, + 0x8787, 0xEB65, 0x8788, 0xEB60, 0x8789, 0xEB6F, 0x878D, 0xBFC4, 0x878F, 0xEB5C, 0x8790, 0xEB68, 0x8791, 0xEB69, 0x8792, 0xEB5F, + 0x8793, 0xEB5E, 0x8794, 0xEB6C, 0x8796, 0xEB62, 0x8797, 0xEB5D, 0x8798, 0xEB63, 0x879A, 0xEB6E, 0x879B, 0xEB5B, 0x879C, 0xEB6D, + 0x879D, 0xEB6A, 0x879E, 0xBFC2, 0x879F, 0xBFC1, 0x87A2, 0xBFC3, 0x87A3, 0xEB66, 0x87A4, 0xF0CB, 0x87AA, 0xEE59, 0x87AB, 0xC1B1, + 0x87AC, 0xEE5D, 0x87AD, 0xEE5A, 0x87AE, 0xEE61, 0x87AF, 0xEE67, 0x87B0, 0xEE5C, 0x87B2, 0xEE70, 0x87B3, 0xC1AE, 0x87B4, 0xEE6A, + 0x87B5, 0xEE5F, 0x87B6, 0xEE6B, 0x87B7, 0xEE66, 0x87B8, 0xEE6D, 0x87B9, 0xEE5E, 0x87BA, 0xC1B3, 0x87BB, 0xC1B2, 0x87BC, 0xEE60, + 0x87BD, 0xEE6E, 0x87BE, 0xEE58, 0x87BF, 0xEE6C, 0x87C0, 0xC1AC, 0x87C2, 0xEE64, 0x87C3, 0xEE63, 0x87C4, 0xEE68, 0x87C5, 0xEE5B, + 0x87C6, 0xC1B0, 0x87C8, 0xC1B4, 0x87C9, 0xEE62, 0x87CA, 0xEE69, 0x87CB, 0xC1B5, 0x87CC, 0xEE65, 0x87D1, 0xC1AD, 0x87D2, 0xC1AF, + 0x87D3, 0xF0C7, 0x87D4, 0xF0C5, 0x87D7, 0xF0CC, 0x87D8, 0xF0C9, 0x87D9, 0xF0CD, 0x87DB, 0xF0BE, 0x87DC, 0xF0C6, 0x87DD, 0xF0D1, + 0x87DE, 0xEE6F, 0x87DF, 0xF0C2, 0x87E0, 0xC2CF, 0x87E1, 0xE7A5, 0x87E2, 0xF0BD, 0x87E3, 0xF0CA, 0x87E4, 0xF0C4, 0x87E5, 0xF0C1, + 0x87E6, 0xF0BC, 0x87E7, 0xF0BB, 0x87E8, 0xF0D0, 0x87EA, 0xF0C0, 0x87EB, 0xF0BF, 0x87EC, 0xC2CD, 0x87ED, 0xF0C8, 0x87EF, 0xC2CC, + 0x87F2, 0xC2CE, 0x87F3, 0xF0C3, 0x87F4, 0xF0CF, 0x87F6, 0xF2DE, 0x87F7, 0xF2DF, 0x87F9, 0xC3C9, 0x87FA, 0xF2DC, 0x87FB, 0xC3C6, + 0x87FC, 0xF2E4, 0x87FE, 0xC3CA, 0x87FF, 0xF2E6, 0x8800, 0xF2DB, 0x8801, 0xF0CE, 0x8802, 0xF2E8, 0x8803, 0xF2DD, 0x8805, 0xC3C7, + 0x8806, 0xF2E3, 0x8808, 0xF2E5, 0x8809, 0xF2E0, 0x880A, 0xF2E7, 0x880B, 0xF2E2, 0x880C, 0xF2E1, 0x880D, 0xC3C8, 0x8810, 0xF4C5, + 0x8811, 0xF4C6, 0x8813, 0xF4C8, 0x8814, 0xC4AE, 0x8815, 0xC4AF, 0x8816, 0xF4C9, 0x8817, 0xF4C7, 0x8819, 0xF4C4, 0x881B, 0xF642, + 0x881C, 0xF645, 0x881D, 0xF641, 0x881F, 0xC4FA, 0x8820, 0xF643, 0x8821, 0xC4F9, 0x8822, 0xC4F8, 0x8823, 0xC4F7, 0x8824, 0xF644, + 0x8825, 0xF751, 0x8826, 0xF74F, 0x8828, 0xF74E, 0x8829, 0xF640, 0x882A, 0xF750, 0x882B, 0xF646, 0x882C, 0xF74D, 0x882E, 0xF7F9, + 0x882F, 0xF7D7, 0x8830, 0xF7F7, 0x8831, 0xC5DB, 0x8832, 0xF7F8, 0x8833, 0xF7FA, 0x8835, 0xF8BF, 0x8836, 0xC5FA, 0x8837, 0xF8BE, + 0x8838, 0xF8BD, 0x8839, 0xC5FB, 0x883B, 0xC65A, 0x883C, 0xF96E, 0x883D, 0xF9A7, 0x883E, 0xF9A6, 0x883F, 0xF9A8, 0x8840, 0xA6E5, + 0x8841, 0xD0AA, 0x8843, 0xD3CF, 0x8844, 0xD3D0, 0x8848, 0xDBC0, 0x884A, 0xF647, 0x884B, 0xF8C0, 0x884C, 0xA6E6, 0x884D, 0xAD6C, + 0x884E, 0xD0AB, 0x8852, 0xD7B1, 0x8853, 0xB34E, 0x8855, 0xDBC2, 0x8856, 0xDBC1, 0x8857, 0xB5F3, 0x8859, 0xB8C5, 0x885A, 0xE7C1, + 0x885B, 0xBDC3, 0x885D, 0xBDC4, 0x8861, 0xBFC5, 0x8862, 0xC5FC, 0x8863, 0xA6E7, 0x8867, 0xD0AC, 0x8868, 0xAAED, 0x8869, 0xD0AE, + 0x886A, 0xD0AD, 0x886B, 0xAD6D, 0x886D, 0xD3D1, 0x886F, 0xD3D8, 0x8870, 0xB049, 0x8871, 0xD3D6, 0x8872, 0xD3D4, 0x8874, 0xD3DB, + 0x8875, 0xD3D2, 0x8876, 0xD3D3, 0x8877, 0xB04A, 0x8879, 0xB04E, 0x887C, 0xD3DC, 0x887D, 0xB04D, 0x887E, 0xD3DA, 0x887F, 0xD3D7, + 0x8880, 0xD3D5, 0x8881, 0xB04B, 0x8882, 0xB04C, 0x8883, 0xD3D9, 0x8888, 0xB350, 0x8889, 0xD7B2, 0x888B, 0xB355, 0x888C, 0xD7C2, + 0x888D, 0xB354, 0x888E, 0xD7C4, 0x8891, 0xD7B8, 0x8892, 0xB352, 0x8893, 0xD7C3, 0x8895, 0xD7B3, 0x8896, 0xB353, 0x8897, 0xD7BF, + 0x8898, 0xD7BB, 0x8899, 0xD7BD, 0x889A, 0xD7B7, 0x889B, 0xD7BE, 0x889E, 0xB34F, 0x889F, 0xD7BA, 0x88A1, 0xD7B9, 0x88A2, 0xD7B5, + 0x88A4, 0xD7C0, 0x88A7, 0xD7BC, 0x88A8, 0xD7B4, 0x88AA, 0xD7B6, 0x88AB, 0xB351, 0x88AC, 0xD7C1, 0x88B1, 0xB5F6, 0x88B2, 0xDBCD, + 0x88B6, 0xDBC9, 0x88B7, 0xDBCB, 0x88B8, 0xDBC6, 0x88B9, 0xDBC5, 0x88BA, 0xDBC3, 0x88BC, 0xDBCA, 0x88BD, 0xDBCC, 0x88BE, 0xDBC8, + 0x88C0, 0xDBC7, 0x88C1, 0xB5F4, 0x88C2, 0xB5F5, 0x88C9, 0xDBCF, 0x88CA, 0xB8CD, 0x88CB, 0xDFF2, 0x88CC, 0xDFF8, 0x88CD, 0xDFF3, + 0x88CE, 0xDFF4, 0x88CF, 0xF9D8, 0x88D0, 0xDFF9, 0x88D2, 0xB8CF, 0x88D4, 0xB8C7, 0x88D5, 0xB8CE, 0x88D6, 0xDFF1, 0x88D7, 0xDBC4, + 0x88D8, 0xB8CA, 0x88D9, 0xB8C8, 0x88DA, 0xDFF7, 0x88DB, 0xDFF6, 0x88DC, 0xB8C9, 0x88DD, 0xB8CB, 0x88DE, 0xDFF5, 0x88DF, 0xB8C6, + 0x88E1, 0xB8CC, 0x88E7, 0xE3F6, 0x88E8, 0xBB74, 0x88EB, 0xE442, 0x88EC, 0xE441, 0x88EE, 0xE3FB, 0x88EF, 0xBB76, 0x88F0, 0xE440, + 0x88F1, 0xE3F7, 0x88F2, 0xE3F8, 0x88F3, 0xBB6E, 0x88F4, 0xBB70, 0x88F6, 0xE3FD, 0x88F7, 0xE3F5, 0x88F8, 0xBB72, 0x88F9, 0xBB71, + 0x88FA, 0xE3F9, 0x88FB, 0xE3FE, 0x88FC, 0xE3FC, 0x88FD, 0xBB73, 0x88FE, 0xE3FA, 0x8901, 0xDBCE, 0x8902, 0xBB6F, 0x8905, 0xE7C2, + 0x8906, 0xE7C9, 0x8907, 0xBDC6, 0x8909, 0xE7CD, 0x890A, 0xBDCA, 0x890B, 0xE7C5, 0x890C, 0xE7C3, 0x890E, 0xE7CC, 0x8910, 0xBDC5, + 0x8911, 0xE7CB, 0x8912, 0xBDC7, 0x8913, 0xBDC8, 0x8914, 0xE7C4, 0x8915, 0xBDC9, 0x8916, 0xE7CA, 0x8917, 0xE7C6, 0x8918, 0xE7C7, + 0x8919, 0xE7C8, 0x891A, 0xBB75, 0x891E, 0xEB70, 0x891F, 0xEB7C, 0x8921, 0xBFCA, 0x8922, 0xEB77, 0x8923, 0xEB79, 0x8925, 0xBFC8, + 0x8926, 0xEB71, 0x8927, 0xEB75, 0x8929, 0xEB78, 0x892A, 0xBFC6, 0x892B, 0xBFC9, 0x892C, 0xEB7B, 0x892D, 0xEB73, 0x892E, 0xEB74, + 0x892F, 0xEB7A, 0x8930, 0xEB72, 0x8931, 0xEB76, 0x8932, 0xBFC7, 0x8933, 0xEE72, 0x8935, 0xEE71, 0x8936, 0xC1B7, 0x8937, 0xEE77, + 0x8938, 0xC1B9, 0x893B, 0xC1B6, 0x893C, 0xEE73, 0x893D, 0xC1BA, 0x893E, 0xEE74, 0x8941, 0xEE75, 0x8942, 0xEE78, 0x8944, 0xC1B8, + 0x8946, 0xF0D6, 0x8949, 0xF0D9, 0x894B, 0xF0D3, 0x894C, 0xF0D5, 0x894F, 0xF0D4, 0x8950, 0xF0D7, 0x8951, 0xF0D8, 0x8952, 0xEE76, + 0x8953, 0xF0D2, 0x8956, 0xC3CD, 0x8957, 0xF2EC, 0x8958, 0xF2EF, 0x8959, 0xF2F1, 0x895A, 0xF2EA, 0x895B, 0xF2EB, 0x895C, 0xF2EE, + 0x895D, 0xF2F0, 0x895E, 0xC3CE, 0x895F, 0xC3CC, 0x8960, 0xC3CB, 0x8961, 0xF2ED, 0x8962, 0xF2E9, 0x8963, 0xF4CA, 0x8964, 0xC4B0, + 0x8966, 0xF4CB, 0x8969, 0xF649, 0x896A, 0xC4FB, 0x896B, 0xF64B, 0x896C, 0xC4FC, 0x896D, 0xF648, 0x896E, 0xF64A, 0x896F, 0xC5A8, + 0x8971, 0xF752, 0x8972, 0xC5A7, 0x8973, 0xF7FD, 0x8974, 0xF7FC, 0x8976, 0xF7FB, 0x8979, 0xF948, 0x897A, 0xF949, 0x897B, 0xF94B, + 0x897C, 0xF94A, 0x897E, 0xCA50, 0x897F, 0xA6E8, 0x8981, 0xAD6E, 0x8982, 0xD7C5, 0x8983, 0xB5F7, 0x8985, 0xDFFA, 0x8986, 0xC2D0, + 0x8988, 0xF2F2, 0x898B, 0xA8A3, 0x898F, 0xB357, 0x8993, 0xB356, 0x8995, 0xDBD0, 0x8996, 0xB5F8, 0x8997, 0xDBD2, 0x8998, 0xDBD1, + 0x899B, 0xDFFB, 0x899C, 0xB8D0, 0x899D, 0xE443, 0x899E, 0xE446, 0x899F, 0xE445, 0x89A1, 0xE444, 0x89A2, 0xE7CE, 0x89A3, 0xE7D0, + 0x89A4, 0xE7CF, 0x89A6, 0xBFCC, 0x89AA, 0xBFCB, 0x89AC, 0xC1BB, 0x89AD, 0xEE79, 0x89AE, 0xEE7B, 0x89AF, 0xEE7A, 0x89B2, 0xC2D1, + 0x89B6, 0xF2F4, 0x89B7, 0xF2F3, 0x89B9, 0xF4CC, 0x89BA, 0xC4B1, 0x89BD, 0xC4FD, 0x89BE, 0xF754, 0x89BF, 0xF753, 0x89C0, 0xC65B, + 0x89D2, 0xA8A4, 0x89D3, 0xD0AF, 0x89D4, 0xAD6F, 0x89D5, 0xD7C8, 0x89D6, 0xD7C6, 0x89D9, 0xD7C7, 0x89DA, 0xDBD4, 0x89DB, 0xDBD5, + 0x89DC, 0xE043, 0x89DD, 0xDBD3, 0x89DF, 0xDFFC, 0x89E0, 0xE041, 0x89E1, 0xE040, 0x89E2, 0xE042, 0x89E3, 0xB8D1, 0x89E4, 0xDFFE, + 0x89E5, 0xDFFD, 0x89E6, 0xE044, 0x89E8, 0xE449, 0x89E9, 0xE447, 0x89EB, 0xE448, 0x89EC, 0xE7D3, 0x89ED, 0xE7D1, 0x89F0, 0xE7D2, + 0x89F1, 0xEB7D, 0x89F2, 0xEE7C, 0x89F3, 0xEE7D, 0x89F4, 0xC2D2, 0x89F6, 0xF2F5, 0x89F7, 0xF4CD, 0x89F8, 0xC4B2, 0x89FA, 0xF64C, + 0x89FB, 0xF755, 0x89FC, 0xC5A9, 0x89FE, 0xF7FE, 0x89FF, 0xF94C, 0x8A00, 0xA8A5, 0x8A02, 0xAD71, 0x8A03, 0xAD72, 0x8A04, 0xD0B0, + 0x8A07, 0xD0B1, 0x8A08, 0xAD70, 0x8A0A, 0xB054, 0x8A0C, 0xB052, 0x8A0E, 0xB051, 0x8A0F, 0xB058, 0x8A10, 0xB050, 0x8A11, 0xB059, + 0x8A12, 0xD3DD, 0x8A13, 0xB056, 0x8A15, 0xB053, 0x8A16, 0xB057, 0x8A17, 0xB055, 0x8A18, 0xB04F, 0x8A1B, 0xB35F, 0x8A1D, 0xB359, + 0x8A1E, 0xD7CC, 0x8A1F, 0xB35E, 0x8A22, 0xB360, 0x8A23, 0xB35A, 0x8A25, 0xB35B, 0x8A27, 0xD7CA, 0x8A2A, 0xB358, 0x8A2C, 0xD7CB, + 0x8A2D, 0xB35D, 0x8A30, 0xD7C9, 0x8A31, 0xB35C, 0x8A34, 0xB644, 0x8A36, 0xB646, 0x8A39, 0xDBD8, 0x8A3A, 0xB645, 0x8A3B, 0xB5F9, + 0x8A3C, 0xB5FD, 0x8A3E, 0xB8E4, 0x8A3F, 0xE049, 0x8A40, 0xDBDA, 0x8A41, 0xB5FE, 0x8A44, 0xDBDD, 0x8A45, 0xDBDE, 0x8A46, 0xB643, + 0x8A48, 0xDBE0, 0x8A4A, 0xDBE2, 0x8A4C, 0xDBE3, 0x8A4D, 0xDBD7, 0x8A4E, 0xDBD6, 0x8A4F, 0xDBE4, 0x8A50, 0xB642, 0x8A51, 0xDBE1, + 0x8A52, 0xDBDF, 0x8A54, 0xB640, 0x8A55, 0xB5FB, 0x8A56, 0xB647, 0x8A57, 0xDBDB, 0x8A58, 0xDBDC, 0x8A59, 0xDBD9, 0x8A5B, 0xB641, + 0x8A5E, 0xB5FC, 0x8A60, 0xB5FA, 0x8A61, 0xE048, 0x8A62, 0xB8DF, 0x8A63, 0xB8DA, 0x8A66, 0xB8D5, 0x8A68, 0xB8E5, 0x8A69, 0xB8D6, + 0x8A6B, 0xB8D2, 0x8A6C, 0xB8E1, 0x8A6D, 0xB8DE, 0x8A6E, 0xB8E0, 0x8A70, 0xB8D7, 0x8A71, 0xB8DC, 0x8A72, 0xB8D3, 0x8A73, 0xB8D4, + 0x8A74, 0xE050, 0x8A75, 0xE04D, 0x8A76, 0xE045, 0x8A77, 0xE04A, 0x8A79, 0xB8E2, 0x8A7A, 0xE051, 0x8A7B, 0xB8E3, 0x8A7C, 0xB8D9, + 0x8A7F, 0xE047, 0x8A81, 0xE04F, 0x8A82, 0xE04B, 0x8A83, 0xE04E, 0x8A84, 0xE04C, 0x8A85, 0xB8DD, 0x8A86, 0xE046, 0x8A87, 0xB8D8, + 0x8A8B, 0xE44C, 0x8A8C, 0xBB78, 0x8A8D, 0xBB7B, 0x8A8F, 0xE44E, 0x8A91, 0xBBA5, 0x8A92, 0xE44D, 0x8A93, 0xBB7D, 0x8A95, 0xBDCF, + 0x8A96, 0xE44F, 0x8A98, 0xBBA4, 0x8A99, 0xE44B, 0x8A9A, 0xBBA6, 0x8A9E, 0xBB79, 0x8AA0, 0xB8DB, 0x8AA1, 0xBB7C, 0x8AA3, 0xBB7A, + 0x8AA4, 0xBB7E, 0x8AA5, 0xBBA2, 0x8AA6, 0xBB77, 0x8AA7, 0xBBA7, 0x8AA8, 0xBBA3, 0x8AAA, 0xBBA1, 0x8AAB, 0xE44A, 0x8AB0, 0xBDD6, + 0x8AB2, 0xBDD2, 0x8AB6, 0xBDD9, 0x8AB8, 0xE7D6, 0x8AB9, 0xBDDA, 0x8ABA, 0xE7E2, 0x8ABB, 0xE7DB, 0x8ABC, 0xBDCB, 0x8ABD, 0xE7E3, + 0x8ABE, 0xE7DD, 0x8ABF, 0xBDD5, 0x8AC0, 0xE7DE, 0x8AC2, 0xBDD4, 0x8AC3, 0xE7E1, 0x8AC4, 0xBDCE, 0x8AC5, 0xE7DF, 0x8AC6, 0xE7D5, + 0x8AC7, 0xBDCD, 0x8AC8, 0xEBAA, 0x8AC9, 0xBDD3, 0x8ACB, 0xBDD0, 0x8ACD, 0xBDD8, 0x8ACF, 0xE7D4, 0x8AD1, 0xE7D8, 0x8AD2, 0xBDCC, + 0x8AD3, 0xE7D7, 0x8AD4, 0xE7D9, 0x8AD5, 0xE7DA, 0x8AD6, 0xBDD7, 0x8AD7, 0xE7DC, 0x8AD8, 0xE7E0, 0x8AD9, 0xE7E4, 0x8ADB, 0xBDDB, + 0x8ADC, 0xBFD2, 0x8ADD, 0xEBA5, 0x8ADE, 0xEBAB, 0x8ADF, 0xEBA8, 0x8AE0, 0xEB7E, 0x8AE1, 0xEBAC, 0x8AE2, 0xEBA1, 0x8AE4, 0xEBA7, + 0x8AE6, 0xBFCD, 0x8AE7, 0xBFD3, 0x8AE8, 0xEBAD, 0x8AEB, 0xBFCF, 0x8AED, 0xBFD9, 0x8AEE, 0xBFD4, 0x8AEF, 0xEBAF, 0x8AF0, 0xEBA9, + 0x8AF1, 0xBFD0, 0x8AF2, 0xEBA2, 0x8AF3, 0xBFDA, 0x8AF4, 0xEBA3, 0x8AF5, 0xEBA4, 0x8AF6, 0xBFDB, 0x8AF7, 0xBFD8, 0x8AF8, 0xBDD1, + 0x8AFA, 0xBFCE, 0x8AFB, 0xEBB0, 0x8AFC, 0xBFDC, 0x8AFE, 0xBFD5, 0x8AFF, 0xEBAE, 0x8B00, 0xBFD1, 0x8B01, 0xBFD6, 0x8B02, 0xBFD7, + 0x8B04, 0xC1C3, 0x8B05, 0xEEA4, 0x8B06, 0xEEAD, 0x8B07, 0xEEAA, 0x8B08, 0xEEAC, 0x8B0A, 0xC1C0, 0x8B0B, 0xEEA5, 0x8B0D, 0xEEAB, + 0x8B0E, 0xC1BC, 0x8B0F, 0xEEA7, 0x8B10, 0xC1C4, 0x8B11, 0xEEA3, 0x8B12, 0xEEA8, 0x8B13, 0xEEAF, 0x8B14, 0xEBA6, 0x8B15, 0xEEA9, + 0x8B16, 0xEEA2, 0x8B17, 0xC1BD, 0x8B18, 0xEEA1, 0x8B19, 0xC1BE, 0x8B1A, 0xEEB0, 0x8B1B, 0xC1BF, 0x8B1C, 0xEEAE, 0x8B1D, 0xC1C2, + 0x8B1E, 0xEE7E, 0x8B20, 0xC1C1, 0x8B22, 0xEEA6, 0x8B23, 0xF0DC, 0x8B24, 0xF0EA, 0x8B25, 0xF0E5, 0x8B26, 0xF0E7, 0x8B27, 0xF0DB, + 0x8B28, 0xC2D3, 0x8B2A, 0xF0DA, 0x8B2B, 0xC2D6, 0x8B2C, 0xC2D5, 0x8B2E, 0xF0E9, 0x8B2F, 0xF0E1, 0x8B30, 0xF0DE, 0x8B31, 0xF0E4, + 0x8B33, 0xF0DD, 0x8B35, 0xF0DF, 0x8B36, 0xF0E8, 0x8B37, 0xF0E6, 0x8B39, 0xC2D4, 0x8B3A, 0xF0ED, 0x8B3B, 0xF0EB, 0x8B3C, 0xF0E2, + 0x8B3D, 0xF0EC, 0x8B3E, 0xF0E3, 0x8B40, 0xF2F9, 0x8B41, 0xC3CF, 0x8B42, 0xF341, 0x8B45, 0xF64F, 0x8B46, 0xC3D6, 0x8B47, 0xF0E0, + 0x8B48, 0xF2F7, 0x8B49, 0xC3D2, 0x8B4A, 0xF2F8, 0x8B4B, 0xF2FD, 0x8B4E, 0xC3D4, 0x8B4F, 0xC3D5, 0x8B50, 0xF2F6, 0x8B51, 0xF340, + 0x8B52, 0xF342, 0x8B53, 0xF2FA, 0x8B54, 0xF2FC, 0x8B55, 0xF2FE, 0x8B56, 0xF2FB, 0x8B57, 0xF343, 0x8B58, 0xC3D1, 0x8B59, 0xC3D7, + 0x8B5A, 0xC3D3, 0x8B5C, 0xC3D0, 0x8B5D, 0xF4D0, 0x8B5F, 0xC4B7, 0x8B60, 0xF4CE, 0x8B63, 0xF4D2, 0x8B65, 0xF4D3, 0x8B66, 0xC4B5, + 0x8B67, 0xF4D4, 0x8B68, 0xF4D1, 0x8B6A, 0xF4CF, 0x8B6B, 0xC4B8, 0x8B6C, 0xC4B4, 0x8B6D, 0xF4D5, 0x8B6F, 0xC4B6, 0x8B70, 0xC4B3, + 0x8B74, 0xC4FE, 0x8B77, 0xC540, 0x8B78, 0xF64E, 0x8B79, 0xF64D, 0x8B7A, 0xF650, 0x8B7B, 0xF651, 0x8B7D, 0xC541, 0x8B7E, 0xF756, + 0x8B7F, 0xF75B, 0x8B80, 0xC5AA, 0x8B82, 0xF758, 0x8B84, 0xF757, 0x8B85, 0xF75A, 0x8B86, 0xF759, 0x8B88, 0xF843, 0x8B8A, 0xC5DC, + 0x8B8B, 0xF842, 0x8B8C, 0xF840, 0x8B8E, 0xF841, 0x8B92, 0xC5FE, 0x8B93, 0xC5FD, 0x8B94, 0xF8C1, 0x8B95, 0xF8C2, 0x8B96, 0xC640, + 0x8B98, 0xF94D, 0x8B99, 0xF94E, 0x8B9A, 0xC667, 0x8B9C, 0xC66D, 0x8B9E, 0xF9A9, 0x8B9F, 0xF9C8, 0x8C37, 0xA8A6, 0x8C39, 0xD7CD, + 0x8C3B, 0xD7CE, 0x8C3C, 0xE052, 0x8C3D, 0xE450, 0x8C3E, 0xE7E5, 0x8C3F, 0xC1C6, 0x8C41, 0xC1C5, 0x8C42, 0xF0EE, 0x8C43, 0xF344, + 0x8C45, 0xF844, 0x8C46, 0xA8A7, 0x8C47, 0xD3DE, 0x8C48, 0xB05A, 0x8C49, 0xB361, 0x8C4A, 0xE054, 0x8C4B, 0xE053, 0x8C4C, 0xBDDC, + 0x8C4D, 0xE7E6, 0x8C4E, 0xBDDD, 0x8C4F, 0xEEB1, 0x8C50, 0xC2D7, 0x8C54, 0xC676, 0x8C55, 0xA8A8, 0x8C56, 0xCDCB, 0x8C57, 0xD3DF, + 0x8C5A, 0xB362, 0x8C5C, 0xD7CF, 0x8C5D, 0xD7D0, 0x8C5F, 0xDBE5, 0x8C61, 0xB648, 0x8C62, 0xB8E6, 0x8C64, 0xE056, 0x8C65, 0xE055, + 0x8C66, 0xE057, 0x8C68, 0xE451, 0x8C69, 0xE452, 0x8C6A, 0xBBA8, 0x8C6B, 0xBFDD, 0x8C6C, 0xBDDE, 0x8C6D, 0xBFDE, 0x8C6F, 0xEEB5, + 0x8C70, 0xEEB2, 0x8C71, 0xEEB4, 0x8C72, 0xEEB3, 0x8C73, 0xC1C7, 0x8C75, 0xF0EF, 0x8C76, 0xF346, 0x8C77, 0xF345, 0x8C78, 0xCBA4, + 0x8C79, 0xB05C, 0x8C7A, 0xB05B, 0x8C7B, 0xD3E0, 0x8C7D, 0xD7D1, 0x8C80, 0xDBE7, 0x8C81, 0xDBE6, 0x8C82, 0xB649, 0x8C84, 0xE059, + 0x8C85, 0xE05A, 0x8C86, 0xE058, 0x8C89, 0xB8E8, 0x8C8A, 0xB8E7, 0x8C8C, 0xBBAA, 0x8C8D, 0xBBA9, 0x8C8F, 0xE7E7, 0x8C90, 0xEBB3, + 0x8C91, 0xEBB1, 0x8C92, 0xEBB2, 0x8C93, 0xBFDF, 0x8C94, 0xEEB7, 0x8C95, 0xEEB6, 0x8C97, 0xF0F2, 0x8C98, 0xF0F1, 0x8C99, 0xF0F0, + 0x8C9A, 0xF347, 0x8C9C, 0xF9AA, 0x8C9D, 0xA8A9, 0x8C9E, 0xAD73, 0x8CA0, 0xAD74, 0x8CA1, 0xB05D, 0x8CA2, 0xB05E, 0x8CA3, 0xD3E2, + 0x8CA4, 0xD3E1, 0x8CA5, 0xD7D2, 0x8CA7, 0xB368, 0x8CA8, 0xB366, 0x8CA9, 0xB363, 0x8CAA, 0xB367, 0x8CAB, 0xB365, 0x8CAC, 0xB364, + 0x8CAF, 0xB64A, 0x8CB0, 0xDBEA, 0x8CB2, 0xB8ED, 0x8CB3, 0xB64C, 0x8CB4, 0xB651, 0x8CB5, 0xDBEC, 0x8CB6, 0xB653, 0x8CB7, 0xB652, + 0x8CB8, 0xB655, 0x8CB9, 0xDBEB, 0x8CBA, 0xDBE8, 0x8CBB, 0xB64F, 0x8CBC, 0xB64B, 0x8CBD, 0xB64D, 0x8CBE, 0xDBE9, 0x8CBF, 0xB654, + 0x8CC0, 0xB650, 0x8CC1, 0xB64E, 0x8CC2, 0xB8EF, 0x8CC3, 0xB8EE, 0x8CC4, 0xB8EC, 0x8CC5, 0xB8F0, 0x8CC7, 0xB8EA, 0x8CC8, 0xB8EB, + 0x8CCA, 0xB8E9, 0x8CCC, 0xE05B, 0x8CCF, 0xE454, 0x8CD1, 0xBBAC, 0x8CD2, 0xBBAD, 0x8CD3, 0xBBAB, 0x8CD5, 0xE453, 0x8CD7, 0xE455, + 0x8CD9, 0xE7EA, 0x8CDA, 0xE7EC, 0x8CDC, 0xBDE7, 0x8CDD, 0xE7ED, 0x8CDE, 0xBDE0, 0x8CDF, 0xE7E9, 0x8CE0, 0xBDDF, 0x8CE1, 0xBDE9, + 0x8CE2, 0xBDE5, 0x8CE3, 0xBDE6, 0x8CE4, 0xBDE2, 0x8CE5, 0xE7E8, 0x8CE6, 0xBDE1, 0x8CE7, 0xE7EE, 0x8CE8, 0xE7EB, 0x8CEA, 0xBDE8, + 0x8CEC, 0xBDE3, 0x8CED, 0xBDE4, 0x8CEE, 0xEBB5, 0x8CF0, 0xEBB7, 0x8CF1, 0xEBB6, 0x8CF3, 0xEBB8, 0x8CF4, 0xBFE0, 0x8CF5, 0xEBB4, + 0x8CF8, 0xC1CB, 0x8CF9, 0xEEB8, 0x8CFA, 0xC1C8, 0x8CFB, 0xC1CC, 0x8CFC, 0xC1CA, 0x8CFD, 0xC1C9, 0x8CFE, 0xF0F3, 0x8D00, 0xF0F6, + 0x8D02, 0xF0F5, 0x8D04, 0xF0F4, 0x8D05, 0xC2D8, 0x8D06, 0xF348, 0x8D07, 0xF349, 0x8D08, 0xC3D8, 0x8D09, 0xF34A, 0x8D0A, 0xC3D9, + 0x8D0D, 0xC4BA, 0x8D0F, 0xC4B9, 0x8D10, 0xF652, 0x8D13, 0xC542, 0x8D14, 0xF653, 0x8D15, 0xF75C, 0x8D16, 0xC5AB, 0x8D17, 0xC5AC, + 0x8D19, 0xF845, 0x8D1B, 0xC642, 0x8D64, 0xA8AA, 0x8D66, 0xB36A, 0x8D67, 0xB369, 0x8D68, 0xE05C, 0x8D69, 0xE05D, 0x8D6B, 0xBBAE, + 0x8D6C, 0xEBB9, 0x8D6D, 0xBDEA, 0x8D6E, 0xEBBA, 0x8D6F, 0xEEB9, 0x8D70, 0xA8AB, 0x8D72, 0xD0B2, 0x8D73, 0xAD76, 0x8D74, 0xAD75, + 0x8D76, 0xD3E3, 0x8D77, 0xB05F, 0x8D78, 0xD3E4, 0x8D79, 0xD7D5, 0x8D7B, 0xD7D4, 0x8D7D, 0xD7D3, 0x8D80, 0xDBEE, 0x8D81, 0xB658, + 0x8D84, 0xDBED, 0x8D85, 0xB657, 0x8D89, 0xDBEF, 0x8D8A, 0xB656, 0x8D8C, 0xE05F, 0x8D8D, 0xE062, 0x8D8E, 0xE060, 0x8D8F, 0xE061, + 0x8D90, 0xE065, 0x8D91, 0xE05E, 0x8D92, 0xE066, 0x8D93, 0xE063, 0x8D94, 0xE064, 0x8D95, 0xBBB0, 0x8D96, 0xE456, 0x8D99, 0xBBAF, + 0x8D9B, 0xE7F2, 0x8D9C, 0xE7F0, 0x8D9F, 0xBDEB, 0x8DA0, 0xE7EF, 0x8DA1, 0xE7F1, 0x8DA3, 0xBDEC, 0x8DA5, 0xEBBB, 0x8DA7, 0xEBBC, + 0x8DA8, 0xC1CD, 0x8DAA, 0xF34C, 0x8DAB, 0xF34E, 0x8DAC, 0xF34B, 0x8DAD, 0xF34D, 0x8DAE, 0xF4D6, 0x8DAF, 0xF654, 0x8DB2, 0xF96F, + 0x8DB3, 0xA8AC, 0x8DB4, 0xAD77, 0x8DB5, 0xD3E5, 0x8DB6, 0xD3E7, 0x8DB7, 0xD3E6, 0x8DB9, 0xD7D8, 0x8DBA, 0xB36C, 0x8DBC, 0xD7D6, + 0x8DBE, 0xB36B, 0x8DBF, 0xD7D9, 0x8DC1, 0xD7DA, 0x8DC2, 0xD7D7, 0x8DC5, 0xDBFB, 0x8DC6, 0xB660, 0x8DC7, 0xDBF3, 0x8DC8, 0xDBF9, + 0x8DCB, 0xB65B, 0x8DCC, 0xB65E, 0x8DCD, 0xDBF2, 0x8DCE, 0xB659, 0x8DCF, 0xDBF6, 0x8DD0, 0xE06C, 0x8DD1, 0xB65D, 0x8DD3, 0xDBF1, + 0x8DD5, 0xDBF7, 0x8DD6, 0xDBF4, 0x8DD7, 0xDBFA, 0x8DD8, 0xDBF0, 0x8DD9, 0xDBF8, 0x8DDA, 0xB65C, 0x8DDB, 0xB65F, 0x8DDC, 0xDBF5, + 0x8DDD, 0xB65A, 0x8DDF, 0xB8F2, 0x8DE0, 0xE068, 0x8DE1, 0xB8F1, 0x8DE2, 0xE06F, 0x8DE3, 0xE06E, 0x8DE4, 0xB8F8, 0x8DE6, 0xB8F9, + 0x8DE7, 0xE070, 0x8DE8, 0xB8F3, 0x8DE9, 0xE06D, 0x8DEA, 0xB8F7, 0x8DEB, 0xE072, 0x8DEC, 0xE069, 0x8DEE, 0xE06B, 0x8DEF, 0xB8F4, + 0x8DF0, 0xE067, 0x8DF1, 0xE06A, 0x8DF2, 0xE071, 0x8DF3, 0xB8F5, 0x8DF4, 0xE073, 0x8DFA, 0xB8F6, 0x8DFC, 0xBBB1, 0x8DFD, 0xE45B, + 0x8DFE, 0xE461, 0x8DFF, 0xE459, 0x8E00, 0xE462, 0x8E02, 0xE458, 0x8E03, 0xE45D, 0x8E04, 0xE463, 0x8E05, 0xE460, 0x8E06, 0xE45F, + 0x8E07, 0xE45E, 0x8E09, 0xE457, 0x8E0A, 0xE45C, 0x8E0D, 0xE45A, 0x8E0F, 0xBDF1, 0x8E10, 0xBDEE, 0x8E11, 0xE7FB, 0x8E12, 0xE841, + 0x8E13, 0xE843, 0x8E14, 0xE840, 0x8E15, 0xE7F8, 0x8E16, 0xE7FA, 0x8E17, 0xE845, 0x8E18, 0xE842, 0x8E19, 0xE7FC, 0x8E1A, 0xE846, + 0x8E1B, 0xE7F9, 0x8E1C, 0xE844, 0x8E1D, 0xBDEF, 0x8E1E, 0xBDF5, 0x8E1F, 0xBDF3, 0x8E20, 0xE7F3, 0x8E21, 0xBDF4, 0x8E22, 0xBDF0, + 0x8E23, 0xE7F4, 0x8E24, 0xE7F6, 0x8E25, 0xE7F5, 0x8E26, 0xE7FD, 0x8E27, 0xE7FE, 0x8E29, 0xBDF2, 0x8E2B, 0xBDED, 0x8E2E, 0xE7F7, + 0x8E30, 0xEBC6, 0x8E31, 0xBFE2, 0x8E33, 0xEBBD, 0x8E34, 0xBFE3, 0x8E35, 0xBFE6, 0x8E36, 0xEBC2, 0x8E38, 0xEBBF, 0x8E39, 0xBFE5, + 0x8E3C, 0xEBC3, 0x8E3D, 0xEBC4, 0x8E3E, 0xEBBE, 0x8E3F, 0xEBC7, 0x8E40, 0xEBC0, 0x8E41, 0xEBC5, 0x8E42, 0xBFE4, 0x8E44, 0xBFE1, + 0x8E45, 0xEBC1, 0x8E47, 0xEEBF, 0x8E48, 0xC1D0, 0x8E49, 0xC1CE, 0x8E4A, 0xC1D1, 0x8E4B, 0xC1CF, 0x8E4C, 0xEEBE, 0x8E4D, 0xEEBB, + 0x8E4E, 0xEEBA, 0x8E50, 0xEEBD, 0x8E53, 0xEEBC, 0x8E54, 0xF145, 0x8E55, 0xC2DE, 0x8E56, 0xF0FB, 0x8E57, 0xF0FA, 0x8E59, 0xC2D9, + 0x8E5A, 0xF141, 0x8E5B, 0xF140, 0x8E5C, 0xF0F7, 0x8E5D, 0xF143, 0x8E5E, 0xF0FC, 0x8E5F, 0xC2DD, 0x8E60, 0xF0F9, 0x8E61, 0xF142, + 0x8E62, 0xF0F8, 0x8E63, 0xC2DA, 0x8E64, 0xC2DC, 0x8E65, 0xF0FD, 0x8E66, 0xC2DB, 0x8E67, 0xF0FE, 0x8E69, 0xF144, 0x8E6A, 0xF352, + 0x8E6C, 0xC3DE, 0x8E6D, 0xF34F, 0x8E6F, 0xF353, 0x8E72, 0xC3DB, 0x8E73, 0xF351, 0x8E74, 0xC3E0, 0x8E76, 0xC3DD, 0x8E78, 0xF350, + 0x8E7A, 0xC3DF, 0x8E7B, 0xF354, 0x8E7C, 0xC3DA, 0x8E81, 0xC4BC, 0x8E82, 0xC4BE, 0x8E84, 0xF4D9, 0x8E85, 0xC4BD, 0x8E86, 0xF4D7, + 0x8E87, 0xC3DC, 0x8E88, 0xF4D8, 0x8E89, 0xC4BB, 0x8E8A, 0xC543, 0x8E8B, 0xC545, 0x8E8C, 0xF656, 0x8E8D, 0xC544, 0x8E8E, 0xF655, + 0x8E90, 0xF761, 0x8E91, 0xC5AD, 0x8E92, 0xF760, 0x8E93, 0xC5AE, 0x8E94, 0xF75E, 0x8E95, 0xF75D, 0x8E96, 0xF762, 0x8E97, 0xF763, + 0x8E98, 0xF846, 0x8E9A, 0xF75F, 0x8E9D, 0xF8C6, 0x8E9E, 0xF8C3, 0x8E9F, 0xF8C4, 0x8EA0, 0xF8C5, 0x8EA1, 0xC65C, 0x8EA3, 0xF951, + 0x8EA4, 0xF950, 0x8EA5, 0xF94F, 0x8EA6, 0xF970, 0x8EA8, 0xF9BE, 0x8EA9, 0xF9AB, 0x8EAA, 0xC66E, 0x8EAB, 0xA8AD, 0x8EAC, 0xB060, + 0x8EB2, 0xB8FA, 0x8EBA, 0xBDF6, 0x8EBD, 0xEBC8, 0x8EC0, 0xC2DF, 0x8EC2, 0xF355, 0x8EC9, 0xF9AC, 0x8ECA, 0xA8AE, 0x8ECB, 0xAAEE, + 0x8ECC, 0xAD79, 0x8ECD, 0xAD78, 0x8ECF, 0xB063, 0x8ED1, 0xD3E8, 0x8ED2, 0xB061, 0x8ED3, 0xD3E9, 0x8ED4, 0xB062, 0x8ED7, 0xD7DF, + 0x8ED8, 0xD7DB, 0x8EDB, 0xB36D, 0x8EDC, 0xD7DE, 0x8EDD, 0xD7DD, 0x8EDE, 0xD7DC, 0x8EDF, 0xB36E, 0x8EE0, 0xD7E0, 0x8EE1, 0xD7E1, + 0x8EE5, 0xDC43, 0x8EE6, 0xDC41, 0x8EE7, 0xDC45, 0x8EE8, 0xDC46, 0x8EE9, 0xDC4C, 0x8EEB, 0xDC48, 0x8EEC, 0xDC4A, 0x8EEE, 0xDC42, + 0x8EEF, 0xDBFC, 0x8EF1, 0xDC49, 0x8EF4, 0xDC4B, 0x8EF5, 0xDC44, 0x8EF6, 0xDC47, 0x8EF7, 0xDBFD, 0x8EF8, 0xB662, 0x8EF9, 0xDC40, + 0x8EFA, 0xDBFE, 0x8EFB, 0xB661, 0x8EFC, 0xB663, 0x8EFE, 0xB8FD, 0x8EFF, 0xE075, 0x8F00, 0xE077, 0x8F01, 0xE076, 0x8F02, 0xE07B, + 0x8F03, 0xB8FB, 0x8F05, 0xE078, 0x8F06, 0xE074, 0x8F07, 0xE079, 0x8F08, 0xE07A, 0x8F09, 0xB8FC, 0x8F0A, 0xB8FE, 0x8F0B, 0xE07C, + 0x8F0D, 0xE467, 0x8F0E, 0xE466, 0x8F10, 0xE464, 0x8F11, 0xE465, 0x8F12, 0xBBB3, 0x8F13, 0xBBB5, 0x8F14, 0xBBB2, 0x8F15, 0xBBB4, + 0x8F16, 0xE84D, 0x8F17, 0xE84E, 0x8F18, 0xE849, 0x8F1A, 0xE84A, 0x8F1B, 0xBDF8, 0x8F1C, 0xBDFD, 0x8F1D, 0xBDF7, 0x8F1E, 0xBDFE, + 0x8F1F, 0xBDF9, 0x8F20, 0xE84B, 0x8F23, 0xE84C, 0x8F24, 0xE848, 0x8F25, 0xBE40, 0x8F26, 0xBDFB, 0x8F29, 0xBDFA, 0x8F2A, 0xBDFC, + 0x8F2C, 0xE847, 0x8F2E, 0xEBCA, 0x8F2F, 0xBFE8, 0x8F32, 0xEBCC, 0x8F33, 0xBFEA, 0x8F34, 0xEBCF, 0x8F35, 0xEBCB, 0x8F36, 0xEBC9, + 0x8F37, 0xEBCE, 0x8F38, 0xBFE9, 0x8F39, 0xEBCD, 0x8F3B, 0xBFE7, 0x8F3E, 0xC1D3, 0x8F3F, 0xC1D6, 0x8F40, 0xEEC1, 0x8F42, 0xC1D4, + 0x8F43, 0xEEC0, 0x8F44, 0xC1D2, 0x8F45, 0xC1D5, 0x8F46, 0xF146, 0x8F47, 0xF147, 0x8F48, 0xF148, 0x8F49, 0xC2E0, 0x8F4B, 0xF149, + 0x8F4D, 0xC2E1, 0x8F4E, 0xC3E2, 0x8F4F, 0xF358, 0x8F50, 0xF359, 0x8F51, 0xF357, 0x8F52, 0xF356, 0x8F53, 0xF35A, 0x8F54, 0xC3E1, + 0x8F55, 0xF4DD, 0x8F56, 0xF4DB, 0x8F57, 0xF4DC, 0x8F58, 0xF4DE, 0x8F59, 0xF4DA, 0x8F5A, 0xF4DF, 0x8F5B, 0xF658, 0x8F5D, 0xF659, + 0x8F5E, 0xF657, 0x8F5F, 0xC546, 0x8F60, 0xF764, 0x8F61, 0xC5AF, 0x8F62, 0xF765, 0x8F63, 0xF848, 0x8F64, 0xF847, 0x8F9B, 0xA8AF, + 0x8F9C, 0xB664, 0x8F9F, 0xB940, 0x8FA3, 0xBBB6, 0x8FA6, 0xBFEC, 0x8FA8, 0xBFEB, 0x8FAD, 0xC3E3, 0x8FAE, 0xC47C, 0x8FAF, 0xC547, + 0x8FB0, 0xA8B0, 0x8FB1, 0xB064, 0x8FB2, 0xB941, 0x8FB4, 0xF35B, 0x8FBF, 0xCBA6, 0x8FC2, 0xA8B1, 0x8FC4, 0xA8B4, 0x8FC5, 0xA8B3, + 0x8FC6, 0xA8B2, 0x8FC9, 0xCBA5, 0x8FCB, 0xCDCD, 0x8FCD, 0xCDCF, 0x8FCE, 0xAAEF, 0x8FD1, 0xAAF1, 0x8FD2, 0xCDCC, 0x8FD3, 0xCDCE, + 0x8FD4, 0xAAF0, 0x8FD5, 0xCDD1, 0x8FD6, 0xCDD0, 0x8FD7, 0xCDD2, 0x8FE0, 0xD0B6, 0x8FE1, 0xD0B4, 0x8FE2, 0xAD7C, 0x8FE3, 0xD0B3, + 0x8FE4, 0xADA3, 0x8FE5, 0xAD7E, 0x8FE6, 0xAD7B, 0x8FE8, 0xADA4, 0x8FEA, 0xAD7D, 0x8FEB, 0xADA2, 0x8FED, 0xADA1, 0x8FEE, 0xD0B5, + 0x8FF0, 0xAD7A, 0x8FF4, 0xB06A, 0x8FF5, 0xD3EB, 0x8FF6, 0xD3F1, 0x8FF7, 0xB067, 0x8FF8, 0xB06E, 0x8FFA, 0xB069, 0x8FFB, 0xD3EE, + 0x8FFC, 0xD3F0, 0x8FFD, 0xB06C, 0x8FFE, 0xD3EA, 0x8FFF, 0xD3ED, 0x9000, 0xB068, 0x9001, 0xB065, 0x9002, 0xD3EC, 0x9003, 0xB06B, + 0x9004, 0xD3EF, 0x9005, 0xB06D, 0x9006, 0xB066, 0x900B, 0xD7E3, 0x900C, 0xD7E6, 0x900D, 0xB370, 0x900F, 0xB37A, 0x9010, 0xB376, + 0x9011, 0xD7E4, 0x9014, 0xB37E, 0x9015, 0xB377, 0x9016, 0xB37C, 0x9017, 0xB372, 0x9019, 0xB36F, 0x901A, 0xB371, 0x901B, 0xB37D, + 0x901C, 0xD7E5, 0x901D, 0xB375, 0x901E, 0xB378, 0x901F, 0xB374, 0x9020, 0xB379, 0x9021, 0xD7E7, 0x9022, 0xB37B, 0x9023, 0xB373, + 0x9024, 0xD7E2, 0x902D, 0xDC4D, 0x902E, 0xB665, 0x902F, 0xDC4F, 0x9031, 0xB667, 0x9032, 0xB669, 0x9034, 0xDC4E, 0x9035, 0xB666, + 0x9036, 0xB66A, 0x9038, 0xB668, 0x903C, 0xB947, 0x903D, 0xE0A3, 0x903E, 0xB94F, 0x903F, 0xE07E, 0x9041, 0xB950, 0x9042, 0xB945, + 0x9044, 0xE0A1, 0x9047, 0xB94A, 0x9049, 0xE0A2, 0x904A, 0xB943, 0x904B, 0xB942, 0x904D, 0xB94D, 0x904E, 0xB94C, 0x904F, 0xB94B, + 0x9050, 0xB949, 0x9051, 0xB94E, 0x9052, 0xE07D, 0x9053, 0xB944, 0x9054, 0xB946, 0x9055, 0xB948, 0x9058, 0xBBB8, 0x9059, 0xBBBB, + 0x905B, 0xBBBF, 0x905C, 0xBBB9, 0x905D, 0xBBBE, 0x905E, 0xBBBC, 0x9060, 0xBBB7, 0x9062, 0xBBBD, 0x9063, 0xBBBA, 0x9067, 0xE852, + 0x9068, 0xBE43, 0x9069, 0xBE41, 0x906B, 0xE853, 0x906D, 0xBE44, 0x906E, 0xBE42, 0x906F, 0xE851, 0x9070, 0xE850, 0x9072, 0xBFF0, + 0x9073, 0xE84F, 0x9074, 0xBFEE, 0x9075, 0xBFED, 0x9076, 0xEBD0, 0x9077, 0xBE45, 0x9078, 0xBFEF, 0x9079, 0xEBD1, 0x907A, 0xBFF2, + 0x907B, 0xEBD2, 0x907C, 0xBFF1, 0x907D, 0xC1D8, 0x907E, 0xEEC3, 0x907F, 0xC1D7, 0x9080, 0xC1DC, 0x9081, 0xC1DA, 0x9082, 0xC1DB, + 0x9083, 0xC2E3, 0x9084, 0xC1D9, 0x9085, 0xEEC2, 0x9086, 0xEBD3, 0x9087, 0xC2E2, 0x9088, 0xC2E4, 0x908A, 0xC3E4, 0x908B, 0xC3E5, + 0x908D, 0xF4E0, 0x908F, 0xC5DE, 0x9090, 0xC5DD, 0x9091, 0xA8B6, 0x9094, 0xCA55, 0x9095, 0xB06F, 0x9097, 0xCA52, 0x9098, 0xCA53, + 0x9099, 0xCA51, 0x909B, 0xCA54, 0x909E, 0xCBAA, 0x909F, 0xCBA7, 0x90A0, 0xCBAC, 0x90A1, 0xCBA8, 0x90A2, 0xA8B7, 0x90A3, 0xA8BA, + 0x90A5, 0xCBA9, 0x90A6, 0xA8B9, 0x90A7, 0xCBAB, 0x90AA, 0xA8B8, 0x90AF, 0xCDD5, 0x90B0, 0xCDD7, 0x90B1, 0xAAF4, 0x90B2, 0xCDD3, + 0x90B3, 0xCDD6, 0x90B4, 0xCDD4, 0x90B5, 0xAAF2, 0x90B6, 0xAAF5, 0x90B8, 0xAAF3, 0x90BD, 0xD0B8, 0x90BE, 0xD0BC, 0x90BF, 0xD0B9, + 0x90C1, 0xADA7, 0x90C3, 0xADA8, 0x90C5, 0xD0BB, 0x90C7, 0xD0BD, 0x90C8, 0xD0BF, 0x90CA, 0xADA5, 0x90CB, 0xD0BE, 0x90CE, 0xADA6, + 0x90D4, 0xD7EE, 0x90D5, 0xD0BA, 0x90D6, 0xD3F2, 0x90D7, 0xD3FB, 0x90D8, 0xD3F9, 0x90D9, 0xD3F4, 0x90DA, 0xD3F5, 0x90DB, 0xD3FA, + 0x90DC, 0xD3FC, 0x90DD, 0xB071, 0x90DF, 0xD3F7, 0x90E0, 0xD3F3, 0x90E1, 0xB070, 0x90E2, 0xB072, 0x90E3, 0xD3F6, 0x90E4, 0xD3FD, + 0x90E5, 0xD3F8, 0x90E8, 0xB3A1, 0x90E9, 0xD7F1, 0x90EA, 0xD7E9, 0x90EB, 0xD7EF, 0x90EC, 0xD7F0, 0x90ED, 0xB3A2, 0x90EF, 0xD7E8, + 0x90F0, 0xD7EA, 0x90F1, 0xD0B7, 0x90F2, 0xD7EC, 0x90F3, 0xD7ED, 0x90F4, 0xD7EB, 0x90F5, 0xB66C, 0x90F9, 0xDC56, 0x90FA, 0xEBD4, + 0x90FB, 0xDC57, 0x90FC, 0xDC54, 0x90FD, 0xB3A3, 0x90FE, 0xB66E, 0x90FF, 0xDC53, 0x9100, 0xDC59, 0x9101, 0xDC58, 0x9102, 0xB66B, + 0x9103, 0xDC5C, 0x9104, 0xDC52, 0x9105, 0xDC5B, 0x9106, 0xDC50, 0x9107, 0xDC5A, 0x9108, 0xDC55, 0x9109, 0xB66D, 0x910B, 0xE0AA, + 0x910D, 0xE0A5, 0x910E, 0xE0AB, 0x910F, 0xE0A6, 0x9110, 0xE0A4, 0x9111, 0xE0A7, 0x9112, 0xB951, 0x9114, 0xE0A9, 0x9116, 0xE0A8, + 0x9117, 0xB952, 0x9118, 0xBBC1, 0x9119, 0xBBC0, 0x911A, 0xE46E, 0x911B, 0xE471, 0x911C, 0xE469, 0x911D, 0xE46D, 0x911E, 0xBBC2, + 0x911F, 0xE46C, 0x9120, 0xE46A, 0x9121, 0xE470, 0x9122, 0xE46B, 0x9123, 0xE468, 0x9124, 0xE46F, 0x9126, 0xE859, 0x9127, 0xBE48, + 0x9128, 0xF14A, 0x9129, 0xE856, 0x912A, 0xE857, 0x912B, 0xE855, 0x912C, 0xDC51, 0x912D, 0xBE47, 0x912E, 0xE85A, 0x912F, 0xE854, + 0x9130, 0xBE46, 0x9131, 0xBE49, 0x9132, 0xE858, 0x9133, 0xEBD5, 0x9134, 0xBFF3, 0x9135, 0xEBD6, 0x9136, 0xEBD7, 0x9138, 0xEEC4, + 0x9139, 0xC1DD, 0x913A, 0xF14B, 0x913B, 0xF14C, 0x913E, 0xF14D, 0x913F, 0xF35D, 0x9140, 0xF35C, 0x9141, 0xF4E2, 0x9143, 0xF4E1, + 0x9144, 0xF65B, 0x9145, 0xF65C, 0x9146, 0xF65A, 0x9147, 0xF766, 0x9148, 0xC5B0, 0x9149, 0xA8BB, 0x914A, 0xADAA, 0x914B, 0xADA9, + 0x914C, 0xB075, 0x914D, 0xB074, 0x914E, 0xD440, 0x914F, 0xD441, 0x9150, 0xD3FE, 0x9152, 0xB073, 0x9153, 0xD7F5, 0x9155, 0xD7F6, + 0x9156, 0xD7F2, 0x9157, 0xB3A4, 0x9158, 0xD7F3, 0x915A, 0xD7F4, 0x915F, 0xDC5F, 0x9160, 0xDC61, 0x9161, 0xDC5D, 0x9162, 0xDC60, + 0x9163, 0xB66F, 0x9164, 0xDC5E, 0x9165, 0xB670, 0x9168, 0xDD73, 0x9169, 0xB955, 0x916A, 0xB954, 0x916C, 0xB953, 0x916E, 0xE0AC, + 0x916F, 0xE0AD, 0x9172, 0xE473, 0x9173, 0xE475, 0x9174, 0xBBC6, 0x9175, 0xBBC3, 0x9177, 0xBBC5, 0x9178, 0xBBC4, 0x9179, 0xE474, + 0x917A, 0xE472, 0x9180, 0xE861, 0x9181, 0xE85E, 0x9182, 0xE85F, 0x9183, 0xBE4D, 0x9184, 0xE860, 0x9185, 0xE85B, 0x9186, 0xE85C, + 0x9187, 0xBE4A, 0x9189, 0xBE4B, 0x918A, 0xE85D, 0x918B, 0xBE4C, 0x918D, 0xEBDB, 0x918F, 0xEBDC, 0x9190, 0xEBD9, 0x9191, 0xEBDA, + 0x9192, 0xBFF4, 0x9193, 0xEBD8, 0x9199, 0xEEC8, 0x919A, 0xEEC5, 0x919B, 0xEEC7, 0x919C, 0xC1E0, 0x919D, 0xEECB, 0x919E, 0xC1DF, + 0x919F, 0xEEC9, 0x91A0, 0xEECC, 0x91A1, 0xEECA, 0x91A2, 0xEEC6, 0x91A3, 0xC1DE, 0x91A5, 0xF14F, 0x91A7, 0xF150, 0x91A8, 0xF14E, + 0x91AA, 0xF152, 0x91AB, 0xC2E5, 0x91AC, 0xC2E6, 0x91AD, 0xF35F, 0x91AE, 0xC3E7, 0x91AF, 0xF151, 0x91B0, 0xF35E, 0x91B1, 0xC3E6, + 0x91B2, 0xF4E5, 0x91B3, 0xF4E6, 0x91B4, 0xC4BF, 0x91B5, 0xF4E4, 0x91B7, 0xF4E3, 0x91B9, 0xF65D, 0x91BA, 0xC548, 0x91BC, 0xF849, + 0x91BD, 0xF8C8, 0x91BE, 0xF8C7, 0x91C0, 0xC643, 0x91C1, 0xC65D, 0x91C2, 0xF8C9, 0x91C3, 0xF971, 0x91C5, 0xC66F, 0x91C6, 0xA8BC, + 0x91C7, 0xAAF6, 0x91C9, 0xB956, 0x91CB, 0xC4C0, 0x91CC, 0xA8BD, 0x91CD, 0xADAB, 0x91CE, 0xB3A5, 0x91CF, 0xB671, 0x91D0, 0xC2E7, + 0x91D1, 0xAAF7, 0x91D3, 0xD0C1, 0x91D4, 0xD0C0, 0x91D5, 0xD442, 0x91D7, 0xB078, 0x91D8, 0xB076, 0x91D9, 0xB07A, 0x91DA, 0xD444, + 0x91DC, 0xB079, 0x91DD, 0xB077, 0x91E2, 0xD443, 0x91E3, 0xB3A8, 0x91E4, 0xD7FC, 0x91E6, 0xB3A7, 0x91E7, 0xB3A9, 0x91E8, 0xD842, + 0x91E9, 0xB3AB, 0x91EA, 0xD7FE, 0x91EB, 0xD840, 0x91EC, 0xD7F7, 0x91ED, 0xB3AA, 0x91EE, 0xD843, 0x91F1, 0xD7F9, 0x91F3, 0xD7FA, + 0x91F4, 0xD7F8, 0x91F5, 0xB3A6, 0x91F7, 0xD841, 0x91F8, 0xD7FB, 0x91F9, 0xD7FD, 0x91FD, 0xDC6D, 0x91FF, 0xDC6C, 0x9200, 0xDC6A, + 0x9201, 0xDC62, 0x9202, 0xDC71, 0x9203, 0xDC65, 0x9204, 0xDC6F, 0x9205, 0xDC76, 0x9206, 0xDC6E, 0x9207, 0xB679, 0x9209, 0xB675, + 0x920A, 0xDC63, 0x920C, 0xDC69, 0x920D, 0xB677, 0x920F, 0xDC68, 0x9210, 0xB678, 0x9211, 0xB67A, 0x9212, 0xDC6B, 0x9214, 0xB672, + 0x9215, 0xB673, 0x9216, 0xDC77, 0x9217, 0xDC75, 0x9219, 0xDC74, 0x921A, 0xDC66, 0x921C, 0xDC72, 0x921E, 0xB676, 0x9223, 0xB674, + 0x9224, 0xDC73, 0x9225, 0xDC64, 0x9226, 0xDC67, 0x9227, 0xDC70, 0x922D, 0xE4BA, 0x922E, 0xE0B7, 0x9230, 0xE0B0, 0x9231, 0xE0C3, + 0x9232, 0xE0CC, 0x9233, 0xE0B3, 0x9234, 0xB961, 0x9236, 0xE0C0, 0x9237, 0xB957, 0x9238, 0xB959, 0x9239, 0xB965, 0x923A, 0xE0B1, + 0x923D, 0xB95A, 0x923E, 0xB95C, 0x923F, 0xB966, 0x9240, 0xB95B, 0x9245, 0xB964, 0x9246, 0xE0B9, 0x9248, 0xE0AE, 0x9249, 0xB962, + 0x924A, 0xE0B8, 0x924B, 0xB95E, 0x924C, 0xE0CA, 0x924D, 0xB963, 0x924E, 0xE0C8, 0x924F, 0xE0BC, 0x9250, 0xE0C6, 0x9251, 0xB960, + 0x9252, 0xE0AF, 0x9253, 0xE0C9, 0x9254, 0xE0C4, 0x9256, 0xE0CB, 0x9257, 0xB958, 0x925A, 0xB967, 0x925B, 0xB95D, 0x925E, 0xE0B5, + 0x9260, 0xE0BD, 0x9261, 0xE0C1, 0x9263, 0xE0C5, 0x9264, 0xB95F, 0x9265, 0xE0B4, 0x9266, 0xE0B2, 0x9267, 0xE0BE, 0x926C, 0xE0BB, + 0x926D, 0xE0BA, 0x926F, 0xE0BF, 0x9270, 0xE0C2, 0x9272, 0xE0C7, 0x9276, 0xE478, 0x9278, 0xBBC7, 0x9279, 0xE4A4, 0x927A, 0xE47A, + 0x927B, 0xBBCC, 0x927C, 0xBBD0, 0x927D, 0xE4AD, 0x927E, 0xE4B5, 0x927F, 0xE4A6, 0x9280, 0xBBC8, 0x9282, 0xE4AA, 0x9283, 0xE0B6, + 0x9285, 0xBBC9, 0x9286, 0xE4B1, 0x9287, 0xE4B6, 0x9288, 0xE4AE, 0x928A, 0xE4B0, 0x928B, 0xE4B9, 0x928C, 0xE4B2, 0x928D, 0xE47E, + 0x928E, 0xE4A9, 0x9291, 0xBBD1, 0x9293, 0xBBCD, 0x9294, 0xE47C, 0x9295, 0xE4AB, 0x9296, 0xBBCB, 0x9297, 0xE4A5, 0x9298, 0xBBCA, + 0x9299, 0xE4B3, 0x929A, 0xE4A2, 0x929B, 0xE479, 0x929C, 0xBBCE, 0x929D, 0xE4B8, 0x92A0, 0xE47B, 0x92A1, 0xE4AF, 0x92A2, 0xE4AC, + 0x92A3, 0xE4A7, 0x92A4, 0xE477, 0x92A5, 0xE476, 0x92A6, 0xE4A1, 0x92A7, 0xE4B4, 0x92A8, 0xBBCF, 0x92A9, 0xE4B7, 0x92AA, 0xE47D, + 0x92AB, 0xE4A3, 0x92AC, 0xBE52, 0x92B2, 0xBE5A, 0x92B3, 0xBE55, 0x92B4, 0xE8A4, 0x92B5, 0xE8A1, 0x92B6, 0xE867, 0x92B7, 0xBE50, + 0x92B9, 0xF9D7, 0x92BB, 0xBE4F, 0x92BC, 0xBE56, 0x92C0, 0xE865, 0x92C1, 0xBE54, 0x92C2, 0xE871, 0x92C3, 0xE863, 0x92C4, 0xE864, + 0x92C5, 0xBE4E, 0x92C6, 0xE8A3, 0x92C7, 0xBE58, 0x92C8, 0xE874, 0x92C9, 0xE879, 0x92CA, 0xE873, 0x92CB, 0xEBEE, 0x92CC, 0xE86F, + 0x92CD, 0xE877, 0x92CE, 0xE875, 0x92CF, 0xE868, 0x92D0, 0xE862, 0x92D1, 0xE87D, 0x92D2, 0xBE57, 0x92D3, 0xE87E, 0x92D5, 0xE878, + 0x92D7, 0xE86D, 0x92D8, 0xE86B, 0x92D9, 0xE866, 0x92DD, 0xE86E, 0x92DE, 0xE87B, 0x92DF, 0xE86A, 0x92E0, 0xE87A, 0x92E1, 0xE8A2, + 0x92E4, 0xBE53, 0x92E6, 0xE876, 0x92E7, 0xE87C, 0x92E8, 0xE872, 0x92E9, 0xE86C, 0x92EA, 0xBE51, 0x92EE, 0xE4A8, 0x92EF, 0xE870, + 0x92F0, 0xBE59, 0x92F1, 0xE869, 0x92F7, 0xEBF4, 0x92F8, 0xBFF7, 0x92F9, 0xEBF3, 0x92FA, 0xEBF0, 0x92FB, 0xEC44, 0x92FC, 0xBFFB, + 0x92FE, 0xEC41, 0x92FF, 0xEBF8, 0x9300, 0xEC43, 0x9301, 0xEBE9, 0x9302, 0xEBF6, 0x9304, 0xBFFD, 0x9306, 0xEBE1, 0x9308, 0xEBDF, + 0x9309, 0xEC42, 0x930B, 0xEC40, 0x930C, 0xEBFE, 0x930D, 0xEBED, 0x930E, 0xEBEC, 0x930F, 0xEBE2, 0x9310, 0xC040, 0x9312, 0xEBE8, + 0x9313, 0xEBF2, 0x9314, 0xEBFD, 0x9315, 0xC043, 0x9316, 0xEC45, 0x9318, 0xC1E8, 0x9319, 0xC045, 0x931A, 0xBFFE, 0x931B, 0xEBE6, + 0x931D, 0xEBEF, 0x931E, 0xEBDE, 0x931F, 0xEBE0, 0x9320, 0xBFF5, 0x9321, 0xC042, 0x9322, 0xBFFA, 0x9323, 0xEBE7, 0x9324, 0xEBF7, + 0x9325, 0xEBF1, 0x9326, 0xC041, 0x9327, 0xEBDD, 0x9328, 0xC1E3, 0x9329, 0xEBF9, 0x932A, 0xEBFC, 0x932B, 0xBFFC, 0x932D, 0xEBEB, + 0x932E, 0xC044, 0x932F, 0xBFF9, 0x9333, 0xBFF8, 0x9334, 0xEBF5, 0x9335, 0xEBFB, 0x9336, 0xBFF6, 0x9338, 0xEBE4, 0x9339, 0xEBFA, + 0x933C, 0xEBE5, 0x9346, 0xEBEA, 0x9347, 0xEED2, 0x9349, 0xEED7, 0x934A, 0xC1E5, 0x934B, 0xC1E7, 0x934C, 0xEEDD, 0x934D, 0xC1E1, + 0x934E, 0xEEEC, 0x934F, 0xEEE3, 0x9350, 0xEED8, 0x9351, 0xEED9, 0x9352, 0xEEE2, 0x9354, 0xC1EE, 0x9355, 0xEEE1, 0x9356, 0xEED1, + 0x9357, 0xEEE0, 0x9358, 0xEED4, 0x9359, 0xEEED, 0x935A, 0xC1ED, 0x935B, 0xC1EB, 0x935C, 0xEED5, 0x935E, 0xEEE8, 0x9360, 0xEEDA, + 0x9361, 0xEEE7, 0x9363, 0xEEE9, 0x9364, 0xEED0, 0x9365, 0xC1E6, 0x9367, 0xEEEA, 0x936A, 0xEEDE, 0x936C, 0xC1EA, 0x936D, 0xEEDB, + 0x9370, 0xC1EC, 0x9371, 0xEEE4, 0x9375, 0xC1E4, 0x9376, 0xEED6, 0x9377, 0xEEE5, 0x9379, 0xEEDF, 0x937A, 0xEBE3, 0x937B, 0xEEE6, + 0x937C, 0xEED3, 0x937E, 0xC1E9, 0x9380, 0xEEEB, 0x9382, 0xC1E2, 0x9383, 0xEECE, 0x9388, 0xF160, 0x9389, 0xF159, 0x938A, 0xC2E9, + 0x938C, 0xF154, 0x938D, 0xF163, 0x938E, 0xF15B, 0x938F, 0xEEDC, 0x9391, 0xF165, 0x9392, 0xF155, 0x9394, 0xC2E8, 0x9395, 0xF15F, + 0x9396, 0xC2EA, 0x9397, 0xC2F2, 0x9398, 0xC2F0, 0x9399, 0xF161, 0x939A, 0xC2F1, 0x939B, 0xF157, 0x939D, 0xF158, 0x939E, 0xF15D, + 0x939F, 0xF162, 0x93A1, 0xEECD, 0x93A2, 0xC2EB, 0x93A3, 0xF16A, 0x93A4, 0xF167, 0x93A5, 0xF16B, 0x93A6, 0xF15E, 0x93A7, 0xF15A, + 0x93A8, 0xF168, 0x93A9, 0xF36A, 0x93AA, 0xF15C, 0x93AC, 0xC2EE, 0x93AE, 0xC2ED, 0x93AF, 0xEECF, 0x93B0, 0xC2EF, 0x93B1, 0xF164, + 0x93B2, 0xF166, 0x93B3, 0xC2EC, 0x93B4, 0xF169, 0x93B5, 0xF153, 0x93B7, 0xF156, 0x93C0, 0xF373, 0x93C2, 0xF363, 0x93C3, 0xC3EB, + 0x93C4, 0xF371, 0x93C7, 0xF361, 0x93C8, 0xC3EC, 0x93CA, 0xF36C, 0x93CC, 0xF368, 0x93CD, 0xC3F1, 0x93CE, 0xF372, 0x93CF, 0xF362, + 0x93D0, 0xF365, 0x93D1, 0xC3E9, 0x93D2, 0xF374, 0x93D4, 0xF36D, 0x93D5, 0xF370, 0x93D6, 0xC3EF, 0x93D7, 0xC3F4, 0x93D8, 0xC3F2, + 0x93D9, 0xF369, 0x93DA, 0xF364, 0x93DC, 0xC3ED, 0x93DD, 0xC3EE, 0x93DE, 0xF360, 0x93DF, 0xC3EA, 0x93E1, 0xC3E8, 0x93E2, 0xC3F0, + 0x93E3, 0xF36F, 0x93E4, 0xC3F3, 0x93E6, 0xF36B, 0x93E7, 0xF375, 0x93E8, 0xC3F5, 0x93EC, 0xF367, 0x93EE, 0xF36E, 0x93F5, 0xF4F3, + 0x93F6, 0xF542, 0x93F7, 0xF4F5, 0x93F8, 0xF4FC, 0x93F9, 0xF366, 0x93FA, 0xF4FA, 0x93FB, 0xF4E9, 0x93FC, 0xF540, 0x93FD, 0xC4C3, + 0x93FE, 0xF4ED, 0x93FF, 0xF4FE, 0x9400, 0xF4F4, 0x9403, 0xC4C2, 0x9406, 0xF544, 0x9407, 0xF4F6, 0x9409, 0xF4FB, 0x940A, 0xF4FD, + 0x940B, 0xF4E7, 0x940C, 0xF541, 0x940D, 0xF4F2, 0x940E, 0xF4F7, 0x940F, 0xF4EB, 0x9410, 0xF4EF, 0x9411, 0xF543, 0x9412, 0xF4F9, + 0x9413, 0xF4E8, 0x9414, 0xF4EC, 0x9415, 0xF4EE, 0x9416, 0xF4F8, 0x9418, 0xC4C1, 0x9419, 0xF4F1, 0x9420, 0xF4EA, 0x9428, 0xF4F0, + 0x9429, 0xF661, 0x942A, 0xF666, 0x942B, 0xC54F, 0x942C, 0xF668, 0x942E, 0xC549, 0x9430, 0xF664, 0x9431, 0xF66A, 0x9432, 0xC54E, + 0x9433, 0xC54A, 0x9435, 0xC54B, 0x9436, 0xF660, 0x9437, 0xF667, 0x9438, 0xC54D, 0x9439, 0xF665, 0x943A, 0xC54C, 0x943B, 0xF65F, + 0x943C, 0xF663, 0x943D, 0xF662, 0x943F, 0xF65E, 0x9440, 0xF669, 0x9444, 0xC5B1, 0x9445, 0xF76D, 0x9446, 0xF770, 0x9447, 0xF76C, + 0x9448, 0xF76E, 0x9449, 0xF76F, 0x944A, 0xF769, 0x944B, 0xF76A, 0x944C, 0xF767, 0x944F, 0xF76B, 0x9450, 0xF768, 0x9451, 0xC5B2, + 0x9452, 0xC5B3, 0x9455, 0xF84B, 0x9457, 0xF84D, 0x945D, 0xF84C, 0x945E, 0xF84E, 0x9460, 0xC5E0, 0x9462, 0xF84A, 0x9463, 0xC5DF, + 0x9464, 0xC5E1, 0x9468, 0xF8CB, 0x9469, 0xF8CC, 0x946A, 0xC644, 0x946B, 0xF8CA, 0x946D, 0xF953, 0x946E, 0xF952, 0x946F, 0xF954, + 0x9470, 0xC65F, 0x9471, 0xF955, 0x9472, 0xC65E, 0x9473, 0xF956, 0x9474, 0xF972, 0x9475, 0xF975, 0x9476, 0xF974, 0x9477, 0xC668, + 0x9478, 0xF973, 0x947C, 0xC672, 0x947D, 0xC670, 0x947E, 0xC671, 0x947F, 0xC677, 0x9480, 0xF9C0, 0x9481, 0xF9C1, 0x9482, 0xF9BF, + 0x9483, 0xF9C9, 0x9577, 0xAAF8, 0x957A, 0xD844, 0x957B, 0xDC78, 0x957C, 0xE8A5, 0x957D, 0xF376, 0x9580, 0xAAF9, 0x9582, 0xADAC, + 0x9583, 0xB07B, 0x9586, 0xD845, 0x9588, 0xD846, 0x9589, 0xB3AC, 0x958B, 0xB67D, 0x958C, 0xDC7A, 0x958D, 0xDC79, 0x958E, 0xB6A3, + 0x958F, 0xB67C, 0x9590, 0xDC7B, 0x9591, 0xB67E, 0x9592, 0xB6A2, 0x9593, 0xB6A1, 0x9594, 0xB67B, 0x9598, 0xB968, 0x959B, 0xE0D0, + 0x959C, 0xE0CE, 0x959E, 0xE0CF, 0x959F, 0xE0CD, 0x95A1, 0xBBD2, 0x95A3, 0xBBD5, 0x95A4, 0xBBD7, 0x95A5, 0xBBD6, 0x95A8, 0xBBD3, + 0x95A9, 0xBBD4, 0x95AB, 0xE8A7, 0x95AC, 0xE8A6, 0x95AD, 0xBE5B, 0x95AE, 0xE8A8, 0x95B0, 0xE8A9, 0x95B1, 0xBE5C, 0x95B5, 0xEC4D, + 0x95B6, 0xEC4B, 0x95B7, 0xEEF3, 0x95B9, 0xEC49, 0x95BA, 0xEC4A, 0x95BB, 0xC046, 0x95BC, 0xEC46, 0x95BD, 0xEC4E, 0x95BE, 0xEC48, + 0x95BF, 0xEC4C, 0x95C0, 0xEEEF, 0x95C3, 0xEEF1, 0x95C5, 0xEEF2, 0x95C6, 0xC1F3, 0x95C7, 0xEEEE, 0x95C8, 0xC1F2, 0x95C9, 0xEEF0, + 0x95CA, 0xC1EF, 0x95CB, 0xC1F0, 0x95CC, 0xC1F1, 0x95CD, 0xEC47, 0x95D0, 0xC2F5, 0x95D1, 0xF16E, 0x95D2, 0xF16C, 0x95D3, 0xF16D, + 0x95D4, 0xC2F3, 0x95D5, 0xC2F6, 0x95D6, 0xC2F4, 0x95DA, 0xF377, 0x95DB, 0xF378, 0x95DC, 0xC3F6, 0x95DE, 0xF545, 0x95DF, 0xF547, + 0x95E0, 0xF546, 0x95E1, 0xC4C4, 0x95E2, 0xC550, 0x95E3, 0xF66D, 0x95E4, 0xF66C, 0x95E5, 0xF66B, 0x961C, 0xAAFA, 0x961E, 0xC9AA, + 0x9620, 0xCA58, 0x9621, 0xA6E9, 0x9622, 0xCA56, 0x9623, 0xCA59, 0x9624, 0xCA57, 0x9628, 0xCBAE, 0x962A, 0xA8C1, 0x962C, 0xA8C2, + 0x962D, 0xCBB0, 0x962E, 0xA8BF, 0x962F, 0xCBAF, 0x9630, 0xCBAD, 0x9631, 0xA8C0, 0x9632, 0xA8BE, 0x9639, 0xCDD8, 0x963A, 0xCDDB, + 0x963B, 0xAAFD, 0x963C, 0xCDDA, 0x963D, 0xCDD9, 0x963F, 0xAAFC, 0x9640, 0xAAFB, 0x9642, 0xAB40, 0x9643, 0xCDDC, 0x9644, 0xAAFE, + 0x964A, 0xD0C6, 0x964B, 0xADAE, 0x964C, 0xADAF, 0x964D, 0xADB0, 0x964E, 0xD0C7, 0x964F, 0xD0C3, 0x9650, 0xADAD, 0x9651, 0xD0C4, + 0x9653, 0xD0C5, 0x9654, 0xD0C2, 0x9658, 0xB0A4, 0x965B, 0xB0A1, 0x965C, 0xD445, 0x965D, 0xB0A2, 0x965E, 0xB0A5, 0x965F, 0xD446, + 0x9661, 0xB07E, 0x9662, 0xB07C, 0x9663, 0xB07D, 0x9664, 0xB0A3, 0x966A, 0xB3AD, 0x966B, 0xD849, 0x966C, 0xB3B5, 0x966D, 0xD848, + 0x966F, 0xD84B, 0x9670, 0xB3B1, 0x9671, 0xD84A, 0x9672, 0xB6AB, 0x9673, 0xB3AF, 0x9674, 0xB3B2, 0x9675, 0xB3AE, 0x9676, 0xB3B3, + 0x9677, 0xB3B4, 0x9678, 0xB3B0, 0x967C, 0xD847, 0x967D, 0xB6A7, 0x967E, 0xDC7D, 0x9680, 0xDCA3, 0x9683, 0xDCA2, 0x9684, 0xB6AC, + 0x9685, 0xB6A8, 0x9686, 0xB6A9, 0x9687, 0xDC7C, 0x9688, 0xDC7E, 0x9689, 0xDCA1, 0x968A, 0xB6A4, 0x968B, 0xB6A6, 0x968D, 0xB6AA, + 0x968E, 0xB6A5, 0x9691, 0xE0D3, 0x9692, 0xE0D1, 0x9693, 0xE0D2, 0x9694, 0xB96A, 0x9695, 0xB96B, 0x9697, 0xE0D4, 0x9698, 0xB969, + 0x9699, 0xBBD8, 0x969B, 0xBBDA, 0x969C, 0xBBD9, 0x969E, 0xE4BB, 0x96A1, 0xE4BC, 0x96A2, 0xE8AB, 0x96A4, 0xE8AA, 0x96A7, 0xC047, + 0x96A8, 0xC048, 0x96A9, 0xEC4F, 0x96AA, 0xC049, 0x96AC, 0xEEF6, 0x96AE, 0xEEF4, 0x96B0, 0xEEF5, 0x96B1, 0xC1F4, 0x96B3, 0xF16F, + 0x96B4, 0xC3F7, 0x96B8, 0xC1F5, 0x96B9, 0xAB41, 0x96BB, 0xB0A6, 0x96BC, 0xD447, 0x96BF, 0xD84C, 0x96C0, 0xB3B6, 0x96C1, 0xB6AD, + 0x96C2, 0xDCA4, 0x96C3, 0xDCA6, 0x96C4, 0xB6AF, 0x96C5, 0xB6AE, 0x96C6, 0xB6B0, 0x96C7, 0xB6B1, 0x96C8, 0xDCA5, 0x96C9, 0xB96E, + 0x96CA, 0xB96F, 0x96CB, 0xB96D, 0x96CC, 0xBBDB, 0x96CD, 0xB96C, 0x96CE, 0xE0D5, 0x96D2, 0xBBDC, 0x96D3, 0xE8AC, 0x96D4, 0xEC50, + 0x96D5, 0xC04A, 0x96D6, 0xC1F6, 0x96D7, 0xF170, 0x96D8, 0xF174, 0x96D9, 0xC2F9, 0x96DA, 0xF171, 0x96DB, 0xC2FA, 0x96DC, 0xC2F8, + 0x96DD, 0xF175, 0x96DE, 0xC2FB, 0x96DF, 0xF173, 0x96E1, 0xF379, 0x96E2, 0xC2F7, 0x96E3, 0xC3F8, 0x96E5, 0xF8CD, 0x96E8, 0xAB42, + 0x96E9, 0xB3B8, 0x96EA, 0xB3B7, 0x96EF, 0xB6B2, 0x96F0, 0xDCA8, 0x96F1, 0xDCA7, 0x96F2, 0xB6B3, 0x96F5, 0xE0D9, 0x96F6, 0xB973, + 0x96F7, 0xB970, 0x96F8, 0xE0D8, 0x96F9, 0xB972, 0x96FA, 0xE0D6, 0x96FB, 0xB971, 0x96FD, 0xE0D7, 0x96FF, 0xE4BD, 0x9700, 0xBBDD, + 0x9702, 0xE8AF, 0x9704, 0xBE5D, 0x9705, 0xE8AD, 0x9706, 0xBE5E, 0x9707, 0xBE5F, 0x9708, 0xE8AE, 0x9709, 0xBE60, 0x970B, 0xEC51, + 0x970D, 0xC04E, 0x970E, 0xC04B, 0x970F, 0xC050, 0x9710, 0xEC53, 0x9711, 0xC04C, 0x9712, 0xEC52, 0x9713, 0xC04F, 0x9716, 0xC04D, + 0x9718, 0xEEF9, 0x9719, 0xEEFB, 0x971C, 0xC1F7, 0x971D, 0xEEFA, 0x971E, 0xC1F8, 0x971F, 0xEEF8, 0x9720, 0xEEF7, 0x9722, 0xF177, + 0x9723, 0xF176, 0x9724, 0xC2FC, 0x9725, 0xF178, 0x9726, 0xF37E, 0x9727, 0xC3FA, 0x9728, 0xF37D, 0x9729, 0xF37A, 0x972A, 0xC3F9, + 0x972B, 0xF37B, 0x972C, 0xF37C, 0x972E, 0xF548, 0x972F, 0xF549, 0x9730, 0xC4C5, 0x9732, 0xC553, 0x9735, 0xF66E, 0x9738, 0xC551, + 0x9739, 0xC552, 0x973A, 0xF66F, 0x973D, 0xC5B4, 0x973E, 0xC5B5, 0x973F, 0xF771, 0x9742, 0xC645, 0x9743, 0xF8CF, 0x9744, 0xC647, + 0x9746, 0xF8CE, 0x9747, 0xF8D0, 0x9748, 0xC646, 0x9749, 0xF957, 0x974B, 0xF9AD, 0x9752, 0xAB43, 0x9756, 0xB974, 0x9758, 0xE4BE, + 0x975A, 0xE8B0, 0x975B, 0xC051, 0x975C, 0xC052, 0x975E, 0xAB44, 0x9760, 0xBE61, 0x9761, 0xC3FB, 0x9762, 0xADB1, 0x9766, 0xC053, + 0x9768, 0xC5E2, 0x9769, 0xADB2, 0x976A, 0xD84D, 0x976C, 0xDCA9, 0x976E, 0xDCAB, 0x9770, 0xDCAA, 0x9772, 0xE0DD, 0x9773, 0xE0DA, + 0x9774, 0xB975, 0x9776, 0xB976, 0x9777, 0xE0DB, 0x9778, 0xE0DC, 0x977A, 0xE4C0, 0x977B, 0xE4C5, 0x977C, 0xBBDE, 0x977D, 0xE4BF, + 0x977E, 0xE4C1, 0x977F, 0xE4C8, 0x9780, 0xE4C3, 0x9781, 0xE4C7, 0x9782, 0xE4C4, 0x9783, 0xE4C2, 0x9784, 0xE4C6, 0x9785, 0xBBDF, + 0x9788, 0xE8B3, 0x978A, 0xE8B1, 0x978B, 0xBE63, 0x978D, 0xBE62, 0x978E, 0xE8B2, 0x978F, 0xBE64, 0x9794, 0xEC56, 0x9797, 0xEC55, + 0x9798, 0xC054, 0x9799, 0xEC54, 0x979A, 0xEEFC, 0x979C, 0xEEFE, 0x979D, 0xEF41, 0x979E, 0xEF40, 0x97A0, 0xC1F9, 0x97A1, 0xEEFD, + 0x97A2, 0xF1A1, 0x97A3, 0xC2FD, 0x97A4, 0xF17D, 0x97A5, 0xF1A2, 0x97A6, 0xC2FE, 0x97A8, 0xF17B, 0x97AA, 0xF17E, 0x97AB, 0xF17C, + 0x97AC, 0xF179, 0x97AD, 0xC340, 0x97AE, 0xF17A, 0x97B3, 0xF3A1, 0x97B6, 0xF3A3, 0x97B7, 0xF3A2, 0x97B9, 0xF54A, 0x97BB, 0xF54B, + 0x97BF, 0xF670, 0x97C1, 0xC5B7, 0x97C3, 0xC5B6, 0x97C4, 0xF84F, 0x97C5, 0xF850, 0x97C6, 0xC648, 0x97C7, 0xF8D1, 0x97C9, 0xC669, + 0x97CB, 0xADB3, 0x97CC, 0xB6B4, 0x97CD, 0xE4CA, 0x97CE, 0xE4C9, 0x97CF, 0xE8B5, 0x97D0, 0xE8B4, 0x97D3, 0xC1FA, 0x97D4, 0xEF43, + 0x97D5, 0xEF42, 0x97D6, 0xF1A5, 0x97D7, 0xF1A3, 0x97D8, 0xF1A6, 0x97D9, 0xF1A4, 0x97DC, 0xC3FC, 0x97DD, 0xF3A4, 0x97DE, 0xF3A5, + 0x97DF, 0xF3A6, 0x97E1, 0xF671, 0x97E3, 0xF772, 0x97E5, 0xF8D2, 0x97ED, 0xADB4, 0x97F0, 0xEC57, 0x97F1, 0xEF44, 0x97F3, 0xADB5, + 0x97F6, 0xBBE0, 0x97F8, 0xEC58, 0x97F9, 0xC341, 0x97FA, 0xF1A7, 0x97FB, 0xC3FD, 0x97FD, 0xF54C, 0x97FE, 0xF54D, 0x97FF, 0xC554, + 0x9800, 0xF851, 0x9801, 0xADB6, 0x9802, 0xB3BB, 0x9803, 0xB3BC, 0x9804, 0xD84E, 0x9805, 0xB6B5, 0x9806, 0xB6B6, 0x9807, 0xDCAC, + 0x9808, 0xB6B7, 0x980A, 0xB97A, 0x980C, 0xB97C, 0x980D, 0xE0DF, 0x980E, 0xE0E0, 0x980F, 0xE0DE, 0x9810, 0xB977, 0x9811, 0xB978, + 0x9812, 0xB97B, 0x9813, 0xB979, 0x9816, 0xE4CB, 0x9817, 0xBBE1, 0x9818, 0xBBE2, 0x981B, 0xE8BC, 0x981C, 0xBE67, 0x981D, 0xE8B7, + 0x981E, 0xE8B6, 0x9820, 0xE8BB, 0x9821, 0xBE65, 0x9824, 0xC05B, 0x9826, 0xE8B8, 0x9827, 0xE8BD, 0x9828, 0xE8BA, 0x9829, 0xE8B9, + 0x982B, 0xBE66, 0x982D, 0xC059, 0x982F, 0xEC5A, 0x9830, 0xC055, 0x9832, 0xEC5B, 0x9835, 0xEC59, 0x9837, 0xC058, 0x9838, 0xC056, + 0x9839, 0xC05A, 0x983B, 0xC057, 0x9841, 0xEF45, 0x9843, 0xEF4A, 0x9844, 0xEF46, 0x9845, 0xEF49, 0x9846, 0xC1FB, 0x9848, 0xEDD4, + 0x9849, 0xEF48, 0x984A, 0xEF47, 0x984C, 0xC344, 0x984D, 0xC342, 0x984E, 0xC345, 0x984F, 0xC343, 0x9850, 0xF1A8, 0x9851, 0xF1A9, + 0x9852, 0xF1AA, 0x9853, 0xC346, 0x9857, 0xF3AA, 0x9858, 0xC440, 0x9859, 0xF3A8, 0x985B, 0xC441, 0x985C, 0xF3A7, 0x985D, 0xF3A9, + 0x985E, 0xC3FE, 0x985F, 0xF551, 0x9860, 0xF54E, 0x9862, 0xF54F, 0x9863, 0xF550, 0x9864, 0xF672, 0x9865, 0xC556, 0x9867, 0xC555, + 0x9869, 0xF774, 0x986A, 0xF773, 0x986B, 0xC5B8, 0x986F, 0xC5E3, 0x9870, 0xC649, 0x9871, 0xC660, 0x9872, 0xF958, 0x9873, 0xF9AE, + 0x9874, 0xF9AF, 0x98A8, 0xADB7, 0x98A9, 0xDCAD, 0x98AC, 0xE0E1, 0x98AD, 0xE4CC, 0x98AE, 0xE4CD, 0x98AF, 0xBBE3, 0x98B1, 0xBBE4, + 0x98B2, 0xE8BE, 0x98B3, 0xBE68, 0x98B6, 0xC1FC, 0x98B8, 0xF1AB, 0x98BA, 0xC347, 0x98BB, 0xF3AD, 0x98BC, 0xC442, 0x98BD, 0xF3AC, + 0x98BE, 0xF3AE, 0x98BF, 0xF3AB, 0x98C0, 0xF675, 0x98C1, 0xF552, 0x98C2, 0xF553, 0x98C4, 0xC4C6, 0x98C6, 0xF674, 0x98C9, 0xF673, + 0x98CB, 0xF775, 0x98CC, 0xF9B0, 0x98DB, 0xADB8, 0x98DF, 0xADB9, 0x98E2, 0xB0A7, 0x98E3, 0xD448, 0x98E5, 0xD84F, 0x98E7, 0xB6B8, + 0x98E9, 0xB6BB, 0x98EA, 0xB6B9, 0x98EB, 0xDCAE, 0x98ED, 0xB6BD, 0x98EF, 0xB6BA, 0x98F2, 0xB6BC, 0x98F4, 0xB97E, 0x98F6, 0xE0E2, + 0x98F9, 0xE0E3, 0x98FA, 0xE8C0, 0x98FC, 0xB97D, 0x98FD, 0xB9A1, 0x98FE, 0xB9A2, 0x9900, 0xE4CF, 0x9902, 0xE4CE, 0x9903, 0xBBE5, + 0x9905, 0xBBE6, 0x9907, 0xE4D0, 0x9908, 0xE8BF, 0x9909, 0xBBE8, 0x990A, 0xBE69, 0x990C, 0xBBE7, 0x9910, 0xC05C, 0x9911, 0xE8C1, + 0x9912, 0xBE6B, 0x9913, 0xBE6A, 0x9914, 0xE8C2, 0x9915, 0xE8C5, 0x9916, 0xE8C3, 0x9917, 0xE8C4, 0x9918, 0xBE6C, 0x991A, 0xC061, + 0x991B, 0xC05F, 0x991E, 0xC05E, 0x991F, 0xEC5D, 0x9921, 0xC060, 0x9924, 0xEC5C, 0x9925, 0xEF4B, 0x9927, 0xEC5E, 0x9928, 0xC05D, + 0x9929, 0xEC5F, 0x992A, 0xEF4E, 0x992B, 0xEF4C, 0x992C, 0xEF4D, 0x992D, 0xEF52, 0x992E, 0xC34B, 0x992F, 0xEF51, 0x9930, 0xEF54, + 0x9931, 0xEF53, 0x9932, 0xEF50, 0x9933, 0xEF4F, 0x9935, 0xC1FD, 0x993A, 0xF1AE, 0x993C, 0xF1AD, 0x993D, 0xC34A, 0x993E, 0xC348, + 0x993F, 0xC349, 0x9941, 0xF1AC, 0x9943, 0xF3B1, 0x9945, 0xC443, 0x9947, 0xF3B0, 0x9948, 0xF3AF, 0x9949, 0xC444, 0x994B, 0xF558, + 0x994C, 0xF557, 0x994E, 0xF555, 0x9950, 0xF554, 0x9951, 0xC4C8, 0x9952, 0xC4C7, 0x9953, 0xF559, 0x9954, 0xF776, 0x9955, 0xC5B9, + 0x9956, 0xF677, 0x9957, 0xC557, 0x9958, 0xF676, 0x9959, 0xF556, 0x995B, 0xF777, 0x995C, 0xC5E4, 0x995E, 0xC661, 0x995F, 0xF959, + 0x9961, 0xF9B1, 0x9996, 0xADBA, 0x9997, 0xD850, 0x9998, 0xEF55, 0x9999, 0xADBB, 0x999C, 0xE4D2, 0x999D, 0xE4D1, 0x999E, 0xEC60, + 0x99A1, 0xEF57, 0x99A3, 0xEF56, 0x99A5, 0xC34C, 0x99A6, 0xF3B2, 0x99A7, 0xF3B3, 0x99A8, 0xC4C9, 0x99AB, 0xF9B2, 0x99AC, 0xB0A8, + 0x99AD, 0xB6BF, 0x99AE, 0xB6BE, 0x99AF, 0xE0E4, 0x99B0, 0xE0E6, 0x99B1, 0xB9A4, 0x99B2, 0xE0E5, 0x99B3, 0xB9A3, 0x99B4, 0xB9A5, + 0x99B5, 0xE0E7, 0x99B9, 0xE4D4, 0x99BA, 0xE4D6, 0x99BB, 0xE4D5, 0x99BD, 0xE4D8, 0x99C1, 0xBBE9, 0x99C2, 0xE4D7, 0x99C3, 0xE4D3, + 0x99C7, 0xE4D9, 0x99C9, 0xE8CC, 0x99CB, 0xE8CF, 0x99CC, 0xE8D1, 0x99CD, 0xE8C7, 0x99CE, 0xE8CB, 0x99CF, 0xE8C8, 0x99D0, 0xBE6E, + 0x99D1, 0xBE71, 0x99D2, 0xBE73, 0x99D3, 0xE8C9, 0x99D4, 0xE8CA, 0x99D5, 0xBE72, 0x99D6, 0xE8CD, 0x99D7, 0xE8D0, 0x99D8, 0xE8CE, + 0x99D9, 0xBE74, 0x99DB, 0xBE70, 0x99DC, 0xE8C6, 0x99DD, 0xBE6D, 0x99DF, 0xBE6F, 0x99E2, 0xC063, 0x99E3, 0xEC66, 0x99E4, 0xEC64, + 0x99E5, 0xEC63, 0x99E7, 0xEC69, 0x99E9, 0xEC68, 0x99EA, 0xEC67, 0x99EC, 0xEC62, 0x99ED, 0xC062, 0x99EE, 0xEC61, 0x99F0, 0xEC65, + 0x99F1, 0xC064, 0x99F4, 0xEF5A, 0x99F6, 0xEF5E, 0x99F7, 0xEF5B, 0x99F8, 0xEF5D, 0x99F9, 0xEF5C, 0x99FA, 0xEF59, 0x99FB, 0xEF5F, + 0x99FC, 0xEF62, 0x99FD, 0xEF60, 0x99FE, 0xEF61, 0x99FF, 0xC240, 0x9A01, 0xC1FE, 0x9A02, 0xEF58, 0x9A03, 0xEF63, 0x9A04, 0xF1B3, + 0x9A05, 0xF1B6, 0x9A06, 0xF1B8, 0x9A07, 0xF1B7, 0x9A09, 0xF1B1, 0x9A0A, 0xF1B5, 0x9A0B, 0xF1B0, 0x9A0D, 0xF1B2, 0x9A0E, 0xC34D, + 0x9A0F, 0xF1AF, 0x9A11, 0xF1B4, 0x9A14, 0xF3C0, 0x9A15, 0xF3B5, 0x9A16, 0xC445, 0x9A19, 0xC446, 0x9A1A, 0xF3B4, 0x9A1B, 0xF3B9, + 0x9A1C, 0xF3BF, 0x9A1D, 0xF3B7, 0x9A1E, 0xF3BE, 0x9A20, 0xF3BB, 0x9A22, 0xF3BA, 0x9A23, 0xF3BD, 0x9A24, 0xF3B8, 0x9A25, 0xF3B6, + 0x9A27, 0xF3BC, 0x9A29, 0xF560, 0x9A2A, 0xF55E, 0x9A2B, 0xC4CA, 0x9A2C, 0xF55D, 0x9A2D, 0xF563, 0x9A2E, 0xF561, 0x9A30, 0xC4CB, + 0x9A31, 0xF55C, 0x9A32, 0xF55A, 0x9A34, 0xF55B, 0x9A35, 0xC4CD, 0x9A36, 0xF55F, 0x9A37, 0xC4CC, 0x9A38, 0xF562, 0x9A39, 0xF678, + 0x9A3A, 0xF67E, 0x9A3D, 0xF679, 0x9A3E, 0xC55B, 0x9A3F, 0xF6A1, 0x9A40, 0xC55A, 0x9A41, 0xF67D, 0x9A42, 0xF67C, 0x9A43, 0xC559, + 0x9A44, 0xF67B, 0x9A45, 0xC558, 0x9A46, 0xF67A, 0x9A48, 0xF77D, 0x9A49, 0xF7A1, 0x9A4A, 0xF77E, 0x9A4C, 0xF77B, 0x9A4D, 0xC5BB, + 0x9A4E, 0xF778, 0x9A4F, 0xF77C, 0x9A50, 0xF7A3, 0x9A52, 0xF7A2, 0x9A53, 0xF779, 0x9A54, 0xF77A, 0x9A55, 0xC5BA, 0x9A56, 0xF852, + 0x9A57, 0xC5E7, 0x9A59, 0xF853, 0x9A5A, 0xC5E5, 0x9A5B, 0xC5E6, 0x9A5E, 0xF8D3, 0x9A5F, 0xC64A, 0x9A60, 0xF976, 0x9A62, 0xC66A, + 0x9A64, 0xF9B3, 0x9A65, 0xC66B, 0x9A66, 0xF9B4, 0x9A67, 0xF9B5, 0x9A68, 0xF9C3, 0x9A69, 0xF9C2, 0x9A6A, 0xC67A, 0x9A6B, 0xF9CD, + 0x9AA8, 0xB0A9, 0x9AAB, 0xE0E9, 0x9AAD, 0xE0E8, 0x9AAF, 0xBBEA, 0x9AB0, 0xBBEB, 0x9AB1, 0xE4DA, 0x9AB3, 0xE8D2, 0x9AB4, 0xEC6C, + 0x9AB7, 0xBE75, 0x9AB8, 0xC065, 0x9AB9, 0xEC6A, 0x9ABB, 0xEC6D, 0x9ABC, 0xC066, 0x9ABE, 0xEF64, 0x9ABF, 0xEC6B, 0x9AC0, 0xF1B9, + 0x9AC1, 0xC34E, 0x9AC2, 0xF3C1, 0x9AC6, 0xF566, 0x9AC7, 0xF564, 0x9ACA, 0xF565, 0x9ACD, 0xF6A2, 0x9ACF, 0xC55C, 0x9AD0, 0xF7A4, + 0x9AD1, 0xC5EA, 0x9AD2, 0xC5BC, 0x9AD3, 0xC5E8, 0x9AD4, 0xC5E9, 0x9AD5, 0xF8D4, 0x9AD6, 0xC662, 0x9AD8, 0xB0AA, 0x9ADC, 0xF1BA, + 0x9ADF, 0xD449, 0x9AE1, 0xB9A6, 0x9AE3, 0xE4DB, 0x9AE6, 0xBBEC, 0x9AE7, 0xE4DC, 0x9AEB, 0xE8D4, 0x9AEC, 0xE8D3, 0x9AED, 0xC068, + 0x9AEE, 0xBE76, 0x9AEF, 0xBE77, 0x9AF1, 0xE8D7, 0x9AF2, 0xE8D6, 0x9AF3, 0xE8D5, 0x9AF6, 0xEC6E, 0x9AF7, 0xEC71, 0x9AF9, 0xEC70, + 0x9AFA, 0xEC6F, 0x9AFB, 0xC067, 0x9AFC, 0xEF68, 0x9AFD, 0xEF66, 0x9AFE, 0xEF65, 0x9B01, 0xEF67, 0x9B03, 0xC34F, 0x9B04, 0xF1BC, + 0x9B05, 0xF1BD, 0x9B06, 0xC350, 0x9B08, 0xF1BB, 0x9B0A, 0xF3C3, 0x9B0B, 0xF3C2, 0x9B0C, 0xF3C5, 0x9B0D, 0xC447, 0x9B0E, 0xF3C4, + 0x9B10, 0xF567, 0x9B11, 0xF569, 0x9B12, 0xF568, 0x9B15, 0xF6A3, 0x9B16, 0xF6A6, 0x9B17, 0xF6A4, 0x9B18, 0xF6A5, 0x9B19, 0xF7A5, + 0x9B1A, 0xC5BD, 0x9B1E, 0xF854, 0x9B1F, 0xF855, 0x9B20, 0xF856, 0x9B22, 0xC64B, 0x9B23, 0xC663, 0x9B24, 0xF9B6, 0x9B25, 0xB0AB, + 0x9B27, 0xBE78, 0x9B28, 0xC069, 0x9B29, 0xF1BE, 0x9B2B, 0xF7A6, 0x9B2E, 0xF9C4, 0x9B2F, 0xD44A, 0x9B31, 0xC67B, 0x9B32, 0xB0AC, + 0x9B33, 0xEC72, 0x9B35, 0xF1BF, 0x9B37, 0xF3C6, 0x9B3A, 0xF6A7, 0x9B3B, 0xF7A7, 0x9B3C, 0xB0AD, 0x9B3E, 0xE4DD, 0x9B3F, 0xE4DE, + 0x9B41, 0xBBED, 0x9B42, 0xBBEE, 0x9B43, 0xE8D9, 0x9B44, 0xBE7A, 0x9B45, 0xBE79, 0x9B46, 0xE8D8, 0x9B48, 0xEF69, 0x9B4A, 0xF1C0, + 0x9B4B, 0xF1C2, 0x9B4C, 0xF1C1, 0x9B4D, 0xC353, 0x9B4E, 0xC352, 0x9B4F, 0xC351, 0x9B51, 0xC55E, 0x9B52, 0xF6A8, 0x9B54, 0xC55D, + 0x9B55, 0xF7A9, 0x9B56, 0xF7A8, 0x9B58, 0xC64C, 0x9B59, 0xF8D5, 0x9B5A, 0xB3BD, 0x9B5B, 0xE0EA, 0x9B5F, 0xE4E1, 0x9B60, 0xE4DF, + 0x9B61, 0xE4E0, 0x9B64, 0xE8E2, 0x9B66, 0xE8DD, 0x9B67, 0xE8DA, 0x9B68, 0xE8E1, 0x9B6C, 0xE8E3, 0x9B6F, 0xBE7C, 0x9B70, 0xE8E0, + 0x9B71, 0xE8DC, 0x9B74, 0xE8DB, 0x9B75, 0xE8DF, 0x9B76, 0xE8DE, 0x9B77, 0xBE7B, 0x9B7A, 0xEC7D, 0x9B7B, 0xEC78, 0x9B7C, 0xEC76, + 0x9B7D, 0xECA1, 0x9B7E, 0xEC77, 0x9B80, 0xEC73, 0x9B82, 0xEC79, 0x9B85, 0xEC74, 0x9B86, 0xEF72, 0x9B87, 0xEC75, 0x9B88, 0xECA2, + 0x9B90, 0xEC7C, 0x9B91, 0xC06A, 0x9B92, 0xEC7B, 0x9B93, 0xEC7A, 0x9B95, 0xEC7E, 0x9B9A, 0xEF6A, 0x9B9B, 0xEF6D, 0x9B9E, 0xEF6C, + 0x9BA0, 0xEF74, 0x9BA1, 0xEF6F, 0x9BA2, 0xEF73, 0x9BA4, 0xEF71, 0x9BA5, 0xEF70, 0x9BA6, 0xEF6E, 0x9BA8, 0xEF6B, 0x9BAA, 0xC243, + 0x9BAB, 0xC242, 0x9BAD, 0xC244, 0x9BAE, 0xC241, 0x9BAF, 0xEF75, 0x9BB5, 0xF1C8, 0x9BB6, 0xF1CB, 0x9BB8, 0xF1C9, 0x9BB9, 0xF1CD, + 0x9BBD, 0xF1CE, 0x9BBF, 0xF1C6, 0x9BC0, 0xC358, 0x9BC1, 0xF1C7, 0x9BC3, 0xF1C5, 0x9BC4, 0xF1CC, 0x9BC6, 0xF1C4, 0x9BC7, 0xF1C3, + 0x9BC8, 0xC357, 0x9BC9, 0xC355, 0x9BCA, 0xC354, 0x9BD3, 0xF1CA, 0x9BD4, 0xF3CF, 0x9BD5, 0xF3D5, 0x9BD6, 0xC44A, 0x9BD7, 0xF3D0, + 0x9BD9, 0xF3D3, 0x9BDA, 0xF3D7, 0x9BDB, 0xC44B, 0x9BDC, 0xF3D2, 0x9BDE, 0xF3CA, 0x9BE0, 0xF3C9, 0x9BE1, 0xF3D6, 0x9BE2, 0xF3CD, + 0x9BE4, 0xF3CB, 0x9BE5, 0xF3D4, 0x9BE6, 0xF3CC, 0x9BE7, 0xC449, 0x9BE8, 0xC448, 0x9BEA, 0xF3C7, 0x9BEB, 0xF3C8, 0x9BEC, 0xF3D1, + 0x9BF0, 0xF3CE, 0x9BF7, 0xF56C, 0x9BF8, 0xF56F, 0x9BFD, 0xC356, 0x9C05, 0xF56D, 0x9C06, 0xF573, 0x9C07, 0xF571, 0x9C08, 0xF56B, + 0x9C09, 0xF576, 0x9C0B, 0xF56A, 0x9C0D, 0xC4CF, 0x9C0E, 0xF572, 0x9C12, 0xF56E, 0x9C13, 0xC4CE, 0x9C14, 0xF575, 0x9C17, 0xF574, + 0x9C1C, 0xF6AB, 0x9C1D, 0xF6AA, 0x9C21, 0xF6B1, 0x9C23, 0xF6AD, 0x9C24, 0xF6B0, 0x9C25, 0xC560, 0x9C28, 0xF6AE, 0x9C29, 0xF6AF, + 0x9C2B, 0xF6A9, 0x9C2C, 0xF6AC, 0x9C2D, 0xC55F, 0x9C31, 0xC5BF, 0x9C32, 0xF7B4, 0x9C33, 0xF7AF, 0x9C34, 0xF7B3, 0x9C36, 0xF7B6, + 0x9C37, 0xF7B2, 0x9C39, 0xF7AE, 0x9C3B, 0xC5C1, 0x9C3C, 0xF7B1, 0x9C3D, 0xF7B5, 0x9C3E, 0xC5C0, 0x9C3F, 0xF7AC, 0x9C40, 0xF570, + 0x9C41, 0xF7B0, 0x9C44, 0xF7AD, 0x9C46, 0xF7AA, 0x9C48, 0xF7AB, 0x9C49, 0xC5BE, 0x9C4A, 0xF85A, 0x9C4B, 0xF85C, 0x9C4C, 0xF85F, + 0x9C4D, 0xF85B, 0x9C4E, 0xF860, 0x9C50, 0xF859, 0x9C52, 0xF857, 0x9C54, 0xC5EB, 0x9C55, 0xF85D, 0x9C56, 0xC5ED, 0x9C57, 0xC5EC, + 0x9C58, 0xF858, 0x9C59, 0xF85E, 0x9C5E, 0xF8DA, 0x9C5F, 0xC64D, 0x9C60, 0xF8DB, 0x9C62, 0xF8D9, 0x9C63, 0xF8D6, 0x9C66, 0xF8D8, + 0x9C67, 0xF8D7, 0x9C68, 0xF95A, 0x9C6D, 0xF95C, 0x9C6E, 0xF95B, 0x9C71, 0xF979, 0x9C73, 0xF978, 0x9C74, 0xF977, 0x9C75, 0xF97A, + 0x9C77, 0xC673, 0x9C78, 0xC674, 0x9C79, 0xF9CA, 0x9C7A, 0xF9CE, 0x9CE5, 0xB3BE, 0x9CE6, 0xDCAF, 0x9CE7, 0xE0ED, 0x9CE9, 0xB9A7, + 0x9CEA, 0xE0EB, 0x9CED, 0xE0EC, 0x9CF1, 0xE4E2, 0x9CF2, 0xE4E3, 0x9CF3, 0xBBF1, 0x9CF4, 0xBBEF, 0x9CF5, 0xE4E4, 0x9CF6, 0xBBF0, + 0x9CF7, 0xE8E8, 0x9CF9, 0xE8EB, 0x9CFA, 0xE8E5, 0x9CFB, 0xE8EC, 0x9CFC, 0xE8E4, 0x9CFD, 0xE8E6, 0x9CFF, 0xE8E7, 0x9D00, 0xE8EA, + 0x9D03, 0xBEA1, 0x9D04, 0xE8EF, 0x9D05, 0xE8EE, 0x9D06, 0xBE7D, 0x9D07, 0xE8E9, 0x9D08, 0xE8ED, 0x9D09, 0xBE7E, 0x9D10, 0xECAC, + 0x9D12, 0xC06F, 0x9D14, 0xECA7, 0x9D15, 0xC06B, 0x9D17, 0xECA4, 0x9D18, 0xECAA, 0x9D19, 0xECAD, 0x9D1B, 0xC070, 0x9D1D, 0xECA9, + 0x9D1E, 0xECA6, 0x9D1F, 0xECAE, 0x9D20, 0xECA5, 0x9D22, 0xECAB, 0x9D23, 0xC06C, 0x9D25, 0xECA3, 0x9D26, 0xC06D, 0x9D28, 0xC06E, + 0x9D29, 0xECA8, 0x9D2D, 0xEFA9, 0x9D2E, 0xEF7A, 0x9D2F, 0xEF7B, 0x9D30, 0xEF7E, 0x9D31, 0xEF7C, 0x9D33, 0xEF76, 0x9D36, 0xEF79, + 0x9D37, 0xEFA5, 0x9D38, 0xEF7D, 0x9D3B, 0xC245, 0x9D3D, 0xEFA7, 0x9D3E, 0xEFA4, 0x9D3F, 0xC246, 0x9D40, 0xEFA6, 0x9D41, 0xEF77, + 0x9D42, 0xEFA2, 0x9D43, 0xEFA3, 0x9D45, 0xEFA1, 0x9D4A, 0xF1D2, 0x9D4B, 0xF1D4, 0x9D4C, 0xF1D7, 0x9D4F, 0xF1D1, 0x9D51, 0xC359, + 0x9D52, 0xF1D9, 0x9D53, 0xF1D0, 0x9D54, 0xF1DA, 0x9D56, 0xF1D6, 0x9D57, 0xF1D8, 0x9D58, 0xF1DC, 0x9D59, 0xF1D5, 0x9D5A, 0xF1DD, + 0x9D5B, 0xF1D3, 0x9D5C, 0xF1CF, 0x9D5D, 0xC35A, 0x9D5F, 0xF1DB, 0x9D60, 0xC35B, 0x9D61, 0xC44D, 0x9D67, 0xEF78, 0x9D68, 0xF3F1, + 0x9D69, 0xF3E8, 0x9D6A, 0xC44F, 0x9D6B, 0xF3E4, 0x9D6C, 0xC450, 0x9D6F, 0xF3ED, 0x9D70, 0xF3E7, 0x9D71, 0xF3DD, 0x9D72, 0xC44E, + 0x9D73, 0xF3EA, 0x9D74, 0xF3E5, 0x9D75, 0xF3E6, 0x9D77, 0xF3D8, 0x9D78, 0xF3DF, 0x9D79, 0xF3EE, 0x9D7B, 0xF3EB, 0x9D7D, 0xF3E3, + 0x9D7F, 0xF3EF, 0x9D80, 0xF3DE, 0x9D81, 0xF3D9, 0x9D82, 0xF3EC, 0x9D84, 0xF3DB, 0x9D85, 0xF3E9, 0x9D86, 0xF3E0, 0x9D87, 0xF3F0, + 0x9D88, 0xF3DC, 0x9D89, 0xC44C, 0x9D8A, 0xF3DA, 0x9D8B, 0xF3E1, 0x9D8C, 0xF3E2, 0x9D90, 0xF57D, 0x9D92, 0xF57B, 0x9D94, 0xF5A2, + 0x9D96, 0xF5AE, 0x9D97, 0xF5A5, 0x9D98, 0xF57C, 0x9D99, 0xF578, 0x9D9A, 0xF5A7, 0x9D9B, 0xF57E, 0x9D9C, 0xF5A3, 0x9D9D, 0xF57A, + 0x9D9E, 0xF5AA, 0x9D9F, 0xF577, 0x9DA0, 0xF5A1, 0x9DA1, 0xF5A6, 0x9DA2, 0xF5A8, 0x9DA3, 0xF5AB, 0x9DA4, 0xF579, 0x9DA6, 0xF5AF, + 0x9DA7, 0xF5B0, 0x9DA8, 0xF5A9, 0x9DA9, 0xF5AD, 0x9DAA, 0xF5A4, 0x9DAC, 0xF6C1, 0x9DAD, 0xF6C4, 0x9DAF, 0xC561, 0x9DB1, 0xF6C3, + 0x9DB2, 0xF6C8, 0x9DB3, 0xF6C6, 0x9DB4, 0xC562, 0x9DB5, 0xF6BD, 0x9DB6, 0xF6B3, 0x9DB7, 0xF6B2, 0x9DB8, 0xC564, 0x9DB9, 0xF6BF, + 0x9DBA, 0xF6C0, 0x9DBB, 0xF6BC, 0x9DBC, 0xF6B4, 0x9DBE, 0xF6B9, 0x9DBF, 0xF5AC, 0x9DC1, 0xF6B5, 0x9DC2, 0xC563, 0x9DC3, 0xF6BB, + 0x9DC5, 0xF6BA, 0x9DC7, 0xF6B6, 0x9DC8, 0xF6C2, 0x9DCA, 0xF6B7, 0x9DCB, 0xF7BB, 0x9DCC, 0xF6C5, 0x9DCD, 0xF6C7, 0x9DCE, 0xF6BE, + 0x9DCF, 0xF6B8, 0x9DD0, 0xF7BC, 0x9DD1, 0xF7BE, 0x9DD2, 0xF7B8, 0x9DD3, 0xC5C2, 0x9DD5, 0xF7C5, 0x9DD6, 0xF7C3, 0x9DD7, 0xC5C3, + 0x9DD8, 0xF7C2, 0x9DD9, 0xF7C1, 0x9DDA, 0xF7BA, 0x9DDB, 0xF7B7, 0x9DDC, 0xF7BD, 0x9DDD, 0xF7C6, 0x9DDE, 0xF7B9, 0x9DDF, 0xF7BF, + 0x9DE1, 0xF869, 0x9DE2, 0xF86E, 0x9DE3, 0xF864, 0x9DE4, 0xF867, 0x9DE5, 0xC5EE, 0x9DE6, 0xF86B, 0x9DE8, 0xF872, 0x9DE9, 0xF7C0, + 0x9DEB, 0xF865, 0x9DEC, 0xF86F, 0x9DED, 0xF873, 0x9DEE, 0xF86A, 0x9DEF, 0xF863, 0x9DF0, 0xF86D, 0x9DF2, 0xF86C, 0x9DF3, 0xF871, + 0x9DF4, 0xF870, 0x9DF5, 0xF7C4, 0x9DF6, 0xF868, 0x9DF7, 0xF862, 0x9DF8, 0xF866, 0x9DF9, 0xC64E, 0x9DFA, 0xC64F, 0x9DFB, 0xF861, + 0x9DFD, 0xF8E6, 0x9DFE, 0xF8DD, 0x9DFF, 0xF8E5, 0x9E00, 0xF8E2, 0x9E01, 0xF8E3, 0x9E02, 0xF8DC, 0x9E03, 0xF8DF, 0x9E04, 0xF8E7, + 0x9E05, 0xF8E1, 0x9E06, 0xF8E0, 0x9E07, 0xF8DE, 0x9E09, 0xF8E4, 0x9E0B, 0xF95D, 0x9E0D, 0xF95E, 0x9E0F, 0xF960, 0x9E10, 0xF95F, + 0x9E11, 0xF962, 0x9E12, 0xF961, 0x9E13, 0xF97C, 0x9E14, 0xF97B, 0x9E15, 0xF9B7, 0x9E17, 0xF9B8, 0x9E19, 0xF9C5, 0x9E1A, 0xC678, + 0x9E1B, 0xC67C, 0x9E1D, 0xF9CF, 0x9E1E, 0xC67D, 0x9E75, 0xB3BF, 0x9E79, 0xC4D0, 0x9E7A, 0xF6C9, 0x9E7C, 0xC650, 0x9E7D, 0xC651, + 0x9E7F, 0xB3C0, 0x9E80, 0xE0EE, 0x9E82, 0xB9A8, 0x9E83, 0xE8F0, 0x9E86, 0xECB0, 0x9E87, 0xECB1, 0x9E88, 0xECAF, 0x9E89, 0xEFAB, + 0x9E8A, 0xEFAA, 0x9E8B, 0xC247, 0x9E8C, 0xF1DF, 0x9E8D, 0xEFAC, 0x9E8E, 0xF1DE, 0x9E91, 0xF3F3, 0x9E92, 0xC451, 0x9E93, 0xC453, + 0x9E94, 0xF3F2, 0x9E97, 0xC452, 0x9E99, 0xF5B1, 0x9E9A, 0xF5B3, 0x9E9B, 0xF5B2, 0x9E9C, 0xF6CA, 0x9E9D, 0xC565, 0x9E9F, 0xC5EF, + 0x9EA0, 0xF8E8, 0x9EA1, 0xF963, 0x9EA4, 0xF9D2, 0x9EA5, 0xB3C1, 0x9EA7, 0xE4E5, 0x9EA9, 0xBEA2, 0x9EAD, 0xECB3, 0x9EAE, 0xECB2, + 0x9EB0, 0xEFAD, 0x9EB4, 0xC454, 0x9EB5, 0xC4D1, 0x9EB6, 0xF7C7, 0x9EB7, 0xF9CB, 0x9EBB, 0xB3C2, 0x9EBC, 0xBBF2, 0x9EBE, 0xBEA3, + 0x9EC0, 0xF3F4, 0x9EC2, 0xF874, 0x9EC3, 0xB6C0, 0x9EC8, 0xEFAE, 0x9ECC, 0xC664, 0x9ECD, 0xB6C1, 0x9ECE, 0xBEA4, 0x9ECF, 0xC248, + 0x9ED0, 0xF875, 0x9ED1, 0xB6C2, 0x9ED3, 0xE8F1, 0x9ED4, 0xC072, 0x9ED5, 0xECB4, 0x9ED6, 0xECB5, 0x9ED8, 0xC071, 0x9EDA, 0xEFAF, + 0x9EDB, 0xC24C, 0x9EDC, 0xC24A, 0x9EDD, 0xC24B, 0x9EDE, 0xC249, 0x9EDF, 0xF1E0, 0x9EE0, 0xC35C, 0x9EE4, 0xF5B5, 0x9EE5, 0xF5B4, + 0x9EE6, 0xF5B7, 0x9EE7, 0xF5B6, 0x9EE8, 0xC4D2, 0x9EEB, 0xF6CB, 0x9EED, 0xF6CD, 0x9EEE, 0xF6CC, 0x9EEF, 0xC566, 0x9EF0, 0xF7C8, + 0x9EF2, 0xF876, 0x9EF3, 0xF877, 0x9EF4, 0xC5F0, 0x9EF5, 0xF964, 0x9EF6, 0xF97D, 0x9EF7, 0xC675, 0x9EF9, 0xDCB0, 0x9EFA, 0xECB6, + 0x9EFB, 0xEFB0, 0x9EFC, 0xF3F5, 0x9EFD, 0xE0EF, 0x9EFF, 0xEFB1, 0x9F00, 0xF1E2, 0x9F01, 0xF1E1, 0x9F06, 0xF878, 0x9F07, 0xC652, + 0x9F09, 0xF965, 0x9F0A, 0xF97E, 0x9F0E, 0xB9A9, 0x9F0F, 0xE8F2, 0x9F10, 0xE8F3, 0x9F12, 0xECB7, 0x9F13, 0xB9AA, 0x9F15, 0xC35D, + 0x9F16, 0xF1E3, 0x9F18, 0xF6CF, 0x9F19, 0xC567, 0x9F1A, 0xF6D0, 0x9F1B, 0xF6CE, 0x9F1C, 0xF879, 0x9F1E, 0xF8E9, 0x9F20, 0xB9AB, + 0x9F22, 0xEFB4, 0x9F23, 0xEFB3, 0x9F24, 0xEFB2, 0x9F25, 0xF1E4, 0x9F28, 0xF1E8, 0x9F29, 0xF1E7, 0x9F2A, 0xF1E6, 0x9F2B, 0xF1E5, + 0x9F2C, 0xC35E, 0x9F2D, 0xF3F6, 0x9F2E, 0xF5B9, 0x9F2F, 0xC4D3, 0x9F30, 0xF5B8, 0x9F31, 0xF6D1, 0x9F32, 0xF7CB, 0x9F33, 0xF7CA, + 0x9F34, 0xC5C4, 0x9F35, 0xF7C9, 0x9F36, 0xF87C, 0x9F37, 0xF87B, 0x9F38, 0xF87A, 0x9F3B, 0xBBF3, 0x9F3D, 0xECB8, 0x9F3E, 0xC24D, + 0x9F40, 0xF3F7, 0x9F41, 0xF3F8, 0x9F42, 0xF7CC, 0x9F43, 0xF87D, 0x9F46, 0xF8EA, 0x9F47, 0xF966, 0x9F48, 0xF9B9, 0x9F49, 0xF9D4, + 0x9F4A, 0xBBF4, 0x9F4B, 0xC24E, 0x9F4C, 0xF1E9, 0x9F4D, 0xF3F9, 0x9F4E, 0xF6D2, 0x9F4F, 0xF87E, 0x9F52, 0xBEA6, 0x9F54, 0xEFB5, + 0x9F55, 0xF1EA, 0x9F56, 0xF3FA, 0x9F57, 0xF3FB, 0x9F58, 0xF3FC, 0x9F59, 0xF5BE, 0x9F5B, 0xF5BA, 0x9F5C, 0xC568, 0x9F5D, 0xF5BD, + 0x9F5E, 0xF5BC, 0x9F5F, 0xC4D4, 0x9F60, 0xF5BB, 0x9F61, 0xC4D6, 0x9F63, 0xC4D5, 0x9F64, 0xF6D4, 0x9F65, 0xF6D3, 0x9F66, 0xC569, + 0x9F67, 0xC56A, 0x9F6A, 0xC5C6, 0x9F6B, 0xF7CD, 0x9F6C, 0xC5C5, 0x9F6E, 0xF8A3, 0x9F6F, 0xF8A4, 0x9F70, 0xF8A2, 0x9F71, 0xF8A1, + 0x9F72, 0xC654, 0x9F74, 0xF8EB, 0x9F75, 0xF8EC, 0x9F76, 0xF8ED, 0x9F77, 0xC653, 0x9F78, 0xF967, 0x9F79, 0xF96A, 0x9F7A, 0xF969, + 0x9F7B, 0xF968, 0x9F7E, 0xF9D3, 0x9F8D, 0xC073, 0x9F90, 0xC365, 0x9F91, 0xF5BF, 0x9F92, 0xF6D5, 0x9F94, 0xC5C7, 0x9F95, 0xF7CE, + 0x9F98, 0xF9D5, 0x9F9C, 0xC074, 0x9FA0, 0xEFB6, 0x9FA2, 0xF7CF, 0x9FA4, 0xF9A1, 0xFA0C, 0xC94A, 0xFA0D, 0xDDFC, 0xFE30, 0xA14A, + 0xFE31, 0xA157, 0xFE33, 0xA159, 0xFE34, 0xA15B, 0xFE35, 0xA15F, 0xFE36, 0xA160, 0xFE37, 0xA163, 0xFE38, 0xA164, 0xFE39, 0xA167, + 0xFE3A, 0xA168, 0xFE3B, 0xA16B, 0xFE3C, 0xA16C, 0xFE3D, 0xA16F, 0xFE3E, 0xA170, 0xFE3F, 0xA173, 0xFE40, 0xA174, 0xFE41, 0xA177, + 0xFE42, 0xA178, 0xFE43, 0xA17B, 0xFE44, 0xA17C, 0xFE49, 0xA1C6, 0xFE4A, 0xA1C7, 0xFE4B, 0xA1CA, 0xFE4C, 0xA1CB, 0xFE4D, 0xA1C8, + 0xFE4E, 0xA1C9, 0xFE4F, 0xA15C, 0xFE50, 0xA14D, 0xFE51, 0xA14E, 0xFE52, 0xA14F, 0xFE54, 0xA151, 0xFE55, 0xA152, 0xFE56, 0xA153, + 0xFE57, 0xA154, 0xFE59, 0xA17D, 0xFE5A, 0xA17E, 0xFE5B, 0xA1A1, 0xFE5C, 0xA1A2, 0xFE5D, 0xA1A3, 0xFE5E, 0xA1A4, 0xFE5F, 0xA1CC, + 0xFE60, 0xA1CD, 0xFE61, 0xA1CE, 0xFE62, 0xA1DE, 0xFE63, 0xA1DF, 0xFE64, 0xA1E0, 0xFE65, 0xA1E1, 0xFE66, 0xA1E2, 0xFE68, 0xA242, + 0xFE69, 0xA24C, 0xFE6A, 0xA24D, 0xFE6B, 0xA24E, 0xFF01, 0xA149, 0xFF03, 0xA1AD, 0xFF04, 0xA243, 0xFF05, 0xA248, 0xFF06, 0xA1AE, + 0xFF08, 0xA15D, 0xFF09, 0xA15E, 0xFF0A, 0xA1AF, 0xFF0B, 0xA1CF, 0xFF0C, 0xA141, 0xFF0D, 0xA1D0, 0xFF0E, 0xA144, 0xFF0F, 0xA1FE, + 0xFF10, 0xA2AF, 0xFF11, 0xA2B0, 0xFF12, 0xA2B1, 0xFF13, 0xA2B2, 0xFF14, 0xA2B3, 0xFF15, 0xA2B4, 0xFF16, 0xA2B5, 0xFF17, 0xA2B6, + 0xFF18, 0xA2B7, 0xFF19, 0xA2B8, 0xFF1A, 0xA147, 0xFF1B, 0xA146, 0xFF1C, 0xA1D5, 0xFF1D, 0xA1D7, 0xFF1E, 0xA1D6, 0xFF1F, 0xA148, + 0xFF20, 0xA249, 0xFF21, 0xA2CF, 0xFF22, 0xA2D0, 0xFF23, 0xA2D1, 0xFF24, 0xA2D2, 0xFF25, 0xA2D3, 0xFF26, 0xA2D4, 0xFF27, 0xA2D5, + 0xFF28, 0xA2D6, 0xFF29, 0xA2D7, 0xFF2A, 0xA2D8, 0xFF2B, 0xA2D9, 0xFF2C, 0xA2DA, 0xFF2D, 0xA2DB, 0xFF2E, 0xA2DC, 0xFF2F, 0xA2DD, + 0xFF30, 0xA2DE, 0xFF31, 0xA2DF, 0xFF32, 0xA2E0, 0xFF33, 0xA2E1, 0xFF34, 0xA2E2, 0xFF35, 0xA2E3, 0xFF36, 0xA2E4, 0xFF37, 0xA2E5, + 0xFF38, 0xA2E6, 0xFF39, 0xA2E7, 0xFF3A, 0xA2E8, 0xFF3C, 0xA240, 0xFF3F, 0xA1C4, 0xFF41, 0xA2E9, 0xFF42, 0xA2EA, 0xFF43, 0xA2EB, + 0xFF44, 0xA2EC, 0xFF45, 0xA2ED, 0xFF46, 0xA2EE, 0xFF47, 0xA2EF, 0xFF48, 0xA2F0, 0xFF49, 0xA2F1, 0xFF4A, 0xA2F2, 0xFF4B, 0xA2F3, + 0xFF4C, 0xA2F4, 0xFF4D, 0xA2F5, 0xFF4E, 0xA2F6, 0xFF4F, 0xA2F7, 0xFF50, 0xA2F8, 0xFF51, 0xA2F9, 0xFF52, 0xA2FA, 0xFF53, 0xA2FB, + 0xFF54, 0xA2FC, 0xFF55, 0xA2FD, 0xFF56, 0xA2FE, 0xFF57, 0xA340, 0xFF58, 0xA341, 0xFF59, 0xA342, 0xFF5A, 0xA343, 0xFF5B, 0xA161, + 0xFF5C, 0xA155, 0xFF5D, 0xA162, 0xFF5E, 0xA1E3, 0xFFE0, 0xA246, 0xFFE1, 0xA247, 0xFFE3, 0xA1C3, 0xFFE5, 0xA244, 0, 0 +}; + +static const WCHAR oem2uni950[] = { /* Big5 --> Unicode pairs */ + 0xA140, 0x3000, 0xA141, 0xFF0C, 0xA142, 0x3001, 0xA143, 0x3002, 0xA144, 0xFF0E, 0xA145, 0x2027, 0xA146, 0xFF1B, 0xA147, 0xFF1A, + 0xA148, 0xFF1F, 0xA149, 0xFF01, 0xA14A, 0xFE30, 0xA14B, 0x2026, 0xA14C, 0x2025, 0xA14D, 0xFE50, 0xA14E, 0xFE51, 0xA14F, 0xFE52, + 0xA150, 0x00B7, 0xA151, 0xFE54, 0xA152, 0xFE55, 0xA153, 0xFE56, 0xA154, 0xFE57, 0xA155, 0xFF5C, 0xA156, 0x2013, 0xA157, 0xFE31, + 0xA158, 0x2014, 0xA159, 0xFE33, 0xA15A, 0x2574, 0xA15B, 0xFE34, 0xA15C, 0xFE4F, 0xA15D, 0xFF08, 0xA15E, 0xFF09, 0xA15F, 0xFE35, + 0xA160, 0xFE36, 0xA161, 0xFF5B, 0xA162, 0xFF5D, 0xA163, 0xFE37, 0xA164, 0xFE38, 0xA165, 0x3014, 0xA166, 0x3015, 0xA167, 0xFE39, + 0xA168, 0xFE3A, 0xA169, 0x3010, 0xA16A, 0x3011, 0xA16B, 0xFE3B, 0xA16C, 0xFE3C, 0xA16D, 0x300A, 0xA16E, 0x300B, 0xA16F, 0xFE3D, + 0xA170, 0xFE3E, 0xA171, 0x3008, 0xA172, 0x3009, 0xA173, 0xFE3F, 0xA174, 0xFE40, 0xA175, 0x300C, 0xA176, 0x300D, 0xA177, 0xFE41, + 0xA178, 0xFE42, 0xA179, 0x300E, 0xA17A, 0x300F, 0xA17B, 0xFE43, 0xA17C, 0xFE44, 0xA17D, 0xFE59, 0xA17E, 0xFE5A, 0xA1A1, 0xFE5B, + 0xA1A2, 0xFE5C, 0xA1A3, 0xFE5D, 0xA1A4, 0xFE5E, 0xA1A5, 0x2018, 0xA1A6, 0x2019, 0xA1A7, 0x201C, 0xA1A8, 0x201D, 0xA1A9, 0x301D, + 0xA1AA, 0x301E, 0xA1AB, 0x2035, 0xA1AC, 0x2032, 0xA1AD, 0xFF03, 0xA1AE, 0xFF06, 0xA1AF, 0xFF0A, 0xA1B0, 0x203B, 0xA1B1, 0x00A7, + 0xA1B2, 0x3003, 0xA1B3, 0x25CB, 0xA1B4, 0x25CF, 0xA1B5, 0x25B3, 0xA1B6, 0x25B2, 0xA1B7, 0x25CE, 0xA1B8, 0x2606, 0xA1B9, 0x2605, + 0xA1BA, 0x25C7, 0xA1BB, 0x25C6, 0xA1BC, 0x25A1, 0xA1BD, 0x25A0, 0xA1BE, 0x25BD, 0xA1BF, 0x25BC, 0xA1C0, 0x32A3, 0xA1C1, 0x2105, + 0xA1C2, 0x00AF, 0xA1C3, 0xFFE3, 0xA1C4, 0xFF3F, 0xA1C5, 0x02CD, 0xA1C6, 0xFE49, 0xA1C7, 0xFE4A, 0xA1C8, 0xFE4D, 0xA1C9, 0xFE4E, + 0xA1CA, 0xFE4B, 0xA1CB, 0xFE4C, 0xA1CC, 0xFE5F, 0xA1CD, 0xFE60, 0xA1CE, 0xFE61, 0xA1CF, 0xFF0B, 0xA1D0, 0xFF0D, 0xA1D1, 0x00D7, + 0xA1D2, 0x00F7, 0xA1D3, 0x00B1, 0xA1D4, 0x221A, 0xA1D5, 0xFF1C, 0xA1D6, 0xFF1E, 0xA1D7, 0xFF1D, 0xA1D8, 0x2266, 0xA1D9, 0x2267, + 0xA1DA, 0x2260, 0xA1DB, 0x221E, 0xA1DC, 0x2252, 0xA1DD, 0x2261, 0xA1DE, 0xFE62, 0xA1DF, 0xFE63, 0xA1E0, 0xFE64, 0xA1E1, 0xFE65, + 0xA1E2, 0xFE66, 0xA1E3, 0xFF5E, 0xA1E4, 0x2229, 0xA1E5, 0x222A, 0xA1E6, 0x22A5, 0xA1E7, 0x2220, 0xA1E8, 0x221F, 0xA1E9, 0x22BF, + 0xA1EA, 0x33D2, 0xA1EB, 0x33D1, 0xA1EC, 0x222B, 0xA1ED, 0x222E, 0xA1EE, 0x2235, 0xA1EF, 0x2234, 0xA1F0, 0x2640, 0xA1F1, 0x2642, + 0xA1F2, 0x2295, 0xA1F3, 0x2299, 0xA1F4, 0x2191, 0xA1F5, 0x2193, 0xA1F6, 0x2190, 0xA1F7, 0x2192, 0xA1F8, 0x2196, 0xA1F9, 0x2197, + 0xA1FA, 0x2199, 0xA1FB, 0x2198, 0xA1FC, 0x2225, 0xA1FD, 0x2223, 0xA1FE, 0xFF0F, 0xA240, 0xFF3C, 0xA241, 0x2215, 0xA242, 0xFE68, + 0xA243, 0xFF04, 0xA244, 0xFFE5, 0xA245, 0x3012, 0xA246, 0xFFE0, 0xA247, 0xFFE1, 0xA248, 0xFF05, 0xA249, 0xFF20, 0xA24A, 0x2103, + 0xA24B, 0x2109, 0xA24C, 0xFE69, 0xA24D, 0xFE6A, 0xA24E, 0xFE6B, 0xA24F, 0x33D5, 0xA250, 0x339C, 0xA251, 0x339D, 0xA252, 0x339E, + 0xA253, 0x33CE, 0xA254, 0x33A1, 0xA255, 0x338E, 0xA256, 0x338F, 0xA257, 0x33C4, 0xA258, 0x00B0, 0xA259, 0x5159, 0xA25A, 0x515B, + 0xA25B, 0x515E, 0xA25C, 0x515D, 0xA25D, 0x5161, 0xA25E, 0x5163, 0xA25F, 0x55E7, 0xA260, 0x74E9, 0xA261, 0x7CCE, 0xA262, 0x2581, + 0xA263, 0x2582, 0xA264, 0x2583, 0xA265, 0x2584, 0xA266, 0x2585, 0xA267, 0x2586, 0xA268, 0x2587, 0xA269, 0x2588, 0xA26A, 0x258F, + 0xA26B, 0x258E, 0xA26C, 0x258D, 0xA26D, 0x258C, 0xA26E, 0x258B, 0xA26F, 0x258A, 0xA270, 0x2589, 0xA271, 0x253C, 0xA272, 0x2534, + 0xA273, 0x252C, 0xA274, 0x2524, 0xA275, 0x251C, 0xA276, 0x2594, 0xA277, 0x2500, 0xA278, 0x2502, 0xA279, 0x2595, 0xA27A, 0x250C, + 0xA27B, 0x2510, 0xA27C, 0x2514, 0xA27D, 0x2518, 0xA27E, 0x256D, 0xA2A1, 0x256E, 0xA2A2, 0x2570, 0xA2A3, 0x256F, 0xA2A4, 0x2550, + 0xA2A5, 0x255E, 0xA2A6, 0x256A, 0xA2A7, 0x2561, 0xA2A8, 0x25E2, 0xA2A9, 0x25E3, 0xA2AA, 0x25E5, 0xA2AB, 0x25E4, 0xA2AC, 0x2571, + 0xA2AD, 0x2572, 0xA2AE, 0x2573, 0xA2AF, 0xFF10, 0xA2B0, 0xFF11, 0xA2B1, 0xFF12, 0xA2B2, 0xFF13, 0xA2B3, 0xFF14, 0xA2B4, 0xFF15, + 0xA2B5, 0xFF16, 0xA2B6, 0xFF17, 0xA2B7, 0xFF18, 0xA2B8, 0xFF19, 0xA2B9, 0x2160, 0xA2BA, 0x2161, 0xA2BB, 0x2162, 0xA2BC, 0x2163, + 0xA2BD, 0x2164, 0xA2BE, 0x2165, 0xA2BF, 0x2166, 0xA2C0, 0x2167, 0xA2C1, 0x2168, 0xA2C2, 0x2169, 0xA2C3, 0x3021, 0xA2C4, 0x3022, + 0xA2C5, 0x3023, 0xA2C6, 0x3024, 0xA2C7, 0x3025, 0xA2C8, 0x3026, 0xA2C9, 0x3027, 0xA2CA, 0x3028, 0xA2CB, 0x3029, 0xA2CC, 0x5341, + 0xA2CD, 0x5344, 0xA2CE, 0x5345, 0xA2CF, 0xFF21, 0xA2D0, 0xFF22, 0xA2D1, 0xFF23, 0xA2D2, 0xFF24, 0xA2D3, 0xFF25, 0xA2D4, 0xFF26, + 0xA2D5, 0xFF27, 0xA2D6, 0xFF28, 0xA2D7, 0xFF29, 0xA2D8, 0xFF2A, 0xA2D9, 0xFF2B, 0xA2DA, 0xFF2C, 0xA2DB, 0xFF2D, 0xA2DC, 0xFF2E, + 0xA2DD, 0xFF2F, 0xA2DE, 0xFF30, 0xA2DF, 0xFF31, 0xA2E0, 0xFF32, 0xA2E1, 0xFF33, 0xA2E2, 0xFF34, 0xA2E3, 0xFF35, 0xA2E4, 0xFF36, + 0xA2E5, 0xFF37, 0xA2E6, 0xFF38, 0xA2E7, 0xFF39, 0xA2E8, 0xFF3A, 0xA2E9, 0xFF41, 0xA2EA, 0xFF42, 0xA2EB, 0xFF43, 0xA2EC, 0xFF44, + 0xA2ED, 0xFF45, 0xA2EE, 0xFF46, 0xA2EF, 0xFF47, 0xA2F0, 0xFF48, 0xA2F1, 0xFF49, 0xA2F2, 0xFF4A, 0xA2F3, 0xFF4B, 0xA2F4, 0xFF4C, + 0xA2F5, 0xFF4D, 0xA2F6, 0xFF4E, 0xA2F7, 0xFF4F, 0xA2F8, 0xFF50, 0xA2F9, 0xFF51, 0xA2FA, 0xFF52, 0xA2FB, 0xFF53, 0xA2FC, 0xFF54, + 0xA2FD, 0xFF55, 0xA2FE, 0xFF56, 0xA340, 0xFF57, 0xA341, 0xFF58, 0xA342, 0xFF59, 0xA343, 0xFF5A, 0xA344, 0x0391, 0xA345, 0x0392, + 0xA346, 0x0393, 0xA347, 0x0394, 0xA348, 0x0395, 0xA349, 0x0396, 0xA34A, 0x0397, 0xA34B, 0x0398, 0xA34C, 0x0399, 0xA34D, 0x039A, + 0xA34E, 0x039B, 0xA34F, 0x039C, 0xA350, 0x039D, 0xA351, 0x039E, 0xA352, 0x039F, 0xA353, 0x03A0, 0xA354, 0x03A1, 0xA355, 0x03A3, + 0xA356, 0x03A4, 0xA357, 0x03A5, 0xA358, 0x03A6, 0xA359, 0x03A7, 0xA35A, 0x03A8, 0xA35B, 0x03A9, 0xA35C, 0x03B1, 0xA35D, 0x03B2, + 0xA35E, 0x03B3, 0xA35F, 0x03B4, 0xA360, 0x03B5, 0xA361, 0x03B6, 0xA362, 0x03B7, 0xA363, 0x03B8, 0xA364, 0x03B9, 0xA365, 0x03BA, + 0xA366, 0x03BB, 0xA367, 0x03BC, 0xA368, 0x03BD, 0xA369, 0x03BE, 0xA36A, 0x03BF, 0xA36B, 0x03C0, 0xA36C, 0x03C1, 0xA36D, 0x03C3, + 0xA36E, 0x03C4, 0xA36F, 0x03C5, 0xA370, 0x03C6, 0xA371, 0x03C7, 0xA372, 0x03C8, 0xA373, 0x03C9, 0xA374, 0x3105, 0xA375, 0x3106, + 0xA376, 0x3107, 0xA377, 0x3108, 0xA378, 0x3109, 0xA379, 0x310A, 0xA37A, 0x310B, 0xA37B, 0x310C, 0xA37C, 0x310D, 0xA37D, 0x310E, + 0xA37E, 0x310F, 0xA3A1, 0x3110, 0xA3A2, 0x3111, 0xA3A3, 0x3112, 0xA3A4, 0x3113, 0xA3A5, 0x3114, 0xA3A6, 0x3115, 0xA3A7, 0x3116, + 0xA3A8, 0x3117, 0xA3A9, 0x3118, 0xA3AA, 0x3119, 0xA3AB, 0x311A, 0xA3AC, 0x311B, 0xA3AD, 0x311C, 0xA3AE, 0x311D, 0xA3AF, 0x311E, + 0xA3B0, 0x311F, 0xA3B1, 0x3120, 0xA3B2, 0x3121, 0xA3B3, 0x3122, 0xA3B4, 0x3123, 0xA3B5, 0x3124, 0xA3B6, 0x3125, 0xA3B7, 0x3126, + 0xA3B8, 0x3127, 0xA3B9, 0x3128, 0xA3BA, 0x3129, 0xA3BB, 0x02D9, 0xA3BC, 0x02C9, 0xA3BD, 0x02CA, 0xA3BE, 0x02C7, 0xA3BF, 0x02CB, + 0xA3E1, 0x20AC, 0xA440, 0x4E00, 0xA441, 0x4E59, 0xA442, 0x4E01, 0xA443, 0x4E03, 0xA444, 0x4E43, 0xA445, 0x4E5D, 0xA446, 0x4E86, + 0xA447, 0x4E8C, 0xA448, 0x4EBA, 0xA449, 0x513F, 0xA44A, 0x5165, 0xA44B, 0x516B, 0xA44C, 0x51E0, 0xA44D, 0x5200, 0xA44E, 0x5201, + 0xA44F, 0x529B, 0xA450, 0x5315, 0xA451, 0x5341, 0xA452, 0x535C, 0xA453, 0x53C8, 0xA454, 0x4E09, 0xA455, 0x4E0B, 0xA456, 0x4E08, + 0xA457, 0x4E0A, 0xA458, 0x4E2B, 0xA459, 0x4E38, 0xA45A, 0x51E1, 0xA45B, 0x4E45, 0xA45C, 0x4E48, 0xA45D, 0x4E5F, 0xA45E, 0x4E5E, + 0xA45F, 0x4E8E, 0xA460, 0x4EA1, 0xA461, 0x5140, 0xA462, 0x5203, 0xA463, 0x52FA, 0xA464, 0x5343, 0xA465, 0x53C9, 0xA466, 0x53E3, + 0xA467, 0x571F, 0xA468, 0x58EB, 0xA469, 0x5915, 0xA46A, 0x5927, 0xA46B, 0x5973, 0xA46C, 0x5B50, 0xA46D, 0x5B51, 0xA46E, 0x5B53, + 0xA46F, 0x5BF8, 0xA470, 0x5C0F, 0xA471, 0x5C22, 0xA472, 0x5C38, 0xA473, 0x5C71, 0xA474, 0x5DDD, 0xA475, 0x5DE5, 0xA476, 0x5DF1, + 0xA477, 0x5DF2, 0xA478, 0x5DF3, 0xA479, 0x5DFE, 0xA47A, 0x5E72, 0xA47B, 0x5EFE, 0xA47C, 0x5F0B, 0xA47D, 0x5F13, 0xA47E, 0x624D, + 0xA4A1, 0x4E11, 0xA4A2, 0x4E10, 0xA4A3, 0x4E0D, 0xA4A4, 0x4E2D, 0xA4A5, 0x4E30, 0xA4A6, 0x4E39, 0xA4A7, 0x4E4B, 0xA4A8, 0x5C39, + 0xA4A9, 0x4E88, 0xA4AA, 0x4E91, 0xA4AB, 0x4E95, 0xA4AC, 0x4E92, 0xA4AD, 0x4E94, 0xA4AE, 0x4EA2, 0xA4AF, 0x4EC1, 0xA4B0, 0x4EC0, + 0xA4B1, 0x4EC3, 0xA4B2, 0x4EC6, 0xA4B3, 0x4EC7, 0xA4B4, 0x4ECD, 0xA4B5, 0x4ECA, 0xA4B6, 0x4ECB, 0xA4B7, 0x4EC4, 0xA4B8, 0x5143, + 0xA4B9, 0x5141, 0xA4BA, 0x5167, 0xA4BB, 0x516D, 0xA4BC, 0x516E, 0xA4BD, 0x516C, 0xA4BE, 0x5197, 0xA4BF, 0x51F6, 0xA4C0, 0x5206, + 0xA4C1, 0x5207, 0xA4C2, 0x5208, 0xA4C3, 0x52FB, 0xA4C4, 0x52FE, 0xA4C5, 0x52FF, 0xA4C6, 0x5316, 0xA4C7, 0x5339, 0xA4C8, 0x5348, + 0xA4C9, 0x5347, 0xA4CA, 0x5345, 0xA4CB, 0x535E, 0xA4CC, 0x5384, 0xA4CD, 0x53CB, 0xA4CE, 0x53CA, 0xA4CF, 0x53CD, 0xA4D0, 0x58EC, + 0xA4D1, 0x5929, 0xA4D2, 0x592B, 0xA4D3, 0x592A, 0xA4D4, 0x592D, 0xA4D5, 0x5B54, 0xA4D6, 0x5C11, 0xA4D7, 0x5C24, 0xA4D8, 0x5C3A, + 0xA4D9, 0x5C6F, 0xA4DA, 0x5DF4, 0xA4DB, 0x5E7B, 0xA4DC, 0x5EFF, 0xA4DD, 0x5F14, 0xA4DE, 0x5F15, 0xA4DF, 0x5FC3, 0xA4E0, 0x6208, + 0xA4E1, 0x6236, 0xA4E2, 0x624B, 0xA4E3, 0x624E, 0xA4E4, 0x652F, 0xA4E5, 0x6587, 0xA4E6, 0x6597, 0xA4E7, 0x65A4, 0xA4E8, 0x65B9, + 0xA4E9, 0x65E5, 0xA4EA, 0x66F0, 0xA4EB, 0x6708, 0xA4EC, 0x6728, 0xA4ED, 0x6B20, 0xA4EE, 0x6B62, 0xA4EF, 0x6B79, 0xA4F0, 0x6BCB, + 0xA4F1, 0x6BD4, 0xA4F2, 0x6BDB, 0xA4F3, 0x6C0F, 0xA4F4, 0x6C34, 0xA4F5, 0x706B, 0xA4F6, 0x722A, 0xA4F7, 0x7236, 0xA4F8, 0x723B, + 0xA4F9, 0x7247, 0xA4FA, 0x7259, 0xA4FB, 0x725B, 0xA4FC, 0x72AC, 0xA4FD, 0x738B, 0xA4FE, 0x4E19, 0xA540, 0x4E16, 0xA541, 0x4E15, + 0xA542, 0x4E14, 0xA543, 0x4E18, 0xA544, 0x4E3B, 0xA545, 0x4E4D, 0xA546, 0x4E4F, 0xA547, 0x4E4E, 0xA548, 0x4EE5, 0xA549, 0x4ED8, + 0xA54A, 0x4ED4, 0xA54B, 0x4ED5, 0xA54C, 0x4ED6, 0xA54D, 0x4ED7, 0xA54E, 0x4EE3, 0xA54F, 0x4EE4, 0xA550, 0x4ED9, 0xA551, 0x4EDE, + 0xA552, 0x5145, 0xA553, 0x5144, 0xA554, 0x5189, 0xA555, 0x518A, 0xA556, 0x51AC, 0xA557, 0x51F9, 0xA558, 0x51FA, 0xA559, 0x51F8, + 0xA55A, 0x520A, 0xA55B, 0x52A0, 0xA55C, 0x529F, 0xA55D, 0x5305, 0xA55E, 0x5306, 0xA55F, 0x5317, 0xA560, 0x531D, 0xA561, 0x4EDF, + 0xA562, 0x534A, 0xA563, 0x5349, 0xA564, 0x5361, 0xA565, 0x5360, 0xA566, 0x536F, 0xA567, 0x536E, 0xA568, 0x53BB, 0xA569, 0x53EF, + 0xA56A, 0x53E4, 0xA56B, 0x53F3, 0xA56C, 0x53EC, 0xA56D, 0x53EE, 0xA56E, 0x53E9, 0xA56F, 0x53E8, 0xA570, 0x53FC, 0xA571, 0x53F8, + 0xA572, 0x53F5, 0xA573, 0x53EB, 0xA574, 0x53E6, 0xA575, 0x53EA, 0xA576, 0x53F2, 0xA577, 0x53F1, 0xA578, 0x53F0, 0xA579, 0x53E5, + 0xA57A, 0x53ED, 0xA57B, 0x53FB, 0xA57C, 0x56DB, 0xA57D, 0x56DA, 0xA57E, 0x5916, 0xA5A1, 0x592E, 0xA5A2, 0x5931, 0xA5A3, 0x5974, + 0xA5A4, 0x5976, 0xA5A5, 0x5B55, 0xA5A6, 0x5B83, 0xA5A7, 0x5C3C, 0xA5A8, 0x5DE8, 0xA5A9, 0x5DE7, 0xA5AA, 0x5DE6, 0xA5AB, 0x5E02, + 0xA5AC, 0x5E03, 0xA5AD, 0x5E73, 0xA5AE, 0x5E7C, 0xA5AF, 0x5F01, 0xA5B0, 0x5F18, 0xA5B1, 0x5F17, 0xA5B2, 0x5FC5, 0xA5B3, 0x620A, + 0xA5B4, 0x6253, 0xA5B5, 0x6254, 0xA5B6, 0x6252, 0xA5B7, 0x6251, 0xA5B8, 0x65A5, 0xA5B9, 0x65E6, 0xA5BA, 0x672E, 0xA5BB, 0x672C, + 0xA5BC, 0x672A, 0xA5BD, 0x672B, 0xA5BE, 0x672D, 0xA5BF, 0x6B63, 0xA5C0, 0x6BCD, 0xA5C1, 0x6C11, 0xA5C2, 0x6C10, 0xA5C3, 0x6C38, + 0xA5C4, 0x6C41, 0xA5C5, 0x6C40, 0xA5C6, 0x6C3E, 0xA5C7, 0x72AF, 0xA5C8, 0x7384, 0xA5C9, 0x7389, 0xA5CA, 0x74DC, 0xA5CB, 0x74E6, + 0xA5CC, 0x7518, 0xA5CD, 0x751F, 0xA5CE, 0x7528, 0xA5CF, 0x7529, 0xA5D0, 0x7530, 0xA5D1, 0x7531, 0xA5D2, 0x7532, 0xA5D3, 0x7533, + 0xA5D4, 0x758B, 0xA5D5, 0x767D, 0xA5D6, 0x76AE, 0xA5D7, 0x76BF, 0xA5D8, 0x76EE, 0xA5D9, 0x77DB, 0xA5DA, 0x77E2, 0xA5DB, 0x77F3, + 0xA5DC, 0x793A, 0xA5DD, 0x79BE, 0xA5DE, 0x7A74, 0xA5DF, 0x7ACB, 0xA5E0, 0x4E1E, 0xA5E1, 0x4E1F, 0xA5E2, 0x4E52, 0xA5E3, 0x4E53, + 0xA5E4, 0x4E69, 0xA5E5, 0x4E99, 0xA5E6, 0x4EA4, 0xA5E7, 0x4EA6, 0xA5E8, 0x4EA5, 0xA5E9, 0x4EFF, 0xA5EA, 0x4F09, 0xA5EB, 0x4F19, + 0xA5EC, 0x4F0A, 0xA5ED, 0x4F15, 0xA5EE, 0x4F0D, 0xA5EF, 0x4F10, 0xA5F0, 0x4F11, 0xA5F1, 0x4F0F, 0xA5F2, 0x4EF2, 0xA5F3, 0x4EF6, + 0xA5F4, 0x4EFB, 0xA5F5, 0x4EF0, 0xA5F6, 0x4EF3, 0xA5F7, 0x4EFD, 0xA5F8, 0x4F01, 0xA5F9, 0x4F0B, 0xA5FA, 0x5149, 0xA5FB, 0x5147, + 0xA5FC, 0x5146, 0xA5FD, 0x5148, 0xA5FE, 0x5168, 0xA640, 0x5171, 0xA641, 0x518D, 0xA642, 0x51B0, 0xA643, 0x5217, 0xA644, 0x5211, + 0xA645, 0x5212, 0xA646, 0x520E, 0xA647, 0x5216, 0xA648, 0x52A3, 0xA649, 0x5308, 0xA64A, 0x5321, 0xA64B, 0x5320, 0xA64C, 0x5370, + 0xA64D, 0x5371, 0xA64E, 0x5409, 0xA64F, 0x540F, 0xA650, 0x540C, 0xA651, 0x540A, 0xA652, 0x5410, 0xA653, 0x5401, 0xA654, 0x540B, + 0xA655, 0x5404, 0xA656, 0x5411, 0xA657, 0x540D, 0xA658, 0x5408, 0xA659, 0x5403, 0xA65A, 0x540E, 0xA65B, 0x5406, 0xA65C, 0x5412, + 0xA65D, 0x56E0, 0xA65E, 0x56DE, 0xA65F, 0x56DD, 0xA660, 0x5733, 0xA661, 0x5730, 0xA662, 0x5728, 0xA663, 0x572D, 0xA664, 0x572C, + 0xA665, 0x572F, 0xA666, 0x5729, 0xA667, 0x5919, 0xA668, 0x591A, 0xA669, 0x5937, 0xA66A, 0x5938, 0xA66B, 0x5984, 0xA66C, 0x5978, + 0xA66D, 0x5983, 0xA66E, 0x597D, 0xA66F, 0x5979, 0xA670, 0x5982, 0xA671, 0x5981, 0xA672, 0x5B57, 0xA673, 0x5B58, 0xA674, 0x5B87, + 0xA675, 0x5B88, 0xA676, 0x5B85, 0xA677, 0x5B89, 0xA678, 0x5BFA, 0xA679, 0x5C16, 0xA67A, 0x5C79, 0xA67B, 0x5DDE, 0xA67C, 0x5E06, + 0xA67D, 0x5E76, 0xA67E, 0x5E74, 0xA6A1, 0x5F0F, 0xA6A2, 0x5F1B, 0xA6A3, 0x5FD9, 0xA6A4, 0x5FD6, 0xA6A5, 0x620E, 0xA6A6, 0x620C, + 0xA6A7, 0x620D, 0xA6A8, 0x6210, 0xA6A9, 0x6263, 0xA6AA, 0x625B, 0xA6AB, 0x6258, 0xA6AC, 0x6536, 0xA6AD, 0x65E9, 0xA6AE, 0x65E8, + 0xA6AF, 0x65EC, 0xA6B0, 0x65ED, 0xA6B1, 0x66F2, 0xA6B2, 0x66F3, 0xA6B3, 0x6709, 0xA6B4, 0x673D, 0xA6B5, 0x6734, 0xA6B6, 0x6731, + 0xA6B7, 0x6735, 0xA6B8, 0x6B21, 0xA6B9, 0x6B64, 0xA6BA, 0x6B7B, 0xA6BB, 0x6C16, 0xA6BC, 0x6C5D, 0xA6BD, 0x6C57, 0xA6BE, 0x6C59, + 0xA6BF, 0x6C5F, 0xA6C0, 0x6C60, 0xA6C1, 0x6C50, 0xA6C2, 0x6C55, 0xA6C3, 0x6C61, 0xA6C4, 0x6C5B, 0xA6C5, 0x6C4D, 0xA6C6, 0x6C4E, + 0xA6C7, 0x7070, 0xA6C8, 0x725F, 0xA6C9, 0x725D, 0xA6CA, 0x767E, 0xA6CB, 0x7AF9, 0xA6CC, 0x7C73, 0xA6CD, 0x7CF8, 0xA6CE, 0x7F36, + 0xA6CF, 0x7F8A, 0xA6D0, 0x7FBD, 0xA6D1, 0x8001, 0xA6D2, 0x8003, 0xA6D3, 0x800C, 0xA6D4, 0x8012, 0xA6D5, 0x8033, 0xA6D6, 0x807F, + 0xA6D7, 0x8089, 0xA6D8, 0x808B, 0xA6D9, 0x808C, 0xA6DA, 0x81E3, 0xA6DB, 0x81EA, 0xA6DC, 0x81F3, 0xA6DD, 0x81FC, 0xA6DE, 0x820C, + 0xA6DF, 0x821B, 0xA6E0, 0x821F, 0xA6E1, 0x826E, 0xA6E2, 0x8272, 0xA6E3, 0x827E, 0xA6E4, 0x866B, 0xA6E5, 0x8840, 0xA6E6, 0x884C, + 0xA6E7, 0x8863, 0xA6E8, 0x897F, 0xA6E9, 0x9621, 0xA6EA, 0x4E32, 0xA6EB, 0x4EA8, 0xA6EC, 0x4F4D, 0xA6ED, 0x4F4F, 0xA6EE, 0x4F47, + 0xA6EF, 0x4F57, 0xA6F0, 0x4F5E, 0xA6F1, 0x4F34, 0xA6F2, 0x4F5B, 0xA6F3, 0x4F55, 0xA6F4, 0x4F30, 0xA6F5, 0x4F50, 0xA6F6, 0x4F51, + 0xA6F7, 0x4F3D, 0xA6F8, 0x4F3A, 0xA6F9, 0x4F38, 0xA6FA, 0x4F43, 0xA6FB, 0x4F54, 0xA6FC, 0x4F3C, 0xA6FD, 0x4F46, 0xA6FE, 0x4F63, + 0xA740, 0x4F5C, 0xA741, 0x4F60, 0xA742, 0x4F2F, 0xA743, 0x4F4E, 0xA744, 0x4F36, 0xA745, 0x4F59, 0xA746, 0x4F5D, 0xA747, 0x4F48, + 0xA748, 0x4F5A, 0xA749, 0x514C, 0xA74A, 0x514B, 0xA74B, 0x514D, 0xA74C, 0x5175, 0xA74D, 0x51B6, 0xA74E, 0x51B7, 0xA74F, 0x5225, + 0xA750, 0x5224, 0xA751, 0x5229, 0xA752, 0x522A, 0xA753, 0x5228, 0xA754, 0x52AB, 0xA755, 0x52A9, 0xA756, 0x52AA, 0xA757, 0x52AC, + 0xA758, 0x5323, 0xA759, 0x5373, 0xA75A, 0x5375, 0xA75B, 0x541D, 0xA75C, 0x542D, 0xA75D, 0x541E, 0xA75E, 0x543E, 0xA75F, 0x5426, + 0xA760, 0x544E, 0xA761, 0x5427, 0xA762, 0x5446, 0xA763, 0x5443, 0xA764, 0x5433, 0xA765, 0x5448, 0xA766, 0x5442, 0xA767, 0x541B, + 0xA768, 0x5429, 0xA769, 0x544A, 0xA76A, 0x5439, 0xA76B, 0x543B, 0xA76C, 0x5438, 0xA76D, 0x542E, 0xA76E, 0x5435, 0xA76F, 0x5436, + 0xA770, 0x5420, 0xA771, 0x543C, 0xA772, 0x5440, 0xA773, 0x5431, 0xA774, 0x542B, 0xA775, 0x541F, 0xA776, 0x542C, 0xA777, 0x56EA, + 0xA778, 0x56F0, 0xA779, 0x56E4, 0xA77A, 0x56EB, 0xA77B, 0x574A, 0xA77C, 0x5751, 0xA77D, 0x5740, 0xA77E, 0x574D, 0xA7A1, 0x5747, + 0xA7A2, 0x574E, 0xA7A3, 0x573E, 0xA7A4, 0x5750, 0xA7A5, 0x574F, 0xA7A6, 0x573B, 0xA7A7, 0x58EF, 0xA7A8, 0x593E, 0xA7A9, 0x599D, + 0xA7AA, 0x5992, 0xA7AB, 0x59A8, 0xA7AC, 0x599E, 0xA7AD, 0x59A3, 0xA7AE, 0x5999, 0xA7AF, 0x5996, 0xA7B0, 0x598D, 0xA7B1, 0x59A4, + 0xA7B2, 0x5993, 0xA7B3, 0x598A, 0xA7B4, 0x59A5, 0xA7B5, 0x5B5D, 0xA7B6, 0x5B5C, 0xA7B7, 0x5B5A, 0xA7B8, 0x5B5B, 0xA7B9, 0x5B8C, + 0xA7BA, 0x5B8B, 0xA7BB, 0x5B8F, 0xA7BC, 0x5C2C, 0xA7BD, 0x5C40, 0xA7BE, 0x5C41, 0xA7BF, 0x5C3F, 0xA7C0, 0x5C3E, 0xA7C1, 0x5C90, + 0xA7C2, 0x5C91, 0xA7C3, 0x5C94, 0xA7C4, 0x5C8C, 0xA7C5, 0x5DEB, 0xA7C6, 0x5E0C, 0xA7C7, 0x5E8F, 0xA7C8, 0x5E87, 0xA7C9, 0x5E8A, + 0xA7CA, 0x5EF7, 0xA7CB, 0x5F04, 0xA7CC, 0x5F1F, 0xA7CD, 0x5F64, 0xA7CE, 0x5F62, 0xA7CF, 0x5F77, 0xA7D0, 0x5F79, 0xA7D1, 0x5FD8, + 0xA7D2, 0x5FCC, 0xA7D3, 0x5FD7, 0xA7D4, 0x5FCD, 0xA7D5, 0x5FF1, 0xA7D6, 0x5FEB, 0xA7D7, 0x5FF8, 0xA7D8, 0x5FEA, 0xA7D9, 0x6212, + 0xA7DA, 0x6211, 0xA7DB, 0x6284, 0xA7DC, 0x6297, 0xA7DD, 0x6296, 0xA7DE, 0x6280, 0xA7DF, 0x6276, 0xA7E0, 0x6289, 0xA7E1, 0x626D, + 0xA7E2, 0x628A, 0xA7E3, 0x627C, 0xA7E4, 0x627E, 0xA7E5, 0x6279, 0xA7E6, 0x6273, 0xA7E7, 0x6292, 0xA7E8, 0x626F, 0xA7E9, 0x6298, + 0xA7EA, 0x626E, 0xA7EB, 0x6295, 0xA7EC, 0x6293, 0xA7ED, 0x6291, 0xA7EE, 0x6286, 0xA7EF, 0x6539, 0xA7F0, 0x653B, 0xA7F1, 0x6538, + 0xA7F2, 0x65F1, 0xA7F3, 0x66F4, 0xA7F4, 0x675F, 0xA7F5, 0x674E, 0xA7F6, 0x674F, 0xA7F7, 0x6750, 0xA7F8, 0x6751, 0xA7F9, 0x675C, + 0xA7FA, 0x6756, 0xA7FB, 0x675E, 0xA7FC, 0x6749, 0xA7FD, 0x6746, 0xA7FE, 0x6760, 0xA840, 0x6753, 0xA841, 0x6757, 0xA842, 0x6B65, + 0xA843, 0x6BCF, 0xA844, 0x6C42, 0xA845, 0x6C5E, 0xA846, 0x6C99, 0xA847, 0x6C81, 0xA848, 0x6C88, 0xA849, 0x6C89, 0xA84A, 0x6C85, + 0xA84B, 0x6C9B, 0xA84C, 0x6C6A, 0xA84D, 0x6C7A, 0xA84E, 0x6C90, 0xA84F, 0x6C70, 0xA850, 0x6C8C, 0xA851, 0x6C68, 0xA852, 0x6C96, + 0xA853, 0x6C92, 0xA854, 0x6C7D, 0xA855, 0x6C83, 0xA856, 0x6C72, 0xA857, 0x6C7E, 0xA858, 0x6C74, 0xA859, 0x6C86, 0xA85A, 0x6C76, + 0xA85B, 0x6C8D, 0xA85C, 0x6C94, 0xA85D, 0x6C98, 0xA85E, 0x6C82, 0xA85F, 0x7076, 0xA860, 0x707C, 0xA861, 0x707D, 0xA862, 0x7078, + 0xA863, 0x7262, 0xA864, 0x7261, 0xA865, 0x7260, 0xA866, 0x72C4, 0xA867, 0x72C2, 0xA868, 0x7396, 0xA869, 0x752C, 0xA86A, 0x752B, + 0xA86B, 0x7537, 0xA86C, 0x7538, 0xA86D, 0x7682, 0xA86E, 0x76EF, 0xA86F, 0x77E3, 0xA870, 0x79C1, 0xA871, 0x79C0, 0xA872, 0x79BF, + 0xA873, 0x7A76, 0xA874, 0x7CFB, 0xA875, 0x7F55, 0xA876, 0x8096, 0xA877, 0x8093, 0xA878, 0x809D, 0xA879, 0x8098, 0xA87A, 0x809B, + 0xA87B, 0x809A, 0xA87C, 0x80B2, 0xA87D, 0x826F, 0xA87E, 0x8292, 0xA8A1, 0x828B, 0xA8A2, 0x828D, 0xA8A3, 0x898B, 0xA8A4, 0x89D2, + 0xA8A5, 0x8A00, 0xA8A6, 0x8C37, 0xA8A7, 0x8C46, 0xA8A8, 0x8C55, 0xA8A9, 0x8C9D, 0xA8AA, 0x8D64, 0xA8AB, 0x8D70, 0xA8AC, 0x8DB3, + 0xA8AD, 0x8EAB, 0xA8AE, 0x8ECA, 0xA8AF, 0x8F9B, 0xA8B0, 0x8FB0, 0xA8B1, 0x8FC2, 0xA8B2, 0x8FC6, 0xA8B3, 0x8FC5, 0xA8B4, 0x8FC4, + 0xA8B5, 0x5DE1, 0xA8B6, 0x9091, 0xA8B7, 0x90A2, 0xA8B8, 0x90AA, 0xA8B9, 0x90A6, 0xA8BA, 0x90A3, 0xA8BB, 0x9149, 0xA8BC, 0x91C6, + 0xA8BD, 0x91CC, 0xA8BE, 0x9632, 0xA8BF, 0x962E, 0xA8C0, 0x9631, 0xA8C1, 0x962A, 0xA8C2, 0x962C, 0xA8C3, 0x4E26, 0xA8C4, 0x4E56, + 0xA8C5, 0x4E73, 0xA8C6, 0x4E8B, 0xA8C7, 0x4E9B, 0xA8C8, 0x4E9E, 0xA8C9, 0x4EAB, 0xA8CA, 0x4EAC, 0xA8CB, 0x4F6F, 0xA8CC, 0x4F9D, + 0xA8CD, 0x4F8D, 0xA8CE, 0x4F73, 0xA8CF, 0x4F7F, 0xA8D0, 0x4F6C, 0xA8D1, 0x4F9B, 0xA8D2, 0x4F8B, 0xA8D3, 0x4F86, 0xA8D4, 0x4F83, + 0xA8D5, 0x4F70, 0xA8D6, 0x4F75, 0xA8D7, 0x4F88, 0xA8D8, 0x4F69, 0xA8D9, 0x4F7B, 0xA8DA, 0x4F96, 0xA8DB, 0x4F7E, 0xA8DC, 0x4F8F, + 0xA8DD, 0x4F91, 0xA8DE, 0x4F7A, 0xA8DF, 0x5154, 0xA8E0, 0x5152, 0xA8E1, 0x5155, 0xA8E2, 0x5169, 0xA8E3, 0x5177, 0xA8E4, 0x5176, + 0xA8E5, 0x5178, 0xA8E6, 0x51BD, 0xA8E7, 0x51FD, 0xA8E8, 0x523B, 0xA8E9, 0x5238, 0xA8EA, 0x5237, 0xA8EB, 0x523A, 0xA8EC, 0x5230, + 0xA8ED, 0x522E, 0xA8EE, 0x5236, 0xA8EF, 0x5241, 0xA8F0, 0x52BE, 0xA8F1, 0x52BB, 0xA8F2, 0x5352, 0xA8F3, 0x5354, 0xA8F4, 0x5353, + 0xA8F5, 0x5351, 0xA8F6, 0x5366, 0xA8F7, 0x5377, 0xA8F8, 0x5378, 0xA8F9, 0x5379, 0xA8FA, 0x53D6, 0xA8FB, 0x53D4, 0xA8FC, 0x53D7, + 0xA8FD, 0x5473, 0xA8FE, 0x5475, 0xA940, 0x5496, 0xA941, 0x5478, 0xA942, 0x5495, 0xA943, 0x5480, 0xA944, 0x547B, 0xA945, 0x5477, + 0xA946, 0x5484, 0xA947, 0x5492, 0xA948, 0x5486, 0xA949, 0x547C, 0xA94A, 0x5490, 0xA94B, 0x5471, 0xA94C, 0x5476, 0xA94D, 0x548C, + 0xA94E, 0x549A, 0xA94F, 0x5462, 0xA950, 0x5468, 0xA951, 0x548B, 0xA952, 0x547D, 0xA953, 0x548E, 0xA954, 0x56FA, 0xA955, 0x5783, + 0xA956, 0x5777, 0xA957, 0x576A, 0xA958, 0x5769, 0xA959, 0x5761, 0xA95A, 0x5766, 0xA95B, 0x5764, 0xA95C, 0x577C, 0xA95D, 0x591C, + 0xA95E, 0x5949, 0xA95F, 0x5947, 0xA960, 0x5948, 0xA961, 0x5944, 0xA962, 0x5954, 0xA963, 0x59BE, 0xA964, 0x59BB, 0xA965, 0x59D4, + 0xA966, 0x59B9, 0xA967, 0x59AE, 0xA968, 0x59D1, 0xA969, 0x59C6, 0xA96A, 0x59D0, 0xA96B, 0x59CD, 0xA96C, 0x59CB, 0xA96D, 0x59D3, + 0xA96E, 0x59CA, 0xA96F, 0x59AF, 0xA970, 0x59B3, 0xA971, 0x59D2, 0xA972, 0x59C5, 0xA973, 0x5B5F, 0xA974, 0x5B64, 0xA975, 0x5B63, + 0xA976, 0x5B97, 0xA977, 0x5B9A, 0xA978, 0x5B98, 0xA979, 0x5B9C, 0xA97A, 0x5B99, 0xA97B, 0x5B9B, 0xA97C, 0x5C1A, 0xA97D, 0x5C48, + 0xA97E, 0x5C45, 0xA9A1, 0x5C46, 0xA9A2, 0x5CB7, 0xA9A3, 0x5CA1, 0xA9A4, 0x5CB8, 0xA9A5, 0x5CA9, 0xA9A6, 0x5CAB, 0xA9A7, 0x5CB1, + 0xA9A8, 0x5CB3, 0xA9A9, 0x5E18, 0xA9AA, 0x5E1A, 0xA9AB, 0x5E16, 0xA9AC, 0x5E15, 0xA9AD, 0x5E1B, 0xA9AE, 0x5E11, 0xA9AF, 0x5E78, + 0xA9B0, 0x5E9A, 0xA9B1, 0x5E97, 0xA9B2, 0x5E9C, 0xA9B3, 0x5E95, 0xA9B4, 0x5E96, 0xA9B5, 0x5EF6, 0xA9B6, 0x5F26, 0xA9B7, 0x5F27, + 0xA9B8, 0x5F29, 0xA9B9, 0x5F80, 0xA9BA, 0x5F81, 0xA9BB, 0x5F7F, 0xA9BC, 0x5F7C, 0xA9BD, 0x5FDD, 0xA9BE, 0x5FE0, 0xA9BF, 0x5FFD, + 0xA9C0, 0x5FF5, 0xA9C1, 0x5FFF, 0xA9C2, 0x600F, 0xA9C3, 0x6014, 0xA9C4, 0x602F, 0xA9C5, 0x6035, 0xA9C6, 0x6016, 0xA9C7, 0x602A, + 0xA9C8, 0x6015, 0xA9C9, 0x6021, 0xA9CA, 0x6027, 0xA9CB, 0x6029, 0xA9CC, 0x602B, 0xA9CD, 0x601B, 0xA9CE, 0x6216, 0xA9CF, 0x6215, + 0xA9D0, 0x623F, 0xA9D1, 0x623E, 0xA9D2, 0x6240, 0xA9D3, 0x627F, 0xA9D4, 0x62C9, 0xA9D5, 0x62CC, 0xA9D6, 0x62C4, 0xA9D7, 0x62BF, + 0xA9D8, 0x62C2, 0xA9D9, 0x62B9, 0xA9DA, 0x62D2, 0xA9DB, 0x62DB, 0xA9DC, 0x62AB, 0xA9DD, 0x62D3, 0xA9DE, 0x62D4, 0xA9DF, 0x62CB, + 0xA9E0, 0x62C8, 0xA9E1, 0x62A8, 0xA9E2, 0x62BD, 0xA9E3, 0x62BC, 0xA9E4, 0x62D0, 0xA9E5, 0x62D9, 0xA9E6, 0x62C7, 0xA9E7, 0x62CD, + 0xA9E8, 0x62B5, 0xA9E9, 0x62DA, 0xA9EA, 0x62B1, 0xA9EB, 0x62D8, 0xA9EC, 0x62D6, 0xA9ED, 0x62D7, 0xA9EE, 0x62C6, 0xA9EF, 0x62AC, + 0xA9F0, 0x62CE, 0xA9F1, 0x653E, 0xA9F2, 0x65A7, 0xA9F3, 0x65BC, 0xA9F4, 0x65FA, 0xA9F5, 0x6614, 0xA9F6, 0x6613, 0xA9F7, 0x660C, + 0xA9F8, 0x6606, 0xA9F9, 0x6602, 0xA9FA, 0x660E, 0xA9FB, 0x6600, 0xA9FC, 0x660F, 0xA9FD, 0x6615, 0xA9FE, 0x660A, 0xAA40, 0x6607, + 0xAA41, 0x670D, 0xAA42, 0x670B, 0xAA43, 0x676D, 0xAA44, 0x678B, 0xAA45, 0x6795, 0xAA46, 0x6771, 0xAA47, 0x679C, 0xAA48, 0x6773, + 0xAA49, 0x6777, 0xAA4A, 0x6787, 0xAA4B, 0x679D, 0xAA4C, 0x6797, 0xAA4D, 0x676F, 0xAA4E, 0x6770, 0xAA4F, 0x677F, 0xAA50, 0x6789, + 0xAA51, 0x677E, 0xAA52, 0x6790, 0xAA53, 0x6775, 0xAA54, 0x679A, 0xAA55, 0x6793, 0xAA56, 0x677C, 0xAA57, 0x676A, 0xAA58, 0x6772, + 0xAA59, 0x6B23, 0xAA5A, 0x6B66, 0xAA5B, 0x6B67, 0xAA5C, 0x6B7F, 0xAA5D, 0x6C13, 0xAA5E, 0x6C1B, 0xAA5F, 0x6CE3, 0xAA60, 0x6CE8, + 0xAA61, 0x6CF3, 0xAA62, 0x6CB1, 0xAA63, 0x6CCC, 0xAA64, 0x6CE5, 0xAA65, 0x6CB3, 0xAA66, 0x6CBD, 0xAA67, 0x6CBE, 0xAA68, 0x6CBC, + 0xAA69, 0x6CE2, 0xAA6A, 0x6CAB, 0xAA6B, 0x6CD5, 0xAA6C, 0x6CD3, 0xAA6D, 0x6CB8, 0xAA6E, 0x6CC4, 0xAA6F, 0x6CB9, 0xAA70, 0x6CC1, + 0xAA71, 0x6CAE, 0xAA72, 0x6CD7, 0xAA73, 0x6CC5, 0xAA74, 0x6CF1, 0xAA75, 0x6CBF, 0xAA76, 0x6CBB, 0xAA77, 0x6CE1, 0xAA78, 0x6CDB, + 0xAA79, 0x6CCA, 0xAA7A, 0x6CAC, 0xAA7B, 0x6CEF, 0xAA7C, 0x6CDC, 0xAA7D, 0x6CD6, 0xAA7E, 0x6CE0, 0xAAA1, 0x7095, 0xAAA2, 0x708E, + 0xAAA3, 0x7092, 0xAAA4, 0x708A, 0xAAA5, 0x7099, 0xAAA6, 0x722C, 0xAAA7, 0x722D, 0xAAA8, 0x7238, 0xAAA9, 0x7248, 0xAAAA, 0x7267, + 0xAAAB, 0x7269, 0xAAAC, 0x72C0, 0xAAAD, 0x72CE, 0xAAAE, 0x72D9, 0xAAAF, 0x72D7, 0xAAB0, 0x72D0, 0xAAB1, 0x73A9, 0xAAB2, 0x73A8, + 0xAAB3, 0x739F, 0xAAB4, 0x73AB, 0xAAB5, 0x73A5, 0xAAB6, 0x753D, 0xAAB7, 0x759D, 0xAAB8, 0x7599, 0xAAB9, 0x759A, 0xAABA, 0x7684, + 0xAABB, 0x76C2, 0xAABC, 0x76F2, 0xAABD, 0x76F4, 0xAABE, 0x77E5, 0xAABF, 0x77FD, 0xAAC0, 0x793E, 0xAAC1, 0x7940, 0xAAC2, 0x7941, + 0xAAC3, 0x79C9, 0xAAC4, 0x79C8, 0xAAC5, 0x7A7A, 0xAAC6, 0x7A79, 0xAAC7, 0x7AFA, 0xAAC8, 0x7CFE, 0xAAC9, 0x7F54, 0xAACA, 0x7F8C, + 0xAACB, 0x7F8B, 0xAACC, 0x8005, 0xAACD, 0x80BA, 0xAACE, 0x80A5, 0xAACF, 0x80A2, 0xAAD0, 0x80B1, 0xAAD1, 0x80A1, 0xAAD2, 0x80AB, + 0xAAD3, 0x80A9, 0xAAD4, 0x80B4, 0xAAD5, 0x80AA, 0xAAD6, 0x80AF, 0xAAD7, 0x81E5, 0xAAD8, 0x81FE, 0xAAD9, 0x820D, 0xAADA, 0x82B3, + 0xAADB, 0x829D, 0xAADC, 0x8299, 0xAADD, 0x82AD, 0xAADE, 0x82BD, 0xAADF, 0x829F, 0xAAE0, 0x82B9, 0xAAE1, 0x82B1, 0xAAE2, 0x82AC, + 0xAAE3, 0x82A5, 0xAAE4, 0x82AF, 0xAAE5, 0x82B8, 0xAAE6, 0x82A3, 0xAAE7, 0x82B0, 0xAAE8, 0x82BE, 0xAAE9, 0x82B7, 0xAAEA, 0x864E, + 0xAAEB, 0x8671, 0xAAEC, 0x521D, 0xAAED, 0x8868, 0xAAEE, 0x8ECB, 0xAAEF, 0x8FCE, 0xAAF0, 0x8FD4, 0xAAF1, 0x8FD1, 0xAAF2, 0x90B5, + 0xAAF3, 0x90B8, 0xAAF4, 0x90B1, 0xAAF5, 0x90B6, 0xAAF6, 0x91C7, 0xAAF7, 0x91D1, 0xAAF8, 0x9577, 0xAAF9, 0x9580, 0xAAFA, 0x961C, + 0xAAFB, 0x9640, 0xAAFC, 0x963F, 0xAAFD, 0x963B, 0xAAFE, 0x9644, 0xAB40, 0x9642, 0xAB41, 0x96B9, 0xAB42, 0x96E8, 0xAB43, 0x9752, + 0xAB44, 0x975E, 0xAB45, 0x4E9F, 0xAB46, 0x4EAD, 0xAB47, 0x4EAE, 0xAB48, 0x4FE1, 0xAB49, 0x4FB5, 0xAB4A, 0x4FAF, 0xAB4B, 0x4FBF, + 0xAB4C, 0x4FE0, 0xAB4D, 0x4FD1, 0xAB4E, 0x4FCF, 0xAB4F, 0x4FDD, 0xAB50, 0x4FC3, 0xAB51, 0x4FB6, 0xAB52, 0x4FD8, 0xAB53, 0x4FDF, + 0xAB54, 0x4FCA, 0xAB55, 0x4FD7, 0xAB56, 0x4FAE, 0xAB57, 0x4FD0, 0xAB58, 0x4FC4, 0xAB59, 0x4FC2, 0xAB5A, 0x4FDA, 0xAB5B, 0x4FCE, + 0xAB5C, 0x4FDE, 0xAB5D, 0x4FB7, 0xAB5E, 0x5157, 0xAB5F, 0x5192, 0xAB60, 0x5191, 0xAB61, 0x51A0, 0xAB62, 0x524E, 0xAB63, 0x5243, + 0xAB64, 0x524A, 0xAB65, 0x524D, 0xAB66, 0x524C, 0xAB67, 0x524B, 0xAB68, 0x5247, 0xAB69, 0x52C7, 0xAB6A, 0x52C9, 0xAB6B, 0x52C3, + 0xAB6C, 0x52C1, 0xAB6D, 0x530D, 0xAB6E, 0x5357, 0xAB6F, 0x537B, 0xAB70, 0x539A, 0xAB71, 0x53DB, 0xAB72, 0x54AC, 0xAB73, 0x54C0, + 0xAB74, 0x54A8, 0xAB75, 0x54CE, 0xAB76, 0x54C9, 0xAB77, 0x54B8, 0xAB78, 0x54A6, 0xAB79, 0x54B3, 0xAB7A, 0x54C7, 0xAB7B, 0x54C2, + 0xAB7C, 0x54BD, 0xAB7D, 0x54AA, 0xAB7E, 0x54C1, 0xABA1, 0x54C4, 0xABA2, 0x54C8, 0xABA3, 0x54AF, 0xABA4, 0x54AB, 0xABA5, 0x54B1, + 0xABA6, 0x54BB, 0xABA7, 0x54A9, 0xABA8, 0x54A7, 0xABA9, 0x54BF, 0xABAA, 0x56FF, 0xABAB, 0x5782, 0xABAC, 0x578B, 0xABAD, 0x57A0, + 0xABAE, 0x57A3, 0xABAF, 0x57A2, 0xABB0, 0x57CE, 0xABB1, 0x57AE, 0xABB2, 0x5793, 0xABB3, 0x5955, 0xABB4, 0x5951, 0xABB5, 0x594F, + 0xABB6, 0x594E, 0xABB7, 0x5950, 0xABB8, 0x59DC, 0xABB9, 0x59D8, 0xABBA, 0x59FF, 0xABBB, 0x59E3, 0xABBC, 0x59E8, 0xABBD, 0x5A03, + 0xABBE, 0x59E5, 0xABBF, 0x59EA, 0xABC0, 0x59DA, 0xABC1, 0x59E6, 0xABC2, 0x5A01, 0xABC3, 0x59FB, 0xABC4, 0x5B69, 0xABC5, 0x5BA3, + 0xABC6, 0x5BA6, 0xABC7, 0x5BA4, 0xABC8, 0x5BA2, 0xABC9, 0x5BA5, 0xABCA, 0x5C01, 0xABCB, 0x5C4E, 0xABCC, 0x5C4F, 0xABCD, 0x5C4D, + 0xABCE, 0x5C4B, 0xABCF, 0x5CD9, 0xABD0, 0x5CD2, 0xABD1, 0x5DF7, 0xABD2, 0x5E1D, 0xABD3, 0x5E25, 0xABD4, 0x5E1F, 0xABD5, 0x5E7D, + 0xABD6, 0x5EA0, 0xABD7, 0x5EA6, 0xABD8, 0x5EFA, 0xABD9, 0x5F08, 0xABDA, 0x5F2D, 0xABDB, 0x5F65, 0xABDC, 0x5F88, 0xABDD, 0x5F85, + 0xABDE, 0x5F8A, 0xABDF, 0x5F8B, 0xABE0, 0x5F87, 0xABE1, 0x5F8C, 0xABE2, 0x5F89, 0xABE3, 0x6012, 0xABE4, 0x601D, 0xABE5, 0x6020, + 0xABE6, 0x6025, 0xABE7, 0x600E, 0xABE8, 0x6028, 0xABE9, 0x604D, 0xABEA, 0x6070, 0xABEB, 0x6068, 0xABEC, 0x6062, 0xABED, 0x6046, + 0xABEE, 0x6043, 0xABEF, 0x606C, 0xABF0, 0x606B, 0xABF1, 0x606A, 0xABF2, 0x6064, 0xABF3, 0x6241, 0xABF4, 0x62DC, 0xABF5, 0x6316, + 0xABF6, 0x6309, 0xABF7, 0x62FC, 0xABF8, 0x62ED, 0xABF9, 0x6301, 0xABFA, 0x62EE, 0xABFB, 0x62FD, 0xABFC, 0x6307, 0xABFD, 0x62F1, + 0xABFE, 0x62F7, 0xAC40, 0x62EF, 0xAC41, 0x62EC, 0xAC42, 0x62FE, 0xAC43, 0x62F4, 0xAC44, 0x6311, 0xAC45, 0x6302, 0xAC46, 0x653F, + 0xAC47, 0x6545, 0xAC48, 0x65AB, 0xAC49, 0x65BD, 0xAC4A, 0x65E2, 0xAC4B, 0x6625, 0xAC4C, 0x662D, 0xAC4D, 0x6620, 0xAC4E, 0x6627, + 0xAC4F, 0x662F, 0xAC50, 0x661F, 0xAC51, 0x6628, 0xAC52, 0x6631, 0xAC53, 0x6624, 0xAC54, 0x66F7, 0xAC55, 0x67FF, 0xAC56, 0x67D3, + 0xAC57, 0x67F1, 0xAC58, 0x67D4, 0xAC59, 0x67D0, 0xAC5A, 0x67EC, 0xAC5B, 0x67B6, 0xAC5C, 0x67AF, 0xAC5D, 0x67F5, 0xAC5E, 0x67E9, + 0xAC5F, 0x67EF, 0xAC60, 0x67C4, 0xAC61, 0x67D1, 0xAC62, 0x67B4, 0xAC63, 0x67DA, 0xAC64, 0x67E5, 0xAC65, 0x67B8, 0xAC66, 0x67CF, + 0xAC67, 0x67DE, 0xAC68, 0x67F3, 0xAC69, 0x67B0, 0xAC6A, 0x67D9, 0xAC6B, 0x67E2, 0xAC6C, 0x67DD, 0xAC6D, 0x67D2, 0xAC6E, 0x6B6A, + 0xAC6F, 0x6B83, 0xAC70, 0x6B86, 0xAC71, 0x6BB5, 0xAC72, 0x6BD2, 0xAC73, 0x6BD7, 0xAC74, 0x6C1F, 0xAC75, 0x6CC9, 0xAC76, 0x6D0B, + 0xAC77, 0x6D32, 0xAC78, 0x6D2A, 0xAC79, 0x6D41, 0xAC7A, 0x6D25, 0xAC7B, 0x6D0C, 0xAC7C, 0x6D31, 0xAC7D, 0x6D1E, 0xAC7E, 0x6D17, + 0xACA1, 0x6D3B, 0xACA2, 0x6D3D, 0xACA3, 0x6D3E, 0xACA4, 0x6D36, 0xACA5, 0x6D1B, 0xACA6, 0x6CF5, 0xACA7, 0x6D39, 0xACA8, 0x6D27, + 0xACA9, 0x6D38, 0xACAA, 0x6D29, 0xACAB, 0x6D2E, 0xACAC, 0x6D35, 0xACAD, 0x6D0E, 0xACAE, 0x6D2B, 0xACAF, 0x70AB, 0xACB0, 0x70BA, + 0xACB1, 0x70B3, 0xACB2, 0x70AC, 0xACB3, 0x70AF, 0xACB4, 0x70AD, 0xACB5, 0x70B8, 0xACB6, 0x70AE, 0xACB7, 0x70A4, 0xACB8, 0x7230, + 0xACB9, 0x7272, 0xACBA, 0x726F, 0xACBB, 0x7274, 0xACBC, 0x72E9, 0xACBD, 0x72E0, 0xACBE, 0x72E1, 0xACBF, 0x73B7, 0xACC0, 0x73CA, + 0xACC1, 0x73BB, 0xACC2, 0x73B2, 0xACC3, 0x73CD, 0xACC4, 0x73C0, 0xACC5, 0x73B3, 0xACC6, 0x751A, 0xACC7, 0x752D, 0xACC8, 0x754F, + 0xACC9, 0x754C, 0xACCA, 0x754E, 0xACCB, 0x754B, 0xACCC, 0x75AB, 0xACCD, 0x75A4, 0xACCE, 0x75A5, 0xACCF, 0x75A2, 0xACD0, 0x75A3, + 0xACD1, 0x7678, 0xACD2, 0x7686, 0xACD3, 0x7687, 0xACD4, 0x7688, 0xACD5, 0x76C8, 0xACD6, 0x76C6, 0xACD7, 0x76C3, 0xACD8, 0x76C5, + 0xACD9, 0x7701, 0xACDA, 0x76F9, 0xACDB, 0x76F8, 0xACDC, 0x7709, 0xACDD, 0x770B, 0xACDE, 0x76FE, 0xACDF, 0x76FC, 0xACE0, 0x7707, + 0xACE1, 0x77DC, 0xACE2, 0x7802, 0xACE3, 0x7814, 0xACE4, 0x780C, 0xACE5, 0x780D, 0xACE6, 0x7946, 0xACE7, 0x7949, 0xACE8, 0x7948, + 0xACE9, 0x7947, 0xACEA, 0x79B9, 0xACEB, 0x79BA, 0xACEC, 0x79D1, 0xACED, 0x79D2, 0xACEE, 0x79CB, 0xACEF, 0x7A7F, 0xACF0, 0x7A81, + 0xACF1, 0x7AFF, 0xACF2, 0x7AFD, 0xACF3, 0x7C7D, 0xACF4, 0x7D02, 0xACF5, 0x7D05, 0xACF6, 0x7D00, 0xACF7, 0x7D09, 0xACF8, 0x7D07, + 0xACF9, 0x7D04, 0xACFA, 0x7D06, 0xACFB, 0x7F38, 0xACFC, 0x7F8E, 0xACFD, 0x7FBF, 0xACFE, 0x8004, 0xAD40, 0x8010, 0xAD41, 0x800D, + 0xAD42, 0x8011, 0xAD43, 0x8036, 0xAD44, 0x80D6, 0xAD45, 0x80E5, 0xAD46, 0x80DA, 0xAD47, 0x80C3, 0xAD48, 0x80C4, 0xAD49, 0x80CC, + 0xAD4A, 0x80E1, 0xAD4B, 0x80DB, 0xAD4C, 0x80CE, 0xAD4D, 0x80DE, 0xAD4E, 0x80E4, 0xAD4F, 0x80DD, 0xAD50, 0x81F4, 0xAD51, 0x8222, + 0xAD52, 0x82E7, 0xAD53, 0x8303, 0xAD54, 0x8305, 0xAD55, 0x82E3, 0xAD56, 0x82DB, 0xAD57, 0x82E6, 0xAD58, 0x8304, 0xAD59, 0x82E5, + 0xAD5A, 0x8302, 0xAD5B, 0x8309, 0xAD5C, 0x82D2, 0xAD5D, 0x82D7, 0xAD5E, 0x82F1, 0xAD5F, 0x8301, 0xAD60, 0x82DC, 0xAD61, 0x82D4, + 0xAD62, 0x82D1, 0xAD63, 0x82DE, 0xAD64, 0x82D3, 0xAD65, 0x82DF, 0xAD66, 0x82EF, 0xAD67, 0x8306, 0xAD68, 0x8650, 0xAD69, 0x8679, + 0xAD6A, 0x867B, 0xAD6B, 0x867A, 0xAD6C, 0x884D, 0xAD6D, 0x886B, 0xAD6E, 0x8981, 0xAD6F, 0x89D4, 0xAD70, 0x8A08, 0xAD71, 0x8A02, + 0xAD72, 0x8A03, 0xAD73, 0x8C9E, 0xAD74, 0x8CA0, 0xAD75, 0x8D74, 0xAD76, 0x8D73, 0xAD77, 0x8DB4, 0xAD78, 0x8ECD, 0xAD79, 0x8ECC, + 0xAD7A, 0x8FF0, 0xAD7B, 0x8FE6, 0xAD7C, 0x8FE2, 0xAD7D, 0x8FEA, 0xAD7E, 0x8FE5, 0xADA1, 0x8FED, 0xADA2, 0x8FEB, 0xADA3, 0x8FE4, + 0xADA4, 0x8FE8, 0xADA5, 0x90CA, 0xADA6, 0x90CE, 0xADA7, 0x90C1, 0xADA8, 0x90C3, 0xADA9, 0x914B, 0xADAA, 0x914A, 0xADAB, 0x91CD, + 0xADAC, 0x9582, 0xADAD, 0x9650, 0xADAE, 0x964B, 0xADAF, 0x964C, 0xADB0, 0x964D, 0xADB1, 0x9762, 0xADB2, 0x9769, 0xADB3, 0x97CB, + 0xADB4, 0x97ED, 0xADB5, 0x97F3, 0xADB6, 0x9801, 0xADB7, 0x98A8, 0xADB8, 0x98DB, 0xADB9, 0x98DF, 0xADBA, 0x9996, 0xADBB, 0x9999, + 0xADBC, 0x4E58, 0xADBD, 0x4EB3, 0xADBE, 0x500C, 0xADBF, 0x500D, 0xADC0, 0x5023, 0xADC1, 0x4FEF, 0xADC2, 0x5026, 0xADC3, 0x5025, + 0xADC4, 0x4FF8, 0xADC5, 0x5029, 0xADC6, 0x5016, 0xADC7, 0x5006, 0xADC8, 0x503C, 0xADC9, 0x501F, 0xADCA, 0x501A, 0xADCB, 0x5012, + 0xADCC, 0x5011, 0xADCD, 0x4FFA, 0xADCE, 0x5000, 0xADCF, 0x5014, 0xADD0, 0x5028, 0xADD1, 0x4FF1, 0xADD2, 0x5021, 0xADD3, 0x500B, + 0xADD4, 0x5019, 0xADD5, 0x5018, 0xADD6, 0x4FF3, 0xADD7, 0x4FEE, 0xADD8, 0x502D, 0xADD9, 0x502A, 0xADDA, 0x4FFE, 0xADDB, 0x502B, + 0xADDC, 0x5009, 0xADDD, 0x517C, 0xADDE, 0x51A4, 0xADDF, 0x51A5, 0xADE0, 0x51A2, 0xADE1, 0x51CD, 0xADE2, 0x51CC, 0xADE3, 0x51C6, + 0xADE4, 0x51CB, 0xADE5, 0x5256, 0xADE6, 0x525C, 0xADE7, 0x5254, 0xADE8, 0x525B, 0xADE9, 0x525D, 0xADEA, 0x532A, 0xADEB, 0x537F, + 0xADEC, 0x539F, 0xADED, 0x539D, 0xADEE, 0x53DF, 0xADEF, 0x54E8, 0xADF0, 0x5510, 0xADF1, 0x5501, 0xADF2, 0x5537, 0xADF3, 0x54FC, + 0xADF4, 0x54E5, 0xADF5, 0x54F2, 0xADF6, 0x5506, 0xADF7, 0x54FA, 0xADF8, 0x5514, 0xADF9, 0x54E9, 0xADFA, 0x54ED, 0xADFB, 0x54E1, + 0xADFC, 0x5509, 0xADFD, 0x54EE, 0xADFE, 0x54EA, 0xAE40, 0x54E6, 0xAE41, 0x5527, 0xAE42, 0x5507, 0xAE43, 0x54FD, 0xAE44, 0x550F, + 0xAE45, 0x5703, 0xAE46, 0x5704, 0xAE47, 0x57C2, 0xAE48, 0x57D4, 0xAE49, 0x57CB, 0xAE4A, 0x57C3, 0xAE4B, 0x5809, 0xAE4C, 0x590F, + 0xAE4D, 0x5957, 0xAE4E, 0x5958, 0xAE4F, 0x595A, 0xAE50, 0x5A11, 0xAE51, 0x5A18, 0xAE52, 0x5A1C, 0xAE53, 0x5A1F, 0xAE54, 0x5A1B, + 0xAE55, 0x5A13, 0xAE56, 0x59EC, 0xAE57, 0x5A20, 0xAE58, 0x5A23, 0xAE59, 0x5A29, 0xAE5A, 0x5A25, 0xAE5B, 0x5A0C, 0xAE5C, 0x5A09, + 0xAE5D, 0x5B6B, 0xAE5E, 0x5C58, 0xAE5F, 0x5BB0, 0xAE60, 0x5BB3, 0xAE61, 0x5BB6, 0xAE62, 0x5BB4, 0xAE63, 0x5BAE, 0xAE64, 0x5BB5, + 0xAE65, 0x5BB9, 0xAE66, 0x5BB8, 0xAE67, 0x5C04, 0xAE68, 0x5C51, 0xAE69, 0x5C55, 0xAE6A, 0x5C50, 0xAE6B, 0x5CED, 0xAE6C, 0x5CFD, + 0xAE6D, 0x5CFB, 0xAE6E, 0x5CEA, 0xAE6F, 0x5CE8, 0xAE70, 0x5CF0, 0xAE71, 0x5CF6, 0xAE72, 0x5D01, 0xAE73, 0x5CF4, 0xAE74, 0x5DEE, + 0xAE75, 0x5E2D, 0xAE76, 0x5E2B, 0xAE77, 0x5EAB, 0xAE78, 0x5EAD, 0xAE79, 0x5EA7, 0xAE7A, 0x5F31, 0xAE7B, 0x5F92, 0xAE7C, 0x5F91, + 0xAE7D, 0x5F90, 0xAE7E, 0x6059, 0xAEA1, 0x6063, 0xAEA2, 0x6065, 0xAEA3, 0x6050, 0xAEA4, 0x6055, 0xAEA5, 0x606D, 0xAEA6, 0x6069, + 0xAEA7, 0x606F, 0xAEA8, 0x6084, 0xAEA9, 0x609F, 0xAEAA, 0x609A, 0xAEAB, 0x608D, 0xAEAC, 0x6094, 0xAEAD, 0x608C, 0xAEAE, 0x6085, + 0xAEAF, 0x6096, 0xAEB0, 0x6247, 0xAEB1, 0x62F3, 0xAEB2, 0x6308, 0xAEB3, 0x62FF, 0xAEB4, 0x634E, 0xAEB5, 0x633E, 0xAEB6, 0x632F, + 0xAEB7, 0x6355, 0xAEB8, 0x6342, 0xAEB9, 0x6346, 0xAEBA, 0x634F, 0xAEBB, 0x6349, 0xAEBC, 0x633A, 0xAEBD, 0x6350, 0xAEBE, 0x633D, + 0xAEBF, 0x632A, 0xAEC0, 0x632B, 0xAEC1, 0x6328, 0xAEC2, 0x634D, 0xAEC3, 0x634C, 0xAEC4, 0x6548, 0xAEC5, 0x6549, 0xAEC6, 0x6599, + 0xAEC7, 0x65C1, 0xAEC8, 0x65C5, 0xAEC9, 0x6642, 0xAECA, 0x6649, 0xAECB, 0x664F, 0xAECC, 0x6643, 0xAECD, 0x6652, 0xAECE, 0x664C, + 0xAECF, 0x6645, 0xAED0, 0x6641, 0xAED1, 0x66F8, 0xAED2, 0x6714, 0xAED3, 0x6715, 0xAED4, 0x6717, 0xAED5, 0x6821, 0xAED6, 0x6838, + 0xAED7, 0x6848, 0xAED8, 0x6846, 0xAED9, 0x6853, 0xAEDA, 0x6839, 0xAEDB, 0x6842, 0xAEDC, 0x6854, 0xAEDD, 0x6829, 0xAEDE, 0x68B3, + 0xAEDF, 0x6817, 0xAEE0, 0x684C, 0xAEE1, 0x6851, 0xAEE2, 0x683D, 0xAEE3, 0x67F4, 0xAEE4, 0x6850, 0xAEE5, 0x6840, 0xAEE6, 0x683C, + 0xAEE7, 0x6843, 0xAEE8, 0x682A, 0xAEE9, 0x6845, 0xAEEA, 0x6813, 0xAEEB, 0x6818, 0xAEEC, 0x6841, 0xAEED, 0x6B8A, 0xAEEE, 0x6B89, + 0xAEEF, 0x6BB7, 0xAEF0, 0x6C23, 0xAEF1, 0x6C27, 0xAEF2, 0x6C28, 0xAEF3, 0x6C26, 0xAEF4, 0x6C24, 0xAEF5, 0x6CF0, 0xAEF6, 0x6D6A, + 0xAEF7, 0x6D95, 0xAEF8, 0x6D88, 0xAEF9, 0x6D87, 0xAEFA, 0x6D66, 0xAEFB, 0x6D78, 0xAEFC, 0x6D77, 0xAEFD, 0x6D59, 0xAEFE, 0x6D93, + 0xAF40, 0x6D6C, 0xAF41, 0x6D89, 0xAF42, 0x6D6E, 0xAF43, 0x6D5A, 0xAF44, 0x6D74, 0xAF45, 0x6D69, 0xAF46, 0x6D8C, 0xAF47, 0x6D8A, + 0xAF48, 0x6D79, 0xAF49, 0x6D85, 0xAF4A, 0x6D65, 0xAF4B, 0x6D94, 0xAF4C, 0x70CA, 0xAF4D, 0x70D8, 0xAF4E, 0x70E4, 0xAF4F, 0x70D9, + 0xAF50, 0x70C8, 0xAF51, 0x70CF, 0xAF52, 0x7239, 0xAF53, 0x7279, 0xAF54, 0x72FC, 0xAF55, 0x72F9, 0xAF56, 0x72FD, 0xAF57, 0x72F8, + 0xAF58, 0x72F7, 0xAF59, 0x7386, 0xAF5A, 0x73ED, 0xAF5B, 0x7409, 0xAF5C, 0x73EE, 0xAF5D, 0x73E0, 0xAF5E, 0x73EA, 0xAF5F, 0x73DE, + 0xAF60, 0x7554, 0xAF61, 0x755D, 0xAF62, 0x755C, 0xAF63, 0x755A, 0xAF64, 0x7559, 0xAF65, 0x75BE, 0xAF66, 0x75C5, 0xAF67, 0x75C7, + 0xAF68, 0x75B2, 0xAF69, 0x75B3, 0xAF6A, 0x75BD, 0xAF6B, 0x75BC, 0xAF6C, 0x75B9, 0xAF6D, 0x75C2, 0xAF6E, 0x75B8, 0xAF6F, 0x768B, + 0xAF70, 0x76B0, 0xAF71, 0x76CA, 0xAF72, 0x76CD, 0xAF73, 0x76CE, 0xAF74, 0x7729, 0xAF75, 0x771F, 0xAF76, 0x7720, 0xAF77, 0x7728, + 0xAF78, 0x77E9, 0xAF79, 0x7830, 0xAF7A, 0x7827, 0xAF7B, 0x7838, 0xAF7C, 0x781D, 0xAF7D, 0x7834, 0xAF7E, 0x7837, 0xAFA1, 0x7825, + 0xAFA2, 0x782D, 0xAFA3, 0x7820, 0xAFA4, 0x781F, 0xAFA5, 0x7832, 0xAFA6, 0x7955, 0xAFA7, 0x7950, 0xAFA8, 0x7960, 0xAFA9, 0x795F, + 0xAFAA, 0x7956, 0xAFAB, 0x795E, 0xAFAC, 0x795D, 0xAFAD, 0x7957, 0xAFAE, 0x795A, 0xAFAF, 0x79E4, 0xAFB0, 0x79E3, 0xAFB1, 0x79E7, + 0xAFB2, 0x79DF, 0xAFB3, 0x79E6, 0xAFB4, 0x79E9, 0xAFB5, 0x79D8, 0xAFB6, 0x7A84, 0xAFB7, 0x7A88, 0xAFB8, 0x7AD9, 0xAFB9, 0x7B06, + 0xAFBA, 0x7B11, 0xAFBB, 0x7C89, 0xAFBC, 0x7D21, 0xAFBD, 0x7D17, 0xAFBE, 0x7D0B, 0xAFBF, 0x7D0A, 0xAFC0, 0x7D20, 0xAFC1, 0x7D22, + 0xAFC2, 0x7D14, 0xAFC3, 0x7D10, 0xAFC4, 0x7D15, 0xAFC5, 0x7D1A, 0xAFC6, 0x7D1C, 0xAFC7, 0x7D0D, 0xAFC8, 0x7D19, 0xAFC9, 0x7D1B, + 0xAFCA, 0x7F3A, 0xAFCB, 0x7F5F, 0xAFCC, 0x7F94, 0xAFCD, 0x7FC5, 0xAFCE, 0x7FC1, 0xAFCF, 0x8006, 0xAFD0, 0x8018, 0xAFD1, 0x8015, + 0xAFD2, 0x8019, 0xAFD3, 0x8017, 0xAFD4, 0x803D, 0xAFD5, 0x803F, 0xAFD6, 0x80F1, 0xAFD7, 0x8102, 0xAFD8, 0x80F0, 0xAFD9, 0x8105, + 0xAFDA, 0x80ED, 0xAFDB, 0x80F4, 0xAFDC, 0x8106, 0xAFDD, 0x80F8, 0xAFDE, 0x80F3, 0xAFDF, 0x8108, 0xAFE0, 0x80FD, 0xAFE1, 0x810A, + 0xAFE2, 0x80FC, 0xAFE3, 0x80EF, 0xAFE4, 0x81ED, 0xAFE5, 0x81EC, 0xAFE6, 0x8200, 0xAFE7, 0x8210, 0xAFE8, 0x822A, 0xAFE9, 0x822B, + 0xAFEA, 0x8228, 0xAFEB, 0x822C, 0xAFEC, 0x82BB, 0xAFED, 0x832B, 0xAFEE, 0x8352, 0xAFEF, 0x8354, 0xAFF0, 0x834A, 0xAFF1, 0x8338, + 0xAFF2, 0x8350, 0xAFF3, 0x8349, 0xAFF4, 0x8335, 0xAFF5, 0x8334, 0xAFF6, 0x834F, 0xAFF7, 0x8332, 0xAFF8, 0x8339, 0xAFF9, 0x8336, + 0xAFFA, 0x8317, 0xAFFB, 0x8340, 0xAFFC, 0x8331, 0xAFFD, 0x8328, 0xAFFE, 0x8343, 0xB040, 0x8654, 0xB041, 0x868A, 0xB042, 0x86AA, + 0xB043, 0x8693, 0xB044, 0x86A4, 0xB045, 0x86A9, 0xB046, 0x868C, 0xB047, 0x86A3, 0xB048, 0x869C, 0xB049, 0x8870, 0xB04A, 0x8877, + 0xB04B, 0x8881, 0xB04C, 0x8882, 0xB04D, 0x887D, 0xB04E, 0x8879, 0xB04F, 0x8A18, 0xB050, 0x8A10, 0xB051, 0x8A0E, 0xB052, 0x8A0C, + 0xB053, 0x8A15, 0xB054, 0x8A0A, 0xB055, 0x8A17, 0xB056, 0x8A13, 0xB057, 0x8A16, 0xB058, 0x8A0F, 0xB059, 0x8A11, 0xB05A, 0x8C48, + 0xB05B, 0x8C7A, 0xB05C, 0x8C79, 0xB05D, 0x8CA1, 0xB05E, 0x8CA2, 0xB05F, 0x8D77, 0xB060, 0x8EAC, 0xB061, 0x8ED2, 0xB062, 0x8ED4, + 0xB063, 0x8ECF, 0xB064, 0x8FB1, 0xB065, 0x9001, 0xB066, 0x9006, 0xB067, 0x8FF7, 0xB068, 0x9000, 0xB069, 0x8FFA, 0xB06A, 0x8FF4, + 0xB06B, 0x9003, 0xB06C, 0x8FFD, 0xB06D, 0x9005, 0xB06E, 0x8FF8, 0xB06F, 0x9095, 0xB070, 0x90E1, 0xB071, 0x90DD, 0xB072, 0x90E2, + 0xB073, 0x9152, 0xB074, 0x914D, 0xB075, 0x914C, 0xB076, 0x91D8, 0xB077, 0x91DD, 0xB078, 0x91D7, 0xB079, 0x91DC, 0xB07A, 0x91D9, + 0xB07B, 0x9583, 0xB07C, 0x9662, 0xB07D, 0x9663, 0xB07E, 0x9661, 0xB0A1, 0x965B, 0xB0A2, 0x965D, 0xB0A3, 0x9664, 0xB0A4, 0x9658, + 0xB0A5, 0x965E, 0xB0A6, 0x96BB, 0xB0A7, 0x98E2, 0xB0A8, 0x99AC, 0xB0A9, 0x9AA8, 0xB0AA, 0x9AD8, 0xB0AB, 0x9B25, 0xB0AC, 0x9B32, + 0xB0AD, 0x9B3C, 0xB0AE, 0x4E7E, 0xB0AF, 0x507A, 0xB0B0, 0x507D, 0xB0B1, 0x505C, 0xB0B2, 0x5047, 0xB0B3, 0x5043, 0xB0B4, 0x504C, + 0xB0B5, 0x505A, 0xB0B6, 0x5049, 0xB0B7, 0x5065, 0xB0B8, 0x5076, 0xB0B9, 0x504E, 0xB0BA, 0x5055, 0xB0BB, 0x5075, 0xB0BC, 0x5074, + 0xB0BD, 0x5077, 0xB0BE, 0x504F, 0xB0BF, 0x500F, 0xB0C0, 0x506F, 0xB0C1, 0x506D, 0xB0C2, 0x515C, 0xB0C3, 0x5195, 0xB0C4, 0x51F0, + 0xB0C5, 0x526A, 0xB0C6, 0x526F, 0xB0C7, 0x52D2, 0xB0C8, 0x52D9, 0xB0C9, 0x52D8, 0xB0CA, 0x52D5, 0xB0CB, 0x5310, 0xB0CC, 0x530F, + 0xB0CD, 0x5319, 0xB0CE, 0x533F, 0xB0CF, 0x5340, 0xB0D0, 0x533E, 0xB0D1, 0x53C3, 0xB0D2, 0x66FC, 0xB0D3, 0x5546, 0xB0D4, 0x556A, + 0xB0D5, 0x5566, 0xB0D6, 0x5544, 0xB0D7, 0x555E, 0xB0D8, 0x5561, 0xB0D9, 0x5543, 0xB0DA, 0x554A, 0xB0DB, 0x5531, 0xB0DC, 0x5556, + 0xB0DD, 0x554F, 0xB0DE, 0x5555, 0xB0DF, 0x552F, 0xB0E0, 0x5564, 0xB0E1, 0x5538, 0xB0E2, 0x552E, 0xB0E3, 0x555C, 0xB0E4, 0x552C, + 0xB0E5, 0x5563, 0xB0E6, 0x5533, 0xB0E7, 0x5541, 0xB0E8, 0x5557, 0xB0E9, 0x5708, 0xB0EA, 0x570B, 0xB0EB, 0x5709, 0xB0EC, 0x57DF, + 0xB0ED, 0x5805, 0xB0EE, 0x580A, 0xB0EF, 0x5806, 0xB0F0, 0x57E0, 0xB0F1, 0x57E4, 0xB0F2, 0x57FA, 0xB0F3, 0x5802, 0xB0F4, 0x5835, + 0xB0F5, 0x57F7, 0xB0F6, 0x57F9, 0xB0F7, 0x5920, 0xB0F8, 0x5962, 0xB0F9, 0x5A36, 0xB0FA, 0x5A41, 0xB0FB, 0x5A49, 0xB0FC, 0x5A66, + 0xB0FD, 0x5A6A, 0xB0FE, 0x5A40, 0xB140, 0x5A3C, 0xB141, 0x5A62, 0xB142, 0x5A5A, 0xB143, 0x5A46, 0xB144, 0x5A4A, 0xB145, 0x5B70, + 0xB146, 0x5BC7, 0xB147, 0x5BC5, 0xB148, 0x5BC4, 0xB149, 0x5BC2, 0xB14A, 0x5BBF, 0xB14B, 0x5BC6, 0xB14C, 0x5C09, 0xB14D, 0x5C08, + 0xB14E, 0x5C07, 0xB14F, 0x5C60, 0xB150, 0x5C5C, 0xB151, 0x5C5D, 0xB152, 0x5D07, 0xB153, 0x5D06, 0xB154, 0x5D0E, 0xB155, 0x5D1B, + 0xB156, 0x5D16, 0xB157, 0x5D22, 0xB158, 0x5D11, 0xB159, 0x5D29, 0xB15A, 0x5D14, 0xB15B, 0x5D19, 0xB15C, 0x5D24, 0xB15D, 0x5D27, + 0xB15E, 0x5D17, 0xB15F, 0x5DE2, 0xB160, 0x5E38, 0xB161, 0x5E36, 0xB162, 0x5E33, 0xB163, 0x5E37, 0xB164, 0x5EB7, 0xB165, 0x5EB8, + 0xB166, 0x5EB6, 0xB167, 0x5EB5, 0xB168, 0x5EBE, 0xB169, 0x5F35, 0xB16A, 0x5F37, 0xB16B, 0x5F57, 0xB16C, 0x5F6C, 0xB16D, 0x5F69, + 0xB16E, 0x5F6B, 0xB16F, 0x5F97, 0xB170, 0x5F99, 0xB171, 0x5F9E, 0xB172, 0x5F98, 0xB173, 0x5FA1, 0xB174, 0x5FA0, 0xB175, 0x5F9C, + 0xB176, 0x607F, 0xB177, 0x60A3, 0xB178, 0x6089, 0xB179, 0x60A0, 0xB17A, 0x60A8, 0xB17B, 0x60CB, 0xB17C, 0x60B4, 0xB17D, 0x60E6, + 0xB17E, 0x60BD, 0xB1A1, 0x60C5, 0xB1A2, 0x60BB, 0xB1A3, 0x60B5, 0xB1A4, 0x60DC, 0xB1A5, 0x60BC, 0xB1A6, 0x60D8, 0xB1A7, 0x60D5, + 0xB1A8, 0x60C6, 0xB1A9, 0x60DF, 0xB1AA, 0x60B8, 0xB1AB, 0x60DA, 0xB1AC, 0x60C7, 0xB1AD, 0x621A, 0xB1AE, 0x621B, 0xB1AF, 0x6248, + 0xB1B0, 0x63A0, 0xB1B1, 0x63A7, 0xB1B2, 0x6372, 0xB1B3, 0x6396, 0xB1B4, 0x63A2, 0xB1B5, 0x63A5, 0xB1B6, 0x6377, 0xB1B7, 0x6367, + 0xB1B8, 0x6398, 0xB1B9, 0x63AA, 0xB1BA, 0x6371, 0xB1BB, 0x63A9, 0xB1BC, 0x6389, 0xB1BD, 0x6383, 0xB1BE, 0x639B, 0xB1BF, 0x636B, + 0xB1C0, 0x63A8, 0xB1C1, 0x6384, 0xB1C2, 0x6388, 0xB1C3, 0x6399, 0xB1C4, 0x63A1, 0xB1C5, 0x63AC, 0xB1C6, 0x6392, 0xB1C7, 0x638F, + 0xB1C8, 0x6380, 0xB1C9, 0x637B, 0xB1CA, 0x6369, 0xB1CB, 0x6368, 0xB1CC, 0x637A, 0xB1CD, 0x655D, 0xB1CE, 0x6556, 0xB1CF, 0x6551, + 0xB1D0, 0x6559, 0xB1D1, 0x6557, 0xB1D2, 0x555F, 0xB1D3, 0x654F, 0xB1D4, 0x6558, 0xB1D5, 0x6555, 0xB1D6, 0x6554, 0xB1D7, 0x659C, + 0xB1D8, 0x659B, 0xB1D9, 0x65AC, 0xB1DA, 0x65CF, 0xB1DB, 0x65CB, 0xB1DC, 0x65CC, 0xB1DD, 0x65CE, 0xB1DE, 0x665D, 0xB1DF, 0x665A, + 0xB1E0, 0x6664, 0xB1E1, 0x6668, 0xB1E2, 0x6666, 0xB1E3, 0x665E, 0xB1E4, 0x66F9, 0xB1E5, 0x52D7, 0xB1E6, 0x671B, 0xB1E7, 0x6881, + 0xB1E8, 0x68AF, 0xB1E9, 0x68A2, 0xB1EA, 0x6893, 0xB1EB, 0x68B5, 0xB1EC, 0x687F, 0xB1ED, 0x6876, 0xB1EE, 0x68B1, 0xB1EF, 0x68A7, + 0xB1F0, 0x6897, 0xB1F1, 0x68B0, 0xB1F2, 0x6883, 0xB1F3, 0x68C4, 0xB1F4, 0x68AD, 0xB1F5, 0x6886, 0xB1F6, 0x6885, 0xB1F7, 0x6894, + 0xB1F8, 0x689D, 0xB1F9, 0x68A8, 0xB1FA, 0x689F, 0xB1FB, 0x68A1, 0xB1FC, 0x6882, 0xB1FD, 0x6B32, 0xB1FE, 0x6BBA, 0xB240, 0x6BEB, + 0xB241, 0x6BEC, 0xB242, 0x6C2B, 0xB243, 0x6D8E, 0xB244, 0x6DBC, 0xB245, 0x6DF3, 0xB246, 0x6DD9, 0xB247, 0x6DB2, 0xB248, 0x6DE1, + 0xB249, 0x6DCC, 0xB24A, 0x6DE4, 0xB24B, 0x6DFB, 0xB24C, 0x6DFA, 0xB24D, 0x6E05, 0xB24E, 0x6DC7, 0xB24F, 0x6DCB, 0xB250, 0x6DAF, + 0xB251, 0x6DD1, 0xB252, 0x6DAE, 0xB253, 0x6DDE, 0xB254, 0x6DF9, 0xB255, 0x6DB8, 0xB256, 0x6DF7, 0xB257, 0x6DF5, 0xB258, 0x6DC5, + 0xB259, 0x6DD2, 0xB25A, 0x6E1A, 0xB25B, 0x6DB5, 0xB25C, 0x6DDA, 0xB25D, 0x6DEB, 0xB25E, 0x6DD8, 0xB25F, 0x6DEA, 0xB260, 0x6DF1, + 0xB261, 0x6DEE, 0xB262, 0x6DE8, 0xB263, 0x6DC6, 0xB264, 0x6DC4, 0xB265, 0x6DAA, 0xB266, 0x6DEC, 0xB267, 0x6DBF, 0xB268, 0x6DE6, + 0xB269, 0x70F9, 0xB26A, 0x7109, 0xB26B, 0x710A, 0xB26C, 0x70FD, 0xB26D, 0x70EF, 0xB26E, 0x723D, 0xB26F, 0x727D, 0xB270, 0x7281, + 0xB271, 0x731C, 0xB272, 0x731B, 0xB273, 0x7316, 0xB274, 0x7313, 0xB275, 0x7319, 0xB276, 0x7387, 0xB277, 0x7405, 0xB278, 0x740A, + 0xB279, 0x7403, 0xB27A, 0x7406, 0xB27B, 0x73FE, 0xB27C, 0x740D, 0xB27D, 0x74E0, 0xB27E, 0x74F6, 0xB2A1, 0x74F7, 0xB2A2, 0x751C, + 0xB2A3, 0x7522, 0xB2A4, 0x7565, 0xB2A5, 0x7566, 0xB2A6, 0x7562, 0xB2A7, 0x7570, 0xB2A8, 0x758F, 0xB2A9, 0x75D4, 0xB2AA, 0x75D5, + 0xB2AB, 0x75B5, 0xB2AC, 0x75CA, 0xB2AD, 0x75CD, 0xB2AE, 0x768E, 0xB2AF, 0x76D4, 0xB2B0, 0x76D2, 0xB2B1, 0x76DB, 0xB2B2, 0x7737, + 0xB2B3, 0x773E, 0xB2B4, 0x773C, 0xB2B5, 0x7736, 0xB2B6, 0x7738, 0xB2B7, 0x773A, 0xB2B8, 0x786B, 0xB2B9, 0x7843, 0xB2BA, 0x784E, + 0xB2BB, 0x7965, 0xB2BC, 0x7968, 0xB2BD, 0x796D, 0xB2BE, 0x79FB, 0xB2BF, 0x7A92, 0xB2C0, 0x7A95, 0xB2C1, 0x7B20, 0xB2C2, 0x7B28, + 0xB2C3, 0x7B1B, 0xB2C4, 0x7B2C, 0xB2C5, 0x7B26, 0xB2C6, 0x7B19, 0xB2C7, 0x7B1E, 0xB2C8, 0x7B2E, 0xB2C9, 0x7C92, 0xB2CA, 0x7C97, + 0xB2CB, 0x7C95, 0xB2CC, 0x7D46, 0xB2CD, 0x7D43, 0xB2CE, 0x7D71, 0xB2CF, 0x7D2E, 0xB2D0, 0x7D39, 0xB2D1, 0x7D3C, 0xB2D2, 0x7D40, + 0xB2D3, 0x7D30, 0xB2D4, 0x7D33, 0xB2D5, 0x7D44, 0xB2D6, 0x7D2F, 0xB2D7, 0x7D42, 0xB2D8, 0x7D32, 0xB2D9, 0x7D31, 0xB2DA, 0x7F3D, + 0xB2DB, 0x7F9E, 0xB2DC, 0x7F9A, 0xB2DD, 0x7FCC, 0xB2DE, 0x7FCE, 0xB2DF, 0x7FD2, 0xB2E0, 0x801C, 0xB2E1, 0x804A, 0xB2E2, 0x8046, + 0xB2E3, 0x812F, 0xB2E4, 0x8116, 0xB2E5, 0x8123, 0xB2E6, 0x812B, 0xB2E7, 0x8129, 0xB2E8, 0x8130, 0xB2E9, 0x8124, 0xB2EA, 0x8202, + 0xB2EB, 0x8235, 0xB2EC, 0x8237, 0xB2ED, 0x8236, 0xB2EE, 0x8239, 0xB2EF, 0x838E, 0xB2F0, 0x839E, 0xB2F1, 0x8398, 0xB2F2, 0x8378, + 0xB2F3, 0x83A2, 0xB2F4, 0x8396, 0xB2F5, 0x83BD, 0xB2F6, 0x83AB, 0xB2F7, 0x8392, 0xB2F8, 0x838A, 0xB2F9, 0x8393, 0xB2FA, 0x8389, + 0xB2FB, 0x83A0, 0xB2FC, 0x8377, 0xB2FD, 0x837B, 0xB2FE, 0x837C, 0xB340, 0x8386, 0xB341, 0x83A7, 0xB342, 0x8655, 0xB343, 0x5F6A, + 0xB344, 0x86C7, 0xB345, 0x86C0, 0xB346, 0x86B6, 0xB347, 0x86C4, 0xB348, 0x86B5, 0xB349, 0x86C6, 0xB34A, 0x86CB, 0xB34B, 0x86B1, + 0xB34C, 0x86AF, 0xB34D, 0x86C9, 0xB34E, 0x8853, 0xB34F, 0x889E, 0xB350, 0x8888, 0xB351, 0x88AB, 0xB352, 0x8892, 0xB353, 0x8896, + 0xB354, 0x888D, 0xB355, 0x888B, 0xB356, 0x8993, 0xB357, 0x898F, 0xB358, 0x8A2A, 0xB359, 0x8A1D, 0xB35A, 0x8A23, 0xB35B, 0x8A25, + 0xB35C, 0x8A31, 0xB35D, 0x8A2D, 0xB35E, 0x8A1F, 0xB35F, 0x8A1B, 0xB360, 0x8A22, 0xB361, 0x8C49, 0xB362, 0x8C5A, 0xB363, 0x8CA9, + 0xB364, 0x8CAC, 0xB365, 0x8CAB, 0xB366, 0x8CA8, 0xB367, 0x8CAA, 0xB368, 0x8CA7, 0xB369, 0x8D67, 0xB36A, 0x8D66, 0xB36B, 0x8DBE, + 0xB36C, 0x8DBA, 0xB36D, 0x8EDB, 0xB36E, 0x8EDF, 0xB36F, 0x9019, 0xB370, 0x900D, 0xB371, 0x901A, 0xB372, 0x9017, 0xB373, 0x9023, + 0xB374, 0x901F, 0xB375, 0x901D, 0xB376, 0x9010, 0xB377, 0x9015, 0xB378, 0x901E, 0xB379, 0x9020, 0xB37A, 0x900F, 0xB37B, 0x9022, + 0xB37C, 0x9016, 0xB37D, 0x901B, 0xB37E, 0x9014, 0xB3A1, 0x90E8, 0xB3A2, 0x90ED, 0xB3A3, 0x90FD, 0xB3A4, 0x9157, 0xB3A5, 0x91CE, + 0xB3A6, 0x91F5, 0xB3A7, 0x91E6, 0xB3A8, 0x91E3, 0xB3A9, 0x91E7, 0xB3AA, 0x91ED, 0xB3AB, 0x91E9, 0xB3AC, 0x9589, 0xB3AD, 0x966A, + 0xB3AE, 0x9675, 0xB3AF, 0x9673, 0xB3B0, 0x9678, 0xB3B1, 0x9670, 0xB3B2, 0x9674, 0xB3B3, 0x9676, 0xB3B4, 0x9677, 0xB3B5, 0x966C, + 0xB3B6, 0x96C0, 0xB3B7, 0x96EA, 0xB3B8, 0x96E9, 0xB3B9, 0x7AE0, 0xB3BA, 0x7ADF, 0xB3BB, 0x9802, 0xB3BC, 0x9803, 0xB3BD, 0x9B5A, + 0xB3BE, 0x9CE5, 0xB3BF, 0x9E75, 0xB3C0, 0x9E7F, 0xB3C1, 0x9EA5, 0xB3C2, 0x9EBB, 0xB3C3, 0x50A2, 0xB3C4, 0x508D, 0xB3C5, 0x5085, + 0xB3C6, 0x5099, 0xB3C7, 0x5091, 0xB3C8, 0x5080, 0xB3C9, 0x5096, 0xB3CA, 0x5098, 0xB3CB, 0x509A, 0xB3CC, 0x6700, 0xB3CD, 0x51F1, + 0xB3CE, 0x5272, 0xB3CF, 0x5274, 0xB3D0, 0x5275, 0xB3D1, 0x5269, 0xB3D2, 0x52DE, 0xB3D3, 0x52DD, 0xB3D4, 0x52DB, 0xB3D5, 0x535A, + 0xB3D6, 0x53A5, 0xB3D7, 0x557B, 0xB3D8, 0x5580, 0xB3D9, 0x55A7, 0xB3DA, 0x557C, 0xB3DB, 0x558A, 0xB3DC, 0x559D, 0xB3DD, 0x5598, + 0xB3DE, 0x5582, 0xB3DF, 0x559C, 0xB3E0, 0x55AA, 0xB3E1, 0x5594, 0xB3E2, 0x5587, 0xB3E3, 0x558B, 0xB3E4, 0x5583, 0xB3E5, 0x55B3, + 0xB3E6, 0x55AE, 0xB3E7, 0x559F, 0xB3E8, 0x553E, 0xB3E9, 0x55B2, 0xB3EA, 0x559A, 0xB3EB, 0x55BB, 0xB3EC, 0x55AC, 0xB3ED, 0x55B1, + 0xB3EE, 0x557E, 0xB3EF, 0x5589, 0xB3F0, 0x55AB, 0xB3F1, 0x5599, 0xB3F2, 0x570D, 0xB3F3, 0x582F, 0xB3F4, 0x582A, 0xB3F5, 0x5834, + 0xB3F6, 0x5824, 0xB3F7, 0x5830, 0xB3F8, 0x5831, 0xB3F9, 0x5821, 0xB3FA, 0x581D, 0xB3FB, 0x5820, 0xB3FC, 0x58F9, 0xB3FD, 0x58FA, + 0xB3FE, 0x5960, 0xB440, 0x5A77, 0xB441, 0x5A9A, 0xB442, 0x5A7F, 0xB443, 0x5A92, 0xB444, 0x5A9B, 0xB445, 0x5AA7, 0xB446, 0x5B73, + 0xB447, 0x5B71, 0xB448, 0x5BD2, 0xB449, 0x5BCC, 0xB44A, 0x5BD3, 0xB44B, 0x5BD0, 0xB44C, 0x5C0A, 0xB44D, 0x5C0B, 0xB44E, 0x5C31, + 0xB44F, 0x5D4C, 0xB450, 0x5D50, 0xB451, 0x5D34, 0xB452, 0x5D47, 0xB453, 0x5DFD, 0xB454, 0x5E45, 0xB455, 0x5E3D, 0xB456, 0x5E40, + 0xB457, 0x5E43, 0xB458, 0x5E7E, 0xB459, 0x5ECA, 0xB45A, 0x5EC1, 0xB45B, 0x5EC2, 0xB45C, 0x5EC4, 0xB45D, 0x5F3C, 0xB45E, 0x5F6D, + 0xB45F, 0x5FA9, 0xB460, 0x5FAA, 0xB461, 0x5FA8, 0xB462, 0x60D1, 0xB463, 0x60E1, 0xB464, 0x60B2, 0xB465, 0x60B6, 0xB466, 0x60E0, + 0xB467, 0x611C, 0xB468, 0x6123, 0xB469, 0x60FA, 0xB46A, 0x6115, 0xB46B, 0x60F0, 0xB46C, 0x60FB, 0xB46D, 0x60F4, 0xB46E, 0x6168, + 0xB46F, 0x60F1, 0xB470, 0x610E, 0xB471, 0x60F6, 0xB472, 0x6109, 0xB473, 0x6100, 0xB474, 0x6112, 0xB475, 0x621F, 0xB476, 0x6249, + 0xB477, 0x63A3, 0xB478, 0x638C, 0xB479, 0x63CF, 0xB47A, 0x63C0, 0xB47B, 0x63E9, 0xB47C, 0x63C9, 0xB47D, 0x63C6, 0xB47E, 0x63CD, + 0xB4A1, 0x63D2, 0xB4A2, 0x63E3, 0xB4A3, 0x63D0, 0xB4A4, 0x63E1, 0xB4A5, 0x63D6, 0xB4A6, 0x63ED, 0xB4A7, 0x63EE, 0xB4A8, 0x6376, + 0xB4A9, 0x63F4, 0xB4AA, 0x63EA, 0xB4AB, 0x63DB, 0xB4AC, 0x6452, 0xB4AD, 0x63DA, 0xB4AE, 0x63F9, 0xB4AF, 0x655E, 0xB4B0, 0x6566, + 0xB4B1, 0x6562, 0xB4B2, 0x6563, 0xB4B3, 0x6591, 0xB4B4, 0x6590, 0xB4B5, 0x65AF, 0xB4B6, 0x666E, 0xB4B7, 0x6670, 0xB4B8, 0x6674, + 0xB4B9, 0x6676, 0xB4BA, 0x666F, 0xB4BB, 0x6691, 0xB4BC, 0x667A, 0xB4BD, 0x667E, 0xB4BE, 0x6677, 0xB4BF, 0x66FE, 0xB4C0, 0x66FF, + 0xB4C1, 0x671F, 0xB4C2, 0x671D, 0xB4C3, 0x68FA, 0xB4C4, 0x68D5, 0xB4C5, 0x68E0, 0xB4C6, 0x68D8, 0xB4C7, 0x68D7, 0xB4C8, 0x6905, + 0xB4C9, 0x68DF, 0xB4CA, 0x68F5, 0xB4CB, 0x68EE, 0xB4CC, 0x68E7, 0xB4CD, 0x68F9, 0xB4CE, 0x68D2, 0xB4CF, 0x68F2, 0xB4D0, 0x68E3, + 0xB4D1, 0x68CB, 0xB4D2, 0x68CD, 0xB4D3, 0x690D, 0xB4D4, 0x6912, 0xB4D5, 0x690E, 0xB4D6, 0x68C9, 0xB4D7, 0x68DA, 0xB4D8, 0x696E, + 0xB4D9, 0x68FB, 0xB4DA, 0x6B3E, 0xB4DB, 0x6B3A, 0xB4DC, 0x6B3D, 0xB4DD, 0x6B98, 0xB4DE, 0x6B96, 0xB4DF, 0x6BBC, 0xB4E0, 0x6BEF, + 0xB4E1, 0x6C2E, 0xB4E2, 0x6C2F, 0xB4E3, 0x6C2C, 0xB4E4, 0x6E2F, 0xB4E5, 0x6E38, 0xB4E6, 0x6E54, 0xB4E7, 0x6E21, 0xB4E8, 0x6E32, + 0xB4E9, 0x6E67, 0xB4EA, 0x6E4A, 0xB4EB, 0x6E20, 0xB4EC, 0x6E25, 0xB4ED, 0x6E23, 0xB4EE, 0x6E1B, 0xB4EF, 0x6E5B, 0xB4F0, 0x6E58, + 0xB4F1, 0x6E24, 0xB4F2, 0x6E56, 0xB4F3, 0x6E6E, 0xB4F4, 0x6E2D, 0xB4F5, 0x6E26, 0xB4F6, 0x6E6F, 0xB4F7, 0x6E34, 0xB4F8, 0x6E4D, + 0xB4F9, 0x6E3A, 0xB4FA, 0x6E2C, 0xB4FB, 0x6E43, 0xB4FC, 0x6E1D, 0xB4FD, 0x6E3E, 0xB4FE, 0x6ECB, 0xB540, 0x6E89, 0xB541, 0x6E19, + 0xB542, 0x6E4E, 0xB543, 0x6E63, 0xB544, 0x6E44, 0xB545, 0x6E72, 0xB546, 0x6E69, 0xB547, 0x6E5F, 0xB548, 0x7119, 0xB549, 0x711A, + 0xB54A, 0x7126, 0xB54B, 0x7130, 0xB54C, 0x7121, 0xB54D, 0x7136, 0xB54E, 0x716E, 0xB54F, 0x711C, 0xB550, 0x724C, 0xB551, 0x7284, + 0xB552, 0x7280, 0xB553, 0x7336, 0xB554, 0x7325, 0xB555, 0x7334, 0xB556, 0x7329, 0xB557, 0x743A, 0xB558, 0x742A, 0xB559, 0x7433, + 0xB55A, 0x7422, 0xB55B, 0x7425, 0xB55C, 0x7435, 0xB55D, 0x7436, 0xB55E, 0x7434, 0xB55F, 0x742F, 0xB560, 0x741B, 0xB561, 0x7426, + 0xB562, 0x7428, 0xB563, 0x7525, 0xB564, 0x7526, 0xB565, 0x756B, 0xB566, 0x756A, 0xB567, 0x75E2, 0xB568, 0x75DB, 0xB569, 0x75E3, + 0xB56A, 0x75D9, 0xB56B, 0x75D8, 0xB56C, 0x75DE, 0xB56D, 0x75E0, 0xB56E, 0x767B, 0xB56F, 0x767C, 0xB570, 0x7696, 0xB571, 0x7693, + 0xB572, 0x76B4, 0xB573, 0x76DC, 0xB574, 0x774F, 0xB575, 0x77ED, 0xB576, 0x785D, 0xB577, 0x786C, 0xB578, 0x786F, 0xB579, 0x7A0D, + 0xB57A, 0x7A08, 0xB57B, 0x7A0B, 0xB57C, 0x7A05, 0xB57D, 0x7A00, 0xB57E, 0x7A98, 0xB5A1, 0x7A97, 0xB5A2, 0x7A96, 0xB5A3, 0x7AE5, + 0xB5A4, 0x7AE3, 0xB5A5, 0x7B49, 0xB5A6, 0x7B56, 0xB5A7, 0x7B46, 0xB5A8, 0x7B50, 0xB5A9, 0x7B52, 0xB5AA, 0x7B54, 0xB5AB, 0x7B4D, + 0xB5AC, 0x7B4B, 0xB5AD, 0x7B4F, 0xB5AE, 0x7B51, 0xB5AF, 0x7C9F, 0xB5B0, 0x7CA5, 0xB5B1, 0x7D5E, 0xB5B2, 0x7D50, 0xB5B3, 0x7D68, + 0xB5B4, 0x7D55, 0xB5B5, 0x7D2B, 0xB5B6, 0x7D6E, 0xB5B7, 0x7D72, 0xB5B8, 0x7D61, 0xB5B9, 0x7D66, 0xB5BA, 0x7D62, 0xB5BB, 0x7D70, + 0xB5BC, 0x7D73, 0xB5BD, 0x5584, 0xB5BE, 0x7FD4, 0xB5BF, 0x7FD5, 0xB5C0, 0x800B, 0xB5C1, 0x8052, 0xB5C2, 0x8085, 0xB5C3, 0x8155, + 0xB5C4, 0x8154, 0xB5C5, 0x814B, 0xB5C6, 0x8151, 0xB5C7, 0x814E, 0xB5C8, 0x8139, 0xB5C9, 0x8146, 0xB5CA, 0x813E, 0xB5CB, 0x814C, + 0xB5CC, 0x8153, 0xB5CD, 0x8174, 0xB5CE, 0x8212, 0xB5CF, 0x821C, 0xB5D0, 0x83E9, 0xB5D1, 0x8403, 0xB5D2, 0x83F8, 0xB5D3, 0x840D, + 0xB5D4, 0x83E0, 0xB5D5, 0x83C5, 0xB5D6, 0x840B, 0xB5D7, 0x83C1, 0xB5D8, 0x83EF, 0xB5D9, 0x83F1, 0xB5DA, 0x83F4, 0xB5DB, 0x8457, + 0xB5DC, 0x840A, 0xB5DD, 0x83F0, 0xB5DE, 0x840C, 0xB5DF, 0x83CC, 0xB5E0, 0x83FD, 0xB5E1, 0x83F2, 0xB5E2, 0x83CA, 0xB5E3, 0x8438, + 0xB5E4, 0x840E, 0xB5E5, 0x8404, 0xB5E6, 0x83DC, 0xB5E7, 0x8407, 0xB5E8, 0x83D4, 0xB5E9, 0x83DF, 0xB5EA, 0x865B, 0xB5EB, 0x86DF, + 0xB5EC, 0x86D9, 0xB5ED, 0x86ED, 0xB5EE, 0x86D4, 0xB5EF, 0x86DB, 0xB5F0, 0x86E4, 0xB5F1, 0x86D0, 0xB5F2, 0x86DE, 0xB5F3, 0x8857, + 0xB5F4, 0x88C1, 0xB5F5, 0x88C2, 0xB5F6, 0x88B1, 0xB5F7, 0x8983, 0xB5F8, 0x8996, 0xB5F9, 0x8A3B, 0xB5FA, 0x8A60, 0xB5FB, 0x8A55, + 0xB5FC, 0x8A5E, 0xB5FD, 0x8A3C, 0xB5FE, 0x8A41, 0xB640, 0x8A54, 0xB641, 0x8A5B, 0xB642, 0x8A50, 0xB643, 0x8A46, 0xB644, 0x8A34, + 0xB645, 0x8A3A, 0xB646, 0x8A36, 0xB647, 0x8A56, 0xB648, 0x8C61, 0xB649, 0x8C82, 0xB64A, 0x8CAF, 0xB64B, 0x8CBC, 0xB64C, 0x8CB3, + 0xB64D, 0x8CBD, 0xB64E, 0x8CC1, 0xB64F, 0x8CBB, 0xB650, 0x8CC0, 0xB651, 0x8CB4, 0xB652, 0x8CB7, 0xB653, 0x8CB6, 0xB654, 0x8CBF, + 0xB655, 0x8CB8, 0xB656, 0x8D8A, 0xB657, 0x8D85, 0xB658, 0x8D81, 0xB659, 0x8DCE, 0xB65A, 0x8DDD, 0xB65B, 0x8DCB, 0xB65C, 0x8DDA, + 0xB65D, 0x8DD1, 0xB65E, 0x8DCC, 0xB65F, 0x8DDB, 0xB660, 0x8DC6, 0xB661, 0x8EFB, 0xB662, 0x8EF8, 0xB663, 0x8EFC, 0xB664, 0x8F9C, + 0xB665, 0x902E, 0xB666, 0x9035, 0xB667, 0x9031, 0xB668, 0x9038, 0xB669, 0x9032, 0xB66A, 0x9036, 0xB66B, 0x9102, 0xB66C, 0x90F5, + 0xB66D, 0x9109, 0xB66E, 0x90FE, 0xB66F, 0x9163, 0xB670, 0x9165, 0xB671, 0x91CF, 0xB672, 0x9214, 0xB673, 0x9215, 0xB674, 0x9223, + 0xB675, 0x9209, 0xB676, 0x921E, 0xB677, 0x920D, 0xB678, 0x9210, 0xB679, 0x9207, 0xB67A, 0x9211, 0xB67B, 0x9594, 0xB67C, 0x958F, + 0xB67D, 0x958B, 0xB67E, 0x9591, 0xB6A1, 0x9593, 0xB6A2, 0x9592, 0xB6A3, 0x958E, 0xB6A4, 0x968A, 0xB6A5, 0x968E, 0xB6A6, 0x968B, + 0xB6A7, 0x967D, 0xB6A8, 0x9685, 0xB6A9, 0x9686, 0xB6AA, 0x968D, 0xB6AB, 0x9672, 0xB6AC, 0x9684, 0xB6AD, 0x96C1, 0xB6AE, 0x96C5, + 0xB6AF, 0x96C4, 0xB6B0, 0x96C6, 0xB6B1, 0x96C7, 0xB6B2, 0x96EF, 0xB6B3, 0x96F2, 0xB6B4, 0x97CC, 0xB6B5, 0x9805, 0xB6B6, 0x9806, + 0xB6B7, 0x9808, 0xB6B8, 0x98E7, 0xB6B9, 0x98EA, 0xB6BA, 0x98EF, 0xB6BB, 0x98E9, 0xB6BC, 0x98F2, 0xB6BD, 0x98ED, 0xB6BE, 0x99AE, + 0xB6BF, 0x99AD, 0xB6C0, 0x9EC3, 0xB6C1, 0x9ECD, 0xB6C2, 0x9ED1, 0xB6C3, 0x4E82, 0xB6C4, 0x50AD, 0xB6C5, 0x50B5, 0xB6C6, 0x50B2, + 0xB6C7, 0x50B3, 0xB6C8, 0x50C5, 0xB6C9, 0x50BE, 0xB6CA, 0x50AC, 0xB6CB, 0x50B7, 0xB6CC, 0x50BB, 0xB6CD, 0x50AF, 0xB6CE, 0x50C7, + 0xB6CF, 0x527F, 0xB6D0, 0x5277, 0xB6D1, 0x527D, 0xB6D2, 0x52DF, 0xB6D3, 0x52E6, 0xB6D4, 0x52E4, 0xB6D5, 0x52E2, 0xB6D6, 0x52E3, + 0xB6D7, 0x532F, 0xB6D8, 0x55DF, 0xB6D9, 0x55E8, 0xB6DA, 0x55D3, 0xB6DB, 0x55E6, 0xB6DC, 0x55CE, 0xB6DD, 0x55DC, 0xB6DE, 0x55C7, + 0xB6DF, 0x55D1, 0xB6E0, 0x55E3, 0xB6E1, 0x55E4, 0xB6E2, 0x55EF, 0xB6E3, 0x55DA, 0xB6E4, 0x55E1, 0xB6E5, 0x55C5, 0xB6E6, 0x55C6, + 0xB6E7, 0x55E5, 0xB6E8, 0x55C9, 0xB6E9, 0x5712, 0xB6EA, 0x5713, 0xB6EB, 0x585E, 0xB6EC, 0x5851, 0xB6ED, 0x5858, 0xB6EE, 0x5857, + 0xB6EF, 0x585A, 0xB6F0, 0x5854, 0xB6F1, 0x586B, 0xB6F2, 0x584C, 0xB6F3, 0x586D, 0xB6F4, 0x584A, 0xB6F5, 0x5862, 0xB6F6, 0x5852, + 0xB6F7, 0x584B, 0xB6F8, 0x5967, 0xB6F9, 0x5AC1, 0xB6FA, 0x5AC9, 0xB6FB, 0x5ACC, 0xB6FC, 0x5ABE, 0xB6FD, 0x5ABD, 0xB6FE, 0x5ABC, + 0xB740, 0x5AB3, 0xB741, 0x5AC2, 0xB742, 0x5AB2, 0xB743, 0x5D69, 0xB744, 0x5D6F, 0xB745, 0x5E4C, 0xB746, 0x5E79, 0xB747, 0x5EC9, + 0xB748, 0x5EC8, 0xB749, 0x5F12, 0xB74A, 0x5F59, 0xB74B, 0x5FAC, 0xB74C, 0x5FAE, 0xB74D, 0x611A, 0xB74E, 0x610F, 0xB74F, 0x6148, + 0xB750, 0x611F, 0xB751, 0x60F3, 0xB752, 0x611B, 0xB753, 0x60F9, 0xB754, 0x6101, 0xB755, 0x6108, 0xB756, 0x614E, 0xB757, 0x614C, + 0xB758, 0x6144, 0xB759, 0x614D, 0xB75A, 0x613E, 0xB75B, 0x6134, 0xB75C, 0x6127, 0xB75D, 0x610D, 0xB75E, 0x6106, 0xB75F, 0x6137, + 0xB760, 0x6221, 0xB761, 0x6222, 0xB762, 0x6413, 0xB763, 0x643E, 0xB764, 0x641E, 0xB765, 0x642A, 0xB766, 0x642D, 0xB767, 0x643D, + 0xB768, 0x642C, 0xB769, 0x640F, 0xB76A, 0x641C, 0xB76B, 0x6414, 0xB76C, 0x640D, 0xB76D, 0x6436, 0xB76E, 0x6416, 0xB76F, 0x6417, + 0xB770, 0x6406, 0xB771, 0x656C, 0xB772, 0x659F, 0xB773, 0x65B0, 0xB774, 0x6697, 0xB775, 0x6689, 0xB776, 0x6687, 0xB777, 0x6688, + 0xB778, 0x6696, 0xB779, 0x6684, 0xB77A, 0x6698, 0xB77B, 0x668D, 0xB77C, 0x6703, 0xB77D, 0x6994, 0xB77E, 0x696D, 0xB7A1, 0x695A, + 0xB7A2, 0x6977, 0xB7A3, 0x6960, 0xB7A4, 0x6954, 0xB7A5, 0x6975, 0xB7A6, 0x6930, 0xB7A7, 0x6982, 0xB7A8, 0x694A, 0xB7A9, 0x6968, + 0xB7AA, 0x696B, 0xB7AB, 0x695E, 0xB7AC, 0x6953, 0xB7AD, 0x6979, 0xB7AE, 0x6986, 0xB7AF, 0x695D, 0xB7B0, 0x6963, 0xB7B1, 0x695B, + 0xB7B2, 0x6B47, 0xB7B3, 0x6B72, 0xB7B4, 0x6BC0, 0xB7B5, 0x6BBF, 0xB7B6, 0x6BD3, 0xB7B7, 0x6BFD, 0xB7B8, 0x6EA2, 0xB7B9, 0x6EAF, + 0xB7BA, 0x6ED3, 0xB7BB, 0x6EB6, 0xB7BC, 0x6EC2, 0xB7BD, 0x6E90, 0xB7BE, 0x6E9D, 0xB7BF, 0x6EC7, 0xB7C0, 0x6EC5, 0xB7C1, 0x6EA5, + 0xB7C2, 0x6E98, 0xB7C3, 0x6EBC, 0xB7C4, 0x6EBA, 0xB7C5, 0x6EAB, 0xB7C6, 0x6ED1, 0xB7C7, 0x6E96, 0xB7C8, 0x6E9C, 0xB7C9, 0x6EC4, + 0xB7CA, 0x6ED4, 0xB7CB, 0x6EAA, 0xB7CC, 0x6EA7, 0xB7CD, 0x6EB4, 0xB7CE, 0x714E, 0xB7CF, 0x7159, 0xB7D0, 0x7169, 0xB7D1, 0x7164, + 0xB7D2, 0x7149, 0xB7D3, 0x7167, 0xB7D4, 0x715C, 0xB7D5, 0x716C, 0xB7D6, 0x7166, 0xB7D7, 0x714C, 0xB7D8, 0x7165, 0xB7D9, 0x715E, + 0xB7DA, 0x7146, 0xB7DB, 0x7168, 0xB7DC, 0x7156, 0xB7DD, 0x723A, 0xB7DE, 0x7252, 0xB7DF, 0x7337, 0xB7E0, 0x7345, 0xB7E1, 0x733F, + 0xB7E2, 0x733E, 0xB7E3, 0x746F, 0xB7E4, 0x745A, 0xB7E5, 0x7455, 0xB7E6, 0x745F, 0xB7E7, 0x745E, 0xB7E8, 0x7441, 0xB7E9, 0x743F, + 0xB7EA, 0x7459, 0xB7EB, 0x745B, 0xB7EC, 0x745C, 0xB7ED, 0x7576, 0xB7EE, 0x7578, 0xB7EF, 0x7600, 0xB7F0, 0x75F0, 0xB7F1, 0x7601, + 0xB7F2, 0x75F2, 0xB7F3, 0x75F1, 0xB7F4, 0x75FA, 0xB7F5, 0x75FF, 0xB7F6, 0x75F4, 0xB7F7, 0x75F3, 0xB7F8, 0x76DE, 0xB7F9, 0x76DF, + 0xB7FA, 0x775B, 0xB7FB, 0x776B, 0xB7FC, 0x7766, 0xB7FD, 0x775E, 0xB7FE, 0x7763, 0xB840, 0x7779, 0xB841, 0x776A, 0xB842, 0x776C, + 0xB843, 0x775C, 0xB844, 0x7765, 0xB845, 0x7768, 0xB846, 0x7762, 0xB847, 0x77EE, 0xB848, 0x788E, 0xB849, 0x78B0, 0xB84A, 0x7897, + 0xB84B, 0x7898, 0xB84C, 0x788C, 0xB84D, 0x7889, 0xB84E, 0x787C, 0xB84F, 0x7891, 0xB850, 0x7893, 0xB851, 0x787F, 0xB852, 0x797A, + 0xB853, 0x797F, 0xB854, 0x7981, 0xB855, 0x842C, 0xB856, 0x79BD, 0xB857, 0x7A1C, 0xB858, 0x7A1A, 0xB859, 0x7A20, 0xB85A, 0x7A14, + 0xB85B, 0x7A1F, 0xB85C, 0x7A1E, 0xB85D, 0x7A9F, 0xB85E, 0x7AA0, 0xB85F, 0x7B77, 0xB860, 0x7BC0, 0xB861, 0x7B60, 0xB862, 0x7B6E, + 0xB863, 0x7B67, 0xB864, 0x7CB1, 0xB865, 0x7CB3, 0xB866, 0x7CB5, 0xB867, 0x7D93, 0xB868, 0x7D79, 0xB869, 0x7D91, 0xB86A, 0x7D81, + 0xB86B, 0x7D8F, 0xB86C, 0x7D5B, 0xB86D, 0x7F6E, 0xB86E, 0x7F69, 0xB86F, 0x7F6A, 0xB870, 0x7F72, 0xB871, 0x7FA9, 0xB872, 0x7FA8, + 0xB873, 0x7FA4, 0xB874, 0x8056, 0xB875, 0x8058, 0xB876, 0x8086, 0xB877, 0x8084, 0xB878, 0x8171, 0xB879, 0x8170, 0xB87A, 0x8178, + 0xB87B, 0x8165, 0xB87C, 0x816E, 0xB87D, 0x8173, 0xB87E, 0x816B, 0xB8A1, 0x8179, 0xB8A2, 0x817A, 0xB8A3, 0x8166, 0xB8A4, 0x8205, + 0xB8A5, 0x8247, 0xB8A6, 0x8482, 0xB8A7, 0x8477, 0xB8A8, 0x843D, 0xB8A9, 0x8431, 0xB8AA, 0x8475, 0xB8AB, 0x8466, 0xB8AC, 0x846B, + 0xB8AD, 0x8449, 0xB8AE, 0x846C, 0xB8AF, 0x845B, 0xB8B0, 0x843C, 0xB8B1, 0x8435, 0xB8B2, 0x8461, 0xB8B3, 0x8463, 0xB8B4, 0x8469, + 0xB8B5, 0x846D, 0xB8B6, 0x8446, 0xB8B7, 0x865E, 0xB8B8, 0x865C, 0xB8B9, 0x865F, 0xB8BA, 0x86F9, 0xB8BB, 0x8713, 0xB8BC, 0x8708, + 0xB8BD, 0x8707, 0xB8BE, 0x8700, 0xB8BF, 0x86FE, 0xB8C0, 0x86FB, 0xB8C1, 0x8702, 0xB8C2, 0x8703, 0xB8C3, 0x8706, 0xB8C4, 0x870A, + 0xB8C5, 0x8859, 0xB8C6, 0x88DF, 0xB8C7, 0x88D4, 0xB8C8, 0x88D9, 0xB8C9, 0x88DC, 0xB8CA, 0x88D8, 0xB8CB, 0x88DD, 0xB8CC, 0x88E1, + 0xB8CD, 0x88CA, 0xB8CE, 0x88D5, 0xB8CF, 0x88D2, 0xB8D0, 0x899C, 0xB8D1, 0x89E3, 0xB8D2, 0x8A6B, 0xB8D3, 0x8A72, 0xB8D4, 0x8A73, + 0xB8D5, 0x8A66, 0xB8D6, 0x8A69, 0xB8D7, 0x8A70, 0xB8D8, 0x8A87, 0xB8D9, 0x8A7C, 0xB8DA, 0x8A63, 0xB8DB, 0x8AA0, 0xB8DC, 0x8A71, + 0xB8DD, 0x8A85, 0xB8DE, 0x8A6D, 0xB8DF, 0x8A62, 0xB8E0, 0x8A6E, 0xB8E1, 0x8A6C, 0xB8E2, 0x8A79, 0xB8E3, 0x8A7B, 0xB8E4, 0x8A3E, + 0xB8E5, 0x8A68, 0xB8E6, 0x8C62, 0xB8E7, 0x8C8A, 0xB8E8, 0x8C89, 0xB8E9, 0x8CCA, 0xB8EA, 0x8CC7, 0xB8EB, 0x8CC8, 0xB8EC, 0x8CC4, + 0xB8ED, 0x8CB2, 0xB8EE, 0x8CC3, 0xB8EF, 0x8CC2, 0xB8F0, 0x8CC5, 0xB8F1, 0x8DE1, 0xB8F2, 0x8DDF, 0xB8F3, 0x8DE8, 0xB8F4, 0x8DEF, + 0xB8F5, 0x8DF3, 0xB8F6, 0x8DFA, 0xB8F7, 0x8DEA, 0xB8F8, 0x8DE4, 0xB8F9, 0x8DE6, 0xB8FA, 0x8EB2, 0xB8FB, 0x8F03, 0xB8FC, 0x8F09, + 0xB8FD, 0x8EFE, 0xB8FE, 0x8F0A, 0xB940, 0x8F9F, 0xB941, 0x8FB2, 0xB942, 0x904B, 0xB943, 0x904A, 0xB944, 0x9053, 0xB945, 0x9042, + 0xB946, 0x9054, 0xB947, 0x903C, 0xB948, 0x9055, 0xB949, 0x9050, 0xB94A, 0x9047, 0xB94B, 0x904F, 0xB94C, 0x904E, 0xB94D, 0x904D, + 0xB94E, 0x9051, 0xB94F, 0x903E, 0xB950, 0x9041, 0xB951, 0x9112, 0xB952, 0x9117, 0xB953, 0x916C, 0xB954, 0x916A, 0xB955, 0x9169, + 0xB956, 0x91C9, 0xB957, 0x9237, 0xB958, 0x9257, 0xB959, 0x9238, 0xB95A, 0x923D, 0xB95B, 0x9240, 0xB95C, 0x923E, 0xB95D, 0x925B, + 0xB95E, 0x924B, 0xB95F, 0x9264, 0xB960, 0x9251, 0xB961, 0x9234, 0xB962, 0x9249, 0xB963, 0x924D, 0xB964, 0x9245, 0xB965, 0x9239, + 0xB966, 0x923F, 0xB967, 0x925A, 0xB968, 0x9598, 0xB969, 0x9698, 0xB96A, 0x9694, 0xB96B, 0x9695, 0xB96C, 0x96CD, 0xB96D, 0x96CB, + 0xB96E, 0x96C9, 0xB96F, 0x96CA, 0xB970, 0x96F7, 0xB971, 0x96FB, 0xB972, 0x96F9, 0xB973, 0x96F6, 0xB974, 0x9756, 0xB975, 0x9774, + 0xB976, 0x9776, 0xB977, 0x9810, 0xB978, 0x9811, 0xB979, 0x9813, 0xB97A, 0x980A, 0xB97B, 0x9812, 0xB97C, 0x980C, 0xB97D, 0x98FC, + 0xB97E, 0x98F4, 0xB9A1, 0x98FD, 0xB9A2, 0x98FE, 0xB9A3, 0x99B3, 0xB9A4, 0x99B1, 0xB9A5, 0x99B4, 0xB9A6, 0x9AE1, 0xB9A7, 0x9CE9, + 0xB9A8, 0x9E82, 0xB9A9, 0x9F0E, 0xB9AA, 0x9F13, 0xB9AB, 0x9F20, 0xB9AC, 0x50E7, 0xB9AD, 0x50EE, 0xB9AE, 0x50E5, 0xB9AF, 0x50D6, + 0xB9B0, 0x50ED, 0xB9B1, 0x50DA, 0xB9B2, 0x50D5, 0xB9B3, 0x50CF, 0xB9B4, 0x50D1, 0xB9B5, 0x50F1, 0xB9B6, 0x50CE, 0xB9B7, 0x50E9, + 0xB9B8, 0x5162, 0xB9B9, 0x51F3, 0xB9BA, 0x5283, 0xB9BB, 0x5282, 0xB9BC, 0x5331, 0xB9BD, 0x53AD, 0xB9BE, 0x55FE, 0xB9BF, 0x5600, + 0xB9C0, 0x561B, 0xB9C1, 0x5617, 0xB9C2, 0x55FD, 0xB9C3, 0x5614, 0xB9C4, 0x5606, 0xB9C5, 0x5609, 0xB9C6, 0x560D, 0xB9C7, 0x560E, + 0xB9C8, 0x55F7, 0xB9C9, 0x5616, 0xB9CA, 0x561F, 0xB9CB, 0x5608, 0xB9CC, 0x5610, 0xB9CD, 0x55F6, 0xB9CE, 0x5718, 0xB9CF, 0x5716, + 0xB9D0, 0x5875, 0xB9D1, 0x587E, 0xB9D2, 0x5883, 0xB9D3, 0x5893, 0xB9D4, 0x588A, 0xB9D5, 0x5879, 0xB9D6, 0x5885, 0xB9D7, 0x587D, + 0xB9D8, 0x58FD, 0xB9D9, 0x5925, 0xB9DA, 0x5922, 0xB9DB, 0x5924, 0xB9DC, 0x596A, 0xB9DD, 0x5969, 0xB9DE, 0x5AE1, 0xB9DF, 0x5AE6, + 0xB9E0, 0x5AE9, 0xB9E1, 0x5AD7, 0xB9E2, 0x5AD6, 0xB9E3, 0x5AD8, 0xB9E4, 0x5AE3, 0xB9E5, 0x5B75, 0xB9E6, 0x5BDE, 0xB9E7, 0x5BE7, + 0xB9E8, 0x5BE1, 0xB9E9, 0x5BE5, 0xB9EA, 0x5BE6, 0xB9EB, 0x5BE8, 0xB9EC, 0x5BE2, 0xB9ED, 0x5BE4, 0xB9EE, 0x5BDF, 0xB9EF, 0x5C0D, + 0xB9F0, 0x5C62, 0xB9F1, 0x5D84, 0xB9F2, 0x5D87, 0xB9F3, 0x5E5B, 0xB9F4, 0x5E63, 0xB9F5, 0x5E55, 0xB9F6, 0x5E57, 0xB9F7, 0x5E54, + 0xB9F8, 0x5ED3, 0xB9F9, 0x5ED6, 0xB9FA, 0x5F0A, 0xB9FB, 0x5F46, 0xB9FC, 0x5F70, 0xB9FD, 0x5FB9, 0xB9FE, 0x6147, 0xBA40, 0x613F, + 0xBA41, 0x614B, 0xBA42, 0x6177, 0xBA43, 0x6162, 0xBA44, 0x6163, 0xBA45, 0x615F, 0xBA46, 0x615A, 0xBA47, 0x6158, 0xBA48, 0x6175, + 0xBA49, 0x622A, 0xBA4A, 0x6487, 0xBA4B, 0x6458, 0xBA4C, 0x6454, 0xBA4D, 0x64A4, 0xBA4E, 0x6478, 0xBA4F, 0x645F, 0xBA50, 0x647A, + 0xBA51, 0x6451, 0xBA52, 0x6467, 0xBA53, 0x6434, 0xBA54, 0x646D, 0xBA55, 0x647B, 0xBA56, 0x6572, 0xBA57, 0x65A1, 0xBA58, 0x65D7, + 0xBA59, 0x65D6, 0xBA5A, 0x66A2, 0xBA5B, 0x66A8, 0xBA5C, 0x669D, 0xBA5D, 0x699C, 0xBA5E, 0x69A8, 0xBA5F, 0x6995, 0xBA60, 0x69C1, + 0xBA61, 0x69AE, 0xBA62, 0x69D3, 0xBA63, 0x69CB, 0xBA64, 0x699B, 0xBA65, 0x69B7, 0xBA66, 0x69BB, 0xBA67, 0x69AB, 0xBA68, 0x69B4, + 0xBA69, 0x69D0, 0xBA6A, 0x69CD, 0xBA6B, 0x69AD, 0xBA6C, 0x69CC, 0xBA6D, 0x69A6, 0xBA6E, 0x69C3, 0xBA6F, 0x69A3, 0xBA70, 0x6B49, + 0xBA71, 0x6B4C, 0xBA72, 0x6C33, 0xBA73, 0x6F33, 0xBA74, 0x6F14, 0xBA75, 0x6EFE, 0xBA76, 0x6F13, 0xBA77, 0x6EF4, 0xBA78, 0x6F29, + 0xBA79, 0x6F3E, 0xBA7A, 0x6F20, 0xBA7B, 0x6F2C, 0xBA7C, 0x6F0F, 0xBA7D, 0x6F02, 0xBA7E, 0x6F22, 0xBAA1, 0x6EFF, 0xBAA2, 0x6EEF, + 0xBAA3, 0x6F06, 0xBAA4, 0x6F31, 0xBAA5, 0x6F38, 0xBAA6, 0x6F32, 0xBAA7, 0x6F23, 0xBAA8, 0x6F15, 0xBAA9, 0x6F2B, 0xBAAA, 0x6F2F, + 0xBAAB, 0x6F88, 0xBAAC, 0x6F2A, 0xBAAD, 0x6EEC, 0xBAAE, 0x6F01, 0xBAAF, 0x6EF2, 0xBAB0, 0x6ECC, 0xBAB1, 0x6EF7, 0xBAB2, 0x7194, + 0xBAB3, 0x7199, 0xBAB4, 0x717D, 0xBAB5, 0x718A, 0xBAB6, 0x7184, 0xBAB7, 0x7192, 0xBAB8, 0x723E, 0xBAB9, 0x7292, 0xBABA, 0x7296, + 0xBABB, 0x7344, 0xBABC, 0x7350, 0xBABD, 0x7464, 0xBABE, 0x7463, 0xBABF, 0x746A, 0xBAC0, 0x7470, 0xBAC1, 0x746D, 0xBAC2, 0x7504, + 0xBAC3, 0x7591, 0xBAC4, 0x7627, 0xBAC5, 0x760D, 0xBAC6, 0x760B, 0xBAC7, 0x7609, 0xBAC8, 0x7613, 0xBAC9, 0x76E1, 0xBACA, 0x76E3, + 0xBACB, 0x7784, 0xBACC, 0x777D, 0xBACD, 0x777F, 0xBACE, 0x7761, 0xBACF, 0x78C1, 0xBAD0, 0x789F, 0xBAD1, 0x78A7, 0xBAD2, 0x78B3, + 0xBAD3, 0x78A9, 0xBAD4, 0x78A3, 0xBAD5, 0x798E, 0xBAD6, 0x798F, 0xBAD7, 0x798D, 0xBAD8, 0x7A2E, 0xBAD9, 0x7A31, 0xBADA, 0x7AAA, + 0xBADB, 0x7AA9, 0xBADC, 0x7AED, 0xBADD, 0x7AEF, 0xBADE, 0x7BA1, 0xBADF, 0x7B95, 0xBAE0, 0x7B8B, 0xBAE1, 0x7B75, 0xBAE2, 0x7B97, + 0xBAE3, 0x7B9D, 0xBAE4, 0x7B94, 0xBAE5, 0x7B8F, 0xBAE6, 0x7BB8, 0xBAE7, 0x7B87, 0xBAE8, 0x7B84, 0xBAE9, 0x7CB9, 0xBAEA, 0x7CBD, + 0xBAEB, 0x7CBE, 0xBAEC, 0x7DBB, 0xBAED, 0x7DB0, 0xBAEE, 0x7D9C, 0xBAEF, 0x7DBD, 0xBAF0, 0x7DBE, 0xBAF1, 0x7DA0, 0xBAF2, 0x7DCA, + 0xBAF3, 0x7DB4, 0xBAF4, 0x7DB2, 0xBAF5, 0x7DB1, 0xBAF6, 0x7DBA, 0xBAF7, 0x7DA2, 0xBAF8, 0x7DBF, 0xBAF9, 0x7DB5, 0xBAFA, 0x7DB8, + 0xBAFB, 0x7DAD, 0xBAFC, 0x7DD2, 0xBAFD, 0x7DC7, 0xBAFE, 0x7DAC, 0xBB40, 0x7F70, 0xBB41, 0x7FE0, 0xBB42, 0x7FE1, 0xBB43, 0x7FDF, + 0xBB44, 0x805E, 0xBB45, 0x805A, 0xBB46, 0x8087, 0xBB47, 0x8150, 0xBB48, 0x8180, 0xBB49, 0x818F, 0xBB4A, 0x8188, 0xBB4B, 0x818A, + 0xBB4C, 0x817F, 0xBB4D, 0x8182, 0xBB4E, 0x81E7, 0xBB4F, 0x81FA, 0xBB50, 0x8207, 0xBB51, 0x8214, 0xBB52, 0x821E, 0xBB53, 0x824B, + 0xBB54, 0x84C9, 0xBB55, 0x84BF, 0xBB56, 0x84C6, 0xBB57, 0x84C4, 0xBB58, 0x8499, 0xBB59, 0x849E, 0xBB5A, 0x84B2, 0xBB5B, 0x849C, + 0xBB5C, 0x84CB, 0xBB5D, 0x84B8, 0xBB5E, 0x84C0, 0xBB5F, 0x84D3, 0xBB60, 0x8490, 0xBB61, 0x84BC, 0xBB62, 0x84D1, 0xBB63, 0x84CA, + 0xBB64, 0x873F, 0xBB65, 0x871C, 0xBB66, 0x873B, 0xBB67, 0x8722, 0xBB68, 0x8725, 0xBB69, 0x8734, 0xBB6A, 0x8718, 0xBB6B, 0x8755, + 0xBB6C, 0x8737, 0xBB6D, 0x8729, 0xBB6E, 0x88F3, 0xBB6F, 0x8902, 0xBB70, 0x88F4, 0xBB71, 0x88F9, 0xBB72, 0x88F8, 0xBB73, 0x88FD, + 0xBB74, 0x88E8, 0xBB75, 0x891A, 0xBB76, 0x88EF, 0xBB77, 0x8AA6, 0xBB78, 0x8A8C, 0xBB79, 0x8A9E, 0xBB7A, 0x8AA3, 0xBB7B, 0x8A8D, + 0xBB7C, 0x8AA1, 0xBB7D, 0x8A93, 0xBB7E, 0x8AA4, 0xBBA1, 0x8AAA, 0xBBA2, 0x8AA5, 0xBBA3, 0x8AA8, 0xBBA4, 0x8A98, 0xBBA5, 0x8A91, + 0xBBA6, 0x8A9A, 0xBBA7, 0x8AA7, 0xBBA8, 0x8C6A, 0xBBA9, 0x8C8D, 0xBBAA, 0x8C8C, 0xBBAB, 0x8CD3, 0xBBAC, 0x8CD1, 0xBBAD, 0x8CD2, + 0xBBAE, 0x8D6B, 0xBBAF, 0x8D99, 0xBBB0, 0x8D95, 0xBBB1, 0x8DFC, 0xBBB2, 0x8F14, 0xBBB3, 0x8F12, 0xBBB4, 0x8F15, 0xBBB5, 0x8F13, + 0xBBB6, 0x8FA3, 0xBBB7, 0x9060, 0xBBB8, 0x9058, 0xBBB9, 0x905C, 0xBBBA, 0x9063, 0xBBBB, 0x9059, 0xBBBC, 0x905E, 0xBBBD, 0x9062, + 0xBBBE, 0x905D, 0xBBBF, 0x905B, 0xBBC0, 0x9119, 0xBBC1, 0x9118, 0xBBC2, 0x911E, 0xBBC3, 0x9175, 0xBBC4, 0x9178, 0xBBC5, 0x9177, + 0xBBC6, 0x9174, 0xBBC7, 0x9278, 0xBBC8, 0x9280, 0xBBC9, 0x9285, 0xBBCA, 0x9298, 0xBBCB, 0x9296, 0xBBCC, 0x927B, 0xBBCD, 0x9293, + 0xBBCE, 0x929C, 0xBBCF, 0x92A8, 0xBBD0, 0x927C, 0xBBD1, 0x9291, 0xBBD2, 0x95A1, 0xBBD3, 0x95A8, 0xBBD4, 0x95A9, 0xBBD5, 0x95A3, + 0xBBD6, 0x95A5, 0xBBD7, 0x95A4, 0xBBD8, 0x9699, 0xBBD9, 0x969C, 0xBBDA, 0x969B, 0xBBDB, 0x96CC, 0xBBDC, 0x96D2, 0xBBDD, 0x9700, + 0xBBDE, 0x977C, 0xBBDF, 0x9785, 0xBBE0, 0x97F6, 0xBBE1, 0x9817, 0xBBE2, 0x9818, 0xBBE3, 0x98AF, 0xBBE4, 0x98B1, 0xBBE5, 0x9903, + 0xBBE6, 0x9905, 0xBBE7, 0x990C, 0xBBE8, 0x9909, 0xBBE9, 0x99C1, 0xBBEA, 0x9AAF, 0xBBEB, 0x9AB0, 0xBBEC, 0x9AE6, 0xBBED, 0x9B41, + 0xBBEE, 0x9B42, 0xBBEF, 0x9CF4, 0xBBF0, 0x9CF6, 0xBBF1, 0x9CF3, 0xBBF2, 0x9EBC, 0xBBF3, 0x9F3B, 0xBBF4, 0x9F4A, 0xBBF5, 0x5104, + 0xBBF6, 0x5100, 0xBBF7, 0x50FB, 0xBBF8, 0x50F5, 0xBBF9, 0x50F9, 0xBBFA, 0x5102, 0xBBFB, 0x5108, 0xBBFC, 0x5109, 0xBBFD, 0x5105, + 0xBBFE, 0x51DC, 0xBC40, 0x5287, 0xBC41, 0x5288, 0xBC42, 0x5289, 0xBC43, 0x528D, 0xBC44, 0x528A, 0xBC45, 0x52F0, 0xBC46, 0x53B2, + 0xBC47, 0x562E, 0xBC48, 0x563B, 0xBC49, 0x5639, 0xBC4A, 0x5632, 0xBC4B, 0x563F, 0xBC4C, 0x5634, 0xBC4D, 0x5629, 0xBC4E, 0x5653, + 0xBC4F, 0x564E, 0xBC50, 0x5657, 0xBC51, 0x5674, 0xBC52, 0x5636, 0xBC53, 0x562F, 0xBC54, 0x5630, 0xBC55, 0x5880, 0xBC56, 0x589F, + 0xBC57, 0x589E, 0xBC58, 0x58B3, 0xBC59, 0x589C, 0xBC5A, 0x58AE, 0xBC5B, 0x58A9, 0xBC5C, 0x58A6, 0xBC5D, 0x596D, 0xBC5E, 0x5B09, + 0xBC5F, 0x5AFB, 0xBC60, 0x5B0B, 0xBC61, 0x5AF5, 0xBC62, 0x5B0C, 0xBC63, 0x5B08, 0xBC64, 0x5BEE, 0xBC65, 0x5BEC, 0xBC66, 0x5BE9, + 0xBC67, 0x5BEB, 0xBC68, 0x5C64, 0xBC69, 0x5C65, 0xBC6A, 0x5D9D, 0xBC6B, 0x5D94, 0xBC6C, 0x5E62, 0xBC6D, 0x5E5F, 0xBC6E, 0x5E61, + 0xBC6F, 0x5EE2, 0xBC70, 0x5EDA, 0xBC71, 0x5EDF, 0xBC72, 0x5EDD, 0xBC73, 0x5EE3, 0xBC74, 0x5EE0, 0xBC75, 0x5F48, 0xBC76, 0x5F71, + 0xBC77, 0x5FB7, 0xBC78, 0x5FB5, 0xBC79, 0x6176, 0xBC7A, 0x6167, 0xBC7B, 0x616E, 0xBC7C, 0x615D, 0xBC7D, 0x6155, 0xBC7E, 0x6182, + 0xBCA1, 0x617C, 0xBCA2, 0x6170, 0xBCA3, 0x616B, 0xBCA4, 0x617E, 0xBCA5, 0x61A7, 0xBCA6, 0x6190, 0xBCA7, 0x61AB, 0xBCA8, 0x618E, + 0xBCA9, 0x61AC, 0xBCAA, 0x619A, 0xBCAB, 0x61A4, 0xBCAC, 0x6194, 0xBCAD, 0x61AE, 0xBCAE, 0x622E, 0xBCAF, 0x6469, 0xBCB0, 0x646F, + 0xBCB1, 0x6479, 0xBCB2, 0x649E, 0xBCB3, 0x64B2, 0xBCB4, 0x6488, 0xBCB5, 0x6490, 0xBCB6, 0x64B0, 0xBCB7, 0x64A5, 0xBCB8, 0x6493, + 0xBCB9, 0x6495, 0xBCBA, 0x64A9, 0xBCBB, 0x6492, 0xBCBC, 0x64AE, 0xBCBD, 0x64AD, 0xBCBE, 0x64AB, 0xBCBF, 0x649A, 0xBCC0, 0x64AC, + 0xBCC1, 0x6499, 0xBCC2, 0x64A2, 0xBCC3, 0x64B3, 0xBCC4, 0x6575, 0xBCC5, 0x6577, 0xBCC6, 0x6578, 0xBCC7, 0x66AE, 0xBCC8, 0x66AB, + 0xBCC9, 0x66B4, 0xBCCA, 0x66B1, 0xBCCB, 0x6A23, 0xBCCC, 0x6A1F, 0xBCCD, 0x69E8, 0xBCCE, 0x6A01, 0xBCCF, 0x6A1E, 0xBCD0, 0x6A19, + 0xBCD1, 0x69FD, 0xBCD2, 0x6A21, 0xBCD3, 0x6A13, 0xBCD4, 0x6A0A, 0xBCD5, 0x69F3, 0xBCD6, 0x6A02, 0xBCD7, 0x6A05, 0xBCD8, 0x69ED, + 0xBCD9, 0x6A11, 0xBCDA, 0x6B50, 0xBCDB, 0x6B4E, 0xBCDC, 0x6BA4, 0xBCDD, 0x6BC5, 0xBCDE, 0x6BC6, 0xBCDF, 0x6F3F, 0xBCE0, 0x6F7C, + 0xBCE1, 0x6F84, 0xBCE2, 0x6F51, 0xBCE3, 0x6F66, 0xBCE4, 0x6F54, 0xBCE5, 0x6F86, 0xBCE6, 0x6F6D, 0xBCE7, 0x6F5B, 0xBCE8, 0x6F78, + 0xBCE9, 0x6F6E, 0xBCEA, 0x6F8E, 0xBCEB, 0x6F7A, 0xBCEC, 0x6F70, 0xBCED, 0x6F64, 0xBCEE, 0x6F97, 0xBCEF, 0x6F58, 0xBCF0, 0x6ED5, + 0xBCF1, 0x6F6F, 0xBCF2, 0x6F60, 0xBCF3, 0x6F5F, 0xBCF4, 0x719F, 0xBCF5, 0x71AC, 0xBCF6, 0x71B1, 0xBCF7, 0x71A8, 0xBCF8, 0x7256, + 0xBCF9, 0x729B, 0xBCFA, 0x734E, 0xBCFB, 0x7357, 0xBCFC, 0x7469, 0xBCFD, 0x748B, 0xBCFE, 0x7483, 0xBD40, 0x747E, 0xBD41, 0x7480, + 0xBD42, 0x757F, 0xBD43, 0x7620, 0xBD44, 0x7629, 0xBD45, 0x761F, 0xBD46, 0x7624, 0xBD47, 0x7626, 0xBD48, 0x7621, 0xBD49, 0x7622, + 0xBD4A, 0x769A, 0xBD4B, 0x76BA, 0xBD4C, 0x76E4, 0xBD4D, 0x778E, 0xBD4E, 0x7787, 0xBD4F, 0x778C, 0xBD50, 0x7791, 0xBD51, 0x778B, + 0xBD52, 0x78CB, 0xBD53, 0x78C5, 0xBD54, 0x78BA, 0xBD55, 0x78CA, 0xBD56, 0x78BE, 0xBD57, 0x78D5, 0xBD58, 0x78BC, 0xBD59, 0x78D0, + 0xBD5A, 0x7A3F, 0xBD5B, 0x7A3C, 0xBD5C, 0x7A40, 0xBD5D, 0x7A3D, 0xBD5E, 0x7A37, 0xBD5F, 0x7A3B, 0xBD60, 0x7AAF, 0xBD61, 0x7AAE, + 0xBD62, 0x7BAD, 0xBD63, 0x7BB1, 0xBD64, 0x7BC4, 0xBD65, 0x7BB4, 0xBD66, 0x7BC6, 0xBD67, 0x7BC7, 0xBD68, 0x7BC1, 0xBD69, 0x7BA0, + 0xBD6A, 0x7BCC, 0xBD6B, 0x7CCA, 0xBD6C, 0x7DE0, 0xBD6D, 0x7DF4, 0xBD6E, 0x7DEF, 0xBD6F, 0x7DFB, 0xBD70, 0x7DD8, 0xBD71, 0x7DEC, + 0xBD72, 0x7DDD, 0xBD73, 0x7DE8, 0xBD74, 0x7DE3, 0xBD75, 0x7DDA, 0xBD76, 0x7DDE, 0xBD77, 0x7DE9, 0xBD78, 0x7D9E, 0xBD79, 0x7DD9, + 0xBD7A, 0x7DF2, 0xBD7B, 0x7DF9, 0xBD7C, 0x7F75, 0xBD7D, 0x7F77, 0xBD7E, 0x7FAF, 0xBDA1, 0x7FE9, 0xBDA2, 0x8026, 0xBDA3, 0x819B, + 0xBDA4, 0x819C, 0xBDA5, 0x819D, 0xBDA6, 0x81A0, 0xBDA7, 0x819A, 0xBDA8, 0x8198, 0xBDA9, 0x8517, 0xBDAA, 0x853D, 0xBDAB, 0x851A, + 0xBDAC, 0x84EE, 0xBDAD, 0x852C, 0xBDAE, 0x852D, 0xBDAF, 0x8513, 0xBDB0, 0x8511, 0xBDB1, 0x8523, 0xBDB2, 0x8521, 0xBDB3, 0x8514, + 0xBDB4, 0x84EC, 0xBDB5, 0x8525, 0xBDB6, 0x84FF, 0xBDB7, 0x8506, 0xBDB8, 0x8782, 0xBDB9, 0x8774, 0xBDBA, 0x8776, 0xBDBB, 0x8760, + 0xBDBC, 0x8766, 0xBDBD, 0x8778, 0xBDBE, 0x8768, 0xBDBF, 0x8759, 0xBDC0, 0x8757, 0xBDC1, 0x874C, 0xBDC2, 0x8753, 0xBDC3, 0x885B, + 0xBDC4, 0x885D, 0xBDC5, 0x8910, 0xBDC6, 0x8907, 0xBDC7, 0x8912, 0xBDC8, 0x8913, 0xBDC9, 0x8915, 0xBDCA, 0x890A, 0xBDCB, 0x8ABC, + 0xBDCC, 0x8AD2, 0xBDCD, 0x8AC7, 0xBDCE, 0x8AC4, 0xBDCF, 0x8A95, 0xBDD0, 0x8ACB, 0xBDD1, 0x8AF8, 0xBDD2, 0x8AB2, 0xBDD3, 0x8AC9, + 0xBDD4, 0x8AC2, 0xBDD5, 0x8ABF, 0xBDD6, 0x8AB0, 0xBDD7, 0x8AD6, 0xBDD8, 0x8ACD, 0xBDD9, 0x8AB6, 0xBDDA, 0x8AB9, 0xBDDB, 0x8ADB, + 0xBDDC, 0x8C4C, 0xBDDD, 0x8C4E, 0xBDDE, 0x8C6C, 0xBDDF, 0x8CE0, 0xBDE0, 0x8CDE, 0xBDE1, 0x8CE6, 0xBDE2, 0x8CE4, 0xBDE3, 0x8CEC, + 0xBDE4, 0x8CED, 0xBDE5, 0x8CE2, 0xBDE6, 0x8CE3, 0xBDE7, 0x8CDC, 0xBDE8, 0x8CEA, 0xBDE9, 0x8CE1, 0xBDEA, 0x8D6D, 0xBDEB, 0x8D9F, + 0xBDEC, 0x8DA3, 0xBDED, 0x8E2B, 0xBDEE, 0x8E10, 0xBDEF, 0x8E1D, 0xBDF0, 0x8E22, 0xBDF1, 0x8E0F, 0xBDF2, 0x8E29, 0xBDF3, 0x8E1F, + 0xBDF4, 0x8E21, 0xBDF5, 0x8E1E, 0xBDF6, 0x8EBA, 0xBDF7, 0x8F1D, 0xBDF8, 0x8F1B, 0xBDF9, 0x8F1F, 0xBDFA, 0x8F29, 0xBDFB, 0x8F26, + 0xBDFC, 0x8F2A, 0xBDFD, 0x8F1C, 0xBDFE, 0x8F1E, 0xBE40, 0x8F25, 0xBE41, 0x9069, 0xBE42, 0x906E, 0xBE43, 0x9068, 0xBE44, 0x906D, + 0xBE45, 0x9077, 0xBE46, 0x9130, 0xBE47, 0x912D, 0xBE48, 0x9127, 0xBE49, 0x9131, 0xBE4A, 0x9187, 0xBE4B, 0x9189, 0xBE4C, 0x918B, + 0xBE4D, 0x9183, 0xBE4E, 0x92C5, 0xBE4F, 0x92BB, 0xBE50, 0x92B7, 0xBE51, 0x92EA, 0xBE52, 0x92AC, 0xBE53, 0x92E4, 0xBE54, 0x92C1, + 0xBE55, 0x92B3, 0xBE56, 0x92BC, 0xBE57, 0x92D2, 0xBE58, 0x92C7, 0xBE59, 0x92F0, 0xBE5A, 0x92B2, 0xBE5B, 0x95AD, 0xBE5C, 0x95B1, + 0xBE5D, 0x9704, 0xBE5E, 0x9706, 0xBE5F, 0x9707, 0xBE60, 0x9709, 0xBE61, 0x9760, 0xBE62, 0x978D, 0xBE63, 0x978B, 0xBE64, 0x978F, + 0xBE65, 0x9821, 0xBE66, 0x982B, 0xBE67, 0x981C, 0xBE68, 0x98B3, 0xBE69, 0x990A, 0xBE6A, 0x9913, 0xBE6B, 0x9912, 0xBE6C, 0x9918, + 0xBE6D, 0x99DD, 0xBE6E, 0x99D0, 0xBE6F, 0x99DF, 0xBE70, 0x99DB, 0xBE71, 0x99D1, 0xBE72, 0x99D5, 0xBE73, 0x99D2, 0xBE74, 0x99D9, + 0xBE75, 0x9AB7, 0xBE76, 0x9AEE, 0xBE77, 0x9AEF, 0xBE78, 0x9B27, 0xBE79, 0x9B45, 0xBE7A, 0x9B44, 0xBE7B, 0x9B77, 0xBE7C, 0x9B6F, + 0xBE7D, 0x9D06, 0xBE7E, 0x9D09, 0xBEA1, 0x9D03, 0xBEA2, 0x9EA9, 0xBEA3, 0x9EBE, 0xBEA4, 0x9ECE, 0xBEA5, 0x58A8, 0xBEA6, 0x9F52, + 0xBEA7, 0x5112, 0xBEA8, 0x5118, 0xBEA9, 0x5114, 0xBEAA, 0x5110, 0xBEAB, 0x5115, 0xBEAC, 0x5180, 0xBEAD, 0x51AA, 0xBEAE, 0x51DD, + 0xBEAF, 0x5291, 0xBEB0, 0x5293, 0xBEB1, 0x52F3, 0xBEB2, 0x5659, 0xBEB3, 0x566B, 0xBEB4, 0x5679, 0xBEB5, 0x5669, 0xBEB6, 0x5664, + 0xBEB7, 0x5678, 0xBEB8, 0x566A, 0xBEB9, 0x5668, 0xBEBA, 0x5665, 0xBEBB, 0x5671, 0xBEBC, 0x566F, 0xBEBD, 0x566C, 0xBEBE, 0x5662, + 0xBEBF, 0x5676, 0xBEC0, 0x58C1, 0xBEC1, 0x58BE, 0xBEC2, 0x58C7, 0xBEC3, 0x58C5, 0xBEC4, 0x596E, 0xBEC5, 0x5B1D, 0xBEC6, 0x5B34, + 0xBEC7, 0x5B78, 0xBEC8, 0x5BF0, 0xBEC9, 0x5C0E, 0xBECA, 0x5F4A, 0xBECB, 0x61B2, 0xBECC, 0x6191, 0xBECD, 0x61A9, 0xBECE, 0x618A, + 0xBECF, 0x61CD, 0xBED0, 0x61B6, 0xBED1, 0x61BE, 0xBED2, 0x61CA, 0xBED3, 0x61C8, 0xBED4, 0x6230, 0xBED5, 0x64C5, 0xBED6, 0x64C1, + 0xBED7, 0x64CB, 0xBED8, 0x64BB, 0xBED9, 0x64BC, 0xBEDA, 0x64DA, 0xBEDB, 0x64C4, 0xBEDC, 0x64C7, 0xBEDD, 0x64C2, 0xBEDE, 0x64CD, + 0xBEDF, 0x64BF, 0xBEE0, 0x64D2, 0xBEE1, 0x64D4, 0xBEE2, 0x64BE, 0xBEE3, 0x6574, 0xBEE4, 0x66C6, 0xBEE5, 0x66C9, 0xBEE6, 0x66B9, + 0xBEE7, 0x66C4, 0xBEE8, 0x66C7, 0xBEE9, 0x66B8, 0xBEEA, 0x6A3D, 0xBEEB, 0x6A38, 0xBEEC, 0x6A3A, 0xBEED, 0x6A59, 0xBEEE, 0x6A6B, + 0xBEEF, 0x6A58, 0xBEF0, 0x6A39, 0xBEF1, 0x6A44, 0xBEF2, 0x6A62, 0xBEF3, 0x6A61, 0xBEF4, 0x6A4B, 0xBEF5, 0x6A47, 0xBEF6, 0x6A35, + 0xBEF7, 0x6A5F, 0xBEF8, 0x6A48, 0xBEF9, 0x6B59, 0xBEFA, 0x6B77, 0xBEFB, 0x6C05, 0xBEFC, 0x6FC2, 0xBEFD, 0x6FB1, 0xBEFE, 0x6FA1, + 0xBF40, 0x6FC3, 0xBF41, 0x6FA4, 0xBF42, 0x6FC1, 0xBF43, 0x6FA7, 0xBF44, 0x6FB3, 0xBF45, 0x6FC0, 0xBF46, 0x6FB9, 0xBF47, 0x6FB6, + 0xBF48, 0x6FA6, 0xBF49, 0x6FA0, 0xBF4A, 0x6FB4, 0xBF4B, 0x71BE, 0xBF4C, 0x71C9, 0xBF4D, 0x71D0, 0xBF4E, 0x71D2, 0xBF4F, 0x71C8, + 0xBF50, 0x71D5, 0xBF51, 0x71B9, 0xBF52, 0x71CE, 0xBF53, 0x71D9, 0xBF54, 0x71DC, 0xBF55, 0x71C3, 0xBF56, 0x71C4, 0xBF57, 0x7368, + 0xBF58, 0x749C, 0xBF59, 0x74A3, 0xBF5A, 0x7498, 0xBF5B, 0x749F, 0xBF5C, 0x749E, 0xBF5D, 0x74E2, 0xBF5E, 0x750C, 0xBF5F, 0x750D, + 0xBF60, 0x7634, 0xBF61, 0x7638, 0xBF62, 0x763A, 0xBF63, 0x76E7, 0xBF64, 0x76E5, 0xBF65, 0x77A0, 0xBF66, 0x779E, 0xBF67, 0x779F, + 0xBF68, 0x77A5, 0xBF69, 0x78E8, 0xBF6A, 0x78DA, 0xBF6B, 0x78EC, 0xBF6C, 0x78E7, 0xBF6D, 0x79A6, 0xBF6E, 0x7A4D, 0xBF6F, 0x7A4E, + 0xBF70, 0x7A46, 0xBF71, 0x7A4C, 0xBF72, 0x7A4B, 0xBF73, 0x7ABA, 0xBF74, 0x7BD9, 0xBF75, 0x7C11, 0xBF76, 0x7BC9, 0xBF77, 0x7BE4, + 0xBF78, 0x7BDB, 0xBF79, 0x7BE1, 0xBF7A, 0x7BE9, 0xBF7B, 0x7BE6, 0xBF7C, 0x7CD5, 0xBF7D, 0x7CD6, 0xBF7E, 0x7E0A, 0xBFA1, 0x7E11, + 0xBFA2, 0x7E08, 0xBFA3, 0x7E1B, 0xBFA4, 0x7E23, 0xBFA5, 0x7E1E, 0xBFA6, 0x7E1D, 0xBFA7, 0x7E09, 0xBFA8, 0x7E10, 0xBFA9, 0x7F79, + 0xBFAA, 0x7FB2, 0xBFAB, 0x7FF0, 0xBFAC, 0x7FF1, 0xBFAD, 0x7FEE, 0xBFAE, 0x8028, 0xBFAF, 0x81B3, 0xBFB0, 0x81A9, 0xBFB1, 0x81A8, + 0xBFB2, 0x81FB, 0xBFB3, 0x8208, 0xBFB4, 0x8258, 0xBFB5, 0x8259, 0xBFB6, 0x854A, 0xBFB7, 0x8559, 0xBFB8, 0x8548, 0xBFB9, 0x8568, + 0xBFBA, 0x8569, 0xBFBB, 0x8543, 0xBFBC, 0x8549, 0xBFBD, 0x856D, 0xBFBE, 0x856A, 0xBFBF, 0x855E, 0xBFC0, 0x8783, 0xBFC1, 0x879F, + 0xBFC2, 0x879E, 0xBFC3, 0x87A2, 0xBFC4, 0x878D, 0xBFC5, 0x8861, 0xBFC6, 0x892A, 0xBFC7, 0x8932, 0xBFC8, 0x8925, 0xBFC9, 0x892B, + 0xBFCA, 0x8921, 0xBFCB, 0x89AA, 0xBFCC, 0x89A6, 0xBFCD, 0x8AE6, 0xBFCE, 0x8AFA, 0xBFCF, 0x8AEB, 0xBFD0, 0x8AF1, 0xBFD1, 0x8B00, + 0xBFD2, 0x8ADC, 0xBFD3, 0x8AE7, 0xBFD4, 0x8AEE, 0xBFD5, 0x8AFE, 0xBFD6, 0x8B01, 0xBFD7, 0x8B02, 0xBFD8, 0x8AF7, 0xBFD9, 0x8AED, + 0xBFDA, 0x8AF3, 0xBFDB, 0x8AF6, 0xBFDC, 0x8AFC, 0xBFDD, 0x8C6B, 0xBFDE, 0x8C6D, 0xBFDF, 0x8C93, 0xBFE0, 0x8CF4, 0xBFE1, 0x8E44, + 0xBFE2, 0x8E31, 0xBFE3, 0x8E34, 0xBFE4, 0x8E42, 0xBFE5, 0x8E39, 0xBFE6, 0x8E35, 0xBFE7, 0x8F3B, 0xBFE8, 0x8F2F, 0xBFE9, 0x8F38, + 0xBFEA, 0x8F33, 0xBFEB, 0x8FA8, 0xBFEC, 0x8FA6, 0xBFED, 0x9075, 0xBFEE, 0x9074, 0xBFEF, 0x9078, 0xBFF0, 0x9072, 0xBFF1, 0x907C, + 0xBFF2, 0x907A, 0xBFF3, 0x9134, 0xBFF4, 0x9192, 0xBFF5, 0x9320, 0xBFF6, 0x9336, 0xBFF7, 0x92F8, 0xBFF8, 0x9333, 0xBFF9, 0x932F, + 0xBFFA, 0x9322, 0xBFFB, 0x92FC, 0xBFFC, 0x932B, 0xBFFD, 0x9304, 0xBFFE, 0x931A, 0xC040, 0x9310, 0xC041, 0x9326, 0xC042, 0x9321, + 0xC043, 0x9315, 0xC044, 0x932E, 0xC045, 0x9319, 0xC046, 0x95BB, 0xC047, 0x96A7, 0xC048, 0x96A8, 0xC049, 0x96AA, 0xC04A, 0x96D5, + 0xC04B, 0x970E, 0xC04C, 0x9711, 0xC04D, 0x9716, 0xC04E, 0x970D, 0xC04F, 0x9713, 0xC050, 0x970F, 0xC051, 0x975B, 0xC052, 0x975C, + 0xC053, 0x9766, 0xC054, 0x9798, 0xC055, 0x9830, 0xC056, 0x9838, 0xC057, 0x983B, 0xC058, 0x9837, 0xC059, 0x982D, 0xC05A, 0x9839, + 0xC05B, 0x9824, 0xC05C, 0x9910, 0xC05D, 0x9928, 0xC05E, 0x991E, 0xC05F, 0x991B, 0xC060, 0x9921, 0xC061, 0x991A, 0xC062, 0x99ED, + 0xC063, 0x99E2, 0xC064, 0x99F1, 0xC065, 0x9AB8, 0xC066, 0x9ABC, 0xC067, 0x9AFB, 0xC068, 0x9AED, 0xC069, 0x9B28, 0xC06A, 0x9B91, + 0xC06B, 0x9D15, 0xC06C, 0x9D23, 0xC06D, 0x9D26, 0xC06E, 0x9D28, 0xC06F, 0x9D12, 0xC070, 0x9D1B, 0xC071, 0x9ED8, 0xC072, 0x9ED4, + 0xC073, 0x9F8D, 0xC074, 0x9F9C, 0xC075, 0x512A, 0xC076, 0x511F, 0xC077, 0x5121, 0xC078, 0x5132, 0xC079, 0x52F5, 0xC07A, 0x568E, + 0xC07B, 0x5680, 0xC07C, 0x5690, 0xC07D, 0x5685, 0xC07E, 0x5687, 0xC0A1, 0x568F, 0xC0A2, 0x58D5, 0xC0A3, 0x58D3, 0xC0A4, 0x58D1, + 0xC0A5, 0x58CE, 0xC0A6, 0x5B30, 0xC0A7, 0x5B2A, 0xC0A8, 0x5B24, 0xC0A9, 0x5B7A, 0xC0AA, 0x5C37, 0xC0AB, 0x5C68, 0xC0AC, 0x5DBC, + 0xC0AD, 0x5DBA, 0xC0AE, 0x5DBD, 0xC0AF, 0x5DB8, 0xC0B0, 0x5E6B, 0xC0B1, 0x5F4C, 0xC0B2, 0x5FBD, 0xC0B3, 0x61C9, 0xC0B4, 0x61C2, + 0xC0B5, 0x61C7, 0xC0B6, 0x61E6, 0xC0B7, 0x61CB, 0xC0B8, 0x6232, 0xC0B9, 0x6234, 0xC0BA, 0x64CE, 0xC0BB, 0x64CA, 0xC0BC, 0x64D8, + 0xC0BD, 0x64E0, 0xC0BE, 0x64F0, 0xC0BF, 0x64E6, 0xC0C0, 0x64EC, 0xC0C1, 0x64F1, 0xC0C2, 0x64E2, 0xC0C3, 0x64ED, 0xC0C4, 0x6582, + 0xC0C5, 0x6583, 0xC0C6, 0x66D9, 0xC0C7, 0x66D6, 0xC0C8, 0x6A80, 0xC0C9, 0x6A94, 0xC0CA, 0x6A84, 0xC0CB, 0x6AA2, 0xC0CC, 0x6A9C, + 0xC0CD, 0x6ADB, 0xC0CE, 0x6AA3, 0xC0CF, 0x6A7E, 0xC0D0, 0x6A97, 0xC0D1, 0x6A90, 0xC0D2, 0x6AA0, 0xC0D3, 0x6B5C, 0xC0D4, 0x6BAE, + 0xC0D5, 0x6BDA, 0xC0D6, 0x6C08, 0xC0D7, 0x6FD8, 0xC0D8, 0x6FF1, 0xC0D9, 0x6FDF, 0xC0DA, 0x6FE0, 0xC0DB, 0x6FDB, 0xC0DC, 0x6FE4, + 0xC0DD, 0x6FEB, 0xC0DE, 0x6FEF, 0xC0DF, 0x6F80, 0xC0E0, 0x6FEC, 0xC0E1, 0x6FE1, 0xC0E2, 0x6FE9, 0xC0E3, 0x6FD5, 0xC0E4, 0x6FEE, + 0xC0E5, 0x6FF0, 0xC0E6, 0x71E7, 0xC0E7, 0x71DF, 0xC0E8, 0x71EE, 0xC0E9, 0x71E6, 0xC0EA, 0x71E5, 0xC0EB, 0x71ED, 0xC0EC, 0x71EC, + 0xC0ED, 0x71F4, 0xC0EE, 0x71E0, 0xC0EF, 0x7235, 0xC0F0, 0x7246, 0xC0F1, 0x7370, 0xC0F2, 0x7372, 0xC0F3, 0x74A9, 0xC0F4, 0x74B0, + 0xC0F5, 0x74A6, 0xC0F6, 0x74A8, 0xC0F7, 0x7646, 0xC0F8, 0x7642, 0xC0F9, 0x764C, 0xC0FA, 0x76EA, 0xC0FB, 0x77B3, 0xC0FC, 0x77AA, + 0xC0FD, 0x77B0, 0xC0FE, 0x77AC, 0xC140, 0x77A7, 0xC141, 0x77AD, 0xC142, 0x77EF, 0xC143, 0x78F7, 0xC144, 0x78FA, 0xC145, 0x78F4, + 0xC146, 0x78EF, 0xC147, 0x7901, 0xC148, 0x79A7, 0xC149, 0x79AA, 0xC14A, 0x7A57, 0xC14B, 0x7ABF, 0xC14C, 0x7C07, 0xC14D, 0x7C0D, + 0xC14E, 0x7BFE, 0xC14F, 0x7BF7, 0xC150, 0x7C0C, 0xC151, 0x7BE0, 0xC152, 0x7CE0, 0xC153, 0x7CDC, 0xC154, 0x7CDE, 0xC155, 0x7CE2, + 0xC156, 0x7CDF, 0xC157, 0x7CD9, 0xC158, 0x7CDD, 0xC159, 0x7E2E, 0xC15A, 0x7E3E, 0xC15B, 0x7E46, 0xC15C, 0x7E37, 0xC15D, 0x7E32, + 0xC15E, 0x7E43, 0xC15F, 0x7E2B, 0xC160, 0x7E3D, 0xC161, 0x7E31, 0xC162, 0x7E45, 0xC163, 0x7E41, 0xC164, 0x7E34, 0xC165, 0x7E39, + 0xC166, 0x7E48, 0xC167, 0x7E35, 0xC168, 0x7E3F, 0xC169, 0x7E2F, 0xC16A, 0x7F44, 0xC16B, 0x7FF3, 0xC16C, 0x7FFC, 0xC16D, 0x8071, + 0xC16E, 0x8072, 0xC16F, 0x8070, 0xC170, 0x806F, 0xC171, 0x8073, 0xC172, 0x81C6, 0xC173, 0x81C3, 0xC174, 0x81BA, 0xC175, 0x81C2, + 0xC176, 0x81C0, 0xC177, 0x81BF, 0xC178, 0x81BD, 0xC179, 0x81C9, 0xC17A, 0x81BE, 0xC17B, 0x81E8, 0xC17C, 0x8209, 0xC17D, 0x8271, + 0xC17E, 0x85AA, 0xC1A1, 0x8584, 0xC1A2, 0x857E, 0xC1A3, 0x859C, 0xC1A4, 0x8591, 0xC1A5, 0x8594, 0xC1A6, 0x85AF, 0xC1A7, 0x859B, + 0xC1A8, 0x8587, 0xC1A9, 0x85A8, 0xC1AA, 0x858A, 0xC1AB, 0x8667, 0xC1AC, 0x87C0, 0xC1AD, 0x87D1, 0xC1AE, 0x87B3, 0xC1AF, 0x87D2, + 0xC1B0, 0x87C6, 0xC1B1, 0x87AB, 0xC1B2, 0x87BB, 0xC1B3, 0x87BA, 0xC1B4, 0x87C8, 0xC1B5, 0x87CB, 0xC1B6, 0x893B, 0xC1B7, 0x8936, + 0xC1B8, 0x8944, 0xC1B9, 0x8938, 0xC1BA, 0x893D, 0xC1BB, 0x89AC, 0xC1BC, 0x8B0E, 0xC1BD, 0x8B17, 0xC1BE, 0x8B19, 0xC1BF, 0x8B1B, + 0xC1C0, 0x8B0A, 0xC1C1, 0x8B20, 0xC1C2, 0x8B1D, 0xC1C3, 0x8B04, 0xC1C4, 0x8B10, 0xC1C5, 0x8C41, 0xC1C6, 0x8C3F, 0xC1C7, 0x8C73, + 0xC1C8, 0x8CFA, 0xC1C9, 0x8CFD, 0xC1CA, 0x8CFC, 0xC1CB, 0x8CF8, 0xC1CC, 0x8CFB, 0xC1CD, 0x8DA8, 0xC1CE, 0x8E49, 0xC1CF, 0x8E4B, + 0xC1D0, 0x8E48, 0xC1D1, 0x8E4A, 0xC1D2, 0x8F44, 0xC1D3, 0x8F3E, 0xC1D4, 0x8F42, 0xC1D5, 0x8F45, 0xC1D6, 0x8F3F, 0xC1D7, 0x907F, + 0xC1D8, 0x907D, 0xC1D9, 0x9084, 0xC1DA, 0x9081, 0xC1DB, 0x9082, 0xC1DC, 0x9080, 0xC1DD, 0x9139, 0xC1DE, 0x91A3, 0xC1DF, 0x919E, + 0xC1E0, 0x919C, 0xC1E1, 0x934D, 0xC1E2, 0x9382, 0xC1E3, 0x9328, 0xC1E4, 0x9375, 0xC1E5, 0x934A, 0xC1E6, 0x9365, 0xC1E7, 0x934B, + 0xC1E8, 0x9318, 0xC1E9, 0x937E, 0xC1EA, 0x936C, 0xC1EB, 0x935B, 0xC1EC, 0x9370, 0xC1ED, 0x935A, 0xC1EE, 0x9354, 0xC1EF, 0x95CA, + 0xC1F0, 0x95CB, 0xC1F1, 0x95CC, 0xC1F2, 0x95C8, 0xC1F3, 0x95C6, 0xC1F4, 0x96B1, 0xC1F5, 0x96B8, 0xC1F6, 0x96D6, 0xC1F7, 0x971C, + 0xC1F8, 0x971E, 0xC1F9, 0x97A0, 0xC1FA, 0x97D3, 0xC1FB, 0x9846, 0xC1FC, 0x98B6, 0xC1FD, 0x9935, 0xC1FE, 0x9A01, 0xC240, 0x99FF, + 0xC241, 0x9BAE, 0xC242, 0x9BAB, 0xC243, 0x9BAA, 0xC244, 0x9BAD, 0xC245, 0x9D3B, 0xC246, 0x9D3F, 0xC247, 0x9E8B, 0xC248, 0x9ECF, + 0xC249, 0x9EDE, 0xC24A, 0x9EDC, 0xC24B, 0x9EDD, 0xC24C, 0x9EDB, 0xC24D, 0x9F3E, 0xC24E, 0x9F4B, 0xC24F, 0x53E2, 0xC250, 0x5695, + 0xC251, 0x56AE, 0xC252, 0x58D9, 0xC253, 0x58D8, 0xC254, 0x5B38, 0xC255, 0x5F5D, 0xC256, 0x61E3, 0xC257, 0x6233, 0xC258, 0x64F4, + 0xC259, 0x64F2, 0xC25A, 0x64FE, 0xC25B, 0x6506, 0xC25C, 0x64FA, 0xC25D, 0x64FB, 0xC25E, 0x64F7, 0xC25F, 0x65B7, 0xC260, 0x66DC, + 0xC261, 0x6726, 0xC262, 0x6AB3, 0xC263, 0x6AAC, 0xC264, 0x6AC3, 0xC265, 0x6ABB, 0xC266, 0x6AB8, 0xC267, 0x6AC2, 0xC268, 0x6AAE, + 0xC269, 0x6AAF, 0xC26A, 0x6B5F, 0xC26B, 0x6B78, 0xC26C, 0x6BAF, 0xC26D, 0x7009, 0xC26E, 0x700B, 0xC26F, 0x6FFE, 0xC270, 0x7006, + 0xC271, 0x6FFA, 0xC272, 0x7011, 0xC273, 0x700F, 0xC274, 0x71FB, 0xC275, 0x71FC, 0xC276, 0x71FE, 0xC277, 0x71F8, 0xC278, 0x7377, + 0xC279, 0x7375, 0xC27A, 0x74A7, 0xC27B, 0x74BF, 0xC27C, 0x7515, 0xC27D, 0x7656, 0xC27E, 0x7658, 0xC2A1, 0x7652, 0xC2A2, 0x77BD, + 0xC2A3, 0x77BF, 0xC2A4, 0x77BB, 0xC2A5, 0x77BC, 0xC2A6, 0x790E, 0xC2A7, 0x79AE, 0xC2A8, 0x7A61, 0xC2A9, 0x7A62, 0xC2AA, 0x7A60, + 0xC2AB, 0x7AC4, 0xC2AC, 0x7AC5, 0xC2AD, 0x7C2B, 0xC2AE, 0x7C27, 0xC2AF, 0x7C2A, 0xC2B0, 0x7C1E, 0xC2B1, 0x7C23, 0xC2B2, 0x7C21, + 0xC2B3, 0x7CE7, 0xC2B4, 0x7E54, 0xC2B5, 0x7E55, 0xC2B6, 0x7E5E, 0xC2B7, 0x7E5A, 0xC2B8, 0x7E61, 0xC2B9, 0x7E52, 0xC2BA, 0x7E59, + 0xC2BB, 0x7F48, 0xC2BC, 0x7FF9, 0xC2BD, 0x7FFB, 0xC2BE, 0x8077, 0xC2BF, 0x8076, 0xC2C0, 0x81CD, 0xC2C1, 0x81CF, 0xC2C2, 0x820A, + 0xC2C3, 0x85CF, 0xC2C4, 0x85A9, 0xC2C5, 0x85CD, 0xC2C6, 0x85D0, 0xC2C7, 0x85C9, 0xC2C8, 0x85B0, 0xC2C9, 0x85BA, 0xC2CA, 0x85B9, + 0xC2CB, 0x85A6, 0xC2CC, 0x87EF, 0xC2CD, 0x87EC, 0xC2CE, 0x87F2, 0xC2CF, 0x87E0, 0xC2D0, 0x8986, 0xC2D1, 0x89B2, 0xC2D2, 0x89F4, + 0xC2D3, 0x8B28, 0xC2D4, 0x8B39, 0xC2D5, 0x8B2C, 0xC2D6, 0x8B2B, 0xC2D7, 0x8C50, 0xC2D8, 0x8D05, 0xC2D9, 0x8E59, 0xC2DA, 0x8E63, + 0xC2DB, 0x8E66, 0xC2DC, 0x8E64, 0xC2DD, 0x8E5F, 0xC2DE, 0x8E55, 0xC2DF, 0x8EC0, 0xC2E0, 0x8F49, 0xC2E1, 0x8F4D, 0xC2E2, 0x9087, + 0xC2E3, 0x9083, 0xC2E4, 0x9088, 0xC2E5, 0x91AB, 0xC2E6, 0x91AC, 0xC2E7, 0x91D0, 0xC2E8, 0x9394, 0xC2E9, 0x938A, 0xC2EA, 0x9396, + 0xC2EB, 0x93A2, 0xC2EC, 0x93B3, 0xC2ED, 0x93AE, 0xC2EE, 0x93AC, 0xC2EF, 0x93B0, 0xC2F0, 0x9398, 0xC2F1, 0x939A, 0xC2F2, 0x9397, + 0xC2F3, 0x95D4, 0xC2F4, 0x95D6, 0xC2F5, 0x95D0, 0xC2F6, 0x95D5, 0xC2F7, 0x96E2, 0xC2F8, 0x96DC, 0xC2F9, 0x96D9, 0xC2FA, 0x96DB, + 0xC2FB, 0x96DE, 0xC2FC, 0x9724, 0xC2FD, 0x97A3, 0xC2FE, 0x97A6, 0xC340, 0x97AD, 0xC341, 0x97F9, 0xC342, 0x984D, 0xC343, 0x984F, + 0xC344, 0x984C, 0xC345, 0x984E, 0xC346, 0x9853, 0xC347, 0x98BA, 0xC348, 0x993E, 0xC349, 0x993F, 0xC34A, 0x993D, 0xC34B, 0x992E, + 0xC34C, 0x99A5, 0xC34D, 0x9A0E, 0xC34E, 0x9AC1, 0xC34F, 0x9B03, 0xC350, 0x9B06, 0xC351, 0x9B4F, 0xC352, 0x9B4E, 0xC353, 0x9B4D, + 0xC354, 0x9BCA, 0xC355, 0x9BC9, 0xC356, 0x9BFD, 0xC357, 0x9BC8, 0xC358, 0x9BC0, 0xC359, 0x9D51, 0xC35A, 0x9D5D, 0xC35B, 0x9D60, + 0xC35C, 0x9EE0, 0xC35D, 0x9F15, 0xC35E, 0x9F2C, 0xC35F, 0x5133, 0xC360, 0x56A5, 0xC361, 0x58DE, 0xC362, 0x58DF, 0xC363, 0x58E2, + 0xC364, 0x5BF5, 0xC365, 0x9F90, 0xC366, 0x5EEC, 0xC367, 0x61F2, 0xC368, 0x61F7, 0xC369, 0x61F6, 0xC36A, 0x61F5, 0xC36B, 0x6500, + 0xC36C, 0x650F, 0xC36D, 0x66E0, 0xC36E, 0x66DD, 0xC36F, 0x6AE5, 0xC370, 0x6ADD, 0xC371, 0x6ADA, 0xC372, 0x6AD3, 0xC373, 0x701B, + 0xC374, 0x701F, 0xC375, 0x7028, 0xC376, 0x701A, 0xC377, 0x701D, 0xC378, 0x7015, 0xC379, 0x7018, 0xC37A, 0x7206, 0xC37B, 0x720D, + 0xC37C, 0x7258, 0xC37D, 0x72A2, 0xC37E, 0x7378, 0xC3A1, 0x737A, 0xC3A2, 0x74BD, 0xC3A3, 0x74CA, 0xC3A4, 0x74E3, 0xC3A5, 0x7587, + 0xC3A6, 0x7586, 0xC3A7, 0x765F, 0xC3A8, 0x7661, 0xC3A9, 0x77C7, 0xC3AA, 0x7919, 0xC3AB, 0x79B1, 0xC3AC, 0x7A6B, 0xC3AD, 0x7A69, + 0xC3AE, 0x7C3E, 0xC3AF, 0x7C3F, 0xC3B0, 0x7C38, 0xC3B1, 0x7C3D, 0xC3B2, 0x7C37, 0xC3B3, 0x7C40, 0xC3B4, 0x7E6B, 0xC3B5, 0x7E6D, + 0xC3B6, 0x7E79, 0xC3B7, 0x7E69, 0xC3B8, 0x7E6A, 0xC3B9, 0x7F85, 0xC3BA, 0x7E73, 0xC3BB, 0x7FB6, 0xC3BC, 0x7FB9, 0xC3BD, 0x7FB8, + 0xC3BE, 0x81D8, 0xC3BF, 0x85E9, 0xC3C0, 0x85DD, 0xC3C1, 0x85EA, 0xC3C2, 0x85D5, 0xC3C3, 0x85E4, 0xC3C4, 0x85E5, 0xC3C5, 0x85F7, + 0xC3C6, 0x87FB, 0xC3C7, 0x8805, 0xC3C8, 0x880D, 0xC3C9, 0x87F9, 0xC3CA, 0x87FE, 0xC3CB, 0x8960, 0xC3CC, 0x895F, 0xC3CD, 0x8956, + 0xC3CE, 0x895E, 0xC3CF, 0x8B41, 0xC3D0, 0x8B5C, 0xC3D1, 0x8B58, 0xC3D2, 0x8B49, 0xC3D3, 0x8B5A, 0xC3D4, 0x8B4E, 0xC3D5, 0x8B4F, + 0xC3D6, 0x8B46, 0xC3D7, 0x8B59, 0xC3D8, 0x8D08, 0xC3D9, 0x8D0A, 0xC3DA, 0x8E7C, 0xC3DB, 0x8E72, 0xC3DC, 0x8E87, 0xC3DD, 0x8E76, + 0xC3DE, 0x8E6C, 0xC3DF, 0x8E7A, 0xC3E0, 0x8E74, 0xC3E1, 0x8F54, 0xC3E2, 0x8F4E, 0xC3E3, 0x8FAD, 0xC3E4, 0x908A, 0xC3E5, 0x908B, + 0xC3E6, 0x91B1, 0xC3E7, 0x91AE, 0xC3E8, 0x93E1, 0xC3E9, 0x93D1, 0xC3EA, 0x93DF, 0xC3EB, 0x93C3, 0xC3EC, 0x93C8, 0xC3ED, 0x93DC, + 0xC3EE, 0x93DD, 0xC3EF, 0x93D6, 0xC3F0, 0x93E2, 0xC3F1, 0x93CD, 0xC3F2, 0x93D8, 0xC3F3, 0x93E4, 0xC3F4, 0x93D7, 0xC3F5, 0x93E8, + 0xC3F6, 0x95DC, 0xC3F7, 0x96B4, 0xC3F8, 0x96E3, 0xC3F9, 0x972A, 0xC3FA, 0x9727, 0xC3FB, 0x9761, 0xC3FC, 0x97DC, 0xC3FD, 0x97FB, + 0xC3FE, 0x985E, 0xC440, 0x9858, 0xC441, 0x985B, 0xC442, 0x98BC, 0xC443, 0x9945, 0xC444, 0x9949, 0xC445, 0x9A16, 0xC446, 0x9A19, + 0xC447, 0x9B0D, 0xC448, 0x9BE8, 0xC449, 0x9BE7, 0xC44A, 0x9BD6, 0xC44B, 0x9BDB, 0xC44C, 0x9D89, 0xC44D, 0x9D61, 0xC44E, 0x9D72, + 0xC44F, 0x9D6A, 0xC450, 0x9D6C, 0xC451, 0x9E92, 0xC452, 0x9E97, 0xC453, 0x9E93, 0xC454, 0x9EB4, 0xC455, 0x52F8, 0xC456, 0x56A8, + 0xC457, 0x56B7, 0xC458, 0x56B6, 0xC459, 0x56B4, 0xC45A, 0x56BC, 0xC45B, 0x58E4, 0xC45C, 0x5B40, 0xC45D, 0x5B43, 0xC45E, 0x5B7D, + 0xC45F, 0x5BF6, 0xC460, 0x5DC9, 0xC461, 0x61F8, 0xC462, 0x61FA, 0xC463, 0x6518, 0xC464, 0x6514, 0xC465, 0x6519, 0xC466, 0x66E6, + 0xC467, 0x6727, 0xC468, 0x6AEC, 0xC469, 0x703E, 0xC46A, 0x7030, 0xC46B, 0x7032, 0xC46C, 0x7210, 0xC46D, 0x737B, 0xC46E, 0x74CF, + 0xC46F, 0x7662, 0xC470, 0x7665, 0xC471, 0x7926, 0xC472, 0x792A, 0xC473, 0x792C, 0xC474, 0x792B, 0xC475, 0x7AC7, 0xC476, 0x7AF6, + 0xC477, 0x7C4C, 0xC478, 0x7C43, 0xC479, 0x7C4D, 0xC47A, 0x7CEF, 0xC47B, 0x7CF0, 0xC47C, 0x8FAE, 0xC47D, 0x7E7D, 0xC47E, 0x7E7C, + 0xC4A1, 0x7E82, 0xC4A2, 0x7F4C, 0xC4A3, 0x8000, 0xC4A4, 0x81DA, 0xC4A5, 0x8266, 0xC4A6, 0x85FB, 0xC4A7, 0x85F9, 0xC4A8, 0x8611, + 0xC4A9, 0x85FA, 0xC4AA, 0x8606, 0xC4AB, 0x860B, 0xC4AC, 0x8607, 0xC4AD, 0x860A, 0xC4AE, 0x8814, 0xC4AF, 0x8815, 0xC4B0, 0x8964, + 0xC4B1, 0x89BA, 0xC4B2, 0x89F8, 0xC4B3, 0x8B70, 0xC4B4, 0x8B6C, 0xC4B5, 0x8B66, 0xC4B6, 0x8B6F, 0xC4B7, 0x8B5F, 0xC4B8, 0x8B6B, + 0xC4B9, 0x8D0F, 0xC4BA, 0x8D0D, 0xC4BB, 0x8E89, 0xC4BC, 0x8E81, 0xC4BD, 0x8E85, 0xC4BE, 0x8E82, 0xC4BF, 0x91B4, 0xC4C0, 0x91CB, + 0xC4C1, 0x9418, 0xC4C2, 0x9403, 0xC4C3, 0x93FD, 0xC4C4, 0x95E1, 0xC4C5, 0x9730, 0xC4C6, 0x98C4, 0xC4C7, 0x9952, 0xC4C8, 0x9951, + 0xC4C9, 0x99A8, 0xC4CA, 0x9A2B, 0xC4CB, 0x9A30, 0xC4CC, 0x9A37, 0xC4CD, 0x9A35, 0xC4CE, 0x9C13, 0xC4CF, 0x9C0D, 0xC4D0, 0x9E79, + 0xC4D1, 0x9EB5, 0xC4D2, 0x9EE8, 0xC4D3, 0x9F2F, 0xC4D4, 0x9F5F, 0xC4D5, 0x9F63, 0xC4D6, 0x9F61, 0xC4D7, 0x5137, 0xC4D8, 0x5138, + 0xC4D9, 0x56C1, 0xC4DA, 0x56C0, 0xC4DB, 0x56C2, 0xC4DC, 0x5914, 0xC4DD, 0x5C6C, 0xC4DE, 0x5DCD, 0xC4DF, 0x61FC, 0xC4E0, 0x61FE, + 0xC4E1, 0x651D, 0xC4E2, 0x651C, 0xC4E3, 0x6595, 0xC4E4, 0x66E9, 0xC4E5, 0x6AFB, 0xC4E6, 0x6B04, 0xC4E7, 0x6AFA, 0xC4E8, 0x6BB2, + 0xC4E9, 0x704C, 0xC4EA, 0x721B, 0xC4EB, 0x72A7, 0xC4EC, 0x74D6, 0xC4ED, 0x74D4, 0xC4EE, 0x7669, 0xC4EF, 0x77D3, 0xC4F0, 0x7C50, + 0xC4F1, 0x7E8F, 0xC4F2, 0x7E8C, 0xC4F3, 0x7FBC, 0xC4F4, 0x8617, 0xC4F5, 0x862D, 0xC4F6, 0x861A, 0xC4F7, 0x8823, 0xC4F8, 0x8822, + 0xC4F9, 0x8821, 0xC4FA, 0x881F, 0xC4FB, 0x896A, 0xC4FC, 0x896C, 0xC4FD, 0x89BD, 0xC4FE, 0x8B74, 0xC540, 0x8B77, 0xC541, 0x8B7D, + 0xC542, 0x8D13, 0xC543, 0x8E8A, 0xC544, 0x8E8D, 0xC545, 0x8E8B, 0xC546, 0x8F5F, 0xC547, 0x8FAF, 0xC548, 0x91BA, 0xC549, 0x942E, + 0xC54A, 0x9433, 0xC54B, 0x9435, 0xC54C, 0x943A, 0xC54D, 0x9438, 0xC54E, 0x9432, 0xC54F, 0x942B, 0xC550, 0x95E2, 0xC551, 0x9738, + 0xC552, 0x9739, 0xC553, 0x9732, 0xC554, 0x97FF, 0xC555, 0x9867, 0xC556, 0x9865, 0xC557, 0x9957, 0xC558, 0x9A45, 0xC559, 0x9A43, + 0xC55A, 0x9A40, 0xC55B, 0x9A3E, 0xC55C, 0x9ACF, 0xC55D, 0x9B54, 0xC55E, 0x9B51, 0xC55F, 0x9C2D, 0xC560, 0x9C25, 0xC561, 0x9DAF, + 0xC562, 0x9DB4, 0xC563, 0x9DC2, 0xC564, 0x9DB8, 0xC565, 0x9E9D, 0xC566, 0x9EEF, 0xC567, 0x9F19, 0xC568, 0x9F5C, 0xC569, 0x9F66, + 0xC56A, 0x9F67, 0xC56B, 0x513C, 0xC56C, 0x513B, 0xC56D, 0x56C8, 0xC56E, 0x56CA, 0xC56F, 0x56C9, 0xC570, 0x5B7F, 0xC571, 0x5DD4, + 0xC572, 0x5DD2, 0xC573, 0x5F4E, 0xC574, 0x61FF, 0xC575, 0x6524, 0xC576, 0x6B0A, 0xC577, 0x6B61, 0xC578, 0x7051, 0xC579, 0x7058, + 0xC57A, 0x7380, 0xC57B, 0x74E4, 0xC57C, 0x758A, 0xC57D, 0x766E, 0xC57E, 0x766C, 0xC5A1, 0x79B3, 0xC5A2, 0x7C60, 0xC5A3, 0x7C5F, + 0xC5A4, 0x807E, 0xC5A5, 0x807D, 0xC5A6, 0x81DF, 0xC5A7, 0x8972, 0xC5A8, 0x896F, 0xC5A9, 0x89FC, 0xC5AA, 0x8B80, 0xC5AB, 0x8D16, + 0xC5AC, 0x8D17, 0xC5AD, 0x8E91, 0xC5AE, 0x8E93, 0xC5AF, 0x8F61, 0xC5B0, 0x9148, 0xC5B1, 0x9444, 0xC5B2, 0x9451, 0xC5B3, 0x9452, + 0xC5B4, 0x973D, 0xC5B5, 0x973E, 0xC5B6, 0x97C3, 0xC5B7, 0x97C1, 0xC5B8, 0x986B, 0xC5B9, 0x9955, 0xC5BA, 0x9A55, 0xC5BB, 0x9A4D, + 0xC5BC, 0x9AD2, 0xC5BD, 0x9B1A, 0xC5BE, 0x9C49, 0xC5BF, 0x9C31, 0xC5C0, 0x9C3E, 0xC5C1, 0x9C3B, 0xC5C2, 0x9DD3, 0xC5C3, 0x9DD7, + 0xC5C4, 0x9F34, 0xC5C5, 0x9F6C, 0xC5C6, 0x9F6A, 0xC5C7, 0x9F94, 0xC5C8, 0x56CC, 0xC5C9, 0x5DD6, 0xC5CA, 0x6200, 0xC5CB, 0x6523, + 0xC5CC, 0x652B, 0xC5CD, 0x652A, 0xC5CE, 0x66EC, 0xC5CF, 0x6B10, 0xC5D0, 0x74DA, 0xC5D1, 0x7ACA, 0xC5D2, 0x7C64, 0xC5D3, 0x7C63, + 0xC5D4, 0x7C65, 0xC5D5, 0x7E93, 0xC5D6, 0x7E96, 0xC5D7, 0x7E94, 0xC5D8, 0x81E2, 0xC5D9, 0x8638, 0xC5DA, 0x863F, 0xC5DB, 0x8831, + 0xC5DC, 0x8B8A, 0xC5DD, 0x9090, 0xC5DE, 0x908F, 0xC5DF, 0x9463, 0xC5E0, 0x9460, 0xC5E1, 0x9464, 0xC5E2, 0x9768, 0xC5E3, 0x986F, + 0xC5E4, 0x995C, 0xC5E5, 0x9A5A, 0xC5E6, 0x9A5B, 0xC5E7, 0x9A57, 0xC5E8, 0x9AD3, 0xC5E9, 0x9AD4, 0xC5EA, 0x9AD1, 0xC5EB, 0x9C54, + 0xC5EC, 0x9C57, 0xC5ED, 0x9C56, 0xC5EE, 0x9DE5, 0xC5EF, 0x9E9F, 0xC5F0, 0x9EF4, 0xC5F1, 0x56D1, 0xC5F2, 0x58E9, 0xC5F3, 0x652C, + 0xC5F4, 0x705E, 0xC5F5, 0x7671, 0xC5F6, 0x7672, 0xC5F7, 0x77D7, 0xC5F8, 0x7F50, 0xC5F9, 0x7F88, 0xC5FA, 0x8836, 0xC5FB, 0x8839, + 0xC5FC, 0x8862, 0xC5FD, 0x8B93, 0xC5FE, 0x8B92, 0xC640, 0x8B96, 0xC641, 0x8277, 0xC642, 0x8D1B, 0xC643, 0x91C0, 0xC644, 0x946A, + 0xC645, 0x9742, 0xC646, 0x9748, 0xC647, 0x9744, 0xC648, 0x97C6, 0xC649, 0x9870, 0xC64A, 0x9A5F, 0xC64B, 0x9B22, 0xC64C, 0x9B58, + 0xC64D, 0x9C5F, 0xC64E, 0x9DF9, 0xC64F, 0x9DFA, 0xC650, 0x9E7C, 0xC651, 0x9E7D, 0xC652, 0x9F07, 0xC653, 0x9F77, 0xC654, 0x9F72, + 0xC655, 0x5EF3, 0xC656, 0x6B16, 0xC657, 0x7063, 0xC658, 0x7C6C, 0xC659, 0x7C6E, 0xC65A, 0x883B, 0xC65B, 0x89C0, 0xC65C, 0x8EA1, + 0xC65D, 0x91C1, 0xC65E, 0x9472, 0xC65F, 0x9470, 0xC660, 0x9871, 0xC661, 0x995E, 0xC662, 0x9AD6, 0xC663, 0x9B23, 0xC664, 0x9ECC, + 0xC665, 0x7064, 0xC666, 0x77DA, 0xC667, 0x8B9A, 0xC668, 0x9477, 0xC669, 0x97C9, 0xC66A, 0x9A62, 0xC66B, 0x9A65, 0xC66C, 0x7E9C, + 0xC66D, 0x8B9C, 0xC66E, 0x8EAA, 0xC66F, 0x91C5, 0xC670, 0x947D, 0xC671, 0x947E, 0xC672, 0x947C, 0xC673, 0x9C77, 0xC674, 0x9C78, + 0xC675, 0x9EF7, 0xC676, 0x8C54, 0xC677, 0x947F, 0xC678, 0x9E1A, 0xC679, 0x7228, 0xC67A, 0x9A6A, 0xC67B, 0x9B31, 0xC67C, 0x9E1B, + 0xC67D, 0x9E1E, 0xC67E, 0x7C72, 0xC940, 0x4E42, 0xC941, 0x4E5C, 0xC942, 0x51F5, 0xC943, 0x531A, 0xC944, 0x5382, 0xC945, 0x4E07, + 0xC946, 0x4E0C, 0xC947, 0x4E47, 0xC948, 0x4E8D, 0xC949, 0x56D7, 0xC94A, 0xFA0C, 0xC94B, 0x5C6E, 0xC94C, 0x5F73, 0xC94D, 0x4E0F, + 0xC94E, 0x5187, 0xC94F, 0x4E0E, 0xC950, 0x4E2E, 0xC951, 0x4E93, 0xC952, 0x4EC2, 0xC953, 0x4EC9, 0xC954, 0x4EC8, 0xC955, 0x5198, + 0xC956, 0x52FC, 0xC957, 0x536C, 0xC958, 0x53B9, 0xC959, 0x5720, 0xC95A, 0x5903, 0xC95B, 0x592C, 0xC95C, 0x5C10, 0xC95D, 0x5DFF, + 0xC95E, 0x65E1, 0xC95F, 0x6BB3, 0xC960, 0x6BCC, 0xC961, 0x6C14, 0xC962, 0x723F, 0xC963, 0x4E31, 0xC964, 0x4E3C, 0xC965, 0x4EE8, + 0xC966, 0x4EDC, 0xC967, 0x4EE9, 0xC968, 0x4EE1, 0xC969, 0x4EDD, 0xC96A, 0x4EDA, 0xC96B, 0x520C, 0xC96C, 0x531C, 0xC96D, 0x534C, + 0xC96E, 0x5722, 0xC96F, 0x5723, 0xC970, 0x5917, 0xC971, 0x592F, 0xC972, 0x5B81, 0xC973, 0x5B84, 0xC974, 0x5C12, 0xC975, 0x5C3B, + 0xC976, 0x5C74, 0xC977, 0x5C73, 0xC978, 0x5E04, 0xC979, 0x5E80, 0xC97A, 0x5E82, 0xC97B, 0x5FC9, 0xC97C, 0x6209, 0xC97D, 0x6250, + 0xC97E, 0x6C15, 0xC9A1, 0x6C36, 0xC9A2, 0x6C43, 0xC9A3, 0x6C3F, 0xC9A4, 0x6C3B, 0xC9A5, 0x72AE, 0xC9A6, 0x72B0, 0xC9A7, 0x738A, + 0xC9A8, 0x79B8, 0xC9A9, 0x808A, 0xC9AA, 0x961E, 0xC9AB, 0x4F0E, 0xC9AC, 0x4F18, 0xC9AD, 0x4F2C, 0xC9AE, 0x4EF5, 0xC9AF, 0x4F14, + 0xC9B0, 0x4EF1, 0xC9B1, 0x4F00, 0xC9B2, 0x4EF7, 0xC9B3, 0x4F08, 0xC9B4, 0x4F1D, 0xC9B5, 0x4F02, 0xC9B6, 0x4F05, 0xC9B7, 0x4F22, + 0xC9B8, 0x4F13, 0xC9B9, 0x4F04, 0xC9BA, 0x4EF4, 0xC9BB, 0x4F12, 0xC9BC, 0x51B1, 0xC9BD, 0x5213, 0xC9BE, 0x5209, 0xC9BF, 0x5210, + 0xC9C0, 0x52A6, 0xC9C1, 0x5322, 0xC9C2, 0x531F, 0xC9C3, 0x534D, 0xC9C4, 0x538A, 0xC9C5, 0x5407, 0xC9C6, 0x56E1, 0xC9C7, 0x56DF, + 0xC9C8, 0x572E, 0xC9C9, 0x572A, 0xC9CA, 0x5734, 0xC9CB, 0x593C, 0xC9CC, 0x5980, 0xC9CD, 0x597C, 0xC9CE, 0x5985, 0xC9CF, 0x597B, + 0xC9D0, 0x597E, 0xC9D1, 0x5977, 0xC9D2, 0x597F, 0xC9D3, 0x5B56, 0xC9D4, 0x5C15, 0xC9D5, 0x5C25, 0xC9D6, 0x5C7C, 0xC9D7, 0x5C7A, + 0xC9D8, 0x5C7B, 0xC9D9, 0x5C7E, 0xC9DA, 0x5DDF, 0xC9DB, 0x5E75, 0xC9DC, 0x5E84, 0xC9DD, 0x5F02, 0xC9DE, 0x5F1A, 0xC9DF, 0x5F74, + 0xC9E0, 0x5FD5, 0xC9E1, 0x5FD4, 0xC9E2, 0x5FCF, 0xC9E3, 0x625C, 0xC9E4, 0x625E, 0xC9E5, 0x6264, 0xC9E6, 0x6261, 0xC9E7, 0x6266, + 0xC9E8, 0x6262, 0xC9E9, 0x6259, 0xC9EA, 0x6260, 0xC9EB, 0x625A, 0xC9EC, 0x6265, 0xC9ED, 0x65EF, 0xC9EE, 0x65EE, 0xC9EF, 0x673E, + 0xC9F0, 0x6739, 0xC9F1, 0x6738, 0xC9F2, 0x673B, 0xC9F3, 0x673A, 0xC9F4, 0x673F, 0xC9F5, 0x673C, 0xC9F6, 0x6733, 0xC9F7, 0x6C18, + 0xC9F8, 0x6C46, 0xC9F9, 0x6C52, 0xC9FA, 0x6C5C, 0xC9FB, 0x6C4F, 0xC9FC, 0x6C4A, 0xC9FD, 0x6C54, 0xC9FE, 0x6C4B, 0xCA40, 0x6C4C, + 0xCA41, 0x7071, 0xCA42, 0x725E, 0xCA43, 0x72B4, 0xCA44, 0x72B5, 0xCA45, 0x738E, 0xCA46, 0x752A, 0xCA47, 0x767F, 0xCA48, 0x7A75, + 0xCA49, 0x7F51, 0xCA4A, 0x8278, 0xCA4B, 0x827C, 0xCA4C, 0x8280, 0xCA4D, 0x827D, 0xCA4E, 0x827F, 0xCA4F, 0x864D, 0xCA50, 0x897E, + 0xCA51, 0x9099, 0xCA52, 0x9097, 0xCA53, 0x9098, 0xCA54, 0x909B, 0xCA55, 0x9094, 0xCA56, 0x9622, 0xCA57, 0x9624, 0xCA58, 0x9620, + 0xCA59, 0x9623, 0xCA5A, 0x4F56, 0xCA5B, 0x4F3B, 0xCA5C, 0x4F62, 0xCA5D, 0x4F49, 0xCA5E, 0x4F53, 0xCA5F, 0x4F64, 0xCA60, 0x4F3E, + 0xCA61, 0x4F67, 0xCA62, 0x4F52, 0xCA63, 0x4F5F, 0xCA64, 0x4F41, 0xCA65, 0x4F58, 0xCA66, 0x4F2D, 0xCA67, 0x4F33, 0xCA68, 0x4F3F, + 0xCA69, 0x4F61, 0xCA6A, 0x518F, 0xCA6B, 0x51B9, 0xCA6C, 0x521C, 0xCA6D, 0x521E, 0xCA6E, 0x5221, 0xCA6F, 0x52AD, 0xCA70, 0x52AE, + 0xCA71, 0x5309, 0xCA72, 0x5363, 0xCA73, 0x5372, 0xCA74, 0x538E, 0xCA75, 0x538F, 0xCA76, 0x5430, 0xCA77, 0x5437, 0xCA78, 0x542A, + 0xCA79, 0x5454, 0xCA7A, 0x5445, 0xCA7B, 0x5419, 0xCA7C, 0x541C, 0xCA7D, 0x5425, 0xCA7E, 0x5418, 0xCAA1, 0x543D, 0xCAA2, 0x544F, + 0xCAA3, 0x5441, 0xCAA4, 0x5428, 0xCAA5, 0x5424, 0xCAA6, 0x5447, 0xCAA7, 0x56EE, 0xCAA8, 0x56E7, 0xCAA9, 0x56E5, 0xCAAA, 0x5741, + 0xCAAB, 0x5745, 0xCAAC, 0x574C, 0xCAAD, 0x5749, 0xCAAE, 0x574B, 0xCAAF, 0x5752, 0xCAB0, 0x5906, 0xCAB1, 0x5940, 0xCAB2, 0x59A6, + 0xCAB3, 0x5998, 0xCAB4, 0x59A0, 0xCAB5, 0x5997, 0xCAB6, 0x598E, 0xCAB7, 0x59A2, 0xCAB8, 0x5990, 0xCAB9, 0x598F, 0xCABA, 0x59A7, + 0xCABB, 0x59A1, 0xCABC, 0x5B8E, 0xCABD, 0x5B92, 0xCABE, 0x5C28, 0xCABF, 0x5C2A, 0xCAC0, 0x5C8D, 0xCAC1, 0x5C8F, 0xCAC2, 0x5C88, + 0xCAC3, 0x5C8B, 0xCAC4, 0x5C89, 0xCAC5, 0x5C92, 0xCAC6, 0x5C8A, 0xCAC7, 0x5C86, 0xCAC8, 0x5C93, 0xCAC9, 0x5C95, 0xCACA, 0x5DE0, + 0xCACB, 0x5E0A, 0xCACC, 0x5E0E, 0xCACD, 0x5E8B, 0xCACE, 0x5E89, 0xCACF, 0x5E8C, 0xCAD0, 0x5E88, 0xCAD1, 0x5E8D, 0xCAD2, 0x5F05, + 0xCAD3, 0x5F1D, 0xCAD4, 0x5F78, 0xCAD5, 0x5F76, 0xCAD6, 0x5FD2, 0xCAD7, 0x5FD1, 0xCAD8, 0x5FD0, 0xCAD9, 0x5FED, 0xCADA, 0x5FE8, + 0xCADB, 0x5FEE, 0xCADC, 0x5FF3, 0xCADD, 0x5FE1, 0xCADE, 0x5FE4, 0xCADF, 0x5FE3, 0xCAE0, 0x5FFA, 0xCAE1, 0x5FEF, 0xCAE2, 0x5FF7, + 0xCAE3, 0x5FFB, 0xCAE4, 0x6000, 0xCAE5, 0x5FF4, 0xCAE6, 0x623A, 0xCAE7, 0x6283, 0xCAE8, 0x628C, 0xCAE9, 0x628E, 0xCAEA, 0x628F, + 0xCAEB, 0x6294, 0xCAEC, 0x6287, 0xCAED, 0x6271, 0xCAEE, 0x627B, 0xCAEF, 0x627A, 0xCAF0, 0x6270, 0xCAF1, 0x6281, 0xCAF2, 0x6288, + 0xCAF3, 0x6277, 0xCAF4, 0x627D, 0xCAF5, 0x6272, 0xCAF6, 0x6274, 0xCAF7, 0x6537, 0xCAF8, 0x65F0, 0xCAF9, 0x65F4, 0xCAFA, 0x65F3, + 0xCAFB, 0x65F2, 0xCAFC, 0x65F5, 0xCAFD, 0x6745, 0xCAFE, 0x6747, 0xCB40, 0x6759, 0xCB41, 0x6755, 0xCB42, 0x674C, 0xCB43, 0x6748, + 0xCB44, 0x675D, 0xCB45, 0x674D, 0xCB46, 0x675A, 0xCB47, 0x674B, 0xCB48, 0x6BD0, 0xCB49, 0x6C19, 0xCB4A, 0x6C1A, 0xCB4B, 0x6C78, + 0xCB4C, 0x6C67, 0xCB4D, 0x6C6B, 0xCB4E, 0x6C84, 0xCB4F, 0x6C8B, 0xCB50, 0x6C8F, 0xCB51, 0x6C71, 0xCB52, 0x6C6F, 0xCB53, 0x6C69, + 0xCB54, 0x6C9A, 0xCB55, 0x6C6D, 0xCB56, 0x6C87, 0xCB57, 0x6C95, 0xCB58, 0x6C9C, 0xCB59, 0x6C66, 0xCB5A, 0x6C73, 0xCB5B, 0x6C65, + 0xCB5C, 0x6C7B, 0xCB5D, 0x6C8E, 0xCB5E, 0x7074, 0xCB5F, 0x707A, 0xCB60, 0x7263, 0xCB61, 0x72BF, 0xCB62, 0x72BD, 0xCB63, 0x72C3, + 0xCB64, 0x72C6, 0xCB65, 0x72C1, 0xCB66, 0x72BA, 0xCB67, 0x72C5, 0xCB68, 0x7395, 0xCB69, 0x7397, 0xCB6A, 0x7393, 0xCB6B, 0x7394, + 0xCB6C, 0x7392, 0xCB6D, 0x753A, 0xCB6E, 0x7539, 0xCB6F, 0x7594, 0xCB70, 0x7595, 0xCB71, 0x7681, 0xCB72, 0x793D, 0xCB73, 0x8034, + 0xCB74, 0x8095, 0xCB75, 0x8099, 0xCB76, 0x8090, 0xCB77, 0x8092, 0xCB78, 0x809C, 0xCB79, 0x8290, 0xCB7A, 0x828F, 0xCB7B, 0x8285, + 0xCB7C, 0x828E, 0xCB7D, 0x8291, 0xCB7E, 0x8293, 0xCBA1, 0x828A, 0xCBA2, 0x8283, 0xCBA3, 0x8284, 0xCBA4, 0x8C78, 0xCBA5, 0x8FC9, + 0xCBA6, 0x8FBF, 0xCBA7, 0x909F, 0xCBA8, 0x90A1, 0xCBA9, 0x90A5, 0xCBAA, 0x909E, 0xCBAB, 0x90A7, 0xCBAC, 0x90A0, 0xCBAD, 0x9630, + 0xCBAE, 0x9628, 0xCBAF, 0x962F, 0xCBB0, 0x962D, 0xCBB1, 0x4E33, 0xCBB2, 0x4F98, 0xCBB3, 0x4F7C, 0xCBB4, 0x4F85, 0xCBB5, 0x4F7D, + 0xCBB6, 0x4F80, 0xCBB7, 0x4F87, 0xCBB8, 0x4F76, 0xCBB9, 0x4F74, 0xCBBA, 0x4F89, 0xCBBB, 0x4F84, 0xCBBC, 0x4F77, 0xCBBD, 0x4F4C, + 0xCBBE, 0x4F97, 0xCBBF, 0x4F6A, 0xCBC0, 0x4F9A, 0xCBC1, 0x4F79, 0xCBC2, 0x4F81, 0xCBC3, 0x4F78, 0xCBC4, 0x4F90, 0xCBC5, 0x4F9C, + 0xCBC6, 0x4F94, 0xCBC7, 0x4F9E, 0xCBC8, 0x4F92, 0xCBC9, 0x4F82, 0xCBCA, 0x4F95, 0xCBCB, 0x4F6B, 0xCBCC, 0x4F6E, 0xCBCD, 0x519E, + 0xCBCE, 0x51BC, 0xCBCF, 0x51BE, 0xCBD0, 0x5235, 0xCBD1, 0x5232, 0xCBD2, 0x5233, 0xCBD3, 0x5246, 0xCBD4, 0x5231, 0xCBD5, 0x52BC, + 0xCBD6, 0x530A, 0xCBD7, 0x530B, 0xCBD8, 0x533C, 0xCBD9, 0x5392, 0xCBDA, 0x5394, 0xCBDB, 0x5487, 0xCBDC, 0x547F, 0xCBDD, 0x5481, + 0xCBDE, 0x5491, 0xCBDF, 0x5482, 0xCBE0, 0x5488, 0xCBE1, 0x546B, 0xCBE2, 0x547A, 0xCBE3, 0x547E, 0xCBE4, 0x5465, 0xCBE5, 0x546C, + 0xCBE6, 0x5474, 0xCBE7, 0x5466, 0xCBE8, 0x548D, 0xCBE9, 0x546F, 0xCBEA, 0x5461, 0xCBEB, 0x5460, 0xCBEC, 0x5498, 0xCBED, 0x5463, + 0xCBEE, 0x5467, 0xCBEF, 0x5464, 0xCBF0, 0x56F7, 0xCBF1, 0x56F9, 0xCBF2, 0x576F, 0xCBF3, 0x5772, 0xCBF4, 0x576D, 0xCBF5, 0x576B, + 0xCBF6, 0x5771, 0xCBF7, 0x5770, 0xCBF8, 0x5776, 0xCBF9, 0x5780, 0xCBFA, 0x5775, 0xCBFB, 0x577B, 0xCBFC, 0x5773, 0xCBFD, 0x5774, + 0xCBFE, 0x5762, 0xCC40, 0x5768, 0xCC41, 0x577D, 0xCC42, 0x590C, 0xCC43, 0x5945, 0xCC44, 0x59B5, 0xCC45, 0x59BA, 0xCC46, 0x59CF, + 0xCC47, 0x59CE, 0xCC48, 0x59B2, 0xCC49, 0x59CC, 0xCC4A, 0x59C1, 0xCC4B, 0x59B6, 0xCC4C, 0x59BC, 0xCC4D, 0x59C3, 0xCC4E, 0x59D6, + 0xCC4F, 0x59B1, 0xCC50, 0x59BD, 0xCC51, 0x59C0, 0xCC52, 0x59C8, 0xCC53, 0x59B4, 0xCC54, 0x59C7, 0xCC55, 0x5B62, 0xCC56, 0x5B65, + 0xCC57, 0x5B93, 0xCC58, 0x5B95, 0xCC59, 0x5C44, 0xCC5A, 0x5C47, 0xCC5B, 0x5CAE, 0xCC5C, 0x5CA4, 0xCC5D, 0x5CA0, 0xCC5E, 0x5CB5, + 0xCC5F, 0x5CAF, 0xCC60, 0x5CA8, 0xCC61, 0x5CAC, 0xCC62, 0x5C9F, 0xCC63, 0x5CA3, 0xCC64, 0x5CAD, 0xCC65, 0x5CA2, 0xCC66, 0x5CAA, + 0xCC67, 0x5CA7, 0xCC68, 0x5C9D, 0xCC69, 0x5CA5, 0xCC6A, 0x5CB6, 0xCC6B, 0x5CB0, 0xCC6C, 0x5CA6, 0xCC6D, 0x5E17, 0xCC6E, 0x5E14, + 0xCC6F, 0x5E19, 0xCC70, 0x5F28, 0xCC71, 0x5F22, 0xCC72, 0x5F23, 0xCC73, 0x5F24, 0xCC74, 0x5F54, 0xCC75, 0x5F82, 0xCC76, 0x5F7E, + 0xCC77, 0x5F7D, 0xCC78, 0x5FDE, 0xCC79, 0x5FE5, 0xCC7A, 0x602D, 0xCC7B, 0x6026, 0xCC7C, 0x6019, 0xCC7D, 0x6032, 0xCC7E, 0x600B, + 0xCCA1, 0x6034, 0xCCA2, 0x600A, 0xCCA3, 0x6017, 0xCCA4, 0x6033, 0xCCA5, 0x601A, 0xCCA6, 0x601E, 0xCCA7, 0x602C, 0xCCA8, 0x6022, + 0xCCA9, 0x600D, 0xCCAA, 0x6010, 0xCCAB, 0x602E, 0xCCAC, 0x6013, 0xCCAD, 0x6011, 0xCCAE, 0x600C, 0xCCAF, 0x6009, 0xCCB0, 0x601C, + 0xCCB1, 0x6214, 0xCCB2, 0x623D, 0xCCB3, 0x62AD, 0xCCB4, 0x62B4, 0xCCB5, 0x62D1, 0xCCB6, 0x62BE, 0xCCB7, 0x62AA, 0xCCB8, 0x62B6, + 0xCCB9, 0x62CA, 0xCCBA, 0x62AE, 0xCCBB, 0x62B3, 0xCCBC, 0x62AF, 0xCCBD, 0x62BB, 0xCCBE, 0x62A9, 0xCCBF, 0x62B0, 0xCCC0, 0x62B8, + 0xCCC1, 0x653D, 0xCCC2, 0x65A8, 0xCCC3, 0x65BB, 0xCCC4, 0x6609, 0xCCC5, 0x65FC, 0xCCC6, 0x6604, 0xCCC7, 0x6612, 0xCCC8, 0x6608, + 0xCCC9, 0x65FB, 0xCCCA, 0x6603, 0xCCCB, 0x660B, 0xCCCC, 0x660D, 0xCCCD, 0x6605, 0xCCCE, 0x65FD, 0xCCCF, 0x6611, 0xCCD0, 0x6610, + 0xCCD1, 0x66F6, 0xCCD2, 0x670A, 0xCCD3, 0x6785, 0xCCD4, 0x676C, 0xCCD5, 0x678E, 0xCCD6, 0x6792, 0xCCD7, 0x6776, 0xCCD8, 0x677B, + 0xCCD9, 0x6798, 0xCCDA, 0x6786, 0xCCDB, 0x6784, 0xCCDC, 0x6774, 0xCCDD, 0x678D, 0xCCDE, 0x678C, 0xCCDF, 0x677A, 0xCCE0, 0x679F, + 0xCCE1, 0x6791, 0xCCE2, 0x6799, 0xCCE3, 0x6783, 0xCCE4, 0x677D, 0xCCE5, 0x6781, 0xCCE6, 0x6778, 0xCCE7, 0x6779, 0xCCE8, 0x6794, + 0xCCE9, 0x6B25, 0xCCEA, 0x6B80, 0xCCEB, 0x6B7E, 0xCCEC, 0x6BDE, 0xCCED, 0x6C1D, 0xCCEE, 0x6C93, 0xCCEF, 0x6CEC, 0xCCF0, 0x6CEB, + 0xCCF1, 0x6CEE, 0xCCF2, 0x6CD9, 0xCCF3, 0x6CB6, 0xCCF4, 0x6CD4, 0xCCF5, 0x6CAD, 0xCCF6, 0x6CE7, 0xCCF7, 0x6CB7, 0xCCF8, 0x6CD0, + 0xCCF9, 0x6CC2, 0xCCFA, 0x6CBA, 0xCCFB, 0x6CC3, 0xCCFC, 0x6CC6, 0xCCFD, 0x6CED, 0xCCFE, 0x6CF2, 0xCD40, 0x6CD2, 0xCD41, 0x6CDD, + 0xCD42, 0x6CB4, 0xCD43, 0x6C8A, 0xCD44, 0x6C9D, 0xCD45, 0x6C80, 0xCD46, 0x6CDE, 0xCD47, 0x6CC0, 0xCD48, 0x6D30, 0xCD49, 0x6CCD, + 0xCD4A, 0x6CC7, 0xCD4B, 0x6CB0, 0xCD4C, 0x6CF9, 0xCD4D, 0x6CCF, 0xCD4E, 0x6CE9, 0xCD4F, 0x6CD1, 0xCD50, 0x7094, 0xCD51, 0x7098, + 0xCD52, 0x7085, 0xCD53, 0x7093, 0xCD54, 0x7086, 0xCD55, 0x7084, 0xCD56, 0x7091, 0xCD57, 0x7096, 0xCD58, 0x7082, 0xCD59, 0x709A, + 0xCD5A, 0x7083, 0xCD5B, 0x726A, 0xCD5C, 0x72D6, 0xCD5D, 0x72CB, 0xCD5E, 0x72D8, 0xCD5F, 0x72C9, 0xCD60, 0x72DC, 0xCD61, 0x72D2, + 0xCD62, 0x72D4, 0xCD63, 0x72DA, 0xCD64, 0x72CC, 0xCD65, 0x72D1, 0xCD66, 0x73A4, 0xCD67, 0x73A1, 0xCD68, 0x73AD, 0xCD69, 0x73A6, + 0xCD6A, 0x73A2, 0xCD6B, 0x73A0, 0xCD6C, 0x73AC, 0xCD6D, 0x739D, 0xCD6E, 0x74DD, 0xCD6F, 0x74E8, 0xCD70, 0x753F, 0xCD71, 0x7540, + 0xCD72, 0x753E, 0xCD73, 0x758C, 0xCD74, 0x7598, 0xCD75, 0x76AF, 0xCD76, 0x76F3, 0xCD77, 0x76F1, 0xCD78, 0x76F0, 0xCD79, 0x76F5, + 0xCD7A, 0x77F8, 0xCD7B, 0x77FC, 0xCD7C, 0x77F9, 0xCD7D, 0x77FB, 0xCD7E, 0x77FA, 0xCDA1, 0x77F7, 0xCDA2, 0x7942, 0xCDA3, 0x793F, + 0xCDA4, 0x79C5, 0xCDA5, 0x7A78, 0xCDA6, 0x7A7B, 0xCDA7, 0x7AFB, 0xCDA8, 0x7C75, 0xCDA9, 0x7CFD, 0xCDAA, 0x8035, 0xCDAB, 0x808F, + 0xCDAC, 0x80AE, 0xCDAD, 0x80A3, 0xCDAE, 0x80B8, 0xCDAF, 0x80B5, 0xCDB0, 0x80AD, 0xCDB1, 0x8220, 0xCDB2, 0x82A0, 0xCDB3, 0x82C0, + 0xCDB4, 0x82AB, 0xCDB5, 0x829A, 0xCDB6, 0x8298, 0xCDB7, 0x829B, 0xCDB8, 0x82B5, 0xCDB9, 0x82A7, 0xCDBA, 0x82AE, 0xCDBB, 0x82BC, + 0xCDBC, 0x829E, 0xCDBD, 0x82BA, 0xCDBE, 0x82B4, 0xCDBF, 0x82A8, 0xCDC0, 0x82A1, 0xCDC1, 0x82A9, 0xCDC2, 0x82C2, 0xCDC3, 0x82A4, + 0xCDC4, 0x82C3, 0xCDC5, 0x82B6, 0xCDC6, 0x82A2, 0xCDC7, 0x8670, 0xCDC8, 0x866F, 0xCDC9, 0x866D, 0xCDCA, 0x866E, 0xCDCB, 0x8C56, + 0xCDCC, 0x8FD2, 0xCDCD, 0x8FCB, 0xCDCE, 0x8FD3, 0xCDCF, 0x8FCD, 0xCDD0, 0x8FD6, 0xCDD1, 0x8FD5, 0xCDD2, 0x8FD7, 0xCDD3, 0x90B2, + 0xCDD4, 0x90B4, 0xCDD5, 0x90AF, 0xCDD6, 0x90B3, 0xCDD7, 0x90B0, 0xCDD8, 0x9639, 0xCDD9, 0x963D, 0xCDDA, 0x963C, 0xCDDB, 0x963A, + 0xCDDC, 0x9643, 0xCDDD, 0x4FCD, 0xCDDE, 0x4FC5, 0xCDDF, 0x4FD3, 0xCDE0, 0x4FB2, 0xCDE1, 0x4FC9, 0xCDE2, 0x4FCB, 0xCDE3, 0x4FC1, + 0xCDE4, 0x4FD4, 0xCDE5, 0x4FDC, 0xCDE6, 0x4FD9, 0xCDE7, 0x4FBB, 0xCDE8, 0x4FB3, 0xCDE9, 0x4FDB, 0xCDEA, 0x4FC7, 0xCDEB, 0x4FD6, + 0xCDEC, 0x4FBA, 0xCDED, 0x4FC0, 0xCDEE, 0x4FB9, 0xCDEF, 0x4FEC, 0xCDF0, 0x5244, 0xCDF1, 0x5249, 0xCDF2, 0x52C0, 0xCDF3, 0x52C2, + 0xCDF4, 0x533D, 0xCDF5, 0x537C, 0xCDF6, 0x5397, 0xCDF7, 0x5396, 0xCDF8, 0x5399, 0xCDF9, 0x5398, 0xCDFA, 0x54BA, 0xCDFB, 0x54A1, + 0xCDFC, 0x54AD, 0xCDFD, 0x54A5, 0xCDFE, 0x54CF, 0xCE40, 0x54C3, 0xCE41, 0x830D, 0xCE42, 0x54B7, 0xCE43, 0x54AE, 0xCE44, 0x54D6, + 0xCE45, 0x54B6, 0xCE46, 0x54C5, 0xCE47, 0x54C6, 0xCE48, 0x54A0, 0xCE49, 0x5470, 0xCE4A, 0x54BC, 0xCE4B, 0x54A2, 0xCE4C, 0x54BE, + 0xCE4D, 0x5472, 0xCE4E, 0x54DE, 0xCE4F, 0x54B0, 0xCE50, 0x57B5, 0xCE51, 0x579E, 0xCE52, 0x579F, 0xCE53, 0x57A4, 0xCE54, 0x578C, + 0xCE55, 0x5797, 0xCE56, 0x579D, 0xCE57, 0x579B, 0xCE58, 0x5794, 0xCE59, 0x5798, 0xCE5A, 0x578F, 0xCE5B, 0x5799, 0xCE5C, 0x57A5, + 0xCE5D, 0x579A, 0xCE5E, 0x5795, 0xCE5F, 0x58F4, 0xCE60, 0x590D, 0xCE61, 0x5953, 0xCE62, 0x59E1, 0xCE63, 0x59DE, 0xCE64, 0x59EE, + 0xCE65, 0x5A00, 0xCE66, 0x59F1, 0xCE67, 0x59DD, 0xCE68, 0x59FA, 0xCE69, 0x59FD, 0xCE6A, 0x59FC, 0xCE6B, 0x59F6, 0xCE6C, 0x59E4, + 0xCE6D, 0x59F2, 0xCE6E, 0x59F7, 0xCE6F, 0x59DB, 0xCE70, 0x59E9, 0xCE71, 0x59F3, 0xCE72, 0x59F5, 0xCE73, 0x59E0, 0xCE74, 0x59FE, + 0xCE75, 0x59F4, 0xCE76, 0x59ED, 0xCE77, 0x5BA8, 0xCE78, 0x5C4C, 0xCE79, 0x5CD0, 0xCE7A, 0x5CD8, 0xCE7B, 0x5CCC, 0xCE7C, 0x5CD7, + 0xCE7D, 0x5CCB, 0xCE7E, 0x5CDB, 0xCEA1, 0x5CDE, 0xCEA2, 0x5CDA, 0xCEA3, 0x5CC9, 0xCEA4, 0x5CC7, 0xCEA5, 0x5CCA, 0xCEA6, 0x5CD6, + 0xCEA7, 0x5CD3, 0xCEA8, 0x5CD4, 0xCEA9, 0x5CCF, 0xCEAA, 0x5CC8, 0xCEAB, 0x5CC6, 0xCEAC, 0x5CCE, 0xCEAD, 0x5CDF, 0xCEAE, 0x5CF8, + 0xCEAF, 0x5DF9, 0xCEB0, 0x5E21, 0xCEB1, 0x5E22, 0xCEB2, 0x5E23, 0xCEB3, 0x5E20, 0xCEB4, 0x5E24, 0xCEB5, 0x5EB0, 0xCEB6, 0x5EA4, + 0xCEB7, 0x5EA2, 0xCEB8, 0x5E9B, 0xCEB9, 0x5EA3, 0xCEBA, 0x5EA5, 0xCEBB, 0x5F07, 0xCEBC, 0x5F2E, 0xCEBD, 0x5F56, 0xCEBE, 0x5F86, + 0xCEBF, 0x6037, 0xCEC0, 0x6039, 0xCEC1, 0x6054, 0xCEC2, 0x6072, 0xCEC3, 0x605E, 0xCEC4, 0x6045, 0xCEC5, 0x6053, 0xCEC6, 0x6047, + 0xCEC7, 0x6049, 0xCEC8, 0x605B, 0xCEC9, 0x604C, 0xCECA, 0x6040, 0xCECB, 0x6042, 0xCECC, 0x605F, 0xCECD, 0x6024, 0xCECE, 0x6044, + 0xCECF, 0x6058, 0xCED0, 0x6066, 0xCED1, 0x606E, 0xCED2, 0x6242, 0xCED3, 0x6243, 0xCED4, 0x62CF, 0xCED5, 0x630D, 0xCED6, 0x630B, + 0xCED7, 0x62F5, 0xCED8, 0x630E, 0xCED9, 0x6303, 0xCEDA, 0x62EB, 0xCEDB, 0x62F9, 0xCEDC, 0x630F, 0xCEDD, 0x630C, 0xCEDE, 0x62F8, + 0xCEDF, 0x62F6, 0xCEE0, 0x6300, 0xCEE1, 0x6313, 0xCEE2, 0x6314, 0xCEE3, 0x62FA, 0xCEE4, 0x6315, 0xCEE5, 0x62FB, 0xCEE6, 0x62F0, + 0xCEE7, 0x6541, 0xCEE8, 0x6543, 0xCEE9, 0x65AA, 0xCEEA, 0x65BF, 0xCEEB, 0x6636, 0xCEEC, 0x6621, 0xCEED, 0x6632, 0xCEEE, 0x6635, + 0xCEEF, 0x661C, 0xCEF0, 0x6626, 0xCEF1, 0x6622, 0xCEF2, 0x6633, 0xCEF3, 0x662B, 0xCEF4, 0x663A, 0xCEF5, 0x661D, 0xCEF6, 0x6634, + 0xCEF7, 0x6639, 0xCEF8, 0x662E, 0xCEF9, 0x670F, 0xCEFA, 0x6710, 0xCEFB, 0x67C1, 0xCEFC, 0x67F2, 0xCEFD, 0x67C8, 0xCEFE, 0x67BA, + 0xCF40, 0x67DC, 0xCF41, 0x67BB, 0xCF42, 0x67F8, 0xCF43, 0x67D8, 0xCF44, 0x67C0, 0xCF45, 0x67B7, 0xCF46, 0x67C5, 0xCF47, 0x67EB, + 0xCF48, 0x67E4, 0xCF49, 0x67DF, 0xCF4A, 0x67B5, 0xCF4B, 0x67CD, 0xCF4C, 0x67B3, 0xCF4D, 0x67F7, 0xCF4E, 0x67F6, 0xCF4F, 0x67EE, + 0xCF50, 0x67E3, 0xCF51, 0x67C2, 0xCF52, 0x67B9, 0xCF53, 0x67CE, 0xCF54, 0x67E7, 0xCF55, 0x67F0, 0xCF56, 0x67B2, 0xCF57, 0x67FC, + 0xCF58, 0x67C6, 0xCF59, 0x67ED, 0xCF5A, 0x67CC, 0xCF5B, 0x67AE, 0xCF5C, 0x67E6, 0xCF5D, 0x67DB, 0xCF5E, 0x67FA, 0xCF5F, 0x67C9, + 0xCF60, 0x67CA, 0xCF61, 0x67C3, 0xCF62, 0x67EA, 0xCF63, 0x67CB, 0xCF64, 0x6B28, 0xCF65, 0x6B82, 0xCF66, 0x6B84, 0xCF67, 0x6BB6, + 0xCF68, 0x6BD6, 0xCF69, 0x6BD8, 0xCF6A, 0x6BE0, 0xCF6B, 0x6C20, 0xCF6C, 0x6C21, 0xCF6D, 0x6D28, 0xCF6E, 0x6D34, 0xCF6F, 0x6D2D, + 0xCF70, 0x6D1F, 0xCF71, 0x6D3C, 0xCF72, 0x6D3F, 0xCF73, 0x6D12, 0xCF74, 0x6D0A, 0xCF75, 0x6CDA, 0xCF76, 0x6D33, 0xCF77, 0x6D04, + 0xCF78, 0x6D19, 0xCF79, 0x6D3A, 0xCF7A, 0x6D1A, 0xCF7B, 0x6D11, 0xCF7C, 0x6D00, 0xCF7D, 0x6D1D, 0xCF7E, 0x6D42, 0xCFA1, 0x6D01, + 0xCFA2, 0x6D18, 0xCFA3, 0x6D37, 0xCFA4, 0x6D03, 0xCFA5, 0x6D0F, 0xCFA6, 0x6D40, 0xCFA7, 0x6D07, 0xCFA8, 0x6D20, 0xCFA9, 0x6D2C, + 0xCFAA, 0x6D08, 0xCFAB, 0x6D22, 0xCFAC, 0x6D09, 0xCFAD, 0x6D10, 0xCFAE, 0x70B7, 0xCFAF, 0x709F, 0xCFB0, 0x70BE, 0xCFB1, 0x70B1, + 0xCFB2, 0x70B0, 0xCFB3, 0x70A1, 0xCFB4, 0x70B4, 0xCFB5, 0x70B5, 0xCFB6, 0x70A9, 0xCFB7, 0x7241, 0xCFB8, 0x7249, 0xCFB9, 0x724A, + 0xCFBA, 0x726C, 0xCFBB, 0x7270, 0xCFBC, 0x7273, 0xCFBD, 0x726E, 0xCFBE, 0x72CA, 0xCFBF, 0x72E4, 0xCFC0, 0x72E8, 0xCFC1, 0x72EB, + 0xCFC2, 0x72DF, 0xCFC3, 0x72EA, 0xCFC4, 0x72E6, 0xCFC5, 0x72E3, 0xCFC6, 0x7385, 0xCFC7, 0x73CC, 0xCFC8, 0x73C2, 0xCFC9, 0x73C8, + 0xCFCA, 0x73C5, 0xCFCB, 0x73B9, 0xCFCC, 0x73B6, 0xCFCD, 0x73B5, 0xCFCE, 0x73B4, 0xCFCF, 0x73EB, 0xCFD0, 0x73BF, 0xCFD1, 0x73C7, + 0xCFD2, 0x73BE, 0xCFD3, 0x73C3, 0xCFD4, 0x73C6, 0xCFD5, 0x73B8, 0xCFD6, 0x73CB, 0xCFD7, 0x74EC, 0xCFD8, 0x74EE, 0xCFD9, 0x752E, + 0xCFDA, 0x7547, 0xCFDB, 0x7548, 0xCFDC, 0x75A7, 0xCFDD, 0x75AA, 0xCFDE, 0x7679, 0xCFDF, 0x76C4, 0xCFE0, 0x7708, 0xCFE1, 0x7703, + 0xCFE2, 0x7704, 0xCFE3, 0x7705, 0xCFE4, 0x770A, 0xCFE5, 0x76F7, 0xCFE6, 0x76FB, 0xCFE7, 0x76FA, 0xCFE8, 0x77E7, 0xCFE9, 0x77E8, + 0xCFEA, 0x7806, 0xCFEB, 0x7811, 0xCFEC, 0x7812, 0xCFED, 0x7805, 0xCFEE, 0x7810, 0xCFEF, 0x780F, 0xCFF0, 0x780E, 0xCFF1, 0x7809, + 0xCFF2, 0x7803, 0xCFF3, 0x7813, 0xCFF4, 0x794A, 0xCFF5, 0x794C, 0xCFF6, 0x794B, 0xCFF7, 0x7945, 0xCFF8, 0x7944, 0xCFF9, 0x79D5, + 0xCFFA, 0x79CD, 0xCFFB, 0x79CF, 0xCFFC, 0x79D6, 0xCFFD, 0x79CE, 0xCFFE, 0x7A80, 0xD040, 0x7A7E, 0xD041, 0x7AD1, 0xD042, 0x7B00, + 0xD043, 0x7B01, 0xD044, 0x7C7A, 0xD045, 0x7C78, 0xD046, 0x7C79, 0xD047, 0x7C7F, 0xD048, 0x7C80, 0xD049, 0x7C81, 0xD04A, 0x7D03, + 0xD04B, 0x7D08, 0xD04C, 0x7D01, 0xD04D, 0x7F58, 0xD04E, 0x7F91, 0xD04F, 0x7F8D, 0xD050, 0x7FBE, 0xD051, 0x8007, 0xD052, 0x800E, + 0xD053, 0x800F, 0xD054, 0x8014, 0xD055, 0x8037, 0xD056, 0x80D8, 0xD057, 0x80C7, 0xD058, 0x80E0, 0xD059, 0x80D1, 0xD05A, 0x80C8, + 0xD05B, 0x80C2, 0xD05C, 0x80D0, 0xD05D, 0x80C5, 0xD05E, 0x80E3, 0xD05F, 0x80D9, 0xD060, 0x80DC, 0xD061, 0x80CA, 0xD062, 0x80D5, + 0xD063, 0x80C9, 0xD064, 0x80CF, 0xD065, 0x80D7, 0xD066, 0x80E6, 0xD067, 0x80CD, 0xD068, 0x81FF, 0xD069, 0x8221, 0xD06A, 0x8294, + 0xD06B, 0x82D9, 0xD06C, 0x82FE, 0xD06D, 0x82F9, 0xD06E, 0x8307, 0xD06F, 0x82E8, 0xD070, 0x8300, 0xD071, 0x82D5, 0xD072, 0x833A, + 0xD073, 0x82EB, 0xD074, 0x82D6, 0xD075, 0x82F4, 0xD076, 0x82EC, 0xD077, 0x82E1, 0xD078, 0x82F2, 0xD079, 0x82F5, 0xD07A, 0x830C, + 0xD07B, 0x82FB, 0xD07C, 0x82F6, 0xD07D, 0x82F0, 0xD07E, 0x82EA, 0xD0A1, 0x82E4, 0xD0A2, 0x82E0, 0xD0A3, 0x82FA, 0xD0A4, 0x82F3, + 0xD0A5, 0x82ED, 0xD0A6, 0x8677, 0xD0A7, 0x8674, 0xD0A8, 0x867C, 0xD0A9, 0x8673, 0xD0AA, 0x8841, 0xD0AB, 0x884E, 0xD0AC, 0x8867, + 0xD0AD, 0x886A, 0xD0AE, 0x8869, 0xD0AF, 0x89D3, 0xD0B0, 0x8A04, 0xD0B1, 0x8A07, 0xD0B2, 0x8D72, 0xD0B3, 0x8FE3, 0xD0B4, 0x8FE1, + 0xD0B5, 0x8FEE, 0xD0B6, 0x8FE0, 0xD0B7, 0x90F1, 0xD0B8, 0x90BD, 0xD0B9, 0x90BF, 0xD0BA, 0x90D5, 0xD0BB, 0x90C5, 0xD0BC, 0x90BE, + 0xD0BD, 0x90C7, 0xD0BE, 0x90CB, 0xD0BF, 0x90C8, 0xD0C0, 0x91D4, 0xD0C1, 0x91D3, 0xD0C2, 0x9654, 0xD0C3, 0x964F, 0xD0C4, 0x9651, + 0xD0C5, 0x9653, 0xD0C6, 0x964A, 0xD0C7, 0x964E, 0xD0C8, 0x501E, 0xD0C9, 0x5005, 0xD0CA, 0x5007, 0xD0CB, 0x5013, 0xD0CC, 0x5022, + 0xD0CD, 0x5030, 0xD0CE, 0x501B, 0xD0CF, 0x4FF5, 0xD0D0, 0x4FF4, 0xD0D1, 0x5033, 0xD0D2, 0x5037, 0xD0D3, 0x502C, 0xD0D4, 0x4FF6, + 0xD0D5, 0x4FF7, 0xD0D6, 0x5017, 0xD0D7, 0x501C, 0xD0D8, 0x5020, 0xD0D9, 0x5027, 0xD0DA, 0x5035, 0xD0DB, 0x502F, 0xD0DC, 0x5031, + 0xD0DD, 0x500E, 0xD0DE, 0x515A, 0xD0DF, 0x5194, 0xD0E0, 0x5193, 0xD0E1, 0x51CA, 0xD0E2, 0x51C4, 0xD0E3, 0x51C5, 0xD0E4, 0x51C8, + 0xD0E5, 0x51CE, 0xD0E6, 0x5261, 0xD0E7, 0x525A, 0xD0E8, 0x5252, 0xD0E9, 0x525E, 0xD0EA, 0x525F, 0xD0EB, 0x5255, 0xD0EC, 0x5262, + 0xD0ED, 0x52CD, 0xD0EE, 0x530E, 0xD0EF, 0x539E, 0xD0F0, 0x5526, 0xD0F1, 0x54E2, 0xD0F2, 0x5517, 0xD0F3, 0x5512, 0xD0F4, 0x54E7, + 0xD0F5, 0x54F3, 0xD0F6, 0x54E4, 0xD0F7, 0x551A, 0xD0F8, 0x54FF, 0xD0F9, 0x5504, 0xD0FA, 0x5508, 0xD0FB, 0x54EB, 0xD0FC, 0x5511, + 0xD0FD, 0x5505, 0xD0FE, 0x54F1, 0xD140, 0x550A, 0xD141, 0x54FB, 0xD142, 0x54F7, 0xD143, 0x54F8, 0xD144, 0x54E0, 0xD145, 0x550E, + 0xD146, 0x5503, 0xD147, 0x550B, 0xD148, 0x5701, 0xD149, 0x5702, 0xD14A, 0x57CC, 0xD14B, 0x5832, 0xD14C, 0x57D5, 0xD14D, 0x57D2, + 0xD14E, 0x57BA, 0xD14F, 0x57C6, 0xD150, 0x57BD, 0xD151, 0x57BC, 0xD152, 0x57B8, 0xD153, 0x57B6, 0xD154, 0x57BF, 0xD155, 0x57C7, + 0xD156, 0x57D0, 0xD157, 0x57B9, 0xD158, 0x57C1, 0xD159, 0x590E, 0xD15A, 0x594A, 0xD15B, 0x5A19, 0xD15C, 0x5A16, 0xD15D, 0x5A2D, + 0xD15E, 0x5A2E, 0xD15F, 0x5A15, 0xD160, 0x5A0F, 0xD161, 0x5A17, 0xD162, 0x5A0A, 0xD163, 0x5A1E, 0xD164, 0x5A33, 0xD165, 0x5B6C, + 0xD166, 0x5BA7, 0xD167, 0x5BAD, 0xD168, 0x5BAC, 0xD169, 0x5C03, 0xD16A, 0x5C56, 0xD16B, 0x5C54, 0xD16C, 0x5CEC, 0xD16D, 0x5CFF, + 0xD16E, 0x5CEE, 0xD16F, 0x5CF1, 0xD170, 0x5CF7, 0xD171, 0x5D00, 0xD172, 0x5CF9, 0xD173, 0x5E29, 0xD174, 0x5E28, 0xD175, 0x5EA8, + 0xD176, 0x5EAE, 0xD177, 0x5EAA, 0xD178, 0x5EAC, 0xD179, 0x5F33, 0xD17A, 0x5F30, 0xD17B, 0x5F67, 0xD17C, 0x605D, 0xD17D, 0x605A, + 0xD17E, 0x6067, 0xD1A1, 0x6041, 0xD1A2, 0x60A2, 0xD1A3, 0x6088, 0xD1A4, 0x6080, 0xD1A5, 0x6092, 0xD1A6, 0x6081, 0xD1A7, 0x609D, + 0xD1A8, 0x6083, 0xD1A9, 0x6095, 0xD1AA, 0x609B, 0xD1AB, 0x6097, 0xD1AC, 0x6087, 0xD1AD, 0x609C, 0xD1AE, 0x608E, 0xD1AF, 0x6219, + 0xD1B0, 0x6246, 0xD1B1, 0x62F2, 0xD1B2, 0x6310, 0xD1B3, 0x6356, 0xD1B4, 0x632C, 0xD1B5, 0x6344, 0xD1B6, 0x6345, 0xD1B7, 0x6336, + 0xD1B8, 0x6343, 0xD1B9, 0x63E4, 0xD1BA, 0x6339, 0xD1BB, 0x634B, 0xD1BC, 0x634A, 0xD1BD, 0x633C, 0xD1BE, 0x6329, 0xD1BF, 0x6341, + 0xD1C0, 0x6334, 0xD1C1, 0x6358, 0xD1C2, 0x6354, 0xD1C3, 0x6359, 0xD1C4, 0x632D, 0xD1C5, 0x6347, 0xD1C6, 0x6333, 0xD1C7, 0x635A, + 0xD1C8, 0x6351, 0xD1C9, 0x6338, 0xD1CA, 0x6357, 0xD1CB, 0x6340, 0xD1CC, 0x6348, 0xD1CD, 0x654A, 0xD1CE, 0x6546, 0xD1CF, 0x65C6, + 0xD1D0, 0x65C3, 0xD1D1, 0x65C4, 0xD1D2, 0x65C2, 0xD1D3, 0x664A, 0xD1D4, 0x665F, 0xD1D5, 0x6647, 0xD1D6, 0x6651, 0xD1D7, 0x6712, + 0xD1D8, 0x6713, 0xD1D9, 0x681F, 0xD1DA, 0x681A, 0xD1DB, 0x6849, 0xD1DC, 0x6832, 0xD1DD, 0x6833, 0xD1DE, 0x683B, 0xD1DF, 0x684B, + 0xD1E0, 0x684F, 0xD1E1, 0x6816, 0xD1E2, 0x6831, 0xD1E3, 0x681C, 0xD1E4, 0x6835, 0xD1E5, 0x682B, 0xD1E6, 0x682D, 0xD1E7, 0x682F, + 0xD1E8, 0x684E, 0xD1E9, 0x6844, 0xD1EA, 0x6834, 0xD1EB, 0x681D, 0xD1EC, 0x6812, 0xD1ED, 0x6814, 0xD1EE, 0x6826, 0xD1EF, 0x6828, + 0xD1F0, 0x682E, 0xD1F1, 0x684D, 0xD1F2, 0x683A, 0xD1F3, 0x6825, 0xD1F4, 0x6820, 0xD1F5, 0x6B2C, 0xD1F6, 0x6B2F, 0xD1F7, 0x6B2D, + 0xD1F8, 0x6B31, 0xD1F9, 0x6B34, 0xD1FA, 0x6B6D, 0xD1FB, 0x8082, 0xD1FC, 0x6B88, 0xD1FD, 0x6BE6, 0xD1FE, 0x6BE4, 0xD240, 0x6BE8, + 0xD241, 0x6BE3, 0xD242, 0x6BE2, 0xD243, 0x6BE7, 0xD244, 0x6C25, 0xD245, 0x6D7A, 0xD246, 0x6D63, 0xD247, 0x6D64, 0xD248, 0x6D76, + 0xD249, 0x6D0D, 0xD24A, 0x6D61, 0xD24B, 0x6D92, 0xD24C, 0x6D58, 0xD24D, 0x6D62, 0xD24E, 0x6D6D, 0xD24F, 0x6D6F, 0xD250, 0x6D91, + 0xD251, 0x6D8D, 0xD252, 0x6DEF, 0xD253, 0x6D7F, 0xD254, 0x6D86, 0xD255, 0x6D5E, 0xD256, 0x6D67, 0xD257, 0x6D60, 0xD258, 0x6D97, + 0xD259, 0x6D70, 0xD25A, 0x6D7C, 0xD25B, 0x6D5F, 0xD25C, 0x6D82, 0xD25D, 0x6D98, 0xD25E, 0x6D2F, 0xD25F, 0x6D68, 0xD260, 0x6D8B, + 0xD261, 0x6D7E, 0xD262, 0x6D80, 0xD263, 0x6D84, 0xD264, 0x6D16, 0xD265, 0x6D83, 0xD266, 0x6D7B, 0xD267, 0x6D7D, 0xD268, 0x6D75, + 0xD269, 0x6D90, 0xD26A, 0x70DC, 0xD26B, 0x70D3, 0xD26C, 0x70D1, 0xD26D, 0x70DD, 0xD26E, 0x70CB, 0xD26F, 0x7F39, 0xD270, 0x70E2, + 0xD271, 0x70D7, 0xD272, 0x70D2, 0xD273, 0x70DE, 0xD274, 0x70E0, 0xD275, 0x70D4, 0xD276, 0x70CD, 0xD277, 0x70C5, 0xD278, 0x70C6, + 0xD279, 0x70C7, 0xD27A, 0x70DA, 0xD27B, 0x70CE, 0xD27C, 0x70E1, 0xD27D, 0x7242, 0xD27E, 0x7278, 0xD2A1, 0x7277, 0xD2A2, 0x7276, + 0xD2A3, 0x7300, 0xD2A4, 0x72FA, 0xD2A5, 0x72F4, 0xD2A6, 0x72FE, 0xD2A7, 0x72F6, 0xD2A8, 0x72F3, 0xD2A9, 0x72FB, 0xD2AA, 0x7301, + 0xD2AB, 0x73D3, 0xD2AC, 0x73D9, 0xD2AD, 0x73E5, 0xD2AE, 0x73D6, 0xD2AF, 0x73BC, 0xD2B0, 0x73E7, 0xD2B1, 0x73E3, 0xD2B2, 0x73E9, + 0xD2B3, 0x73DC, 0xD2B4, 0x73D2, 0xD2B5, 0x73DB, 0xD2B6, 0x73D4, 0xD2B7, 0x73DD, 0xD2B8, 0x73DA, 0xD2B9, 0x73D7, 0xD2BA, 0x73D8, + 0xD2BB, 0x73E8, 0xD2BC, 0x74DE, 0xD2BD, 0x74DF, 0xD2BE, 0x74F4, 0xD2BF, 0x74F5, 0xD2C0, 0x7521, 0xD2C1, 0x755B, 0xD2C2, 0x755F, + 0xD2C3, 0x75B0, 0xD2C4, 0x75C1, 0xD2C5, 0x75BB, 0xD2C6, 0x75C4, 0xD2C7, 0x75C0, 0xD2C8, 0x75BF, 0xD2C9, 0x75B6, 0xD2CA, 0x75BA, + 0xD2CB, 0x768A, 0xD2CC, 0x76C9, 0xD2CD, 0x771D, 0xD2CE, 0x771B, 0xD2CF, 0x7710, 0xD2D0, 0x7713, 0xD2D1, 0x7712, 0xD2D2, 0x7723, + 0xD2D3, 0x7711, 0xD2D4, 0x7715, 0xD2D5, 0x7719, 0xD2D6, 0x771A, 0xD2D7, 0x7722, 0xD2D8, 0x7727, 0xD2D9, 0x7823, 0xD2DA, 0x782C, + 0xD2DB, 0x7822, 0xD2DC, 0x7835, 0xD2DD, 0x782F, 0xD2DE, 0x7828, 0xD2DF, 0x782E, 0xD2E0, 0x782B, 0xD2E1, 0x7821, 0xD2E2, 0x7829, + 0xD2E3, 0x7833, 0xD2E4, 0x782A, 0xD2E5, 0x7831, 0xD2E6, 0x7954, 0xD2E7, 0x795B, 0xD2E8, 0x794F, 0xD2E9, 0x795C, 0xD2EA, 0x7953, + 0xD2EB, 0x7952, 0xD2EC, 0x7951, 0xD2ED, 0x79EB, 0xD2EE, 0x79EC, 0xD2EF, 0x79E0, 0xD2F0, 0x79EE, 0xD2F1, 0x79ED, 0xD2F2, 0x79EA, + 0xD2F3, 0x79DC, 0xD2F4, 0x79DE, 0xD2F5, 0x79DD, 0xD2F6, 0x7A86, 0xD2F7, 0x7A89, 0xD2F8, 0x7A85, 0xD2F9, 0x7A8B, 0xD2FA, 0x7A8C, + 0xD2FB, 0x7A8A, 0xD2FC, 0x7A87, 0xD2FD, 0x7AD8, 0xD2FE, 0x7B10, 0xD340, 0x7B04, 0xD341, 0x7B13, 0xD342, 0x7B05, 0xD343, 0x7B0F, + 0xD344, 0x7B08, 0xD345, 0x7B0A, 0xD346, 0x7B0E, 0xD347, 0x7B09, 0xD348, 0x7B12, 0xD349, 0x7C84, 0xD34A, 0x7C91, 0xD34B, 0x7C8A, + 0xD34C, 0x7C8C, 0xD34D, 0x7C88, 0xD34E, 0x7C8D, 0xD34F, 0x7C85, 0xD350, 0x7D1E, 0xD351, 0x7D1D, 0xD352, 0x7D11, 0xD353, 0x7D0E, + 0xD354, 0x7D18, 0xD355, 0x7D16, 0xD356, 0x7D13, 0xD357, 0x7D1F, 0xD358, 0x7D12, 0xD359, 0x7D0F, 0xD35A, 0x7D0C, 0xD35B, 0x7F5C, + 0xD35C, 0x7F61, 0xD35D, 0x7F5E, 0xD35E, 0x7F60, 0xD35F, 0x7F5D, 0xD360, 0x7F5B, 0xD361, 0x7F96, 0xD362, 0x7F92, 0xD363, 0x7FC3, + 0xD364, 0x7FC2, 0xD365, 0x7FC0, 0xD366, 0x8016, 0xD367, 0x803E, 0xD368, 0x8039, 0xD369, 0x80FA, 0xD36A, 0x80F2, 0xD36B, 0x80F9, + 0xD36C, 0x80F5, 0xD36D, 0x8101, 0xD36E, 0x80FB, 0xD36F, 0x8100, 0xD370, 0x8201, 0xD371, 0x822F, 0xD372, 0x8225, 0xD373, 0x8333, + 0xD374, 0x832D, 0xD375, 0x8344, 0xD376, 0x8319, 0xD377, 0x8351, 0xD378, 0x8325, 0xD379, 0x8356, 0xD37A, 0x833F, 0xD37B, 0x8341, + 0xD37C, 0x8326, 0xD37D, 0x831C, 0xD37E, 0x8322, 0xD3A1, 0x8342, 0xD3A2, 0x834E, 0xD3A3, 0x831B, 0xD3A4, 0x832A, 0xD3A5, 0x8308, + 0xD3A6, 0x833C, 0xD3A7, 0x834D, 0xD3A8, 0x8316, 0xD3A9, 0x8324, 0xD3AA, 0x8320, 0xD3AB, 0x8337, 0xD3AC, 0x832F, 0xD3AD, 0x8329, + 0xD3AE, 0x8347, 0xD3AF, 0x8345, 0xD3B0, 0x834C, 0xD3B1, 0x8353, 0xD3B2, 0x831E, 0xD3B3, 0x832C, 0xD3B4, 0x834B, 0xD3B5, 0x8327, + 0xD3B6, 0x8348, 0xD3B7, 0x8653, 0xD3B8, 0x8652, 0xD3B9, 0x86A2, 0xD3BA, 0x86A8, 0xD3BB, 0x8696, 0xD3BC, 0x868D, 0xD3BD, 0x8691, + 0xD3BE, 0x869E, 0xD3BF, 0x8687, 0xD3C0, 0x8697, 0xD3C1, 0x8686, 0xD3C2, 0x868B, 0xD3C3, 0x869A, 0xD3C4, 0x8685, 0xD3C5, 0x86A5, + 0xD3C6, 0x8699, 0xD3C7, 0x86A1, 0xD3C8, 0x86A7, 0xD3C9, 0x8695, 0xD3CA, 0x8698, 0xD3CB, 0x868E, 0xD3CC, 0x869D, 0xD3CD, 0x8690, + 0xD3CE, 0x8694, 0xD3CF, 0x8843, 0xD3D0, 0x8844, 0xD3D1, 0x886D, 0xD3D2, 0x8875, 0xD3D3, 0x8876, 0xD3D4, 0x8872, 0xD3D5, 0x8880, + 0xD3D6, 0x8871, 0xD3D7, 0x887F, 0xD3D8, 0x886F, 0xD3D9, 0x8883, 0xD3DA, 0x887E, 0xD3DB, 0x8874, 0xD3DC, 0x887C, 0xD3DD, 0x8A12, + 0xD3DE, 0x8C47, 0xD3DF, 0x8C57, 0xD3E0, 0x8C7B, 0xD3E1, 0x8CA4, 0xD3E2, 0x8CA3, 0xD3E3, 0x8D76, 0xD3E4, 0x8D78, 0xD3E5, 0x8DB5, + 0xD3E6, 0x8DB7, 0xD3E7, 0x8DB6, 0xD3E8, 0x8ED1, 0xD3E9, 0x8ED3, 0xD3EA, 0x8FFE, 0xD3EB, 0x8FF5, 0xD3EC, 0x9002, 0xD3ED, 0x8FFF, + 0xD3EE, 0x8FFB, 0xD3EF, 0x9004, 0xD3F0, 0x8FFC, 0xD3F1, 0x8FF6, 0xD3F2, 0x90D6, 0xD3F3, 0x90E0, 0xD3F4, 0x90D9, 0xD3F5, 0x90DA, + 0xD3F6, 0x90E3, 0xD3F7, 0x90DF, 0xD3F8, 0x90E5, 0xD3F9, 0x90D8, 0xD3FA, 0x90DB, 0xD3FB, 0x90D7, 0xD3FC, 0x90DC, 0xD3FD, 0x90E4, + 0xD3FE, 0x9150, 0xD440, 0x914E, 0xD441, 0x914F, 0xD442, 0x91D5, 0xD443, 0x91E2, 0xD444, 0x91DA, 0xD445, 0x965C, 0xD446, 0x965F, + 0xD447, 0x96BC, 0xD448, 0x98E3, 0xD449, 0x9ADF, 0xD44A, 0x9B2F, 0xD44B, 0x4E7F, 0xD44C, 0x5070, 0xD44D, 0x506A, 0xD44E, 0x5061, + 0xD44F, 0x505E, 0xD450, 0x5060, 0xD451, 0x5053, 0xD452, 0x504B, 0xD453, 0x505D, 0xD454, 0x5072, 0xD455, 0x5048, 0xD456, 0x504D, + 0xD457, 0x5041, 0xD458, 0x505B, 0xD459, 0x504A, 0xD45A, 0x5062, 0xD45B, 0x5015, 0xD45C, 0x5045, 0xD45D, 0x505F, 0xD45E, 0x5069, + 0xD45F, 0x506B, 0xD460, 0x5063, 0xD461, 0x5064, 0xD462, 0x5046, 0xD463, 0x5040, 0xD464, 0x506E, 0xD465, 0x5073, 0xD466, 0x5057, + 0xD467, 0x5051, 0xD468, 0x51D0, 0xD469, 0x526B, 0xD46A, 0x526D, 0xD46B, 0x526C, 0xD46C, 0x526E, 0xD46D, 0x52D6, 0xD46E, 0x52D3, + 0xD46F, 0x532D, 0xD470, 0x539C, 0xD471, 0x5575, 0xD472, 0x5576, 0xD473, 0x553C, 0xD474, 0x554D, 0xD475, 0x5550, 0xD476, 0x5534, + 0xD477, 0x552A, 0xD478, 0x5551, 0xD479, 0x5562, 0xD47A, 0x5536, 0xD47B, 0x5535, 0xD47C, 0x5530, 0xD47D, 0x5552, 0xD47E, 0x5545, + 0xD4A1, 0x550C, 0xD4A2, 0x5532, 0xD4A3, 0x5565, 0xD4A4, 0x554E, 0xD4A5, 0x5539, 0xD4A6, 0x5548, 0xD4A7, 0x552D, 0xD4A8, 0x553B, + 0xD4A9, 0x5540, 0xD4AA, 0x554B, 0xD4AB, 0x570A, 0xD4AC, 0x5707, 0xD4AD, 0x57FB, 0xD4AE, 0x5814, 0xD4AF, 0x57E2, 0xD4B0, 0x57F6, + 0xD4B1, 0x57DC, 0xD4B2, 0x57F4, 0xD4B3, 0x5800, 0xD4B4, 0x57ED, 0xD4B5, 0x57FD, 0xD4B6, 0x5808, 0xD4B7, 0x57F8, 0xD4B8, 0x580B, + 0xD4B9, 0x57F3, 0xD4BA, 0x57CF, 0xD4BB, 0x5807, 0xD4BC, 0x57EE, 0xD4BD, 0x57E3, 0xD4BE, 0x57F2, 0xD4BF, 0x57E5, 0xD4C0, 0x57EC, + 0xD4C1, 0x57E1, 0xD4C2, 0x580E, 0xD4C3, 0x57FC, 0xD4C4, 0x5810, 0xD4C5, 0x57E7, 0xD4C6, 0x5801, 0xD4C7, 0x580C, 0xD4C8, 0x57F1, + 0xD4C9, 0x57E9, 0xD4CA, 0x57F0, 0xD4CB, 0x580D, 0xD4CC, 0x5804, 0xD4CD, 0x595C, 0xD4CE, 0x5A60, 0xD4CF, 0x5A58, 0xD4D0, 0x5A55, + 0xD4D1, 0x5A67, 0xD4D2, 0x5A5E, 0xD4D3, 0x5A38, 0xD4D4, 0x5A35, 0xD4D5, 0x5A6D, 0xD4D6, 0x5A50, 0xD4D7, 0x5A5F, 0xD4D8, 0x5A65, + 0xD4D9, 0x5A6C, 0xD4DA, 0x5A53, 0xD4DB, 0x5A64, 0xD4DC, 0x5A57, 0xD4DD, 0x5A43, 0xD4DE, 0x5A5D, 0xD4DF, 0x5A52, 0xD4E0, 0x5A44, + 0xD4E1, 0x5A5B, 0xD4E2, 0x5A48, 0xD4E3, 0x5A8E, 0xD4E4, 0x5A3E, 0xD4E5, 0x5A4D, 0xD4E6, 0x5A39, 0xD4E7, 0x5A4C, 0xD4E8, 0x5A70, + 0xD4E9, 0x5A69, 0xD4EA, 0x5A47, 0xD4EB, 0x5A51, 0xD4EC, 0x5A56, 0xD4ED, 0x5A42, 0xD4EE, 0x5A5C, 0xD4EF, 0x5B72, 0xD4F0, 0x5B6E, + 0xD4F1, 0x5BC1, 0xD4F2, 0x5BC0, 0xD4F3, 0x5C59, 0xD4F4, 0x5D1E, 0xD4F5, 0x5D0B, 0xD4F6, 0x5D1D, 0xD4F7, 0x5D1A, 0xD4F8, 0x5D20, + 0xD4F9, 0x5D0C, 0xD4FA, 0x5D28, 0xD4FB, 0x5D0D, 0xD4FC, 0x5D26, 0xD4FD, 0x5D25, 0xD4FE, 0x5D0F, 0xD540, 0x5D30, 0xD541, 0x5D12, + 0xD542, 0x5D23, 0xD543, 0x5D1F, 0xD544, 0x5D2E, 0xD545, 0x5E3E, 0xD546, 0x5E34, 0xD547, 0x5EB1, 0xD548, 0x5EB4, 0xD549, 0x5EB9, + 0xD54A, 0x5EB2, 0xD54B, 0x5EB3, 0xD54C, 0x5F36, 0xD54D, 0x5F38, 0xD54E, 0x5F9B, 0xD54F, 0x5F96, 0xD550, 0x5F9F, 0xD551, 0x608A, + 0xD552, 0x6090, 0xD553, 0x6086, 0xD554, 0x60BE, 0xD555, 0x60B0, 0xD556, 0x60BA, 0xD557, 0x60D3, 0xD558, 0x60D4, 0xD559, 0x60CF, + 0xD55A, 0x60E4, 0xD55B, 0x60D9, 0xD55C, 0x60DD, 0xD55D, 0x60C8, 0xD55E, 0x60B1, 0xD55F, 0x60DB, 0xD560, 0x60B7, 0xD561, 0x60CA, + 0xD562, 0x60BF, 0xD563, 0x60C3, 0xD564, 0x60CD, 0xD565, 0x60C0, 0xD566, 0x6332, 0xD567, 0x6365, 0xD568, 0x638A, 0xD569, 0x6382, + 0xD56A, 0x637D, 0xD56B, 0x63BD, 0xD56C, 0x639E, 0xD56D, 0x63AD, 0xD56E, 0x639D, 0xD56F, 0x6397, 0xD570, 0x63AB, 0xD571, 0x638E, + 0xD572, 0x636F, 0xD573, 0x6387, 0xD574, 0x6390, 0xD575, 0x636E, 0xD576, 0x63AF, 0xD577, 0x6375, 0xD578, 0x639C, 0xD579, 0x636D, + 0xD57A, 0x63AE, 0xD57B, 0x637C, 0xD57C, 0x63A4, 0xD57D, 0x633B, 0xD57E, 0x639F, 0xD5A1, 0x6378, 0xD5A2, 0x6385, 0xD5A3, 0x6381, + 0xD5A4, 0x6391, 0xD5A5, 0x638D, 0xD5A6, 0x6370, 0xD5A7, 0x6553, 0xD5A8, 0x65CD, 0xD5A9, 0x6665, 0xD5AA, 0x6661, 0xD5AB, 0x665B, + 0xD5AC, 0x6659, 0xD5AD, 0x665C, 0xD5AE, 0x6662, 0xD5AF, 0x6718, 0xD5B0, 0x6879, 0xD5B1, 0x6887, 0xD5B2, 0x6890, 0xD5B3, 0x689C, + 0xD5B4, 0x686D, 0xD5B5, 0x686E, 0xD5B6, 0x68AE, 0xD5B7, 0x68AB, 0xD5B8, 0x6956, 0xD5B9, 0x686F, 0xD5BA, 0x68A3, 0xD5BB, 0x68AC, + 0xD5BC, 0x68A9, 0xD5BD, 0x6875, 0xD5BE, 0x6874, 0xD5BF, 0x68B2, 0xD5C0, 0x688F, 0xD5C1, 0x6877, 0xD5C2, 0x6892, 0xD5C3, 0x687C, + 0xD5C4, 0x686B, 0xD5C5, 0x6872, 0xD5C6, 0x68AA, 0xD5C7, 0x6880, 0xD5C8, 0x6871, 0xD5C9, 0x687E, 0xD5CA, 0x689B, 0xD5CB, 0x6896, + 0xD5CC, 0x688B, 0xD5CD, 0x68A0, 0xD5CE, 0x6889, 0xD5CF, 0x68A4, 0xD5D0, 0x6878, 0xD5D1, 0x687B, 0xD5D2, 0x6891, 0xD5D3, 0x688C, + 0xD5D4, 0x688A, 0xD5D5, 0x687D, 0xD5D6, 0x6B36, 0xD5D7, 0x6B33, 0xD5D8, 0x6B37, 0xD5D9, 0x6B38, 0xD5DA, 0x6B91, 0xD5DB, 0x6B8F, + 0xD5DC, 0x6B8D, 0xD5DD, 0x6B8E, 0xD5DE, 0x6B8C, 0xD5DF, 0x6C2A, 0xD5E0, 0x6DC0, 0xD5E1, 0x6DAB, 0xD5E2, 0x6DB4, 0xD5E3, 0x6DB3, + 0xD5E4, 0x6E74, 0xD5E5, 0x6DAC, 0xD5E6, 0x6DE9, 0xD5E7, 0x6DE2, 0xD5E8, 0x6DB7, 0xD5E9, 0x6DF6, 0xD5EA, 0x6DD4, 0xD5EB, 0x6E00, + 0xD5EC, 0x6DC8, 0xD5ED, 0x6DE0, 0xD5EE, 0x6DDF, 0xD5EF, 0x6DD6, 0xD5F0, 0x6DBE, 0xD5F1, 0x6DE5, 0xD5F2, 0x6DDC, 0xD5F3, 0x6DDD, + 0xD5F4, 0x6DDB, 0xD5F5, 0x6DF4, 0xD5F6, 0x6DCA, 0xD5F7, 0x6DBD, 0xD5F8, 0x6DED, 0xD5F9, 0x6DF0, 0xD5FA, 0x6DBA, 0xD5FB, 0x6DD5, + 0xD5FC, 0x6DC2, 0xD5FD, 0x6DCF, 0xD5FE, 0x6DC9, 0xD640, 0x6DD0, 0xD641, 0x6DF2, 0xD642, 0x6DD3, 0xD643, 0x6DFD, 0xD644, 0x6DD7, + 0xD645, 0x6DCD, 0xD646, 0x6DE3, 0xD647, 0x6DBB, 0xD648, 0x70FA, 0xD649, 0x710D, 0xD64A, 0x70F7, 0xD64B, 0x7117, 0xD64C, 0x70F4, + 0xD64D, 0x710C, 0xD64E, 0x70F0, 0xD64F, 0x7104, 0xD650, 0x70F3, 0xD651, 0x7110, 0xD652, 0x70FC, 0xD653, 0x70FF, 0xD654, 0x7106, + 0xD655, 0x7113, 0xD656, 0x7100, 0xD657, 0x70F8, 0xD658, 0x70F6, 0xD659, 0x710B, 0xD65A, 0x7102, 0xD65B, 0x710E, 0xD65C, 0x727E, + 0xD65D, 0x727B, 0xD65E, 0x727C, 0xD65F, 0x727F, 0xD660, 0x731D, 0xD661, 0x7317, 0xD662, 0x7307, 0xD663, 0x7311, 0xD664, 0x7318, + 0xD665, 0x730A, 0xD666, 0x7308, 0xD667, 0x72FF, 0xD668, 0x730F, 0xD669, 0x731E, 0xD66A, 0x7388, 0xD66B, 0x73F6, 0xD66C, 0x73F8, + 0xD66D, 0x73F5, 0xD66E, 0x7404, 0xD66F, 0x7401, 0xD670, 0x73FD, 0xD671, 0x7407, 0xD672, 0x7400, 0xD673, 0x73FA, 0xD674, 0x73FC, + 0xD675, 0x73FF, 0xD676, 0x740C, 0xD677, 0x740B, 0xD678, 0x73F4, 0xD679, 0x7408, 0xD67A, 0x7564, 0xD67B, 0x7563, 0xD67C, 0x75CE, + 0xD67D, 0x75D2, 0xD67E, 0x75CF, 0xD6A1, 0x75CB, 0xD6A2, 0x75CC, 0xD6A3, 0x75D1, 0xD6A4, 0x75D0, 0xD6A5, 0x768F, 0xD6A6, 0x7689, + 0xD6A7, 0x76D3, 0xD6A8, 0x7739, 0xD6A9, 0x772F, 0xD6AA, 0x772D, 0xD6AB, 0x7731, 0xD6AC, 0x7732, 0xD6AD, 0x7734, 0xD6AE, 0x7733, + 0xD6AF, 0x773D, 0xD6B0, 0x7725, 0xD6B1, 0x773B, 0xD6B2, 0x7735, 0xD6B3, 0x7848, 0xD6B4, 0x7852, 0xD6B5, 0x7849, 0xD6B6, 0x784D, + 0xD6B7, 0x784A, 0xD6B8, 0x784C, 0xD6B9, 0x7826, 0xD6BA, 0x7845, 0xD6BB, 0x7850, 0xD6BC, 0x7964, 0xD6BD, 0x7967, 0xD6BE, 0x7969, + 0xD6BF, 0x796A, 0xD6C0, 0x7963, 0xD6C1, 0x796B, 0xD6C2, 0x7961, 0xD6C3, 0x79BB, 0xD6C4, 0x79FA, 0xD6C5, 0x79F8, 0xD6C6, 0x79F6, + 0xD6C7, 0x79F7, 0xD6C8, 0x7A8F, 0xD6C9, 0x7A94, 0xD6CA, 0x7A90, 0xD6CB, 0x7B35, 0xD6CC, 0x7B47, 0xD6CD, 0x7B34, 0xD6CE, 0x7B25, + 0xD6CF, 0x7B30, 0xD6D0, 0x7B22, 0xD6D1, 0x7B24, 0xD6D2, 0x7B33, 0xD6D3, 0x7B18, 0xD6D4, 0x7B2A, 0xD6D5, 0x7B1D, 0xD6D6, 0x7B31, + 0xD6D7, 0x7B2B, 0xD6D8, 0x7B2D, 0xD6D9, 0x7B2F, 0xD6DA, 0x7B32, 0xD6DB, 0x7B38, 0xD6DC, 0x7B1A, 0xD6DD, 0x7B23, 0xD6DE, 0x7C94, + 0xD6DF, 0x7C98, 0xD6E0, 0x7C96, 0xD6E1, 0x7CA3, 0xD6E2, 0x7D35, 0xD6E3, 0x7D3D, 0xD6E4, 0x7D38, 0xD6E5, 0x7D36, 0xD6E6, 0x7D3A, + 0xD6E7, 0x7D45, 0xD6E8, 0x7D2C, 0xD6E9, 0x7D29, 0xD6EA, 0x7D41, 0xD6EB, 0x7D47, 0xD6EC, 0x7D3E, 0xD6ED, 0x7D3F, 0xD6EE, 0x7D4A, + 0xD6EF, 0x7D3B, 0xD6F0, 0x7D28, 0xD6F1, 0x7F63, 0xD6F2, 0x7F95, 0xD6F3, 0x7F9C, 0xD6F4, 0x7F9D, 0xD6F5, 0x7F9B, 0xD6F6, 0x7FCA, + 0xD6F7, 0x7FCB, 0xD6F8, 0x7FCD, 0xD6F9, 0x7FD0, 0xD6FA, 0x7FD1, 0xD6FB, 0x7FC7, 0xD6FC, 0x7FCF, 0xD6FD, 0x7FC9, 0xD6FE, 0x801F, + 0xD740, 0x801E, 0xD741, 0x801B, 0xD742, 0x8047, 0xD743, 0x8043, 0xD744, 0x8048, 0xD745, 0x8118, 0xD746, 0x8125, 0xD747, 0x8119, + 0xD748, 0x811B, 0xD749, 0x812D, 0xD74A, 0x811F, 0xD74B, 0x812C, 0xD74C, 0x811E, 0xD74D, 0x8121, 0xD74E, 0x8115, 0xD74F, 0x8127, + 0xD750, 0x811D, 0xD751, 0x8122, 0xD752, 0x8211, 0xD753, 0x8238, 0xD754, 0x8233, 0xD755, 0x823A, 0xD756, 0x8234, 0xD757, 0x8232, + 0xD758, 0x8274, 0xD759, 0x8390, 0xD75A, 0x83A3, 0xD75B, 0x83A8, 0xD75C, 0x838D, 0xD75D, 0x837A, 0xD75E, 0x8373, 0xD75F, 0x83A4, + 0xD760, 0x8374, 0xD761, 0x838F, 0xD762, 0x8381, 0xD763, 0x8395, 0xD764, 0x8399, 0xD765, 0x8375, 0xD766, 0x8394, 0xD767, 0x83A9, + 0xD768, 0x837D, 0xD769, 0x8383, 0xD76A, 0x838C, 0xD76B, 0x839D, 0xD76C, 0x839B, 0xD76D, 0x83AA, 0xD76E, 0x838B, 0xD76F, 0x837E, + 0xD770, 0x83A5, 0xD771, 0x83AF, 0xD772, 0x8388, 0xD773, 0x8397, 0xD774, 0x83B0, 0xD775, 0x837F, 0xD776, 0x83A6, 0xD777, 0x8387, + 0xD778, 0x83AE, 0xD779, 0x8376, 0xD77A, 0x839A, 0xD77B, 0x8659, 0xD77C, 0x8656, 0xD77D, 0x86BF, 0xD77E, 0x86B7, 0xD7A1, 0x86C2, + 0xD7A2, 0x86C1, 0xD7A3, 0x86C5, 0xD7A4, 0x86BA, 0xD7A5, 0x86B0, 0xD7A6, 0x86C8, 0xD7A7, 0x86B9, 0xD7A8, 0x86B3, 0xD7A9, 0x86B8, + 0xD7AA, 0x86CC, 0xD7AB, 0x86B4, 0xD7AC, 0x86BB, 0xD7AD, 0x86BC, 0xD7AE, 0x86C3, 0xD7AF, 0x86BD, 0xD7B0, 0x86BE, 0xD7B1, 0x8852, + 0xD7B2, 0x8889, 0xD7B3, 0x8895, 0xD7B4, 0x88A8, 0xD7B5, 0x88A2, 0xD7B6, 0x88AA, 0xD7B7, 0x889A, 0xD7B8, 0x8891, 0xD7B9, 0x88A1, + 0xD7BA, 0x889F, 0xD7BB, 0x8898, 0xD7BC, 0x88A7, 0xD7BD, 0x8899, 0xD7BE, 0x889B, 0xD7BF, 0x8897, 0xD7C0, 0x88A4, 0xD7C1, 0x88AC, + 0xD7C2, 0x888C, 0xD7C3, 0x8893, 0xD7C4, 0x888E, 0xD7C5, 0x8982, 0xD7C6, 0x89D6, 0xD7C7, 0x89D9, 0xD7C8, 0x89D5, 0xD7C9, 0x8A30, + 0xD7CA, 0x8A27, 0xD7CB, 0x8A2C, 0xD7CC, 0x8A1E, 0xD7CD, 0x8C39, 0xD7CE, 0x8C3B, 0xD7CF, 0x8C5C, 0xD7D0, 0x8C5D, 0xD7D1, 0x8C7D, + 0xD7D2, 0x8CA5, 0xD7D3, 0x8D7D, 0xD7D4, 0x8D7B, 0xD7D5, 0x8D79, 0xD7D6, 0x8DBC, 0xD7D7, 0x8DC2, 0xD7D8, 0x8DB9, 0xD7D9, 0x8DBF, + 0xD7DA, 0x8DC1, 0xD7DB, 0x8ED8, 0xD7DC, 0x8EDE, 0xD7DD, 0x8EDD, 0xD7DE, 0x8EDC, 0xD7DF, 0x8ED7, 0xD7E0, 0x8EE0, 0xD7E1, 0x8EE1, + 0xD7E2, 0x9024, 0xD7E3, 0x900B, 0xD7E4, 0x9011, 0xD7E5, 0x901C, 0xD7E6, 0x900C, 0xD7E7, 0x9021, 0xD7E8, 0x90EF, 0xD7E9, 0x90EA, + 0xD7EA, 0x90F0, 0xD7EB, 0x90F4, 0xD7EC, 0x90F2, 0xD7ED, 0x90F3, 0xD7EE, 0x90D4, 0xD7EF, 0x90EB, 0xD7F0, 0x90EC, 0xD7F1, 0x90E9, + 0xD7F2, 0x9156, 0xD7F3, 0x9158, 0xD7F4, 0x915A, 0xD7F5, 0x9153, 0xD7F6, 0x9155, 0xD7F7, 0x91EC, 0xD7F8, 0x91F4, 0xD7F9, 0x91F1, + 0xD7FA, 0x91F3, 0xD7FB, 0x91F8, 0xD7FC, 0x91E4, 0xD7FD, 0x91F9, 0xD7FE, 0x91EA, 0xD840, 0x91EB, 0xD841, 0x91F7, 0xD842, 0x91E8, + 0xD843, 0x91EE, 0xD844, 0x957A, 0xD845, 0x9586, 0xD846, 0x9588, 0xD847, 0x967C, 0xD848, 0x966D, 0xD849, 0x966B, 0xD84A, 0x9671, + 0xD84B, 0x966F, 0xD84C, 0x96BF, 0xD84D, 0x976A, 0xD84E, 0x9804, 0xD84F, 0x98E5, 0xD850, 0x9997, 0xD851, 0x509B, 0xD852, 0x5095, + 0xD853, 0x5094, 0xD854, 0x509E, 0xD855, 0x508B, 0xD856, 0x50A3, 0xD857, 0x5083, 0xD858, 0x508C, 0xD859, 0x508E, 0xD85A, 0x509D, + 0xD85B, 0x5068, 0xD85C, 0x509C, 0xD85D, 0x5092, 0xD85E, 0x5082, 0xD85F, 0x5087, 0xD860, 0x515F, 0xD861, 0x51D4, 0xD862, 0x5312, + 0xD863, 0x5311, 0xD864, 0x53A4, 0xD865, 0x53A7, 0xD866, 0x5591, 0xD867, 0x55A8, 0xD868, 0x55A5, 0xD869, 0x55AD, 0xD86A, 0x5577, + 0xD86B, 0x5645, 0xD86C, 0x55A2, 0xD86D, 0x5593, 0xD86E, 0x5588, 0xD86F, 0x558F, 0xD870, 0x55B5, 0xD871, 0x5581, 0xD872, 0x55A3, + 0xD873, 0x5592, 0xD874, 0x55A4, 0xD875, 0x557D, 0xD876, 0x558C, 0xD877, 0x55A6, 0xD878, 0x557F, 0xD879, 0x5595, 0xD87A, 0x55A1, + 0xD87B, 0x558E, 0xD87C, 0x570C, 0xD87D, 0x5829, 0xD87E, 0x5837, 0xD8A1, 0x5819, 0xD8A2, 0x581E, 0xD8A3, 0x5827, 0xD8A4, 0x5823, + 0xD8A5, 0x5828, 0xD8A6, 0x57F5, 0xD8A7, 0x5848, 0xD8A8, 0x5825, 0xD8A9, 0x581C, 0xD8AA, 0x581B, 0xD8AB, 0x5833, 0xD8AC, 0x583F, + 0xD8AD, 0x5836, 0xD8AE, 0x582E, 0xD8AF, 0x5839, 0xD8B0, 0x5838, 0xD8B1, 0x582D, 0xD8B2, 0x582C, 0xD8B3, 0x583B, 0xD8B4, 0x5961, + 0xD8B5, 0x5AAF, 0xD8B6, 0x5A94, 0xD8B7, 0x5A9F, 0xD8B8, 0x5A7A, 0xD8B9, 0x5AA2, 0xD8BA, 0x5A9E, 0xD8BB, 0x5A78, 0xD8BC, 0x5AA6, + 0xD8BD, 0x5A7C, 0xD8BE, 0x5AA5, 0xD8BF, 0x5AAC, 0xD8C0, 0x5A95, 0xD8C1, 0x5AAE, 0xD8C2, 0x5A37, 0xD8C3, 0x5A84, 0xD8C4, 0x5A8A, + 0xD8C5, 0x5A97, 0xD8C6, 0x5A83, 0xD8C7, 0x5A8B, 0xD8C8, 0x5AA9, 0xD8C9, 0x5A7B, 0xD8CA, 0x5A7D, 0xD8CB, 0x5A8C, 0xD8CC, 0x5A9C, + 0xD8CD, 0x5A8F, 0xD8CE, 0x5A93, 0xD8CF, 0x5A9D, 0xD8D0, 0x5BEA, 0xD8D1, 0x5BCD, 0xD8D2, 0x5BCB, 0xD8D3, 0x5BD4, 0xD8D4, 0x5BD1, + 0xD8D5, 0x5BCA, 0xD8D6, 0x5BCE, 0xD8D7, 0x5C0C, 0xD8D8, 0x5C30, 0xD8D9, 0x5D37, 0xD8DA, 0x5D43, 0xD8DB, 0x5D6B, 0xD8DC, 0x5D41, + 0xD8DD, 0x5D4B, 0xD8DE, 0x5D3F, 0xD8DF, 0x5D35, 0xD8E0, 0x5D51, 0xD8E1, 0x5D4E, 0xD8E2, 0x5D55, 0xD8E3, 0x5D33, 0xD8E4, 0x5D3A, + 0xD8E5, 0x5D52, 0xD8E6, 0x5D3D, 0xD8E7, 0x5D31, 0xD8E8, 0x5D59, 0xD8E9, 0x5D42, 0xD8EA, 0x5D39, 0xD8EB, 0x5D49, 0xD8EC, 0x5D38, + 0xD8ED, 0x5D3C, 0xD8EE, 0x5D32, 0xD8EF, 0x5D36, 0xD8F0, 0x5D40, 0xD8F1, 0x5D45, 0xD8F2, 0x5E44, 0xD8F3, 0x5E41, 0xD8F4, 0x5F58, + 0xD8F5, 0x5FA6, 0xD8F6, 0x5FA5, 0xD8F7, 0x5FAB, 0xD8F8, 0x60C9, 0xD8F9, 0x60B9, 0xD8FA, 0x60CC, 0xD8FB, 0x60E2, 0xD8FC, 0x60CE, + 0xD8FD, 0x60C4, 0xD8FE, 0x6114, 0xD940, 0x60F2, 0xD941, 0x610A, 0xD942, 0x6116, 0xD943, 0x6105, 0xD944, 0x60F5, 0xD945, 0x6113, + 0xD946, 0x60F8, 0xD947, 0x60FC, 0xD948, 0x60FE, 0xD949, 0x60C1, 0xD94A, 0x6103, 0xD94B, 0x6118, 0xD94C, 0x611D, 0xD94D, 0x6110, + 0xD94E, 0x60FF, 0xD94F, 0x6104, 0xD950, 0x610B, 0xD951, 0x624A, 0xD952, 0x6394, 0xD953, 0x63B1, 0xD954, 0x63B0, 0xD955, 0x63CE, + 0xD956, 0x63E5, 0xD957, 0x63E8, 0xD958, 0x63EF, 0xD959, 0x63C3, 0xD95A, 0x649D, 0xD95B, 0x63F3, 0xD95C, 0x63CA, 0xD95D, 0x63E0, + 0xD95E, 0x63F6, 0xD95F, 0x63D5, 0xD960, 0x63F2, 0xD961, 0x63F5, 0xD962, 0x6461, 0xD963, 0x63DF, 0xD964, 0x63BE, 0xD965, 0x63DD, + 0xD966, 0x63DC, 0xD967, 0x63C4, 0xD968, 0x63D8, 0xD969, 0x63D3, 0xD96A, 0x63C2, 0xD96B, 0x63C7, 0xD96C, 0x63CC, 0xD96D, 0x63CB, + 0xD96E, 0x63C8, 0xD96F, 0x63F0, 0xD970, 0x63D7, 0xD971, 0x63D9, 0xD972, 0x6532, 0xD973, 0x6567, 0xD974, 0x656A, 0xD975, 0x6564, + 0xD976, 0x655C, 0xD977, 0x6568, 0xD978, 0x6565, 0xD979, 0x658C, 0xD97A, 0x659D, 0xD97B, 0x659E, 0xD97C, 0x65AE, 0xD97D, 0x65D0, + 0xD97E, 0x65D2, 0xD9A1, 0x667C, 0xD9A2, 0x666C, 0xD9A3, 0x667B, 0xD9A4, 0x6680, 0xD9A5, 0x6671, 0xD9A6, 0x6679, 0xD9A7, 0x666A, + 0xD9A8, 0x6672, 0xD9A9, 0x6701, 0xD9AA, 0x690C, 0xD9AB, 0x68D3, 0xD9AC, 0x6904, 0xD9AD, 0x68DC, 0xD9AE, 0x692A, 0xD9AF, 0x68EC, + 0xD9B0, 0x68EA, 0xD9B1, 0x68F1, 0xD9B2, 0x690F, 0xD9B3, 0x68D6, 0xD9B4, 0x68F7, 0xD9B5, 0x68EB, 0xD9B6, 0x68E4, 0xD9B7, 0x68F6, + 0xD9B8, 0x6913, 0xD9B9, 0x6910, 0xD9BA, 0x68F3, 0xD9BB, 0x68E1, 0xD9BC, 0x6907, 0xD9BD, 0x68CC, 0xD9BE, 0x6908, 0xD9BF, 0x6970, + 0xD9C0, 0x68B4, 0xD9C1, 0x6911, 0xD9C2, 0x68EF, 0xD9C3, 0x68C6, 0xD9C4, 0x6914, 0xD9C5, 0x68F8, 0xD9C6, 0x68D0, 0xD9C7, 0x68FD, + 0xD9C8, 0x68FC, 0xD9C9, 0x68E8, 0xD9CA, 0x690B, 0xD9CB, 0x690A, 0xD9CC, 0x6917, 0xD9CD, 0x68CE, 0xD9CE, 0x68C8, 0xD9CF, 0x68DD, + 0xD9D0, 0x68DE, 0xD9D1, 0x68E6, 0xD9D2, 0x68F4, 0xD9D3, 0x68D1, 0xD9D4, 0x6906, 0xD9D5, 0x68D4, 0xD9D6, 0x68E9, 0xD9D7, 0x6915, + 0xD9D8, 0x6925, 0xD9D9, 0x68C7, 0xD9DA, 0x6B39, 0xD9DB, 0x6B3B, 0xD9DC, 0x6B3F, 0xD9DD, 0x6B3C, 0xD9DE, 0x6B94, 0xD9DF, 0x6B97, + 0xD9E0, 0x6B99, 0xD9E1, 0x6B95, 0xD9E2, 0x6BBD, 0xD9E3, 0x6BF0, 0xD9E4, 0x6BF2, 0xD9E5, 0x6BF3, 0xD9E6, 0x6C30, 0xD9E7, 0x6DFC, + 0xD9E8, 0x6E46, 0xD9E9, 0x6E47, 0xD9EA, 0x6E1F, 0xD9EB, 0x6E49, 0xD9EC, 0x6E88, 0xD9ED, 0x6E3C, 0xD9EE, 0x6E3D, 0xD9EF, 0x6E45, + 0xD9F0, 0x6E62, 0xD9F1, 0x6E2B, 0xD9F2, 0x6E3F, 0xD9F3, 0x6E41, 0xD9F4, 0x6E5D, 0xD9F5, 0x6E73, 0xD9F6, 0x6E1C, 0xD9F7, 0x6E33, + 0xD9F8, 0x6E4B, 0xD9F9, 0x6E40, 0xD9FA, 0x6E51, 0xD9FB, 0x6E3B, 0xD9FC, 0x6E03, 0xD9FD, 0x6E2E, 0xD9FE, 0x6E5E, 0xDA40, 0x6E68, + 0xDA41, 0x6E5C, 0xDA42, 0x6E61, 0xDA43, 0x6E31, 0xDA44, 0x6E28, 0xDA45, 0x6E60, 0xDA46, 0x6E71, 0xDA47, 0x6E6B, 0xDA48, 0x6E39, + 0xDA49, 0x6E22, 0xDA4A, 0x6E30, 0xDA4B, 0x6E53, 0xDA4C, 0x6E65, 0xDA4D, 0x6E27, 0xDA4E, 0x6E78, 0xDA4F, 0x6E64, 0xDA50, 0x6E77, + 0xDA51, 0x6E55, 0xDA52, 0x6E79, 0xDA53, 0x6E52, 0xDA54, 0x6E66, 0xDA55, 0x6E35, 0xDA56, 0x6E36, 0xDA57, 0x6E5A, 0xDA58, 0x7120, + 0xDA59, 0x711E, 0xDA5A, 0x712F, 0xDA5B, 0x70FB, 0xDA5C, 0x712E, 0xDA5D, 0x7131, 0xDA5E, 0x7123, 0xDA5F, 0x7125, 0xDA60, 0x7122, + 0xDA61, 0x7132, 0xDA62, 0x711F, 0xDA63, 0x7128, 0xDA64, 0x713A, 0xDA65, 0x711B, 0xDA66, 0x724B, 0xDA67, 0x725A, 0xDA68, 0x7288, + 0xDA69, 0x7289, 0xDA6A, 0x7286, 0xDA6B, 0x7285, 0xDA6C, 0x728B, 0xDA6D, 0x7312, 0xDA6E, 0x730B, 0xDA6F, 0x7330, 0xDA70, 0x7322, + 0xDA71, 0x7331, 0xDA72, 0x7333, 0xDA73, 0x7327, 0xDA74, 0x7332, 0xDA75, 0x732D, 0xDA76, 0x7326, 0xDA77, 0x7323, 0xDA78, 0x7335, + 0xDA79, 0x730C, 0xDA7A, 0x742E, 0xDA7B, 0x742C, 0xDA7C, 0x7430, 0xDA7D, 0x742B, 0xDA7E, 0x7416, 0xDAA1, 0x741A, 0xDAA2, 0x7421, + 0xDAA3, 0x742D, 0xDAA4, 0x7431, 0xDAA5, 0x7424, 0xDAA6, 0x7423, 0xDAA7, 0x741D, 0xDAA8, 0x7429, 0xDAA9, 0x7420, 0xDAAA, 0x7432, + 0xDAAB, 0x74FB, 0xDAAC, 0x752F, 0xDAAD, 0x756F, 0xDAAE, 0x756C, 0xDAAF, 0x75E7, 0xDAB0, 0x75DA, 0xDAB1, 0x75E1, 0xDAB2, 0x75E6, + 0xDAB3, 0x75DD, 0xDAB4, 0x75DF, 0xDAB5, 0x75E4, 0xDAB6, 0x75D7, 0xDAB7, 0x7695, 0xDAB8, 0x7692, 0xDAB9, 0x76DA, 0xDABA, 0x7746, + 0xDABB, 0x7747, 0xDABC, 0x7744, 0xDABD, 0x774D, 0xDABE, 0x7745, 0xDABF, 0x774A, 0xDAC0, 0x774E, 0xDAC1, 0x774B, 0xDAC2, 0x774C, + 0xDAC3, 0x77DE, 0xDAC4, 0x77EC, 0xDAC5, 0x7860, 0xDAC6, 0x7864, 0xDAC7, 0x7865, 0xDAC8, 0x785C, 0xDAC9, 0x786D, 0xDACA, 0x7871, + 0xDACB, 0x786A, 0xDACC, 0x786E, 0xDACD, 0x7870, 0xDACE, 0x7869, 0xDACF, 0x7868, 0xDAD0, 0x785E, 0xDAD1, 0x7862, 0xDAD2, 0x7974, + 0xDAD3, 0x7973, 0xDAD4, 0x7972, 0xDAD5, 0x7970, 0xDAD6, 0x7A02, 0xDAD7, 0x7A0A, 0xDAD8, 0x7A03, 0xDAD9, 0x7A0C, 0xDADA, 0x7A04, + 0xDADB, 0x7A99, 0xDADC, 0x7AE6, 0xDADD, 0x7AE4, 0xDADE, 0x7B4A, 0xDADF, 0x7B3B, 0xDAE0, 0x7B44, 0xDAE1, 0x7B48, 0xDAE2, 0x7B4C, + 0xDAE3, 0x7B4E, 0xDAE4, 0x7B40, 0xDAE5, 0x7B58, 0xDAE6, 0x7B45, 0xDAE7, 0x7CA2, 0xDAE8, 0x7C9E, 0xDAE9, 0x7CA8, 0xDAEA, 0x7CA1, + 0xDAEB, 0x7D58, 0xDAEC, 0x7D6F, 0xDAED, 0x7D63, 0xDAEE, 0x7D53, 0xDAEF, 0x7D56, 0xDAF0, 0x7D67, 0xDAF1, 0x7D6A, 0xDAF2, 0x7D4F, + 0xDAF3, 0x7D6D, 0xDAF4, 0x7D5C, 0xDAF5, 0x7D6B, 0xDAF6, 0x7D52, 0xDAF7, 0x7D54, 0xDAF8, 0x7D69, 0xDAF9, 0x7D51, 0xDAFA, 0x7D5F, + 0xDAFB, 0x7D4E, 0xDAFC, 0x7F3E, 0xDAFD, 0x7F3F, 0xDAFE, 0x7F65, 0xDB40, 0x7F66, 0xDB41, 0x7FA2, 0xDB42, 0x7FA0, 0xDB43, 0x7FA1, + 0xDB44, 0x7FD7, 0xDB45, 0x8051, 0xDB46, 0x804F, 0xDB47, 0x8050, 0xDB48, 0x80FE, 0xDB49, 0x80D4, 0xDB4A, 0x8143, 0xDB4B, 0x814A, + 0xDB4C, 0x8152, 0xDB4D, 0x814F, 0xDB4E, 0x8147, 0xDB4F, 0x813D, 0xDB50, 0x814D, 0xDB51, 0x813A, 0xDB52, 0x81E6, 0xDB53, 0x81EE, + 0xDB54, 0x81F7, 0xDB55, 0x81F8, 0xDB56, 0x81F9, 0xDB57, 0x8204, 0xDB58, 0x823C, 0xDB59, 0x823D, 0xDB5A, 0x823F, 0xDB5B, 0x8275, + 0xDB5C, 0x833B, 0xDB5D, 0x83CF, 0xDB5E, 0x83F9, 0xDB5F, 0x8423, 0xDB60, 0x83C0, 0xDB61, 0x83E8, 0xDB62, 0x8412, 0xDB63, 0x83E7, + 0xDB64, 0x83E4, 0xDB65, 0x83FC, 0xDB66, 0x83F6, 0xDB67, 0x8410, 0xDB68, 0x83C6, 0xDB69, 0x83C8, 0xDB6A, 0x83EB, 0xDB6B, 0x83E3, + 0xDB6C, 0x83BF, 0xDB6D, 0x8401, 0xDB6E, 0x83DD, 0xDB6F, 0x83E5, 0xDB70, 0x83D8, 0xDB71, 0x83FF, 0xDB72, 0x83E1, 0xDB73, 0x83CB, + 0xDB74, 0x83CE, 0xDB75, 0x83D6, 0xDB76, 0x83F5, 0xDB77, 0x83C9, 0xDB78, 0x8409, 0xDB79, 0x840F, 0xDB7A, 0x83DE, 0xDB7B, 0x8411, + 0xDB7C, 0x8406, 0xDB7D, 0x83C2, 0xDB7E, 0x83F3, 0xDBA1, 0x83D5, 0xDBA2, 0x83FA, 0xDBA3, 0x83C7, 0xDBA4, 0x83D1, 0xDBA5, 0x83EA, + 0xDBA6, 0x8413, 0xDBA7, 0x83C3, 0xDBA8, 0x83EC, 0xDBA9, 0x83EE, 0xDBAA, 0x83C4, 0xDBAB, 0x83FB, 0xDBAC, 0x83D7, 0xDBAD, 0x83E2, + 0xDBAE, 0x841B, 0xDBAF, 0x83DB, 0xDBB0, 0x83FE, 0xDBB1, 0x86D8, 0xDBB2, 0x86E2, 0xDBB3, 0x86E6, 0xDBB4, 0x86D3, 0xDBB5, 0x86E3, + 0xDBB6, 0x86DA, 0xDBB7, 0x86EA, 0xDBB8, 0x86DD, 0xDBB9, 0x86EB, 0xDBBA, 0x86DC, 0xDBBB, 0x86EC, 0xDBBC, 0x86E9, 0xDBBD, 0x86D7, + 0xDBBE, 0x86E8, 0xDBBF, 0x86D1, 0xDBC0, 0x8848, 0xDBC1, 0x8856, 0xDBC2, 0x8855, 0xDBC3, 0x88BA, 0xDBC4, 0x88D7, 0xDBC5, 0x88B9, + 0xDBC6, 0x88B8, 0xDBC7, 0x88C0, 0xDBC8, 0x88BE, 0xDBC9, 0x88B6, 0xDBCA, 0x88BC, 0xDBCB, 0x88B7, 0xDBCC, 0x88BD, 0xDBCD, 0x88B2, + 0xDBCE, 0x8901, 0xDBCF, 0x88C9, 0xDBD0, 0x8995, 0xDBD1, 0x8998, 0xDBD2, 0x8997, 0xDBD3, 0x89DD, 0xDBD4, 0x89DA, 0xDBD5, 0x89DB, + 0xDBD6, 0x8A4E, 0xDBD7, 0x8A4D, 0xDBD8, 0x8A39, 0xDBD9, 0x8A59, 0xDBDA, 0x8A40, 0xDBDB, 0x8A57, 0xDBDC, 0x8A58, 0xDBDD, 0x8A44, + 0xDBDE, 0x8A45, 0xDBDF, 0x8A52, 0xDBE0, 0x8A48, 0xDBE1, 0x8A51, 0xDBE2, 0x8A4A, 0xDBE3, 0x8A4C, 0xDBE4, 0x8A4F, 0xDBE5, 0x8C5F, + 0xDBE6, 0x8C81, 0xDBE7, 0x8C80, 0xDBE8, 0x8CBA, 0xDBE9, 0x8CBE, 0xDBEA, 0x8CB0, 0xDBEB, 0x8CB9, 0xDBEC, 0x8CB5, 0xDBED, 0x8D84, + 0xDBEE, 0x8D80, 0xDBEF, 0x8D89, 0xDBF0, 0x8DD8, 0xDBF1, 0x8DD3, 0xDBF2, 0x8DCD, 0xDBF3, 0x8DC7, 0xDBF4, 0x8DD6, 0xDBF5, 0x8DDC, + 0xDBF6, 0x8DCF, 0xDBF7, 0x8DD5, 0xDBF8, 0x8DD9, 0xDBF9, 0x8DC8, 0xDBFA, 0x8DD7, 0xDBFB, 0x8DC5, 0xDBFC, 0x8EEF, 0xDBFD, 0x8EF7, + 0xDBFE, 0x8EFA, 0xDC40, 0x8EF9, 0xDC41, 0x8EE6, 0xDC42, 0x8EEE, 0xDC43, 0x8EE5, 0xDC44, 0x8EF5, 0xDC45, 0x8EE7, 0xDC46, 0x8EE8, + 0xDC47, 0x8EF6, 0xDC48, 0x8EEB, 0xDC49, 0x8EF1, 0xDC4A, 0x8EEC, 0xDC4B, 0x8EF4, 0xDC4C, 0x8EE9, 0xDC4D, 0x902D, 0xDC4E, 0x9034, + 0xDC4F, 0x902F, 0xDC50, 0x9106, 0xDC51, 0x912C, 0xDC52, 0x9104, 0xDC53, 0x90FF, 0xDC54, 0x90FC, 0xDC55, 0x9108, 0xDC56, 0x90F9, + 0xDC57, 0x90FB, 0xDC58, 0x9101, 0xDC59, 0x9100, 0xDC5A, 0x9107, 0xDC5B, 0x9105, 0xDC5C, 0x9103, 0xDC5D, 0x9161, 0xDC5E, 0x9164, + 0xDC5F, 0x915F, 0xDC60, 0x9162, 0xDC61, 0x9160, 0xDC62, 0x9201, 0xDC63, 0x920A, 0xDC64, 0x9225, 0xDC65, 0x9203, 0xDC66, 0x921A, + 0xDC67, 0x9226, 0xDC68, 0x920F, 0xDC69, 0x920C, 0xDC6A, 0x9200, 0xDC6B, 0x9212, 0xDC6C, 0x91FF, 0xDC6D, 0x91FD, 0xDC6E, 0x9206, + 0xDC6F, 0x9204, 0xDC70, 0x9227, 0xDC71, 0x9202, 0xDC72, 0x921C, 0xDC73, 0x9224, 0xDC74, 0x9219, 0xDC75, 0x9217, 0xDC76, 0x9205, + 0xDC77, 0x9216, 0xDC78, 0x957B, 0xDC79, 0x958D, 0xDC7A, 0x958C, 0xDC7B, 0x9590, 0xDC7C, 0x9687, 0xDC7D, 0x967E, 0xDC7E, 0x9688, + 0xDCA1, 0x9689, 0xDCA2, 0x9683, 0xDCA3, 0x9680, 0xDCA4, 0x96C2, 0xDCA5, 0x96C8, 0xDCA6, 0x96C3, 0xDCA7, 0x96F1, 0xDCA8, 0x96F0, + 0xDCA9, 0x976C, 0xDCAA, 0x9770, 0xDCAB, 0x976E, 0xDCAC, 0x9807, 0xDCAD, 0x98A9, 0xDCAE, 0x98EB, 0xDCAF, 0x9CE6, 0xDCB0, 0x9EF9, + 0xDCB1, 0x4E83, 0xDCB2, 0x4E84, 0xDCB3, 0x4EB6, 0xDCB4, 0x50BD, 0xDCB5, 0x50BF, 0xDCB6, 0x50C6, 0xDCB7, 0x50AE, 0xDCB8, 0x50C4, + 0xDCB9, 0x50CA, 0xDCBA, 0x50B4, 0xDCBB, 0x50C8, 0xDCBC, 0x50C2, 0xDCBD, 0x50B0, 0xDCBE, 0x50C1, 0xDCBF, 0x50BA, 0xDCC0, 0x50B1, + 0xDCC1, 0x50CB, 0xDCC2, 0x50C9, 0xDCC3, 0x50B6, 0xDCC4, 0x50B8, 0xDCC5, 0x51D7, 0xDCC6, 0x527A, 0xDCC7, 0x5278, 0xDCC8, 0x527B, + 0xDCC9, 0x527C, 0xDCCA, 0x55C3, 0xDCCB, 0x55DB, 0xDCCC, 0x55CC, 0xDCCD, 0x55D0, 0xDCCE, 0x55CB, 0xDCCF, 0x55CA, 0xDCD0, 0x55DD, + 0xDCD1, 0x55C0, 0xDCD2, 0x55D4, 0xDCD3, 0x55C4, 0xDCD4, 0x55E9, 0xDCD5, 0x55BF, 0xDCD6, 0x55D2, 0xDCD7, 0x558D, 0xDCD8, 0x55CF, + 0xDCD9, 0x55D5, 0xDCDA, 0x55E2, 0xDCDB, 0x55D6, 0xDCDC, 0x55C8, 0xDCDD, 0x55F2, 0xDCDE, 0x55CD, 0xDCDF, 0x55D9, 0xDCE0, 0x55C2, + 0xDCE1, 0x5714, 0xDCE2, 0x5853, 0xDCE3, 0x5868, 0xDCE4, 0x5864, 0xDCE5, 0x584F, 0xDCE6, 0x584D, 0xDCE7, 0x5849, 0xDCE8, 0x586F, + 0xDCE9, 0x5855, 0xDCEA, 0x584E, 0xDCEB, 0x585D, 0xDCEC, 0x5859, 0xDCED, 0x5865, 0xDCEE, 0x585B, 0xDCEF, 0x583D, 0xDCF0, 0x5863, + 0xDCF1, 0x5871, 0xDCF2, 0x58FC, 0xDCF3, 0x5AC7, 0xDCF4, 0x5AC4, 0xDCF5, 0x5ACB, 0xDCF6, 0x5ABA, 0xDCF7, 0x5AB8, 0xDCF8, 0x5AB1, + 0xDCF9, 0x5AB5, 0xDCFA, 0x5AB0, 0xDCFB, 0x5ABF, 0xDCFC, 0x5AC8, 0xDCFD, 0x5ABB, 0xDCFE, 0x5AC6, 0xDD40, 0x5AB7, 0xDD41, 0x5AC0, + 0xDD42, 0x5ACA, 0xDD43, 0x5AB4, 0xDD44, 0x5AB6, 0xDD45, 0x5ACD, 0xDD46, 0x5AB9, 0xDD47, 0x5A90, 0xDD48, 0x5BD6, 0xDD49, 0x5BD8, + 0xDD4A, 0x5BD9, 0xDD4B, 0x5C1F, 0xDD4C, 0x5C33, 0xDD4D, 0x5D71, 0xDD4E, 0x5D63, 0xDD4F, 0x5D4A, 0xDD50, 0x5D65, 0xDD51, 0x5D72, + 0xDD52, 0x5D6C, 0xDD53, 0x5D5E, 0xDD54, 0x5D68, 0xDD55, 0x5D67, 0xDD56, 0x5D62, 0xDD57, 0x5DF0, 0xDD58, 0x5E4F, 0xDD59, 0x5E4E, + 0xDD5A, 0x5E4A, 0xDD5B, 0x5E4D, 0xDD5C, 0x5E4B, 0xDD5D, 0x5EC5, 0xDD5E, 0x5ECC, 0xDD5F, 0x5EC6, 0xDD60, 0x5ECB, 0xDD61, 0x5EC7, + 0xDD62, 0x5F40, 0xDD63, 0x5FAF, 0xDD64, 0x5FAD, 0xDD65, 0x60F7, 0xDD66, 0x6149, 0xDD67, 0x614A, 0xDD68, 0x612B, 0xDD69, 0x6145, + 0xDD6A, 0x6136, 0xDD6B, 0x6132, 0xDD6C, 0x612E, 0xDD6D, 0x6146, 0xDD6E, 0x612F, 0xDD6F, 0x614F, 0xDD70, 0x6129, 0xDD71, 0x6140, + 0xDD72, 0x6220, 0xDD73, 0x9168, 0xDD74, 0x6223, 0xDD75, 0x6225, 0xDD76, 0x6224, 0xDD77, 0x63C5, 0xDD78, 0x63F1, 0xDD79, 0x63EB, + 0xDD7A, 0x6410, 0xDD7B, 0x6412, 0xDD7C, 0x6409, 0xDD7D, 0x6420, 0xDD7E, 0x6424, 0xDDA1, 0x6433, 0xDDA2, 0x6443, 0xDDA3, 0x641F, + 0xDDA4, 0x6415, 0xDDA5, 0x6418, 0xDDA6, 0x6439, 0xDDA7, 0x6437, 0xDDA8, 0x6422, 0xDDA9, 0x6423, 0xDDAA, 0x640C, 0xDDAB, 0x6426, + 0xDDAC, 0x6430, 0xDDAD, 0x6428, 0xDDAE, 0x6441, 0xDDAF, 0x6435, 0xDDB0, 0x642F, 0xDDB1, 0x640A, 0xDDB2, 0x641A, 0xDDB3, 0x6440, + 0xDDB4, 0x6425, 0xDDB5, 0x6427, 0xDDB6, 0x640B, 0xDDB7, 0x63E7, 0xDDB8, 0x641B, 0xDDB9, 0x642E, 0xDDBA, 0x6421, 0xDDBB, 0x640E, + 0xDDBC, 0x656F, 0xDDBD, 0x6592, 0xDDBE, 0x65D3, 0xDDBF, 0x6686, 0xDDC0, 0x668C, 0xDDC1, 0x6695, 0xDDC2, 0x6690, 0xDDC3, 0x668B, + 0xDDC4, 0x668A, 0xDDC5, 0x6699, 0xDDC6, 0x6694, 0xDDC7, 0x6678, 0xDDC8, 0x6720, 0xDDC9, 0x6966, 0xDDCA, 0x695F, 0xDDCB, 0x6938, + 0xDDCC, 0x694E, 0xDDCD, 0x6962, 0xDDCE, 0x6971, 0xDDCF, 0x693F, 0xDDD0, 0x6945, 0xDDD1, 0x696A, 0xDDD2, 0x6939, 0xDDD3, 0x6942, + 0xDDD4, 0x6957, 0xDDD5, 0x6959, 0xDDD6, 0x697A, 0xDDD7, 0x6948, 0xDDD8, 0x6949, 0xDDD9, 0x6935, 0xDDDA, 0x696C, 0xDDDB, 0x6933, + 0xDDDC, 0x693D, 0xDDDD, 0x6965, 0xDDDE, 0x68F0, 0xDDDF, 0x6978, 0xDDE0, 0x6934, 0xDDE1, 0x6969, 0xDDE2, 0x6940, 0xDDE3, 0x696F, + 0xDDE4, 0x6944, 0xDDE5, 0x6976, 0xDDE6, 0x6958, 0xDDE7, 0x6941, 0xDDE8, 0x6974, 0xDDE9, 0x694C, 0xDDEA, 0x693B, 0xDDEB, 0x694B, + 0xDDEC, 0x6937, 0xDDED, 0x695C, 0xDDEE, 0x694F, 0xDDEF, 0x6951, 0xDDF0, 0x6932, 0xDDF1, 0x6952, 0xDDF2, 0x692F, 0xDDF3, 0x697B, + 0xDDF4, 0x693C, 0xDDF5, 0x6B46, 0xDDF6, 0x6B45, 0xDDF7, 0x6B43, 0xDDF8, 0x6B42, 0xDDF9, 0x6B48, 0xDDFA, 0x6B41, 0xDDFB, 0x6B9B, + 0xDDFC, 0xFA0D, 0xDDFD, 0x6BFB, 0xDDFE, 0x6BFC, 0xDE40, 0x6BF9, 0xDE41, 0x6BF7, 0xDE42, 0x6BF8, 0xDE43, 0x6E9B, 0xDE44, 0x6ED6, + 0xDE45, 0x6EC8, 0xDE46, 0x6E8F, 0xDE47, 0x6EC0, 0xDE48, 0x6E9F, 0xDE49, 0x6E93, 0xDE4A, 0x6E94, 0xDE4B, 0x6EA0, 0xDE4C, 0x6EB1, + 0xDE4D, 0x6EB9, 0xDE4E, 0x6EC6, 0xDE4F, 0x6ED2, 0xDE50, 0x6EBD, 0xDE51, 0x6EC1, 0xDE52, 0x6E9E, 0xDE53, 0x6EC9, 0xDE54, 0x6EB7, + 0xDE55, 0x6EB0, 0xDE56, 0x6ECD, 0xDE57, 0x6EA6, 0xDE58, 0x6ECF, 0xDE59, 0x6EB2, 0xDE5A, 0x6EBE, 0xDE5B, 0x6EC3, 0xDE5C, 0x6EDC, + 0xDE5D, 0x6ED8, 0xDE5E, 0x6E99, 0xDE5F, 0x6E92, 0xDE60, 0x6E8E, 0xDE61, 0x6E8D, 0xDE62, 0x6EA4, 0xDE63, 0x6EA1, 0xDE64, 0x6EBF, + 0xDE65, 0x6EB3, 0xDE66, 0x6ED0, 0xDE67, 0x6ECA, 0xDE68, 0x6E97, 0xDE69, 0x6EAE, 0xDE6A, 0x6EA3, 0xDE6B, 0x7147, 0xDE6C, 0x7154, + 0xDE6D, 0x7152, 0xDE6E, 0x7163, 0xDE6F, 0x7160, 0xDE70, 0x7141, 0xDE71, 0x715D, 0xDE72, 0x7162, 0xDE73, 0x7172, 0xDE74, 0x7178, + 0xDE75, 0x716A, 0xDE76, 0x7161, 0xDE77, 0x7142, 0xDE78, 0x7158, 0xDE79, 0x7143, 0xDE7A, 0x714B, 0xDE7B, 0x7170, 0xDE7C, 0x715F, + 0xDE7D, 0x7150, 0xDE7E, 0x7153, 0xDEA1, 0x7144, 0xDEA2, 0x714D, 0xDEA3, 0x715A, 0xDEA4, 0x724F, 0xDEA5, 0x728D, 0xDEA6, 0x728C, + 0xDEA7, 0x7291, 0xDEA8, 0x7290, 0xDEA9, 0x728E, 0xDEAA, 0x733C, 0xDEAB, 0x7342, 0xDEAC, 0x733B, 0xDEAD, 0x733A, 0xDEAE, 0x7340, + 0xDEAF, 0x734A, 0xDEB0, 0x7349, 0xDEB1, 0x7444, 0xDEB2, 0x744A, 0xDEB3, 0x744B, 0xDEB4, 0x7452, 0xDEB5, 0x7451, 0xDEB6, 0x7457, + 0xDEB7, 0x7440, 0xDEB8, 0x744F, 0xDEB9, 0x7450, 0xDEBA, 0x744E, 0xDEBB, 0x7442, 0xDEBC, 0x7446, 0xDEBD, 0x744D, 0xDEBE, 0x7454, + 0xDEBF, 0x74E1, 0xDEC0, 0x74FF, 0xDEC1, 0x74FE, 0xDEC2, 0x74FD, 0xDEC3, 0x751D, 0xDEC4, 0x7579, 0xDEC5, 0x7577, 0xDEC6, 0x6983, + 0xDEC7, 0x75EF, 0xDEC8, 0x760F, 0xDEC9, 0x7603, 0xDECA, 0x75F7, 0xDECB, 0x75FE, 0xDECC, 0x75FC, 0xDECD, 0x75F9, 0xDECE, 0x75F8, + 0xDECF, 0x7610, 0xDED0, 0x75FB, 0xDED1, 0x75F6, 0xDED2, 0x75ED, 0xDED3, 0x75F5, 0xDED4, 0x75FD, 0xDED5, 0x7699, 0xDED6, 0x76B5, + 0xDED7, 0x76DD, 0xDED8, 0x7755, 0xDED9, 0x775F, 0xDEDA, 0x7760, 0xDEDB, 0x7752, 0xDEDC, 0x7756, 0xDEDD, 0x775A, 0xDEDE, 0x7769, + 0xDEDF, 0x7767, 0xDEE0, 0x7754, 0xDEE1, 0x7759, 0xDEE2, 0x776D, 0xDEE3, 0x77E0, 0xDEE4, 0x7887, 0xDEE5, 0x789A, 0xDEE6, 0x7894, + 0xDEE7, 0x788F, 0xDEE8, 0x7884, 0xDEE9, 0x7895, 0xDEEA, 0x7885, 0xDEEB, 0x7886, 0xDEEC, 0x78A1, 0xDEED, 0x7883, 0xDEEE, 0x7879, + 0xDEEF, 0x7899, 0xDEF0, 0x7880, 0xDEF1, 0x7896, 0xDEF2, 0x787B, 0xDEF3, 0x797C, 0xDEF4, 0x7982, 0xDEF5, 0x797D, 0xDEF6, 0x7979, + 0xDEF7, 0x7A11, 0xDEF8, 0x7A18, 0xDEF9, 0x7A19, 0xDEFA, 0x7A12, 0xDEFB, 0x7A17, 0xDEFC, 0x7A15, 0xDEFD, 0x7A22, 0xDEFE, 0x7A13, + 0xDF40, 0x7A1B, 0xDF41, 0x7A10, 0xDF42, 0x7AA3, 0xDF43, 0x7AA2, 0xDF44, 0x7A9E, 0xDF45, 0x7AEB, 0xDF46, 0x7B66, 0xDF47, 0x7B64, + 0xDF48, 0x7B6D, 0xDF49, 0x7B74, 0xDF4A, 0x7B69, 0xDF4B, 0x7B72, 0xDF4C, 0x7B65, 0xDF4D, 0x7B73, 0xDF4E, 0x7B71, 0xDF4F, 0x7B70, + 0xDF50, 0x7B61, 0xDF51, 0x7B78, 0xDF52, 0x7B76, 0xDF53, 0x7B63, 0xDF54, 0x7CB2, 0xDF55, 0x7CB4, 0xDF56, 0x7CAF, 0xDF57, 0x7D88, + 0xDF58, 0x7D86, 0xDF59, 0x7D80, 0xDF5A, 0x7D8D, 0xDF5B, 0x7D7F, 0xDF5C, 0x7D85, 0xDF5D, 0x7D7A, 0xDF5E, 0x7D8E, 0xDF5F, 0x7D7B, + 0xDF60, 0x7D83, 0xDF61, 0x7D7C, 0xDF62, 0x7D8C, 0xDF63, 0x7D94, 0xDF64, 0x7D84, 0xDF65, 0x7D7D, 0xDF66, 0x7D92, 0xDF67, 0x7F6D, + 0xDF68, 0x7F6B, 0xDF69, 0x7F67, 0xDF6A, 0x7F68, 0xDF6B, 0x7F6C, 0xDF6C, 0x7FA6, 0xDF6D, 0x7FA5, 0xDF6E, 0x7FA7, 0xDF6F, 0x7FDB, + 0xDF70, 0x7FDC, 0xDF71, 0x8021, 0xDF72, 0x8164, 0xDF73, 0x8160, 0xDF74, 0x8177, 0xDF75, 0x815C, 0xDF76, 0x8169, 0xDF77, 0x815B, + 0xDF78, 0x8162, 0xDF79, 0x8172, 0xDF7A, 0x6721, 0xDF7B, 0x815E, 0xDF7C, 0x8176, 0xDF7D, 0x8167, 0xDF7E, 0x816F, 0xDFA1, 0x8144, + 0xDFA2, 0x8161, 0xDFA3, 0x821D, 0xDFA4, 0x8249, 0xDFA5, 0x8244, 0xDFA6, 0x8240, 0xDFA7, 0x8242, 0xDFA8, 0x8245, 0xDFA9, 0x84F1, + 0xDFAA, 0x843F, 0xDFAB, 0x8456, 0xDFAC, 0x8476, 0xDFAD, 0x8479, 0xDFAE, 0x848F, 0xDFAF, 0x848D, 0xDFB0, 0x8465, 0xDFB1, 0x8451, + 0xDFB2, 0x8440, 0xDFB3, 0x8486, 0xDFB4, 0x8467, 0xDFB5, 0x8430, 0xDFB6, 0x844D, 0xDFB7, 0x847D, 0xDFB8, 0x845A, 0xDFB9, 0x8459, + 0xDFBA, 0x8474, 0xDFBB, 0x8473, 0xDFBC, 0x845D, 0xDFBD, 0x8507, 0xDFBE, 0x845E, 0xDFBF, 0x8437, 0xDFC0, 0x843A, 0xDFC1, 0x8434, + 0xDFC2, 0x847A, 0xDFC3, 0x8443, 0xDFC4, 0x8478, 0xDFC5, 0x8432, 0xDFC6, 0x8445, 0xDFC7, 0x8429, 0xDFC8, 0x83D9, 0xDFC9, 0x844B, + 0xDFCA, 0x842F, 0xDFCB, 0x8442, 0xDFCC, 0x842D, 0xDFCD, 0x845F, 0xDFCE, 0x8470, 0xDFCF, 0x8439, 0xDFD0, 0x844E, 0xDFD1, 0x844C, + 0xDFD2, 0x8452, 0xDFD3, 0x846F, 0xDFD4, 0x84C5, 0xDFD5, 0x848E, 0xDFD6, 0x843B, 0xDFD7, 0x8447, 0xDFD8, 0x8436, 0xDFD9, 0x8433, + 0xDFDA, 0x8468, 0xDFDB, 0x847E, 0xDFDC, 0x8444, 0xDFDD, 0x842B, 0xDFDE, 0x8460, 0xDFDF, 0x8454, 0xDFE0, 0x846E, 0xDFE1, 0x8450, + 0xDFE2, 0x870B, 0xDFE3, 0x8704, 0xDFE4, 0x86F7, 0xDFE5, 0x870C, 0xDFE6, 0x86FA, 0xDFE7, 0x86D6, 0xDFE8, 0x86F5, 0xDFE9, 0x874D, + 0xDFEA, 0x86F8, 0xDFEB, 0x870E, 0xDFEC, 0x8709, 0xDFED, 0x8701, 0xDFEE, 0x86F6, 0xDFEF, 0x870D, 0xDFF0, 0x8705, 0xDFF1, 0x88D6, + 0xDFF2, 0x88CB, 0xDFF3, 0x88CD, 0xDFF4, 0x88CE, 0xDFF5, 0x88DE, 0xDFF6, 0x88DB, 0xDFF7, 0x88DA, 0xDFF8, 0x88CC, 0xDFF9, 0x88D0, + 0xDFFA, 0x8985, 0xDFFB, 0x899B, 0xDFFC, 0x89DF, 0xDFFD, 0x89E5, 0xDFFE, 0x89E4, 0xE040, 0x89E1, 0xE041, 0x89E0, 0xE042, 0x89E2, + 0xE043, 0x89DC, 0xE044, 0x89E6, 0xE045, 0x8A76, 0xE046, 0x8A86, 0xE047, 0x8A7F, 0xE048, 0x8A61, 0xE049, 0x8A3F, 0xE04A, 0x8A77, + 0xE04B, 0x8A82, 0xE04C, 0x8A84, 0xE04D, 0x8A75, 0xE04E, 0x8A83, 0xE04F, 0x8A81, 0xE050, 0x8A74, 0xE051, 0x8A7A, 0xE052, 0x8C3C, + 0xE053, 0x8C4B, 0xE054, 0x8C4A, 0xE055, 0x8C65, 0xE056, 0x8C64, 0xE057, 0x8C66, 0xE058, 0x8C86, 0xE059, 0x8C84, 0xE05A, 0x8C85, + 0xE05B, 0x8CCC, 0xE05C, 0x8D68, 0xE05D, 0x8D69, 0xE05E, 0x8D91, 0xE05F, 0x8D8C, 0xE060, 0x8D8E, 0xE061, 0x8D8F, 0xE062, 0x8D8D, + 0xE063, 0x8D93, 0xE064, 0x8D94, 0xE065, 0x8D90, 0xE066, 0x8D92, 0xE067, 0x8DF0, 0xE068, 0x8DE0, 0xE069, 0x8DEC, 0xE06A, 0x8DF1, + 0xE06B, 0x8DEE, 0xE06C, 0x8DD0, 0xE06D, 0x8DE9, 0xE06E, 0x8DE3, 0xE06F, 0x8DE2, 0xE070, 0x8DE7, 0xE071, 0x8DF2, 0xE072, 0x8DEB, + 0xE073, 0x8DF4, 0xE074, 0x8F06, 0xE075, 0x8EFF, 0xE076, 0x8F01, 0xE077, 0x8F00, 0xE078, 0x8F05, 0xE079, 0x8F07, 0xE07A, 0x8F08, + 0xE07B, 0x8F02, 0xE07C, 0x8F0B, 0xE07D, 0x9052, 0xE07E, 0x903F, 0xE0A1, 0x9044, 0xE0A2, 0x9049, 0xE0A3, 0x903D, 0xE0A4, 0x9110, + 0xE0A5, 0x910D, 0xE0A6, 0x910F, 0xE0A7, 0x9111, 0xE0A8, 0x9116, 0xE0A9, 0x9114, 0xE0AA, 0x910B, 0xE0AB, 0x910E, 0xE0AC, 0x916E, + 0xE0AD, 0x916F, 0xE0AE, 0x9248, 0xE0AF, 0x9252, 0xE0B0, 0x9230, 0xE0B1, 0x923A, 0xE0B2, 0x9266, 0xE0B3, 0x9233, 0xE0B4, 0x9265, + 0xE0B5, 0x925E, 0xE0B6, 0x9283, 0xE0B7, 0x922E, 0xE0B8, 0x924A, 0xE0B9, 0x9246, 0xE0BA, 0x926D, 0xE0BB, 0x926C, 0xE0BC, 0x924F, + 0xE0BD, 0x9260, 0xE0BE, 0x9267, 0xE0BF, 0x926F, 0xE0C0, 0x9236, 0xE0C1, 0x9261, 0xE0C2, 0x9270, 0xE0C3, 0x9231, 0xE0C4, 0x9254, + 0xE0C5, 0x9263, 0xE0C6, 0x9250, 0xE0C7, 0x9272, 0xE0C8, 0x924E, 0xE0C9, 0x9253, 0xE0CA, 0x924C, 0xE0CB, 0x9256, 0xE0CC, 0x9232, + 0xE0CD, 0x959F, 0xE0CE, 0x959C, 0xE0CF, 0x959E, 0xE0D0, 0x959B, 0xE0D1, 0x9692, 0xE0D2, 0x9693, 0xE0D3, 0x9691, 0xE0D4, 0x9697, + 0xE0D5, 0x96CE, 0xE0D6, 0x96FA, 0xE0D7, 0x96FD, 0xE0D8, 0x96F8, 0xE0D9, 0x96F5, 0xE0DA, 0x9773, 0xE0DB, 0x9777, 0xE0DC, 0x9778, + 0xE0DD, 0x9772, 0xE0DE, 0x980F, 0xE0DF, 0x980D, 0xE0E0, 0x980E, 0xE0E1, 0x98AC, 0xE0E2, 0x98F6, 0xE0E3, 0x98F9, 0xE0E4, 0x99AF, + 0xE0E5, 0x99B2, 0xE0E6, 0x99B0, 0xE0E7, 0x99B5, 0xE0E8, 0x9AAD, 0xE0E9, 0x9AAB, 0xE0EA, 0x9B5B, 0xE0EB, 0x9CEA, 0xE0EC, 0x9CED, + 0xE0ED, 0x9CE7, 0xE0EE, 0x9E80, 0xE0EF, 0x9EFD, 0xE0F0, 0x50E6, 0xE0F1, 0x50D4, 0xE0F2, 0x50D7, 0xE0F3, 0x50E8, 0xE0F4, 0x50F3, + 0xE0F5, 0x50DB, 0xE0F6, 0x50EA, 0xE0F7, 0x50DD, 0xE0F8, 0x50E4, 0xE0F9, 0x50D3, 0xE0FA, 0x50EC, 0xE0FB, 0x50F0, 0xE0FC, 0x50EF, + 0xE0FD, 0x50E3, 0xE0FE, 0x50E0, 0xE140, 0x51D8, 0xE141, 0x5280, 0xE142, 0x5281, 0xE143, 0x52E9, 0xE144, 0x52EB, 0xE145, 0x5330, + 0xE146, 0x53AC, 0xE147, 0x5627, 0xE148, 0x5615, 0xE149, 0x560C, 0xE14A, 0x5612, 0xE14B, 0x55FC, 0xE14C, 0x560F, 0xE14D, 0x561C, + 0xE14E, 0x5601, 0xE14F, 0x5613, 0xE150, 0x5602, 0xE151, 0x55FA, 0xE152, 0x561D, 0xE153, 0x5604, 0xE154, 0x55FF, 0xE155, 0x55F9, + 0xE156, 0x5889, 0xE157, 0x587C, 0xE158, 0x5890, 0xE159, 0x5898, 0xE15A, 0x5886, 0xE15B, 0x5881, 0xE15C, 0x587F, 0xE15D, 0x5874, + 0xE15E, 0x588B, 0xE15F, 0x587A, 0xE160, 0x5887, 0xE161, 0x5891, 0xE162, 0x588E, 0xE163, 0x5876, 0xE164, 0x5882, 0xE165, 0x5888, + 0xE166, 0x587B, 0xE167, 0x5894, 0xE168, 0x588F, 0xE169, 0x58FE, 0xE16A, 0x596B, 0xE16B, 0x5ADC, 0xE16C, 0x5AEE, 0xE16D, 0x5AE5, + 0xE16E, 0x5AD5, 0xE16F, 0x5AEA, 0xE170, 0x5ADA, 0xE171, 0x5AED, 0xE172, 0x5AEB, 0xE173, 0x5AF3, 0xE174, 0x5AE2, 0xE175, 0x5AE0, + 0xE176, 0x5ADB, 0xE177, 0x5AEC, 0xE178, 0x5ADE, 0xE179, 0x5ADD, 0xE17A, 0x5AD9, 0xE17B, 0x5AE8, 0xE17C, 0x5ADF, 0xE17D, 0x5B77, + 0xE17E, 0x5BE0, 0xE1A1, 0x5BE3, 0xE1A2, 0x5C63, 0xE1A3, 0x5D82, 0xE1A4, 0x5D80, 0xE1A5, 0x5D7D, 0xE1A6, 0x5D86, 0xE1A7, 0x5D7A, + 0xE1A8, 0x5D81, 0xE1A9, 0x5D77, 0xE1AA, 0x5D8A, 0xE1AB, 0x5D89, 0xE1AC, 0x5D88, 0xE1AD, 0x5D7E, 0xE1AE, 0x5D7C, 0xE1AF, 0x5D8D, + 0xE1B0, 0x5D79, 0xE1B1, 0x5D7F, 0xE1B2, 0x5E58, 0xE1B3, 0x5E59, 0xE1B4, 0x5E53, 0xE1B5, 0x5ED8, 0xE1B6, 0x5ED1, 0xE1B7, 0x5ED7, + 0xE1B8, 0x5ECE, 0xE1B9, 0x5EDC, 0xE1BA, 0x5ED5, 0xE1BB, 0x5ED9, 0xE1BC, 0x5ED2, 0xE1BD, 0x5ED4, 0xE1BE, 0x5F44, 0xE1BF, 0x5F43, + 0xE1C0, 0x5F6F, 0xE1C1, 0x5FB6, 0xE1C2, 0x612C, 0xE1C3, 0x6128, 0xE1C4, 0x6141, 0xE1C5, 0x615E, 0xE1C6, 0x6171, 0xE1C7, 0x6173, + 0xE1C8, 0x6152, 0xE1C9, 0x6153, 0xE1CA, 0x6172, 0xE1CB, 0x616C, 0xE1CC, 0x6180, 0xE1CD, 0x6174, 0xE1CE, 0x6154, 0xE1CF, 0x617A, + 0xE1D0, 0x615B, 0xE1D1, 0x6165, 0xE1D2, 0x613B, 0xE1D3, 0x616A, 0xE1D4, 0x6161, 0xE1D5, 0x6156, 0xE1D6, 0x6229, 0xE1D7, 0x6227, + 0xE1D8, 0x622B, 0xE1D9, 0x642B, 0xE1DA, 0x644D, 0xE1DB, 0x645B, 0xE1DC, 0x645D, 0xE1DD, 0x6474, 0xE1DE, 0x6476, 0xE1DF, 0x6472, + 0xE1E0, 0x6473, 0xE1E1, 0x647D, 0xE1E2, 0x6475, 0xE1E3, 0x6466, 0xE1E4, 0x64A6, 0xE1E5, 0x644E, 0xE1E6, 0x6482, 0xE1E7, 0x645E, + 0xE1E8, 0x645C, 0xE1E9, 0x644B, 0xE1EA, 0x6453, 0xE1EB, 0x6460, 0xE1EC, 0x6450, 0xE1ED, 0x647F, 0xE1EE, 0x643F, 0xE1EF, 0x646C, + 0xE1F0, 0x646B, 0xE1F1, 0x6459, 0xE1F2, 0x6465, 0xE1F3, 0x6477, 0xE1F4, 0x6573, 0xE1F5, 0x65A0, 0xE1F6, 0x66A1, 0xE1F7, 0x66A0, + 0xE1F8, 0x669F, 0xE1F9, 0x6705, 0xE1FA, 0x6704, 0xE1FB, 0x6722, 0xE1FC, 0x69B1, 0xE1FD, 0x69B6, 0xE1FE, 0x69C9, 0xE240, 0x69A0, + 0xE241, 0x69CE, 0xE242, 0x6996, 0xE243, 0x69B0, 0xE244, 0x69AC, 0xE245, 0x69BC, 0xE246, 0x6991, 0xE247, 0x6999, 0xE248, 0x698E, + 0xE249, 0x69A7, 0xE24A, 0x698D, 0xE24B, 0x69A9, 0xE24C, 0x69BE, 0xE24D, 0x69AF, 0xE24E, 0x69BF, 0xE24F, 0x69C4, 0xE250, 0x69BD, + 0xE251, 0x69A4, 0xE252, 0x69D4, 0xE253, 0x69B9, 0xE254, 0x69CA, 0xE255, 0x699A, 0xE256, 0x69CF, 0xE257, 0x69B3, 0xE258, 0x6993, + 0xE259, 0x69AA, 0xE25A, 0x69A1, 0xE25B, 0x699E, 0xE25C, 0x69D9, 0xE25D, 0x6997, 0xE25E, 0x6990, 0xE25F, 0x69C2, 0xE260, 0x69B5, + 0xE261, 0x69A5, 0xE262, 0x69C6, 0xE263, 0x6B4A, 0xE264, 0x6B4D, 0xE265, 0x6B4B, 0xE266, 0x6B9E, 0xE267, 0x6B9F, 0xE268, 0x6BA0, + 0xE269, 0x6BC3, 0xE26A, 0x6BC4, 0xE26B, 0x6BFE, 0xE26C, 0x6ECE, 0xE26D, 0x6EF5, 0xE26E, 0x6EF1, 0xE26F, 0x6F03, 0xE270, 0x6F25, + 0xE271, 0x6EF8, 0xE272, 0x6F37, 0xE273, 0x6EFB, 0xE274, 0x6F2E, 0xE275, 0x6F09, 0xE276, 0x6F4E, 0xE277, 0x6F19, 0xE278, 0x6F1A, + 0xE279, 0x6F27, 0xE27A, 0x6F18, 0xE27B, 0x6F3B, 0xE27C, 0x6F12, 0xE27D, 0x6EED, 0xE27E, 0x6F0A, 0xE2A1, 0x6F36, 0xE2A2, 0x6F73, + 0xE2A3, 0x6EF9, 0xE2A4, 0x6EEE, 0xE2A5, 0x6F2D, 0xE2A6, 0x6F40, 0xE2A7, 0x6F30, 0xE2A8, 0x6F3C, 0xE2A9, 0x6F35, 0xE2AA, 0x6EEB, + 0xE2AB, 0x6F07, 0xE2AC, 0x6F0E, 0xE2AD, 0x6F43, 0xE2AE, 0x6F05, 0xE2AF, 0x6EFD, 0xE2B0, 0x6EF6, 0xE2B1, 0x6F39, 0xE2B2, 0x6F1C, + 0xE2B3, 0x6EFC, 0xE2B4, 0x6F3A, 0xE2B5, 0x6F1F, 0xE2B6, 0x6F0D, 0xE2B7, 0x6F1E, 0xE2B8, 0x6F08, 0xE2B9, 0x6F21, 0xE2BA, 0x7187, + 0xE2BB, 0x7190, 0xE2BC, 0x7189, 0xE2BD, 0x7180, 0xE2BE, 0x7185, 0xE2BF, 0x7182, 0xE2C0, 0x718F, 0xE2C1, 0x717B, 0xE2C2, 0x7186, + 0xE2C3, 0x7181, 0xE2C4, 0x7197, 0xE2C5, 0x7244, 0xE2C6, 0x7253, 0xE2C7, 0x7297, 0xE2C8, 0x7295, 0xE2C9, 0x7293, 0xE2CA, 0x7343, + 0xE2CB, 0x734D, 0xE2CC, 0x7351, 0xE2CD, 0x734C, 0xE2CE, 0x7462, 0xE2CF, 0x7473, 0xE2D0, 0x7471, 0xE2D1, 0x7475, 0xE2D2, 0x7472, + 0xE2D3, 0x7467, 0xE2D4, 0x746E, 0xE2D5, 0x7500, 0xE2D6, 0x7502, 0xE2D7, 0x7503, 0xE2D8, 0x757D, 0xE2D9, 0x7590, 0xE2DA, 0x7616, + 0xE2DB, 0x7608, 0xE2DC, 0x760C, 0xE2DD, 0x7615, 0xE2DE, 0x7611, 0xE2DF, 0x760A, 0xE2E0, 0x7614, 0xE2E1, 0x76B8, 0xE2E2, 0x7781, + 0xE2E3, 0x777C, 0xE2E4, 0x7785, 0xE2E5, 0x7782, 0xE2E6, 0x776E, 0xE2E7, 0x7780, 0xE2E8, 0x776F, 0xE2E9, 0x777E, 0xE2EA, 0x7783, + 0xE2EB, 0x78B2, 0xE2EC, 0x78AA, 0xE2ED, 0x78B4, 0xE2EE, 0x78AD, 0xE2EF, 0x78A8, 0xE2F0, 0x787E, 0xE2F1, 0x78AB, 0xE2F2, 0x789E, + 0xE2F3, 0x78A5, 0xE2F4, 0x78A0, 0xE2F5, 0x78AC, 0xE2F6, 0x78A2, 0xE2F7, 0x78A4, 0xE2F8, 0x7998, 0xE2F9, 0x798A, 0xE2FA, 0x798B, + 0xE2FB, 0x7996, 0xE2FC, 0x7995, 0xE2FD, 0x7994, 0xE2FE, 0x7993, 0xE340, 0x7997, 0xE341, 0x7988, 0xE342, 0x7992, 0xE343, 0x7990, + 0xE344, 0x7A2B, 0xE345, 0x7A4A, 0xE346, 0x7A30, 0xE347, 0x7A2F, 0xE348, 0x7A28, 0xE349, 0x7A26, 0xE34A, 0x7AA8, 0xE34B, 0x7AAB, + 0xE34C, 0x7AAC, 0xE34D, 0x7AEE, 0xE34E, 0x7B88, 0xE34F, 0x7B9C, 0xE350, 0x7B8A, 0xE351, 0x7B91, 0xE352, 0x7B90, 0xE353, 0x7B96, + 0xE354, 0x7B8D, 0xE355, 0x7B8C, 0xE356, 0x7B9B, 0xE357, 0x7B8E, 0xE358, 0x7B85, 0xE359, 0x7B98, 0xE35A, 0x5284, 0xE35B, 0x7B99, + 0xE35C, 0x7BA4, 0xE35D, 0x7B82, 0xE35E, 0x7CBB, 0xE35F, 0x7CBF, 0xE360, 0x7CBC, 0xE361, 0x7CBA, 0xE362, 0x7DA7, 0xE363, 0x7DB7, + 0xE364, 0x7DC2, 0xE365, 0x7DA3, 0xE366, 0x7DAA, 0xE367, 0x7DC1, 0xE368, 0x7DC0, 0xE369, 0x7DC5, 0xE36A, 0x7D9D, 0xE36B, 0x7DCE, + 0xE36C, 0x7DC4, 0xE36D, 0x7DC6, 0xE36E, 0x7DCB, 0xE36F, 0x7DCC, 0xE370, 0x7DAF, 0xE371, 0x7DB9, 0xE372, 0x7D96, 0xE373, 0x7DBC, + 0xE374, 0x7D9F, 0xE375, 0x7DA6, 0xE376, 0x7DAE, 0xE377, 0x7DA9, 0xE378, 0x7DA1, 0xE379, 0x7DC9, 0xE37A, 0x7F73, 0xE37B, 0x7FE2, + 0xE37C, 0x7FE3, 0xE37D, 0x7FE5, 0xE37E, 0x7FDE, 0xE3A1, 0x8024, 0xE3A2, 0x805D, 0xE3A3, 0x805C, 0xE3A4, 0x8189, 0xE3A5, 0x8186, + 0xE3A6, 0x8183, 0xE3A7, 0x8187, 0xE3A8, 0x818D, 0xE3A9, 0x818C, 0xE3AA, 0x818B, 0xE3AB, 0x8215, 0xE3AC, 0x8497, 0xE3AD, 0x84A4, + 0xE3AE, 0x84A1, 0xE3AF, 0x849F, 0xE3B0, 0x84BA, 0xE3B1, 0x84CE, 0xE3B2, 0x84C2, 0xE3B3, 0x84AC, 0xE3B4, 0x84AE, 0xE3B5, 0x84AB, + 0xE3B6, 0x84B9, 0xE3B7, 0x84B4, 0xE3B8, 0x84C1, 0xE3B9, 0x84CD, 0xE3BA, 0x84AA, 0xE3BB, 0x849A, 0xE3BC, 0x84B1, 0xE3BD, 0x84D0, + 0xE3BE, 0x849D, 0xE3BF, 0x84A7, 0xE3C0, 0x84BB, 0xE3C1, 0x84A2, 0xE3C2, 0x8494, 0xE3C3, 0x84C7, 0xE3C4, 0x84CC, 0xE3C5, 0x849B, + 0xE3C6, 0x84A9, 0xE3C7, 0x84AF, 0xE3C8, 0x84A8, 0xE3C9, 0x84D6, 0xE3CA, 0x8498, 0xE3CB, 0x84B6, 0xE3CC, 0x84CF, 0xE3CD, 0x84A0, + 0xE3CE, 0x84D7, 0xE3CF, 0x84D4, 0xE3D0, 0x84D2, 0xE3D1, 0x84DB, 0xE3D2, 0x84B0, 0xE3D3, 0x8491, 0xE3D4, 0x8661, 0xE3D5, 0x8733, + 0xE3D6, 0x8723, 0xE3D7, 0x8728, 0xE3D8, 0x876B, 0xE3D9, 0x8740, 0xE3DA, 0x872E, 0xE3DB, 0x871E, 0xE3DC, 0x8721, 0xE3DD, 0x8719, + 0xE3DE, 0x871B, 0xE3DF, 0x8743, 0xE3E0, 0x872C, 0xE3E1, 0x8741, 0xE3E2, 0x873E, 0xE3E3, 0x8746, 0xE3E4, 0x8720, 0xE3E5, 0x8732, + 0xE3E6, 0x872A, 0xE3E7, 0x872D, 0xE3E8, 0x873C, 0xE3E9, 0x8712, 0xE3EA, 0x873A, 0xE3EB, 0x8731, 0xE3EC, 0x8735, 0xE3ED, 0x8742, + 0xE3EE, 0x8726, 0xE3EF, 0x8727, 0xE3F0, 0x8738, 0xE3F1, 0x8724, 0xE3F2, 0x871A, 0xE3F3, 0x8730, 0xE3F4, 0x8711, 0xE3F5, 0x88F7, + 0xE3F6, 0x88E7, 0xE3F7, 0x88F1, 0xE3F8, 0x88F2, 0xE3F9, 0x88FA, 0xE3FA, 0x88FE, 0xE3FB, 0x88EE, 0xE3FC, 0x88FC, 0xE3FD, 0x88F6, + 0xE3FE, 0x88FB, 0xE440, 0x88F0, 0xE441, 0x88EC, 0xE442, 0x88EB, 0xE443, 0x899D, 0xE444, 0x89A1, 0xE445, 0x899F, 0xE446, 0x899E, + 0xE447, 0x89E9, 0xE448, 0x89EB, 0xE449, 0x89E8, 0xE44A, 0x8AAB, 0xE44B, 0x8A99, 0xE44C, 0x8A8B, 0xE44D, 0x8A92, 0xE44E, 0x8A8F, + 0xE44F, 0x8A96, 0xE450, 0x8C3D, 0xE451, 0x8C68, 0xE452, 0x8C69, 0xE453, 0x8CD5, 0xE454, 0x8CCF, 0xE455, 0x8CD7, 0xE456, 0x8D96, + 0xE457, 0x8E09, 0xE458, 0x8E02, 0xE459, 0x8DFF, 0xE45A, 0x8E0D, 0xE45B, 0x8DFD, 0xE45C, 0x8E0A, 0xE45D, 0x8E03, 0xE45E, 0x8E07, + 0xE45F, 0x8E06, 0xE460, 0x8E05, 0xE461, 0x8DFE, 0xE462, 0x8E00, 0xE463, 0x8E04, 0xE464, 0x8F10, 0xE465, 0x8F11, 0xE466, 0x8F0E, + 0xE467, 0x8F0D, 0xE468, 0x9123, 0xE469, 0x911C, 0xE46A, 0x9120, 0xE46B, 0x9122, 0xE46C, 0x911F, 0xE46D, 0x911D, 0xE46E, 0x911A, + 0xE46F, 0x9124, 0xE470, 0x9121, 0xE471, 0x911B, 0xE472, 0x917A, 0xE473, 0x9172, 0xE474, 0x9179, 0xE475, 0x9173, 0xE476, 0x92A5, + 0xE477, 0x92A4, 0xE478, 0x9276, 0xE479, 0x929B, 0xE47A, 0x927A, 0xE47B, 0x92A0, 0xE47C, 0x9294, 0xE47D, 0x92AA, 0xE47E, 0x928D, + 0xE4A1, 0x92A6, 0xE4A2, 0x929A, 0xE4A3, 0x92AB, 0xE4A4, 0x9279, 0xE4A5, 0x9297, 0xE4A6, 0x927F, 0xE4A7, 0x92A3, 0xE4A8, 0x92EE, + 0xE4A9, 0x928E, 0xE4AA, 0x9282, 0xE4AB, 0x9295, 0xE4AC, 0x92A2, 0xE4AD, 0x927D, 0xE4AE, 0x9288, 0xE4AF, 0x92A1, 0xE4B0, 0x928A, + 0xE4B1, 0x9286, 0xE4B2, 0x928C, 0xE4B3, 0x9299, 0xE4B4, 0x92A7, 0xE4B5, 0x927E, 0xE4B6, 0x9287, 0xE4B7, 0x92A9, 0xE4B8, 0x929D, + 0xE4B9, 0x928B, 0xE4BA, 0x922D, 0xE4BB, 0x969E, 0xE4BC, 0x96A1, 0xE4BD, 0x96FF, 0xE4BE, 0x9758, 0xE4BF, 0x977D, 0xE4C0, 0x977A, + 0xE4C1, 0x977E, 0xE4C2, 0x9783, 0xE4C3, 0x9780, 0xE4C4, 0x9782, 0xE4C5, 0x977B, 0xE4C6, 0x9784, 0xE4C7, 0x9781, 0xE4C8, 0x977F, + 0xE4C9, 0x97CE, 0xE4CA, 0x97CD, 0xE4CB, 0x9816, 0xE4CC, 0x98AD, 0xE4CD, 0x98AE, 0xE4CE, 0x9902, 0xE4CF, 0x9900, 0xE4D0, 0x9907, + 0xE4D1, 0x999D, 0xE4D2, 0x999C, 0xE4D3, 0x99C3, 0xE4D4, 0x99B9, 0xE4D5, 0x99BB, 0xE4D6, 0x99BA, 0xE4D7, 0x99C2, 0xE4D8, 0x99BD, + 0xE4D9, 0x99C7, 0xE4DA, 0x9AB1, 0xE4DB, 0x9AE3, 0xE4DC, 0x9AE7, 0xE4DD, 0x9B3E, 0xE4DE, 0x9B3F, 0xE4DF, 0x9B60, 0xE4E0, 0x9B61, + 0xE4E1, 0x9B5F, 0xE4E2, 0x9CF1, 0xE4E3, 0x9CF2, 0xE4E4, 0x9CF5, 0xE4E5, 0x9EA7, 0xE4E6, 0x50FF, 0xE4E7, 0x5103, 0xE4E8, 0x5130, + 0xE4E9, 0x50F8, 0xE4EA, 0x5106, 0xE4EB, 0x5107, 0xE4EC, 0x50F6, 0xE4ED, 0x50FE, 0xE4EE, 0x510B, 0xE4EF, 0x510C, 0xE4F0, 0x50FD, + 0xE4F1, 0x510A, 0xE4F2, 0x528B, 0xE4F3, 0x528C, 0xE4F4, 0x52F1, 0xE4F5, 0x52EF, 0xE4F6, 0x5648, 0xE4F7, 0x5642, 0xE4F8, 0x564C, + 0xE4F9, 0x5635, 0xE4FA, 0x5641, 0xE4FB, 0x564A, 0xE4FC, 0x5649, 0xE4FD, 0x5646, 0xE4FE, 0x5658, 0xE540, 0x565A, 0xE541, 0x5640, + 0xE542, 0x5633, 0xE543, 0x563D, 0xE544, 0x562C, 0xE545, 0x563E, 0xE546, 0x5638, 0xE547, 0x562A, 0xE548, 0x563A, 0xE549, 0x571A, + 0xE54A, 0x58AB, 0xE54B, 0x589D, 0xE54C, 0x58B1, 0xE54D, 0x58A0, 0xE54E, 0x58A3, 0xE54F, 0x58AF, 0xE550, 0x58AC, 0xE551, 0x58A5, + 0xE552, 0x58A1, 0xE553, 0x58FF, 0xE554, 0x5AFF, 0xE555, 0x5AF4, 0xE556, 0x5AFD, 0xE557, 0x5AF7, 0xE558, 0x5AF6, 0xE559, 0x5B03, + 0xE55A, 0x5AF8, 0xE55B, 0x5B02, 0xE55C, 0x5AF9, 0xE55D, 0x5B01, 0xE55E, 0x5B07, 0xE55F, 0x5B05, 0xE560, 0x5B0F, 0xE561, 0x5C67, + 0xE562, 0x5D99, 0xE563, 0x5D97, 0xE564, 0x5D9F, 0xE565, 0x5D92, 0xE566, 0x5DA2, 0xE567, 0x5D93, 0xE568, 0x5D95, 0xE569, 0x5DA0, + 0xE56A, 0x5D9C, 0xE56B, 0x5DA1, 0xE56C, 0x5D9A, 0xE56D, 0x5D9E, 0xE56E, 0x5E69, 0xE56F, 0x5E5D, 0xE570, 0x5E60, 0xE571, 0x5E5C, + 0xE572, 0x7DF3, 0xE573, 0x5EDB, 0xE574, 0x5EDE, 0xE575, 0x5EE1, 0xE576, 0x5F49, 0xE577, 0x5FB2, 0xE578, 0x618B, 0xE579, 0x6183, + 0xE57A, 0x6179, 0xE57B, 0x61B1, 0xE57C, 0x61B0, 0xE57D, 0x61A2, 0xE57E, 0x6189, 0xE5A1, 0x619B, 0xE5A2, 0x6193, 0xE5A3, 0x61AF, + 0xE5A4, 0x61AD, 0xE5A5, 0x619F, 0xE5A6, 0x6192, 0xE5A7, 0x61AA, 0xE5A8, 0x61A1, 0xE5A9, 0x618D, 0xE5AA, 0x6166, 0xE5AB, 0x61B3, + 0xE5AC, 0x622D, 0xE5AD, 0x646E, 0xE5AE, 0x6470, 0xE5AF, 0x6496, 0xE5B0, 0x64A0, 0xE5B1, 0x6485, 0xE5B2, 0x6497, 0xE5B3, 0x649C, + 0xE5B4, 0x648F, 0xE5B5, 0x648B, 0xE5B6, 0x648A, 0xE5B7, 0x648C, 0xE5B8, 0x64A3, 0xE5B9, 0x649F, 0xE5BA, 0x6468, 0xE5BB, 0x64B1, + 0xE5BC, 0x6498, 0xE5BD, 0x6576, 0xE5BE, 0x657A, 0xE5BF, 0x6579, 0xE5C0, 0x657B, 0xE5C1, 0x65B2, 0xE5C2, 0x65B3, 0xE5C3, 0x66B5, + 0xE5C4, 0x66B0, 0xE5C5, 0x66A9, 0xE5C6, 0x66B2, 0xE5C7, 0x66B7, 0xE5C8, 0x66AA, 0xE5C9, 0x66AF, 0xE5CA, 0x6A00, 0xE5CB, 0x6A06, + 0xE5CC, 0x6A17, 0xE5CD, 0x69E5, 0xE5CE, 0x69F8, 0xE5CF, 0x6A15, 0xE5D0, 0x69F1, 0xE5D1, 0x69E4, 0xE5D2, 0x6A20, 0xE5D3, 0x69FF, + 0xE5D4, 0x69EC, 0xE5D5, 0x69E2, 0xE5D6, 0x6A1B, 0xE5D7, 0x6A1D, 0xE5D8, 0x69FE, 0xE5D9, 0x6A27, 0xE5DA, 0x69F2, 0xE5DB, 0x69EE, + 0xE5DC, 0x6A14, 0xE5DD, 0x69F7, 0xE5DE, 0x69E7, 0xE5DF, 0x6A40, 0xE5E0, 0x6A08, 0xE5E1, 0x69E6, 0xE5E2, 0x69FB, 0xE5E3, 0x6A0D, + 0xE5E4, 0x69FC, 0xE5E5, 0x69EB, 0xE5E6, 0x6A09, 0xE5E7, 0x6A04, 0xE5E8, 0x6A18, 0xE5E9, 0x6A25, 0xE5EA, 0x6A0F, 0xE5EB, 0x69F6, + 0xE5EC, 0x6A26, 0xE5ED, 0x6A07, 0xE5EE, 0x69F4, 0xE5EF, 0x6A16, 0xE5F0, 0x6B51, 0xE5F1, 0x6BA5, 0xE5F2, 0x6BA3, 0xE5F3, 0x6BA2, + 0xE5F4, 0x6BA6, 0xE5F5, 0x6C01, 0xE5F6, 0x6C00, 0xE5F7, 0x6BFF, 0xE5F8, 0x6C02, 0xE5F9, 0x6F41, 0xE5FA, 0x6F26, 0xE5FB, 0x6F7E, + 0xE5FC, 0x6F87, 0xE5FD, 0x6FC6, 0xE5FE, 0x6F92, 0xE640, 0x6F8D, 0xE641, 0x6F89, 0xE642, 0x6F8C, 0xE643, 0x6F62, 0xE644, 0x6F4F, + 0xE645, 0x6F85, 0xE646, 0x6F5A, 0xE647, 0x6F96, 0xE648, 0x6F76, 0xE649, 0x6F6C, 0xE64A, 0x6F82, 0xE64B, 0x6F55, 0xE64C, 0x6F72, + 0xE64D, 0x6F52, 0xE64E, 0x6F50, 0xE64F, 0x6F57, 0xE650, 0x6F94, 0xE651, 0x6F93, 0xE652, 0x6F5D, 0xE653, 0x6F00, 0xE654, 0x6F61, + 0xE655, 0x6F6B, 0xE656, 0x6F7D, 0xE657, 0x6F67, 0xE658, 0x6F90, 0xE659, 0x6F53, 0xE65A, 0x6F8B, 0xE65B, 0x6F69, 0xE65C, 0x6F7F, + 0xE65D, 0x6F95, 0xE65E, 0x6F63, 0xE65F, 0x6F77, 0xE660, 0x6F6A, 0xE661, 0x6F7B, 0xE662, 0x71B2, 0xE663, 0x71AF, 0xE664, 0x719B, + 0xE665, 0x71B0, 0xE666, 0x71A0, 0xE667, 0x719A, 0xE668, 0x71A9, 0xE669, 0x71B5, 0xE66A, 0x719D, 0xE66B, 0x71A5, 0xE66C, 0x719E, + 0xE66D, 0x71A4, 0xE66E, 0x71A1, 0xE66F, 0x71AA, 0xE670, 0x719C, 0xE671, 0x71A7, 0xE672, 0x71B3, 0xE673, 0x7298, 0xE674, 0x729A, + 0xE675, 0x7358, 0xE676, 0x7352, 0xE677, 0x735E, 0xE678, 0x735F, 0xE679, 0x7360, 0xE67A, 0x735D, 0xE67B, 0x735B, 0xE67C, 0x7361, + 0xE67D, 0x735A, 0xE67E, 0x7359, 0xE6A1, 0x7362, 0xE6A2, 0x7487, 0xE6A3, 0x7489, 0xE6A4, 0x748A, 0xE6A5, 0x7486, 0xE6A6, 0x7481, + 0xE6A7, 0x747D, 0xE6A8, 0x7485, 0xE6A9, 0x7488, 0xE6AA, 0x747C, 0xE6AB, 0x7479, 0xE6AC, 0x7508, 0xE6AD, 0x7507, 0xE6AE, 0x757E, + 0xE6AF, 0x7625, 0xE6B0, 0x761E, 0xE6B1, 0x7619, 0xE6B2, 0x761D, 0xE6B3, 0x761C, 0xE6B4, 0x7623, 0xE6B5, 0x761A, 0xE6B6, 0x7628, + 0xE6B7, 0x761B, 0xE6B8, 0x769C, 0xE6B9, 0x769D, 0xE6BA, 0x769E, 0xE6BB, 0x769B, 0xE6BC, 0x778D, 0xE6BD, 0x778F, 0xE6BE, 0x7789, + 0xE6BF, 0x7788, 0xE6C0, 0x78CD, 0xE6C1, 0x78BB, 0xE6C2, 0x78CF, 0xE6C3, 0x78CC, 0xE6C4, 0x78D1, 0xE6C5, 0x78CE, 0xE6C6, 0x78D4, + 0xE6C7, 0x78C8, 0xE6C8, 0x78C3, 0xE6C9, 0x78C4, 0xE6CA, 0x78C9, 0xE6CB, 0x799A, 0xE6CC, 0x79A1, 0xE6CD, 0x79A0, 0xE6CE, 0x799C, + 0xE6CF, 0x79A2, 0xE6D0, 0x799B, 0xE6D1, 0x6B76, 0xE6D2, 0x7A39, 0xE6D3, 0x7AB2, 0xE6D4, 0x7AB4, 0xE6D5, 0x7AB3, 0xE6D6, 0x7BB7, + 0xE6D7, 0x7BCB, 0xE6D8, 0x7BBE, 0xE6D9, 0x7BAC, 0xE6DA, 0x7BCE, 0xE6DB, 0x7BAF, 0xE6DC, 0x7BB9, 0xE6DD, 0x7BCA, 0xE6DE, 0x7BB5, + 0xE6DF, 0x7CC5, 0xE6E0, 0x7CC8, 0xE6E1, 0x7CCC, 0xE6E2, 0x7CCB, 0xE6E3, 0x7DF7, 0xE6E4, 0x7DDB, 0xE6E5, 0x7DEA, 0xE6E6, 0x7DE7, + 0xE6E7, 0x7DD7, 0xE6E8, 0x7DE1, 0xE6E9, 0x7E03, 0xE6EA, 0x7DFA, 0xE6EB, 0x7DE6, 0xE6EC, 0x7DF6, 0xE6ED, 0x7DF1, 0xE6EE, 0x7DF0, + 0xE6EF, 0x7DEE, 0xE6F0, 0x7DDF, 0xE6F1, 0x7F76, 0xE6F2, 0x7FAC, 0xE6F3, 0x7FB0, 0xE6F4, 0x7FAD, 0xE6F5, 0x7FED, 0xE6F6, 0x7FEB, + 0xE6F7, 0x7FEA, 0xE6F8, 0x7FEC, 0xE6F9, 0x7FE6, 0xE6FA, 0x7FE8, 0xE6FB, 0x8064, 0xE6FC, 0x8067, 0xE6FD, 0x81A3, 0xE6FE, 0x819F, + 0xE740, 0x819E, 0xE741, 0x8195, 0xE742, 0x81A2, 0xE743, 0x8199, 0xE744, 0x8197, 0xE745, 0x8216, 0xE746, 0x824F, 0xE747, 0x8253, + 0xE748, 0x8252, 0xE749, 0x8250, 0xE74A, 0x824E, 0xE74B, 0x8251, 0xE74C, 0x8524, 0xE74D, 0x853B, 0xE74E, 0x850F, 0xE74F, 0x8500, + 0xE750, 0x8529, 0xE751, 0x850E, 0xE752, 0x8509, 0xE753, 0x850D, 0xE754, 0x851F, 0xE755, 0x850A, 0xE756, 0x8527, 0xE757, 0x851C, + 0xE758, 0x84FB, 0xE759, 0x852B, 0xE75A, 0x84FA, 0xE75B, 0x8508, 0xE75C, 0x850C, 0xE75D, 0x84F4, 0xE75E, 0x852A, 0xE75F, 0x84F2, + 0xE760, 0x8515, 0xE761, 0x84F7, 0xE762, 0x84EB, 0xE763, 0x84F3, 0xE764, 0x84FC, 0xE765, 0x8512, 0xE766, 0x84EA, 0xE767, 0x84E9, + 0xE768, 0x8516, 0xE769, 0x84FE, 0xE76A, 0x8528, 0xE76B, 0x851D, 0xE76C, 0x852E, 0xE76D, 0x8502, 0xE76E, 0x84FD, 0xE76F, 0x851E, + 0xE770, 0x84F6, 0xE771, 0x8531, 0xE772, 0x8526, 0xE773, 0x84E7, 0xE774, 0x84E8, 0xE775, 0x84F0, 0xE776, 0x84EF, 0xE777, 0x84F9, + 0xE778, 0x8518, 0xE779, 0x8520, 0xE77A, 0x8530, 0xE77B, 0x850B, 0xE77C, 0x8519, 0xE77D, 0x852F, 0xE77E, 0x8662, 0xE7A1, 0x8756, + 0xE7A2, 0x8763, 0xE7A3, 0x8764, 0xE7A4, 0x8777, 0xE7A5, 0x87E1, 0xE7A6, 0x8773, 0xE7A7, 0x8758, 0xE7A8, 0x8754, 0xE7A9, 0x875B, + 0xE7AA, 0x8752, 0xE7AB, 0x8761, 0xE7AC, 0x875A, 0xE7AD, 0x8751, 0xE7AE, 0x875E, 0xE7AF, 0x876D, 0xE7B0, 0x876A, 0xE7B1, 0x8750, + 0xE7B2, 0x874E, 0xE7B3, 0x875F, 0xE7B4, 0x875D, 0xE7B5, 0x876F, 0xE7B6, 0x876C, 0xE7B7, 0x877A, 0xE7B8, 0x876E, 0xE7B9, 0x875C, + 0xE7BA, 0x8765, 0xE7BB, 0x874F, 0xE7BC, 0x877B, 0xE7BD, 0x8775, 0xE7BE, 0x8762, 0xE7BF, 0x8767, 0xE7C0, 0x8769, 0xE7C1, 0x885A, + 0xE7C2, 0x8905, 0xE7C3, 0x890C, 0xE7C4, 0x8914, 0xE7C5, 0x890B, 0xE7C6, 0x8917, 0xE7C7, 0x8918, 0xE7C8, 0x8919, 0xE7C9, 0x8906, + 0xE7CA, 0x8916, 0xE7CB, 0x8911, 0xE7CC, 0x890E, 0xE7CD, 0x8909, 0xE7CE, 0x89A2, 0xE7CF, 0x89A4, 0xE7D0, 0x89A3, 0xE7D1, 0x89ED, + 0xE7D2, 0x89F0, 0xE7D3, 0x89EC, 0xE7D4, 0x8ACF, 0xE7D5, 0x8AC6, 0xE7D6, 0x8AB8, 0xE7D7, 0x8AD3, 0xE7D8, 0x8AD1, 0xE7D9, 0x8AD4, + 0xE7DA, 0x8AD5, 0xE7DB, 0x8ABB, 0xE7DC, 0x8AD7, 0xE7DD, 0x8ABE, 0xE7DE, 0x8AC0, 0xE7DF, 0x8AC5, 0xE7E0, 0x8AD8, 0xE7E1, 0x8AC3, + 0xE7E2, 0x8ABA, 0xE7E3, 0x8ABD, 0xE7E4, 0x8AD9, 0xE7E5, 0x8C3E, 0xE7E6, 0x8C4D, 0xE7E7, 0x8C8F, 0xE7E8, 0x8CE5, 0xE7E9, 0x8CDF, + 0xE7EA, 0x8CD9, 0xE7EB, 0x8CE8, 0xE7EC, 0x8CDA, 0xE7ED, 0x8CDD, 0xE7EE, 0x8CE7, 0xE7EF, 0x8DA0, 0xE7F0, 0x8D9C, 0xE7F1, 0x8DA1, + 0xE7F2, 0x8D9B, 0xE7F3, 0x8E20, 0xE7F4, 0x8E23, 0xE7F5, 0x8E25, 0xE7F6, 0x8E24, 0xE7F7, 0x8E2E, 0xE7F8, 0x8E15, 0xE7F9, 0x8E1B, + 0xE7FA, 0x8E16, 0xE7FB, 0x8E11, 0xE7FC, 0x8E19, 0xE7FD, 0x8E26, 0xE7FE, 0x8E27, 0xE840, 0x8E14, 0xE841, 0x8E12, 0xE842, 0x8E18, + 0xE843, 0x8E13, 0xE844, 0x8E1C, 0xE845, 0x8E17, 0xE846, 0x8E1A, 0xE847, 0x8F2C, 0xE848, 0x8F24, 0xE849, 0x8F18, 0xE84A, 0x8F1A, + 0xE84B, 0x8F20, 0xE84C, 0x8F23, 0xE84D, 0x8F16, 0xE84E, 0x8F17, 0xE84F, 0x9073, 0xE850, 0x9070, 0xE851, 0x906F, 0xE852, 0x9067, + 0xE853, 0x906B, 0xE854, 0x912F, 0xE855, 0x912B, 0xE856, 0x9129, 0xE857, 0x912A, 0xE858, 0x9132, 0xE859, 0x9126, 0xE85A, 0x912E, + 0xE85B, 0x9185, 0xE85C, 0x9186, 0xE85D, 0x918A, 0xE85E, 0x9181, 0xE85F, 0x9182, 0xE860, 0x9184, 0xE861, 0x9180, 0xE862, 0x92D0, + 0xE863, 0x92C3, 0xE864, 0x92C4, 0xE865, 0x92C0, 0xE866, 0x92D9, 0xE867, 0x92B6, 0xE868, 0x92CF, 0xE869, 0x92F1, 0xE86A, 0x92DF, + 0xE86B, 0x92D8, 0xE86C, 0x92E9, 0xE86D, 0x92D7, 0xE86E, 0x92DD, 0xE86F, 0x92CC, 0xE870, 0x92EF, 0xE871, 0x92C2, 0xE872, 0x92E8, + 0xE873, 0x92CA, 0xE874, 0x92C8, 0xE875, 0x92CE, 0xE876, 0x92E6, 0xE877, 0x92CD, 0xE878, 0x92D5, 0xE879, 0x92C9, 0xE87A, 0x92E0, + 0xE87B, 0x92DE, 0xE87C, 0x92E7, 0xE87D, 0x92D1, 0xE87E, 0x92D3, 0xE8A1, 0x92B5, 0xE8A2, 0x92E1, 0xE8A3, 0x92C6, 0xE8A4, 0x92B4, + 0xE8A5, 0x957C, 0xE8A6, 0x95AC, 0xE8A7, 0x95AB, 0xE8A8, 0x95AE, 0xE8A9, 0x95B0, 0xE8AA, 0x96A4, 0xE8AB, 0x96A2, 0xE8AC, 0x96D3, + 0xE8AD, 0x9705, 0xE8AE, 0x9708, 0xE8AF, 0x9702, 0xE8B0, 0x975A, 0xE8B1, 0x978A, 0xE8B2, 0x978E, 0xE8B3, 0x9788, 0xE8B4, 0x97D0, + 0xE8B5, 0x97CF, 0xE8B6, 0x981E, 0xE8B7, 0x981D, 0xE8B8, 0x9826, 0xE8B9, 0x9829, 0xE8BA, 0x9828, 0xE8BB, 0x9820, 0xE8BC, 0x981B, + 0xE8BD, 0x9827, 0xE8BE, 0x98B2, 0xE8BF, 0x9908, 0xE8C0, 0x98FA, 0xE8C1, 0x9911, 0xE8C2, 0x9914, 0xE8C3, 0x9916, 0xE8C4, 0x9917, + 0xE8C5, 0x9915, 0xE8C6, 0x99DC, 0xE8C7, 0x99CD, 0xE8C8, 0x99CF, 0xE8C9, 0x99D3, 0xE8CA, 0x99D4, 0xE8CB, 0x99CE, 0xE8CC, 0x99C9, + 0xE8CD, 0x99D6, 0xE8CE, 0x99D8, 0xE8CF, 0x99CB, 0xE8D0, 0x99D7, 0xE8D1, 0x99CC, 0xE8D2, 0x9AB3, 0xE8D3, 0x9AEC, 0xE8D4, 0x9AEB, + 0xE8D5, 0x9AF3, 0xE8D6, 0x9AF2, 0xE8D7, 0x9AF1, 0xE8D8, 0x9B46, 0xE8D9, 0x9B43, 0xE8DA, 0x9B67, 0xE8DB, 0x9B74, 0xE8DC, 0x9B71, + 0xE8DD, 0x9B66, 0xE8DE, 0x9B76, 0xE8DF, 0x9B75, 0xE8E0, 0x9B70, 0xE8E1, 0x9B68, 0xE8E2, 0x9B64, 0xE8E3, 0x9B6C, 0xE8E4, 0x9CFC, + 0xE8E5, 0x9CFA, 0xE8E6, 0x9CFD, 0xE8E7, 0x9CFF, 0xE8E8, 0x9CF7, 0xE8E9, 0x9D07, 0xE8EA, 0x9D00, 0xE8EB, 0x9CF9, 0xE8EC, 0x9CFB, + 0xE8ED, 0x9D08, 0xE8EE, 0x9D05, 0xE8EF, 0x9D04, 0xE8F0, 0x9E83, 0xE8F1, 0x9ED3, 0xE8F2, 0x9F0F, 0xE8F3, 0x9F10, 0xE8F4, 0x511C, + 0xE8F5, 0x5113, 0xE8F6, 0x5117, 0xE8F7, 0x511A, 0xE8F8, 0x5111, 0xE8F9, 0x51DE, 0xE8FA, 0x5334, 0xE8FB, 0x53E1, 0xE8FC, 0x5670, + 0xE8FD, 0x5660, 0xE8FE, 0x566E, 0xE940, 0x5673, 0xE941, 0x5666, 0xE942, 0x5663, 0xE943, 0x566D, 0xE944, 0x5672, 0xE945, 0x565E, + 0xE946, 0x5677, 0xE947, 0x571C, 0xE948, 0x571B, 0xE949, 0x58C8, 0xE94A, 0x58BD, 0xE94B, 0x58C9, 0xE94C, 0x58BF, 0xE94D, 0x58BA, + 0xE94E, 0x58C2, 0xE94F, 0x58BC, 0xE950, 0x58C6, 0xE951, 0x5B17, 0xE952, 0x5B19, 0xE953, 0x5B1B, 0xE954, 0x5B21, 0xE955, 0x5B14, + 0xE956, 0x5B13, 0xE957, 0x5B10, 0xE958, 0x5B16, 0xE959, 0x5B28, 0xE95A, 0x5B1A, 0xE95B, 0x5B20, 0xE95C, 0x5B1E, 0xE95D, 0x5BEF, + 0xE95E, 0x5DAC, 0xE95F, 0x5DB1, 0xE960, 0x5DA9, 0xE961, 0x5DA7, 0xE962, 0x5DB5, 0xE963, 0x5DB0, 0xE964, 0x5DAE, 0xE965, 0x5DAA, + 0xE966, 0x5DA8, 0xE967, 0x5DB2, 0xE968, 0x5DAD, 0xE969, 0x5DAF, 0xE96A, 0x5DB4, 0xE96B, 0x5E67, 0xE96C, 0x5E68, 0xE96D, 0x5E66, + 0xE96E, 0x5E6F, 0xE96F, 0x5EE9, 0xE970, 0x5EE7, 0xE971, 0x5EE6, 0xE972, 0x5EE8, 0xE973, 0x5EE5, 0xE974, 0x5F4B, 0xE975, 0x5FBC, + 0xE976, 0x619D, 0xE977, 0x61A8, 0xE978, 0x6196, 0xE979, 0x61C5, 0xE97A, 0x61B4, 0xE97B, 0x61C6, 0xE97C, 0x61C1, 0xE97D, 0x61CC, + 0xE97E, 0x61BA, 0xE9A1, 0x61BF, 0xE9A2, 0x61B8, 0xE9A3, 0x618C, 0xE9A4, 0x64D7, 0xE9A5, 0x64D6, 0xE9A6, 0x64D0, 0xE9A7, 0x64CF, + 0xE9A8, 0x64C9, 0xE9A9, 0x64BD, 0xE9AA, 0x6489, 0xE9AB, 0x64C3, 0xE9AC, 0x64DB, 0xE9AD, 0x64F3, 0xE9AE, 0x64D9, 0xE9AF, 0x6533, + 0xE9B0, 0x657F, 0xE9B1, 0x657C, 0xE9B2, 0x65A2, 0xE9B3, 0x66C8, 0xE9B4, 0x66BE, 0xE9B5, 0x66C0, 0xE9B6, 0x66CA, 0xE9B7, 0x66CB, + 0xE9B8, 0x66CF, 0xE9B9, 0x66BD, 0xE9BA, 0x66BB, 0xE9BB, 0x66BA, 0xE9BC, 0x66CC, 0xE9BD, 0x6723, 0xE9BE, 0x6A34, 0xE9BF, 0x6A66, + 0xE9C0, 0x6A49, 0xE9C1, 0x6A67, 0xE9C2, 0x6A32, 0xE9C3, 0x6A68, 0xE9C4, 0x6A3E, 0xE9C5, 0x6A5D, 0xE9C6, 0x6A6D, 0xE9C7, 0x6A76, + 0xE9C8, 0x6A5B, 0xE9C9, 0x6A51, 0xE9CA, 0x6A28, 0xE9CB, 0x6A5A, 0xE9CC, 0x6A3B, 0xE9CD, 0x6A3F, 0xE9CE, 0x6A41, 0xE9CF, 0x6A6A, + 0xE9D0, 0x6A64, 0xE9D1, 0x6A50, 0xE9D2, 0x6A4F, 0xE9D3, 0x6A54, 0xE9D4, 0x6A6F, 0xE9D5, 0x6A69, 0xE9D6, 0x6A60, 0xE9D7, 0x6A3C, + 0xE9D8, 0x6A5E, 0xE9D9, 0x6A56, 0xE9DA, 0x6A55, 0xE9DB, 0x6A4D, 0xE9DC, 0x6A4E, 0xE9DD, 0x6A46, 0xE9DE, 0x6B55, 0xE9DF, 0x6B54, + 0xE9E0, 0x6B56, 0xE9E1, 0x6BA7, 0xE9E2, 0x6BAA, 0xE9E3, 0x6BAB, 0xE9E4, 0x6BC8, 0xE9E5, 0x6BC7, 0xE9E6, 0x6C04, 0xE9E7, 0x6C03, + 0xE9E8, 0x6C06, 0xE9E9, 0x6FAD, 0xE9EA, 0x6FCB, 0xE9EB, 0x6FA3, 0xE9EC, 0x6FC7, 0xE9ED, 0x6FBC, 0xE9EE, 0x6FCE, 0xE9EF, 0x6FC8, + 0xE9F0, 0x6F5E, 0xE9F1, 0x6FC4, 0xE9F2, 0x6FBD, 0xE9F3, 0x6F9E, 0xE9F4, 0x6FCA, 0xE9F5, 0x6FA8, 0xE9F6, 0x7004, 0xE9F7, 0x6FA5, + 0xE9F8, 0x6FAE, 0xE9F9, 0x6FBA, 0xE9FA, 0x6FAC, 0xE9FB, 0x6FAA, 0xE9FC, 0x6FCF, 0xE9FD, 0x6FBF, 0xE9FE, 0x6FB8, 0xEA40, 0x6FA2, + 0xEA41, 0x6FC9, 0xEA42, 0x6FAB, 0xEA43, 0x6FCD, 0xEA44, 0x6FAF, 0xEA45, 0x6FB2, 0xEA46, 0x6FB0, 0xEA47, 0x71C5, 0xEA48, 0x71C2, + 0xEA49, 0x71BF, 0xEA4A, 0x71B8, 0xEA4B, 0x71D6, 0xEA4C, 0x71C0, 0xEA4D, 0x71C1, 0xEA4E, 0x71CB, 0xEA4F, 0x71D4, 0xEA50, 0x71CA, + 0xEA51, 0x71C7, 0xEA52, 0x71CF, 0xEA53, 0x71BD, 0xEA54, 0x71D8, 0xEA55, 0x71BC, 0xEA56, 0x71C6, 0xEA57, 0x71DA, 0xEA58, 0x71DB, + 0xEA59, 0x729D, 0xEA5A, 0x729E, 0xEA5B, 0x7369, 0xEA5C, 0x7366, 0xEA5D, 0x7367, 0xEA5E, 0x736C, 0xEA5F, 0x7365, 0xEA60, 0x736B, + 0xEA61, 0x736A, 0xEA62, 0x747F, 0xEA63, 0x749A, 0xEA64, 0x74A0, 0xEA65, 0x7494, 0xEA66, 0x7492, 0xEA67, 0x7495, 0xEA68, 0x74A1, + 0xEA69, 0x750B, 0xEA6A, 0x7580, 0xEA6B, 0x762F, 0xEA6C, 0x762D, 0xEA6D, 0x7631, 0xEA6E, 0x763D, 0xEA6F, 0x7633, 0xEA70, 0x763C, + 0xEA71, 0x7635, 0xEA72, 0x7632, 0xEA73, 0x7630, 0xEA74, 0x76BB, 0xEA75, 0x76E6, 0xEA76, 0x779A, 0xEA77, 0x779D, 0xEA78, 0x77A1, + 0xEA79, 0x779C, 0xEA7A, 0x779B, 0xEA7B, 0x77A2, 0xEA7C, 0x77A3, 0xEA7D, 0x7795, 0xEA7E, 0x7799, 0xEAA1, 0x7797, 0xEAA2, 0x78DD, + 0xEAA3, 0x78E9, 0xEAA4, 0x78E5, 0xEAA5, 0x78EA, 0xEAA6, 0x78DE, 0xEAA7, 0x78E3, 0xEAA8, 0x78DB, 0xEAA9, 0x78E1, 0xEAAA, 0x78E2, + 0xEAAB, 0x78ED, 0xEAAC, 0x78DF, 0xEAAD, 0x78E0, 0xEAAE, 0x79A4, 0xEAAF, 0x7A44, 0xEAB0, 0x7A48, 0xEAB1, 0x7A47, 0xEAB2, 0x7AB6, + 0xEAB3, 0x7AB8, 0xEAB4, 0x7AB5, 0xEAB5, 0x7AB1, 0xEAB6, 0x7AB7, 0xEAB7, 0x7BDE, 0xEAB8, 0x7BE3, 0xEAB9, 0x7BE7, 0xEABA, 0x7BDD, + 0xEABB, 0x7BD5, 0xEABC, 0x7BE5, 0xEABD, 0x7BDA, 0xEABE, 0x7BE8, 0xEABF, 0x7BF9, 0xEAC0, 0x7BD4, 0xEAC1, 0x7BEA, 0xEAC2, 0x7BE2, + 0xEAC3, 0x7BDC, 0xEAC4, 0x7BEB, 0xEAC5, 0x7BD8, 0xEAC6, 0x7BDF, 0xEAC7, 0x7CD2, 0xEAC8, 0x7CD4, 0xEAC9, 0x7CD7, 0xEACA, 0x7CD0, + 0xEACB, 0x7CD1, 0xEACC, 0x7E12, 0xEACD, 0x7E21, 0xEACE, 0x7E17, 0xEACF, 0x7E0C, 0xEAD0, 0x7E1F, 0xEAD1, 0x7E20, 0xEAD2, 0x7E13, + 0xEAD3, 0x7E0E, 0xEAD4, 0x7E1C, 0xEAD5, 0x7E15, 0xEAD6, 0x7E1A, 0xEAD7, 0x7E22, 0xEAD8, 0x7E0B, 0xEAD9, 0x7E0F, 0xEADA, 0x7E16, + 0xEADB, 0x7E0D, 0xEADC, 0x7E14, 0xEADD, 0x7E25, 0xEADE, 0x7E24, 0xEADF, 0x7F43, 0xEAE0, 0x7F7B, 0xEAE1, 0x7F7C, 0xEAE2, 0x7F7A, + 0xEAE3, 0x7FB1, 0xEAE4, 0x7FEF, 0xEAE5, 0x802A, 0xEAE6, 0x8029, 0xEAE7, 0x806C, 0xEAE8, 0x81B1, 0xEAE9, 0x81A6, 0xEAEA, 0x81AE, + 0xEAEB, 0x81B9, 0xEAEC, 0x81B5, 0xEAED, 0x81AB, 0xEAEE, 0x81B0, 0xEAEF, 0x81AC, 0xEAF0, 0x81B4, 0xEAF1, 0x81B2, 0xEAF2, 0x81B7, + 0xEAF3, 0x81A7, 0xEAF4, 0x81F2, 0xEAF5, 0x8255, 0xEAF6, 0x8256, 0xEAF7, 0x8257, 0xEAF8, 0x8556, 0xEAF9, 0x8545, 0xEAFA, 0x856B, + 0xEAFB, 0x854D, 0xEAFC, 0x8553, 0xEAFD, 0x8561, 0xEAFE, 0x8558, 0xEB40, 0x8540, 0xEB41, 0x8546, 0xEB42, 0x8564, 0xEB43, 0x8541, + 0xEB44, 0x8562, 0xEB45, 0x8544, 0xEB46, 0x8551, 0xEB47, 0x8547, 0xEB48, 0x8563, 0xEB49, 0x853E, 0xEB4A, 0x855B, 0xEB4B, 0x8571, + 0xEB4C, 0x854E, 0xEB4D, 0x856E, 0xEB4E, 0x8575, 0xEB4F, 0x8555, 0xEB50, 0x8567, 0xEB51, 0x8560, 0xEB52, 0x858C, 0xEB53, 0x8566, + 0xEB54, 0x855D, 0xEB55, 0x8554, 0xEB56, 0x8565, 0xEB57, 0x856C, 0xEB58, 0x8663, 0xEB59, 0x8665, 0xEB5A, 0x8664, 0xEB5B, 0x879B, + 0xEB5C, 0x878F, 0xEB5D, 0x8797, 0xEB5E, 0x8793, 0xEB5F, 0x8792, 0xEB60, 0x8788, 0xEB61, 0x8781, 0xEB62, 0x8796, 0xEB63, 0x8798, + 0xEB64, 0x8779, 0xEB65, 0x8787, 0xEB66, 0x87A3, 0xEB67, 0x8785, 0xEB68, 0x8790, 0xEB69, 0x8791, 0xEB6A, 0x879D, 0xEB6B, 0x8784, + 0xEB6C, 0x8794, 0xEB6D, 0x879C, 0xEB6E, 0x879A, 0xEB6F, 0x8789, 0xEB70, 0x891E, 0xEB71, 0x8926, 0xEB72, 0x8930, 0xEB73, 0x892D, + 0xEB74, 0x892E, 0xEB75, 0x8927, 0xEB76, 0x8931, 0xEB77, 0x8922, 0xEB78, 0x8929, 0xEB79, 0x8923, 0xEB7A, 0x892F, 0xEB7B, 0x892C, + 0xEB7C, 0x891F, 0xEB7D, 0x89F1, 0xEB7E, 0x8AE0, 0xEBA1, 0x8AE2, 0xEBA2, 0x8AF2, 0xEBA3, 0x8AF4, 0xEBA4, 0x8AF5, 0xEBA5, 0x8ADD, + 0xEBA6, 0x8B14, 0xEBA7, 0x8AE4, 0xEBA8, 0x8ADF, 0xEBA9, 0x8AF0, 0xEBAA, 0x8AC8, 0xEBAB, 0x8ADE, 0xEBAC, 0x8AE1, 0xEBAD, 0x8AE8, + 0xEBAE, 0x8AFF, 0xEBAF, 0x8AEF, 0xEBB0, 0x8AFB, 0xEBB1, 0x8C91, 0xEBB2, 0x8C92, 0xEBB3, 0x8C90, 0xEBB4, 0x8CF5, 0xEBB5, 0x8CEE, + 0xEBB6, 0x8CF1, 0xEBB7, 0x8CF0, 0xEBB8, 0x8CF3, 0xEBB9, 0x8D6C, 0xEBBA, 0x8D6E, 0xEBBB, 0x8DA5, 0xEBBC, 0x8DA7, 0xEBBD, 0x8E33, + 0xEBBE, 0x8E3E, 0xEBBF, 0x8E38, 0xEBC0, 0x8E40, 0xEBC1, 0x8E45, 0xEBC2, 0x8E36, 0xEBC3, 0x8E3C, 0xEBC4, 0x8E3D, 0xEBC5, 0x8E41, + 0xEBC6, 0x8E30, 0xEBC7, 0x8E3F, 0xEBC8, 0x8EBD, 0xEBC9, 0x8F36, 0xEBCA, 0x8F2E, 0xEBCB, 0x8F35, 0xEBCC, 0x8F32, 0xEBCD, 0x8F39, + 0xEBCE, 0x8F37, 0xEBCF, 0x8F34, 0xEBD0, 0x9076, 0xEBD1, 0x9079, 0xEBD2, 0x907B, 0xEBD3, 0x9086, 0xEBD4, 0x90FA, 0xEBD5, 0x9133, + 0xEBD6, 0x9135, 0xEBD7, 0x9136, 0xEBD8, 0x9193, 0xEBD9, 0x9190, 0xEBDA, 0x9191, 0xEBDB, 0x918D, 0xEBDC, 0x918F, 0xEBDD, 0x9327, + 0xEBDE, 0x931E, 0xEBDF, 0x9308, 0xEBE0, 0x931F, 0xEBE1, 0x9306, 0xEBE2, 0x930F, 0xEBE3, 0x937A, 0xEBE4, 0x9338, 0xEBE5, 0x933C, + 0xEBE6, 0x931B, 0xEBE7, 0x9323, 0xEBE8, 0x9312, 0xEBE9, 0x9301, 0xEBEA, 0x9346, 0xEBEB, 0x932D, 0xEBEC, 0x930E, 0xEBED, 0x930D, + 0xEBEE, 0x92CB, 0xEBEF, 0x931D, 0xEBF0, 0x92FA, 0xEBF1, 0x9325, 0xEBF2, 0x9313, 0xEBF3, 0x92F9, 0xEBF4, 0x92F7, 0xEBF5, 0x9334, + 0xEBF6, 0x9302, 0xEBF7, 0x9324, 0xEBF8, 0x92FF, 0xEBF9, 0x9329, 0xEBFA, 0x9339, 0xEBFB, 0x9335, 0xEBFC, 0x932A, 0xEBFD, 0x9314, + 0xEBFE, 0x930C, 0xEC40, 0x930B, 0xEC41, 0x92FE, 0xEC42, 0x9309, 0xEC43, 0x9300, 0xEC44, 0x92FB, 0xEC45, 0x9316, 0xEC46, 0x95BC, + 0xEC47, 0x95CD, 0xEC48, 0x95BE, 0xEC49, 0x95B9, 0xEC4A, 0x95BA, 0xEC4B, 0x95B6, 0xEC4C, 0x95BF, 0xEC4D, 0x95B5, 0xEC4E, 0x95BD, + 0xEC4F, 0x96A9, 0xEC50, 0x96D4, 0xEC51, 0x970B, 0xEC52, 0x9712, 0xEC53, 0x9710, 0xEC54, 0x9799, 0xEC55, 0x9797, 0xEC56, 0x9794, + 0xEC57, 0x97F0, 0xEC58, 0x97F8, 0xEC59, 0x9835, 0xEC5A, 0x982F, 0xEC5B, 0x9832, 0xEC5C, 0x9924, 0xEC5D, 0x991F, 0xEC5E, 0x9927, + 0xEC5F, 0x9929, 0xEC60, 0x999E, 0xEC61, 0x99EE, 0xEC62, 0x99EC, 0xEC63, 0x99E5, 0xEC64, 0x99E4, 0xEC65, 0x99F0, 0xEC66, 0x99E3, + 0xEC67, 0x99EA, 0xEC68, 0x99E9, 0xEC69, 0x99E7, 0xEC6A, 0x9AB9, 0xEC6B, 0x9ABF, 0xEC6C, 0x9AB4, 0xEC6D, 0x9ABB, 0xEC6E, 0x9AF6, + 0xEC6F, 0x9AFA, 0xEC70, 0x9AF9, 0xEC71, 0x9AF7, 0xEC72, 0x9B33, 0xEC73, 0x9B80, 0xEC74, 0x9B85, 0xEC75, 0x9B87, 0xEC76, 0x9B7C, + 0xEC77, 0x9B7E, 0xEC78, 0x9B7B, 0xEC79, 0x9B82, 0xEC7A, 0x9B93, 0xEC7B, 0x9B92, 0xEC7C, 0x9B90, 0xEC7D, 0x9B7A, 0xEC7E, 0x9B95, + 0xECA1, 0x9B7D, 0xECA2, 0x9B88, 0xECA3, 0x9D25, 0xECA4, 0x9D17, 0xECA5, 0x9D20, 0xECA6, 0x9D1E, 0xECA7, 0x9D14, 0xECA8, 0x9D29, + 0xECA9, 0x9D1D, 0xECAA, 0x9D18, 0xECAB, 0x9D22, 0xECAC, 0x9D10, 0xECAD, 0x9D19, 0xECAE, 0x9D1F, 0xECAF, 0x9E88, 0xECB0, 0x9E86, + 0xECB1, 0x9E87, 0xECB2, 0x9EAE, 0xECB3, 0x9EAD, 0xECB4, 0x9ED5, 0xECB5, 0x9ED6, 0xECB6, 0x9EFA, 0xECB7, 0x9F12, 0xECB8, 0x9F3D, + 0xECB9, 0x5126, 0xECBA, 0x5125, 0xECBB, 0x5122, 0xECBC, 0x5124, 0xECBD, 0x5120, 0xECBE, 0x5129, 0xECBF, 0x52F4, 0xECC0, 0x5693, + 0xECC1, 0x568C, 0xECC2, 0x568D, 0xECC3, 0x5686, 0xECC4, 0x5684, 0xECC5, 0x5683, 0xECC6, 0x567E, 0xECC7, 0x5682, 0xECC8, 0x567F, + 0xECC9, 0x5681, 0xECCA, 0x58D6, 0xECCB, 0x58D4, 0xECCC, 0x58CF, 0xECCD, 0x58D2, 0xECCE, 0x5B2D, 0xECCF, 0x5B25, 0xECD0, 0x5B32, + 0xECD1, 0x5B23, 0xECD2, 0x5B2C, 0xECD3, 0x5B27, 0xECD4, 0x5B26, 0xECD5, 0x5B2F, 0xECD6, 0x5B2E, 0xECD7, 0x5B7B, 0xECD8, 0x5BF1, + 0xECD9, 0x5BF2, 0xECDA, 0x5DB7, 0xECDB, 0x5E6C, 0xECDC, 0x5E6A, 0xECDD, 0x5FBE, 0xECDE, 0x5FBB, 0xECDF, 0x61C3, 0xECE0, 0x61B5, + 0xECE1, 0x61BC, 0xECE2, 0x61E7, 0xECE3, 0x61E0, 0xECE4, 0x61E5, 0xECE5, 0x61E4, 0xECE6, 0x61E8, 0xECE7, 0x61DE, 0xECE8, 0x64EF, + 0xECE9, 0x64E9, 0xECEA, 0x64E3, 0xECEB, 0x64EB, 0xECEC, 0x64E4, 0xECED, 0x64E8, 0xECEE, 0x6581, 0xECEF, 0x6580, 0xECF0, 0x65B6, + 0xECF1, 0x65DA, 0xECF2, 0x66D2, 0xECF3, 0x6A8D, 0xECF4, 0x6A96, 0xECF5, 0x6A81, 0xECF6, 0x6AA5, 0xECF7, 0x6A89, 0xECF8, 0x6A9F, + 0xECF9, 0x6A9B, 0xECFA, 0x6AA1, 0xECFB, 0x6A9E, 0xECFC, 0x6A87, 0xECFD, 0x6A93, 0xECFE, 0x6A8E, 0xED40, 0x6A95, 0xED41, 0x6A83, + 0xED42, 0x6AA8, 0xED43, 0x6AA4, 0xED44, 0x6A91, 0xED45, 0x6A7F, 0xED46, 0x6AA6, 0xED47, 0x6A9A, 0xED48, 0x6A85, 0xED49, 0x6A8C, + 0xED4A, 0x6A92, 0xED4B, 0x6B5B, 0xED4C, 0x6BAD, 0xED4D, 0x6C09, 0xED4E, 0x6FCC, 0xED4F, 0x6FA9, 0xED50, 0x6FF4, 0xED51, 0x6FD4, + 0xED52, 0x6FE3, 0xED53, 0x6FDC, 0xED54, 0x6FED, 0xED55, 0x6FE7, 0xED56, 0x6FE6, 0xED57, 0x6FDE, 0xED58, 0x6FF2, 0xED59, 0x6FDD, + 0xED5A, 0x6FE2, 0xED5B, 0x6FE8, 0xED5C, 0x71E1, 0xED5D, 0x71F1, 0xED5E, 0x71E8, 0xED5F, 0x71F2, 0xED60, 0x71E4, 0xED61, 0x71F0, + 0xED62, 0x71E2, 0xED63, 0x7373, 0xED64, 0x736E, 0xED65, 0x736F, 0xED66, 0x7497, 0xED67, 0x74B2, 0xED68, 0x74AB, 0xED69, 0x7490, + 0xED6A, 0x74AA, 0xED6B, 0x74AD, 0xED6C, 0x74B1, 0xED6D, 0x74A5, 0xED6E, 0x74AF, 0xED6F, 0x7510, 0xED70, 0x7511, 0xED71, 0x7512, + 0xED72, 0x750F, 0xED73, 0x7584, 0xED74, 0x7643, 0xED75, 0x7648, 0xED76, 0x7649, 0xED77, 0x7647, 0xED78, 0x76A4, 0xED79, 0x76E9, + 0xED7A, 0x77B5, 0xED7B, 0x77AB, 0xED7C, 0x77B2, 0xED7D, 0x77B7, 0xED7E, 0x77B6, 0xEDA1, 0x77B4, 0xEDA2, 0x77B1, 0xEDA3, 0x77A8, + 0xEDA4, 0x77F0, 0xEDA5, 0x78F3, 0xEDA6, 0x78FD, 0xEDA7, 0x7902, 0xEDA8, 0x78FB, 0xEDA9, 0x78FC, 0xEDAA, 0x78F2, 0xEDAB, 0x7905, + 0xEDAC, 0x78F9, 0xEDAD, 0x78FE, 0xEDAE, 0x7904, 0xEDAF, 0x79AB, 0xEDB0, 0x79A8, 0xEDB1, 0x7A5C, 0xEDB2, 0x7A5B, 0xEDB3, 0x7A56, + 0xEDB4, 0x7A58, 0xEDB5, 0x7A54, 0xEDB6, 0x7A5A, 0xEDB7, 0x7ABE, 0xEDB8, 0x7AC0, 0xEDB9, 0x7AC1, 0xEDBA, 0x7C05, 0xEDBB, 0x7C0F, + 0xEDBC, 0x7BF2, 0xEDBD, 0x7C00, 0xEDBE, 0x7BFF, 0xEDBF, 0x7BFB, 0xEDC0, 0x7C0E, 0xEDC1, 0x7BF4, 0xEDC2, 0x7C0B, 0xEDC3, 0x7BF3, + 0xEDC4, 0x7C02, 0xEDC5, 0x7C09, 0xEDC6, 0x7C03, 0xEDC7, 0x7C01, 0xEDC8, 0x7BF8, 0xEDC9, 0x7BFD, 0xEDCA, 0x7C06, 0xEDCB, 0x7BF0, + 0xEDCC, 0x7BF1, 0xEDCD, 0x7C10, 0xEDCE, 0x7C0A, 0xEDCF, 0x7CE8, 0xEDD0, 0x7E2D, 0xEDD1, 0x7E3C, 0xEDD2, 0x7E42, 0xEDD3, 0x7E33, + 0xEDD4, 0x9848, 0xEDD5, 0x7E38, 0xEDD6, 0x7E2A, 0xEDD7, 0x7E49, 0xEDD8, 0x7E40, 0xEDD9, 0x7E47, 0xEDDA, 0x7E29, 0xEDDB, 0x7E4C, + 0xEDDC, 0x7E30, 0xEDDD, 0x7E3B, 0xEDDE, 0x7E36, 0xEDDF, 0x7E44, 0xEDE0, 0x7E3A, 0xEDE1, 0x7F45, 0xEDE2, 0x7F7F, 0xEDE3, 0x7F7E, + 0xEDE4, 0x7F7D, 0xEDE5, 0x7FF4, 0xEDE6, 0x7FF2, 0xEDE7, 0x802C, 0xEDE8, 0x81BB, 0xEDE9, 0x81C4, 0xEDEA, 0x81CC, 0xEDEB, 0x81CA, + 0xEDEC, 0x81C5, 0xEDED, 0x81C7, 0xEDEE, 0x81BC, 0xEDEF, 0x81E9, 0xEDF0, 0x825B, 0xEDF1, 0x825A, 0xEDF2, 0x825C, 0xEDF3, 0x8583, + 0xEDF4, 0x8580, 0xEDF5, 0x858F, 0xEDF6, 0x85A7, 0xEDF7, 0x8595, 0xEDF8, 0x85A0, 0xEDF9, 0x858B, 0xEDFA, 0x85A3, 0xEDFB, 0x857B, + 0xEDFC, 0x85A4, 0xEDFD, 0x859A, 0xEDFE, 0x859E, 0xEE40, 0x8577, 0xEE41, 0x857C, 0xEE42, 0x8589, 0xEE43, 0x85A1, 0xEE44, 0x857A, + 0xEE45, 0x8578, 0xEE46, 0x8557, 0xEE47, 0x858E, 0xEE48, 0x8596, 0xEE49, 0x8586, 0xEE4A, 0x858D, 0xEE4B, 0x8599, 0xEE4C, 0x859D, + 0xEE4D, 0x8581, 0xEE4E, 0x85A2, 0xEE4F, 0x8582, 0xEE50, 0x8588, 0xEE51, 0x8585, 0xEE52, 0x8579, 0xEE53, 0x8576, 0xEE54, 0x8598, + 0xEE55, 0x8590, 0xEE56, 0x859F, 0xEE57, 0x8668, 0xEE58, 0x87BE, 0xEE59, 0x87AA, 0xEE5A, 0x87AD, 0xEE5B, 0x87C5, 0xEE5C, 0x87B0, + 0xEE5D, 0x87AC, 0xEE5E, 0x87B9, 0xEE5F, 0x87B5, 0xEE60, 0x87BC, 0xEE61, 0x87AE, 0xEE62, 0x87C9, 0xEE63, 0x87C3, 0xEE64, 0x87C2, + 0xEE65, 0x87CC, 0xEE66, 0x87B7, 0xEE67, 0x87AF, 0xEE68, 0x87C4, 0xEE69, 0x87CA, 0xEE6A, 0x87B4, 0xEE6B, 0x87B6, 0xEE6C, 0x87BF, + 0xEE6D, 0x87B8, 0xEE6E, 0x87BD, 0xEE6F, 0x87DE, 0xEE70, 0x87B2, 0xEE71, 0x8935, 0xEE72, 0x8933, 0xEE73, 0x893C, 0xEE74, 0x893E, + 0xEE75, 0x8941, 0xEE76, 0x8952, 0xEE77, 0x8937, 0xEE78, 0x8942, 0xEE79, 0x89AD, 0xEE7A, 0x89AF, 0xEE7B, 0x89AE, 0xEE7C, 0x89F2, + 0xEE7D, 0x89F3, 0xEE7E, 0x8B1E, 0xEEA1, 0x8B18, 0xEEA2, 0x8B16, 0xEEA3, 0x8B11, 0xEEA4, 0x8B05, 0xEEA5, 0x8B0B, 0xEEA6, 0x8B22, + 0xEEA7, 0x8B0F, 0xEEA8, 0x8B12, 0xEEA9, 0x8B15, 0xEEAA, 0x8B07, 0xEEAB, 0x8B0D, 0xEEAC, 0x8B08, 0xEEAD, 0x8B06, 0xEEAE, 0x8B1C, + 0xEEAF, 0x8B13, 0xEEB0, 0x8B1A, 0xEEB1, 0x8C4F, 0xEEB2, 0x8C70, 0xEEB3, 0x8C72, 0xEEB4, 0x8C71, 0xEEB5, 0x8C6F, 0xEEB6, 0x8C95, + 0xEEB7, 0x8C94, 0xEEB8, 0x8CF9, 0xEEB9, 0x8D6F, 0xEEBA, 0x8E4E, 0xEEBB, 0x8E4D, 0xEEBC, 0x8E53, 0xEEBD, 0x8E50, 0xEEBE, 0x8E4C, + 0xEEBF, 0x8E47, 0xEEC0, 0x8F43, 0xEEC1, 0x8F40, 0xEEC2, 0x9085, 0xEEC3, 0x907E, 0xEEC4, 0x9138, 0xEEC5, 0x919A, 0xEEC6, 0x91A2, + 0xEEC7, 0x919B, 0xEEC8, 0x9199, 0xEEC9, 0x919F, 0xEECA, 0x91A1, 0xEECB, 0x919D, 0xEECC, 0x91A0, 0xEECD, 0x93A1, 0xEECE, 0x9383, + 0xEECF, 0x93AF, 0xEED0, 0x9364, 0xEED1, 0x9356, 0xEED2, 0x9347, 0xEED3, 0x937C, 0xEED4, 0x9358, 0xEED5, 0x935C, 0xEED6, 0x9376, + 0xEED7, 0x9349, 0xEED8, 0x9350, 0xEED9, 0x9351, 0xEEDA, 0x9360, 0xEEDB, 0x936D, 0xEEDC, 0x938F, 0xEEDD, 0x934C, 0xEEDE, 0x936A, + 0xEEDF, 0x9379, 0xEEE0, 0x9357, 0xEEE1, 0x9355, 0xEEE2, 0x9352, 0xEEE3, 0x934F, 0xEEE4, 0x9371, 0xEEE5, 0x9377, 0xEEE6, 0x937B, + 0xEEE7, 0x9361, 0xEEE8, 0x935E, 0xEEE9, 0x9363, 0xEEEA, 0x9367, 0xEEEB, 0x9380, 0xEEEC, 0x934E, 0xEEED, 0x9359, 0xEEEE, 0x95C7, + 0xEEEF, 0x95C0, 0xEEF0, 0x95C9, 0xEEF1, 0x95C3, 0xEEF2, 0x95C5, 0xEEF3, 0x95B7, 0xEEF4, 0x96AE, 0xEEF5, 0x96B0, 0xEEF6, 0x96AC, + 0xEEF7, 0x9720, 0xEEF8, 0x971F, 0xEEF9, 0x9718, 0xEEFA, 0x971D, 0xEEFB, 0x9719, 0xEEFC, 0x979A, 0xEEFD, 0x97A1, 0xEEFE, 0x979C, + 0xEF40, 0x979E, 0xEF41, 0x979D, 0xEF42, 0x97D5, 0xEF43, 0x97D4, 0xEF44, 0x97F1, 0xEF45, 0x9841, 0xEF46, 0x9844, 0xEF47, 0x984A, + 0xEF48, 0x9849, 0xEF49, 0x9845, 0xEF4A, 0x9843, 0xEF4B, 0x9925, 0xEF4C, 0x992B, 0xEF4D, 0x992C, 0xEF4E, 0x992A, 0xEF4F, 0x9933, + 0xEF50, 0x9932, 0xEF51, 0x992F, 0xEF52, 0x992D, 0xEF53, 0x9931, 0xEF54, 0x9930, 0xEF55, 0x9998, 0xEF56, 0x99A3, 0xEF57, 0x99A1, + 0xEF58, 0x9A02, 0xEF59, 0x99FA, 0xEF5A, 0x99F4, 0xEF5B, 0x99F7, 0xEF5C, 0x99F9, 0xEF5D, 0x99F8, 0xEF5E, 0x99F6, 0xEF5F, 0x99FB, + 0xEF60, 0x99FD, 0xEF61, 0x99FE, 0xEF62, 0x99FC, 0xEF63, 0x9A03, 0xEF64, 0x9ABE, 0xEF65, 0x9AFE, 0xEF66, 0x9AFD, 0xEF67, 0x9B01, + 0xEF68, 0x9AFC, 0xEF69, 0x9B48, 0xEF6A, 0x9B9A, 0xEF6B, 0x9BA8, 0xEF6C, 0x9B9E, 0xEF6D, 0x9B9B, 0xEF6E, 0x9BA6, 0xEF6F, 0x9BA1, + 0xEF70, 0x9BA5, 0xEF71, 0x9BA4, 0xEF72, 0x9B86, 0xEF73, 0x9BA2, 0xEF74, 0x9BA0, 0xEF75, 0x9BAF, 0xEF76, 0x9D33, 0xEF77, 0x9D41, + 0xEF78, 0x9D67, 0xEF79, 0x9D36, 0xEF7A, 0x9D2E, 0xEF7B, 0x9D2F, 0xEF7C, 0x9D31, 0xEF7D, 0x9D38, 0xEF7E, 0x9D30, 0xEFA1, 0x9D45, + 0xEFA2, 0x9D42, 0xEFA3, 0x9D43, 0xEFA4, 0x9D3E, 0xEFA5, 0x9D37, 0xEFA6, 0x9D40, 0xEFA7, 0x9D3D, 0xEFA8, 0x7FF5, 0xEFA9, 0x9D2D, + 0xEFAA, 0x9E8A, 0xEFAB, 0x9E89, 0xEFAC, 0x9E8D, 0xEFAD, 0x9EB0, 0xEFAE, 0x9EC8, 0xEFAF, 0x9EDA, 0xEFB0, 0x9EFB, 0xEFB1, 0x9EFF, + 0xEFB2, 0x9F24, 0xEFB3, 0x9F23, 0xEFB4, 0x9F22, 0xEFB5, 0x9F54, 0xEFB6, 0x9FA0, 0xEFB7, 0x5131, 0xEFB8, 0x512D, 0xEFB9, 0x512E, + 0xEFBA, 0x5698, 0xEFBB, 0x569C, 0xEFBC, 0x5697, 0xEFBD, 0x569A, 0xEFBE, 0x569D, 0xEFBF, 0x5699, 0xEFC0, 0x5970, 0xEFC1, 0x5B3C, + 0xEFC2, 0x5C69, 0xEFC3, 0x5C6A, 0xEFC4, 0x5DC0, 0xEFC5, 0x5E6D, 0xEFC6, 0x5E6E, 0xEFC7, 0x61D8, 0xEFC8, 0x61DF, 0xEFC9, 0x61ED, + 0xEFCA, 0x61EE, 0xEFCB, 0x61F1, 0xEFCC, 0x61EA, 0xEFCD, 0x61F0, 0xEFCE, 0x61EB, 0xEFCF, 0x61D6, 0xEFD0, 0x61E9, 0xEFD1, 0x64FF, + 0xEFD2, 0x6504, 0xEFD3, 0x64FD, 0xEFD4, 0x64F8, 0xEFD5, 0x6501, 0xEFD6, 0x6503, 0xEFD7, 0x64FC, 0xEFD8, 0x6594, 0xEFD9, 0x65DB, + 0xEFDA, 0x66DA, 0xEFDB, 0x66DB, 0xEFDC, 0x66D8, 0xEFDD, 0x6AC5, 0xEFDE, 0x6AB9, 0xEFDF, 0x6ABD, 0xEFE0, 0x6AE1, 0xEFE1, 0x6AC6, + 0xEFE2, 0x6ABA, 0xEFE3, 0x6AB6, 0xEFE4, 0x6AB7, 0xEFE5, 0x6AC7, 0xEFE6, 0x6AB4, 0xEFE7, 0x6AAD, 0xEFE8, 0x6B5E, 0xEFE9, 0x6BC9, + 0xEFEA, 0x6C0B, 0xEFEB, 0x7007, 0xEFEC, 0x700C, 0xEFED, 0x700D, 0xEFEE, 0x7001, 0xEFEF, 0x7005, 0xEFF0, 0x7014, 0xEFF1, 0x700E, + 0xEFF2, 0x6FFF, 0xEFF3, 0x7000, 0xEFF4, 0x6FFB, 0xEFF5, 0x7026, 0xEFF6, 0x6FFC, 0xEFF7, 0x6FF7, 0xEFF8, 0x700A, 0xEFF9, 0x7201, + 0xEFFA, 0x71FF, 0xEFFB, 0x71F9, 0xEFFC, 0x7203, 0xEFFD, 0x71FD, 0xEFFE, 0x7376, 0xF040, 0x74B8, 0xF041, 0x74C0, 0xF042, 0x74B5, + 0xF043, 0x74C1, 0xF044, 0x74BE, 0xF045, 0x74B6, 0xF046, 0x74BB, 0xF047, 0x74C2, 0xF048, 0x7514, 0xF049, 0x7513, 0xF04A, 0x765C, + 0xF04B, 0x7664, 0xF04C, 0x7659, 0xF04D, 0x7650, 0xF04E, 0x7653, 0xF04F, 0x7657, 0xF050, 0x765A, 0xF051, 0x76A6, 0xF052, 0x76BD, + 0xF053, 0x76EC, 0xF054, 0x77C2, 0xF055, 0x77BA, 0xF056, 0x78FF, 0xF057, 0x790C, 0xF058, 0x7913, 0xF059, 0x7914, 0xF05A, 0x7909, + 0xF05B, 0x7910, 0xF05C, 0x7912, 0xF05D, 0x7911, 0xF05E, 0x79AD, 0xF05F, 0x79AC, 0xF060, 0x7A5F, 0xF061, 0x7C1C, 0xF062, 0x7C29, + 0xF063, 0x7C19, 0xF064, 0x7C20, 0xF065, 0x7C1F, 0xF066, 0x7C2D, 0xF067, 0x7C1D, 0xF068, 0x7C26, 0xF069, 0x7C28, 0xF06A, 0x7C22, + 0xF06B, 0x7C25, 0xF06C, 0x7C30, 0xF06D, 0x7E5C, 0xF06E, 0x7E50, 0xF06F, 0x7E56, 0xF070, 0x7E63, 0xF071, 0x7E58, 0xF072, 0x7E62, + 0xF073, 0x7E5F, 0xF074, 0x7E51, 0xF075, 0x7E60, 0xF076, 0x7E57, 0xF077, 0x7E53, 0xF078, 0x7FB5, 0xF079, 0x7FB3, 0xF07A, 0x7FF7, + 0xF07B, 0x7FF8, 0xF07C, 0x8075, 0xF07D, 0x81D1, 0xF07E, 0x81D2, 0xF0A1, 0x81D0, 0xF0A2, 0x825F, 0xF0A3, 0x825E, 0xF0A4, 0x85B4, + 0xF0A5, 0x85C6, 0xF0A6, 0x85C0, 0xF0A7, 0x85C3, 0xF0A8, 0x85C2, 0xF0A9, 0x85B3, 0xF0AA, 0x85B5, 0xF0AB, 0x85BD, 0xF0AC, 0x85C7, + 0xF0AD, 0x85C4, 0xF0AE, 0x85BF, 0xF0AF, 0x85CB, 0xF0B0, 0x85CE, 0xF0B1, 0x85C8, 0xF0B2, 0x85C5, 0xF0B3, 0x85B1, 0xF0B4, 0x85B6, + 0xF0B5, 0x85D2, 0xF0B6, 0x8624, 0xF0B7, 0x85B8, 0xF0B8, 0x85B7, 0xF0B9, 0x85BE, 0xF0BA, 0x8669, 0xF0BB, 0x87E7, 0xF0BC, 0x87E6, + 0xF0BD, 0x87E2, 0xF0BE, 0x87DB, 0xF0BF, 0x87EB, 0xF0C0, 0x87EA, 0xF0C1, 0x87E5, 0xF0C2, 0x87DF, 0xF0C3, 0x87F3, 0xF0C4, 0x87E4, + 0xF0C5, 0x87D4, 0xF0C6, 0x87DC, 0xF0C7, 0x87D3, 0xF0C8, 0x87ED, 0xF0C9, 0x87D8, 0xF0CA, 0x87E3, 0xF0CB, 0x87A4, 0xF0CC, 0x87D7, + 0xF0CD, 0x87D9, 0xF0CE, 0x8801, 0xF0CF, 0x87F4, 0xF0D0, 0x87E8, 0xF0D1, 0x87DD, 0xF0D2, 0x8953, 0xF0D3, 0x894B, 0xF0D4, 0x894F, + 0xF0D5, 0x894C, 0xF0D6, 0x8946, 0xF0D7, 0x8950, 0xF0D8, 0x8951, 0xF0D9, 0x8949, 0xF0DA, 0x8B2A, 0xF0DB, 0x8B27, 0xF0DC, 0x8B23, + 0xF0DD, 0x8B33, 0xF0DE, 0x8B30, 0xF0DF, 0x8B35, 0xF0E0, 0x8B47, 0xF0E1, 0x8B2F, 0xF0E2, 0x8B3C, 0xF0E3, 0x8B3E, 0xF0E4, 0x8B31, + 0xF0E5, 0x8B25, 0xF0E6, 0x8B37, 0xF0E7, 0x8B26, 0xF0E8, 0x8B36, 0xF0E9, 0x8B2E, 0xF0EA, 0x8B24, 0xF0EB, 0x8B3B, 0xF0EC, 0x8B3D, + 0xF0ED, 0x8B3A, 0xF0EE, 0x8C42, 0xF0EF, 0x8C75, 0xF0F0, 0x8C99, 0xF0F1, 0x8C98, 0xF0F2, 0x8C97, 0xF0F3, 0x8CFE, 0xF0F4, 0x8D04, + 0xF0F5, 0x8D02, 0xF0F6, 0x8D00, 0xF0F7, 0x8E5C, 0xF0F8, 0x8E62, 0xF0F9, 0x8E60, 0xF0FA, 0x8E57, 0xF0FB, 0x8E56, 0xF0FC, 0x8E5E, + 0xF0FD, 0x8E65, 0xF0FE, 0x8E67, 0xF140, 0x8E5B, 0xF141, 0x8E5A, 0xF142, 0x8E61, 0xF143, 0x8E5D, 0xF144, 0x8E69, 0xF145, 0x8E54, + 0xF146, 0x8F46, 0xF147, 0x8F47, 0xF148, 0x8F48, 0xF149, 0x8F4B, 0xF14A, 0x9128, 0xF14B, 0x913A, 0xF14C, 0x913B, 0xF14D, 0x913E, + 0xF14E, 0x91A8, 0xF14F, 0x91A5, 0xF150, 0x91A7, 0xF151, 0x91AF, 0xF152, 0x91AA, 0xF153, 0x93B5, 0xF154, 0x938C, 0xF155, 0x9392, + 0xF156, 0x93B7, 0xF157, 0x939B, 0xF158, 0x939D, 0xF159, 0x9389, 0xF15A, 0x93A7, 0xF15B, 0x938E, 0xF15C, 0x93AA, 0xF15D, 0x939E, + 0xF15E, 0x93A6, 0xF15F, 0x9395, 0xF160, 0x9388, 0xF161, 0x9399, 0xF162, 0x939F, 0xF163, 0x938D, 0xF164, 0x93B1, 0xF165, 0x9391, + 0xF166, 0x93B2, 0xF167, 0x93A4, 0xF168, 0x93A8, 0xF169, 0x93B4, 0xF16A, 0x93A3, 0xF16B, 0x93A5, 0xF16C, 0x95D2, 0xF16D, 0x95D3, + 0xF16E, 0x95D1, 0xF16F, 0x96B3, 0xF170, 0x96D7, 0xF171, 0x96DA, 0xF172, 0x5DC2, 0xF173, 0x96DF, 0xF174, 0x96D8, 0xF175, 0x96DD, + 0xF176, 0x9723, 0xF177, 0x9722, 0xF178, 0x9725, 0xF179, 0x97AC, 0xF17A, 0x97AE, 0xF17B, 0x97A8, 0xF17C, 0x97AB, 0xF17D, 0x97A4, + 0xF17E, 0x97AA, 0xF1A1, 0x97A2, 0xF1A2, 0x97A5, 0xF1A3, 0x97D7, 0xF1A4, 0x97D9, 0xF1A5, 0x97D6, 0xF1A6, 0x97D8, 0xF1A7, 0x97FA, + 0xF1A8, 0x9850, 0xF1A9, 0x9851, 0xF1AA, 0x9852, 0xF1AB, 0x98B8, 0xF1AC, 0x9941, 0xF1AD, 0x993C, 0xF1AE, 0x993A, 0xF1AF, 0x9A0F, + 0xF1B0, 0x9A0B, 0xF1B1, 0x9A09, 0xF1B2, 0x9A0D, 0xF1B3, 0x9A04, 0xF1B4, 0x9A11, 0xF1B5, 0x9A0A, 0xF1B6, 0x9A05, 0xF1B7, 0x9A07, + 0xF1B8, 0x9A06, 0xF1B9, 0x9AC0, 0xF1BA, 0x9ADC, 0xF1BB, 0x9B08, 0xF1BC, 0x9B04, 0xF1BD, 0x9B05, 0xF1BE, 0x9B29, 0xF1BF, 0x9B35, + 0xF1C0, 0x9B4A, 0xF1C1, 0x9B4C, 0xF1C2, 0x9B4B, 0xF1C3, 0x9BC7, 0xF1C4, 0x9BC6, 0xF1C5, 0x9BC3, 0xF1C6, 0x9BBF, 0xF1C7, 0x9BC1, + 0xF1C8, 0x9BB5, 0xF1C9, 0x9BB8, 0xF1CA, 0x9BD3, 0xF1CB, 0x9BB6, 0xF1CC, 0x9BC4, 0xF1CD, 0x9BB9, 0xF1CE, 0x9BBD, 0xF1CF, 0x9D5C, + 0xF1D0, 0x9D53, 0xF1D1, 0x9D4F, 0xF1D2, 0x9D4A, 0xF1D3, 0x9D5B, 0xF1D4, 0x9D4B, 0xF1D5, 0x9D59, 0xF1D6, 0x9D56, 0xF1D7, 0x9D4C, + 0xF1D8, 0x9D57, 0xF1D9, 0x9D52, 0xF1DA, 0x9D54, 0xF1DB, 0x9D5F, 0xF1DC, 0x9D58, 0xF1DD, 0x9D5A, 0xF1DE, 0x9E8E, 0xF1DF, 0x9E8C, + 0xF1E0, 0x9EDF, 0xF1E1, 0x9F01, 0xF1E2, 0x9F00, 0xF1E3, 0x9F16, 0xF1E4, 0x9F25, 0xF1E5, 0x9F2B, 0xF1E6, 0x9F2A, 0xF1E7, 0x9F29, + 0xF1E8, 0x9F28, 0xF1E9, 0x9F4C, 0xF1EA, 0x9F55, 0xF1EB, 0x5134, 0xF1EC, 0x5135, 0xF1ED, 0x5296, 0xF1EE, 0x52F7, 0xF1EF, 0x53B4, + 0xF1F0, 0x56AB, 0xF1F1, 0x56AD, 0xF1F2, 0x56A6, 0xF1F3, 0x56A7, 0xF1F4, 0x56AA, 0xF1F5, 0x56AC, 0xF1F6, 0x58DA, 0xF1F7, 0x58DD, + 0xF1F8, 0x58DB, 0xF1F9, 0x5912, 0xF1FA, 0x5B3D, 0xF1FB, 0x5B3E, 0xF1FC, 0x5B3F, 0xF1FD, 0x5DC3, 0xF1FE, 0x5E70, 0xF240, 0x5FBF, + 0xF241, 0x61FB, 0xF242, 0x6507, 0xF243, 0x6510, 0xF244, 0x650D, 0xF245, 0x6509, 0xF246, 0x650C, 0xF247, 0x650E, 0xF248, 0x6584, + 0xF249, 0x65DE, 0xF24A, 0x65DD, 0xF24B, 0x66DE, 0xF24C, 0x6AE7, 0xF24D, 0x6AE0, 0xF24E, 0x6ACC, 0xF24F, 0x6AD1, 0xF250, 0x6AD9, + 0xF251, 0x6ACB, 0xF252, 0x6ADF, 0xF253, 0x6ADC, 0xF254, 0x6AD0, 0xF255, 0x6AEB, 0xF256, 0x6ACF, 0xF257, 0x6ACD, 0xF258, 0x6ADE, + 0xF259, 0x6B60, 0xF25A, 0x6BB0, 0xF25B, 0x6C0C, 0xF25C, 0x7019, 0xF25D, 0x7027, 0xF25E, 0x7020, 0xF25F, 0x7016, 0xF260, 0x702B, + 0xF261, 0x7021, 0xF262, 0x7022, 0xF263, 0x7023, 0xF264, 0x7029, 0xF265, 0x7017, 0xF266, 0x7024, 0xF267, 0x701C, 0xF268, 0x702A, + 0xF269, 0x720C, 0xF26A, 0x720A, 0xF26B, 0x7207, 0xF26C, 0x7202, 0xF26D, 0x7205, 0xF26E, 0x72A5, 0xF26F, 0x72A6, 0xF270, 0x72A4, + 0xF271, 0x72A3, 0xF272, 0x72A1, 0xF273, 0x74CB, 0xF274, 0x74C5, 0xF275, 0x74B7, 0xF276, 0x74C3, 0xF277, 0x7516, 0xF278, 0x7660, + 0xF279, 0x77C9, 0xF27A, 0x77CA, 0xF27B, 0x77C4, 0xF27C, 0x77F1, 0xF27D, 0x791D, 0xF27E, 0x791B, 0xF2A1, 0x7921, 0xF2A2, 0x791C, + 0xF2A3, 0x7917, 0xF2A4, 0x791E, 0xF2A5, 0x79B0, 0xF2A6, 0x7A67, 0xF2A7, 0x7A68, 0xF2A8, 0x7C33, 0xF2A9, 0x7C3C, 0xF2AA, 0x7C39, + 0xF2AB, 0x7C2C, 0xF2AC, 0x7C3B, 0xF2AD, 0x7CEC, 0xF2AE, 0x7CEA, 0xF2AF, 0x7E76, 0xF2B0, 0x7E75, 0xF2B1, 0x7E78, 0xF2B2, 0x7E70, + 0xF2B3, 0x7E77, 0xF2B4, 0x7E6F, 0xF2B5, 0x7E7A, 0xF2B6, 0x7E72, 0xF2B7, 0x7E74, 0xF2B8, 0x7E68, 0xF2B9, 0x7F4B, 0xF2BA, 0x7F4A, + 0xF2BB, 0x7F83, 0xF2BC, 0x7F86, 0xF2BD, 0x7FB7, 0xF2BE, 0x7FFD, 0xF2BF, 0x7FFE, 0xF2C0, 0x8078, 0xF2C1, 0x81D7, 0xF2C2, 0x81D5, + 0xF2C3, 0x8264, 0xF2C4, 0x8261, 0xF2C5, 0x8263, 0xF2C6, 0x85EB, 0xF2C7, 0x85F1, 0xF2C8, 0x85ED, 0xF2C9, 0x85D9, 0xF2CA, 0x85E1, + 0xF2CB, 0x85E8, 0xF2CC, 0x85DA, 0xF2CD, 0x85D7, 0xF2CE, 0x85EC, 0xF2CF, 0x85F2, 0xF2D0, 0x85F8, 0xF2D1, 0x85D8, 0xF2D2, 0x85DF, + 0xF2D3, 0x85E3, 0xF2D4, 0x85DC, 0xF2D5, 0x85D1, 0xF2D6, 0x85F0, 0xF2D7, 0x85E6, 0xF2D8, 0x85EF, 0xF2D9, 0x85DE, 0xF2DA, 0x85E2, + 0xF2DB, 0x8800, 0xF2DC, 0x87FA, 0xF2DD, 0x8803, 0xF2DE, 0x87F6, 0xF2DF, 0x87F7, 0xF2E0, 0x8809, 0xF2E1, 0x880C, 0xF2E2, 0x880B, + 0xF2E3, 0x8806, 0xF2E4, 0x87FC, 0xF2E5, 0x8808, 0xF2E6, 0x87FF, 0xF2E7, 0x880A, 0xF2E8, 0x8802, 0xF2E9, 0x8962, 0xF2EA, 0x895A, + 0xF2EB, 0x895B, 0xF2EC, 0x8957, 0xF2ED, 0x8961, 0xF2EE, 0x895C, 0xF2EF, 0x8958, 0xF2F0, 0x895D, 0xF2F1, 0x8959, 0xF2F2, 0x8988, + 0xF2F3, 0x89B7, 0xF2F4, 0x89B6, 0xF2F5, 0x89F6, 0xF2F6, 0x8B50, 0xF2F7, 0x8B48, 0xF2F8, 0x8B4A, 0xF2F9, 0x8B40, 0xF2FA, 0x8B53, + 0xF2FB, 0x8B56, 0xF2FC, 0x8B54, 0xF2FD, 0x8B4B, 0xF2FE, 0x8B55, 0xF340, 0x8B51, 0xF341, 0x8B42, 0xF342, 0x8B52, 0xF343, 0x8B57, + 0xF344, 0x8C43, 0xF345, 0x8C77, 0xF346, 0x8C76, 0xF347, 0x8C9A, 0xF348, 0x8D06, 0xF349, 0x8D07, 0xF34A, 0x8D09, 0xF34B, 0x8DAC, + 0xF34C, 0x8DAA, 0xF34D, 0x8DAD, 0xF34E, 0x8DAB, 0xF34F, 0x8E6D, 0xF350, 0x8E78, 0xF351, 0x8E73, 0xF352, 0x8E6A, 0xF353, 0x8E6F, + 0xF354, 0x8E7B, 0xF355, 0x8EC2, 0xF356, 0x8F52, 0xF357, 0x8F51, 0xF358, 0x8F4F, 0xF359, 0x8F50, 0xF35A, 0x8F53, 0xF35B, 0x8FB4, + 0xF35C, 0x9140, 0xF35D, 0x913F, 0xF35E, 0x91B0, 0xF35F, 0x91AD, 0xF360, 0x93DE, 0xF361, 0x93C7, 0xF362, 0x93CF, 0xF363, 0x93C2, + 0xF364, 0x93DA, 0xF365, 0x93D0, 0xF366, 0x93F9, 0xF367, 0x93EC, 0xF368, 0x93CC, 0xF369, 0x93D9, 0xF36A, 0x93A9, 0xF36B, 0x93E6, + 0xF36C, 0x93CA, 0xF36D, 0x93D4, 0xF36E, 0x93EE, 0xF36F, 0x93E3, 0xF370, 0x93D5, 0xF371, 0x93C4, 0xF372, 0x93CE, 0xF373, 0x93C0, + 0xF374, 0x93D2, 0xF375, 0x93E7, 0xF376, 0x957D, 0xF377, 0x95DA, 0xF378, 0x95DB, 0xF379, 0x96E1, 0xF37A, 0x9729, 0xF37B, 0x972B, + 0xF37C, 0x972C, 0xF37D, 0x9728, 0xF37E, 0x9726, 0xF3A1, 0x97B3, 0xF3A2, 0x97B7, 0xF3A3, 0x97B6, 0xF3A4, 0x97DD, 0xF3A5, 0x97DE, + 0xF3A6, 0x97DF, 0xF3A7, 0x985C, 0xF3A8, 0x9859, 0xF3A9, 0x985D, 0xF3AA, 0x9857, 0xF3AB, 0x98BF, 0xF3AC, 0x98BD, 0xF3AD, 0x98BB, + 0xF3AE, 0x98BE, 0xF3AF, 0x9948, 0xF3B0, 0x9947, 0xF3B1, 0x9943, 0xF3B2, 0x99A6, 0xF3B3, 0x99A7, 0xF3B4, 0x9A1A, 0xF3B5, 0x9A15, + 0xF3B6, 0x9A25, 0xF3B7, 0x9A1D, 0xF3B8, 0x9A24, 0xF3B9, 0x9A1B, 0xF3BA, 0x9A22, 0xF3BB, 0x9A20, 0xF3BC, 0x9A27, 0xF3BD, 0x9A23, + 0xF3BE, 0x9A1E, 0xF3BF, 0x9A1C, 0xF3C0, 0x9A14, 0xF3C1, 0x9AC2, 0xF3C2, 0x9B0B, 0xF3C3, 0x9B0A, 0xF3C4, 0x9B0E, 0xF3C5, 0x9B0C, + 0xF3C6, 0x9B37, 0xF3C7, 0x9BEA, 0xF3C8, 0x9BEB, 0xF3C9, 0x9BE0, 0xF3CA, 0x9BDE, 0xF3CB, 0x9BE4, 0xF3CC, 0x9BE6, 0xF3CD, 0x9BE2, + 0xF3CE, 0x9BF0, 0xF3CF, 0x9BD4, 0xF3D0, 0x9BD7, 0xF3D1, 0x9BEC, 0xF3D2, 0x9BDC, 0xF3D3, 0x9BD9, 0xF3D4, 0x9BE5, 0xF3D5, 0x9BD5, + 0xF3D6, 0x9BE1, 0xF3D7, 0x9BDA, 0xF3D8, 0x9D77, 0xF3D9, 0x9D81, 0xF3DA, 0x9D8A, 0xF3DB, 0x9D84, 0xF3DC, 0x9D88, 0xF3DD, 0x9D71, + 0xF3DE, 0x9D80, 0xF3DF, 0x9D78, 0xF3E0, 0x9D86, 0xF3E1, 0x9D8B, 0xF3E2, 0x9D8C, 0xF3E3, 0x9D7D, 0xF3E4, 0x9D6B, 0xF3E5, 0x9D74, + 0xF3E6, 0x9D75, 0xF3E7, 0x9D70, 0xF3E8, 0x9D69, 0xF3E9, 0x9D85, 0xF3EA, 0x9D73, 0xF3EB, 0x9D7B, 0xF3EC, 0x9D82, 0xF3ED, 0x9D6F, + 0xF3EE, 0x9D79, 0xF3EF, 0x9D7F, 0xF3F0, 0x9D87, 0xF3F1, 0x9D68, 0xF3F2, 0x9E94, 0xF3F3, 0x9E91, 0xF3F4, 0x9EC0, 0xF3F5, 0x9EFC, + 0xF3F6, 0x9F2D, 0xF3F7, 0x9F40, 0xF3F8, 0x9F41, 0xF3F9, 0x9F4D, 0xF3FA, 0x9F56, 0xF3FB, 0x9F57, 0xF3FC, 0x9F58, 0xF3FD, 0x5337, + 0xF3FE, 0x56B2, 0xF440, 0x56B5, 0xF441, 0x56B3, 0xF442, 0x58E3, 0xF443, 0x5B45, 0xF444, 0x5DC6, 0xF445, 0x5DC7, 0xF446, 0x5EEE, + 0xF447, 0x5EEF, 0xF448, 0x5FC0, 0xF449, 0x5FC1, 0xF44A, 0x61F9, 0xF44B, 0x6517, 0xF44C, 0x6516, 0xF44D, 0x6515, 0xF44E, 0x6513, + 0xF44F, 0x65DF, 0xF450, 0x66E8, 0xF451, 0x66E3, 0xF452, 0x66E4, 0xF453, 0x6AF3, 0xF454, 0x6AF0, 0xF455, 0x6AEA, 0xF456, 0x6AE8, + 0xF457, 0x6AF9, 0xF458, 0x6AF1, 0xF459, 0x6AEE, 0xF45A, 0x6AEF, 0xF45B, 0x703C, 0xF45C, 0x7035, 0xF45D, 0x702F, 0xF45E, 0x7037, + 0xF45F, 0x7034, 0xF460, 0x7031, 0xF461, 0x7042, 0xF462, 0x7038, 0xF463, 0x703F, 0xF464, 0x703A, 0xF465, 0x7039, 0xF466, 0x7040, + 0xF467, 0x703B, 0xF468, 0x7033, 0xF469, 0x7041, 0xF46A, 0x7213, 0xF46B, 0x7214, 0xF46C, 0x72A8, 0xF46D, 0x737D, 0xF46E, 0x737C, + 0xF46F, 0x74BA, 0xF470, 0x76AB, 0xF471, 0x76AA, 0xF472, 0x76BE, 0xF473, 0x76ED, 0xF474, 0x77CC, 0xF475, 0x77CE, 0xF476, 0x77CF, + 0xF477, 0x77CD, 0xF478, 0x77F2, 0xF479, 0x7925, 0xF47A, 0x7923, 0xF47B, 0x7927, 0xF47C, 0x7928, 0xF47D, 0x7924, 0xF47E, 0x7929, + 0xF4A1, 0x79B2, 0xF4A2, 0x7A6E, 0xF4A3, 0x7A6C, 0xF4A4, 0x7A6D, 0xF4A5, 0x7AF7, 0xF4A6, 0x7C49, 0xF4A7, 0x7C48, 0xF4A8, 0x7C4A, + 0xF4A9, 0x7C47, 0xF4AA, 0x7C45, 0xF4AB, 0x7CEE, 0xF4AC, 0x7E7B, 0xF4AD, 0x7E7E, 0xF4AE, 0x7E81, 0xF4AF, 0x7E80, 0xF4B0, 0x7FBA, + 0xF4B1, 0x7FFF, 0xF4B2, 0x8079, 0xF4B3, 0x81DB, 0xF4B4, 0x81D9, 0xF4B5, 0x820B, 0xF4B6, 0x8268, 0xF4B7, 0x8269, 0xF4B8, 0x8622, + 0xF4B9, 0x85FF, 0xF4BA, 0x8601, 0xF4BB, 0x85FE, 0xF4BC, 0x861B, 0xF4BD, 0x8600, 0xF4BE, 0x85F6, 0xF4BF, 0x8604, 0xF4C0, 0x8609, + 0xF4C1, 0x8605, 0xF4C2, 0x860C, 0xF4C3, 0x85FD, 0xF4C4, 0x8819, 0xF4C5, 0x8810, 0xF4C6, 0x8811, 0xF4C7, 0x8817, 0xF4C8, 0x8813, + 0xF4C9, 0x8816, 0xF4CA, 0x8963, 0xF4CB, 0x8966, 0xF4CC, 0x89B9, 0xF4CD, 0x89F7, 0xF4CE, 0x8B60, 0xF4CF, 0x8B6A, 0xF4D0, 0x8B5D, + 0xF4D1, 0x8B68, 0xF4D2, 0x8B63, 0xF4D3, 0x8B65, 0xF4D4, 0x8B67, 0xF4D5, 0x8B6D, 0xF4D6, 0x8DAE, 0xF4D7, 0x8E86, 0xF4D8, 0x8E88, + 0xF4D9, 0x8E84, 0xF4DA, 0x8F59, 0xF4DB, 0x8F56, 0xF4DC, 0x8F57, 0xF4DD, 0x8F55, 0xF4DE, 0x8F58, 0xF4DF, 0x8F5A, 0xF4E0, 0x908D, + 0xF4E1, 0x9143, 0xF4E2, 0x9141, 0xF4E3, 0x91B7, 0xF4E4, 0x91B5, 0xF4E5, 0x91B2, 0xF4E6, 0x91B3, 0xF4E7, 0x940B, 0xF4E8, 0x9413, + 0xF4E9, 0x93FB, 0xF4EA, 0x9420, 0xF4EB, 0x940F, 0xF4EC, 0x9414, 0xF4ED, 0x93FE, 0xF4EE, 0x9415, 0xF4EF, 0x9410, 0xF4F0, 0x9428, + 0xF4F1, 0x9419, 0xF4F2, 0x940D, 0xF4F3, 0x93F5, 0xF4F4, 0x9400, 0xF4F5, 0x93F7, 0xF4F6, 0x9407, 0xF4F7, 0x940E, 0xF4F8, 0x9416, + 0xF4F9, 0x9412, 0xF4FA, 0x93FA, 0xF4FB, 0x9409, 0xF4FC, 0x93F8, 0xF4FD, 0x940A, 0xF4FE, 0x93FF, 0xF540, 0x93FC, 0xF541, 0x940C, + 0xF542, 0x93F6, 0xF543, 0x9411, 0xF544, 0x9406, 0xF545, 0x95DE, 0xF546, 0x95E0, 0xF547, 0x95DF, 0xF548, 0x972E, 0xF549, 0x972F, + 0xF54A, 0x97B9, 0xF54B, 0x97BB, 0xF54C, 0x97FD, 0xF54D, 0x97FE, 0xF54E, 0x9860, 0xF54F, 0x9862, 0xF550, 0x9863, 0xF551, 0x985F, + 0xF552, 0x98C1, 0xF553, 0x98C2, 0xF554, 0x9950, 0xF555, 0x994E, 0xF556, 0x9959, 0xF557, 0x994C, 0xF558, 0x994B, 0xF559, 0x9953, + 0xF55A, 0x9A32, 0xF55B, 0x9A34, 0xF55C, 0x9A31, 0xF55D, 0x9A2C, 0xF55E, 0x9A2A, 0xF55F, 0x9A36, 0xF560, 0x9A29, 0xF561, 0x9A2E, + 0xF562, 0x9A38, 0xF563, 0x9A2D, 0xF564, 0x9AC7, 0xF565, 0x9ACA, 0xF566, 0x9AC6, 0xF567, 0x9B10, 0xF568, 0x9B12, 0xF569, 0x9B11, + 0xF56A, 0x9C0B, 0xF56B, 0x9C08, 0xF56C, 0x9BF7, 0xF56D, 0x9C05, 0xF56E, 0x9C12, 0xF56F, 0x9BF8, 0xF570, 0x9C40, 0xF571, 0x9C07, + 0xF572, 0x9C0E, 0xF573, 0x9C06, 0xF574, 0x9C17, 0xF575, 0x9C14, 0xF576, 0x9C09, 0xF577, 0x9D9F, 0xF578, 0x9D99, 0xF579, 0x9DA4, + 0xF57A, 0x9D9D, 0xF57B, 0x9D92, 0xF57C, 0x9D98, 0xF57D, 0x9D90, 0xF57E, 0x9D9B, 0xF5A1, 0x9DA0, 0xF5A2, 0x9D94, 0xF5A3, 0x9D9C, + 0xF5A4, 0x9DAA, 0xF5A5, 0x9D97, 0xF5A6, 0x9DA1, 0xF5A7, 0x9D9A, 0xF5A8, 0x9DA2, 0xF5A9, 0x9DA8, 0xF5AA, 0x9D9E, 0xF5AB, 0x9DA3, + 0xF5AC, 0x9DBF, 0xF5AD, 0x9DA9, 0xF5AE, 0x9D96, 0xF5AF, 0x9DA6, 0xF5B0, 0x9DA7, 0xF5B1, 0x9E99, 0xF5B2, 0x9E9B, 0xF5B3, 0x9E9A, + 0xF5B4, 0x9EE5, 0xF5B5, 0x9EE4, 0xF5B6, 0x9EE7, 0xF5B7, 0x9EE6, 0xF5B8, 0x9F30, 0xF5B9, 0x9F2E, 0xF5BA, 0x9F5B, 0xF5BB, 0x9F60, + 0xF5BC, 0x9F5E, 0xF5BD, 0x9F5D, 0xF5BE, 0x9F59, 0xF5BF, 0x9F91, 0xF5C0, 0x513A, 0xF5C1, 0x5139, 0xF5C2, 0x5298, 0xF5C3, 0x5297, + 0xF5C4, 0x56C3, 0xF5C5, 0x56BD, 0xF5C6, 0x56BE, 0xF5C7, 0x5B48, 0xF5C8, 0x5B47, 0xF5C9, 0x5DCB, 0xF5CA, 0x5DCF, 0xF5CB, 0x5EF1, + 0xF5CC, 0x61FD, 0xF5CD, 0x651B, 0xF5CE, 0x6B02, 0xF5CF, 0x6AFC, 0xF5D0, 0x6B03, 0xF5D1, 0x6AF8, 0xF5D2, 0x6B00, 0xF5D3, 0x7043, + 0xF5D4, 0x7044, 0xF5D5, 0x704A, 0xF5D6, 0x7048, 0xF5D7, 0x7049, 0xF5D8, 0x7045, 0xF5D9, 0x7046, 0xF5DA, 0x721D, 0xF5DB, 0x721A, + 0xF5DC, 0x7219, 0xF5DD, 0x737E, 0xF5DE, 0x7517, 0xF5DF, 0x766A, 0xF5E0, 0x77D0, 0xF5E1, 0x792D, 0xF5E2, 0x7931, 0xF5E3, 0x792F, + 0xF5E4, 0x7C54, 0xF5E5, 0x7C53, 0xF5E6, 0x7CF2, 0xF5E7, 0x7E8A, 0xF5E8, 0x7E87, 0xF5E9, 0x7E88, 0xF5EA, 0x7E8B, 0xF5EB, 0x7E86, + 0xF5EC, 0x7E8D, 0xF5ED, 0x7F4D, 0xF5EE, 0x7FBB, 0xF5EF, 0x8030, 0xF5F0, 0x81DD, 0xF5F1, 0x8618, 0xF5F2, 0x862A, 0xF5F3, 0x8626, + 0xF5F4, 0x861F, 0xF5F5, 0x8623, 0xF5F6, 0x861C, 0xF5F7, 0x8619, 0xF5F8, 0x8627, 0xF5F9, 0x862E, 0xF5FA, 0x8621, 0xF5FB, 0x8620, + 0xF5FC, 0x8629, 0xF5FD, 0x861E, 0xF5FE, 0x8625, 0xF640, 0x8829, 0xF641, 0x881D, 0xF642, 0x881B, 0xF643, 0x8820, 0xF644, 0x8824, + 0xF645, 0x881C, 0xF646, 0x882B, 0xF647, 0x884A, 0xF648, 0x896D, 0xF649, 0x8969, 0xF64A, 0x896E, 0xF64B, 0x896B, 0xF64C, 0x89FA, + 0xF64D, 0x8B79, 0xF64E, 0x8B78, 0xF64F, 0x8B45, 0xF650, 0x8B7A, 0xF651, 0x8B7B, 0xF652, 0x8D10, 0xF653, 0x8D14, 0xF654, 0x8DAF, + 0xF655, 0x8E8E, 0xF656, 0x8E8C, 0xF657, 0x8F5E, 0xF658, 0x8F5B, 0xF659, 0x8F5D, 0xF65A, 0x9146, 0xF65B, 0x9144, 0xF65C, 0x9145, + 0xF65D, 0x91B9, 0xF65E, 0x943F, 0xF65F, 0x943B, 0xF660, 0x9436, 0xF661, 0x9429, 0xF662, 0x943D, 0xF663, 0x943C, 0xF664, 0x9430, + 0xF665, 0x9439, 0xF666, 0x942A, 0xF667, 0x9437, 0xF668, 0x942C, 0xF669, 0x9440, 0xF66A, 0x9431, 0xF66B, 0x95E5, 0xF66C, 0x95E4, + 0xF66D, 0x95E3, 0xF66E, 0x9735, 0xF66F, 0x973A, 0xF670, 0x97BF, 0xF671, 0x97E1, 0xF672, 0x9864, 0xF673, 0x98C9, 0xF674, 0x98C6, + 0xF675, 0x98C0, 0xF676, 0x9958, 0xF677, 0x9956, 0xF678, 0x9A39, 0xF679, 0x9A3D, 0xF67A, 0x9A46, 0xF67B, 0x9A44, 0xF67C, 0x9A42, + 0xF67D, 0x9A41, 0xF67E, 0x9A3A, 0xF6A1, 0x9A3F, 0xF6A2, 0x9ACD, 0xF6A3, 0x9B15, 0xF6A4, 0x9B17, 0xF6A5, 0x9B18, 0xF6A6, 0x9B16, + 0xF6A7, 0x9B3A, 0xF6A8, 0x9B52, 0xF6A9, 0x9C2B, 0xF6AA, 0x9C1D, 0xF6AB, 0x9C1C, 0xF6AC, 0x9C2C, 0xF6AD, 0x9C23, 0xF6AE, 0x9C28, + 0xF6AF, 0x9C29, 0xF6B0, 0x9C24, 0xF6B1, 0x9C21, 0xF6B2, 0x9DB7, 0xF6B3, 0x9DB6, 0xF6B4, 0x9DBC, 0xF6B5, 0x9DC1, 0xF6B6, 0x9DC7, + 0xF6B7, 0x9DCA, 0xF6B8, 0x9DCF, 0xF6B9, 0x9DBE, 0xF6BA, 0x9DC5, 0xF6BB, 0x9DC3, 0xF6BC, 0x9DBB, 0xF6BD, 0x9DB5, 0xF6BE, 0x9DCE, + 0xF6BF, 0x9DB9, 0xF6C0, 0x9DBA, 0xF6C1, 0x9DAC, 0xF6C2, 0x9DC8, 0xF6C3, 0x9DB1, 0xF6C4, 0x9DAD, 0xF6C5, 0x9DCC, 0xF6C6, 0x9DB3, + 0xF6C7, 0x9DCD, 0xF6C8, 0x9DB2, 0xF6C9, 0x9E7A, 0xF6CA, 0x9E9C, 0xF6CB, 0x9EEB, 0xF6CC, 0x9EEE, 0xF6CD, 0x9EED, 0xF6CE, 0x9F1B, + 0xF6CF, 0x9F18, 0xF6D0, 0x9F1A, 0xF6D1, 0x9F31, 0xF6D2, 0x9F4E, 0xF6D3, 0x9F65, 0xF6D4, 0x9F64, 0xF6D5, 0x9F92, 0xF6D6, 0x4EB9, + 0xF6D7, 0x56C6, 0xF6D8, 0x56C5, 0xF6D9, 0x56CB, 0xF6DA, 0x5971, 0xF6DB, 0x5B4B, 0xF6DC, 0x5B4C, 0xF6DD, 0x5DD5, 0xF6DE, 0x5DD1, + 0xF6DF, 0x5EF2, 0xF6E0, 0x6521, 0xF6E1, 0x6520, 0xF6E2, 0x6526, 0xF6E3, 0x6522, 0xF6E4, 0x6B0B, 0xF6E5, 0x6B08, 0xF6E6, 0x6B09, + 0xF6E7, 0x6C0D, 0xF6E8, 0x7055, 0xF6E9, 0x7056, 0xF6EA, 0x7057, 0xF6EB, 0x7052, 0xF6EC, 0x721E, 0xF6ED, 0x721F, 0xF6EE, 0x72A9, + 0xF6EF, 0x737F, 0xF6F0, 0x74D8, 0xF6F1, 0x74D5, 0xF6F2, 0x74D9, 0xF6F3, 0x74D7, 0xF6F4, 0x766D, 0xF6F5, 0x76AD, 0xF6F6, 0x7935, + 0xF6F7, 0x79B4, 0xF6F8, 0x7A70, 0xF6F9, 0x7A71, 0xF6FA, 0x7C57, 0xF6FB, 0x7C5C, 0xF6FC, 0x7C59, 0xF6FD, 0x7C5B, 0xF6FE, 0x7C5A, + 0xF740, 0x7CF4, 0xF741, 0x7CF1, 0xF742, 0x7E91, 0xF743, 0x7F4F, 0xF744, 0x7F87, 0xF745, 0x81DE, 0xF746, 0x826B, 0xF747, 0x8634, + 0xF748, 0x8635, 0xF749, 0x8633, 0xF74A, 0x862C, 0xF74B, 0x8632, 0xF74C, 0x8636, 0xF74D, 0x882C, 0xF74E, 0x8828, 0xF74F, 0x8826, + 0xF750, 0x882A, 0xF751, 0x8825, 0xF752, 0x8971, 0xF753, 0x89BF, 0xF754, 0x89BE, 0xF755, 0x89FB, 0xF756, 0x8B7E, 0xF757, 0x8B84, + 0xF758, 0x8B82, 0xF759, 0x8B86, 0xF75A, 0x8B85, 0xF75B, 0x8B7F, 0xF75C, 0x8D15, 0xF75D, 0x8E95, 0xF75E, 0x8E94, 0xF75F, 0x8E9A, + 0xF760, 0x8E92, 0xF761, 0x8E90, 0xF762, 0x8E96, 0xF763, 0x8E97, 0xF764, 0x8F60, 0xF765, 0x8F62, 0xF766, 0x9147, 0xF767, 0x944C, + 0xF768, 0x9450, 0xF769, 0x944A, 0xF76A, 0x944B, 0xF76B, 0x944F, 0xF76C, 0x9447, 0xF76D, 0x9445, 0xF76E, 0x9448, 0xF76F, 0x9449, + 0xF770, 0x9446, 0xF771, 0x973F, 0xF772, 0x97E3, 0xF773, 0x986A, 0xF774, 0x9869, 0xF775, 0x98CB, 0xF776, 0x9954, 0xF777, 0x995B, + 0xF778, 0x9A4E, 0xF779, 0x9A53, 0xF77A, 0x9A54, 0xF77B, 0x9A4C, 0xF77C, 0x9A4F, 0xF77D, 0x9A48, 0xF77E, 0x9A4A, 0xF7A1, 0x9A49, + 0xF7A2, 0x9A52, 0xF7A3, 0x9A50, 0xF7A4, 0x9AD0, 0xF7A5, 0x9B19, 0xF7A6, 0x9B2B, 0xF7A7, 0x9B3B, 0xF7A8, 0x9B56, 0xF7A9, 0x9B55, + 0xF7AA, 0x9C46, 0xF7AB, 0x9C48, 0xF7AC, 0x9C3F, 0xF7AD, 0x9C44, 0xF7AE, 0x9C39, 0xF7AF, 0x9C33, 0xF7B0, 0x9C41, 0xF7B1, 0x9C3C, + 0xF7B2, 0x9C37, 0xF7B3, 0x9C34, 0xF7B4, 0x9C32, 0xF7B5, 0x9C3D, 0xF7B6, 0x9C36, 0xF7B7, 0x9DDB, 0xF7B8, 0x9DD2, 0xF7B9, 0x9DDE, + 0xF7BA, 0x9DDA, 0xF7BB, 0x9DCB, 0xF7BC, 0x9DD0, 0xF7BD, 0x9DDC, 0xF7BE, 0x9DD1, 0xF7BF, 0x9DDF, 0xF7C0, 0x9DE9, 0xF7C1, 0x9DD9, + 0xF7C2, 0x9DD8, 0xF7C3, 0x9DD6, 0xF7C4, 0x9DF5, 0xF7C5, 0x9DD5, 0xF7C6, 0x9DDD, 0xF7C7, 0x9EB6, 0xF7C8, 0x9EF0, 0xF7C9, 0x9F35, + 0xF7CA, 0x9F33, 0xF7CB, 0x9F32, 0xF7CC, 0x9F42, 0xF7CD, 0x9F6B, 0xF7CE, 0x9F95, 0xF7CF, 0x9FA2, 0xF7D0, 0x513D, 0xF7D1, 0x5299, + 0xF7D2, 0x58E8, 0xF7D3, 0x58E7, 0xF7D4, 0x5972, 0xF7D5, 0x5B4D, 0xF7D6, 0x5DD8, 0xF7D7, 0x882F, 0xF7D8, 0x5F4F, 0xF7D9, 0x6201, + 0xF7DA, 0x6203, 0xF7DB, 0x6204, 0xF7DC, 0x6529, 0xF7DD, 0x6525, 0xF7DE, 0x6596, 0xF7DF, 0x66EB, 0xF7E0, 0x6B11, 0xF7E1, 0x6B12, + 0xF7E2, 0x6B0F, 0xF7E3, 0x6BCA, 0xF7E4, 0x705B, 0xF7E5, 0x705A, 0xF7E6, 0x7222, 0xF7E7, 0x7382, 0xF7E8, 0x7381, 0xF7E9, 0x7383, + 0xF7EA, 0x7670, 0xF7EB, 0x77D4, 0xF7EC, 0x7C67, 0xF7ED, 0x7C66, 0xF7EE, 0x7E95, 0xF7EF, 0x826C, 0xF7F0, 0x863A, 0xF7F1, 0x8640, + 0xF7F2, 0x8639, 0xF7F3, 0x863C, 0xF7F4, 0x8631, 0xF7F5, 0x863B, 0xF7F6, 0x863E, 0xF7F7, 0x8830, 0xF7F8, 0x8832, 0xF7F9, 0x882E, + 0xF7FA, 0x8833, 0xF7FB, 0x8976, 0xF7FC, 0x8974, 0xF7FD, 0x8973, 0xF7FE, 0x89FE, 0xF840, 0x8B8C, 0xF841, 0x8B8E, 0xF842, 0x8B8B, + 0xF843, 0x8B88, 0xF844, 0x8C45, 0xF845, 0x8D19, 0xF846, 0x8E98, 0xF847, 0x8F64, 0xF848, 0x8F63, 0xF849, 0x91BC, 0xF84A, 0x9462, + 0xF84B, 0x9455, 0xF84C, 0x945D, 0xF84D, 0x9457, 0xF84E, 0x945E, 0xF84F, 0x97C4, 0xF850, 0x97C5, 0xF851, 0x9800, 0xF852, 0x9A56, + 0xF853, 0x9A59, 0xF854, 0x9B1E, 0xF855, 0x9B1F, 0xF856, 0x9B20, 0xF857, 0x9C52, 0xF858, 0x9C58, 0xF859, 0x9C50, 0xF85A, 0x9C4A, + 0xF85B, 0x9C4D, 0xF85C, 0x9C4B, 0xF85D, 0x9C55, 0xF85E, 0x9C59, 0xF85F, 0x9C4C, 0xF860, 0x9C4E, 0xF861, 0x9DFB, 0xF862, 0x9DF7, + 0xF863, 0x9DEF, 0xF864, 0x9DE3, 0xF865, 0x9DEB, 0xF866, 0x9DF8, 0xF867, 0x9DE4, 0xF868, 0x9DF6, 0xF869, 0x9DE1, 0xF86A, 0x9DEE, + 0xF86B, 0x9DE6, 0xF86C, 0x9DF2, 0xF86D, 0x9DF0, 0xF86E, 0x9DE2, 0xF86F, 0x9DEC, 0xF870, 0x9DF4, 0xF871, 0x9DF3, 0xF872, 0x9DE8, + 0xF873, 0x9DED, 0xF874, 0x9EC2, 0xF875, 0x9ED0, 0xF876, 0x9EF2, 0xF877, 0x9EF3, 0xF878, 0x9F06, 0xF879, 0x9F1C, 0xF87A, 0x9F38, + 0xF87B, 0x9F37, 0xF87C, 0x9F36, 0xF87D, 0x9F43, 0xF87E, 0x9F4F, 0xF8A1, 0x9F71, 0xF8A2, 0x9F70, 0xF8A3, 0x9F6E, 0xF8A4, 0x9F6F, + 0xF8A5, 0x56D3, 0xF8A6, 0x56CD, 0xF8A7, 0x5B4E, 0xF8A8, 0x5C6D, 0xF8A9, 0x652D, 0xF8AA, 0x66ED, 0xF8AB, 0x66EE, 0xF8AC, 0x6B13, + 0xF8AD, 0x705F, 0xF8AE, 0x7061, 0xF8AF, 0x705D, 0xF8B0, 0x7060, 0xF8B1, 0x7223, 0xF8B2, 0x74DB, 0xF8B3, 0x74E5, 0xF8B4, 0x77D5, + 0xF8B5, 0x7938, 0xF8B6, 0x79B7, 0xF8B7, 0x79B6, 0xF8B8, 0x7C6A, 0xF8B9, 0x7E97, 0xF8BA, 0x7F89, 0xF8BB, 0x826D, 0xF8BC, 0x8643, + 0xF8BD, 0x8838, 0xF8BE, 0x8837, 0xF8BF, 0x8835, 0xF8C0, 0x884B, 0xF8C1, 0x8B94, 0xF8C2, 0x8B95, 0xF8C3, 0x8E9E, 0xF8C4, 0x8E9F, + 0xF8C5, 0x8EA0, 0xF8C6, 0x8E9D, 0xF8C7, 0x91BE, 0xF8C8, 0x91BD, 0xF8C9, 0x91C2, 0xF8CA, 0x946B, 0xF8CB, 0x9468, 0xF8CC, 0x9469, + 0xF8CD, 0x96E5, 0xF8CE, 0x9746, 0xF8CF, 0x9743, 0xF8D0, 0x9747, 0xF8D1, 0x97C7, 0xF8D2, 0x97E5, 0xF8D3, 0x9A5E, 0xF8D4, 0x9AD5, + 0xF8D5, 0x9B59, 0xF8D6, 0x9C63, 0xF8D7, 0x9C67, 0xF8D8, 0x9C66, 0xF8D9, 0x9C62, 0xF8DA, 0x9C5E, 0xF8DB, 0x9C60, 0xF8DC, 0x9E02, + 0xF8DD, 0x9DFE, 0xF8DE, 0x9E07, 0xF8DF, 0x9E03, 0xF8E0, 0x9E06, 0xF8E1, 0x9E05, 0xF8E2, 0x9E00, 0xF8E3, 0x9E01, 0xF8E4, 0x9E09, + 0xF8E5, 0x9DFF, 0xF8E6, 0x9DFD, 0xF8E7, 0x9E04, 0xF8E8, 0x9EA0, 0xF8E9, 0x9F1E, 0xF8EA, 0x9F46, 0xF8EB, 0x9F74, 0xF8EC, 0x9F75, + 0xF8ED, 0x9F76, 0xF8EE, 0x56D4, 0xF8EF, 0x652E, 0xF8F0, 0x65B8, 0xF8F1, 0x6B18, 0xF8F2, 0x6B19, 0xF8F3, 0x6B17, 0xF8F4, 0x6B1A, + 0xF8F5, 0x7062, 0xF8F6, 0x7226, 0xF8F7, 0x72AA, 0xF8F8, 0x77D8, 0xF8F9, 0x77D9, 0xF8FA, 0x7939, 0xF8FB, 0x7C69, 0xF8FC, 0x7C6B, + 0xF8FD, 0x7CF6, 0xF8FE, 0x7E9A, 0xF940, 0x7E98, 0xF941, 0x7E9B, 0xF942, 0x7E99, 0xF943, 0x81E0, 0xF944, 0x81E1, 0xF945, 0x8646, + 0xF946, 0x8647, 0xF947, 0x8648, 0xF948, 0x8979, 0xF949, 0x897A, 0xF94A, 0x897C, 0xF94B, 0x897B, 0xF94C, 0x89FF, 0xF94D, 0x8B98, + 0xF94E, 0x8B99, 0xF94F, 0x8EA5, 0xF950, 0x8EA4, 0xF951, 0x8EA3, 0xF952, 0x946E, 0xF953, 0x946D, 0xF954, 0x946F, 0xF955, 0x9471, + 0xF956, 0x9473, 0xF957, 0x9749, 0xF958, 0x9872, 0xF959, 0x995F, 0xF95A, 0x9C68, 0xF95B, 0x9C6E, 0xF95C, 0x9C6D, 0xF95D, 0x9E0B, + 0xF95E, 0x9E0D, 0xF95F, 0x9E10, 0xF960, 0x9E0F, 0xF961, 0x9E12, 0xF962, 0x9E11, 0xF963, 0x9EA1, 0xF964, 0x9EF5, 0xF965, 0x9F09, + 0xF966, 0x9F47, 0xF967, 0x9F78, 0xF968, 0x9F7B, 0xF969, 0x9F7A, 0xF96A, 0x9F79, 0xF96B, 0x571E, 0xF96C, 0x7066, 0xF96D, 0x7C6F, + 0xF96E, 0x883C, 0xF96F, 0x8DB2, 0xF970, 0x8EA6, 0xF971, 0x91C3, 0xF972, 0x9474, 0xF973, 0x9478, 0xF974, 0x9476, 0xF975, 0x9475, + 0xF976, 0x9A60, 0xF977, 0x9C74, 0xF978, 0x9C73, 0xF979, 0x9C71, 0xF97A, 0x9C75, 0xF97B, 0x9E14, 0xF97C, 0x9E13, 0xF97D, 0x9EF6, + 0xF97E, 0x9F0A, 0xF9A1, 0x9FA4, 0xF9A2, 0x7068, 0xF9A3, 0x7065, 0xF9A4, 0x7CF7, 0xF9A5, 0x866A, 0xF9A6, 0x883E, 0xF9A7, 0x883D, + 0xF9A8, 0x883F, 0xF9A9, 0x8B9E, 0xF9AA, 0x8C9C, 0xF9AB, 0x8EA9, 0xF9AC, 0x8EC9, 0xF9AD, 0x974B, 0xF9AE, 0x9873, 0xF9AF, 0x9874, + 0xF9B0, 0x98CC, 0xF9B1, 0x9961, 0xF9B2, 0x99AB, 0xF9B3, 0x9A64, 0xF9B4, 0x9A66, 0xF9B5, 0x9A67, 0xF9B6, 0x9B24, 0xF9B7, 0x9E15, + 0xF9B8, 0x9E17, 0xF9B9, 0x9F48, 0xF9BA, 0x6207, 0xF9BB, 0x6B1E, 0xF9BC, 0x7227, 0xF9BD, 0x864C, 0xF9BE, 0x8EA8, 0xF9BF, 0x9482, + 0xF9C0, 0x9480, 0xF9C1, 0x9481, 0xF9C2, 0x9A69, 0xF9C3, 0x9A68, 0xF9C4, 0x9B2E, 0xF9C5, 0x9E19, 0xF9C6, 0x7229, 0xF9C7, 0x864B, + 0xF9C8, 0x8B9F, 0xF9C9, 0x9483, 0xF9CA, 0x9C79, 0xF9CB, 0x9EB7, 0xF9CC, 0x7675, 0xF9CD, 0x9A6B, 0xF9CE, 0x9C7A, 0xF9CF, 0x9E1D, + 0xF9D0, 0x7069, 0xF9D1, 0x706A, 0xF9D2, 0x9EA4, 0xF9D3, 0x9F7E, 0xF9D4, 0x9F49, 0xF9D5, 0x9F98, 0xF9D6, 0x7881, 0xF9D7, 0x92B9, + 0xF9D8, 0x88CF, 0xF9D9, 0x58BB, 0xF9DA, 0x6052, 0xF9DB, 0x7CA7, 0xF9DC, 0x5AFA, 0xF9DD, 0x2554, 0xF9DE, 0x2566, 0xF9DF, 0x2557, + 0xF9E0, 0x2560, 0xF9E1, 0x256C, 0xF9E2, 0x2563, 0xF9E3, 0x255A, 0xF9E4, 0x2569, 0xF9E5, 0x255D, 0xF9E6, 0x2552, 0xF9E7, 0x2564, + 0xF9E8, 0x2555, 0xF9E9, 0x255E, 0xF9EA, 0x256A, 0xF9EB, 0x2561, 0xF9EC, 0x2558, 0xF9ED, 0x2567, 0xF9EE, 0x255B, 0xF9EF, 0x2553, + 0xF9F0, 0x2565, 0xF9F1, 0x2556, 0xF9F2, 0x255F, 0xF9F3, 0x256B, 0xF9F4, 0x2562, 0xF9F5, 0x2559, 0xF9F6, 0x2568, 0xF9F7, 0x255C, + 0xF9F8, 0x2551, 0xF9F9, 0x2550, 0xF9FA, 0x256D, 0xF9FB, 0x256E, 0xF9FC, 0x2570, 0xF9FD, 0x256F, 0xF9FE, 0x2593, 0, 0 +}; +#endif + +#if FF_CODE_PAGE == 437 || FF_CODE_PAGE == 0 +static const WCHAR uc437[] = { /* CP437(U.S.) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 720 || FF_CODE_PAGE == 0 +static const WCHAR uc720[] = { /* CP720(Arabic) to Unicode conversion table */ + 0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9, 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A, + 0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 737 || FF_CODE_PAGE == 0 +static const WCHAR uc737[] = { /* CP737(Greek) to Unicode conversion table */ + 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, + 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, + 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E, + 0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 771 || FF_CODE_PAGE == 0 +static const WCHAR uc771[] = { /* CP771(KBL) to Unicode conversion table */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x0104, 0x0105, 0x010C, 0x010D, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, + 0x0118, 0x0119, 0x0116, 0x0117, 0x012E, 0x012F, 0x0160, 0x0161, 0x0172, 0x0173, 0x016A, 0x016B, 0x017D, 0x017E, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 775 || FF_CODE_PAGE == 0 +static const WCHAR uc775[] = { /* CP775(Baltic) to Unicode conversion table */ + 0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4, + 0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D, + 0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019, + 0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 850 || FF_CODE_PAGE == 0 +static const WCHAR uc850[] = { /* CP850(Latin 1) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, + 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 852 || FF_CODE_PAGE == 0 +static const WCHAR uc852[] = { /* CP852(Latin 2) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106, + 0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4, + 0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 855 || FF_CODE_PAGE == 0 +static const WCHAR uc855[] = { /* CP855(Cyrillic) to Unicode conversion table */ + 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408, + 0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A, + 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580, + 0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116, + 0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 857 || FF_CODE_PAGE == 0 +static const WCHAR uc857[] = { /* CP857(Turkish) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000, 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4, + 0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 860 || FF_CODE_PAGE == 0 +static const WCHAR uc860[] = { /* CP860(Portuguese) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2, + 0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 861 || FF_CODE_PAGE == 0 +static const WCHAR uc861[] = { /* CP861(Icelandic) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 862 || FF_CODE_PAGE == 0 +static const WCHAR uc862[] = { /* CP862(Hebrew) to Unicode conversion table */ + 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, + 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 863 || FF_CODE_PAGE == 0 +static const WCHAR uc863[] = { /* CP863(Canadian French) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x2017, 0x00C0, + 0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192, + 0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00BB, 0x00B3, 0x00AF, 0x00CE, 0x3210, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2219, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 864 || FF_CODE_PAGE == 0 +static const WCHAR uc864[] = { /* CP864(Arabic) to Unicode conversion table */ + 0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518, + 0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 0x00BB, 0xFEF7, 0xFEF8, 0x0000, 0x0000, 0xFEFB, 0xFEFC, 0x0000, + 0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0x0000, 0x20AC, 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5, + 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F, + 0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9, + 0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9, + 0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1, + 0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0, 0x0000 +}; +#endif +#if FF_CODE_PAGE == 865 || FF_CODE_PAGE == 0 +static const WCHAR uc865[] = { /* CP865(Nordic) to Unicode conversion table */ + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C5, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 866 || FF_CODE_PAGE == 0 +static const WCHAR uc866[] = { /* CP866(Russian) to Unicode conversion table */ + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, + 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0 +}; +#endif +#if FF_CODE_PAGE == 869 || FF_CODE_PAGE == 0 +static const WCHAR uc869[] = { /* CP869(Greek 2) to Unicode conversion table */ + 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x0386, 0x00B7, 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389, + 0x038A, 0x03AA, 0x038C, 0x00B7, 0x00B7, 0x038E, 0x03AB, 0x00A9, 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF, + 0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0A30, 0x03A1, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3, + 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580, + 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384, + 0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0 +}; +#endif + + + + +/*------------------------------------------------------------------------*/ +/* OEM <==> Unicode conversions for static code page configuration */ +/* SBCS fixed code page */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE != 0 && FF_CODE_PAGE < 900 +WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */ + DWORD uni, /* UTF-16 encoded character to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + WCHAR c = 0; + const WCHAR *p = CVTBL(uc, FF_CODE_PAGE); + + + if (uni < 0x80) { /* ASCII? */ + c = (WCHAR)uni; + + } else { /* Non-ASCII */ + if (uni < 0x10000 && cp == FF_CODE_PAGE) { /* Is it in BMP and valid code page? */ + for (c = 0; c < 0x80 && uni != p[c]; c++) ; + c = (c + 0x80) & 0xFF; + } + } + + return c; +} + +WCHAR ff_oem2uni ( /* Returns Unicode character in UTF-16, zero on error */ + WCHAR oem, /* OEM code to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + WCHAR c = 0; + const WCHAR *p = CVTBL(uc, FF_CODE_PAGE); + + + if (oem < 0x80) { /* ASCII? */ + c = oem; + + } else { /* Extended char */ + if (cp == FF_CODE_PAGE) { /* Is it a valid code page? */ + if (oem < 0x100) c = p[oem - 0x80]; + } + } + + return c; +} + +#endif + + + +/*------------------------------------------------------------------------*/ +/* OEM <==> Unicode conversions for static code page configuration */ +/* DBCS fixed code page */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE >= 900 +WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */ + DWORD uni, /* UTF-16 encoded character to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0, uc; + UINT i = 0, n, li, hi; + + + if (uni < 0x80) { /* ASCII? */ + c = (WCHAR)uni; + + } else { /* Non-ASCII */ + if (uni < 0x10000 && cp == FF_CODE_PAGE) { /* Is it in BMP and valid code page? */ + uc = (WCHAR)uni; + p = CVTBL(uni2oem, FF_CODE_PAGE); + hi = sizeof CVTBL(uni2oem, FF_CODE_PAGE) / 4 - 1; + li = 0; + for (n = 16; n; n--) { + i = li + (hi - li) / 2; + if (uc == p[i * 2]) break; + if (uc > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + + return c; +} + + +WCHAR ff_oem2uni ( /* Returns Unicode character in UTF-16, zero on error */ + WCHAR oem, /* OEM code to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0; + UINT i = 0, n, li, hi; + + + if (oem < 0x80) { /* ASCII? */ + c = oem; + + } else { /* Extended char */ + if (cp == FF_CODE_PAGE) { /* Is it valid code page? */ + p = CVTBL(oem2uni, FF_CODE_PAGE); + hi = sizeof CVTBL(oem2uni, FF_CODE_PAGE) / 4 - 1; + li = 0; + for (n = 16; n; n--) { + i = li + (hi - li) / 2; + if (oem == p[i * 2]) break; + if (oem > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + + return c; +} +#endif + + + +/*------------------------------------------------------------------------*/ +/* OEM <==> Unicode conversions for dynamic code page configuration */ +/*------------------------------------------------------------------------*/ + +#if FF_CODE_PAGE == 0 + +static const WORD cp_code[] = { 437, 720, 737, 771, 775, 850, 852, 855, 857, 860, 861, 862, 863, 864, 865, 866, 869, 0}; +static const WCHAR* const cp_table[] = {uc437, uc720, uc737, uc771, uc775, uc850, uc852, uc855, uc857, uc860, uc861, uc862, uc863, uc864, uc865, uc866, uc869, 0}; + + +WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */ + DWORD uni, /* UTF-16 encoded character to be converted */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0, uc; + UINT i, n, li, hi; + + + if (uni < 0x80) { /* ASCII? */ + c = (WCHAR)uni; + + } else { /* Non-ASCII */ + if (uni < 0x10000) { /* Is it in BMP? */ + uc = (WCHAR)uni; + p = 0; + if (cp < 900) { /* SBCS */ + for (i = 0; cp_code[i] != 0 && cp_code[i] != cp; i++) ; /* Get conversion table */ + p = cp_table[i]; + if (p) { /* Is it valid code page ? */ + for (c = 0; c < 0x80 && uc != p[c]; c++) ; /* Find OEM code in the table */ + c = (c + 0x80) & 0xFF; + } + } else { /* DBCS */ + switch (cp) { /* Get conversion table */ + case 932 : p = uni2oem932; hi = sizeof uni2oem932 / 4 - 1; break; + case 936 : p = uni2oem936; hi = sizeof uni2oem936 / 4 - 1; break; + case 949 : p = uni2oem949; hi = sizeof uni2oem949 / 4 - 1; break; + case 950 : p = uni2oem950; hi = sizeof uni2oem950 / 4 - 1; break; + } + if (p) { /* Is it valid code page? */ + li = 0; + for (n = 16; n; n--) { /* Find OEM code */ + i = li + (hi - li) / 2; + if (uc == p[i * 2]) break; + if (uc > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + } + } + + return c; +} + + +WCHAR ff_oem2uni ( /* Returns Unicode character in UTF-16, zero on error */ + WCHAR oem, /* OEM code to be converted (DBC if >=0x100) */ + WORD cp /* Code page for the conversion */ +) +{ + const WCHAR *p; + WCHAR c = 0; + UINT i, n, li, hi; + + + if (oem < 0x80) { /* ASCII? */ + c = oem; + + } else { /* Extended char */ + p = 0; + if (cp < 900) { /* SBCS */ + for (i = 0; cp_code[i] != 0 && cp_code[i] != cp; i++) ; /* Get table */ + p = cp_table[i]; + if (p) { /* Is it a valid CP ? */ + if (oem < 0x100) c = p[oem - 0x80]; + } + } else { /* DBCS */ + switch (cp) { + case 932 : p = oem2uni932; hi = sizeof oem2uni932 / 4 - 1; break; + case 936 : p = oem2uni936; hi = sizeof oem2uni936 / 4 - 1; break; + case 949 : p = oem2uni949; hi = sizeof oem2uni949 / 4 - 1; break; + case 950 : p = oem2uni950; hi = sizeof oem2uni950 / 4 - 1; break; + } + if (p) { + li = 0; + for (n = 16; n; n--) { + i = li + (hi - li) / 2; + if (oem == p[i * 2]) break; + if (oem > p[i * 2]) { + li = i; + } else { + hi = i; + } + } + if (n != 0) c = p[i * 2 + 1]; + } + } + } + + return c; +} +#endif + + + +/*------------------------------------------------------------------------*/ +/* Unicode up-case conversion */ +/*------------------------------------------------------------------------*/ + +DWORD ff_wtoupper ( /* Returns up-converted code point */ + DWORD uni /* Unicode code point to be up-converted */ +) +{ + const WORD *p; + WORD uc, bc, nc, cmd; + static const WORD cvt1[] = { /* Compressed up conversion table for U+0000 - U+0FFF */ + /* Basic Latin */ + 0x0061,0x031A, + /* Latin-1 Supplement */ + 0x00E0,0x0317, + 0x00F8,0x0307, + 0x00FF,0x0001,0x0178, + /* Latin Extended-A */ + 0x0100,0x0130, + 0x0132,0x0106, + 0x0139,0x0110, + 0x014A,0x012E, + 0x0179,0x0106, + /* Latin Extended-B */ + 0x0180,0x004D,0x0243,0x0181,0x0182,0x0182,0x0184,0x0184,0x0186,0x0187,0x0187,0x0189,0x018A,0x018B,0x018B,0x018D,0x018E,0x018F,0x0190,0x0191,0x0191,0x0193,0x0194,0x01F6,0x0196,0x0197,0x0198,0x0198,0x023D,0x019B,0x019C,0x019D,0x0220,0x019F,0x01A0,0x01A0,0x01A2,0x01A2,0x01A4,0x01A4,0x01A6,0x01A7,0x01A7,0x01A9,0x01AA,0x01AB,0x01AC,0x01AC,0x01AE,0x01AF,0x01AF,0x01B1,0x01B2,0x01B3,0x01B3,0x01B5,0x01B5,0x01B7,0x01B8,0x01B8,0x01BA,0x01BB,0x01BC,0x01BC,0x01BE,0x01F7,0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C5,0x01C4,0x01C7,0x01C8,0x01C7,0x01CA,0x01CB,0x01CA, + 0x01CD,0x0110, + 0x01DD,0x0001,0x018E, + 0x01DE,0x0112, + 0x01F3,0x0003,0x01F1,0x01F4,0x01F4, + 0x01F8,0x0128, + 0x0222,0x0112, + 0x023A,0x0009,0x2C65,0x023B,0x023B,0x023D,0x2C66,0x023F,0x0240,0x0241,0x0241, + 0x0246,0x010A, + /* IPA Extensions */ + 0x0253,0x0040,0x0181,0x0186,0x0255,0x0189,0x018A,0x0258,0x018F,0x025A,0x0190,0x025C,0x025D,0x025E,0x025F,0x0193,0x0261,0x0262,0x0194,0x0264,0x0265,0x0266,0x0267,0x0197,0x0196,0x026A,0x2C62,0x026C,0x026D,0x026E,0x019C,0x0270,0x0271,0x019D,0x0273,0x0274,0x019F,0x0276,0x0277,0x0278,0x0279,0x027A,0x027B,0x027C,0x2C64,0x027E,0x027F,0x01A6,0x0281,0x0282,0x01A9,0x0284,0x0285,0x0286,0x0287,0x01AE,0x0244,0x01B1,0x01B2,0x0245,0x028D,0x028E,0x028F,0x0290,0x0291,0x01B7, + /* Greek, Coptic */ + 0x037B,0x0003,0x03FD,0x03FE,0x03FF, + 0x03AC,0x0004,0x0386,0x0388,0x0389,0x038A, + 0x03B1,0x0311, + 0x03C2,0x0002,0x03A3,0x03A3, + 0x03C4,0x0308, + 0x03CC,0x0003,0x038C,0x038E,0x038F, + 0x03D8,0x0118, + 0x03F2,0x000A,0x03F9,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7,0x03F7,0x03F9,0x03FA,0x03FA, + /* Cyrillic */ + 0x0430,0x0320, + 0x0450,0x0710, + 0x0460,0x0122, + 0x048A,0x0136, + 0x04C1,0x010E, + 0x04CF,0x0001,0x04C0, + 0x04D0,0x0144, + /* Armenian */ + 0x0561,0x0426, + + 0x0000 /* EOT */ + }; + static const WORD cvt2[] = { /* Compressed up conversion table for U+1000 - U+FFFF */ + /* Phonetic Extensions */ + 0x1D7D,0x0001,0x2C63, + /* Latin Extended Additional */ + 0x1E00,0x0196, + 0x1EA0,0x015A, + /* Greek Extended */ + 0x1F00,0x0608, + 0x1F10,0x0606, + 0x1F20,0x0608, + 0x1F30,0x0608, + 0x1F40,0x0606, + 0x1F51,0x0007,0x1F59,0x1F52,0x1F5B,0x1F54,0x1F5D,0x1F56,0x1F5F, + 0x1F60,0x0608, + 0x1F70,0x000E,0x1FBA,0x1FBB,0x1FC8,0x1FC9,0x1FCA,0x1FCB,0x1FDA,0x1FDB,0x1FF8,0x1FF9,0x1FEA,0x1FEB,0x1FFA,0x1FFB, + 0x1F80,0x0608, + 0x1F90,0x0608, + 0x1FA0,0x0608, + 0x1FB0,0x0004,0x1FB8,0x1FB9,0x1FB2,0x1FBC, + 0x1FCC,0x0001,0x1FC3, + 0x1FD0,0x0602, + 0x1FE0,0x0602, + 0x1FE5,0x0001,0x1FEC, + 0x1FF3,0x0001,0x1FFC, + /* Letterlike Symbols */ + 0x214E,0x0001,0x2132, + /* Number forms */ + 0x2170,0x0210, + 0x2184,0x0001,0x2183, + /* Enclosed Alphanumerics */ + 0x24D0,0x051A, + 0x2C30,0x042F, + /* Latin Extended-C */ + 0x2C60,0x0102, + 0x2C67,0x0106, 0x2C75,0x0102, + /* Coptic */ + 0x2C80,0x0164, + /* Georgian Supplement */ + 0x2D00,0x0826, + /* Full-width */ + 0xFF41,0x031A, + + 0x0000 /* EOT */ + }; + + + if (uni < 0x10000) { /* Is it in BMP? */ + uc = (WORD)uni; + p = uc < 0x1000 ? cvt1 : cvt2; + for (;;) { + bc = *p++; /* Get the block base */ + if (bc == 0 || uc < bc) break; /* Not matched? */ + nc = *p++; cmd = nc >> 8; nc &= 0xFF; /* Get processing command and block size */ + if (uc < bc + nc) { /* In the block? */ + switch (cmd) { + case 0: uc = p[uc - bc]; break; /* Table conversion */ + case 1: uc -= (uc - bc) & 1; break; /* Case pairs */ + case 2: uc -= 16; break; /* Shift -16 */ + case 3: uc -= 32; break; /* Shift -32 */ + case 4: uc -= 48; break; /* Shift -48 */ + case 5: uc -= 26; break; /* Shift -26 */ + case 6: uc += 8; break; /* Shift +8 */ + case 7: uc -= 80; break; /* Shift -80 */ + case 8: uc -= 0x1C60; break; /* Shift -0x1C60 */ + } + break; + } + if (cmd == 0) p += nc; /* Skip table if needed */ + } + uni = uc; + } + + return uni; +} + + +#endif /* #if FF_USE_LFN */ From 149bc88a6eaf6893d9e7ce167416e737e06c473f Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Wed, 1 Feb 2023 21:20:28 +0000 Subject: [PATCH 02/87] ext: littlefs-2.4.1 --- .../.github/workflows/post-release.yml | 26 + ext/littlefs/.github/workflows/release.yml | 215 + ext/littlefs/.github/workflows/status.yml | 55 + ext/littlefs/.github/workflows/test.yml | 446 ++ ext/littlefs/.gitignore | 12 + ext/littlefs/DESIGN.md | 2173 +++++++ ext/littlefs/LICENSE.md | 24 + ext/littlefs/Makefile | 114 + ext/littlefs/README.md | 258 + ext/littlefs/SPEC.md | 787 +++ ext/littlefs/bd/lfs_filebd.c | 205 + ext/littlefs/bd/lfs_filebd.h | 73 + ext/littlefs/bd/lfs_rambd.c | 140 + ext/littlefs/bd/lfs_rambd.h | 75 + ext/littlefs/bd/lfs_testbd.c | 302 + ext/littlefs/bd/lfs_testbd.h | 141 + ext/littlefs/lfs.c | 5430 +++++++++++++++++ ext/littlefs/lfs.h | 695 +++ ext/littlefs/lfs_util.c | 33 + ext/littlefs/lfs_util.h | 244 + ext/littlefs/scripts/code.py | 214 + ext/littlefs/scripts/coverage.py | 254 + ext/littlefs/scripts/explode_asserts.py | 383 ++ ext/littlefs/scripts/prefix.py | 61 + ext/littlefs/scripts/readblock.py | 26 + ext/littlefs/scripts/readmdir.py | 367 ++ ext/littlefs/scripts/readtree.py | 183 + ext/littlefs/scripts/test.py | 857 +++ ext/littlefs/tests/test_alloc.toml | 653 ++ ext/littlefs/tests/test_attrs.toml | 304 + ext/littlefs/tests/test_badblocks.toml | 241 + ext/littlefs/tests/test_dirs.toml | 838 +++ ext/littlefs/tests/test_entries.toml | 611 ++ ext/littlefs/tests/test_evil.toml | 288 + ext/littlefs/tests/test_exhaustion.toml | 465 ++ ext/littlefs/tests/test_files.toml | 486 ++ ext/littlefs/tests/test_interspersed.toml | 244 + ext/littlefs/tests/test_move.toml | 1815 ++++++ ext/littlefs/tests/test_orphans.toml | 120 + ext/littlefs/tests/test_paths.toml | 293 + ext/littlefs/tests/test_relocations.toml | 305 + ext/littlefs/tests/test_seek.toml | 380 ++ ext/littlefs/tests/test_superblocks.toml | 127 + ext/littlefs/tests/test_truncate.toml | 439 ++ 44 files changed, 21402 insertions(+) create mode 100644 ext/littlefs/.github/workflows/post-release.yml create mode 100644 ext/littlefs/.github/workflows/release.yml create mode 100644 ext/littlefs/.github/workflows/status.yml create mode 100644 ext/littlefs/.github/workflows/test.yml create mode 100644 ext/littlefs/.gitignore create mode 100644 ext/littlefs/DESIGN.md create mode 100644 ext/littlefs/LICENSE.md create mode 100644 ext/littlefs/Makefile create mode 100644 ext/littlefs/README.md create mode 100644 ext/littlefs/SPEC.md create mode 100644 ext/littlefs/bd/lfs_filebd.c create mode 100644 ext/littlefs/bd/lfs_filebd.h create mode 100644 ext/littlefs/bd/lfs_rambd.c create mode 100644 ext/littlefs/bd/lfs_rambd.h create mode 100644 ext/littlefs/bd/lfs_testbd.c create mode 100644 ext/littlefs/bd/lfs_testbd.h create mode 100644 ext/littlefs/lfs.c create mode 100644 ext/littlefs/lfs.h create mode 100644 ext/littlefs/lfs_util.c create mode 100644 ext/littlefs/lfs_util.h create mode 100644 ext/littlefs/scripts/code.py create mode 100644 ext/littlefs/scripts/coverage.py create mode 100644 ext/littlefs/scripts/explode_asserts.py create mode 100644 ext/littlefs/scripts/prefix.py create mode 100644 ext/littlefs/scripts/readblock.py create mode 100644 ext/littlefs/scripts/readmdir.py create mode 100644 ext/littlefs/scripts/readtree.py create mode 100644 ext/littlefs/scripts/test.py create mode 100644 ext/littlefs/tests/test_alloc.toml create mode 100644 ext/littlefs/tests/test_attrs.toml create mode 100644 ext/littlefs/tests/test_badblocks.toml create mode 100644 ext/littlefs/tests/test_dirs.toml create mode 100644 ext/littlefs/tests/test_entries.toml create mode 100644 ext/littlefs/tests/test_evil.toml create mode 100644 ext/littlefs/tests/test_exhaustion.toml create mode 100644 ext/littlefs/tests/test_files.toml create mode 100644 ext/littlefs/tests/test_interspersed.toml create mode 100644 ext/littlefs/tests/test_move.toml create mode 100644 ext/littlefs/tests/test_orphans.toml create mode 100644 ext/littlefs/tests/test_paths.toml create mode 100644 ext/littlefs/tests/test_relocations.toml create mode 100644 ext/littlefs/tests/test_seek.toml create mode 100644 ext/littlefs/tests/test_superblocks.toml create mode 100644 ext/littlefs/tests/test_truncate.toml diff --git a/ext/littlefs/.github/workflows/post-release.yml b/ext/littlefs/.github/workflows/post-release.yml new file mode 100644 index 0000000000..da539c35c0 --- /dev/null +++ b/ext/littlefs/.github/workflows/post-release.yml @@ -0,0 +1,26 @@ +name: post-release +on: + release: + branches: [master] + types: [released] + +jobs: + post-release: + runs-on: ubuntu-18.04 + steps: + # trigger post-release in dependency repo, this indirection allows the + # dependency repo to be updated often without affecting this repo. At + # the time of this comment, the dependency repo is responsible for + # creating PRs for other dependent repos post-release. + - name: trigger-post-release + continue-on-error: true + run: | + curl -sS -X POST -H "authorization: token ${{secrets.BOT_TOKEN}}" \ + "$GITHUB_API_URL/repos/${{secrets.POST_RELEASE_REPO}}/dispatches" \ + -d "$(jq -n '{ + event_type: "post-release", + client_payload: { + repo: env.GITHUB_REPOSITORY, + version: "${{github.event.release.tag_name}}"}}' \ + | tee /dev/stderr)" + diff --git a/ext/littlefs/.github/workflows/release.yml b/ext/littlefs/.github/workflows/release.yml new file mode 100644 index 0000000000..a1a1a4366d --- /dev/null +++ b/ext/littlefs/.github/workflows/release.yml @@ -0,0 +1,215 @@ +name: release +on: + workflow_run: + workflows: [test] + branches: [master] + types: [completed] + +jobs: + release: + runs-on: ubuntu-18.04 + + # need to manually check for a couple things + # - tests passed? + # - we are the most recent commit on master? + if: ${{github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.head_sha == github.sha}} + + steps: + - uses: actions/checkout@v2 + with: + ref: ${{github.event.workflow_run.head_sha}} + # need workflow access since we push branches + # containing workflows + token: ${{secrets.BOT_TOKEN}} + # need all tags + fetch-depth: 0 + + # try to get results from tests + - uses: dawidd6/action-download-artifact@v2 + continue-on-error: true + with: + workflow: ${{github.event.workflow_run.name}} + run_id: ${{github.event.workflow_run.id}} + name: results + path: results + + - name: find-version + run: | + # rip version from lfs.h + LFS_VERSION="$(grep -o '^#define LFS_VERSION .*$' lfs.h \ + | awk '{print $3}')" + LFS_VERSION_MAJOR="$((0xffff & ($LFS_VERSION >> 16)))" + LFS_VERSION_MINOR="$((0xffff & ($LFS_VERSION >> 0)))" + + # find a new patch version based on what we find in our tags + LFS_VERSION_PATCH="$( \ + ( git describe --tags --abbrev=0 \ + --match="v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR.*" \ + || echo 'v0.0.-1' ) \ + | awk -F '.' '{print $3+1}')" + + # found new version + LFS_VERSION="v$LFS_VERSION_MAJOR` + `.$LFS_VERSION_MINOR` + `.$LFS_VERSION_PATCH" + echo "LFS_VERSION=$LFS_VERSION" + echo "LFS_VERSION=$LFS_VERSION" >> $GITHUB_ENV + echo "LFS_VERSION_MAJOR=$LFS_VERSION_MAJOR" >> $GITHUB_ENV + echo "LFS_VERSION_MINOR=$LFS_VERSION_MINOR" >> $GITHUB_ENV + echo "LFS_VERSION_PATCH=$LFS_VERSION_PATCH" >> $GITHUB_ENV + + # try to find previous version? + - name: find-prev-version + continue-on-error: true + run: | + LFS_PREV_VERSION="$(git describe --tags --abbrev=0 --match 'v*')" + echo "LFS_PREV_VERSION=$LFS_PREV_VERSION" + echo "LFS_PREV_VERSION=$LFS_PREV_VERSION" >> $GITHUB_ENV + + # try to find results from tests + - name: collect-results + run: | + # previous results to compare against? + [ -n "$LFS_PREV_VERSION" ] && curl -sS \ + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/` + `status/$LFS_PREV_VERSION" \ + | jq -re 'select(.sha != env.GITHUB_SHA) | .statuses[]' \ + >> prev-results.json \ + || true + + # unfortunately these each have their own format + [ -e results/code-thumb.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code").description + | capture("Code size is (?[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb.csv -s | awk ' + NR==2 {printf "Code size,%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/code-thumb-readonly.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code (readonly)").description + | capture("Code size is (?[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb-readonly.csv -s | awk ' + NR==2 {printf "Code size
(readonly),%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/code-thumb-threadsafe.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code (threadsafe)").description + | capture("Code size is (?[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb-threadsafe.csv -s | awk ' + NR==2 {printf "Code size
(threadsafe),%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/code-thumb-migrate.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code (migrate)").description + | capture("Code size is (?[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb-migrate.csv -s | awk ' + NR==2 {printf "Code size
(migrate),%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/code-thumb-error-asserts.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code (error-asserts)").description + | capture("Code size is (?[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb-error-asserts.csv -s | awk ' + NR==2 {printf "Code size
(error-asserts),%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/coverage.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / coverage").description + | capture("Coverage is (?[0-9\\.]+)").result' \ + prev-results.json || echo 0)" + ./scripts/coverage.py -u results/coverage.csv -s | awk -F '[ /%]+' ' + NR==2 {printf "Coverage,%.1f%% of %d lines",$4,$3} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",$4-ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + + # transpose to GitHub table + [ -e results.csv ] || exit 0 + awk -F ',' ' + {label[NR]=$1; value[NR]=$2} + END { + for (r=1; r<=NR; r++) {printf "| %s ",label[r]}; printf "|\n"; + for (r=1; r<=NR; r++) {printf "|:--"}; printf "|\n"; + for (r=1; r<=NR; r++) {printf "| %s ",value[r]}; printf "|\n"}' \ + results.csv > results.txt + echo "RESULTS:" + cat results.txt + + # find changes from history + - name: collect-changes + run: | + [ -n "$LFS_PREV_VERSION" ] || exit 0 + # use explicit link to github commit so that release notes can + # be copied elsewhere + git log "$LFS_PREV_VERSION.." \ + --grep='^Merge' --invert-grep \ + --format="format:[\`%h\`](` + `https://github.com/$GITHUB_REPOSITORY/commit/%h) %s" \ + > changes.txt + echo "CHANGES:" + cat changes.txt + + # create and update major branches (vN and vN-prefix) + - name: create-major-branches + run: | + # create major branch + git branch "v$LFS_VERSION_MAJOR" HEAD + + # create major prefix branch + git config user.name ${{secrets.BOT_USER}} + git config user.email ${{secrets.BOT_EMAIL}} + git fetch "https://github.com/$GITHUB_REPOSITORY.git" \ + "v$LFS_VERSION_MAJOR-prefix" || true + ./scripts/prefix.py "lfs$LFS_VERSION_MAJOR" + git branch "v$LFS_VERSION_MAJOR-prefix" $( \ + git commit-tree $(git write-tree) \ + $(git rev-parse --verify -q FETCH_HEAD | sed -e 's/^/-p /') \ + -p HEAD \ + -m "Generated v$LFS_VERSION_MAJOR prefixes") + git reset --hard + + # push! + git push --atomic origin \ + "v$LFS_VERSION_MAJOR" \ + "v$LFS_VERSION_MAJOR-prefix" + + # build release notes + - name: create-release + run: | + # create release and patch version tag (vN.N.N) + # only draft if not a patch release + [ -e results.txt ] && export RESULTS="$(cat results.txt)" + [ -e changes.txt ] && export CHANGES="$(cat changes.txt)" + curl -sS -X POST -H "authorization: token ${{secrets.BOT_TOKEN}}" \ + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases" \ + -d "$(jq -n '{ + tag_name: env.LFS_VERSION, + name: env.LFS_VERSION | rtrimstr(".0"), + target_commitish: "${{github.event.workflow_run.head_sha}}", + draft: env.LFS_VERSION | endswith(".0"), + body: [env.RESULTS, env.CHANGES | select(.)] | join("\n\n")}' \ + | tee /dev/stderr)" + diff --git a/ext/littlefs/.github/workflows/status.yml b/ext/littlefs/.github/workflows/status.yml new file mode 100644 index 0000000000..7bd851a209 --- /dev/null +++ b/ext/littlefs/.github/workflows/status.yml @@ -0,0 +1,55 @@ +name: status +on: + workflow_run: + workflows: [test] + types: [completed] + +jobs: + status: + runs-on: ubuntu-18.04 + steps: + # custom statuses? + - uses: dawidd6/action-download-artifact@v2 + continue-on-error: true + with: + workflow: ${{github.event.workflow_run.name}} + run_id: ${{github.event.workflow_run.id}} + name: status + path: status + - name: update-status + continue-on-error: true + run: | + ls status + for s in $(shopt -s nullglob ; echo status/*.json) + do + # parse requested status + export STATE="$(jq -er '.state' $s)" + export CONTEXT="$(jq -er '.context' $s)" + export DESCRIPTION="$(jq -er '.description' $s)" + # help lookup URL for job/steps because GitHub makes + # it VERY HARD to link to specific jobs + export TARGET_URL="$( + jq -er '.target_url // empty' $s || ( + export TARGET_JOB="$(jq -er '.target_job' $s)" + export TARGET_STEP="$(jq -er '.target_step // ""' $s)" + curl -sS -H "authorization: token ${{secrets.BOT_TOKEN}}" \ + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/runs/` + `${{github.event.workflow_run.id}}/jobs" \ + | jq -er '.jobs[] + | select(.name == env.TARGET_JOB) + | .html_url + + "?check_suite_focus=true" + + ((.steps[] + | select(.name == env.TARGET_STEP) + | "#step:\(.number):0") // "")'))" + # update status + curl -sS -X POST -H "authorization: token ${{secrets.BOT_TOKEN}}" \ + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/statuses/` + `${{github.event.workflow_run.head_sha}}" \ + -d "$(jq -n '{ + state: env.STATE, + context: env.CONTEXT, + description: env.DESCRIPTION, + target_url: env.TARGET_URL}' \ + | tee /dev/stderr)" + done diff --git a/ext/littlefs/.github/workflows/test.yml b/ext/littlefs/.github/workflows/test.yml new file mode 100644 index 0000000000..6d633f8e72 --- /dev/null +++ b/ext/littlefs/.github/workflows/test.yml @@ -0,0 +1,446 @@ +name: test +on: [push, pull_request] + +env: + CFLAGS: -Werror + MAKEFLAGS: -j + +jobs: + # run tests + test: + runs-on: ubuntu-18.04 + strategy: + fail-fast: false + matrix: + arch: [x86_64, thumb, mips, powerpc] + + steps: + - uses: actions/checkout@v2 + - name: install + run: | + # need toml, also pip3 isn't installed by default? + sudo apt-get update -qq + sudo apt-get install -qq python3 python3-pip lcov + sudo pip3 install toml + gcc --version + + # setup a ram-backed disk to speed up reentrant tests + mkdir disks + sudo mount -t tmpfs -o size=100m tmpfs disks + TESTFLAGS="$TESTFLAGS --disk=disks/disk" + + # collect coverage + mkdir -p coverage + TESTFLAGS="$TESTFLAGS --coverage=` + `coverage/${{github.job}}-${{matrix.arch}}.info" + + echo "TESTFLAGS=$TESTFLAGS" >> $GITHUB_ENV + + # cross-compile with ARM Thumb (32-bit, little-endian) + - name: install-thumb + if: ${{matrix.arch == 'thumb'}} + run: | + sudo apt-get install -qq \ + gcc-arm-linux-gnueabi \ + libc6-dev-armel-cross \ + qemu-user + echo "CC=arm-linux-gnueabi-gcc -mthumb --static" >> $GITHUB_ENV + echo "EXEC=qemu-arm" >> $GITHUB_ENV + arm-linux-gnueabi-gcc --version + qemu-arm -version + # cross-compile with MIPS (32-bit, big-endian) + - name: install-mips + if: ${{matrix.arch == 'mips'}} + run: | + sudo apt-get install -qq \ + gcc-mips-linux-gnu \ + libc6-dev-mips-cross \ + qemu-user + echo "CC=mips-linux-gnu-gcc --static" >> $GITHUB_ENV + echo "EXEC=qemu-mips" >> $GITHUB_ENV + mips-linux-gnu-gcc --version + qemu-mips -version + # cross-compile with PowerPC (32-bit, big-endian) + - name: install-powerpc + if: ${{matrix.arch == 'powerpc'}} + run: | + sudo apt-get install -qq \ + gcc-powerpc-linux-gnu \ + libc6-dev-powerpc-cross \ + qemu-user + echo "CC=powerpc-linux-gnu-gcc --static" >> $GITHUB_ENV + echo "EXEC=qemu-ppc" >> $GITHUB_ENV + powerpc-linux-gnu-gcc --version + qemu-ppc -version + + # make sure example can at least compile + - name: test-example + run: | + sed -n '/``` c/,/```/{/```/d; p}' README.md > test.c + make all CFLAGS+=" \ + -Duser_provided_block_device_read=NULL \ + -Duser_provided_block_device_prog=NULL \ + -Duser_provided_block_device_erase=NULL \ + -Duser_provided_block_device_sync=NULL \ + -include stdio.h" + rm test.c + + # test configurations + # normal+reentrant tests + - name: test-default + run: | + make clean + make test TESTFLAGS+="-nrk" + # NOR flash: read/prog = 1 block = 4KiB + - name: test-nor + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_READ_SIZE=1 -DLFS_BLOCK_SIZE=4096" + # SD/eMMC: read/prog = 512 block = 512 + - name: test-emmc + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_READ_SIZE=512 -DLFS_BLOCK_SIZE=512" + # NAND flash: read/prog = 4KiB block = 32KiB + - name: test-nand + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_READ_SIZE=4096 -DLFS_BLOCK_SIZE=\(32*1024\)" + # other extreme geometries that are useful for various corner cases + - name: test-no-intrinsics + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_NO_INTRINSICS" + - name: test-byte-writes + # it just takes too long to test byte-level writes when in qemu, + # should be plenty covered by the other configurations + if: ${{matrix.arch == 'x86_64'}} + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_READ_SIZE=1 -DLFS_CACHE_SIZE=1" + - name: test-block-cycles + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_BLOCK_CYCLES=1" + - name: test-odd-block-count + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD_SIZE=256" + - name: test-odd-block-size + run: | + make clean + make test TESTFLAGS+="-nrk \ + -DLFS_READ_SIZE=11 -DLFS_BLOCK_SIZE=704" + + # upload coverage for later coverage + - name: upload-coverage + uses: actions/upload-artifact@v2 + with: + name: coverage + path: coverage + retention-days: 1 + + # update results + - name: results-code + run: | + mkdir -p results + make clean + make code \ + CFLAGS+=" \ + -DLFS_NO_ASSERT \ + -DLFS_NO_DEBUG \ + -DLFS_NO_WARN \ + -DLFS_NO_ERROR" \ + CODEFLAGS+="-o results/code-${{matrix.arch}}.csv" + - name: results-code-readonly + run: | + mkdir -p results + make clean + make code \ + CFLAGS+=" \ + -DLFS_NO_ASSERT \ + -DLFS_NO_DEBUG \ + -DLFS_NO_WARN \ + -DLFS_NO_ERROR \ + -DLFS_READONLY" \ + CODEFLAGS+="-o results/code-${{matrix.arch}}-readonly.csv" + - name: results-code-threadsafe + run: | + mkdir -p results + make clean + make code \ + CFLAGS+=" \ + -DLFS_NO_ASSERT \ + -DLFS_NO_DEBUG \ + -DLFS_NO_WARN \ + -DLFS_NO_ERROR \ + -DLFS_THREADSAFE" \ + CODEFLAGS+="-o results/code-${{matrix.arch}}-threadsafe.csv" + - name: results-code-migrate + run: | + mkdir -p results + make clean + make code \ + CFLAGS+=" \ + -DLFS_NO_ASSERT \ + -DLFS_NO_DEBUG \ + -DLFS_NO_WARN \ + -DLFS_NO_ERROR \ + -DLFS_MIGRATE" \ + CODEFLAGS+="-o results/code-${{matrix.arch}}-migrate.csv" + - name: results-code-error-asserts + run: | + mkdir -p results + make clean + make code \ + CFLAGS+=" \ + -DLFS_NO_DEBUG \ + -DLFS_NO_WARN \ + -DLFS_NO_ERROR \ + -D'LFS_ASSERT(test)=do {if(!(test)) {return -1;}} while(0)'" \ + CODEFLAGS+="-o results/code-${{matrix.arch}}-error-asserts.csv" + - name: upload-results + uses: actions/upload-artifact@v2 + with: + name: results + path: results + # limit reporting to Thumb, otherwise there would be too many numbers + # flying around for the results to be easily readable + - name: collect-status + if: ${{matrix.arch == 'thumb'}} + run: | + mkdir -p status + for f in $(shopt -s nullglob ; echo results/code*.csv) + do + export STEP="results-code$( + echo $f | sed -n 's/.*code-.*-\(.*\).csv/-\1/p')" + export CONTEXT="results / code$( + echo $f | sed -n 's/.*code-.*-\(.*\).csv/ (\1)/p')" + export PREV="$(curl -sS \ + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/status/master" \ + | jq -re 'select(.sha != env.GITHUB_SHA) | .statuses[] + | select(.context == env.CONTEXT).description + | capture("Code size is (?[0-9]+)").result' \ + || echo 0)" + export DESCRIPTION="$(./scripts/code.py -u $f -s | awk ' + NR==2 {printf "Code size is %d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]}')" + jq -n '{ + state: "success", + context: env.CONTEXT, + description: env.DESCRIPTION, + target_job: "${{github.job}} (${{matrix.arch}})", + target_step: env.STEP}' \ + | tee status/code$( + echo $f | sed -n 's/.*code-.*-\(.*\).csv/-\1/p').json + done + - name: upload-status + if: ${{matrix.arch == 'thumb'}} + uses: actions/upload-artifact@v2 + with: + name: status + path: status + retention-days: 1 + + # run under Valgrind to check for memory errors + valgrind: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: install + run: | + # need toml, also pip3 isn't installed by default? + sudo apt-get update -qq + sudo apt-get install -qq python3 python3-pip + sudo pip3 install toml + - name: install-valgrind + run: | + sudo apt-get update -qq + sudo apt-get install -qq valgrind + valgrind --version + # normal tests, we don't need to test all geometries + - name: test-valgrind + run: make test TESTFLAGS+="-k --valgrind" + + # self-host with littlefs-fuse for a fuzz-like test + fuse: + runs-on: ubuntu-18.04 + if: ${{!endsWith(github.ref, '-prefix')}} + steps: + - uses: actions/checkout@v2 + - name: install + run: | + # need toml, also pip3 isn't installed by default? + sudo apt-get update -qq + sudo apt-get install -qq python3 python3-pip libfuse-dev + sudo pip3 install toml + fusermount -V + gcc --version + - uses: actions/checkout@v2 + with: + repository: littlefs-project/littlefs-fuse + ref: v2 + path: littlefs-fuse + - name: setup + run: | + # copy our new version into littlefs-fuse + rm -rf littlefs-fuse/littlefs/* + cp -r $(git ls-tree --name-only HEAD) littlefs-fuse/littlefs + + # setup disk for littlefs-fuse + mkdir mount + sudo chmod a+rw /dev/loop0 + dd if=/dev/zero bs=512 count=128K of=disk + losetup /dev/loop0 disk + - name: test + run: | + # self-host test + make -C littlefs-fuse + + littlefs-fuse/lfs --format /dev/loop0 + littlefs-fuse/lfs /dev/loop0 mount + + ls mount + mkdir mount/littlefs + cp -r $(git ls-tree --name-only HEAD) mount/littlefs + cd mount/littlefs + stat . + ls -flh + make -B test + + # test migration using littlefs-fuse + migrate: + runs-on: ubuntu-18.04 + if: ${{!endsWith(github.ref, '-prefix')}} + steps: + - uses: actions/checkout@v2 + - name: install + run: | + # need toml, also pip3 isn't installed by default? + sudo apt-get update -qq + sudo apt-get install -qq python3 python3-pip libfuse-dev + sudo pip3 install toml + fusermount -V + gcc --version + - uses: actions/checkout@v2 + with: + repository: littlefs-project/littlefs-fuse + ref: v2 + path: v2 + - uses: actions/checkout@v2 + with: + repository: littlefs-project/littlefs-fuse + ref: v1 + path: v1 + - name: setup + run: | + # copy our new version into littlefs-fuse + rm -rf v2/littlefs/* + cp -r $(git ls-tree --name-only HEAD) v2/littlefs + + # setup disk for littlefs-fuse + mkdir mount + sudo chmod a+rw /dev/loop0 + dd if=/dev/zero bs=512 count=128K of=disk + losetup /dev/loop0 disk + - name: test + run: | + # compile v1 and v2 + make -C v1 + make -C v2 + + # run self-host test with v1 + v1/lfs --format /dev/loop0 + v1/lfs /dev/loop0 mount + + ls mount + mkdir mount/littlefs + cp -r $(git ls-tree --name-only HEAD) mount/littlefs + cd mount/littlefs + stat . + ls -flh + make -B test + + # attempt to migrate + cd ../.. + fusermount -u mount + + v2/lfs --migrate /dev/loop0 + v2/lfs /dev/loop0 mount + + # run self-host test with v2 right where we left off + ls mount + cd mount/littlefs + stat . + ls -flh + make -B test + + # collect coverage info + coverage: + runs-on: ubuntu-18.04 + needs: [test] + steps: + - uses: actions/checkout@v2 + - name: install + run: | + sudo apt-get update -qq + sudo apt-get install -qq python3 python3-pip lcov + sudo pip3 install toml + # yes we continue-on-error nearly every step, continue-on-error + # at job level apparently still marks a job as failed, which isn't + # what we want + - uses: actions/download-artifact@v2 + continue-on-error: true + with: + name: coverage + path: coverage + - name: results-coverage + continue-on-error: true + run: | + mkdir -p results + lcov $(for f in coverage/*.info ; do echo "-a $f" ; done) \ + -o results/coverage.info + ./scripts/coverage.py results/coverage.info -o results/coverage.csv + - name: upload-results + uses: actions/upload-artifact@v2 + with: + name: results + path: results + - name: collect-status + run: | + mkdir -p status + [ -e results/coverage.csv ] || exit 0 + export STEP="results-coverage" + export CONTEXT="results / coverage" + export PREV="$(curl -sS \ + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/status/master" \ + | jq -re 'select(.sha != env.GITHUB_SHA) | .statuses[] + | select(.context == env.CONTEXT).description + | capture("Coverage is (?[0-9\\.]+)").result' \ + || echo 0)" + export DESCRIPTION="$( + ./scripts/coverage.py -u results/coverage.csv -s | awk -F '[ /%]+' ' + NR==2 {printf "Coverage is %.1f%% of %d lines",$4,$3} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",$4-ENVIRON["PREV"]}')" + jq -n '{ + state: "success", + context: env.CONTEXT, + description: env.DESCRIPTION, + target_job: "${{github.job}}", + target_step: env.STEP}' \ + | tee status/coverage.json + - name: upload-status + uses: actions/upload-artifact@v2 + with: + name: status + path: status + retention-days: 1 diff --git a/ext/littlefs/.gitignore b/ext/littlefs/.gitignore new file mode 100644 index 0000000000..a6ebc4c36c --- /dev/null +++ b/ext/littlefs/.gitignore @@ -0,0 +1,12 @@ +# Compilation output +*.o +*.d +*.a + +# Testing things +blocks/ +lfs +test.c +tests/*.toml.* +scripts/__pycache__ +.gdb_history diff --git a/ext/littlefs/DESIGN.md b/ext/littlefs/DESIGN.md new file mode 100644 index 0000000000..1d02ba3bfc --- /dev/null +++ b/ext/littlefs/DESIGN.md @@ -0,0 +1,2173 @@ +## The design of littlefs + +A little fail-safe filesystem designed for microcontrollers. + +``` + | | | .---._____ + .-----. | | +--|o |---| littlefs | +--| |---| | + '-----' '----------' + | | | +``` + +littlefs was originally built as an experiment to learn about filesystem design +in the context of microcontrollers. The question was: How would you build a +filesystem that is resilient to power-loss and flash wear without using +unbounded memory? + +This document covers the high-level design of littlefs, how it is different +than other filesystems, and the design decisions that got us here. For the +low-level details covering every bit on disk, check out [SPEC.md](SPEC.md). + +## The problem + +The embedded systems littlefs targets are usually 32-bit microcontrollers with +around 32 KiB of RAM and 512 KiB of ROM. These are often paired with SPI NOR +flash chips with about 4 MiB of flash storage. These devices are too small for +Linux and most existing filesystems, requiring code written specifically with +size in mind. + +Flash itself is an interesting piece of technology with its own quirks and +nuance. Unlike other forms of storage, writing to flash requires two +operations: erasing and programming. Programming (setting bits to 0) is +relatively cheap and can be very granular. Erasing however (setting bits to 1), +requires an expensive and destructive operation which gives flash its name. +[Wikipedia][wikipedia-flash] has more information on how exactly flash works. + +To make the situation more annoying, it's very common for these embedded +systems to lose power at any time. Usually, microcontroller code is simple and +reactive, with no concept of a shutdown routine. This presents a big challenge +for persistent storage, where an unlucky power loss can corrupt the storage and +leave a device unrecoverable. + +This leaves us with three major requirements for an embedded filesystem. + +1. **Power-loss resilience** - On these systems, power can be lost at any time. + If a power loss corrupts any persistent data structures, this can cause the + device to become unrecoverable. An embedded filesystem must be designed to + recover from a power loss during any write operation. + +1. **Wear leveling** - Writing to flash is destructive. If a filesystem + repeatedly writes to the same block, eventually that block will wear out. + Filesystems that don't take wear into account can easily burn through blocks + used to store frequently updated metadata and cause a device's early death. + +1. **Bounded RAM/ROM** - If the above requirements weren't enough, these + systems also have very limited amounts of memory. This prevents many + existing filesystem designs, which can lean on relatively large amounts of + RAM to temporarily store filesystem metadata. + + For ROM, this means we need to keep our design simple and reuse code paths + were possible. For RAM we have a stronger requirement, all RAM usage is + bounded. This means RAM usage does not grow as the filesystem changes in + size or number of files. This creates a unique challenge as even presumably + simple operations, such as traversing the filesystem, become surprisingly + difficult. + +## Existing designs? + +So, what's already out there? There are, of course, many different filesystems, +however they often share and borrow feature from each other. If we look at +power-loss resilience and wear leveling, we can narrow these down to a handful +of designs. + +1. First we have the non-resilient, block based filesystems, such as [FAT] and + [ext2]. These are the earliest filesystem designs and often the most simple. + Here storage is divided into blocks, with each file being stored in a + collection of blocks. Without modifications, these filesystems are not + power-loss resilient, so updating a file is a simple as rewriting the blocks + in place. + + ``` + .--------. + | root | + | | + | | + '--------' + .-' '-. + v v + .--------. .--------. + | A | | B | + | | | | + | | | | + '--------' '--------' + .-' .-' '-. + v v v + .--------. .--------. .--------. + | C | | D | | E | + | | | | | | + | | | | | | + '--------' '--------' '--------' + ``` + + Because of their simplicity, these filesystems are usually both the fastest + and smallest. However the lack of power resilience is not great, and the + binding relationship of storage location and data removes the filesystem's + ability to manage wear. + +2. In a completely different direction, we have logging filesystems, such as + [JFFS], [YAFFS], and [SPIFFS], storage location is not bound to a piece of + data, instead the entire storage is used for a circular log which is + appended with every change made to the filesystem. Writing appends new + changes, while reading requires traversing the log to reconstruct a file. + Some logging filesystems cache files to avoid the read cost, but this comes + at a tradeoff of RAM. + + ``` + v + .--------.--------.--------.--------.--------.--------.--------.--------. + | C | new B | new A | | A | B | + | | | |-> | | | + | | | | | | | + '--------'--------'--------'--------'--------'--------'--------'--------' + ``` + + Logging filesystem are beautifully elegant. With a checksum, we can easily + detect power-loss and fall back to the previous state by ignoring failed + appends. And if that wasn't good enough, their cyclic nature means that + logging filesystems distribute wear across storage perfectly. + + The main downside is performance. If we look at garbage collection, the + process of cleaning up outdated data from the end of the log, I've yet to + see a pure logging filesystem that does not have one of these two costs: + + 1. _O(n²)_ runtime + 2. _O(n)_ RAM + + SPIFFS is a very interesting case here, as it uses the fact that repeated + programs to NOR flash is both atomic and masking. This is a very neat + solution, however it limits the type of storage you can support. + +3. Perhaps the most common type of filesystem, a journaling filesystem is the + offspring that happens when you mate a block based filesystem with a logging + filesystem. [ext4] and [NTFS] are good examples. Here, we take a normal + block based filesystem and add a bounded log where we note every change + before it occurs. + + ``` + journal + .--------.--------. + .--------. | C'| D'| | E'| + | root |-->| | |-> | | + | | | | | | | + | | '--------'--------' + '--------' + .-' '-. + v v + .--------. .--------. + | A | | B | + | | | | + | | | | + '--------' '--------' + .-' .-' '-. + v v v + .--------. .--------. .--------. + | C | | D | | E | + | | | | | | + | | | | | | + '--------' '--------' '--------' + ``` + + + This sort of filesystem takes the best from both worlds. Performance can be + as fast as a block based filesystem (though updating the journal does have + a small cost), and atomic updates to the journal allow the filesystem to + recover in the event of a power loss. + + Unfortunately, journaling filesystems have a couple of problems. They are + fairly complex, since there are effectively two filesystems running in + parallel, which comes with a code size cost. They also offer no protection + against wear because of the strong relationship between storage location + and data. + +4. Last but not least we have copy-on-write (COW) filesystems, such as + [btrfs] and [ZFS]. These are very similar to other block based filesystems, + but instead of updating block inplace, all updates are performed by creating + a copy with the changes and replacing any references to the old block with + our new block. This recursively pushes all of our problems upwards until we + reach the root of our filesystem, which is often stored in a very small log. + + ``` + .--------. .--------. + | root | write |new root| + | | ==> | | + | | | | + '--------' '--------' + .-' '-. | '-. + | .-------|------------------' v + v v v .--------. + .--------. .--------. | new B | + | A | | B | | | + | | | | | | + | | | | '--------' + '--------' '--------' .-' | + .-' .-' '-. .------------|------' + | | | | v + v v v v .--------. + .--------. .--------. .--------. | new D | + | C | | D | | E | | | + | | | | | | | | + | | | | | | '--------' + '--------' '--------' '--------' + ``` + + COW filesystems are interesting. They offer very similar performance to + block based filesystems while managing to pull off atomic updates without + storing data changes directly in a log. They even disassociate the storage + location of data, which creates an opportunity for wear leveling. + + Well, almost. The unbounded upwards movement of updates causes some + problems. Because updates to a COW filesystem don't stop until they've + reached the root, an update can cascade into a larger set of writes than + would be needed for the original data. On top of this, the upward motion + focuses these writes into the block, which can wear out much earlier than + the rest of the filesystem. + +## littlefs + +So what does littlefs do? + +If we look at existing filesystems, there are two interesting design patterns +that stand out, but each have their own set of problems. Logging, which +provides independent atomicity, has poor runtime performance. And COW data +structures, which perform well, push the atomicity problem upwards. + +Can we work around these limitations? + +Consider logging. It has either a _O(n²)_ runtime or _O(n)_ RAM cost. We +can't avoid these costs, _but_ if we put an upper bound on the size we can at +least prevent the theoretical cost from becoming problem. This relies on the +super secret computer science hack where you can pretend any algorithmic +complexity is _O(1)_ by bounding the input. + +In the case of COW data structures, we can try twisting the definition a bit. +Let's say that our COW structure doesn't copy after a single write, but instead +copies after _n_ writes. This doesn't change most COW properties (assuming you +can write atomically!), but what it does do is prevent the upward motion of +wear. This sort of copy-on-bounded-writes (CObW) still focuses wear, but at +each level we divide the propagation of wear by _n_. With a sufficiently +large _n_ (> branching factor) wear propagation is no longer a problem. + +See where this is going? Separate, logging and COW are imperfect solutions and +have weaknesses that limit their usefulness. But if we merge the two they can +mutually solve each other's limitations. + +This is the idea behind littlefs. At the sub-block level, littlefs is built +out of small, two block logs that provide atomic updates to metadata anywhere +on the filesystem. At the super-block level, littlefs is a CObW tree of blocks +that can be evicted on demand. + +``` + root + .--------.--------. + | A'| B'| | + | | |-> | + | | | | + '--------'--------' + .----' '--------------. + A v B v + .--------.--------. .--------.--------. + | C'| D'| | | E'|new| | + | | |-> | | | E'|-> | + | | | | | | | | + '--------'--------' '--------'--------' + .-' '--. | '------------------. + v v .-' v +.--------. .--------. v .--------. +| C | | D | .--------. write | new E | +| | | | | E | ==> | | +| | | | | | | | +'--------' '--------' | | '--------' + '--------' .-' | + .-' '-. .-------------|------' + v v v v + .--------. .--------. .--------. + | F | | G | | new F | + | | | | | | + | | | | | | + '--------' '--------' '--------' +``` + +There are still some minor issues. Small logs can be expensive in terms of +storage, in the worst case a small log costs 4x the size of the original data. +CObW structures require an efficient block allocator since allocation occurs +every _n_ writes. And there is still the challenge of keeping the RAM usage +constant. + +## Metadata pairs + +Metadata pairs are the backbone of littlefs. These are small, two block logs +that allow atomic updates anywhere in the filesystem. + +Why two blocks? Well, logs work by appending entries to a circular buffer +stored on disk. But remember that flash has limited write granularity. We can +incrementally program new data onto erased blocks, but we need to erase a full +block at a time. This means that in order for our circular buffer to work, we +need more than one block. + +We could make our logs larger than two blocks, but the next challenge is how +do we store references to these logs? Because the blocks themselves are erased +during writes, using a data structure to track these blocks is complicated. +The simple solution here is to store a two block addresses for every metadata +pair. This has the added advantage that we can change out blocks in the +metadata pair independently, and we don't reduce our block granularity for +other operations. + +In order to determine which metadata block is the most recent, we store a +revision count that we compare using [sequence arithmetic][wikipedia-sna] +(very handy for avoiding problems with integer overflow). Conveniently, this +revision count also gives us a rough idea of how many erases have occurred on +the block. + +``` +metadata pair pointer: {block 0, block 1} + | '--------------------. + '-. | +disk v v +.--------.--------.--------.--------.--------.--------.--------.--------. +| | |metadata| |metadata| | +| | |block 0 | |block 1 | | +| | | | | | | +'--------'--------'--------'--------'--------'--------'--------'--------' + '--. .----' + v v + metadata pair .----------------.----------------. + | revision 11 | revision 12 | + block 1 is |----------------|----------------| + most recent | A | A'' | + |----------------|----------------| + | checksum | checksum | + |----------------|----------------| + | B | A''' | <- most recent A + |----------------|----------------| + | A'' | checksum | + |----------------|----------------| + | checksum | | | + |----------------| v | + '----------------'----------------' +``` + +So how do we atomically update our metadata pairs? Atomicity (a type of +power-loss resilience) requires two parts: redundancy and error detection. +Error detection can be provided with a checksum, and in littlefs's case we +use a 32-bit [CRC][wikipedia-crc]. Maintaining redundancy, on the other hand, +requires multiple stages. + +1. If our block is not full and the program size is small enough to let us + append more entries, we can simply append the entries to the log. Because + we don't overwrite the original entries (remember rewriting flash requires + an erase), we still have the original entries if we lose power during the + append. + + ``` + commit A + .----------------.----------------. .----------------.----------------. + | revision 1 | revision 0 | => | revision 1 | revision 0 | + |----------------|----------------| |----------------|----------------| + | | | | | A | | + | v | | |----------------| | + | | | | checksum | | + | | | |----------------| | + | | | | | | | + | | | | v | | + | | | | | | + | | | | | | + | | | | | | + | | | | | | + '----------------'----------------' '----------------'----------------' + ``` + + Note that littlefs doesn't maintain a checksum for each entry. Many logging + filesystems do this, but it limits what you can update in a single atomic + operation. What we can do instead is group multiple entries into a commit + that shares a single checksum. This lets us update multiple unrelated pieces + of metadata as long as they reside on the same metadata pair. + + ``` + commit B and A' + .----------------.----------------. .----------------.----------------. + | revision 1 | revision 0 | => | revision 1 | revision 0 | + |----------------|----------------| |----------------|----------------| + | A | | | A | | + |----------------| | |----------------| | + | checksum | | | checksum | | + |----------------| | |----------------| | + | | | | | B | | + | v | | |----------------| | + | | | | A' | | + | | | |----------------| | + | | | | checksum | | + | | | |----------------| | + '----------------'----------------' '----------------'----------------' + ``` + +2. If our block _is_ full of entries, we need to somehow remove outdated + entries to make space for new ones. This process is called garbage + collection, but because littlefs has multiple garbage collectors, we + also call this specific case compaction. + + Compared to other filesystems, littlefs's garbage collector is relatively + simple. We want to avoid RAM consumption, so we use a sort of brute force + solution where for each entry we check to see if a newer entry has been + written. If the entry is the most recent we append it to our new block. This + is where having two blocks becomes important, if we lose power we still have + everything in our original block. + + During this compaction step we also erase the metadata block and increment + the revision count. Because we can commit multiple entries at once, we can + write all of these changes to the second block without worrying about power + loss. It's only when the commit's checksum is written that the compacted + entries and revision count become committed and readable. + + ``` + commit B', need to compact + .----------------.----------------. .----------------.----------------. + | revision 1 | revision 0 | => | revision 1 | revision 2 | + |----------------|----------------| |----------------|----------------| + | A | | | A | A' | + |----------------| | |----------------|----------------| + | checksum | | | checksum | B' | + |----------------| | |----------------|----------------| + | B | | | B | checksum | + |----------------| | |----------------|----------------| + | A' | | | A' | | | + |----------------| | |----------------| v | + | checksum | | | checksum | | + |----------------| | |----------------| | + '----------------'----------------' '----------------'----------------' + ``` + +3. If our block is full of entries _and_ we can't find any garbage, then what? + At this point, most logging filesystems would return an error indicating no + more space is available, but because we have small logs, overflowing a log + isn't really an error condition. + + Instead, we split our original metadata pair into two metadata pairs, each + containing half of the entries, connected by a tail pointer. Instead of + increasing the size of the log and dealing with the scalability issues + associated with larger logs, we form a linked list of small bounded logs. + This is a tradeoff as this approach does use more storage space, but at the + benefit of improved scalability. + + Despite writing to two metadata pairs, we can still maintain power + resilience during this split step by first preparing the new metadata pair, + and then inserting the tail pointer during the commit to the original + metadata pair. + + ``` + commit C and D, need to split + .----------------.----------------. .----------------.----------------. + | revision 1 | revision 2 | => | revision 3 | revision 2 | + |----------------|----------------| |----------------|----------------| + | A | A' | | A' | A' | + |----------------|----------------| |----------------|----------------| + | checksum | B' | | B' | B' | + |----------------|----------------| |----------------|----------------| + | B | checksum | | tail ---------------------. + |----------------|----------------| |----------------|----------------| | + | A' | | | | checksum | | | + |----------------| v | |----------------| | | + | checksum | | | | | | | + |----------------| | | v | | | + '----------------'----------------' '----------------'----------------' | + .----------------.---------' + v v + .----------------.----------------. + | revision 1 | revision 0 | + |----------------|----------------| + | C | | + |----------------| | + | D | | + |----------------| | + | checksum | | + |----------------| | + | | | | + | v | | + | | | + | | | + '----------------'----------------' + ``` + +There is another complexity the crops up when dealing with small logs. The +amortized runtime cost of garbage collection is not only dependent on its +one time cost (_O(n²)_ for littlefs), but also depends on how often +garbage collection occurs. + +Consider two extremes: + +1. Log is empty, garbage collection occurs once every _n_ updates +2. Log is full, garbage collection occurs **every** update + +Clearly we need to be more aggressive than waiting for our metadata pair to +be full. As the metadata pair approaches fullness the frequency of compactions +grows very rapidly. + +Looking at the problem generically, consider a log with ![n] bytes for each +entry, ![d] dynamic entries (entries that are outdated during garbage +collection), and ![s] static entries (entries that need to be copied during +garbage collection). If we look at the amortized runtime complexity of updating +this log we get this formula: + +![cost = n + n (s / d+1)][metadata-formula1] + +If we let ![r] be the ratio of static space to the size of our log in bytes, we +find an alternative representation of the number of static and dynamic entries: + +![s = r (size/n)][metadata-formula2] + +![d = (1 - r) (size/n)][metadata-formula3] + +Substituting these in for ![d] and ![s] gives us a nice formula for the cost of +updating an entry given how full the log is: + +![cost = n + n (r (size/n) / ((1-r) (size/n) + 1))][metadata-formula4] + +Assuming 100 byte entries in a 4 KiB log, we can graph this using the entry +size to find a multiplicative cost: + +![Metadata pair update cost graph][metadata-cost-graph] + +So at 50% usage, we're seeing an average of 2x cost per update, and at 75% +usage, we're already at an average of 4x cost per update. + +To avoid this exponential growth, instead of waiting for our metadata pair +to be full, we split the metadata pair once we exceed 50% capacity. We do this +lazily, waiting until we need to compact before checking if we fit in our 50% +limit. This limits the overhead of garbage collection to 2x the runtime cost, +giving us an amortized runtime complexity of _O(1)_. + +--- + +If we look at metadata pairs and linked-lists of metadata pairs at a high +level, they have fairly nice runtime costs. Assuming _n_ metadata pairs, +each containing _m_ metadata entries, the _lookup_ cost for a specific +entry has a worst case runtime complexity of _O(nm)_. For _updating_ a specific +entry, the worst case complexity is _O(nm²)_, with an amortized complexity +of only _O(nm)_. + +However, splitting at 50% capacity does mean that in the best case our +metadata pairs will only be 1/2 full. If we include the overhead of the second +block in our metadata pair, each metadata entry has an effective storage cost +of 4x the original size. I imagine users would not be happy if they found +that they can only use a quarter of their original storage. Metadata pairs +provide a mechanism for performing atomic updates, but we need a separate +mechanism for storing the bulk of our data. + +## CTZ skip-lists + +Metadata pairs provide efficient atomic updates but unfortunately have a large +storage cost. But we can work around this storage cost by only using the +metadata pairs to store references to more dense, copy-on-write (COW) data +structures. + +[Copy-on-write data structures][wikipedia-cow], also called purely functional +data structures, are a category of data structures where the underlying +elements are immutable. Making changes to the data requires creating new +elements containing a copy of the updated data and replacing any references +with references to the new elements. Generally, the performance of a COW data +structure depends on how many old elements can be reused after replacing parts +of the data. + +littlefs has several requirements of its COW structures. They need to be +efficient to read and write, but most frustrating, they need to be traversable +with a constant amount of RAM. Notably this rules out +[B-trees][wikipedia-B-tree], which can not be traversed with constant RAM, and +[B+-trees][wikipedia-B+-tree], which are not possible to update with COW +operations. + +--- + +So, what can we do? First let's consider storing files in a simple COW +linked-list. Appending a block, which is the basis for writing files, means we +have to update the last block to point to our new block. This requires a COW +operation, which means we need to update the second-to-last block, and then the +third-to-last, and so on until we've copied out the entire file. + +``` +A linked-list +.--------. .--------. .--------. .--------. .--------. .--------. +| data 0 |->| data 1 |->| data 2 |->| data 4 |->| data 5 |->| data 6 | +| | | | | | | | | | | | +| | | | | | | | | | | | +'--------' '--------' '--------' '--------' '--------' '--------' +``` + +To avoid a full copy during appends, we can store the data backwards. Appending +blocks just requires adding the new block and no other blocks need to be +updated. If we update a block in the middle, we still need to copy the +following blocks, but can reuse any blocks before it. Since most file writes +are linear, this design gambles that appends are the most common type of data +update. + +``` +A backwards linked-list +.--------. .--------. .--------. .--------. .--------. .--------. +| data 0 |<-| data 1 |<-| data 2 |<-| data 4 |<-| data 5 |<-| data 6 | +| | | | | | | | | | | | +| | | | | | | | | | | | +'--------' '--------' '--------' '--------' '--------' '--------' +``` + +However, a backwards linked-list does have a rather glaring problem. Iterating +over a file _in order_ has a runtime cost of _O(n²)_. A quadratic runtime +just to read a file! That's awful. + +Fortunately we can do better. Instead of a singly linked list, littlefs +uses a multilayered linked-list often called a +[skip-list][wikipedia-skip-list]. However, unlike the most common type of +skip-list, littlefs's skip-lists are strictly deterministic built around some +interesting properties of the count-trailing-zeros (CTZ) instruction. + +The rules CTZ skip-lists follow are that for every _n_‍th block where _n_ +is divisible by 2‍_ˣ_, that block contains a pointer to block +_n_-2‍_ˣ_. This means that each block contains anywhere from 1 to +log₂_n_ pointers that skip to different preceding elements of the +skip-list. + +The name comes from heavy use of the [CTZ instruction][wikipedia-ctz], which +lets us calculate the power-of-two factors efficiently. For a give block _n_, +that block contains ctz(_n_)+1 pointers. + +``` +A backwards CTZ skip-list +.--------. .--------. .--------. .--------. .--------. .--------. +| data 0 |<-| data 1 |<-| data 2 |<-| data 3 |<-| data 4 |<-| data 5 | +| |<-| |--| |<-| |--| | | | +| |<-| |--| |--| |--| | | | +'--------' '--------' '--------' '--------' '--------' '--------' +``` + +The additional pointers let us navigate the data-structure on disk much more +efficiently than in a singly linked list. + +Consider a path from data block 5 to data block 1. You can see how data block 3 +was completely skipped: +``` +.--------. .--------. .--------. .--------. .--------. .--------. +| data 0 | | data 1 |<-| data 2 | | data 3 | | data 4 |<-| data 5 | +| | | | | |<-| |--| | | | +| | | | | | | | | | | | +'--------' '--------' '--------' '--------' '--------' '--------' +``` + +The path to data block 0 is even faster, requiring only two jumps: +``` +.--------. .--------. .--------. .--------. .--------. .--------. +| data 0 | | data 1 | | data 2 | | data 3 | | data 4 |<-| data 5 | +| | | | | | | | | | | | +| |<-| |--| |--| |--| | | | +'--------' '--------' '--------' '--------' '--------' '--------' +``` + +We can find the runtime complexity by looking at the path to any block from +the block containing the most pointers. Every step along the path divides +the search space for the block in half, giving us a runtime of _O(log n)_. +To get _to_ the block with the most pointers, we can perform the same steps +backwards, which puts the runtime at _O(2 log n)_ = _O(log n)_. An interesting +note is that this optimal path occurs naturally if we greedily choose the +pointer that covers the most distance without passing our target. + +So now we have a [COW] data structure that is cheap to append with a runtime +of _O(1)_, and can be read with a worst case runtime of _O(n log n)_. Given +that this runtime is also divided by the amount of data we can store in a +block, this cost is fairly reasonable. + +--- + +This is a new data structure, so we still have several questions. What is the +storage overhead? Can the number of pointers exceed the size of a block? How do +we store a CTZ skip-list in our metadata pairs? + +To find the storage overhead, we can look at the data structure as multiple +linked-lists. Each linked-list skips twice as many blocks as the previous, +or from another perspective, each linked-list uses half as much storage as +the previous. As we approach infinity, the storage overhead forms a geometric +series. Solving this tells us that on average our storage overhead is only +2 pointers per block. + +![lim,n->inf((1/n)sum,i,0->n(ctz(i)+1)) = sum,i,0->inf(1/2^i) = 2][ctz-formula1] + +Because our file size is limited the word width we use to store sizes, we can +also solve for the maximum number of pointers we would ever need to store in a +block. If we set the overhead of pointers equal to the block size, we get the +following equation. Note that both a smaller block size (![B][bigB]) and larger +word width (![w]) result in more storage overhead. + +![B = (w/8)ceil(log2(2^w / (B-2w/8)))][ctz-formula2] + +Solving the equation for ![B][bigB] gives us the minimum block size for some +common word widths: + +1. 32-bit CTZ skip-list => minimum block size of 104 bytes +2. 64-bit CTZ skip-list => minimum block size of 448 bytes + +littlefs uses a 32-bit word width, so our blocks can only overflow with +pointers if they are smaller than 104 bytes. This is an easy requirement, as +in practice, most block sizes start at 512 bytes. As long as our block size +is larger than 104 bytes, we can avoid the extra logic needed to handle +pointer overflow. + +This last question is how do we store CTZ skip-lists? We need a pointer to the +head block, the size of the skip-list, the index of the head block, and our +offset in the head block. But it's worth noting that each size maps to a unique +index + offset pair. So in theory we can store only a single pointer and size. + +However, calculating the index + offset pair from the size is a bit +complicated. We can start with a summation that loops through all of the blocks +up until our given size. Let ![B][bigB] be the block size in bytes, ![w] be the +word width in bits, ![n] be the index of the block in the skip-list, and +![N][bigN] be the file size in bytes: + +![N = sum,i,0->n(B-(w/8)(ctz(i)+1))][ctz-formula3] + +This works quite well, but requires _O(n)_ to compute, which brings the full +runtime of reading a file up to _O(n² log n)_. Fortunately, that summation +doesn't need to touch the disk, so the practical impact is minimal. + +However, despite the integration of a bitwise operation, we can actually reduce +this equation to a _O(1)_ form. While browsing the amazing resource that is +the [On-Line Encyclopedia of Integer Sequences (OEIS)][oeis], I managed to find +[A001511], which matches the iteration of the CTZ instruction, +and [A005187], which matches its partial summation. Much to my +surprise, these both result from simple equations, leading us to a rather +unintuitive property that ties together two seemingly unrelated bitwise +instructions: + +![sum,i,0->n(ctz(i)+1) = 2n-popcount(n)][ctz-formula4] + +where: + +1. ctz(![x]) = the number of trailing bits that are 0 in ![x] +2. popcount(![x]) = the number of bits that are 1 in ![x] + +Initial tests of this surprising property seem to hold. As ![n] approaches +infinity, we end up with an average overhead of 2 pointers, which matches our +assumption from earlier. During iteration, the popcount function seems to +handle deviations from this average. Of course, just to make sure I wrote a +quick script that verified this property for all 32-bit integers. + +Now we can substitute into our original equation to find a more efficient +equation for file size: + +![N = Bn - (w/8)(2n-popcount(n))][ctz-formula5] + +Unfortunately, the popcount function is non-injective, so we can't solve this +equation for our index. But what we can do is solve for an ![n'] index that +is greater than ![n] with error bounded by the range of the popcount function. +We can repeatedly substitute ![n'] into the original equation until the error +is smaller than our integer resolution. As it turns out, we only need to +perform this substitution once, which gives us this formula for our index: + +![n = floor((N-(w/8)popcount(N/(B-2w/8))) / (B-2w/8))][ctz-formula6] + +Now that we have our index ![n], we can just plug it back into the above +equation to find the offset. We run into a bit of a problem with integer +overflow, but we can avoid this by rearranging the equation a bit: + +![off = N - (B-2w/8)n - (w/8)popcount(n)][ctz-formula7] + +Our solution requires quite a bit of math, but computers are very good at math. +Now we can find both our block index and offset from a size in _O(1)_, letting +us store CTZ skip-lists with only a pointer and size. + +CTZ skip-lists give us a COW data structure that is easily traversable in +_O(n)_, can be appended in _O(1)_, and can be read in _O(n log n)_. All of +these operations work in a bounded amount of RAM and require only two words of +storage overhead per block. In combination with metadata pairs, CTZ skip-lists +provide power resilience and compact storage of data. + +``` + .--------. + .|metadata| + || | + || | + |'--------' + '----|---' + v +.--------. .--------. .--------. .--------. +| data 0 |<-| data 1 |<-| data 2 |<-| data 3 | +| |<-| |--| | | | +| | | | | | | | +'--------' '--------' '--------' '--------' + +write data to disk, create copies +=> + .--------. + .|metadata| + || | + || | + |'--------' + '----|---' + v +.--------. .--------. .--------. .--------. +| data 0 |<-| data 1 |<-| data 2 |<-| data 3 | +| |<-| |--| | | | +| | | | | | | | +'--------' '--------' '--------' '--------' + ^ ^ ^ + | | | .--------. .--------. .--------. .--------. + | | '----| new |<-| new |<-| new |<-| new | + | '----------------| data 2 |<-| data 3 |--| data 4 | | data 5 | + '------------------| |--| |--| | | | + '--------' '--------' '--------' '--------' + +commit to metadata pair +=> + .--------. + .|new | + ||metadata| + || | + |'--------' + '----|---' + | +.--------. .--------. .--------. .--------. | +| data 0 |<-| data 1 |<-| data 2 |<-| data 3 | | +| |<-| |--| | | | | +| | | | | | | | | +'--------' '--------' '--------' '--------' | + ^ ^ ^ v + | | | .--------. .--------. .--------. .--------. + | | '----| new |<-| new |<-| new |<-| new | + | '----------------| data 2 |<-| data 3 |--| data 4 | | data 5 | + '------------------| |--| |--| | | | + '--------' '--------' '--------' '--------' +``` + +## The block allocator + +So we now have the framework for an atomic, wear leveling filesystem. Small two +block metadata pairs provide atomic updates, while CTZ skip-lists provide +compact storage of data in COW blocks. + +But now we need to look at the [elephant] in the room. Where do all these +blocks come from? + +Deciding which block to use next is the responsibility of the block allocator. +In filesystem design, block allocation is often a second-class citizen, but in +a COW filesystem its role becomes much more important as it is needed for +nearly every write to the filesystem. + +Normally, block allocation involves some sort of free list or bitmap stored on +the filesystem that is updated with free blocks. However, with power +resilience, keeping these structures consistent becomes difficult. It doesn't +help that any mistake in updating these structures can result in lost blocks +that are impossible to recover. + +littlefs takes a cautious approach. Instead of trusting a free list on disk, +littlefs relies on the fact that the filesystem on disk is a mirror image of +the free blocks on the disk. The block allocator operates much like a garbage +collector in a scripting language, scanning for unused blocks on demand. + +``` + .----. + |root| + | | + '----' + v-------' '-------v +.----. . . .----. +| A | . . | B | +| | . . | | +'----' . . '----' +. . . . v--' '------------v---------v +. . . .----. . .----. .----. +. . . | C | . | D | | E | +. . . | | . | | | | +. . . '----' . '----' '----' +. . . . . . . . . . +.----.----.----.----.----.----.----.----.----.----.----.----. +| A | |root| C | B | | D | | E | | +| | | | | | | | | | | +'----'----'----'----'----'----'----'----'----'----'----'----' + ^ ^ ^ ^ ^ + '-------------------'----'-------------------'----'-- free blocks +``` + +While this approach may sound complicated, the decision to not maintain a free +list greatly simplifies the overall design of littlefs. Unlike programming +languages, there are only a handful of data structures we need to traverse. +And block deallocation, which occurs nearly as often as block allocation, +is simply a noop. This "drop it on the floor" strategy greatly reduces the +complexity of managing on disk data structures, especially when handling +high-risk error conditions. + +--- + +Our block allocator needs to find free blocks efficiently. You could traverse +through every block on storage and check each one against our filesystem tree; +however, the runtime would be abhorrent. We need to somehow collect multiple +blocks per traversal. + +Looking at existing designs, some larger filesystems that use a similar "drop +it on the floor" strategy store a bitmap of the entire storage in [RAM]. This +works well because bitmaps are surprisingly compact. We can't use the same +strategy here, as it violates our constant RAM requirement, but we may be able +to modify the idea into a workable solution. + +``` +.----.----.----.----.----.----.----.----.----.----.----.----. +| A | |root| C | B | | D | | E | | +| | | | | | | | | | | +'----'----'----'----'----'----'----'----'----'----'----'----' + 1 0 1 1 1 0 0 1 0 1 0 0 + \---------------------------+----------------------------/ + v + bitmap: 0xb94 (0b101110010100) +``` + +The block allocator in littlefs is a compromise between a disk-sized bitmap and +a brute force traversal. Instead of a bitmap the size of storage, we keep track +of a small, fixed-size bitmap called the lookahead buffer. During block +allocation, we take blocks from the lookahead buffer. If the lookahead buffer +is empty, we scan the filesystem for more free blocks, populating our lookahead +buffer. In each scan we use an increasing offset, circling the storage as +blocks are allocated. + +Here's what it might look like to allocate 4 blocks on a decently busy +filesystem with a 32 bit lookahead and a total of 128 blocks (512 KiB +of storage if blocks are 4 KiB): +``` +boot... lookahead: + fs blocks: fffff9fffffffffeffffffffffff0000 +scanning... lookahead: fffff9ff + fs blocks: fffff9fffffffffeffffffffffff0000 +alloc = 21 lookahead: fffffdff + fs blocks: fffffdfffffffffeffffffffffff0000 +alloc = 22 lookahead: ffffffff + fs blocks: fffffffffffffffeffffffffffff0000 +scanning... lookahead: fffffffe + fs blocks: fffffffffffffffeffffffffffff0000 +alloc = 63 lookahead: ffffffff + fs blocks: ffffffffffffffffffffffffffff0000 +scanning... lookahead: ffffffff + fs blocks: ffffffffffffffffffffffffffff0000 +scanning... lookahead: ffffffff + fs blocks: ffffffffffffffffffffffffffff0000 +scanning... lookahead: ffff0000 + fs blocks: ffffffffffffffffffffffffffff0000 +alloc = 112 lookahead: ffff8000 + fs blocks: ffffffffffffffffffffffffffff8000 +``` + +This lookahead approach has a runtime complexity of _O(n²)_ to completely +scan storage; however, bitmaps are surprisingly compact, and in practice only +one or two passes are usually needed to find free blocks. Additionally, the +performance of the allocator can be optimized by adjusting the block size or +size of the lookahead buffer, trading either write granularity or RAM for +allocator performance. + +## Wear leveling + +The block allocator has a secondary role: wear leveling. + +Wear leveling is the process of distributing wear across all blocks in the +storage to prevent the filesystem from experiencing an early death due to +wear on a single block in the storage. + +littlefs has two methods of protecting against wear: +1. Detection and recovery from bad blocks +2. Evenly distributing wear across dynamic blocks + +--- + +Recovery from bad blocks doesn't actually have anything to do with the block +allocator itself. Instead, it relies on the ability of the filesystem to detect +and evict bad blocks when they occur. + +In littlefs, it is fairly straightforward to detect bad blocks at write time. +All writes must be sourced by some form of data in RAM, so immediately after we +write to a block, we can read the data back and verify that it was written +correctly. If we find that the data on disk does not match the copy we have in +RAM, a write error has occurred and we most likely have a bad block. + +Once we detect a bad block, we need to recover from it. In the case of write +errors, we have a copy of the corrupted data in RAM, so all we need to do is +evict the bad block, allocate a new, hopefully good block, and repeat the write +that previously failed. + +The actual act of evicting the bad block and replacing it with a new block is +left up to the filesystem's copy-on-bounded-writes (CObW) data structures. One +property of CObW data structures is that any block can be replaced during a +COW operation. The bounded-writes part is normally triggered by a counter, but +nothing prevents us from triggering a COW operation as soon as we find a bad +block. + +``` + .----. + |root| + | | + '----' + v--' '----------------------v +.----. .----. +| A | | B | +| | | | +'----' '----' +. . v---' . +. . .----. . +. . | C | . +. . | | . +. . '----' . +. . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| | C | B | | +| | | | | | | +'----'----'----'----'----'----'----'----'----'----' + +update C +=> + .----. + |root| + | | + '----' + v--' '----------------------v +.----. .----. +| A | | B | +| | | | +'----' '----' +. . v---' . +. . .----. . +. . |bad | . +. . |blck| . +. . '----' . +. . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| |bad | B | | +| | | |blck| | | +'----'----'----'----'----'----'----'----'----'----' + +oh no! bad block! relocate C +=> + .----. + |root| + | | + '----' + v--' '----------------------v +.----. .----. +| A | | B | +| | | | +'----' '----' +. . v---' . +. . .----. . +. . |bad | . +. . |blck| . +. . '----' . +. . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| |bad | B |bad | | +| | | |blck| |blck| | +'----'----'----'----'----'----'----'----'----'----' + ---------> +oh no! bad block! relocate C +=> + .----. + |root| + | | + '----' + v--' '----------------------v +.----. .----. +| A | | B | +| | | | +'----' '----' +. . v---' . +. . .----. . .----. +. . |bad | . | C' | +. . |blck| . | | +. . '----' . '----' +. . . . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| |bad | B |bad | C' | | +| | | |blck| |blck| | | +'----'----'----'----'----'----'----'----'----'----' + --------------> +successfully relocated C, update B +=> + .----. + |root| + | | + '----' + v--' '----------------------v +.----. .----. +| A | |bad | +| | |blck| +'----' '----' +. . v---' . +. . .----. . .----. +. . |bad | . | C' | +. . |blck| . | | +. . '----' . '----' +. . . . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| |bad |bad |bad | C' | | +| | | |blck|blck|blck| | | +'----'----'----'----'----'----'----'----'----'----' + +oh no! bad block! relocate B +=> + .----. + |root| + | | + '----' + v--' '----------------------v +.----. .----. .----. +| A | |bad | |bad | +| | |blck| |blck| +'----' '----' '----' +. . v---' . . . +. . .----. . .----. . +. . |bad | . | C' | . +. . |blck| . | | . +. . '----' . '----' . +. . . . . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| |bad |bad |bad | C' |bad | +| | | |blck|blck|blck| |blck| +'----'----'----'----'----'----'----'----'----'----' + --------------> +oh no! bad block! relocate B +=> + .----. + |root| + | | + '----' + v--' '----------------------v +.----. .----. .----. +| A | | B' | |bad | +| | | | |blck| +'----' '----' '----' +. . . | . .---' . +. . . '--------------v-------------v +. . . . .----. . .----. +. . . . |bad | . | C' | +. . . . |blck| . | | +. . . . '----' . '----' +. . . . . . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| B' | |bad |bad |bad | C' |bad | +| | | | |blck|blck|blck| |blck| +'----'----'----'----'----'----'----'----'----'----' +------------> ------------------ +successfully relocated B, update root +=> + .----. + |root| + | | + '----' + v--' '--v +.----. .----. +| A | | B' | +| | | | +'----' '----' +. . . '---------------------------v +. . . . .----. +. . . . | C' | +. . . . | | +. . . . '----' +. . . . . . +.----.----.----.----.----.----.----.----.----.----. +| A |root| B' | |bad |bad |bad | C' |bad | +| | | | |blck|blck|blck| |blck| +'----'----'----'----'----'----'----'----'----'----' +``` + +We may find that the new block is also bad, but hopefully after repeating this +cycle we'll eventually find a new block where a write succeeds. If we don't, +that means that all blocks in our storage are bad, and we've reached the end of +our device's usable life. At this point, littlefs will return an "out of space" +error. This is technically true, as there are no more good blocks, but as an +added benefit it also matches the error condition expected by users of +dynamically sized data. + +--- + +Read errors, on the other hand, are quite a bit more complicated. We don't have +a copy of the data lingering around in RAM, so we need a way to reconstruct the +original data even after it has been corrupted. One such mechanism for this is +[error-correction-codes (ECC)][wikipedia-ecc]. + +ECC is an extension to the idea of a checksum. Where a checksum such as CRC can +detect that an error has occurred in the data, ECC can detect and actually +correct some amount of errors. However, there is a limit to how many errors ECC +can detect: the [Hamming bound][wikipedia-hamming-bound]. As the number of +errors approaches the Hamming bound, we may still be able to detect errors, but +can no longer fix the data. If we've reached this point the block is +unrecoverable. + +littlefs by itself does **not** provide ECC. The block nature and relatively +large footprint of ECC does not work well with the dynamically sized data of +filesystems, correcting errors without RAM is complicated, and ECC fits better +with the geometry of block devices. In fact, several NOR flash chips have extra +storage intended for ECC, and many NAND chips can even calculate ECC on the +chip itself. + +In littlefs, ECC is entirely optional. Read errors can instead be prevented +proactively by wear leveling. But it's important to note that ECC can be used +at the block device level to modestly extend the life of a device. littlefs +respects any errors reported by the block device, allowing a block device to +provide additional aggressive error detection. + +--- + +To avoid read errors, we need to be proactive, as opposed to reactive as we +were with write errors. + +One way to do this is to detect when the number of errors in a block exceeds +some threshold, but is still recoverable. With ECC we can do this at write +time, and treat the error as a write error, evicting the block before fatal +read errors have a chance to develop. + +A different, more generic strategy, is to proactively distribute wear across +all blocks in the storage, with the hope that no single block fails before the +rest of storage is approaching the end of its usable life. This is called +wear leveling. + +Generally, wear leveling algorithms fall into one of two categories: + +1. [Dynamic wear leveling][wikipedia-dynamic-wear-leveling], where we + distribute wear over "dynamic" blocks. The can be accomplished by + only considering unused blocks. + +2. [Static wear leveling][wikipedia-static-wear-leveling], where we + distribute wear over both "dynamic" and "static" blocks. To make this work, + we need to consider all blocks, including blocks that already contain data. + +As a tradeoff for code size and complexity, littlefs (currently) only provides +dynamic wear leveling. This is a best effort solution. Wear is not distributed +perfectly, but it is distributed among the free blocks and greatly extends the +life of a device. + +On top of this, littlefs uses a statistical wear leveling algorithm. What this +means is that we don’t actively track wear, instead we rely on a uniform +distribution of wear across storage to approximate a dynamic wear leveling +algorithm. Despite the long name, this is actually a simplification of dynamic +wear leveling. + +The uniform distribution of wear is left up to the block allocator, which +creates a uniform distribution in two parts. The easy part is when the device +is powered, in which case we allocate the blocks linearly, circling the device. +The harder part is what to do when the device loses power. We can't just +restart the allocator at the beginning of storage, as this would bias the wear. +Instead, we start the allocator as a random offset every time we mount the +filesystem. As long as this random offset is uniform, the combined allocation +pattern is also a uniform distribution. + +![Cumulative wear distribution graph][wear-distribution-graph] + +Initially, this approach to wear leveling looks like it creates a difficult +dependency on a power-independent random number generator, which must return +different random numbers on each boot. However, the filesystem is in a +relatively unique situation in that it is sitting on top of a large of amount +of entropy that persists across power loss. + +We can actually use the data on disk to directly drive our random number +generator. In practice, this is implemented by xoring the checksums of each +metadata pair, which is already calculated to fetch and mount the filesystem. + +``` + .--------. \ probably random + .|metadata| | ^ + || | +-> crc ----------------------> xor + || | | ^ + |'--------' / | + '---|--|-' | + .-' '-------------------------. | + | | | + | .--------------> xor ------------> xor + | | ^ | ^ + v crc crc v crc + .--------. \ ^ .--------. \ ^ .--------. \ ^ + .|metadata|-|--|-->|metadata| | | .|metadata| | | + || | +--' || | +--' || | +--' + || | | || | | || | | + |'--------' / |'--------' / |'--------' / + '---|--|-' '----|---' '---|--|-' + .-' '-. | .-' '-. + v v v v v +.--------. .--------. .--------. .--------. .--------. +| data | | data | | data | | data | | data | +| | | | | | | | | | +| | | | | | | | | | +'--------' '--------' '--------' '--------' '--------' +``` + +Note that this random number generator is not perfect. It only returns unique +random numbers when the filesystem is modified. This is exactly what we want +for distributing wear in the allocator, but means this random number generator +is not useful for general use. + +--- + +Together, bad block detection and dynamic wear leveling provide a best effort +solution for avoiding the early death of a filesystem due to wear. Importantly, +littlefs's wear leveling algorithm provides a key feature: You can increase the +life of a device simply by increasing the size of storage. And if more +aggressive wear leveling is desired, you can always combine littlefs with a +[flash translation layer (FTL)][wikipedia-ftl] to get a small power resilient +filesystem with static wear leveling. + +## Files + +Now that we have our building blocks out of the way, we can start looking at +our filesystem as a whole. + +The first step: How do we actually store our files? + +We've determined that CTZ skip-lists are pretty good at storing data compactly, +so following the precedent found in other filesystems we could give each file +a skip-list stored in a metadata pair that acts as an inode for the file. + + +``` + .--------. + .|metadata| + || | + || | + |'--------' + '----|---' + v +.--------. .--------. .--------. .--------. +| data 0 |<-| data 1 |<-| data 2 |<-| data 3 | +| |<-| |--| | | | +| | | | | | | | +'--------' '--------' '--------' '--------' +``` + +However, this doesn't work well when files are small, which is common for +embedded systems. Compared to PCs, _all_ data in an embedded system is small. + +Consider a small 4-byte file. With a two block metadata-pair and one block for +the CTZ skip-list, we find ourselves using a full 3 blocks. On most NOR flash +with 4 KiB blocks, this is 12 KiB of overhead. A ridiculous 3072x increase. + +``` +file stored as inode, 4 bytes costs ~12 KiB + + .----------------. \ +.| revision | | +||----------------| \ | +|| skiplist ---. +- metadata | +||----------------| | / 4x8 bytes | +|| checksum | | 32 bytes | +||----------------| | | +|| | | | +- metadata pair +|| v | | | 2x4 KiB +|| | | | 8 KiB +|| | | | +|| | | | +|| | | | +|'----------------' | | +'----------------' | / + .--------' + v + .----------------. \ \ + | data | +- data | + |----------------| / 4 bytes | + | | | + | | | + | | | + | | +- data block + | | | 4 KiB + | | | + | | | + | | | + | | | + | | | + '----------------' / +``` + +We can make several improvements. First, instead of giving each file its own +metadata pair, we can store multiple files in a single metadata pair. One way +to do this is to directly associate a directory with a metadata pair (or a +linked list of metadata pairs). This makes it easy for multiple files to share +the directory's metadata pair for logging and reduces the collective storage +overhead. + +The strict binding of metadata pairs and directories also gives users +direct control over storage utilization depending on how they organize their +directories. + +``` +multiple files stored in metadata pair, 4 bytes costs ~4 KiB + + .----------------. + .| revision | + ||----------------| + || A name | + || A skiplist -----. + ||----------------| | \ + || B name | | +- metadata + || B skiplist ---. | | 4x8 bytes + ||----------------| | | / 32 bytes + || checksum | | | + ||----------------| | | + || | | | | + || v | | | + |'----------------' | | + '----------------' | | + .----------------' | + v v +.----------------. .----------------. \ \ +| A data | | B data | +- data | +| | |----------------| / 4 bytes | +| | | | | +| | | | | +| | | | | +| | | | + data block +| | | | | 4 KiB +| | | | | +|----------------| | | | +| | | | | +| | | | | +| | | | | +'----------------' '----------------' / +``` + +The second improvement we can make is noticing that for very small files, our +attempts to use CTZ skip-lists for compact storage backfires. Metadata pairs +have a ~4x storage cost, so if our file is smaller than 1/4 the block size, +there's actually no benefit in storing our file outside of our metadata pair. + +In this case, we can store the file directly in our directory's metadata pair. +We call this an inline file, and it allows a directory to store many small +files quite efficiently. Our previous 4 byte file now only takes up a +theoretical 16 bytes on disk. + +``` +inline files stored in metadata pair, 4 bytes costs ~16 bytes + + .----------------. +.| revision | +||----------------| +|| A name | +|| A skiplist ---. +||----------------| | \ +|| B name | | +- data +|| B data | | | 4x4 bytes +||----------------| | / 16 bytes +|| checksum | | +||----------------| | +|| | | | +|| v | | +|'----------------' | +'----------------' | + .---------' + v + .----------------. + | A data | + | | + | | + | | + | | + | | + | | + | | + |----------------| + | | + | | + | | + '----------------' +``` + +Once the file exceeds 1/4 the block size, we switch to a CTZ skip-list. This +means that our files never use more than 4x storage overhead, decreasing as +the file grows in size. + +![File storage cost graph][file-cost-graph] + +## Directories + +Now we just need directories to store our files. As mentioned above we want +a strict binding of directories and metadata pairs, but there are a few +complications we need to sort out. + +On their own, each directory is a linked-list of metadata pairs. This lets us +store an unlimited number of files in each directory, and we don't need to +worry about the runtime complexity of unbounded logs. We can store other +directory pointers in our metadata pairs, which gives us a directory tree, much +like what you find on other filesystems. + +``` + .--------. + .| root | + || | + || | + |'--------' + '---|--|-' + .-' '-------------------------. + v v + .--------. .--------. .--------. + .| dir A |------->| dir A | .| dir B | + || | || | || | + || | || | || | + |'--------' |'--------' |'--------' + '---|--|-' '----|---' '---|--|-' + .-' '-. | .-' '-. + v v v v v +.--------. .--------. .--------. .--------. .--------. +| file C | | file D | | file E | | file F | | file G | +| | | | | | | | | | +| | | | | | | | | | +'--------' '--------' '--------' '--------' '--------' +``` + +The main complication is, once again, traversal with a constant amount of +[RAM]. The directory tree is a tree, and the unfortunate fact is you can't +traverse a tree with constant RAM. + +Fortunately, the elements of our tree are metadata pairs, so unlike CTZ +skip-lists, we're not limited to strict COW operations. One thing we can do is +thread a linked-list through our tree, explicitly enabling cheap traversal +over the entire filesystem. + +``` + .--------. + .| root |-. + || | | + .-------|| |-' + | |'--------' + | '---|--|-' + | .-' '-------------------------. + | v v + | .--------. .--------. .--------. + '->| dir A |------->| dir A |------->| dir B | + || | || | || | + || | || | || | + |'--------' |'--------' |'--------' + '---|--|-' '----|---' '---|--|-' + .-' '-. | .-' '-. + v v v v v +.--------. .--------. .--------. .--------. .--------. +| file C | | file D | | file E | | file F | | file G | +| | | | | | | | | | +| | | | | | | | | | +'--------' '--------' '--------' '--------' '--------' +``` + +Unfortunately, not sticking to pure COW operations creates some problems. Now, +whenever we want to manipulate the directory tree, multiple pointers need to be +updated. If you're familiar with designing atomic data structures this should +set off a bunch of red flags. + +To work around this, our threaded linked-list has a bit of leeway. Instead of +only containing metadata pairs found in our filesystem, it is allowed to +contain metadata pairs that have no parent because of a power loss. These are +called orphaned metadata pairs. + +With the possibility of orphans, we can build power loss resilient operations +that maintain a filesystem tree threaded with a linked-list for traversal. + +Adding a directory to our tree: + +``` + .--------. + .| root |-. + || | | +.-------|| |-' +| |'--------' +| '---|--|-' +| .-' '-. +| v v +| .--------. .--------. +'->| dir A |->| dir C | + || | || | + || | || | + |'--------' |'--------' + '--------' '--------' + +allocate dir B +=> + .--------. + .| root |-. + || | | +.-------|| |-' +| |'--------' +| '---|--|-' +| .-' '-. +| v v +| .--------. .--------. +'->| dir A |--->| dir C | + || | .->| | + || | | || | + |'--------' | |'--------' + '--------' | '--------' + | + .--------. | + .| dir B |-' + || | + || | + |'--------' + '--------' + +insert dir B into threaded linked-list, creating an orphan +=> + .--------. + .| root |-. + || | | +.-------|| |-' +| |'--------' +| '---|--|-' +| .-' '-------------. +| v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || orphan!| || | + || | || | || | + |'--------' |'--------' |'--------' + '--------' '--------' '--------' + +add dir B to parent directory +=> + .--------. + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || | || | + || | || | || | + |'--------' |'--------' |'--------' + '--------' '--------' '--------' +``` + +Removing a directory: + +``` + .--------. + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || | || | + || | || | || | + |'--------' |'--------' |'--------' + '--------' '--------' '--------' + +remove dir B from parent directory, creating an orphan +=> + .--------. + .| root |-. + || | | +.-------|| |-' +| |'--------' +| '---|--|-' +| .-' '-------------. +| v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || orphan!| || | + || | || | || | + |'--------' |'--------' |'--------' + '--------' '--------' '--------' + +remove dir B from threaded linked-list, returning dir B to free blocks +=> + .--------. + .| root |-. + || | | +.-------|| |-' +| |'--------' +| '---|--|-' +| .-' '-. +| v v +| .--------. .--------. +'->| dir A |->| dir C | + || | || | + || | || | + |'--------' |'--------' + '--------' '--------' +``` + +In addition to normal directory tree operations, we can use orphans to evict +blocks in a metadata pair when the block goes bad or exceeds its allocated +erases. If we lose power while evicting a metadata block we may end up with +a situation where the filesystem references the replacement block while the +threaded linked-list still contains the evicted block. We call this a +half-orphan. + +``` + .--------. + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || | || | + || | || | || | + |'--------' |'--------' |'--------' + '--------' '--------' '--------' + +try to write to dir B +=> + .--------. + .| root |-. + || | | +.----------------|| |-' +| |'--------' +| '-|-||-|-' +| .--------' || '-----. +| v |v v +| .--------. .--------. .--------. +'->| dir A |---->| dir B |->| dir C | + || |-. | | || | + || | | | | || | + |'--------' | '--------' |'--------' + '--------' | v '--------' + | .--------. + '->| dir B | + | bad | + | block! | + '--------' + +oh no! bad block detected, allocate replacement +=> + .--------. + .| root |-. + || | | +.----------------|| |-' +| |'--------' +| '-|-||-|-' +| .--------' || '-------. +| v |v v +| .--------. .--------. .--------. +'->| dir A |---->| dir B |--->| dir C | + || |-. | | .->| | + || | | | | | || | + |'--------' | '--------' | |'--------' + '--------' | v | '--------' + | .--------. | + '->| dir B | | + | bad | | + | block! | | + '--------' | + | + .--------. | + | dir B |--' + | | + | | + '--------' + +insert replacement in threaded linked-list, creating a half-orphan +=> + .--------. + .| root |-. + || | | +.----------------|| |-' +| |'--------' +| '-|-||-|-' +| .--------' || '-------. +| v |v v +| .--------. .--------. .--------. +'->| dir A |---->| dir B |--->| dir C | + || |-. | | .->| | + || | | | | | || | + |'--------' | '--------' | |'--------' + '--------' | v | '--------' + | .--------. | + | | dir B | | + | | bad | | + | | block! | | + | '--------' | + | | + | .--------. | + '->| dir B |--' + | half | + | orphan!| + '--------' + +fix reference in parent directory +=> + .--------. + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || | || | + || | || | || | + |'--------' |'--------' |'--------' + '--------' '--------' '--------' +``` + +Finding orphans and half-orphans is expensive, requiring a _O(n²)_ +comparison of every metadata pair with every directory entry. But the tradeoff +is a power resilient filesystem that works with only a bounded amount of RAM. +Fortunately, we only need to check for orphans on the first allocation after +boot, and a read-only littlefs can ignore the threaded linked-list entirely. + +If we only had some sort of global state, then we could also store a flag and +avoid searching for orphans unless we knew we were specifically interrupted +while manipulating the directory tree (foreshadowing!). + +## The move problem + +We have one last challenge: the move problem. Phrasing the problem is simple: + +How do you atomically move a file between two directories? + +In littlefs we can atomically commit to directories, but we can't create +an atomic commit that spans multiple directories. The filesystem must go +through a minimum of two distinct states to complete a move. + +To make matters worse, file moves are a common form of synchronization for +filesystems. As a filesystem designed for power-loss, it's important we get +atomic moves right. + +So what can we do? + +- We definitely can't just let power-loss result in duplicated or lost files. + This could easily break users' code and would only reveal itself in extreme + cases. We were only able to be lazy about the threaded linked-list because + it isn't user facing and we can handle the corner cases internally. + +- Some filesystems propagate COW operations up the tree until a common parent + is found. Unfortunately this interacts poorly with our threaded tree and + brings back the issue of upward propagation of wear. + +- In a previous version of littlefs we tried to solve this problem by going + back and forth between the source and destination, marking and unmarking the + file as moving in order to make the move atomic from the user perspective. + This worked, but not well. Finding failed moves was expensive and required + a unique identifier for each file. + +In the end, solving the move problem required creating a new mechanism for +sharing knowledge between multiple metadata pairs. In littlefs this led to the +introduction of a mechanism called "global state". + +--- + +Global state is a small set of state that can be updated from _any_ metadata +pair. Combining global state with metadata pairs' ability to update multiple +entries in one commit gives us a powerful tool for crafting complex atomic +operations. + +How does global state work? + +Global state exists as a set of deltas that are distributed across the metadata +pairs in the filesystem. The actual global state can be built out of these +deltas by xoring together all of the deltas in the filesystem. + +``` + .--------. .--------. .--------. .--------. .--------. +.| |->| gdelta |->| |->| gdelta |->| gdelta | +|| | || 0x23 | || | || 0xff | || 0xce | +|| | || | || | || | || | +|'--------' |'--------' |'--------' |'--------' |'--------' +'--------' '----|---' '--------' '----|---' '----|---' + v v v + 0x00 --> xor ------------------> xor ------> xor --> gstate 0x12 +``` + +To update the global state from a metadata pair, we take the global state we +know and xor it with both our changes and any existing delta in the metadata +pair. Committing this new delta to the metadata pair commits the changes to +the filesystem's global state. + +``` + .--------. .--------. .--------. .--------. .--------. +.| |->| gdelta |->| |->| gdelta |->| gdelta | +|| | || 0x23 | || | || 0xff | || 0xce | +|| | || | || | || | || | +|'--------' |'--------' |'--------' |'--------' |'--------' +'--------' '----|---' '--------' '--|---|-' '----|---' + v v | v + 0x00 --> xor ----------------> xor -|------> xor --> gstate = 0x12 + | | + | | +change gstate to 0xab --> xor <------------|--------------------------' +=> | v + '------------> xor + | + v + .--------. .--------. .--------. .--------. .--------. +.| |->| gdelta |->| |->| gdelta |->| gdelta | +|| | || 0x23 | || | || 0x46 | || 0xce | +|| | || | || | || | || | +|'--------' |'--------' |'--------' |'--------' |'--------' +'--------' '----|---' '--------' '----|---' '----|---' + v v v + 0x00 --> xor ------------------> xor ------> xor --> gstate = 0xab +``` + +To make this efficient, we always keep a copy of the global state in RAM. We +only need to iterate over our metadata pairs and build the global state when +the filesystem is mounted. + +You may have noticed that global state is very expensive. We keep a copy in +RAM and a delta in an unbounded number of metadata pairs. Even if we reset +the global state to its initial value, we can't easily clean up the deltas on +disk. For this reason, it's very important that we keep the size of global +state bounded and extremely small. But, even with a strict budget, global +state is incredibly valuable. + +--- + +Now we can solve the move problem. We can create global state describing our +move atomically with the creation of the new file, and we can clear this move +state atomically with the removal of the old file. + +``` + .--------. gstate = no move + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || | || | + || | || | || | + |'--------' |'--------' |'--------' + '----|---' '--------' '--------' + v + .--------. + | file D | + | | + | | + '--------' + +begin move, add reference in dir C, change gstate to have move +=> + .--------. gstate = moving file D in dir A (m1) + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || | || | || gdelta | + || | || | || =m1 | + |'--------' |'--------' |'--------' + '----|---' '--------' '----|---' + | .----------------' + v v + .--------. + | file D | + | | + | | + '--------' + +complete move, remove reference in dir A, change gstate to no move +=> + .--------. gstate = no move (m1^~m1) + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || gdelta | || | || gdelta | + || =~m1 | || | || =m1 | + |'--------' |'--------' |'--------' + '--------' '--------' '----|---' + v + .--------. + | file D | + | | + | | + '--------' +``` + + +If, after building our global state during mount, we find information +describing an ongoing move, we know we lost power during a move and the file +is duplicated in both the source and destination directories. If this happens, +we can resolve the move using the information in the global state to remove +one of the files. + +``` + .--------. gstate = moving file D in dir A (m1) + .| root |-. ^ + || |------------> xor +.---------------|| |-' ^ +| |'--------' | +| '--|-|-|-' | +| .--------' | '---------. | +| | | | | +| | .----------> xor --------> xor +| v | v ^ v ^ +| .--------. | .--------. | .--------. | +'->| dir A |-|->| dir B |-|->| dir C | | + || |-' || |-' || gdelta |-' + || | || | || =m1 | + |'--------' |'--------' |'--------' + '----|---' '--------' '----|---' + | .---------------------' + v v + .--------. + | file D | + | | + | | + '--------' +``` + +We can also move directories the same way we move files. There is the threaded +linked-list to consider, but leaving the threaded linked-list unchanged works +fine as the order doesn't really matter. + +``` + .--------. gstate = no move (m1^~m1) + .| root |-. + || | | +.-------------|| |-' +| |'--------' +| '--|-|-|-' +| .------' | '-------. +| v v v +| .--------. .--------. .--------. +'->| dir A |->| dir B |->| dir C | + || gdelta | || | || gdelta | + || =~m1 | || | || =m1 | + |'--------' |'--------' |'--------' + '--------' '--------' '----|---' + v + .--------. + | file D | + | | + | | + '--------' + +begin move, add reference in dir C, change gstate to have move +=> + .--------. gstate = moving dir B in root (m1^~m1^m2) + .| root |-. + || | | +.--------------|| |-' +| |'--------' +| '--|-|-|-' +| .-------' | '----------. +| v | v +| .--------. | .--------. +'->| dir A |-. | .->| dir C | + || gdelta | | | | || gdelta | + || =~m1 | | | | || =m1^m2 | + |'--------' | | | |'--------' + '--------' | | | '---|--|-' + | | .-------' | + | v v | v + | .--------. | .--------. + '->| dir B |-' | file D | + || | | | + || | | | + |'--------' '--------' + '--------' + +complete move, remove reference in root, change gstate to no move +=> + .--------. gstate = no move (m1^~m1^m2^~m2) + .| root |-. + || gdelta | | +.-----------|| =~m2 |-' +| |'--------' +| '---|--|-' +| .-----' '-----. +| v v +| .--------. .--------. +'->| dir A |-. .->| dir C | + || gdelta | | | || gdelta | + || =~m1 | | '-|| =m1^m2 |-------. + |'--------' | |'--------' | + '--------' | '---|--|-' | + | .-' '-. | + | v v | + | .--------. .--------. | + '->| dir B |--| file D |-' + || | | | + || | | | + |'--------' '--------' + '--------' +``` + +Global state gives us a powerful tool we can use to solve the move problem. +And the result is surprisingly performant, only needing the minimum number +of states and using the same number of commits as a naive move. Additionally, +global state gives us a bit of persistent state we can use for some other +small improvements. + +## Conclusion + +And that's littlefs, thanks for reading! + + +[wikipedia-flash]: https://en.wikipedia.org/wiki/Flash_memory +[wikipedia-sna]: https://en.wikipedia.org/wiki/Serial_number_arithmetic +[wikipedia-crc]: https://en.wikipedia.org/wiki/Cyclic_redundancy_check +[wikipedia-cow]: https://en.wikipedia.org/wiki/Copy-on-write +[wikipedia-B-tree]: https://en.wikipedia.org/wiki/B-tree +[wikipedia-B+-tree]: https://en.wikipedia.org/wiki/B%2B_tree +[wikipedia-skip-list]: https://en.wikipedia.org/wiki/Skip_list +[wikipedia-ctz]: https://en.wikipedia.org/wiki/Count_trailing_zeros +[wikipedia-ecc]: https://en.wikipedia.org/wiki/Error_correction_code +[wikipedia-hamming-bound]: https://en.wikipedia.org/wiki/Hamming_bound +[wikipedia-dynamic-wear-leveling]: https://en.wikipedia.org/wiki/Wear_leveling#Dynamic_wear_leveling +[wikipedia-static-wear-leveling]: https://en.wikipedia.org/wiki/Wear_leveling#Static_wear_leveling +[wikipedia-ftl]: https://en.wikipedia.org/wiki/Flash_translation_layer + +[oeis]: https://oeis.org +[A001511]: https://oeis.org/A001511 +[A005187]: https://oeis.org/A005187 + +[fat]: https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system +[ext2]: http://e2fsprogs.sourceforge.net/ext2intro.html +[jffs]: https://www.sourceware.org/jffs2/jffs2-html +[yaffs]: https://yaffs.net/documents/how-yaffs-works +[spiffs]: https://github.com/pellepl/spiffs/blob/master/docs/TECH_SPEC +[ext4]: https://ext4.wiki.kernel.org/index.php/Ext4_Design +[ntfs]: https://en.wikipedia.org/wiki/NTFS +[btrfs]: https://btrfs.wiki.kernel.org/index.php/Btrfs_design +[zfs]: https://en.wikipedia.org/wiki/ZFS + +[cow]: https://upload.wikimedia.org/wikipedia/commons/0/0c/Cow_female_black_white.jpg +[elephant]: https://upload.wikimedia.org/wikipedia/commons/3/37/African_Bush_Elephant.jpg +[ram]: https://upload.wikimedia.org/wikipedia/commons/9/97/New_Mexico_Bighorn_Sheep.JPG + +[metadata-formula1]: https://latex.codecogs.com/svg.latex?cost%20%3D%20n%20+%20n%20%5Cfrac%7Bs%7D%7Bd+1%7D +[metadata-formula2]: https://latex.codecogs.com/svg.latex?s%20%3D%20r%20%5Cfrac%7Bsize%7D%7Bn%7D +[metadata-formula3]: https://latex.codecogs.com/svg.latex?d%20%3D%20%281-r%29%20%5Cfrac%7Bsize%7D%7Bn%7D +[metadata-formula4]: https://latex.codecogs.com/svg.latex?cost%20%3D%20n%20+%20n%20%5Cfrac%7Br%5Cfrac%7Bsize%7D%7Bn%7D%7D%7B%281-r%29%5Cfrac%7Bsize%7D%7Bn%7D+1%7D + +[ctz-formula1]: https://latex.codecogs.com/svg.latex?%5Clim_%7Bn%5Cto%5Cinfty%7D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D0%7D%5E%7Bn%7D%5Cleft%28%5Ctext%7Bctz%7D%28i%29+1%5Cright%29%20%3D%20%5Csum_%7Bi%3D0%7D%5Cfrac%7B1%7D%7B2%5Ei%7D%20%3D%202 +[ctz-formula2]: https://latex.codecogs.com/svg.latex?B%20%3D%20%5Cfrac%7Bw%7D%7B8%7D%5Cleft%5Clceil%5Clog_2%5Cleft%28%5Cfrac%7B2%5Ew%7D%7BB-2%5Cfrac%7Bw%7D%7B8%7D%7D%5Cright%29%5Cright%5Crceil +[ctz-formula3]: https://latex.codecogs.com/svg.latex?N%20%3D%20%5Csum_i%5En%5Cleft%5BB-%5Cfrac%7Bw%7D%7B8%7D%5Cleft%28%5Ctext%7Bctz%7D%28i%29+1%5Cright%29%5Cright%5D +[ctz-formula4]: https://latex.codecogs.com/svg.latex?%5Csum_i%5En%5Cleft%28%5Ctext%7Bctz%7D%28i%29+1%5Cright%29%20%3D%202n-%5Ctext%7Bpopcount%7D%28n%29 +[ctz-formula5]: https://latex.codecogs.com/svg.latex?N%20%3D%20Bn%20-%20%5Cfrac%7Bw%7D%7B8%7D%5Cleft%282n-%5Ctext%7Bpopcount%7D%28n%29%5Cright%29 +[ctz-formula6]: https://latex.codecogs.com/svg.latex?n%20%3D%20%5Cleft%5Clfloor%5Cfrac%7BN-%5Cfrac%7Bw%7D%7B8%7D%5Cleft%28%5Ctext%7Bpopcount%7D%5Cleft%28%5Cfrac%7BN%7D%7BB-2%5Cfrac%7Bw%7D%7B8%7D%7D-1%5Cright%29+2%5Cright%29%7D%7BB-2%5Cfrac%7Bw%7D%7B8%7D%7D%5Cright%5Crfloor +[ctz-formula7]: https://latex.codecogs.com/svg.latex?%5Cmathit%7Boff%7D%20%3D%20N%20-%20%5Cleft%28B-2%5Cfrac%7Bw%7D%7B8%7D%5Cright%29n%20-%20%5Cfrac%7Bw%7D%7B8%7D%5Ctext%7Bpopcount%7D%28n%29 + +[bigB]: https://latex.codecogs.com/svg.latex?B +[d]: https://latex.codecogs.com/svg.latex?d +[m]: https://latex.codecogs.com/svg.latex?m +[bigN]: https://latex.codecogs.com/svg.latex?N +[n]: https://latex.codecogs.com/svg.latex?n +[n']: https://latex.codecogs.com/svg.latex?n%27 +[r]: https://latex.codecogs.com/svg.latex?r +[s]: https://latex.codecogs.com/svg.latex?s +[w]: https://latex.codecogs.com/svg.latex?w +[x]: https://latex.codecogs.com/svg.latex?x + +[metadata-cost-graph]: https://raw.githubusercontent.com/geky/littlefs/gh-images/metadata-cost.svg?sanitize=true +[wear-distribution-graph]: https://raw.githubusercontent.com/geky/littlefs/gh-images/wear-distribution.svg?sanitize=true +[file-cost-graph]: https://raw.githubusercontent.com/geky/littlefs/gh-images/file-cost.svg?sanitize=true diff --git a/ext/littlefs/LICENSE.md b/ext/littlefs/LICENSE.md new file mode 100644 index 0000000000..ed69bea474 --- /dev/null +++ b/ext/littlefs/LICENSE.md @@ -0,0 +1,24 @@ +Copyright (c) 2017, Arm Limited. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name of ARM nor the names of its contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ext/littlefs/Makefile b/ext/littlefs/Makefile new file mode 100644 index 0000000000..763a0cee01 --- /dev/null +++ b/ext/littlefs/Makefile @@ -0,0 +1,114 @@ +ifdef BUILDDIR +# make sure BUILDDIR ends with a slash +override BUILDDIR := $(BUILDDIR)/ +# bit of a hack, but we want to make sure BUILDDIR directory structure +# is correct before any commands +$(if $(findstring n,$(MAKEFLAGS)),, $(shell mkdir -p \ + $(BUILDDIR) \ + $(BUILDDIR)bd \ + $(BUILDDIR)tests)) +endif + +# overridable target/src/tools/flags/etc +ifneq ($(wildcard test.c main.c),) +TARGET ?= $(BUILDDIR)lfs +else +TARGET ?= $(BUILDDIR)lfs.a +endif + + +CC ?= gcc +AR ?= ar +SIZE ?= size +CTAGS ?= ctags +NM ?= nm +LCOV ?= lcov + +SRC ?= $(wildcard *.c) +OBJ := $(SRC:%.c=$(BUILDDIR)%.o) +DEP := $(SRC:%.c=$(BUILDDIR)%.d) +ASM := $(SRC:%.c=$(BUILDDIR)%.s) + +ifdef DEBUG +override CFLAGS += -O0 -g3 +else +override CFLAGS += -Os +endif +ifdef TRACE +override CFLAGS += -DLFS_YES_TRACE +endif +override CFLAGS += -I. +override CFLAGS += -std=c99 -Wall -pedantic +override CFLAGS += -Wextra -Wshadow -Wjump-misses-init -Wundef + +ifdef VERBOSE +override TESTFLAGS += -v +override CODEFLAGS += -v +override COVERAGEFLAGS += -v +endif +ifdef EXEC +override TESTFLAGS += --exec="$(EXEC)" +endif +ifdef BUILDDIR +override TESTFLAGS += --build-dir="$(BUILDDIR:/=)" +override CODEFLAGS += --build-dir="$(BUILDDIR:/=)" +endif +ifneq ($(NM),nm) +override CODEFLAGS += --nm-tool="$(NM)" +endif + + +# commands +.PHONY: all build +all build: $(TARGET) + +.PHONY: asm +asm: $(ASM) + +.PHONY: size +size: $(OBJ) + $(SIZE) -t $^ + +.PHONY: tags +tags: + $(CTAGS) --totals --c-types=+p $(shell find -H -name '*.h') $(SRC) + +.PHONY: code +code: $(OBJ) + ./scripts/code.py $^ $(CODEFLAGS) + +.PHONY: test +test: + ./scripts/test.py $(TESTFLAGS) +.SECONDEXPANSION: +test%: tests/test$$(firstword $$(subst \#, ,%)).toml + ./scripts/test.py $@ $(TESTFLAGS) + +.PHONY: coverage +coverage: + ./scripts/coverage.py $(BUILDDIR)tests/*.toml.info $(COVERAGEFLAGS) + +# rules +-include $(DEP) +.SUFFIXES: + +$(BUILDDIR)lfs: $(OBJ) + $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@ + +$(BUILDDIR)%.a: $(OBJ) + $(AR) rcs $@ $^ + +$(BUILDDIR)%.o: %.c + $(CC) -c -MMD $(CFLAGS) $< -o $@ + +$(BUILDDIR)%.s: %.c + $(CC) -S $(CFLAGS) $< -o $@ + +# clean everything +.PHONY: clean +clean: + rm -f $(TARGET) + rm -f $(OBJ) + rm -f $(DEP) + rm -f $(ASM) + rm -f $(BUILDDIR)tests/*.toml.* diff --git a/ext/littlefs/README.md b/ext/littlefs/README.md new file mode 100644 index 0000000000..584ada39d6 --- /dev/null +++ b/ext/littlefs/README.md @@ -0,0 +1,258 @@ +## littlefs + +A little fail-safe filesystem designed for microcontrollers. + +``` + | | | .---._____ + .-----. | | +--|o |---| littlefs | +--| |---| | + '-----' '----------' + | | | +``` + +**Power-loss resilience** - littlefs is designed to handle random power +failures. All file operations have strong copy-on-write guarantees and if +power is lost the filesystem will fall back to the last known good state. + +**Dynamic wear leveling** - littlefs is designed with flash in mind, and +provides wear leveling over dynamic blocks. Additionally, littlefs can +detect bad blocks and work around them. + +**Bounded RAM/ROM** - littlefs is designed to work with a small amount of +memory. RAM usage is strictly bounded, which means RAM consumption does not +change as the filesystem grows. The filesystem contains no unbounded +recursion and dynamic memory is limited to configurable buffers that can be +provided statically. + +## Example + +Here's a simple example that updates a file named `boot_count` every time +main runs. The program can be interrupted at any time without losing track +of how many times it has been booted and without corrupting the filesystem: + +``` c +#include "lfs.h" + +// variables used by the filesystem +lfs_t lfs; +lfs_file_t file; + +// configuration of the filesystem is provided by this struct +const struct lfs_config cfg = { + // block device operations + .read = user_provided_block_device_read, + .prog = user_provided_block_device_prog, + .erase = user_provided_block_device_erase, + .sync = user_provided_block_device_sync, + + // block device configuration + .read_size = 16, + .prog_size = 16, + .block_size = 4096, + .block_count = 128, + .cache_size = 16, + .lookahead_size = 16, + .block_cycles = 500, +}; + +// entry point +int main(void) { + // mount the filesystem + int err = lfs_mount(&lfs, &cfg); + + // reformat if we can't mount the filesystem + // this should only happen on the first boot + if (err) { + lfs_format(&lfs, &cfg); + lfs_mount(&lfs, &cfg); + } + + // read current count + uint32_t boot_count = 0; + lfs_file_open(&lfs, &file, "boot_count", LFS_O_RDWR | LFS_O_CREAT); + lfs_file_read(&lfs, &file, &boot_count, sizeof(boot_count)); + + // update boot count + boot_count += 1; + lfs_file_rewind(&lfs, &file); + lfs_file_write(&lfs, &file, &boot_count, sizeof(boot_count)); + + // remember the storage is not updated until the file is closed successfully + lfs_file_close(&lfs, &file); + + // release any resources we were using + lfs_unmount(&lfs); + + // print the boot count + printf("boot_count: %d\n", boot_count); +} +``` + +## Usage + +Detailed documentation (or at least as much detail as is currently available) +can be found in the comments in [lfs.h](lfs.h). + +littlefs takes in a configuration structure that defines how the filesystem +operates. The configuration struct provides the filesystem with the block +device operations and dimensions, tweakable parameters that tradeoff memory +usage for performance, and optional static buffers if the user wants to avoid +dynamic memory. + +The state of the littlefs is stored in the `lfs_t` type which is left up +to the user to allocate, allowing multiple filesystems to be in use +simultaneously. With the `lfs_t` and configuration struct, a user can +format a block device or mount the filesystem. + +Once mounted, the littlefs provides a full set of POSIX-like file and +directory functions, with the deviation that the allocation of filesystem +structures must be provided by the user. + +All POSIX operations, such as remove and rename, are atomic, even in event +of power-loss. Additionally, file updates are not actually committed to +the filesystem until sync or close is called on the file. + +## Other notes + +Littlefs is written in C, and specifically should compile with any compiler +that conforms to the `C99` standard. + +All littlefs calls have the potential to return a negative error code. The +errors can be either one of those found in the `enum lfs_error` in +[lfs.h](lfs.h), or an error returned by the user's block device operations. + +In the configuration struct, the `prog` and `erase` function provided by the +user may return a `LFS_ERR_CORRUPT` error if the implementation already can +detect corrupt blocks. However, the wear leveling does not depend on the return +code of these functions, instead all data is read back and checked for +integrity. + +If your storage caches writes, make sure that the provided `sync` function +flushes all the data to memory and ensures that the next read fetches the data +from memory, otherwise data integrity can not be guaranteed. If the `write` +function does not perform caching, and therefore each `read` or `write` call +hits the memory, the `sync` function can simply return 0. + +## Design + +At a high level, littlefs is a block based filesystem that uses small logs to +store metadata and larger copy-on-write (COW) structures to store file data. + +In littlefs, these ingredients form a sort of two-layered cake, with the small +logs (called metadata pairs) providing fast updates to metadata anywhere on +storage, while the COW structures store file data compactly and without any +wear amplification cost. + +Both of these data structures are built out of blocks, which are fed by a +common block allocator. By limiting the number of erases allowed on a block +per allocation, the allocator provides dynamic wear leveling over the entire +filesystem. + +``` + root + .--------.--------. + | A'| B'| | + | | |-> | + | | | | + '--------'--------' + .----' '--------------. + A v B v + .--------.--------. .--------.--------. + | C'| D'| | | E'|new| | + | | |-> | | | E'|-> | + | | | | | | | | + '--------'--------' '--------'--------' + .-' '--. | '------------------. + v v .-' v +.--------. .--------. v .--------. +| C | | D | .--------. write | new E | +| | | | | E | ==> | | +| | | | | | | | +'--------' '--------' | | '--------' + '--------' .-' | + .-' '-. .-------------|------' + v v v v + .--------. .--------. .--------. + | F | | G | | new F | + | | | | | | + | | | | | | + '--------' '--------' '--------' +``` + +More details on how littlefs works can be found in [DESIGN.md](DESIGN.md) and +[SPEC.md](SPEC.md). + +- [DESIGN.md](DESIGN.md) - A fully detailed dive into how littlefs works. + I would suggest reading it as the tradeoffs at work are quite interesting. + +- [SPEC.md](SPEC.md) - The on-disk specification of littlefs with all the + nitty-gritty details. May be useful for tooling development. + +## Testing + +The littlefs comes with a test suite designed to run on a PC using the +[emulated block device](bd/lfs_testbd.h) found in the `bd` directory. +The tests assume a Linux environment and can be started with make: + +``` bash +make test +``` + +## License + +The littlefs is provided under the [BSD-3-Clause] license. See +[LICENSE.md](LICENSE.md) for more information. Contributions to this project +are accepted under the same license. + +Individual files contain the following tag instead of the full license text. + + SPDX-License-Identifier: BSD-3-Clause + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ + +## Related projects + +- [littlefs-fuse] - A [FUSE] wrapper for littlefs. The project allows you to + mount littlefs directly on a Linux machine. Can be useful for debugging + littlefs if you have an SD card handy. + +- [littlefs-js] - A javascript wrapper for littlefs. I'm not sure why you would + want this, but it is handy for demos. You can see it in action + [here][littlefs-js-demo]. + +- [littlefs-python] - A Python wrapper for littlefs. The project allows you + to create images of the filesystem on your PC. Check if littlefs will fit + your needs, create images for a later download to the target memory or + inspect the content of a binary image of the target memory. + +- [mklfs] - A command line tool built by the [Lua RTOS] guys for making + littlefs images from a host PC. Supports Windows, Mac OS, and Linux. + +- [Mbed OS] - The easiest way to get started with littlefs is to jump into Mbed + which already has block device drivers for most forms of embedded storage. + littlefs is available in Mbed OS as the [LittleFileSystem] class. + +- [SPIFFS] - Another excellent embedded filesystem for NOR flash. As a more + traditional logging filesystem with full static wear-leveling, SPIFFS will + likely outperform littlefs on small memories such as the internal flash on + microcontrollers. + +- [Dhara] - An interesting NAND flash translation layer designed for small + MCUs. It offers static wear-leveling and power-resilience with only a fixed + _O(|address|)_ pointer structure stored on each block and in RAM. + + +[BSD-3-Clause]: https://spdx.org/licenses/BSD-3-Clause.html +[littlefs-fuse]: https://github.com/geky/littlefs-fuse +[FUSE]: https://github.com/libfuse/libfuse +[littlefs-js]: https://github.com/geky/littlefs-js +[littlefs-js-demo]:http://littlefs.geky.net/demo.html +[mklfs]: https://github.com/whitecatboard/Lua-RTOS-ESP32/tree/master/components/mklfs/src +[Lua RTOS]: https://github.com/whitecatboard/Lua-RTOS-ESP32 +[Mbed OS]: https://github.com/armmbed/mbed-os +[LittleFileSystem]: https://os.mbed.com/docs/mbed-os/v5.12/apis/littlefilesystem.html +[SPIFFS]: https://github.com/pellepl/spiffs +[Dhara]: https://github.com/dlbeer/dhara +[littlefs-python]: https://pypi.org/project/littlefs-python/ diff --git a/ext/littlefs/SPEC.md b/ext/littlefs/SPEC.md new file mode 100644 index 0000000000..cc602c1cfb --- /dev/null +++ b/ext/littlefs/SPEC.md @@ -0,0 +1,787 @@ +## littlefs technical specification + +This is the technical specification of the little filesystem. This document +covers the technical details of how the littlefs is stored on disk for +introspection and tooling. This document assumes you are familiar with the +design of the littlefs, for more info on how littlefs works check +out [DESIGN.md](DESIGN.md). + +``` + | | | .---._____ + .-----. | | +--|o |---| littlefs | +--| |---| | + '-----' '----------' + | | | +``` + +## Some quick notes + +- littlefs is a block-based filesystem. The disk is divided into an array of + evenly sized blocks that are used as the logical unit of storage. + +- Block pointers are stored in 32 bits, with the special value `0xffffffff` + representing a null block address. + +- In addition to the logical block size (which usually matches the erase + block size), littlefs also uses a program block size and read block size. + These determine the alignment of block device operations, but don't need + to be consistent for portability. + +- By default, all values in littlefs are stored in little-endian byte order. + +## Directories / Metadata pairs + +Metadata pairs form the backbone of littlefs and provide a system for +distributed atomic updates. Even the superblock is stored in a metadata pair. + +As their name suggests, a metadata pair is stored in two blocks, with one block +providing a backup during erase cycles in case power is lost. These two blocks +are not necessarily sequential and may be anywhere on disk, so a "pointer" to a +metadata pair is stored as two block pointers. + +On top of this, each metadata block behaves as an appendable log, containing a +variable number of commits. Commits can be appended to the metadata log in +order to update the metadata without requiring an erase cycles. Note that +successive commits may supersede the metadata in previous commits. Only the +most recent metadata should be considered valid. + +The high-level layout of a metadata block is fairly simple: + +``` + .---------------------------------------. +.-| revision count | entries | \ +| |-------------------+ | | +| | | | +| | | +-- 1st commit +| | | | +| | +-------------------| | +| | | CRC | / +| |-------------------+-------------------| +| | entries | \ +| | | | +| | | +-- 2nd commit +| | +-------------------+--------------| | +| | | CRC | padding | / +| |----+-------------------+--------------| +| | entries | \ +| | | | +| | | +-- 3rd commit +| | +-------------------+---------| | +| | | CRC | | / +| |---------+-------------------+ | +| | unwritten storage | more commits +| | | | +| | | v +| | | +| | | +| '---------------------------------------' +'---------------------------------------' +``` + +Each metadata block contains a 32-bit revision count followed by a number of +commits. Each commit contains a variable number of metadata entries followed +by a 32-bit CRC. + +Note also that entries aren't necessarily word-aligned. This allows us to +store metadata more compactly, however we can only write to addresses that are +aligned to our program block size. This means each commit may have padding for +alignment. + +Metadata block fields: + +1. **Revision count (32-bits)** - Incremented every erase cycle. If both blocks + contain valid commits, only the block with the most recent revision count + should be used. Sequence comparison must be used to avoid issues with + integer overflow. + +2. **CRC (32-bits)** - Detects corruption from power-loss or other write + issues. Uses a CRC-32 with a polynomial of `0x04c11db7` initialized + with `0xffffffff`. + +Entries themselves are stored as a 32-bit tag followed by a variable length +blob of data. But exactly how these tags are stored is a little bit tricky. + +Metadata blocks support both forward and backward iteration. In order to do +this without duplicating the space for each tag, neighboring entries have their +tags XORed together, starting with `0xffffffff`. + +``` + Forward iteration Backward iteration + +.-------------------. 0xffffffff .-------------------. +| revision count | | | revision count | +|-------------------| v |-------------------| +| tag ~A |---> xor -> tag A | tag ~A |---> xor -> 0xffffffff +|-------------------| | |-------------------| ^ +| data A | | | data A | | +| | | | | | +| | | | | | +|-------------------| v |-------------------| | +| tag AxB |---> xor -> tag B | tag AxB |---> xor -> tag A +|-------------------| | |-------------------| ^ +| data B | | | data B | | +| | | | | | +| | | | | | +|-------------------| v |-------------------| | +| tag BxC |---> xor -> tag C | tag BxC |---> xor -> tag B +|-------------------| |-------------------| ^ +| data C | | data C | | +| | | | tag C +| | | | +| | | | +'-------------------' '-------------------' +``` + +One last thing to note before we get into the details around tag encoding. Each +tag contains a valid bit used to indicate if the tag and containing commit is +valid. This valid bit is the first bit found in the tag and the commit and can +be used to tell if we've attempted to write to the remaining space in the +block. + +Here's a more complete example of metadata block containing 4 entries: + +``` + .---------------------------------------. +.-| revision count | tag ~A | \ +| |-------------------+-------------------| | +| | data A | | +| | | | +| |-------------------+-------------------| | +| | tag AxB | data B | <--. | +| |-------------------+ | | | +| | | | +-- 1st commit +| | +-------------------+---------| | | +| | | tag BxC | | <-.| | +| |---------+-------------------+ | || | +| | data C | || | +| | | || | +| |-------------------+-------------------| || | +| | tag CxCRC | CRC | || / +| |-------------------+-------------------| || +| | tag CRCxA' | data A' | || \ +| |-------------------+ | || | +| | | || | +| | +-------------------+----| || +-- 2nd commit +| | | tag CRCxA' | | || | +| |--------------+-------------------+----| || | +| | CRC | padding | || / +| |--------------+----+-------------------| || +| | tag CRCxA'' | data A'' | <---. \ +| |-------------------+ | ||| | +| | | ||| | +| | +-------------------+---------| ||| | +| | | tag A''xD | | < ||| | +| |---------+-------------------+ | |||| +-- 3rd commit +| | data D | |||| | +| | +---------| |||| | +| | | tag Dx| |||| | +| |---------+-------------------+---------| |||| | +| |CRC | CRC | | |||| / +| |---------+-------------------+ | |||| +| | unwritten storage | |||| more commits +| | | |||| | +| | | |||| v +| | | |||| +| | | |||| +| '---------------------------------------' |||| +'---------------------------------------' |||'- most recent A + ||'-- most recent B + |'--- most recent C + '---- most recent D +``` + +## Metadata tags + +So in littlefs, 32-bit tags describe every type of metadata. And this means +_every_ type of metadata, including file entries, directory fields, and +global state. Even the CRCs used to mark the end of commits get their own tag. + +Because of this, the tag format contains some densely packed information. Note +that there are multiple levels of types which break down into more info: + +``` +[---- 32 ----] +[1|-- 11 --|-- 10 --|-- 10 --] + ^. ^ . ^ ^- length + |. | . '------------ id + |. '-----.------------------ type (type3) + '.-----------.------------------ valid bit + [-3-|-- 8 --] + ^ ^- chunk + '------- type (type1) +``` + + +Before we go further, there's one important thing to note. These tags are +**not** stored in little-endian. Tags stored in commits are actually stored +in big-endian (and is the only thing in littlefs stored in big-endian). This +little bit of craziness comes from the fact that the valid bit must be the +first bit in a commit, and when converted to little-endian, the valid bit finds +itself in byte 4. We could restructure the tag to store the valid bit lower, +but, because none of the fields are byte-aligned, this would be more +complicated than just storing the tag in big-endian. + +Another thing to note is that both the tags `0x00000000` and `0xffffffff` are +invalid and can be used for null values. + +Metadata tag fields: + +1. **Valid bit (1-bit)** - Indicates if the tag is valid. + +2. **Type3 (11-bits)** - Type of the tag. This field is broken down further + into a 3-bit abstract type and an 8-bit chunk field. Note that the value + `0x000` is invalid and not assigned a type. + +3. **Type1 (3-bits)** - Abstract type of the tag. Groups the tags into + 8 categories that facilitate bitmasked lookups. + +4. **Chunk (8-bits)** - Chunk field used for various purposes by the different + abstract types. type1+chunk+id form a unique identifier for each tag in the + metadata block. + +5. **Id (10-bits)** - File id associated with the tag. Each file in a metadata + block gets a unique id which is used to associate tags with that file. The + special value `0x3ff` is used for any tags that are not associated with a + file, such as directory and global metadata. + +6. **Length (10-bits)** - Length of the data in bytes. The special value + `0x3ff` indicates that this tag has been deleted. + +## Metadata types + +What follows is an exhaustive list of metadata in littlefs. + +--- +#### `0x401` LFS_TYPE_CREATE + +Creates a new file with this id. Note that files in a metadata block +don't necessarily need a create tag. All a create does is move over any +files using this id. In this sense a create is similar to insertion into +an imaginary array of files. + +The create and delete tags allow littlefs to keep files in a directory +ordered alphabetically by filename. + +--- +#### `0x4ff` LFS_TYPE_DELETE + +Deletes the file with this id. An inverse to create, this tag moves over +any files neighboring this id similar to a deletion from an imaginary +array of files. + +--- +#### `0x0xx` LFS_TYPE_NAME + +Associates the id with a file name and file type. + +The data contains the file name stored as an ASCII string (may be expanded to +UTF8 in the future). + +The chunk field in this tag indicates an 8-bit file type which can be one of +the following. + +Currently, the name tag must precede any other tags associated with the id and +can not be reassigned without deleting the file. + +Layout of the name tag: + +``` + tag data +[-- 32 --][--- variable length ---] +[1| 3| 8 | 10 | 10 ][--- (size * 8) ---] + ^ ^ ^ ^ ^- size ^- file name + | | | '------ id + | | '----------- file type + | '-------------- type1 (0x0) + '----------------- valid bit +``` + +Name fields: + +1. **file type (8-bits)** - Type of the file. + +2. **file name** - File name stored as an ASCII string. + +--- +#### `0x001` LFS_TYPE_REG + +Initializes the id + name as a regular file. + +How each file is stored depends on its struct tag, which is described below. + +--- +#### `0x002` LFS_TYPE_DIR + +Initializes the id + name as a directory. + +Directories in littlefs are stored on disk as a linked-list of metadata pairs, +each pair containing any number of files in alphabetical order. A pointer to +the directory is stored in the struct tag, which is described below. + +--- +#### `0x0ff` LFS_TYPE_SUPERBLOCK + +Initializes the id as a superblock entry. + +The superblock entry is a special entry used to store format-time configuration +and identify the filesystem. + +The name is a bit of a misnomer. While the superblock entry serves the same +purpose as a superblock found in other filesystems, in littlefs the superblock +does not get a dedicated block. Instead, the superblock entry is duplicated +across a linked-list of metadata pairs rooted on the blocks 0 and 1. The last +metadata pair doubles as the root directory of the filesystem. + +``` + .--------. .--------. .--------. .--------. .--------. +.| super |->| super |->| super |->| super |->| file B | +|| block | || block | || block | || block | || file C | +|| | || | || | || file A | || file D | +|'--------' |'--------' |'--------' |'--------' |'--------' +'--------' '--------' '--------' '--------' '--------' + +\----------------+----------------/ \----------+----------/ + superblock pairs root directory +``` + +The filesystem starts with only the root directory. The superblock metadata +pairs grow every time the root pair is compacted in order to prolong the +life of the device exponentially. + +The contents of the superblock entry are stored in a name tag with the +superblock type and an inline-struct tag. The name tag contains the magic +string "littlefs", while the inline-struct tag contains version and +configuration information. + +Layout of the superblock name tag and inline-struct tag: + +``` + tag data +[-- 32 --][-- 32 --|-- 32 --] +[1|- 11 -| 10 | 10 ][--- 64 ---] + ^ ^ ^ ^- size (8) ^- magic string ("littlefs") + | | '------ id (0) + | '------------ type (0x0ff) + '----------------- valid bit + + tag data +[-- 32 --][-- 32 --|-- 32 --|-- 32 --] +[1|- 11 -| 10 | 10 ][-- 32 --|-- 32 --|-- 32 --] + ^ ^ ^ ^ ^- version ^- block size ^- block count + | | | | [-- 32 --|-- 32 --|-- 32 --] + | | | | [-- 32 --|-- 32 --|-- 32 --] + | | | | ^- name max ^- file max ^- attr max + | | | '- size (24) + | | '------ id (0) + | '------------ type (0x201) + '----------------- valid bit +``` + +Superblock fields: + +1. **Magic string (8-bytes)** - Magic string indicating the presence of + littlefs on the device. Must be the string "littlefs". + +2. **Version (32-bits)** - The version of littlefs at format time. The version + is encoded in a 32-bit value with the upper 16-bits containing the major + version, and the lower 16-bits containing the minor version. + + This specification describes version 2.0 (`0x00020000`). + +3. **Block size (32-bits)** - Size of the logical block size used by the + filesystem in bytes. + +4. **Block count (32-bits)** - Number of blocks in the filesystem. + +5. **Name max (32-bits)** - Maximum size of file names in bytes. + +6. **File max (32-bits)** - Maximum size of files in bytes. + +7. **Attr max (32-bits)** - Maximum size of file attributes in bytes. + +The superblock must always be the first entry (id 0) in a metadata pair as well +as be the first entry written to the block. This means that the superblock +entry can be read from a device using offsets alone. + +--- +#### `0x2xx` LFS_TYPE_STRUCT + +Associates the id with an on-disk data structure. + +The exact layout of the data depends on the data structure type stored in the +chunk field and can be one of the following. + +Any type of struct supersedes all other structs associated with the id. For +example, appending a ctz-struct replaces an inline-struct on the same file. + +--- +#### `0x200` LFS_TYPE_DIRSTRUCT + +Gives the id a directory data structure. + +Directories in littlefs are stored on disk as a linked-list of metadata pairs, +each pair containing any number of files in alphabetical order. + +``` + | + v + .--------. .--------. .--------. .--------. .--------. .--------. +.| file A |->| file D |->| file G |->| file I |->| file J |->| file M | +|| file B | || file E | || file H | || | || file K | || file N | +|| file C | || file F | || | || | || file L | || | +|'--------' |'--------' |'--------' |'--------' |'--------' |'--------' +'--------' '--------' '--------' '--------' '--------' '--------' +``` + +The dir-struct tag contains only the pointer to the first metadata-pair in the +directory. The directory size is not known without traversing the directory. + +The pointer to the next metadata-pair in the directory is stored in a tail tag, +which is described below. + +Layout of the dir-struct tag: + +``` + tag data +[-- 32 --][-- 32 --|-- 32 --] +[1|- 11 -| 10 | 10 ][--- 64 ---] + ^ ^ ^ ^- size (8) ^- metadata pair + | | '------ id + | '------------ type (0x200) + '----------------- valid bit +``` + +Dir-struct fields: + +1. **Metadata pair (8-bytes)** - Pointer to the first metadata-pair + in the directory. + +--- +#### `0x201` LFS_TYPE_INLINESTRUCT + +Gives the id an inline data structure. + +Inline structs store small files that can fit in the metadata pair. In this +case, the file data is stored directly in the tag's data area. + +Layout of the inline-struct tag: + +``` + tag data +[-- 32 --][--- variable length ---] +[1|- 11 -| 10 | 10 ][--- (size * 8) ---] + ^ ^ ^ ^- size ^- inline data + | | '------ id + | '------------ type (0x201) + '----------------- valid bit +``` + +Inline-struct fields: + +1. **Inline data** - File data stored directly in the metadata-pair. + +--- +#### `0x202` LFS_TYPE_CTZSTRUCT + +Gives the id a CTZ skip-list data structure. + +CTZ skip-lists store files that can not fit in the metadata pair. These files +are stored in a skip-list in reverse, with a pointer to the head of the +skip-list. Note that the head of the skip-list and the file size is enough +information to read the file. + +How exactly CTZ skip-lists work is a bit complicated. A full explanation can be +found in the [DESIGN.md](DESIGN.md#ctz-skip-lists). + +A quick summary: For every _n_‍th block where _n_ is divisible by +2‍_ˣ_, that block contains a pointer to block _n_-2‍_ˣ_. +These pointers are stored in increasing order of _x_ in each block of the file +before the actual data. + +``` + | + v +.--------. .--------. .--------. .--------. .--------. .--------. +| A |<-| D |<-| G |<-| J |<-| M |<-| P | +| B |<-| E |--| H |<-| K |--| N | | Q | +| C |<-| F |--| I |--| L |--| O | | | +'--------' '--------' '--------' '--------' '--------' '--------' + block 0 block 1 block 2 block 3 block 4 block 5 + 1 skip 2 skips 1 skip 3 skips 1 skip +``` + +Note that the maximum number of pointers in a block is bounded by the maximum +file size divided by the block size. With 32 bits for file size, this results +in a minimum block size of 104 bytes. + +Layout of the CTZ-struct tag: + +``` + tag data +[-- 32 --][-- 32 --|-- 32 --] +[1|- 11 -| 10 | 10 ][-- 32 --|-- 32 --] + ^ ^ ^ ^ ^ ^- file size + | | | | '-------------------- file head + | | | '- size (8) + | | '------ id + | '------------ type (0x202) + '----------------- valid bit +``` + +CTZ-struct fields: + +1. **File head (32-bits)** - Pointer to the block that is the head of the + file's CTZ skip-list. + +2. **File size (32-bits)** - Size of the file in bytes. + +--- +#### `0x3xx` LFS_TYPE_USERATTR + +Attaches a user attribute to an id. + +littlefs has a concept of "user attributes". These are small user-provided +attributes that can be used to store things like timestamps, hashes, +permissions, etc. + +Each user attribute is uniquely identified by an 8-bit type which is stored in +the chunk field, and the user attribute itself can be found in the tag's data. + +There are currently no standard user attributes and a portable littlefs +implementation should work with any user attributes missing. + +Layout of the user-attr tag: + +``` + tag data +[-- 32 --][--- variable length ---] +[1| 3| 8 | 10 | 10 ][--- (size * 8) ---] + ^ ^ ^ ^ ^- size ^- attr data + | | | '------ id + | | '----------- attr type + | '-------------- type1 (0x3) + '----------------- valid bit +``` + +User-attr fields: + +1. **Attr type (8-bits)** - Type of the user attributes. + +2. **Attr data** - The data associated with the user attribute. + +--- +#### `0x6xx` LFS_TYPE_TAIL + +Provides the tail pointer for the metadata pair itself. + +The metadata pair's tail pointer is used in littlefs for a linked-list +containing all metadata pairs. The chunk field contains the type of the tail, +which indicates if the following metadata pair is a part of the directory +(hard-tail) or only used to traverse the filesystem (soft-tail). + +``` + .--------. + .| dir A |-. + ||softtail| | +.--------| |-' +| |'--------' +| '---|--|-' +| .-' '-------------. +| v v +| .--------. .--------. .--------. +'->| dir B |->| dir B |->| dir C | + ||hardtail| ||softtail| || | + || | || | || | + |'--------' |'--------' |'--------' + '--------' '--------' '--------' +``` + +Currently any type supersedes any other preceding tails in the metadata pair, +but this may change if additional metadata pair state is added. + +A note about the metadata pair linked-list: Normally, this linked-list contains +every metadata pair in the filesystem. However, there are some operations that +can cause this linked-list to become out of sync if a power-loss were to occur. +When this happens, littlefs sets the "sync" flag in the global state. How +exactly this flag is stored is described below. + +When the sync flag is set: + +1. The linked-list may contain an orphaned directory that has been removed in + the filesystem. +2. The linked-list may contain a metadata pair with a bad block that has been + replaced in the filesystem. + +If the sync flag is set, the threaded linked-list must be checked for these +errors before it can be used reliably. Note that the threaded linked-list can +be ignored if littlefs is mounted read-only. + +Layout of the tail tag: + +``` + tag data +[-- 32 --][-- 32 --|-- 32 --] +[1| 3| 8 | 10 | 10 ][--- 64 ---] + ^ ^ ^ ^ ^- size (8) ^- metadata pair + | | | '------ id + | | '---------- tail type + | '------------- type1 (0x6) + '---------------- valid bit +``` + +Tail fields: + +1. **Tail type (8-bits)** - Type of the tail pointer. + +2. **Metadata pair (8-bytes)** - Pointer to the next metadata-pair. + +--- +#### `0x600` LFS_TYPE_SOFTTAIL + +Provides a tail pointer that points to the next metadata pair in the +filesystem. + +In this case, the next metadata pair is not a part of our current directory +and should only be followed when traversing the entire filesystem. + +--- +#### `0x601` LFS_TYPE_HARDTAIL + +Provides a tail pointer that points to the next metadata pair in the +directory. + +In this case, the next metadata pair belongs to the current directory. Note +that because directories in littlefs are sorted alphabetically, the next +metadata pair should only contain filenames greater than any filename in the +current pair. + +--- +#### `0x7xx` LFS_TYPE_GSTATE + +Provides delta bits for global state entries. + +littlefs has a concept of "global state". This is a small set of state that +can be updated by a commit to _any_ metadata pair in the filesystem. + +The way this works is that the global state is stored as a set of deltas +distributed across the filesystem such that the global state can be found by +the xor-sum of these deltas. + +``` + .--------. .--------. .--------. .--------. .--------. +.| |->| gdelta |->| |->| gdelta |->| gdelta | +|| | || 0x23 | || | || 0xff | || 0xce | +|| | || | || | || | || | +|'--------' |'--------' |'--------' |'--------' |'--------' +'--------' '----|---' '--------' '----|---' '----|---' + v v v + 0x00 --> xor ------------------> xor ------> xor --> gstate = 0x12 +``` + +Note that storing globals this way is very expensive in terms of storage usage, +so any global state should be kept very small. + +The size and format of each piece of global state depends on the type, which +is stored in the chunk field. Currently, the only global state is move state, +which is outlined below. + +--- +#### `0x7ff` LFS_TYPE_MOVESTATE + +Provides delta bits for the global move state. + +The move state in littlefs is used to store info about operations that could +cause to filesystem to go out of sync if the power is lost. The operations +where this could occur is moves of files between metadata pairs and any +operation that changes metadata pairs on the threaded linked-list. + +In the case of moves, the move state contains a tag + metadata pair describing +the source of the ongoing move. If this tag is non-zero, that means that power +was lost during a move, and the file exists in two different locations. If this +happens, the source of the move should be considered deleted, and the move +should be completed (the source should be deleted) before any other write +operations to the filesystem. + +In the case of operations to the threaded linked-list, a single "sync" bit is +used to indicate that a modification is ongoing. If this sync flag is set, the +threaded linked-list will need to be checked for errors before it can be used +reliably. The exact cases to check for are described above in the tail tag. + +Layout of the move state: + +``` + tag data +[-- 32 --][-- 32 --|-- 32 --|-- 32 --] +[1|- 11 -| 10 | 10 ][1|- 11 -| 10 | 10 |--- 64 ---] + ^ ^ ^ ^ ^ ^ ^ ^- padding (0) ^- metadata pair + | | | | | | '------ move id + | | | | | '------------ move type + | | | | '----------------- sync bit + | | | | + | | | '- size (12) + | | '------ id (0x3ff) + | '------------ type (0x7ff) + '----------------- valid bit +``` + +Move state fields: + +1. **Sync bit (1-bit)** - Indicates if the metadata pair threaded linked-list + is in-sync. If set, the threaded linked-list should be checked for errors. + +2. **Move type (11-bits)** - Type of move being performed. Must be either + `0x000`, indicating no move, or `0x4ff` indicating the source file should + be deleted. + +3. **Move id (10-bits)** - The file id being moved. + +4. **Metadata pair (8-bytes)** - Pointer to the metadata-pair containing + the move. + +--- +#### `0x5xx` LFS_TYPE_CRC + +Last but not least, the CRC tag marks the end of a commit and provides a +checksum for any commits to the metadata block. + +The first 32-bits of the data contain a CRC-32 with a polynomial of +`0x04c11db7` initialized with `0xffffffff`. This CRC provides a checksum for +all metadata since the previous CRC tag, including the CRC tag itself. For +the first commit, this includes the revision count for the metadata block. + +However, the size of the data is not limited to 32-bits. The data field may +larger to pad the commit to the next program-aligned boundary. + +In addition, the CRC tag's chunk field contains a set of flags which can +change the behaviour of commits. Currently the only flag in use is the lowest +bit, which determines the expected state of the valid bit for any following +tags. This is used to guarantee that unwritten storage in a metadata block +will be detected as invalid. + +Layout of the CRC tag: + +``` + tag data +[-- 32 --][-- 32 --|--- variable length ---] +[1| 3| 8 | 10 | 10 ][-- 32 --|--- (size * 8 - 32) ---] + ^ ^ ^ ^ ^ ^- crc ^- padding + | | | | '- size + | | | '------ id (0x3ff) + | | '----------- valid state + | '-------------- type1 (0x5) + '----------------- valid bit +``` + +CRC fields: + +1. **Valid state (1-bit)** - Indicates the expected value of the valid bit for + any tags in the next commit. + +2. **CRC (32-bits)** - CRC-32 with a polynomial of `0x04c11db7` initialized + with `0xffffffff`. + +3. **Padding** - Padding to the next program-aligned boundary. No guarantees + are made about the contents. + +--- diff --git a/ext/littlefs/bd/lfs_filebd.c b/ext/littlefs/bd/lfs_filebd.c new file mode 100644 index 0000000000..2d36a42f5d --- /dev/null +++ b/ext/littlefs/bd/lfs_filebd.c @@ -0,0 +1,205 @@ +/* + * Block device emulated in a file + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#include "bd/lfs_filebd.h" + +#include +#include +#include + +int lfs_filebd_createcfg(const struct lfs_config *cfg, const char *path, + const struct lfs_filebd_config *bdcfg) { + LFS_FILEBD_TRACE("lfs_filebd_createcfg(%p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32"}, " + "\"%s\", " + "%p {.erase_value=%"PRId32"})", + (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + path, (void*)bdcfg, bdcfg->erase_value); + lfs_filebd_t *bd = cfg->context; + bd->cfg = bdcfg; + + // open file + bd->fd = open(path, O_RDWR | O_CREAT, 0666); + if (bd->fd < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_createcfg -> %d", err); + return err; + } + + LFS_FILEBD_TRACE("lfs_filebd_createcfg -> %d", 0); + return 0; +} + +int lfs_filebd_create(const struct lfs_config *cfg, const char *path) { + LFS_FILEBD_TRACE("lfs_filebd_create(%p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32"}, " + "\"%s\")", + (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + path); + static const struct lfs_filebd_config defaults = {.erase_value=-1}; + int err = lfs_filebd_createcfg(cfg, path, &defaults); + LFS_FILEBD_TRACE("lfs_filebd_create -> %d", err); + return err; +} + +int lfs_filebd_destroy(const struct lfs_config *cfg) { + LFS_FILEBD_TRACE("lfs_filebd_destroy(%p)", (void*)cfg); + lfs_filebd_t *bd = cfg->context; + int err = close(bd->fd); + if (err < 0) { + err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_destroy -> %d", err); + return err; + } + LFS_FILEBD_TRACE("lfs_filebd_destroy -> %d", 0); + return 0; +} + +int lfs_filebd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size) { + LFS_FILEBD_TRACE("lfs_filebd_read(%p, " + "0x%"PRIx32", %"PRIu32", %p, %"PRIu32")", + (void*)cfg, block, off, buffer, size); + lfs_filebd_t *bd = cfg->context; + + // check if read is valid + LFS_ASSERT(off % cfg->read_size == 0); + LFS_ASSERT(size % cfg->read_size == 0); + LFS_ASSERT(block < cfg->block_count); + + // zero for reproducability (in case file is truncated) + if (bd->cfg->erase_value != -1) { + memset(buffer, bd->cfg->erase_value, size); + } + + // read + off_t res1 = lseek(bd->fd, + (off_t)block*cfg->block_size + (off_t)off, SEEK_SET); + if (res1 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_read -> %d", err); + return err; + } + + ssize_t res2 = read(bd->fd, buffer, size); + if (res2 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_read -> %d", err); + return err; + } + + LFS_FILEBD_TRACE("lfs_filebd_read -> %d", 0); + return 0; +} + +int lfs_filebd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size) { + LFS_FILEBD_TRACE("lfs_filebd_prog(%p, 0x%"PRIx32", %"PRIu32", %p, %"PRIu32")", + (void*)cfg, block, off, buffer, size); + lfs_filebd_t *bd = cfg->context; + + // check if write is valid + LFS_ASSERT(off % cfg->prog_size == 0); + LFS_ASSERT(size % cfg->prog_size == 0); + LFS_ASSERT(block < cfg->block_count); + + // check that data was erased? only needed for testing + if (bd->cfg->erase_value != -1) { + off_t res1 = lseek(bd->fd, + (off_t)block*cfg->block_size + (off_t)off, SEEK_SET); + if (res1 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_prog -> %d", err); + return err; + } + + for (lfs_off_t i = 0; i < size; i++) { + uint8_t c; + ssize_t res2 = read(bd->fd, &c, 1); + if (res2 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_prog -> %d", err); + return err; + } + + LFS_ASSERT(c == bd->cfg->erase_value); + } + } + + // program data + off_t res1 = lseek(bd->fd, + (off_t)block*cfg->block_size + (off_t)off, SEEK_SET); + if (res1 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_prog -> %d", err); + return err; + } + + ssize_t res2 = write(bd->fd, buffer, size); + if (res2 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_prog -> %d", err); + return err; + } + + LFS_FILEBD_TRACE("lfs_filebd_prog -> %d", 0); + return 0; +} + +int lfs_filebd_erase(const struct lfs_config *cfg, lfs_block_t block) { + LFS_FILEBD_TRACE("lfs_filebd_erase(%p, 0x%"PRIx32")", (void*)cfg, block); + lfs_filebd_t *bd = cfg->context; + + // check if erase is valid + LFS_ASSERT(block < cfg->block_count); + + // erase, only needed for testing + if (bd->cfg->erase_value != -1) { + off_t res1 = lseek(bd->fd, (off_t)block*cfg->block_size, SEEK_SET); + if (res1 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_erase -> %d", err); + return err; + } + + for (lfs_off_t i = 0; i < cfg->block_size; i++) { + ssize_t res2 = write(bd->fd, &(uint8_t){bd->cfg->erase_value}, 1); + if (res2 < 0) { + int err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_erase -> %d", err); + return err; + } + } + } + + LFS_FILEBD_TRACE("lfs_filebd_erase -> %d", 0); + return 0; +} + +int lfs_filebd_sync(const struct lfs_config *cfg) { + LFS_FILEBD_TRACE("lfs_filebd_sync(%p)", (void*)cfg); + // file sync + lfs_filebd_t *bd = cfg->context; + int err = fsync(bd->fd); + if (err) { + err = -errno; + LFS_FILEBD_TRACE("lfs_filebd_sync -> %d", 0); + return err; + } + + LFS_FILEBD_TRACE("lfs_filebd_sync -> %d", 0); + return 0; +} diff --git a/ext/littlefs/bd/lfs_filebd.h b/ext/littlefs/bd/lfs_filebd.h new file mode 100644 index 0000000000..0d56434aa1 --- /dev/null +++ b/ext/littlefs/bd/lfs_filebd.h @@ -0,0 +1,73 @@ +/* + * Block device emulated in a file + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_FILEBD_H +#define LFS_FILEBD_H + +#include "lfs.h" +#include "lfs_util.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Block device specific tracing +#ifdef LFS_FILEBD_YES_TRACE +#define LFS_FILEBD_TRACE(...) LFS_TRACE(__VA_ARGS__) +#else +#define LFS_FILEBD_TRACE(...) +#endif + +// filebd config (optional) +struct lfs_filebd_config { + // 8-bit erase value to use for simulating erases. -1 does not simulate + // erases, which can speed up testing by avoiding all the extra block-device + // operations to store the erase value. + int32_t erase_value; +}; + +// filebd state +typedef struct lfs_filebd { + int fd; + const struct lfs_filebd_config *cfg; +} lfs_filebd_t; + + +// Create a file block device using the geometry in lfs_config +int lfs_filebd_create(const struct lfs_config *cfg, const char *path); +int lfs_filebd_createcfg(const struct lfs_config *cfg, const char *path, + const struct lfs_filebd_config *bdcfg); + +// Clean up memory associated with block device +int lfs_filebd_destroy(const struct lfs_config *cfg); + +// Read a block +int lfs_filebd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + +// Program a block +// +// The block must have previously been erased. +int lfs_filebd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + +// Erase a block +// +// A block must be erased before being programmed. The +// state of an erased block is undefined. +int lfs_filebd_erase(const struct lfs_config *cfg, lfs_block_t block); + +// Sync the block device +int lfs_filebd_sync(const struct lfs_config *cfg); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/ext/littlefs/bd/lfs_rambd.c b/ext/littlefs/bd/lfs_rambd.c new file mode 100644 index 0000000000..0a6b5cca36 --- /dev/null +++ b/ext/littlefs/bd/lfs_rambd.c @@ -0,0 +1,140 @@ +/* + * Block device emulated in RAM + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#include "bd/lfs_rambd.h" + +int lfs_rambd_createcfg(const struct lfs_config *cfg, + const struct lfs_rambd_config *bdcfg) { + LFS_RAMBD_TRACE("lfs_rambd_createcfg(%p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32"}, " + "%p {.erase_value=%"PRId32", .buffer=%p})", + (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + (void*)bdcfg, bdcfg->erase_value, bdcfg->buffer); + lfs_rambd_t *bd = cfg->context; + bd->cfg = bdcfg; + + // allocate buffer? + if (bd->cfg->buffer) { + bd->buffer = bd->cfg->buffer; + } else { + bd->buffer = lfs_malloc(cfg->block_size * cfg->block_count); + if (!bd->buffer) { + LFS_RAMBD_TRACE("lfs_rambd_createcfg -> %d", LFS_ERR_NOMEM); + return LFS_ERR_NOMEM; + } + } + + // zero for reproducability? + if (bd->cfg->erase_value != -1) { + memset(bd->buffer, bd->cfg->erase_value, + cfg->block_size * cfg->block_count); + } + + LFS_RAMBD_TRACE("lfs_rambd_createcfg -> %d", 0); + return 0; +} + +int lfs_rambd_create(const struct lfs_config *cfg) { + LFS_RAMBD_TRACE("lfs_rambd_create(%p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32"})", + (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count); + static const struct lfs_rambd_config defaults = {.erase_value=-1}; + int err = lfs_rambd_createcfg(cfg, &defaults); + LFS_RAMBD_TRACE("lfs_rambd_create -> %d", err); + return err; +} + +int lfs_rambd_destroy(const struct lfs_config *cfg) { + LFS_RAMBD_TRACE("lfs_rambd_destroy(%p)", (void*)cfg); + // clean up memory + lfs_rambd_t *bd = cfg->context; + if (!bd->cfg->buffer) { + lfs_free(bd->buffer); + } + LFS_RAMBD_TRACE("lfs_rambd_destroy -> %d", 0); + return 0; +} + +int lfs_rambd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size) { + LFS_RAMBD_TRACE("lfs_rambd_read(%p, " + "0x%"PRIx32", %"PRIu32", %p, %"PRIu32")", + (void*)cfg, block, off, buffer, size); + lfs_rambd_t *bd = cfg->context; + + // check if read is valid + LFS_ASSERT(off % cfg->read_size == 0); + LFS_ASSERT(size % cfg->read_size == 0); + LFS_ASSERT(block < cfg->block_count); + + // read data + memcpy(buffer, &bd->buffer[block*cfg->block_size + off], size); + + LFS_RAMBD_TRACE("lfs_rambd_read -> %d", 0); + return 0; +} + +int lfs_rambd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size) { + LFS_RAMBD_TRACE("lfs_rambd_prog(%p, " + "0x%"PRIx32", %"PRIu32", %p, %"PRIu32")", + (void*)cfg, block, off, buffer, size); + lfs_rambd_t *bd = cfg->context; + + // check if write is valid + LFS_ASSERT(off % cfg->prog_size == 0); + LFS_ASSERT(size % cfg->prog_size == 0); + LFS_ASSERT(block < cfg->block_count); + + // check that data was erased? only needed for testing + if (bd->cfg->erase_value != -1) { + for (lfs_off_t i = 0; i < size; i++) { + LFS_ASSERT(bd->buffer[block*cfg->block_size + off + i] == + bd->cfg->erase_value); + } + } + + // program data + memcpy(&bd->buffer[block*cfg->block_size + off], buffer, size); + + LFS_RAMBD_TRACE("lfs_rambd_prog -> %d", 0); + return 0; +} + +int lfs_rambd_erase(const struct lfs_config *cfg, lfs_block_t block) { + LFS_RAMBD_TRACE("lfs_rambd_erase(%p, 0x%"PRIx32")", (void*)cfg, block); + lfs_rambd_t *bd = cfg->context; + + // check if erase is valid + LFS_ASSERT(block < cfg->block_count); + + // erase, only needed for testing + if (bd->cfg->erase_value != -1) { + memset(&bd->buffer[block*cfg->block_size], + bd->cfg->erase_value, cfg->block_size); + } + + LFS_RAMBD_TRACE("lfs_rambd_erase -> %d", 0); + return 0; +} + +int lfs_rambd_sync(const struct lfs_config *cfg) { + LFS_RAMBD_TRACE("lfs_rambd_sync(%p)", (void*)cfg); + // sync does nothing because we aren't backed by anything real + (void)cfg; + LFS_RAMBD_TRACE("lfs_rambd_sync -> %d", 0); + return 0; +} diff --git a/ext/littlefs/bd/lfs_rambd.h b/ext/littlefs/bd/lfs_rambd.h new file mode 100644 index 0000000000..56a45ce90d --- /dev/null +++ b/ext/littlefs/bd/lfs_rambd.h @@ -0,0 +1,75 @@ +/* + * Block device emulated in RAM + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_RAMBD_H +#define LFS_RAMBD_H + +#include "lfs.h" +#include "lfs_util.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Block device specific tracing +#ifdef LFS_RAMBD_YES_TRACE +#define LFS_RAMBD_TRACE(...) LFS_TRACE(__VA_ARGS__) +#else +#define LFS_RAMBD_TRACE(...) +#endif + +// rambd config (optional) +struct lfs_rambd_config { + // 8-bit erase value to simulate erasing with. -1 indicates no erase + // occurs, which is still a valid block device + int32_t erase_value; + + // Optional statically allocated buffer for the block device. + void *buffer; +}; + +// rambd state +typedef struct lfs_rambd { + uint8_t *buffer; + const struct lfs_rambd_config *cfg; +} lfs_rambd_t; + + +// Create a RAM block device using the geometry in lfs_config +int lfs_rambd_create(const struct lfs_config *cfg); +int lfs_rambd_createcfg(const struct lfs_config *cfg, + const struct lfs_rambd_config *bdcfg); + +// Clean up memory associated with block device +int lfs_rambd_destroy(const struct lfs_config *cfg); + +// Read a block +int lfs_rambd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + +// Program a block +// +// The block must have previously been erased. +int lfs_rambd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + +// Erase a block +// +// A block must be erased before being programmed. The +// state of an erased block is undefined. +int lfs_rambd_erase(const struct lfs_config *cfg, lfs_block_t block); + +// Sync the block device +int lfs_rambd_sync(const struct lfs_config *cfg); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/ext/littlefs/bd/lfs_testbd.c b/ext/littlefs/bd/lfs_testbd.c new file mode 100644 index 0000000000..9d3f40cb75 --- /dev/null +++ b/ext/littlefs/bd/lfs_testbd.c @@ -0,0 +1,302 @@ +/* + * Testing block device, wraps filebd and rambd while providing a bunch + * of hooks for testing littlefs in various conditions. + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#include "bd/lfs_testbd.h" + +#include + + +int lfs_testbd_createcfg(const struct lfs_config *cfg, const char *path, + const struct lfs_testbd_config *bdcfg) { + LFS_TESTBD_TRACE("lfs_testbd_createcfg(%p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32"}, " + "\"%s\", " + "%p {.erase_value=%"PRId32", .erase_cycles=%"PRIu32", " + ".badblock_behavior=%"PRIu8", .power_cycles=%"PRIu32", " + ".buffer=%p, .wear_buffer=%p})", + (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + path, (void*)bdcfg, bdcfg->erase_value, bdcfg->erase_cycles, + bdcfg->badblock_behavior, bdcfg->power_cycles, + bdcfg->buffer, bdcfg->wear_buffer); + lfs_testbd_t *bd = cfg->context; + bd->cfg = bdcfg; + + // setup testing things + bd->persist = path; + bd->power_cycles = bd->cfg->power_cycles; + + if (bd->cfg->erase_cycles) { + if (bd->cfg->wear_buffer) { + bd->wear = bd->cfg->wear_buffer; + } else { + bd->wear = lfs_malloc(sizeof(lfs_testbd_wear_t)*cfg->block_count); + if (!bd->wear) { + LFS_TESTBD_TRACE("lfs_testbd_createcfg -> %d", LFS_ERR_NOMEM); + return LFS_ERR_NOMEM; + } + } + + memset(bd->wear, 0, sizeof(lfs_testbd_wear_t) * cfg->block_count); + } + + // create underlying block device + if (bd->persist) { + bd->u.file.cfg = (struct lfs_filebd_config){ + .erase_value = bd->cfg->erase_value, + }; + int err = lfs_filebd_createcfg(cfg, path, &bd->u.file.cfg); + LFS_TESTBD_TRACE("lfs_testbd_createcfg -> %d", err); + return err; + } else { + bd->u.ram.cfg = (struct lfs_rambd_config){ + .erase_value = bd->cfg->erase_value, + .buffer = bd->cfg->buffer, + }; + int err = lfs_rambd_createcfg(cfg, &bd->u.ram.cfg); + LFS_TESTBD_TRACE("lfs_testbd_createcfg -> %d", err); + return err; + } +} + +int lfs_testbd_create(const struct lfs_config *cfg, const char *path) { + LFS_TESTBD_TRACE("lfs_testbd_create(%p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32"}, " + "\"%s\")", + (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + path); + static const struct lfs_testbd_config defaults = {.erase_value=-1}; + int err = lfs_testbd_createcfg(cfg, path, &defaults); + LFS_TESTBD_TRACE("lfs_testbd_create -> %d", err); + return err; +} + +int lfs_testbd_destroy(const struct lfs_config *cfg) { + LFS_TESTBD_TRACE("lfs_testbd_destroy(%p)", (void*)cfg); + lfs_testbd_t *bd = cfg->context; + if (bd->cfg->erase_cycles && !bd->cfg->wear_buffer) { + lfs_free(bd->wear); + } + + if (bd->persist) { + int err = lfs_filebd_destroy(cfg); + LFS_TESTBD_TRACE("lfs_testbd_destroy -> %d", err); + return err; + } else { + int err = lfs_rambd_destroy(cfg); + LFS_TESTBD_TRACE("lfs_testbd_destroy -> %d", err); + return err; + } +} + +/// Internal mapping to block devices /// +static int lfs_testbd_rawread(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size) { + lfs_testbd_t *bd = cfg->context; + if (bd->persist) { + return lfs_filebd_read(cfg, block, off, buffer, size); + } else { + return lfs_rambd_read(cfg, block, off, buffer, size); + } +} + +static int lfs_testbd_rawprog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size) { + lfs_testbd_t *bd = cfg->context; + if (bd->persist) { + return lfs_filebd_prog(cfg, block, off, buffer, size); + } else { + return lfs_rambd_prog(cfg, block, off, buffer, size); + } +} + +static int lfs_testbd_rawerase(const struct lfs_config *cfg, + lfs_block_t block) { + lfs_testbd_t *bd = cfg->context; + if (bd->persist) { + return lfs_filebd_erase(cfg, block); + } else { + return lfs_rambd_erase(cfg, block); + } +} + +static int lfs_testbd_rawsync(const struct lfs_config *cfg) { + lfs_testbd_t *bd = cfg->context; + if (bd->persist) { + return lfs_filebd_sync(cfg); + } else { + return lfs_rambd_sync(cfg); + } +} + +/// block device API /// +int lfs_testbd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size) { + LFS_TESTBD_TRACE("lfs_testbd_read(%p, " + "0x%"PRIx32", %"PRIu32", %p, %"PRIu32")", + (void*)cfg, block, off, buffer, size); + lfs_testbd_t *bd = cfg->context; + + // check if read is valid + LFS_ASSERT(off % cfg->read_size == 0); + LFS_ASSERT(size % cfg->read_size == 0); + LFS_ASSERT(block < cfg->block_count); + + // block bad? + if (bd->cfg->erase_cycles && bd->wear[block] >= bd->cfg->erase_cycles && + bd->cfg->badblock_behavior == LFS_TESTBD_BADBLOCK_READERROR) { + LFS_TESTBD_TRACE("lfs_testbd_read -> %d", LFS_ERR_CORRUPT); + return LFS_ERR_CORRUPT; + } + + // read + int err = lfs_testbd_rawread(cfg, block, off, buffer, size); + LFS_TESTBD_TRACE("lfs_testbd_read -> %d", err); + return err; +} + +int lfs_testbd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size) { + LFS_TESTBD_TRACE("lfs_testbd_prog(%p, " + "0x%"PRIx32", %"PRIu32", %p, %"PRIu32")", + (void*)cfg, block, off, buffer, size); + lfs_testbd_t *bd = cfg->context; + + // check if write is valid + LFS_ASSERT(off % cfg->prog_size == 0); + LFS_ASSERT(size % cfg->prog_size == 0); + LFS_ASSERT(block < cfg->block_count); + + // block bad? + if (bd->cfg->erase_cycles && bd->wear[block] >= bd->cfg->erase_cycles) { + if (bd->cfg->badblock_behavior == + LFS_TESTBD_BADBLOCK_PROGERROR) { + LFS_TESTBD_TRACE("lfs_testbd_prog -> %d", LFS_ERR_CORRUPT); + return LFS_ERR_CORRUPT; + } else if (bd->cfg->badblock_behavior == + LFS_TESTBD_BADBLOCK_PROGNOOP || + bd->cfg->badblock_behavior == + LFS_TESTBD_BADBLOCK_ERASENOOP) { + LFS_TESTBD_TRACE("lfs_testbd_prog -> %d", 0); + return 0; + } + } + + // prog + int err = lfs_testbd_rawprog(cfg, block, off, buffer, size); + if (err) { + LFS_TESTBD_TRACE("lfs_testbd_prog -> %d", err); + return err; + } + + // lose power? + if (bd->power_cycles > 0) { + bd->power_cycles -= 1; + if (bd->power_cycles == 0) { + // sync to make sure we persist the last changes + LFS_ASSERT(lfs_testbd_rawsync(cfg) == 0); + // simulate power loss + exit(33); + } + } + + LFS_TESTBD_TRACE("lfs_testbd_prog -> %d", 0); + return 0; +} + +int lfs_testbd_erase(const struct lfs_config *cfg, lfs_block_t block) { + LFS_TESTBD_TRACE("lfs_testbd_erase(%p, 0x%"PRIx32")", (void*)cfg, block); + lfs_testbd_t *bd = cfg->context; + + // check if erase is valid + LFS_ASSERT(block < cfg->block_count); + + // block bad? + if (bd->cfg->erase_cycles) { + if (bd->wear[block] >= bd->cfg->erase_cycles) { + if (bd->cfg->badblock_behavior == + LFS_TESTBD_BADBLOCK_ERASEERROR) { + LFS_TESTBD_TRACE("lfs_testbd_erase -> %d", LFS_ERR_CORRUPT); + return LFS_ERR_CORRUPT; + } else if (bd->cfg->badblock_behavior == + LFS_TESTBD_BADBLOCK_ERASENOOP) { + LFS_TESTBD_TRACE("lfs_testbd_erase -> %d", 0); + return 0; + } + } else { + // mark wear + bd->wear[block] += 1; + } + } + + // erase + int err = lfs_testbd_rawerase(cfg, block); + if (err) { + LFS_TESTBD_TRACE("lfs_testbd_erase -> %d", err); + return err; + } + + // lose power? + if (bd->power_cycles > 0) { + bd->power_cycles -= 1; + if (bd->power_cycles == 0) { + // sync to make sure we persist the last changes + LFS_ASSERT(lfs_testbd_rawsync(cfg) == 0); + // simulate power loss + exit(33); + } + } + + LFS_TESTBD_TRACE("lfs_testbd_prog -> %d", 0); + return 0; +} + +int lfs_testbd_sync(const struct lfs_config *cfg) { + LFS_TESTBD_TRACE("lfs_testbd_sync(%p)", (void*)cfg); + int err = lfs_testbd_rawsync(cfg); + LFS_TESTBD_TRACE("lfs_testbd_sync -> %d", err); + return err; +} + + +/// simulated wear operations /// +lfs_testbd_swear_t lfs_testbd_getwear(const struct lfs_config *cfg, + lfs_block_t block) { + LFS_TESTBD_TRACE("lfs_testbd_getwear(%p, %"PRIu32")", (void*)cfg, block); + lfs_testbd_t *bd = cfg->context; + + // check if block is valid + LFS_ASSERT(bd->cfg->erase_cycles); + LFS_ASSERT(block < cfg->block_count); + + LFS_TESTBD_TRACE("lfs_testbd_getwear -> %"PRIu32, bd->wear[block]); + return bd->wear[block]; +} + +int lfs_testbd_setwear(const struct lfs_config *cfg, + lfs_block_t block, lfs_testbd_wear_t wear) { + LFS_TESTBD_TRACE("lfs_testbd_setwear(%p, %"PRIu32")", (void*)cfg, block); + lfs_testbd_t *bd = cfg->context; + + // check if block is valid + LFS_ASSERT(bd->cfg->erase_cycles); + LFS_ASSERT(block < cfg->block_count); + + bd->wear[block] = wear; + + LFS_TESTBD_TRACE("lfs_testbd_setwear -> %d", 0); + return 0; +} diff --git a/ext/littlefs/bd/lfs_testbd.h b/ext/littlefs/bd/lfs_testbd.h new file mode 100644 index 0000000000..b1fb2e924e --- /dev/null +++ b/ext/littlefs/bd/lfs_testbd.h @@ -0,0 +1,141 @@ +/* + * Testing block device, wraps filebd and rambd while providing a bunch + * of hooks for testing littlefs in various conditions. + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_TESTBD_H +#define LFS_TESTBD_H + +#include "lfs.h" +#include "lfs_util.h" +#include "bd/lfs_rambd.h" +#include "bd/lfs_filebd.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Block device specific tracing +#ifdef LFS_TESTBD_YES_TRACE +#define LFS_TESTBD_TRACE(...) LFS_TRACE(__VA_ARGS__) +#else +#define LFS_TESTBD_TRACE(...) +#endif + +// Mode determining how "bad blocks" behave during testing. This simulates +// some real-world circumstances such as progs not sticking (prog-noop), +// a readonly disk (erase-noop), and ECC failures (read-error). +// +// Not that read-noop is not allowed. Read _must_ return a consistent (but +// may be arbitrary) value on every read. +enum lfs_testbd_badblock_behavior { + LFS_TESTBD_BADBLOCK_PROGERROR, + LFS_TESTBD_BADBLOCK_ERASEERROR, + LFS_TESTBD_BADBLOCK_READERROR, + LFS_TESTBD_BADBLOCK_PROGNOOP, + LFS_TESTBD_BADBLOCK_ERASENOOP, +}; + +// Type for measuring wear +typedef uint32_t lfs_testbd_wear_t; +typedef int32_t lfs_testbd_swear_t; + +// testbd config, this is required for testing +struct lfs_testbd_config { + // 8-bit erase value to use for simulating erases. -1 does not simulate + // erases, which can speed up testing by avoiding all the extra block-device + // operations to store the erase value. + int32_t erase_value; + + // Number of erase cycles before a block becomes "bad". The exact behavior + // of bad blocks is controlled by the badblock_mode. + uint32_t erase_cycles; + + // The mode determining how bad blocks fail + uint8_t badblock_behavior; + + // Number of write operations (erase/prog) before forcefully killing + // the program with exit. Simulates power-loss. 0 disables. + uint32_t power_cycles; + + // Optional buffer for RAM block device. + void *buffer; + + // Optional buffer for wear + void *wear_buffer; +}; + +// testbd state +typedef struct lfs_testbd { + union { + struct { + lfs_filebd_t bd; + struct lfs_filebd_config cfg; + } file; + struct { + lfs_rambd_t bd; + struct lfs_rambd_config cfg; + } ram; + } u; + + bool persist; + uint32_t power_cycles; + lfs_testbd_wear_t *wear; + + const struct lfs_testbd_config *cfg; +} lfs_testbd_t; + + +/// Block device API /// + +// Create a test block device using the geometry in lfs_config +// +// Note that filebd is used if a path is provided, if path is NULL +// testbd will use rambd which can be much faster. +int lfs_testbd_create(const struct lfs_config *cfg, const char *path); +int lfs_testbd_createcfg(const struct lfs_config *cfg, const char *path, + const struct lfs_testbd_config *bdcfg); + +// Clean up memory associated with block device +int lfs_testbd_destroy(const struct lfs_config *cfg); + +// Read a block +int lfs_testbd_read(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + +// Program a block +// +// The block must have previously been erased. +int lfs_testbd_prog(const struct lfs_config *cfg, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + +// Erase a block +// +// A block must be erased before being programmed. The +// state of an erased block is undefined. +int lfs_testbd_erase(const struct lfs_config *cfg, lfs_block_t block); + +// Sync the block device +int lfs_testbd_sync(const struct lfs_config *cfg); + + +/// Additional extended API for driving test features /// + +// Get simulated wear on a given block +lfs_testbd_swear_t lfs_testbd_getwear(const struct lfs_config *cfg, + lfs_block_t block); + +// Manually set simulated wear on a given block +int lfs_testbd_setwear(const struct lfs_config *cfg, + lfs_block_t block, lfs_testbd_wear_t wear); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/ext/littlefs/lfs.c b/ext/littlefs/lfs.c new file mode 100644 index 0000000000..d976389da1 --- /dev/null +++ b/ext/littlefs/lfs.c @@ -0,0 +1,5430 @@ +/* + * The little filesystem + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#include "lfs.h" +#include "lfs_util.h" + +#define LFS_BLOCK_NULL ((lfs_block_t)-1) +#define LFS_BLOCK_INLINE ((lfs_block_t)-2) + +/// Caching block device operations /// +static inline void lfs_cache_drop(lfs_t *lfs, lfs_cache_t *rcache) { + // do not zero, cheaper if cache is readonly or only going to be + // written with identical data (during relocates) + (void)lfs; + rcache->block = LFS_BLOCK_NULL; +} + +static inline void lfs_cache_zero(lfs_t *lfs, lfs_cache_t *pcache) { + // zero to avoid information leak + memset(pcache->buffer, 0xff, lfs->cfg->cache_size); + pcache->block = LFS_BLOCK_NULL; +} + +static int lfs_bd_read(lfs_t *lfs, + const lfs_cache_t *pcache, lfs_cache_t *rcache, lfs_size_t hint, + lfs_block_t block, lfs_off_t off, + void *buffer, lfs_size_t size) { + uint8_t *data = buffer; + if (block >= lfs->cfg->block_count || + off+size > lfs->cfg->block_size) { + return LFS_ERR_CORRUPT; + } + + while (size > 0) { + lfs_size_t diff = size; + + if (pcache && block == pcache->block && + off < pcache->off + pcache->size) { + if (off >= pcache->off) { + // is already in pcache? + diff = lfs_min(diff, pcache->size - (off-pcache->off)); + memcpy(data, &pcache->buffer[off-pcache->off], diff); + + data += diff; + off += diff; + size -= diff; + continue; + } + + // pcache takes priority + diff = lfs_min(diff, pcache->off-off); + } + + if (block == rcache->block && + off < rcache->off + rcache->size) { + if (off >= rcache->off) { + // is already in rcache? + diff = lfs_min(diff, rcache->size - (off-rcache->off)); + memcpy(data, &rcache->buffer[off-rcache->off], diff); + + data += diff; + off += diff; + size -= diff; + continue; + } + + // rcache takes priority + diff = lfs_min(diff, rcache->off-off); + } + + if (size >= hint && off % lfs->cfg->read_size == 0 && + size >= lfs->cfg->read_size) { + // bypass cache? + diff = lfs_aligndown(diff, lfs->cfg->read_size); + int err = lfs->cfg->read(lfs->cfg, block, off, data, diff); + if (err) { + return err; + } + + data += diff; + off += diff; + size -= diff; + continue; + } + + // load to cache, first condition can no longer fail + LFS_ASSERT(block < lfs->cfg->block_count); + rcache->block = block; + rcache->off = lfs_aligndown(off, lfs->cfg->read_size); + rcache->size = lfs_min( + lfs_min( + lfs_alignup(off+hint, lfs->cfg->read_size), + lfs->cfg->block_size) + - rcache->off, + lfs->cfg->cache_size); + int err = lfs->cfg->read(lfs->cfg, rcache->block, + rcache->off, rcache->buffer, rcache->size); + LFS_ASSERT(err <= 0); + if (err) { + return err; + } + } + + return 0; +} + +enum { + LFS_CMP_EQ = 0, + LFS_CMP_LT = 1, + LFS_CMP_GT = 2, +}; + +static int lfs_bd_cmp(lfs_t *lfs, + const lfs_cache_t *pcache, lfs_cache_t *rcache, lfs_size_t hint, + lfs_block_t block, lfs_off_t off, + const void *buffer, lfs_size_t size) { + const uint8_t *data = buffer; + lfs_size_t diff = 0; + + for (lfs_off_t i = 0; i < size; i += diff) { + uint8_t dat[8]; + + diff = lfs_min(size-i, sizeof(dat)); + int res = lfs_bd_read(lfs, + pcache, rcache, hint-i, + block, off+i, &dat, diff); + if (res) { + return res; + } + + res = memcmp(dat, data + i, diff); + if (res) { + return res < 0 ? LFS_CMP_LT : LFS_CMP_GT; + } + } + + return LFS_CMP_EQ; +} + +#ifndef LFS_READONLY +static int lfs_bd_flush(lfs_t *lfs, + lfs_cache_t *pcache, lfs_cache_t *rcache, bool validate) { + if (pcache->block != LFS_BLOCK_NULL && pcache->block != LFS_BLOCK_INLINE) { + LFS_ASSERT(pcache->block < lfs->cfg->block_count); + lfs_size_t diff = lfs_alignup(pcache->size, lfs->cfg->prog_size); + int err = lfs->cfg->prog(lfs->cfg, pcache->block, + pcache->off, pcache->buffer, diff); + LFS_ASSERT(err <= 0); + if (err) { + return err; + } + + if (validate) { + // check data on disk + lfs_cache_drop(lfs, rcache); + int res = lfs_bd_cmp(lfs, + NULL, rcache, diff, + pcache->block, pcache->off, pcache->buffer, diff); + if (res < 0) { + return res; + } + + if (res != LFS_CMP_EQ) { + return LFS_ERR_CORRUPT; + } + } + + lfs_cache_zero(lfs, pcache); + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_bd_sync(lfs_t *lfs, + lfs_cache_t *pcache, lfs_cache_t *rcache, bool validate) { + lfs_cache_drop(lfs, rcache); + + int err = lfs_bd_flush(lfs, pcache, rcache, validate); + if (err) { + return err; + } + + err = lfs->cfg->sync(lfs->cfg); + LFS_ASSERT(err <= 0); + return err; +} +#endif + +#ifndef LFS_READONLY +static int lfs_bd_prog(lfs_t *lfs, + lfs_cache_t *pcache, lfs_cache_t *rcache, bool validate, + lfs_block_t block, lfs_off_t off, + const void *buffer, lfs_size_t size) { + const uint8_t *data = buffer; + LFS_ASSERT(block == LFS_BLOCK_INLINE || block < lfs->cfg->block_count); + LFS_ASSERT(off + size <= lfs->cfg->block_size); + + while (size > 0) { + if (block == pcache->block && + off >= pcache->off && + off < pcache->off + lfs->cfg->cache_size) { + // already fits in pcache? + lfs_size_t diff = lfs_min(size, + lfs->cfg->cache_size - (off-pcache->off)); + memcpy(&pcache->buffer[off-pcache->off], data, diff); + + data += diff; + off += diff; + size -= diff; + + pcache->size = lfs_max(pcache->size, off - pcache->off); + if (pcache->size == lfs->cfg->cache_size) { + // eagerly flush out pcache if we fill up + int err = lfs_bd_flush(lfs, pcache, rcache, validate); + if (err) { + return err; + } + } + + continue; + } + + // pcache must have been flushed, either by programming and + // entire block or manually flushing the pcache + LFS_ASSERT(pcache->block == LFS_BLOCK_NULL); + + // prepare pcache, first condition can no longer fail + pcache->block = block; + pcache->off = lfs_aligndown(off, lfs->cfg->prog_size); + pcache->size = 0; + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_bd_erase(lfs_t *lfs, lfs_block_t block) { + LFS_ASSERT(block < lfs->cfg->block_count); + int err = lfs->cfg->erase(lfs->cfg, block); + LFS_ASSERT(err <= 0); + return err; +} +#endif + + +/// Small type-level utilities /// +// operations on block pairs +static inline void lfs_pair_swap(lfs_block_t pair[2]) { + lfs_block_t t = pair[0]; + pair[0] = pair[1]; + pair[1] = t; +} + +static inline bool lfs_pair_isnull(const lfs_block_t pair[2]) { + return pair[0] == LFS_BLOCK_NULL || pair[1] == LFS_BLOCK_NULL; +} + +static inline int lfs_pair_cmp( + const lfs_block_t paira[2], + const lfs_block_t pairb[2]) { + return !(paira[0] == pairb[0] || paira[1] == pairb[1] || + paira[0] == pairb[1] || paira[1] == pairb[0]); +} + +static inline bool lfs_pair_sync( + const lfs_block_t paira[2], + const lfs_block_t pairb[2]) { + return (paira[0] == pairb[0] && paira[1] == pairb[1]) || + (paira[0] == pairb[1] && paira[1] == pairb[0]); +} + +static inline void lfs_pair_fromle32(lfs_block_t pair[2]) { + pair[0] = lfs_fromle32(pair[0]); + pair[1] = lfs_fromle32(pair[1]); +} + +static inline void lfs_pair_tole32(lfs_block_t pair[2]) { + pair[0] = lfs_tole32(pair[0]); + pair[1] = lfs_tole32(pair[1]); +} + +// operations on 32-bit entry tags +typedef uint32_t lfs_tag_t; +typedef int32_t lfs_stag_t; + +#define LFS_MKTAG(type, id, size) \ + (((lfs_tag_t)(type) << 20) | ((lfs_tag_t)(id) << 10) | (lfs_tag_t)(size)) + +#define LFS_MKTAG_IF(cond, type, id, size) \ + ((cond) ? LFS_MKTAG(type, id, size) : LFS_MKTAG(LFS_FROM_NOOP, 0, 0)) + +#define LFS_MKTAG_IF_ELSE(cond, type1, id1, size1, type2, id2, size2) \ + ((cond) ? LFS_MKTAG(type1, id1, size1) : LFS_MKTAG(type2, id2, size2)) + +static inline bool lfs_tag_isvalid(lfs_tag_t tag) { + return !(tag & 0x80000000); +} + +static inline bool lfs_tag_isdelete(lfs_tag_t tag) { + return ((int32_t)(tag << 22) >> 22) == -1; +} + +static inline uint16_t lfs_tag_type1(lfs_tag_t tag) { + return (tag & 0x70000000) >> 20; +} + +static inline uint16_t lfs_tag_type3(lfs_tag_t tag) { + return (tag & 0x7ff00000) >> 20; +} + +static inline uint8_t lfs_tag_chunk(lfs_tag_t tag) { + return (tag & 0x0ff00000) >> 20; +} + +static inline int8_t lfs_tag_splice(lfs_tag_t tag) { + return (int8_t)lfs_tag_chunk(tag); +} + +static inline uint16_t lfs_tag_id(lfs_tag_t tag) { + return (tag & 0x000ffc00) >> 10; +} + +static inline lfs_size_t lfs_tag_size(lfs_tag_t tag) { + return tag & 0x000003ff; +} + +static inline lfs_size_t lfs_tag_dsize(lfs_tag_t tag) { + return sizeof(tag) + lfs_tag_size(tag + lfs_tag_isdelete(tag)); +} + +// operations on attributes in attribute lists +struct lfs_mattr { + lfs_tag_t tag; + const void *buffer; +}; + +struct lfs_diskoff { + lfs_block_t block; + lfs_off_t off; +}; + +#define LFS_MKATTRS(...) \ + (struct lfs_mattr[]){__VA_ARGS__}, \ + sizeof((struct lfs_mattr[]){__VA_ARGS__}) / sizeof(struct lfs_mattr) + +// operations on global state +static inline void lfs_gstate_xor(lfs_gstate_t *a, const lfs_gstate_t *b) { + for (int i = 0; i < 3; i++) { + ((uint32_t*)a)[i] ^= ((const uint32_t*)b)[i]; + } +} + +static inline bool lfs_gstate_iszero(const lfs_gstate_t *a) { + for (int i = 0; i < 3; i++) { + if (((uint32_t*)a)[i] != 0) { + return false; + } + } + return true; +} + +static inline bool lfs_gstate_hasorphans(const lfs_gstate_t *a) { + return lfs_tag_size(a->tag); +} + +static inline uint8_t lfs_gstate_getorphans(const lfs_gstate_t *a) { + return lfs_tag_size(a->tag); +} + +static inline bool lfs_gstate_hasmove(const lfs_gstate_t *a) { + return lfs_tag_type1(a->tag); +} + +static inline bool lfs_gstate_hasmovehere(const lfs_gstate_t *a, + const lfs_block_t *pair) { + return lfs_tag_type1(a->tag) && lfs_pair_cmp(a->pair, pair) == 0; +} + +static inline void lfs_gstate_fromle32(lfs_gstate_t *a) { + a->tag = lfs_fromle32(a->tag); + a->pair[0] = lfs_fromle32(a->pair[0]); + a->pair[1] = lfs_fromle32(a->pair[1]); +} + +static inline void lfs_gstate_tole32(lfs_gstate_t *a) { + a->tag = lfs_tole32(a->tag); + a->pair[0] = lfs_tole32(a->pair[0]); + a->pair[1] = lfs_tole32(a->pair[1]); +} + +// other endianness operations +static void lfs_ctz_fromle32(struct lfs_ctz *ctz) { + ctz->head = lfs_fromle32(ctz->head); + ctz->size = lfs_fromle32(ctz->size); +} + +#ifndef LFS_READONLY +static void lfs_ctz_tole32(struct lfs_ctz *ctz) { + ctz->head = lfs_tole32(ctz->head); + ctz->size = lfs_tole32(ctz->size); +} +#endif + +static inline void lfs_superblock_fromle32(lfs_superblock_t *superblock) { + superblock->version = lfs_fromle32(superblock->version); + superblock->block_size = lfs_fromle32(superblock->block_size); + superblock->block_count = lfs_fromle32(superblock->block_count); + superblock->name_max = lfs_fromle32(superblock->name_max); + superblock->file_max = lfs_fromle32(superblock->file_max); + superblock->attr_max = lfs_fromle32(superblock->attr_max); +} + +static inline void lfs_superblock_tole32(lfs_superblock_t *superblock) { + superblock->version = lfs_tole32(superblock->version); + superblock->block_size = lfs_tole32(superblock->block_size); + superblock->block_count = lfs_tole32(superblock->block_count); + superblock->name_max = lfs_tole32(superblock->name_max); + superblock->file_max = lfs_tole32(superblock->file_max); + superblock->attr_max = lfs_tole32(superblock->attr_max); +} + +#ifndef LFS_NO_ASSERT +static bool lfs_mlist_isopen(struct lfs_mlist *head, + struct lfs_mlist *node) { + for (struct lfs_mlist **p = &head; *p; p = &(*p)->next) { + if (*p == (struct lfs_mlist*)node) { + return true; + } + } + + return false; +} +#endif + +static void lfs_mlist_remove(lfs_t *lfs, struct lfs_mlist *mlist) { + for (struct lfs_mlist **p = &lfs->mlist; *p; p = &(*p)->next) { + if (*p == mlist) { + *p = (*p)->next; + break; + } + } +} + +static void lfs_mlist_append(lfs_t *lfs, struct lfs_mlist *mlist) { + mlist->next = lfs->mlist; + lfs->mlist = mlist; +} + + +/// Internal operations predeclared here /// +#ifndef LFS_READONLY +static int lfs_dir_commit(lfs_t *lfs, lfs_mdir_t *dir, + const struct lfs_mattr *attrs, int attrcount); +static int lfs_dir_compact(lfs_t *lfs, + lfs_mdir_t *dir, const struct lfs_mattr *attrs, int attrcount, + lfs_mdir_t *source, uint16_t begin, uint16_t end); + +static lfs_ssize_t lfs_file_rawwrite(lfs_t *lfs, lfs_file_t *file, + const void *buffer, lfs_size_t size); +static int lfs_file_rawsync(lfs_t *lfs, lfs_file_t *file); +static int lfs_file_outline(lfs_t *lfs, lfs_file_t *file); +static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file); + +static int lfs_fs_preporphans(lfs_t *lfs, int8_t orphans); +static void lfs_fs_prepmove(lfs_t *lfs, + uint16_t id, const lfs_block_t pair[2]); +static int lfs_fs_pred(lfs_t *lfs, const lfs_block_t dir[2], + lfs_mdir_t *pdir); +static lfs_stag_t lfs_fs_parent(lfs_t *lfs, const lfs_block_t dir[2], + lfs_mdir_t *parent); +static int lfs_fs_relocate(lfs_t *lfs, + const lfs_block_t oldpair[2], lfs_block_t newpair[2]); +static int lfs_fs_forceconsistency(lfs_t *lfs); +#endif + +#ifdef LFS_MIGRATE +static int lfs1_traverse(lfs_t *lfs, + int (*cb)(void*, lfs_block_t), void *data); +#endif + +static int lfs_dir_rawrewind(lfs_t *lfs, lfs_dir_t *dir); + +static lfs_ssize_t lfs_file_rawread(lfs_t *lfs, lfs_file_t *file, + void *buffer, lfs_size_t size); +static int lfs_file_rawclose(lfs_t *lfs, lfs_file_t *file); +static lfs_soff_t lfs_file_rawsize(lfs_t *lfs, lfs_file_t *file); + +static lfs_ssize_t lfs_fs_rawsize(lfs_t *lfs); +static int lfs_fs_rawtraverse(lfs_t *lfs, + int (*cb)(void *data, lfs_block_t block), void *data, + bool includeorphans); + +static int lfs_deinit(lfs_t *lfs); +static int lfs_rawunmount(lfs_t *lfs); + + +/// Block allocator /// +#ifndef LFS_READONLY +static int lfs_alloc_lookahead(void *p, lfs_block_t block) { + lfs_t *lfs = (lfs_t*)p; + lfs_block_t off = ((block - lfs->free.off) + + lfs->cfg->block_count) % lfs->cfg->block_count; + + if (off < lfs->free.size) { + lfs->free.buffer[off / 32] |= 1U << (off % 32); + } + + return 0; +} +#endif + +// indicate allocated blocks have been committed into the filesystem, this +// is to prevent blocks from being garbage collected in the middle of a +// commit operation +static void lfs_alloc_ack(lfs_t *lfs) { + lfs->free.ack = lfs->cfg->block_count; +} + +// drop the lookahead buffer, this is done during mounting and failed +// traversals in order to avoid invalid lookahead state +static void lfs_alloc_drop(lfs_t *lfs) { + lfs->free.size = 0; + lfs->free.i = 0; + lfs_alloc_ack(lfs); +} + +#ifndef LFS_READONLY +static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) { + while (true) { + while (lfs->free.i != lfs->free.size) { + lfs_block_t off = lfs->free.i; + lfs->free.i += 1; + lfs->free.ack -= 1; + + if (!(lfs->free.buffer[off / 32] & (1U << (off % 32)))) { + // found a free block + *block = (lfs->free.off + off) % lfs->cfg->block_count; + + // eagerly find next off so an alloc ack can + // discredit old lookahead blocks + while (lfs->free.i != lfs->free.size && + (lfs->free.buffer[lfs->free.i / 32] + & (1U << (lfs->free.i % 32)))) { + lfs->free.i += 1; + lfs->free.ack -= 1; + } + + return 0; + } + } + + // check if we have looked at all blocks since last ack + if (lfs->free.ack == 0) { + LFS_ERROR("No more free space %"PRIu32, + lfs->free.i + lfs->free.off); + return LFS_ERR_NOSPC; + } + + lfs->free.off = (lfs->free.off + lfs->free.size) + % lfs->cfg->block_count; + lfs->free.size = lfs_min(8*lfs->cfg->lookahead_size, lfs->free.ack); + lfs->free.i = 0; + + // find mask of free blocks from tree + memset(lfs->free.buffer, 0, lfs->cfg->lookahead_size); + int err = lfs_fs_rawtraverse(lfs, lfs_alloc_lookahead, lfs, true); + if (err) { + lfs_alloc_drop(lfs); + return err; + } + } +} +#endif + +/// Metadata pair and directory operations /// +static lfs_stag_t lfs_dir_getslice(lfs_t *lfs, const lfs_mdir_t *dir, + lfs_tag_t gmask, lfs_tag_t gtag, + lfs_off_t goff, void *gbuffer, lfs_size_t gsize) { + lfs_off_t off = dir->off; + lfs_tag_t ntag = dir->etag; + lfs_stag_t gdiff = 0; + + if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair) && + lfs_tag_id(gmask) != 0 && + lfs_tag_id(lfs->gdisk.tag) <= lfs_tag_id(gtag)) { + // synthetic moves + gdiff -= LFS_MKTAG(0, 1, 0); + } + + // iterate over dir block backwards (for faster lookups) + while (off >= sizeof(lfs_tag_t) + lfs_tag_dsize(ntag)) { + off -= lfs_tag_dsize(ntag); + lfs_tag_t tag = ntag; + int err = lfs_bd_read(lfs, + NULL, &lfs->rcache, sizeof(ntag), + dir->pair[0], off, &ntag, sizeof(ntag)); + if (err) { + return err; + } + + ntag = (lfs_frombe32(ntag) ^ tag) & 0x7fffffff; + + if (lfs_tag_id(gmask) != 0 && + lfs_tag_type1(tag) == LFS_TYPE_SPLICE && + lfs_tag_id(tag) <= lfs_tag_id(gtag - gdiff)) { + if (tag == (LFS_MKTAG(LFS_TYPE_CREATE, 0, 0) | + (LFS_MKTAG(0, 0x3ff, 0) & (gtag - gdiff)))) { + // found where we were created + return LFS_ERR_NOENT; + } + + // move around splices + gdiff += LFS_MKTAG(0, lfs_tag_splice(tag), 0); + } + + if ((gmask & tag) == (gmask & (gtag - gdiff))) { + if (lfs_tag_isdelete(tag)) { + return LFS_ERR_NOENT; + } + + lfs_size_t diff = lfs_min(lfs_tag_size(tag), gsize); + err = lfs_bd_read(lfs, + NULL, &lfs->rcache, diff, + dir->pair[0], off+sizeof(tag)+goff, gbuffer, diff); + if (err) { + return err; + } + + memset((uint8_t*)gbuffer + diff, 0, gsize - diff); + + return tag + gdiff; + } + } + + return LFS_ERR_NOENT; +} + +static lfs_stag_t lfs_dir_get(lfs_t *lfs, const lfs_mdir_t *dir, + lfs_tag_t gmask, lfs_tag_t gtag, void *buffer) { + return lfs_dir_getslice(lfs, dir, + gmask, gtag, + 0, buffer, lfs_tag_size(gtag)); +} + +static int lfs_dir_getread(lfs_t *lfs, const lfs_mdir_t *dir, + const lfs_cache_t *pcache, lfs_cache_t *rcache, lfs_size_t hint, + lfs_tag_t gmask, lfs_tag_t gtag, + lfs_off_t off, void *buffer, lfs_size_t size) { + uint8_t *data = buffer; + if (off+size > lfs->cfg->block_size) { + return LFS_ERR_CORRUPT; + } + + while (size > 0) { + lfs_size_t diff = size; + + if (pcache && pcache->block == LFS_BLOCK_INLINE && + off < pcache->off + pcache->size) { + if (off >= pcache->off) { + // is already in pcache? + diff = lfs_min(diff, pcache->size - (off-pcache->off)); + memcpy(data, &pcache->buffer[off-pcache->off], diff); + + data += diff; + off += diff; + size -= diff; + continue; + } + + // pcache takes priority + diff = lfs_min(diff, pcache->off-off); + } + + if (rcache->block == LFS_BLOCK_INLINE && + off < rcache->off + rcache->size) { + if (off >= rcache->off) { + // is already in rcache? + diff = lfs_min(diff, rcache->size - (off-rcache->off)); + memcpy(data, &rcache->buffer[off-rcache->off], diff); + + data += diff; + off += diff; + size -= diff; + continue; + } + + // rcache takes priority + diff = lfs_min(diff, rcache->off-off); + } + + // load to cache, first condition can no longer fail + rcache->block = LFS_BLOCK_INLINE; + rcache->off = lfs_aligndown(off, lfs->cfg->read_size); + rcache->size = lfs_min(lfs_alignup(off+hint, lfs->cfg->read_size), + lfs->cfg->cache_size); + int err = lfs_dir_getslice(lfs, dir, gmask, gtag, + rcache->off, rcache->buffer, rcache->size); + if (err < 0) { + return err; + } + } + + return 0; +} + +#ifndef LFS_READONLY +static int lfs_dir_traverse_filter(void *p, + lfs_tag_t tag, const void *buffer) { + lfs_tag_t *filtertag = p; + (void)buffer; + + // which mask depends on unique bit in tag structure + uint32_t mask = (tag & LFS_MKTAG(0x100, 0, 0)) + ? LFS_MKTAG(0x7ff, 0x3ff, 0) + : LFS_MKTAG(0x700, 0x3ff, 0); + + // check for redundancy + if ((mask & tag) == (mask & *filtertag) || + lfs_tag_isdelete(*filtertag) || + (LFS_MKTAG(0x7ff, 0x3ff, 0) & tag) == ( + LFS_MKTAG(LFS_TYPE_DELETE, 0, 0) | + (LFS_MKTAG(0, 0x3ff, 0) & *filtertag))) { + return true; + } + + // check if we need to adjust for created/deleted tags + if (lfs_tag_type1(tag) == LFS_TYPE_SPLICE && + lfs_tag_id(tag) <= lfs_tag_id(*filtertag)) { + *filtertag += LFS_MKTAG(0, lfs_tag_splice(tag), 0); + } + + return false; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_traverse(lfs_t *lfs, + const lfs_mdir_t *dir, lfs_off_t off, lfs_tag_t ptag, + const struct lfs_mattr *attrs, int attrcount, + lfs_tag_t tmask, lfs_tag_t ttag, + uint16_t begin, uint16_t end, int16_t diff, + int (*cb)(void *data, lfs_tag_t tag, const void *buffer), void *data) { + // iterate over directory and attrs + while (true) { + lfs_tag_t tag; + const void *buffer; + struct lfs_diskoff disk; + if (off+lfs_tag_dsize(ptag) < dir->off) { + off += lfs_tag_dsize(ptag); + int err = lfs_bd_read(lfs, + NULL, &lfs->rcache, sizeof(tag), + dir->pair[0], off, &tag, sizeof(tag)); + if (err) { + return err; + } + + tag = (lfs_frombe32(tag) ^ ptag) | 0x80000000; + disk.block = dir->pair[0]; + disk.off = off+sizeof(lfs_tag_t); + buffer = &disk; + ptag = tag; + } else if (attrcount > 0) { + tag = attrs[0].tag; + buffer = attrs[0].buffer; + attrs += 1; + attrcount -= 1; + } else { + return 0; + } + + lfs_tag_t mask = LFS_MKTAG(0x7ff, 0, 0); + if ((mask & tmask & tag) != (mask & tmask & ttag)) { + continue; + } + + // do we need to filter? inlining the filtering logic here allows + // for some minor optimizations + if (lfs_tag_id(tmask) != 0) { + // scan for duplicates and update tag based on creates/deletes + int filter = lfs_dir_traverse(lfs, + dir, off, ptag, attrs, attrcount, + 0, 0, 0, 0, 0, + lfs_dir_traverse_filter, &tag); + if (filter < 0) { + return filter; + } + + if (filter) { + continue; + } + + // in filter range? + if (!(lfs_tag_id(tag) >= begin && lfs_tag_id(tag) < end)) { + continue; + } + } + + // handle special cases for mcu-side operations + if (lfs_tag_type3(tag) == LFS_FROM_NOOP) { + // do nothing + } else if (lfs_tag_type3(tag) == LFS_FROM_MOVE) { + uint16_t fromid = lfs_tag_size(tag); + uint16_t toid = lfs_tag_id(tag); + int err = lfs_dir_traverse(lfs, + buffer, 0, 0xffffffff, NULL, 0, + LFS_MKTAG(0x600, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, 0, 0), + fromid, fromid+1, toid-fromid+diff, + cb, data); + if (err) { + return err; + } + } else if (lfs_tag_type3(tag) == LFS_FROM_USERATTRS) { + for (unsigned i = 0; i < lfs_tag_size(tag); i++) { + const struct lfs_attr *a = buffer; + int err = cb(data, LFS_MKTAG(LFS_TYPE_USERATTR + a[i].type, + lfs_tag_id(tag) + diff, a[i].size), a[i].buffer); + if (err) { + return err; + } + } + } else { + int err = cb(data, tag + LFS_MKTAG(0, diff, 0), buffer); + if (err) { + return err; + } + } + } +} +#endif + +static lfs_stag_t lfs_dir_fetchmatch(lfs_t *lfs, + lfs_mdir_t *dir, const lfs_block_t pair[2], + lfs_tag_t fmask, lfs_tag_t ftag, uint16_t *id, + int (*cb)(void *data, lfs_tag_t tag, const void *buffer), void *data) { + // we can find tag very efficiently during a fetch, since we're already + // scanning the entire directory + lfs_stag_t besttag = -1; + + // if either block address is invalid we return LFS_ERR_CORRUPT here, + // otherwise later writes to the pair could fail + if (pair[0] >= lfs->cfg->block_count || pair[1] >= lfs->cfg->block_count) { + return LFS_ERR_CORRUPT; + } + + // find the block with the most recent revision + uint32_t revs[2] = {0, 0}; + int r = 0; + for (int i = 0; i < 2; i++) { + int err = lfs_bd_read(lfs, + NULL, &lfs->rcache, sizeof(revs[i]), + pair[i], 0, &revs[i], sizeof(revs[i])); + revs[i] = lfs_fromle32(revs[i]); + if (err && err != LFS_ERR_CORRUPT) { + return err; + } + + if (err != LFS_ERR_CORRUPT && + lfs_scmp(revs[i], revs[(i+1)%2]) > 0) { + r = i; + } + } + + dir->pair[0] = pair[(r+0)%2]; + dir->pair[1] = pair[(r+1)%2]; + dir->rev = revs[(r+0)%2]; + dir->off = 0; // nonzero = found some commits + + // now scan tags to fetch the actual dir and find possible match + for (int i = 0; i < 2; i++) { + lfs_off_t off = 0; + lfs_tag_t ptag = 0xffffffff; + + uint16_t tempcount = 0; + lfs_block_t temptail[2] = {LFS_BLOCK_NULL, LFS_BLOCK_NULL}; + bool tempsplit = false; + lfs_stag_t tempbesttag = besttag; + + dir->rev = lfs_tole32(dir->rev); + uint32_t crc = lfs_crc(0xffffffff, &dir->rev, sizeof(dir->rev)); + dir->rev = lfs_fromle32(dir->rev); + + while (true) { + // extract next tag + lfs_tag_t tag; + off += lfs_tag_dsize(ptag); + int err = lfs_bd_read(lfs, + NULL, &lfs->rcache, lfs->cfg->block_size, + dir->pair[0], off, &tag, sizeof(tag)); + if (err) { + if (err == LFS_ERR_CORRUPT) { + // can't continue? + dir->erased = false; + break; + } + return err; + } + + crc = lfs_crc(crc, &tag, sizeof(tag)); + tag = lfs_frombe32(tag) ^ ptag; + + // next commit not yet programmed or we're not in valid range + if (!lfs_tag_isvalid(tag)) { + dir->erased = (lfs_tag_type1(ptag) == LFS_TYPE_CRC && + dir->off % lfs->cfg->prog_size == 0); + break; + } else if (off + lfs_tag_dsize(tag) > lfs->cfg->block_size) { + dir->erased = false; + break; + } + + ptag = tag; + + if (lfs_tag_type1(tag) == LFS_TYPE_CRC) { + // check the crc attr + uint32_t dcrc; + err = lfs_bd_read(lfs, + NULL, &lfs->rcache, lfs->cfg->block_size, + dir->pair[0], off+sizeof(tag), &dcrc, sizeof(dcrc)); + if (err) { + if (err == LFS_ERR_CORRUPT) { + dir->erased = false; + break; + } + return err; + } + dcrc = lfs_fromle32(dcrc); + + if (crc != dcrc) { + dir->erased = false; + break; + } + + // reset the next bit if we need to + ptag ^= (lfs_tag_t)(lfs_tag_chunk(tag) & 1U) << 31; + + // toss our crc into the filesystem seed for + // pseudorandom numbers, note we use another crc here + // as a collection function because it is sufficiently + // random and convenient + lfs->seed = lfs_crc(lfs->seed, &crc, sizeof(crc)); + + // update with what's found so far + besttag = tempbesttag; + dir->off = off + lfs_tag_dsize(tag); + dir->etag = ptag; + dir->count = tempcount; + dir->tail[0] = temptail[0]; + dir->tail[1] = temptail[1]; + dir->split = tempsplit; + + // reset crc + crc = 0xffffffff; + continue; + } + + // crc the entry first, hopefully leaving it in the cache + for (lfs_off_t j = sizeof(tag); j < lfs_tag_dsize(tag); j++) { + uint8_t dat; + err = lfs_bd_read(lfs, + NULL, &lfs->rcache, lfs->cfg->block_size, + dir->pair[0], off+j, &dat, 1); + if (err) { + if (err == LFS_ERR_CORRUPT) { + dir->erased = false; + break; + } + return err; + } + + crc = lfs_crc(crc, &dat, 1); + } + + // directory modification tags? + if (lfs_tag_type1(tag) == LFS_TYPE_NAME) { + // increase count of files if necessary + if (lfs_tag_id(tag) >= tempcount) { + tempcount = lfs_tag_id(tag) + 1; + } + } else if (lfs_tag_type1(tag) == LFS_TYPE_SPLICE) { + tempcount += lfs_tag_splice(tag); + + if (tag == (LFS_MKTAG(LFS_TYPE_DELETE, 0, 0) | + (LFS_MKTAG(0, 0x3ff, 0) & tempbesttag))) { + tempbesttag |= 0x80000000; + } else if (tempbesttag != -1 && + lfs_tag_id(tag) <= lfs_tag_id(tempbesttag)) { + tempbesttag += LFS_MKTAG(0, lfs_tag_splice(tag), 0); + } + } else if (lfs_tag_type1(tag) == LFS_TYPE_TAIL) { + tempsplit = (lfs_tag_chunk(tag) & 1); + + err = lfs_bd_read(lfs, + NULL, &lfs->rcache, lfs->cfg->block_size, + dir->pair[0], off+sizeof(tag), &temptail, 8); + if (err) { + if (err == LFS_ERR_CORRUPT) { + dir->erased = false; + break; + } + } + lfs_pair_fromle32(temptail); + } + + // found a match for our fetcher? + if ((fmask & tag) == (fmask & ftag)) { + int res = cb(data, tag, &(struct lfs_diskoff){ + dir->pair[0], off+sizeof(tag)}); + if (res < 0) { + if (res == LFS_ERR_CORRUPT) { + dir->erased = false; + break; + } + return res; + } + + if (res == LFS_CMP_EQ) { + // found a match + tempbesttag = tag; + } else if ((LFS_MKTAG(0x7ff, 0x3ff, 0) & tag) == + (LFS_MKTAG(0x7ff, 0x3ff, 0) & tempbesttag)) { + // found an identical tag, but contents didn't match + // this must mean that our besttag has been overwritten + tempbesttag = -1; + } else if (res == LFS_CMP_GT && + lfs_tag_id(tag) <= lfs_tag_id(tempbesttag)) { + // found a greater match, keep track to keep things sorted + tempbesttag = tag | 0x80000000; + } + } + } + + // consider what we have good enough + if (dir->off > 0) { + // synthetic move + if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair)) { + if (lfs_tag_id(lfs->gdisk.tag) == lfs_tag_id(besttag)) { + besttag |= 0x80000000; + } else if (besttag != -1 && + lfs_tag_id(lfs->gdisk.tag) < lfs_tag_id(besttag)) { + besttag -= LFS_MKTAG(0, 1, 0); + } + } + + // found tag? or found best id? + if (id) { + *id = lfs_min(lfs_tag_id(besttag), dir->count); + } + + if (lfs_tag_isvalid(besttag)) { + return besttag; + } else if (lfs_tag_id(besttag) < dir->count) { + return LFS_ERR_NOENT; + } else { + return 0; + } + } + + // failed, try the other block? + lfs_pair_swap(dir->pair); + dir->rev = revs[(r+1)%2]; + } + + LFS_ERROR("Corrupted dir pair at {0x%"PRIx32", 0x%"PRIx32"}", + dir->pair[0], dir->pair[1]); + return LFS_ERR_CORRUPT; +} + +static int lfs_dir_fetch(lfs_t *lfs, + lfs_mdir_t *dir, const lfs_block_t pair[2]) { + // note, mask=-1, tag=-1 can never match a tag since this + // pattern has the invalid bit set + return (int)lfs_dir_fetchmatch(lfs, dir, pair, + (lfs_tag_t)-1, (lfs_tag_t)-1, NULL, NULL, NULL); +} + +static int lfs_dir_getgstate(lfs_t *lfs, const lfs_mdir_t *dir, + lfs_gstate_t *gstate) { + lfs_gstate_t temp; + lfs_stag_t res = lfs_dir_get(lfs, dir, LFS_MKTAG(0x7ff, 0, 0), + LFS_MKTAG(LFS_TYPE_MOVESTATE, 0, sizeof(temp)), &temp); + if (res < 0 && res != LFS_ERR_NOENT) { + return res; + } + + if (res != LFS_ERR_NOENT) { + // xor together to find resulting gstate + lfs_gstate_fromle32(&temp); + lfs_gstate_xor(gstate, &temp); + } + + return 0; +} + +static int lfs_dir_getinfo(lfs_t *lfs, lfs_mdir_t *dir, + uint16_t id, struct lfs_info *info) { + if (id == 0x3ff) { + // special case for root + strcpy(info->name, "/"); + info->type = LFS_TYPE_DIR; + return 0; + } + + lfs_stag_t tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x780, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_NAME, id, lfs->name_max+1), info->name); + if (tag < 0) { + return (int)tag; + } + + info->type = lfs_tag_type3(tag); + + struct lfs_ctz ctz; + tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, id, sizeof(ctz)), &ctz); + if (tag < 0) { + return (int)tag; + } + lfs_ctz_fromle32(&ctz); + + if (lfs_tag_type3(tag) == LFS_TYPE_CTZSTRUCT) { + info->size = ctz.size; + } else if (lfs_tag_type3(tag) == LFS_TYPE_INLINESTRUCT) { + info->size = lfs_tag_size(tag); + } + + return 0; +} + +struct lfs_dir_find_match { + lfs_t *lfs; + const void *name; + lfs_size_t size; +}; + +static int lfs_dir_find_match(void *data, + lfs_tag_t tag, const void *buffer) { + struct lfs_dir_find_match *name = data; + lfs_t *lfs = name->lfs; + const struct lfs_diskoff *disk = buffer; + + // compare with disk + lfs_size_t diff = lfs_min(name->size, lfs_tag_size(tag)); + int res = lfs_bd_cmp(lfs, + NULL, &lfs->rcache, diff, + disk->block, disk->off, name->name, diff); + if (res != LFS_CMP_EQ) { + return res; + } + + // only equal if our size is still the same + if (name->size != lfs_tag_size(tag)) { + return (name->size < lfs_tag_size(tag)) ? LFS_CMP_LT : LFS_CMP_GT; + } + + // found a match! + return LFS_CMP_EQ; +} + +static lfs_stag_t lfs_dir_find(lfs_t *lfs, lfs_mdir_t *dir, + const char **path, uint16_t *id) { + // we reduce path to a single name if we can find it + const char *name = *path; + if (id) { + *id = 0x3ff; + } + + // default to root dir + lfs_stag_t tag = LFS_MKTAG(LFS_TYPE_DIR, 0x3ff, 0); + dir->tail[0] = lfs->root[0]; + dir->tail[1] = lfs->root[1]; + + while (true) { +nextname: + // skip slashes + name += strspn(name, "/"); + lfs_size_t namelen = strcspn(name, "/"); + + // skip '.' and root '..' + if ((namelen == 1 && memcmp(name, ".", 1) == 0) || + (namelen == 2 && memcmp(name, "..", 2) == 0)) { + name += namelen; + goto nextname; + } + + // skip if matched by '..' in name + const char *suffix = name + namelen; + lfs_size_t sufflen; + int depth = 1; + while (true) { + suffix += strspn(suffix, "/"); + sufflen = strcspn(suffix, "/"); + if (sufflen == 0) { + break; + } + + if (sufflen == 2 && memcmp(suffix, "..", 2) == 0) { + depth -= 1; + if (depth == 0) { + name = suffix + sufflen; + goto nextname; + } + } else { + depth += 1; + } + + suffix += sufflen; + } + + // found path + if (name[0] == '\0') { + return tag; + } + + // update what we've found so far + *path = name; + + // only continue if we hit a directory + if (lfs_tag_type3(tag) != LFS_TYPE_DIR) { + return LFS_ERR_NOTDIR; + } + + // grab the entry data + if (lfs_tag_id(tag) != 0x3ff) { + lfs_stag_t res = lfs_dir_get(lfs, dir, LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), dir->tail); + if (res < 0) { + return res; + } + lfs_pair_fromle32(dir->tail); + } + + // find entry matching name + while (true) { + tag = lfs_dir_fetchmatch(lfs, dir, dir->tail, + LFS_MKTAG(0x780, 0, 0), + LFS_MKTAG(LFS_TYPE_NAME, 0, namelen), + // are we last name? + (strchr(name, '/') == NULL) ? id : NULL, + lfs_dir_find_match, &(struct lfs_dir_find_match){ + lfs, name, namelen}); + if (tag < 0) { + return tag; + } + + if (tag) { + break; + } + + if (!dir->split) { + return LFS_ERR_NOENT; + } + } + + // to next name + name += namelen; + } +} + +// commit logic +struct lfs_commit { + lfs_block_t block; + lfs_off_t off; + lfs_tag_t ptag; + uint32_t crc; + + lfs_off_t begin; + lfs_off_t end; +}; + +#ifndef LFS_READONLY +static int lfs_dir_commitprog(lfs_t *lfs, struct lfs_commit *commit, + const void *buffer, lfs_size_t size) { + int err = lfs_bd_prog(lfs, + &lfs->pcache, &lfs->rcache, false, + commit->block, commit->off , + (const uint8_t*)buffer, size); + if (err) { + return err; + } + + commit->crc = lfs_crc(commit->crc, buffer, size); + commit->off += size; + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_commitattr(lfs_t *lfs, struct lfs_commit *commit, + lfs_tag_t tag, const void *buffer) { + // check if we fit + lfs_size_t dsize = lfs_tag_dsize(tag); + if (commit->off + dsize > commit->end) { + return LFS_ERR_NOSPC; + } + + // write out tag + lfs_tag_t ntag = lfs_tobe32((tag & 0x7fffffff) ^ commit->ptag); + int err = lfs_dir_commitprog(lfs, commit, &ntag, sizeof(ntag)); + if (err) { + return err; + } + + if (!(tag & 0x80000000)) { + // from memory + err = lfs_dir_commitprog(lfs, commit, buffer, dsize-sizeof(tag)); + if (err) { + return err; + } + } else { + // from disk + const struct lfs_diskoff *disk = buffer; + for (lfs_off_t i = 0; i < dsize-sizeof(tag); i++) { + // rely on caching to make this efficient + uint8_t dat; + err = lfs_bd_read(lfs, + NULL, &lfs->rcache, dsize-sizeof(tag)-i, + disk->block, disk->off+i, &dat, 1); + if (err) { + return err; + } + + err = lfs_dir_commitprog(lfs, commit, &dat, 1); + if (err) { + return err; + } + } + } + + commit->ptag = tag & 0x7fffffff; + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_commitcrc(lfs_t *lfs, struct lfs_commit *commit) { + // align to program units + const lfs_off_t end = lfs_alignup(commit->off + 2*sizeof(uint32_t), + lfs->cfg->prog_size); + + lfs_off_t off1 = 0; + uint32_t crc1 = 0; + + // create crc tags to fill up remainder of commit, note that + // padding is not crced, which lets fetches skip padding but + // makes committing a bit more complicated + while (commit->off < end) { + lfs_off_t off = commit->off + sizeof(lfs_tag_t); + lfs_off_t noff = lfs_min(end - off, 0x3fe) + off; + if (noff < end) { + noff = lfs_min(noff, end - 2*sizeof(uint32_t)); + } + + // read erased state from next program unit + lfs_tag_t tag = 0xffffffff; + int err = lfs_bd_read(lfs, + NULL, &lfs->rcache, sizeof(tag), + commit->block, noff, &tag, sizeof(tag)); + if (err && err != LFS_ERR_CORRUPT) { + return err; + } + + // build crc tag + bool reset = ~lfs_frombe32(tag) >> 31; + tag = LFS_MKTAG(LFS_TYPE_CRC + reset, 0x3ff, noff - off); + + // write out crc + uint32_t footer[2]; + footer[0] = lfs_tobe32(tag ^ commit->ptag); + commit->crc = lfs_crc(commit->crc, &footer[0], sizeof(footer[0])); + footer[1] = lfs_tole32(commit->crc); + err = lfs_bd_prog(lfs, + &lfs->pcache, &lfs->rcache, false, + commit->block, commit->off, &footer, sizeof(footer)); + if (err) { + return err; + } + + // keep track of non-padding checksum to verify + if (off1 == 0) { + off1 = commit->off + sizeof(uint32_t); + crc1 = commit->crc; + } + + commit->off += sizeof(tag)+lfs_tag_size(tag); + commit->ptag = tag ^ ((lfs_tag_t)reset << 31); + commit->crc = 0xffffffff; // reset crc for next "commit" + } + + // flush buffers + int err = lfs_bd_sync(lfs, &lfs->pcache, &lfs->rcache, false); + if (err) { + return err; + } + + // successful commit, check checksums to make sure + lfs_off_t off = commit->begin; + lfs_off_t noff = off1; + while (off < end) { + uint32_t crc = 0xffffffff; + for (lfs_off_t i = off; i < noff+sizeof(uint32_t); i++) { + // check against written crc, may catch blocks that + // become readonly and match our commit size exactly + if (i == off1 && crc != crc1) { + return LFS_ERR_CORRUPT; + } + + // leave it up to caching to make this efficient + uint8_t dat; + err = lfs_bd_read(lfs, + NULL, &lfs->rcache, noff+sizeof(uint32_t)-i, + commit->block, i, &dat, 1); + if (err) { + return err; + } + + crc = lfs_crc(crc, &dat, 1); + } + + // detected write error? + if (crc != 0) { + return LFS_ERR_CORRUPT; + } + + // skip padding + off = lfs_min(end - noff, 0x3fe) + noff; + if (off < end) { + off = lfs_min(off, end - 2*sizeof(uint32_t)); + } + noff = off + sizeof(uint32_t); + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_alloc(lfs_t *lfs, lfs_mdir_t *dir) { + // allocate pair of dir blocks (backwards, so we write block 1 first) + for (int i = 0; i < 2; i++) { + int err = lfs_alloc(lfs, &dir->pair[(i+1)%2]); + if (err) { + return err; + } + } + + // zero for reproducability in case initial block is unreadable + dir->rev = 0; + + // rather than clobbering one of the blocks we just pretend + // the revision may be valid + int err = lfs_bd_read(lfs, + NULL, &lfs->rcache, sizeof(dir->rev), + dir->pair[0], 0, &dir->rev, sizeof(dir->rev)); + dir->rev = lfs_fromle32(dir->rev); + if (err && err != LFS_ERR_CORRUPT) { + return err; + } + + // to make sure we don't immediately evict, align the new revision count + // to our block_cycles modulus, see lfs_dir_compact for why our modulus + // is tweaked this way + if (lfs->cfg->block_cycles > 0) { + dir->rev = lfs_alignup(dir->rev, ((lfs->cfg->block_cycles+1)|1)); + } + + // set defaults + dir->off = sizeof(dir->rev); + dir->etag = 0xffffffff; + dir->count = 0; + dir->tail[0] = LFS_BLOCK_NULL; + dir->tail[1] = LFS_BLOCK_NULL; + dir->erased = false; + dir->split = false; + + // don't write out yet, let caller take care of that + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_drop(lfs_t *lfs, lfs_mdir_t *dir, lfs_mdir_t *tail) { + // steal state + int err = lfs_dir_getgstate(lfs, tail, &lfs->gdelta); + if (err) { + return err; + } + + // steal tail + lfs_pair_tole32(tail->tail); + err = lfs_dir_commit(lfs, dir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_TAIL + tail->split, 0x3ff, 8), tail->tail})); + lfs_pair_fromle32(tail->tail); + if (err) { + return err; + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_split(lfs_t *lfs, + lfs_mdir_t *dir, const struct lfs_mattr *attrs, int attrcount, + lfs_mdir_t *source, uint16_t split, uint16_t end) { + // create tail directory + lfs_alloc_ack(lfs); + lfs_mdir_t tail; + int err = lfs_dir_alloc(lfs, &tail); + if (err) { + return err; + } + + tail.split = dir->split; + tail.tail[0] = dir->tail[0]; + tail.tail[1] = dir->tail[1]; + + err = lfs_dir_compact(lfs, &tail, attrs, attrcount, source, split, end); + if (err) { + return err; + } + + dir->tail[0] = tail.pair[0]; + dir->tail[1] = tail.pair[1]; + dir->split = true; + + // update root if needed + if (lfs_pair_cmp(dir->pair, lfs->root) == 0 && split == 0) { + lfs->root[0] = tail.pair[0]; + lfs->root[1] = tail.pair[1]; + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_commit_size(void *p, lfs_tag_t tag, const void *buffer) { + lfs_size_t *size = p; + (void)buffer; + + *size += lfs_tag_dsize(tag); + return 0; +} +#endif + +#ifndef LFS_READONLY +struct lfs_dir_commit_commit { + lfs_t *lfs; + struct lfs_commit *commit; +}; +#endif + +#ifndef LFS_READONLY +static int lfs_dir_commit_commit(void *p, lfs_tag_t tag, const void *buffer) { + struct lfs_dir_commit_commit *commit = p; + return lfs_dir_commitattr(commit->lfs, commit->commit, tag, buffer); +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_compact(lfs_t *lfs, + lfs_mdir_t *dir, const struct lfs_mattr *attrs, int attrcount, + lfs_mdir_t *source, uint16_t begin, uint16_t end) { + // save some state in case block is bad + const lfs_block_t oldpair[2] = {dir->pair[0], dir->pair[1]}; + bool relocated = false; + bool tired = false; + + // should we split? + while (end - begin > 1) { + // find size + lfs_size_t size = 0; + int err = lfs_dir_traverse(lfs, + source, 0, 0xffffffff, attrs, attrcount, + LFS_MKTAG(0x400, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_NAME, 0, 0), + begin, end, -begin, + lfs_dir_commit_size, &size); + if (err) { + return err; + } + + // space is complicated, we need room for tail, crc, gstate, + // cleanup delete, and we cap at half a block to give room + // for metadata updates. + if (end - begin < 0xff && + size <= lfs_min(lfs->cfg->block_size - 36, + lfs_alignup((lfs->cfg->metadata_max ? + lfs->cfg->metadata_max : lfs->cfg->block_size)/2, + lfs->cfg->prog_size))) { + break; + } + + // can't fit, need to split, we should really be finding the + // largest size that fits with a small binary search, but right now + // it's not worth the code size + uint16_t split = (end - begin) / 2; + err = lfs_dir_split(lfs, dir, attrs, attrcount, + source, begin+split, end); + if (err) { + // if we fail to split, we may be able to overcompact, unless + // we're too big for even the full block, in which case our + // only option is to error + if (err == LFS_ERR_NOSPC && size <= lfs->cfg->block_size - 36) { + break; + } + return err; + } + + end = begin + split; + } + + // increment revision count + dir->rev += 1; + // If our revision count == n * block_cycles, we should force a relocation, + // this is how littlefs wear-levels at the metadata-pair level. Note that we + // actually use (block_cycles+1)|1, this is to avoid two corner cases: + // 1. block_cycles = 1, which would prevent relocations from terminating + // 2. block_cycles = 2n, which, due to aliasing, would only ever relocate + // one metadata block in the pair, effectively making this useless + if (lfs->cfg->block_cycles > 0 && + (dir->rev % ((lfs->cfg->block_cycles+1)|1) == 0)) { + if (lfs_pair_cmp(dir->pair, (const lfs_block_t[2]){0, 1}) == 0) { + // oh no! we're writing too much to the superblock, + // should we expand? + lfs_ssize_t res = lfs_fs_rawsize(lfs); + if (res < 0) { + return res; + } + + // do we have extra space? littlefs can't reclaim this space + // by itself, so expand cautiously + if ((lfs_size_t)res < lfs->cfg->block_count/2) { + LFS_DEBUG("Expanding superblock at rev %"PRIu32, dir->rev); + int err = lfs_dir_split(lfs, dir, attrs, attrcount, + source, begin, end); + if (err && err != LFS_ERR_NOSPC) { + return err; + } + + // welp, we tried, if we ran out of space there's not much + // we can do, we'll error later if we've become frozen + if (!err) { + end = begin; + } + } +#ifdef LFS_MIGRATE + } else if (lfs->lfs1) { + // do not proactively relocate blocks during migrations, this + // can cause a number of failure states such: clobbering the + // v1 superblock if we relocate root, and invalidating directory + // pointers if we relocate the head of a directory. On top of + // this, relocations increase the overall complexity of + // lfs_migration, which is already a delicate operation. +#endif + } else { + // we're writing too much, time to relocate + tired = true; + goto relocate; + } + } + + // begin loop to commit compaction to blocks until a compact sticks + while (true) { + { + // setup commit state + struct lfs_commit commit = { + .block = dir->pair[1], + .off = 0, + .ptag = 0xffffffff, + .crc = 0xffffffff, + + .begin = 0, + .end = (lfs->cfg->metadata_max ? + lfs->cfg->metadata_max : lfs->cfg->block_size) - 8, + }; + + // erase block to write to + int err = lfs_bd_erase(lfs, dir->pair[1]); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + // write out header + dir->rev = lfs_tole32(dir->rev); + err = lfs_dir_commitprog(lfs, &commit, + &dir->rev, sizeof(dir->rev)); + dir->rev = lfs_fromle32(dir->rev); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + // traverse the directory, this time writing out all unique tags + err = lfs_dir_traverse(lfs, + source, 0, 0xffffffff, attrs, attrcount, + LFS_MKTAG(0x400, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_NAME, 0, 0), + begin, end, -begin, + lfs_dir_commit_commit, &(struct lfs_dir_commit_commit){ + lfs, &commit}); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + // commit tail, which may be new after last size check + if (!lfs_pair_isnull(dir->tail)) { + lfs_pair_tole32(dir->tail); + err = lfs_dir_commitattr(lfs, &commit, + LFS_MKTAG(LFS_TYPE_TAIL + dir->split, 0x3ff, 8), + dir->tail); + lfs_pair_fromle32(dir->tail); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + } + + // bring over gstate? + lfs_gstate_t delta = {0}; + if (!relocated) { + lfs_gstate_xor(&delta, &lfs->gdisk); + lfs_gstate_xor(&delta, &lfs->gstate); + } + lfs_gstate_xor(&delta, &lfs->gdelta); + delta.tag &= ~LFS_MKTAG(0, 0, 0x3ff); + + err = lfs_dir_getgstate(lfs, dir, &delta); + if (err) { + return err; + } + + if (!lfs_gstate_iszero(&delta)) { + lfs_gstate_tole32(&delta); + err = lfs_dir_commitattr(lfs, &commit, + LFS_MKTAG(LFS_TYPE_MOVESTATE, 0x3ff, + sizeof(delta)), &delta); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + } + + // complete commit with crc + err = lfs_dir_commitcrc(lfs, &commit); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + // successful compaction, swap dir pair to indicate most recent + LFS_ASSERT(commit.off % lfs->cfg->prog_size == 0); + lfs_pair_swap(dir->pair); + dir->count = end - begin; + dir->off = commit.off; + dir->etag = commit.ptag; + // update gstate + lfs->gdelta = (lfs_gstate_t){0}; + if (!relocated) { + lfs->gdisk = lfs->gstate; + } + } + break; + +relocate: + // commit was corrupted, drop caches and prepare to relocate block + relocated = true; + lfs_cache_drop(lfs, &lfs->pcache); + if (!tired) { + LFS_DEBUG("Bad block at 0x%"PRIx32, dir->pair[1]); + } + + // can't relocate superblock, filesystem is now frozen + if (lfs_pair_cmp(dir->pair, (const lfs_block_t[2]){0, 1}) == 0) { + LFS_WARN("Superblock 0x%"PRIx32" has become unwritable", + dir->pair[1]); + return LFS_ERR_NOSPC; + } + + // relocate half of pair + int err = lfs_alloc(lfs, &dir->pair[1]); + if (err && (err != LFS_ERR_NOSPC || !tired)) { + return err; + } + + tired = false; + continue; + } + + if (relocated) { + // update references if we relocated + LFS_DEBUG("Relocating {0x%"PRIx32", 0x%"PRIx32"} " + "-> {0x%"PRIx32", 0x%"PRIx32"}", + oldpair[0], oldpair[1], dir->pair[0], dir->pair[1]); + int err = lfs_fs_relocate(lfs, oldpair, dir->pair); + if (err) { + return err; + } + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_dir_commit(lfs_t *lfs, lfs_mdir_t *dir, + const struct lfs_mattr *attrs, int attrcount) { + // check for any inline files that aren't RAM backed and + // forcefully evict them, needed for filesystem consistency + for (lfs_file_t *f = (lfs_file_t*)lfs->mlist; f; f = f->next) { + if (dir != &f->m && lfs_pair_cmp(f->m.pair, dir->pair) == 0 && + f->type == LFS_TYPE_REG && (f->flags & LFS_F_INLINE) && + f->ctz.size > lfs->cfg->cache_size) { + int err = lfs_file_outline(lfs, f); + if (err) { + return err; + } + + err = lfs_file_flush(lfs, f); + if (err) { + return err; + } + } + } + + // calculate changes to the directory + lfs_mdir_t olddir = *dir; + bool hasdelete = false; + for (int i = 0; i < attrcount; i++) { + if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_CREATE) { + dir->count += 1; + } else if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_DELETE) { + LFS_ASSERT(dir->count > 0); + dir->count -= 1; + hasdelete = true; + } else if (lfs_tag_type1(attrs[i].tag) == LFS_TYPE_TAIL) { + dir->tail[0] = ((lfs_block_t*)attrs[i].buffer)[0]; + dir->tail[1] = ((lfs_block_t*)attrs[i].buffer)[1]; + dir->split = (lfs_tag_chunk(attrs[i].tag) & 1); + lfs_pair_fromle32(dir->tail); + } + } + + // should we actually drop the directory block? + if (hasdelete && dir->count == 0) { + lfs_mdir_t pdir; + int err = lfs_fs_pred(lfs, dir->pair, &pdir); + if (err && err != LFS_ERR_NOENT) { + *dir = olddir; + return err; + } + + if (err != LFS_ERR_NOENT && pdir.split) { + err = lfs_dir_drop(lfs, &pdir, dir); + if (err) { + *dir = olddir; + return err; + } + } + } + + if (dir->erased || dir->count >= 0xff) { + // try to commit + struct lfs_commit commit = { + .block = dir->pair[0], + .off = dir->off, + .ptag = dir->etag, + .crc = 0xffffffff, + + .begin = dir->off, + .end = (lfs->cfg->metadata_max ? + lfs->cfg->metadata_max : lfs->cfg->block_size) - 8, + }; + + // traverse attrs that need to be written out + lfs_pair_tole32(dir->tail); + int err = lfs_dir_traverse(lfs, + dir, dir->off, dir->etag, attrs, attrcount, + 0, 0, 0, 0, 0, + lfs_dir_commit_commit, &(struct lfs_dir_commit_commit){ + lfs, &commit}); + lfs_pair_fromle32(dir->tail); + if (err) { + if (err == LFS_ERR_NOSPC || err == LFS_ERR_CORRUPT) { + goto compact; + } + *dir = olddir; + return err; + } + + // commit any global diffs if we have any + lfs_gstate_t delta = {0}; + lfs_gstate_xor(&delta, &lfs->gstate); + lfs_gstate_xor(&delta, &lfs->gdisk); + lfs_gstate_xor(&delta, &lfs->gdelta); + delta.tag &= ~LFS_MKTAG(0, 0, 0x3ff); + if (!lfs_gstate_iszero(&delta)) { + err = lfs_dir_getgstate(lfs, dir, &delta); + if (err) { + *dir = olddir; + return err; + } + + lfs_gstate_tole32(&delta); + err = lfs_dir_commitattr(lfs, &commit, + LFS_MKTAG(LFS_TYPE_MOVESTATE, 0x3ff, + sizeof(delta)), &delta); + if (err) { + if (err == LFS_ERR_NOSPC || err == LFS_ERR_CORRUPT) { + goto compact; + } + *dir = olddir; + return err; + } + } + + // finalize commit with the crc + err = lfs_dir_commitcrc(lfs, &commit); + if (err) { + if (err == LFS_ERR_NOSPC || err == LFS_ERR_CORRUPT) { + goto compact; + } + *dir = olddir; + return err; + } + + // successful commit, update dir + LFS_ASSERT(commit.off % lfs->cfg->prog_size == 0); + dir->off = commit.off; + dir->etag = commit.ptag; + // and update gstate + lfs->gdisk = lfs->gstate; + lfs->gdelta = (lfs_gstate_t){0}; + } else { +compact: + // fall back to compaction + lfs_cache_drop(lfs, &lfs->pcache); + + int err = lfs_dir_compact(lfs, dir, attrs, attrcount, + dir, 0, dir->count); + if (err) { + *dir = olddir; + return err; + } + } + + // this complicated bit of logic is for fixing up any active + // metadata-pairs that we may have affected + // + // note we have to make two passes since the mdir passed to + // lfs_dir_commit could also be in this list, and even then + // we need to copy the pair so they don't get clobbered if we refetch + // our mdir. + for (struct lfs_mlist *d = lfs->mlist; d; d = d->next) { + if (&d->m != dir && lfs_pair_cmp(d->m.pair, olddir.pair) == 0) { + d->m = *dir; + for (int i = 0; i < attrcount; i++) { + if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_DELETE && + d->id == lfs_tag_id(attrs[i].tag)) { + d->m.pair[0] = LFS_BLOCK_NULL; + d->m.pair[1] = LFS_BLOCK_NULL; + } else if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_DELETE && + d->id > lfs_tag_id(attrs[i].tag)) { + d->id -= 1; + if (d->type == LFS_TYPE_DIR) { + ((lfs_dir_t*)d)->pos -= 1; + } + } else if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_CREATE && + d->id >= lfs_tag_id(attrs[i].tag)) { + d->id += 1; + if (d->type == LFS_TYPE_DIR) { + ((lfs_dir_t*)d)->pos += 1; + } + } + } + } + } + + for (struct lfs_mlist *d = lfs->mlist; d; d = d->next) { + if (lfs_pair_cmp(d->m.pair, olddir.pair) == 0) { + while (d->id >= d->m.count && d->m.split) { + // we split and id is on tail now + d->id -= d->m.count; + int err = lfs_dir_fetch(lfs, &d->m, d->m.tail); + if (err) { + return err; + } + } + } + } + + return 0; +} +#endif + + +/// Top level directory operations /// +#ifndef LFS_READONLY +static int lfs_rawmkdir(lfs_t *lfs, const char *path) { + // deorphan if we haven't yet, needed at most once after poweron + int err = lfs_fs_forceconsistency(lfs); + if (err) { + return err; + } + + struct lfs_mlist cwd; + cwd.next = lfs->mlist; + uint16_t id; + err = lfs_dir_find(lfs, &cwd.m, &path, &id); + if (!(err == LFS_ERR_NOENT && id != 0x3ff)) { + return (err < 0) ? err : LFS_ERR_EXIST; + } + + // check that name fits + lfs_size_t nlen = strlen(path); + if (nlen > lfs->name_max) { + return LFS_ERR_NAMETOOLONG; + } + + // build up new directory + lfs_alloc_ack(lfs); + lfs_mdir_t dir; + err = lfs_dir_alloc(lfs, &dir); + if (err) { + return err; + } + + // find end of list + lfs_mdir_t pred = cwd.m; + while (pred.split) { + err = lfs_dir_fetch(lfs, &pred, pred.tail); + if (err) { + return err; + } + } + + // setup dir + lfs_pair_tole32(pred.tail); + err = lfs_dir_commit(lfs, &dir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), pred.tail})); + lfs_pair_fromle32(pred.tail); + if (err) { + return err; + } + + // current block end of list? + if (cwd.m.split) { + // update tails, this creates a desync + err = lfs_fs_preporphans(lfs, +1); + if (err) { + return err; + } + + // it's possible our predecessor has to be relocated, and if + // our parent is our predecessor's predecessor, this could have + // caused our parent to go out of date, fortunately we can hook + // ourselves into littlefs to catch this + cwd.type = 0; + cwd.id = 0; + lfs->mlist = &cwd; + + lfs_pair_tole32(dir.pair); + err = lfs_dir_commit(lfs, &pred, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir.pair})); + lfs_pair_fromle32(dir.pair); + if (err) { + lfs->mlist = cwd.next; + return err; + } + + lfs->mlist = cwd.next; + err = lfs_fs_preporphans(lfs, -1); + if (err) { + return err; + } + } + + // now insert into our parent block + lfs_pair_tole32(dir.pair); + err = lfs_dir_commit(lfs, &cwd.m, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_CREATE, id, 0), NULL}, + {LFS_MKTAG(LFS_TYPE_DIR, id, nlen), path}, + {LFS_MKTAG(LFS_TYPE_DIRSTRUCT, id, 8), dir.pair}, + {LFS_MKTAG_IF(!cwd.m.split, + LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir.pair})); + lfs_pair_fromle32(dir.pair); + if (err) { + return err; + } + + return 0; +} +#endif + +static int lfs_dir_rawopen(lfs_t *lfs, lfs_dir_t *dir, const char *path) { + lfs_stag_t tag = lfs_dir_find(lfs, &dir->m, &path, NULL); + if (tag < 0) { + return tag; + } + + if (lfs_tag_type3(tag) != LFS_TYPE_DIR) { + return LFS_ERR_NOTDIR; + } + + lfs_block_t pair[2]; + if (lfs_tag_id(tag) == 0x3ff) { + // handle root dir separately + pair[0] = lfs->root[0]; + pair[1] = lfs->root[1]; + } else { + // get dir pair from parent + lfs_stag_t res = lfs_dir_get(lfs, &dir->m, LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair); + if (res < 0) { + return res; + } + lfs_pair_fromle32(pair); + } + + // fetch first pair + int err = lfs_dir_fetch(lfs, &dir->m, pair); + if (err) { + return err; + } + + // setup entry + dir->head[0] = dir->m.pair[0]; + dir->head[1] = dir->m.pair[1]; + dir->id = 0; + dir->pos = 0; + + // add to list of mdirs + dir->type = LFS_TYPE_DIR; + lfs_mlist_append(lfs, (struct lfs_mlist *)dir); + + return 0; +} + +static int lfs_dir_rawclose(lfs_t *lfs, lfs_dir_t *dir) { + // remove from list of mdirs + lfs_mlist_remove(lfs, (struct lfs_mlist *)dir); + + return 0; +} + +static int lfs_dir_rawread(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info) { + memset(info, 0, sizeof(*info)); + + // special offset for '.' and '..' + if (dir->pos == 0) { + info->type = LFS_TYPE_DIR; + strcpy(info->name, "."); + dir->pos += 1; + return true; + } else if (dir->pos == 1) { + info->type = LFS_TYPE_DIR; + strcpy(info->name, ".."); + dir->pos += 1; + return true; + } + + while (true) { + if (dir->id == dir->m.count) { + if (!dir->m.split) { + return false; + } + + int err = lfs_dir_fetch(lfs, &dir->m, dir->m.tail); + if (err) { + return err; + } + + dir->id = 0; + } + + int err = lfs_dir_getinfo(lfs, &dir->m, dir->id, info); + if (err && err != LFS_ERR_NOENT) { + return err; + } + + dir->id += 1; + if (err != LFS_ERR_NOENT) { + break; + } + } + + dir->pos += 1; + return true; +} + +static int lfs_dir_rawseek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off) { + // simply walk from head dir + int err = lfs_dir_rawrewind(lfs, dir); + if (err) { + return err; + } + + // first two for ./.. + dir->pos = lfs_min(2, off); + off -= dir->pos; + + // skip superblock entry + dir->id = (off > 0 && lfs_pair_cmp(dir->head, lfs->root) == 0); + + while (off > 0) { + int diff = lfs_min(dir->m.count - dir->id, off); + dir->id += diff; + dir->pos += diff; + off -= diff; + + if (dir->id == dir->m.count) { + if (!dir->m.split) { + return LFS_ERR_INVAL; + } + + err = lfs_dir_fetch(lfs, &dir->m, dir->m.tail); + if (err) { + return err; + } + + dir->id = 0; + } + } + + return 0; +} + +static lfs_soff_t lfs_dir_rawtell(lfs_t *lfs, lfs_dir_t *dir) { + (void)lfs; + return dir->pos; +} + +static int lfs_dir_rawrewind(lfs_t *lfs, lfs_dir_t *dir) { + // reload the head dir + int err = lfs_dir_fetch(lfs, &dir->m, dir->head); + if (err) { + return err; + } + + dir->id = 0; + dir->pos = 0; + return 0; +} + + +/// File index list operations /// +static int lfs_ctz_index(lfs_t *lfs, lfs_off_t *off) { + lfs_off_t size = *off; + lfs_off_t b = lfs->cfg->block_size - 2*4; + lfs_off_t i = size / b; + if (i == 0) { + return 0; + } + + i = (size - 4*(lfs_popc(i-1)+2)) / b; + *off = size - b*i - 4*lfs_popc(i); + return i; +} + +static int lfs_ctz_find(lfs_t *lfs, + const lfs_cache_t *pcache, lfs_cache_t *rcache, + lfs_block_t head, lfs_size_t size, + lfs_size_t pos, lfs_block_t *block, lfs_off_t *off) { + if (size == 0) { + *block = LFS_BLOCK_NULL; + *off = 0; + return 0; + } + + lfs_off_t current = lfs_ctz_index(lfs, &(lfs_off_t){size-1}); + lfs_off_t target = lfs_ctz_index(lfs, &pos); + + while (current > target) { + lfs_size_t skip = lfs_min( + lfs_npw2(current-target+1) - 1, + lfs_ctz(current)); + + int err = lfs_bd_read(lfs, + pcache, rcache, sizeof(head), + head, 4*skip, &head, sizeof(head)); + head = lfs_fromle32(head); + if (err) { + return err; + } + + current -= 1 << skip; + } + + *block = head; + *off = pos; + return 0; +} + +#ifndef LFS_READONLY +static int lfs_ctz_extend(lfs_t *lfs, + lfs_cache_t *pcache, lfs_cache_t *rcache, + lfs_block_t head, lfs_size_t size, + lfs_block_t *block, lfs_off_t *off) { + while (true) { + // go ahead and grab a block + lfs_block_t nblock; + int err = lfs_alloc(lfs, &nblock); + if (err) { + return err; + } + + { + err = lfs_bd_erase(lfs, nblock); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + if (size == 0) { + *block = nblock; + *off = 0; + return 0; + } + + lfs_size_t noff = size - 1; + lfs_off_t index = lfs_ctz_index(lfs, &noff); + noff = noff + 1; + + // just copy out the last block if it is incomplete + if (noff != lfs->cfg->block_size) { + for (lfs_off_t i = 0; i < noff; i++) { + uint8_t data; + err = lfs_bd_read(lfs, + NULL, rcache, noff-i, + head, i, &data, 1); + if (err) { + return err; + } + + err = lfs_bd_prog(lfs, + pcache, rcache, true, + nblock, i, &data, 1); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + } + + *block = nblock; + *off = noff; + return 0; + } + + // append block + index += 1; + lfs_size_t skips = lfs_ctz(index) + 1; + lfs_block_t nhead = head; + for (lfs_off_t i = 0; i < skips; i++) { + nhead = lfs_tole32(nhead); + err = lfs_bd_prog(lfs, pcache, rcache, true, + nblock, 4*i, &nhead, 4); + nhead = lfs_fromle32(nhead); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + if (i != skips-1) { + err = lfs_bd_read(lfs, + NULL, rcache, sizeof(nhead), + nhead, 4*i, &nhead, sizeof(nhead)); + nhead = lfs_fromle32(nhead); + if (err) { + return err; + } + } + } + + *block = nblock; + *off = 4*skips; + return 0; + } + +relocate: + LFS_DEBUG("Bad block at 0x%"PRIx32, nblock); + + // just clear cache and try a new block + lfs_cache_drop(lfs, pcache); + } +} +#endif + +static int lfs_ctz_traverse(lfs_t *lfs, + const lfs_cache_t *pcache, lfs_cache_t *rcache, + lfs_block_t head, lfs_size_t size, + int (*cb)(void*, lfs_block_t), void *data) { + if (size == 0) { + return 0; + } + + lfs_off_t index = lfs_ctz_index(lfs, &(lfs_off_t){size-1}); + + while (true) { + int err = cb(data, head); + if (err) { + return err; + } + + if (index == 0) { + return 0; + } + + lfs_block_t heads[2]; + int count = 2 - (index & 1); + err = lfs_bd_read(lfs, + pcache, rcache, count*sizeof(head), + head, 0, &heads, count*sizeof(head)); + heads[0] = lfs_fromle32(heads[0]); + heads[1] = lfs_fromle32(heads[1]); + if (err) { + return err; + } + + for (int i = 0; i < count-1; i++) { + err = cb(data, heads[i]); + if (err) { + return err; + } + } + + head = heads[count-1]; + index -= count; + } +} + + +/// Top level file operations /// +static int lfs_file_rawopencfg(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags, + const struct lfs_file_config *cfg) { +#ifndef LFS_READONLY + // deorphan if we haven't yet, needed at most once after poweron + if ((flags & LFS_O_WRONLY) == LFS_O_WRONLY) { + int err = lfs_fs_forceconsistency(lfs); + if (err) { + return err; + } + } +#else + LFS_ASSERT((flags & LFS_O_RDONLY) == LFS_O_RDONLY); +#endif + + // setup simple file details + int err; + file->cfg = cfg; + file->flags = flags; + file->pos = 0; + file->off = 0; + file->cache.buffer = NULL; + + // allocate entry for file if it doesn't exist + lfs_stag_t tag = lfs_dir_find(lfs, &file->m, &path, &file->id); + if (tag < 0 && !(tag == LFS_ERR_NOENT && file->id != 0x3ff)) { + err = tag; + goto cleanup; + } + + // get id, add to list of mdirs to catch update changes + file->type = LFS_TYPE_REG; + lfs_mlist_append(lfs, (struct lfs_mlist *)file); + +#ifdef LFS_READONLY + if (tag == LFS_ERR_NOENT) { + err = LFS_ERR_NOENT; + goto cleanup; +#else + if (tag == LFS_ERR_NOENT) { + if (!(flags & LFS_O_CREAT)) { + err = LFS_ERR_NOENT; + goto cleanup; + } + + // check that name fits + lfs_size_t nlen = strlen(path); + if (nlen > lfs->name_max) { + err = LFS_ERR_NAMETOOLONG; + goto cleanup; + } + + // get next slot and create entry to remember name + err = lfs_dir_commit(lfs, &file->m, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_CREATE, file->id, 0), NULL}, + {LFS_MKTAG(LFS_TYPE_REG, file->id, nlen), path}, + {LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0), NULL})); + if (err) { + err = LFS_ERR_NAMETOOLONG; + goto cleanup; + } + + tag = LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, 0); + } else if (flags & LFS_O_EXCL) { + err = LFS_ERR_EXIST; + goto cleanup; +#endif + } else if (lfs_tag_type3(tag) != LFS_TYPE_REG) { + err = LFS_ERR_ISDIR; + goto cleanup; +#ifndef LFS_READONLY + } else if (flags & LFS_O_TRUNC) { + // truncate if requested + tag = LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0); + file->flags |= LFS_F_DIRTY; +#endif + } else { + // try to load what's on disk, if it's inlined we'll fix it later + tag = lfs_dir_get(lfs, &file->m, LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, file->id, 8), &file->ctz); + if (tag < 0) { + err = tag; + goto cleanup; + } + lfs_ctz_fromle32(&file->ctz); + } + + // fetch attrs + for (unsigned i = 0; i < file->cfg->attr_count; i++) { + // if opened for read / read-write operations + if ((file->flags & LFS_O_RDONLY) == LFS_O_RDONLY) { + lfs_stag_t res = lfs_dir_get(lfs, &file->m, + LFS_MKTAG(0x7ff, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_USERATTR + file->cfg->attrs[i].type, + file->id, file->cfg->attrs[i].size), + file->cfg->attrs[i].buffer); + if (res < 0 && res != LFS_ERR_NOENT) { + err = res; + goto cleanup; + } + } + +#ifndef LFS_READONLY + // if opened for write / read-write operations + if ((file->flags & LFS_O_WRONLY) == LFS_O_WRONLY) { + if (file->cfg->attrs[i].size > lfs->attr_max) { + err = LFS_ERR_NOSPC; + goto cleanup; + } + + file->flags |= LFS_F_DIRTY; + } +#endif + } + + // allocate buffer if needed + if (file->cfg->buffer) { + file->cache.buffer = file->cfg->buffer; + } else { + file->cache.buffer = lfs_malloc(lfs->cfg->cache_size); + if (!file->cache.buffer) { + err = LFS_ERR_NOMEM; + goto cleanup; + } + } + + // zero to avoid information leak + lfs_cache_zero(lfs, &file->cache); + + if (lfs_tag_type3(tag) == LFS_TYPE_INLINESTRUCT) { + // load inline files + file->ctz.head = LFS_BLOCK_INLINE; + file->ctz.size = lfs_tag_size(tag); + file->flags |= LFS_F_INLINE; + file->cache.block = file->ctz.head; + file->cache.off = 0; + file->cache.size = lfs->cfg->cache_size; + + // don't always read (may be new/trunc file) + if (file->ctz.size > 0) { + lfs_stag_t res = lfs_dir_get(lfs, &file->m, + LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, file->id, + lfs_min(file->cache.size, 0x3fe)), + file->cache.buffer); + if (res < 0) { + err = res; + goto cleanup; + } + } + } + + return 0; + +cleanup: + // clean up lingering resources +#ifndef LFS_READONLY + file->flags |= LFS_F_ERRED; +#endif + lfs_file_rawclose(lfs, file); + return err; +} + +static int lfs_file_rawopen(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags) { + static const struct lfs_file_config defaults = {0}; + int err = lfs_file_rawopencfg(lfs, file, path, flags, &defaults); + return err; +} + +static int lfs_file_rawclose(lfs_t *lfs, lfs_file_t *file) { +#ifndef LFS_READONLY + int err = lfs_file_rawsync(lfs, file); +#else + int err = 0; +#endif + + // remove from list of mdirs + lfs_mlist_remove(lfs, (struct lfs_mlist*)file); + + // clean up memory + if (!file->cfg->buffer) { + lfs_free(file->cache.buffer); + } + + return err; +} + + +#ifndef LFS_READONLY +static int lfs_file_relocate(lfs_t *lfs, lfs_file_t *file) { + while (true) { + // just relocate what exists into new block + lfs_block_t nblock; + int err = lfs_alloc(lfs, &nblock); + if (err) { + return err; + } + + err = lfs_bd_erase(lfs, nblock); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + // either read from dirty cache or disk + for (lfs_off_t i = 0; i < file->off; i++) { + uint8_t data; + if (file->flags & LFS_F_INLINE) { + err = lfs_dir_getread(lfs, &file->m, + // note we evict inline files before they can be dirty + NULL, &file->cache, file->off-i, + LFS_MKTAG(0xfff, 0x1ff, 0), + LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0), + i, &data, 1); + if (err) { + return err; + } + } else { + err = lfs_bd_read(lfs, + &file->cache, &lfs->rcache, file->off-i, + file->block, i, &data, 1); + if (err) { + return err; + } + } + + err = lfs_bd_prog(lfs, + &lfs->pcache, &lfs->rcache, true, + nblock, i, &data, 1); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + } + + // copy over new state of file + memcpy(file->cache.buffer, lfs->pcache.buffer, lfs->cfg->cache_size); + file->cache.block = lfs->pcache.block; + file->cache.off = lfs->pcache.off; + file->cache.size = lfs->pcache.size; + lfs_cache_zero(lfs, &lfs->pcache); + + file->block = nblock; + file->flags |= LFS_F_WRITING; + return 0; + +relocate: + LFS_DEBUG("Bad block at 0x%"PRIx32, nblock); + + // just clear cache and try a new block + lfs_cache_drop(lfs, &lfs->pcache); + } +} +#endif + +#ifndef LFS_READONLY +static int lfs_file_outline(lfs_t *lfs, lfs_file_t *file) { + file->off = file->pos; + lfs_alloc_ack(lfs); + int err = lfs_file_relocate(lfs, file); + if (err) { + return err; + } + + file->flags &= ~LFS_F_INLINE; + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file) { + if (file->flags & LFS_F_READING) { + if (!(file->flags & LFS_F_INLINE)) { + lfs_cache_drop(lfs, &file->cache); + } + file->flags &= ~LFS_F_READING; + } + + if (file->flags & LFS_F_WRITING) { + lfs_off_t pos = file->pos; + + if (!(file->flags & LFS_F_INLINE)) { + // copy over anything after current branch + lfs_file_t orig = { + .ctz.head = file->ctz.head, + .ctz.size = file->ctz.size, + .flags = LFS_O_RDONLY, + .pos = file->pos, + .cache = lfs->rcache, + }; + lfs_cache_drop(lfs, &lfs->rcache); + + while (file->pos < file->ctz.size) { + // copy over a byte at a time, leave it up to caching + // to make this efficient + uint8_t data; + lfs_ssize_t res = lfs_file_rawread(lfs, &orig, &data, 1); + if (res < 0) { + return res; + } + + res = lfs_file_rawwrite(lfs, file, &data, 1); + if (res < 0) { + return res; + } + + // keep our reference to the rcache in sync + if (lfs->rcache.block != LFS_BLOCK_NULL) { + lfs_cache_drop(lfs, &orig.cache); + lfs_cache_drop(lfs, &lfs->rcache); + } + } + + // write out what we have + while (true) { + int err = lfs_bd_flush(lfs, &file->cache, &lfs->rcache, true); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + return err; + } + + break; + +relocate: + LFS_DEBUG("Bad block at 0x%"PRIx32, file->block); + err = lfs_file_relocate(lfs, file); + if (err) { + return err; + } + } + } else { + file->pos = lfs_max(file->pos, file->ctz.size); + } + + // actual file updates + file->ctz.head = file->block; + file->ctz.size = file->pos; + file->flags &= ~LFS_F_WRITING; + file->flags |= LFS_F_DIRTY; + + file->pos = pos; + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_file_rawsync(lfs_t *lfs, lfs_file_t *file) { + if (file->flags & LFS_F_ERRED) { + // it's not safe to do anything if our file errored + return 0; + } + + int err = lfs_file_flush(lfs, file); + if (err) { + file->flags |= LFS_F_ERRED; + return err; + } + + + if ((file->flags & LFS_F_DIRTY) && + !lfs_pair_isnull(file->m.pair)) { + // update dir entry + uint16_t type; + const void *buffer; + lfs_size_t size; + struct lfs_ctz ctz; + if (file->flags & LFS_F_INLINE) { + // inline the whole file + type = LFS_TYPE_INLINESTRUCT; + buffer = file->cache.buffer; + size = file->ctz.size; + } else { + // update the ctz reference + type = LFS_TYPE_CTZSTRUCT; + // copy ctz so alloc will work during a relocate + ctz = file->ctz; + lfs_ctz_tole32(&ctz); + buffer = &ctz; + size = sizeof(ctz); + } + + // commit file data and attributes + err = lfs_dir_commit(lfs, &file->m, LFS_MKATTRS( + {LFS_MKTAG(type, file->id, size), buffer}, + {LFS_MKTAG(LFS_FROM_USERATTRS, file->id, + file->cfg->attr_count), file->cfg->attrs})); + if (err) { + file->flags |= LFS_F_ERRED; + return err; + } + + file->flags &= ~LFS_F_DIRTY; + } + + return 0; +} +#endif + +static lfs_ssize_t lfs_file_rawread(lfs_t *lfs, lfs_file_t *file, + void *buffer, lfs_size_t size) { + LFS_ASSERT((file->flags & LFS_O_RDONLY) == LFS_O_RDONLY); + + uint8_t *data = buffer; + lfs_size_t nsize = size; + +#ifndef LFS_READONLY + if (file->flags & LFS_F_WRITING) { + // flush out any writes + int err = lfs_file_flush(lfs, file); + if (err) { + return err; + } + } +#endif + + if (file->pos >= file->ctz.size) { + // eof if past end + return 0; + } + + size = lfs_min(size, file->ctz.size - file->pos); + nsize = size; + + while (nsize > 0) { + // check if we need a new block + if (!(file->flags & LFS_F_READING) || + file->off == lfs->cfg->block_size) { + if (!(file->flags & LFS_F_INLINE)) { + int err = lfs_ctz_find(lfs, NULL, &file->cache, + file->ctz.head, file->ctz.size, + file->pos, &file->block, &file->off); + if (err) { + return err; + } + } else { + file->block = LFS_BLOCK_INLINE; + file->off = file->pos; + } + + file->flags |= LFS_F_READING; + } + + // read as much as we can in current block + lfs_size_t diff = lfs_min(nsize, lfs->cfg->block_size - file->off); + if (file->flags & LFS_F_INLINE) { + int err = lfs_dir_getread(lfs, &file->m, + NULL, &file->cache, lfs->cfg->block_size, + LFS_MKTAG(0xfff, 0x1ff, 0), + LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0), + file->off, data, diff); + if (err) { + return err; + } + } else { + int err = lfs_bd_read(lfs, + NULL, &file->cache, lfs->cfg->block_size, + file->block, file->off, data, diff); + if (err) { + return err; + } + } + + file->pos += diff; + file->off += diff; + data += diff; + nsize -= diff; + } + + return size; +} + +#ifndef LFS_READONLY +static lfs_ssize_t lfs_file_rawwrite(lfs_t *lfs, lfs_file_t *file, + const void *buffer, lfs_size_t size) { + LFS_ASSERT((file->flags & LFS_O_WRONLY) == LFS_O_WRONLY); + + const uint8_t *data = buffer; + lfs_size_t nsize = size; + + if (file->flags & LFS_F_READING) { + // drop any reads + int err = lfs_file_flush(lfs, file); + if (err) { + return err; + } + } + + if ((file->flags & LFS_O_APPEND) && file->pos < file->ctz.size) { + file->pos = file->ctz.size; + } + + if (file->pos + size > lfs->file_max) { + // Larger than file limit? + return LFS_ERR_FBIG; + } + + if (!(file->flags & LFS_F_WRITING) && file->pos > file->ctz.size) { + // fill with zeros + lfs_off_t pos = file->pos; + file->pos = file->ctz.size; + + while (file->pos < pos) { + lfs_ssize_t res = lfs_file_rawwrite(lfs, file, &(uint8_t){0}, 1); + if (res < 0) { + return res; + } + } + } + + if ((file->flags & LFS_F_INLINE) && + lfs_max(file->pos+nsize, file->ctz.size) > + lfs_min(0x3fe, lfs_min( + lfs->cfg->cache_size, + (lfs->cfg->metadata_max ? + lfs->cfg->metadata_max : lfs->cfg->block_size) / 8))) { + // inline file doesn't fit anymore + int err = lfs_file_outline(lfs, file); + if (err) { + file->flags |= LFS_F_ERRED; + return err; + } + } + + while (nsize > 0) { + // check if we need a new block + if (!(file->flags & LFS_F_WRITING) || + file->off == lfs->cfg->block_size) { + if (!(file->flags & LFS_F_INLINE)) { + if (!(file->flags & LFS_F_WRITING) && file->pos > 0) { + // find out which block we're extending from + int err = lfs_ctz_find(lfs, NULL, &file->cache, + file->ctz.head, file->ctz.size, + file->pos-1, &file->block, &file->off); + if (err) { + file->flags |= LFS_F_ERRED; + return err; + } + + // mark cache as dirty since we may have read data into it + lfs_cache_zero(lfs, &file->cache); + } + + // extend file with new blocks + lfs_alloc_ack(lfs); + int err = lfs_ctz_extend(lfs, &file->cache, &lfs->rcache, + file->block, file->pos, + &file->block, &file->off); + if (err) { + file->flags |= LFS_F_ERRED; + return err; + } + } else { + file->block = LFS_BLOCK_INLINE; + file->off = file->pos; + } + + file->flags |= LFS_F_WRITING; + } + + // program as much as we can in current block + lfs_size_t diff = lfs_min(nsize, lfs->cfg->block_size - file->off); + while (true) { + int err = lfs_bd_prog(lfs, &file->cache, &lfs->rcache, true, + file->block, file->off, data, diff); + if (err) { + if (err == LFS_ERR_CORRUPT) { + goto relocate; + } + file->flags |= LFS_F_ERRED; + return err; + } + + break; +relocate: + err = lfs_file_relocate(lfs, file); + if (err) { + file->flags |= LFS_F_ERRED; + return err; + } + } + + file->pos += diff; + file->off += diff; + data += diff; + nsize -= diff; + + lfs_alloc_ack(lfs); + } + + file->flags &= ~LFS_F_ERRED; + return size; +} +#endif + +static lfs_soff_t lfs_file_rawseek(lfs_t *lfs, lfs_file_t *file, + lfs_soff_t off, int whence) { + // find new pos + lfs_off_t npos = file->pos; + if (whence == LFS_SEEK_SET) { + npos = off; + } else if (whence == LFS_SEEK_CUR) { + npos = file->pos + off; + } else if (whence == LFS_SEEK_END) { + npos = lfs_file_rawsize(lfs, file) + off; + } + + if (npos > lfs->file_max) { + // file position out of range + return LFS_ERR_INVAL; + } + + if (file->pos == npos) { + // noop - position has not changed + return npos; + } + +#ifndef LFS_READONLY + // write out everything beforehand, may be noop if rdonly + int err = lfs_file_flush(lfs, file); + if (err) { + return err; + } +#endif + + // update pos + file->pos = npos; + return npos; +} + +#ifndef LFS_READONLY +static int lfs_file_rawtruncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) { + LFS_ASSERT((file->flags & LFS_O_WRONLY) == LFS_O_WRONLY); + + if (size > LFS_FILE_MAX) { + return LFS_ERR_INVAL; + } + + lfs_off_t pos = file->pos; + lfs_off_t oldsize = lfs_file_rawsize(lfs, file); + if (size < oldsize) { + // need to flush since directly changing metadata + int err = lfs_file_flush(lfs, file); + if (err) { + return err; + } + + // lookup new head in ctz skip list + err = lfs_ctz_find(lfs, NULL, &file->cache, + file->ctz.head, file->ctz.size, + size, &file->block, &file->off); + if (err) { + return err; + } + + // need to set pos/block/off consistently so seeking back to + // the old position does not get confused + file->pos = size; + file->ctz.head = file->block; + file->ctz.size = size; + file->flags |= LFS_F_DIRTY | LFS_F_READING; + } else if (size > oldsize) { + // flush+seek if not already at end + lfs_soff_t res = lfs_file_rawseek(lfs, file, 0, LFS_SEEK_END); + if (res < 0) { + return (int)res; + } + + // fill with zeros + while (file->pos < size) { + res = lfs_file_rawwrite(lfs, file, &(uint8_t){0}, 1); + if (res < 0) { + return (int)res; + } + } + } + + // restore pos + lfs_soff_t res = lfs_file_rawseek(lfs, file, pos, LFS_SEEK_SET); + if (res < 0) { + return (int)res; + } + + return 0; +} +#endif + +static lfs_soff_t lfs_file_rawtell(lfs_t *lfs, lfs_file_t *file) { + (void)lfs; + return file->pos; +} + +static int lfs_file_rawrewind(lfs_t *lfs, lfs_file_t *file) { + lfs_soff_t res = lfs_file_rawseek(lfs, file, 0, LFS_SEEK_SET); + if (res < 0) { + return (int)res; + } + + return 0; +} + +static lfs_soff_t lfs_file_rawsize(lfs_t *lfs, lfs_file_t *file) { + (void)lfs; + +#ifndef LFS_READONLY + if (file->flags & LFS_F_WRITING) { + return lfs_max(file->pos, file->ctz.size); + } +#endif + + return file->ctz.size; +} + + +/// General fs operations /// +static int lfs_rawstat(lfs_t *lfs, const char *path, struct lfs_info *info) { + lfs_mdir_t cwd; + lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); + if (tag < 0) { + return (int)tag; + } + + return lfs_dir_getinfo(lfs, &cwd, lfs_tag_id(tag), info); +} + +#ifndef LFS_READONLY +static int lfs_rawremove(lfs_t *lfs, const char *path) { + // deorphan if we haven't yet, needed at most once after poweron + int err = lfs_fs_forceconsistency(lfs); + if (err) { + return err; + } + + lfs_mdir_t cwd; + lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); + if (tag < 0 || lfs_tag_id(tag) == 0x3ff) { + return (tag < 0) ? (int)tag : LFS_ERR_INVAL; + } + + struct lfs_mlist dir; + dir.next = lfs->mlist; + if (lfs_tag_type3(tag) == LFS_TYPE_DIR) { + // must be empty before removal + lfs_block_t pair[2]; + lfs_stag_t res = lfs_dir_get(lfs, &cwd, LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair); + if (res < 0) { + return (int)res; + } + lfs_pair_fromle32(pair); + + err = lfs_dir_fetch(lfs, &dir.m, pair); + if (err) { + return err; + } + + if (dir.m.count > 0 || dir.m.split) { + return LFS_ERR_NOTEMPTY; + } + + // mark fs as orphaned + err = lfs_fs_preporphans(lfs, +1); + if (err) { + return err; + } + + // I know it's crazy but yes, dir can be changed by our parent's + // commit (if predecessor is child) + dir.type = 0; + dir.id = 0; + lfs->mlist = &dir; + } + + // delete the entry + err = lfs_dir_commit(lfs, &cwd, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_DELETE, lfs_tag_id(tag), 0), NULL})); + if (err) { + lfs->mlist = dir.next; + return err; + } + + lfs->mlist = dir.next; + if (lfs_tag_type3(tag) == LFS_TYPE_DIR) { + // fix orphan + err = lfs_fs_preporphans(lfs, -1); + if (err) { + return err; + } + + err = lfs_fs_pred(lfs, dir.m.pair, &cwd); + if (err) { + return err; + } + + err = lfs_dir_drop(lfs, &cwd, &dir.m); + if (err) { + return err; + } + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_rawrename(lfs_t *lfs, const char *oldpath, const char *newpath) { + // deorphan if we haven't yet, needed at most once after poweron + int err = lfs_fs_forceconsistency(lfs); + if (err) { + return err; + } + + // find old entry + lfs_mdir_t oldcwd; + lfs_stag_t oldtag = lfs_dir_find(lfs, &oldcwd, &oldpath, NULL); + if (oldtag < 0 || lfs_tag_id(oldtag) == 0x3ff) { + return (oldtag < 0) ? (int)oldtag : LFS_ERR_INVAL; + } + + // find new entry + lfs_mdir_t newcwd; + uint16_t newid; + lfs_stag_t prevtag = lfs_dir_find(lfs, &newcwd, &newpath, &newid); + if ((prevtag < 0 || lfs_tag_id(prevtag) == 0x3ff) && + !(prevtag == LFS_ERR_NOENT && newid != 0x3ff)) { + return (prevtag < 0) ? (int)prevtag : LFS_ERR_INVAL; + } + + // if we're in the same pair there's a few special cases... + bool samepair = (lfs_pair_cmp(oldcwd.pair, newcwd.pair) == 0); + uint16_t newoldid = lfs_tag_id(oldtag); + + struct lfs_mlist prevdir; + prevdir.next = lfs->mlist; + if (prevtag == LFS_ERR_NOENT) { + // check that name fits + lfs_size_t nlen = strlen(newpath); + if (nlen > lfs->name_max) { + return LFS_ERR_NAMETOOLONG; + } + + // there is a small chance we are being renamed in the same + // directory/ to an id less than our old id, the global update + // to handle this is a bit messy + if (samepair && newid <= newoldid) { + newoldid += 1; + } + } else if (lfs_tag_type3(prevtag) != lfs_tag_type3(oldtag)) { + return LFS_ERR_ISDIR; + } else if (samepair && newid == newoldid) { + // we're renaming to ourselves?? + return 0; + } else if (lfs_tag_type3(prevtag) == LFS_TYPE_DIR) { + // must be empty before removal + lfs_block_t prevpair[2]; + lfs_stag_t res = lfs_dir_get(lfs, &newcwd, LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, newid, 8), prevpair); + if (res < 0) { + return (int)res; + } + lfs_pair_fromle32(prevpair); + + // must be empty before removal + err = lfs_dir_fetch(lfs, &prevdir.m, prevpair); + if (err) { + return err; + } + + if (prevdir.m.count > 0 || prevdir.m.split) { + return LFS_ERR_NOTEMPTY; + } + + // mark fs as orphaned + err = lfs_fs_preporphans(lfs, +1); + if (err) { + return err; + } + + // I know it's crazy but yes, dir can be changed by our parent's + // commit (if predecessor is child) + prevdir.type = 0; + prevdir.id = 0; + lfs->mlist = &prevdir; + } + + if (!samepair) { + lfs_fs_prepmove(lfs, newoldid, oldcwd.pair); + } + + // move over all attributes + err = lfs_dir_commit(lfs, &newcwd, LFS_MKATTRS( + {LFS_MKTAG_IF(prevtag != LFS_ERR_NOENT, + LFS_TYPE_DELETE, newid, 0), NULL}, + {LFS_MKTAG(LFS_TYPE_CREATE, newid, 0), NULL}, + {LFS_MKTAG(lfs_tag_type3(oldtag), newid, strlen(newpath)), newpath}, + {LFS_MKTAG(LFS_FROM_MOVE, newid, lfs_tag_id(oldtag)), &oldcwd}, + {LFS_MKTAG_IF(samepair, + LFS_TYPE_DELETE, newoldid, 0), NULL})); + if (err) { + lfs->mlist = prevdir.next; + return err; + } + + // let commit clean up after move (if we're different! otherwise move + // logic already fixed it for us) + if (!samepair && lfs_gstate_hasmove(&lfs->gstate)) { + // prep gstate and delete move id + lfs_fs_prepmove(lfs, 0x3ff, NULL); + err = lfs_dir_commit(lfs, &oldcwd, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_DELETE, lfs_tag_id(oldtag), 0), NULL})); + if (err) { + lfs->mlist = prevdir.next; + return err; + } + } + + lfs->mlist = prevdir.next; + if (prevtag != LFS_ERR_NOENT && lfs_tag_type3(prevtag) == LFS_TYPE_DIR) { + // fix orphan + err = lfs_fs_preporphans(lfs, -1); + if (err) { + return err; + } + + err = lfs_fs_pred(lfs, prevdir.m.pair, &newcwd); + if (err) { + return err; + } + + err = lfs_dir_drop(lfs, &newcwd, &prevdir.m); + if (err) { + return err; + } + } + + return 0; +} +#endif + +static lfs_ssize_t lfs_rawgetattr(lfs_t *lfs, const char *path, + uint8_t type, void *buffer, lfs_size_t size) { + lfs_mdir_t cwd; + lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); + if (tag < 0) { + return tag; + } + + uint16_t id = lfs_tag_id(tag); + if (id == 0x3ff) { + // special case for root + id = 0; + int err = lfs_dir_fetch(lfs, &cwd, lfs->root); + if (err) { + return err; + } + } + + tag = lfs_dir_get(lfs, &cwd, LFS_MKTAG(0x7ff, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_USERATTR + type, + id, lfs_min(size, lfs->attr_max)), + buffer); + if (tag < 0) { + if (tag == LFS_ERR_NOENT) { + return LFS_ERR_NOATTR; + } + + return tag; + } + + return lfs_tag_size(tag); +} + +#ifndef LFS_READONLY +static int lfs_commitattr(lfs_t *lfs, const char *path, + uint8_t type, const void *buffer, lfs_size_t size) { + lfs_mdir_t cwd; + lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); + if (tag < 0) { + return tag; + } + + uint16_t id = lfs_tag_id(tag); + if (id == 0x3ff) { + // special case for root + id = 0; + int err = lfs_dir_fetch(lfs, &cwd, lfs->root); + if (err) { + return err; + } + } + + return lfs_dir_commit(lfs, &cwd, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_USERATTR + type, id, size), buffer})); +} +#endif + +#ifndef LFS_READONLY +static int lfs_rawsetattr(lfs_t *lfs, const char *path, + uint8_t type, const void *buffer, lfs_size_t size) { + if (size > lfs->attr_max) { + return LFS_ERR_NOSPC; + } + + return lfs_commitattr(lfs, path, type, buffer, size); +} +#endif + +#ifndef LFS_READONLY +static int lfs_rawremoveattr(lfs_t *lfs, const char *path, uint8_t type) { + return lfs_commitattr(lfs, path, type, NULL, 0x3ff); +} +#endif + + +/// Filesystem operations /// +static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) { + lfs->cfg = cfg; + int err = 0; + + // validate that the lfs-cfg sizes were initiated properly before + // performing any arithmetic logics with them + LFS_ASSERT(lfs->cfg->read_size != 0); + LFS_ASSERT(lfs->cfg->prog_size != 0); + LFS_ASSERT(lfs->cfg->cache_size != 0); + + // check that block size is a multiple of cache size is a multiple + // of prog and read sizes + LFS_ASSERT(lfs->cfg->cache_size % lfs->cfg->read_size == 0); + LFS_ASSERT(lfs->cfg->cache_size % lfs->cfg->prog_size == 0); + LFS_ASSERT(lfs->cfg->block_size % lfs->cfg->cache_size == 0); + + // check that the block size is large enough to fit ctz pointers + LFS_ASSERT(4*lfs_npw2(0xffffffff / (lfs->cfg->block_size-2*4)) + <= lfs->cfg->block_size); + + // block_cycles = 0 is no longer supported. + // + // block_cycles is the number of erase cycles before littlefs evicts + // metadata logs as a part of wear leveling. Suggested values are in the + // range of 100-1000, or set block_cycles to -1 to disable block-level + // wear-leveling. + LFS_ASSERT(lfs->cfg->block_cycles != 0); + + + // setup read cache + if (lfs->cfg->read_buffer) { + lfs->rcache.buffer = lfs->cfg->read_buffer; + } else { + lfs->rcache.buffer = lfs_malloc(lfs->cfg->cache_size); + if (!lfs->rcache.buffer) { + err = LFS_ERR_NOMEM; + goto cleanup; + } + } + + // setup program cache + if (lfs->cfg->prog_buffer) { + lfs->pcache.buffer = lfs->cfg->prog_buffer; + } else { + lfs->pcache.buffer = lfs_malloc(lfs->cfg->cache_size); + if (!lfs->pcache.buffer) { + err = LFS_ERR_NOMEM; + goto cleanup; + } + } + + // zero to avoid information leaks + lfs_cache_zero(lfs, &lfs->rcache); + lfs_cache_zero(lfs, &lfs->pcache); + + // setup lookahead, must be multiple of 64-bits, 32-bit aligned + LFS_ASSERT(lfs->cfg->lookahead_size > 0); + LFS_ASSERT(lfs->cfg->lookahead_size % 8 == 0 && + (uintptr_t)lfs->cfg->lookahead_buffer % 4 == 0); + if (lfs->cfg->lookahead_buffer) { + lfs->free.buffer = lfs->cfg->lookahead_buffer; + } else { + lfs->free.buffer = lfs_malloc(lfs->cfg->lookahead_size); + if (!lfs->free.buffer) { + err = LFS_ERR_NOMEM; + goto cleanup; + } + } + + // check that the size limits are sane + LFS_ASSERT(lfs->cfg->name_max <= LFS_NAME_MAX); + lfs->name_max = lfs->cfg->name_max; + if (!lfs->name_max) { + lfs->name_max = LFS_NAME_MAX; + } + + LFS_ASSERT(lfs->cfg->file_max <= LFS_FILE_MAX); + lfs->file_max = lfs->cfg->file_max; + if (!lfs->file_max) { + lfs->file_max = LFS_FILE_MAX; + } + + LFS_ASSERT(lfs->cfg->attr_max <= LFS_ATTR_MAX); + lfs->attr_max = lfs->cfg->attr_max; + if (!lfs->attr_max) { + lfs->attr_max = LFS_ATTR_MAX; + } + + LFS_ASSERT(lfs->cfg->metadata_max <= lfs->cfg->block_size); + + // setup default state + lfs->root[0] = LFS_BLOCK_NULL; + lfs->root[1] = LFS_BLOCK_NULL; + lfs->mlist = NULL; + lfs->seed = 0; + lfs->gdisk = (lfs_gstate_t){0}; + lfs->gstate = (lfs_gstate_t){0}; + lfs->gdelta = (lfs_gstate_t){0}; +#ifdef LFS_MIGRATE + lfs->lfs1 = NULL; +#endif + + return 0; + +cleanup: + lfs_deinit(lfs); + return err; +} + +static int lfs_deinit(lfs_t *lfs) { + // free allocated memory + if (!lfs->cfg->read_buffer) { + lfs_free(lfs->rcache.buffer); + } + + if (!lfs->cfg->prog_buffer) { + lfs_free(lfs->pcache.buffer); + } + + if (!lfs->cfg->lookahead_buffer) { + lfs_free(lfs->free.buffer); + } + + return 0; +} + +#ifndef LFS_READONLY +static int lfs_rawformat(lfs_t *lfs, const struct lfs_config *cfg) { + int err = 0; + { + err = lfs_init(lfs, cfg); + if (err) { + return err; + } + + // create free lookahead + memset(lfs->free.buffer, 0, lfs->cfg->lookahead_size); + lfs->free.off = 0; + lfs->free.size = lfs_min(8*lfs->cfg->lookahead_size, + lfs->cfg->block_count); + lfs->free.i = 0; + lfs_alloc_ack(lfs); + + // create root dir + lfs_mdir_t root; + err = lfs_dir_alloc(lfs, &root); + if (err) { + goto cleanup; + } + + // write one superblock + lfs_superblock_t superblock = { + .version = LFS_DISK_VERSION, + .block_size = lfs->cfg->block_size, + .block_count = lfs->cfg->block_count, + .name_max = lfs->name_max, + .file_max = lfs->file_max, + .attr_max = lfs->attr_max, + }; + + lfs_superblock_tole32(&superblock); + err = lfs_dir_commit(lfs, &root, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_CREATE, 0, 0), NULL}, + {LFS_MKTAG(LFS_TYPE_SUPERBLOCK, 0, 8), "littlefs"}, + {LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, sizeof(superblock)), + &superblock})); + if (err) { + goto cleanup; + } + + // force compaction to prevent accidentally mounting any + // older version of littlefs that may live on disk + root.erased = false; + err = lfs_dir_commit(lfs, &root, NULL, 0); + if (err) { + goto cleanup; + } + + // sanity check that fetch works + err = lfs_dir_fetch(lfs, &root, (const lfs_block_t[2]){0, 1}); + if (err) { + goto cleanup; + } + } + +cleanup: + lfs_deinit(lfs); + return err; + +} +#endif + +static int lfs_rawmount(lfs_t *lfs, const struct lfs_config *cfg) { + int err = lfs_init(lfs, cfg); + if (err) { + return err; + } + + // scan directory blocks for superblock and any global updates + lfs_mdir_t dir = {.tail = {0, 1}}; + lfs_block_t cycle = 0; + while (!lfs_pair_isnull(dir.tail)) { + if (cycle >= lfs->cfg->block_count/2) { + // loop detected + err = LFS_ERR_CORRUPT; + goto cleanup; + } + cycle += 1; + + // fetch next block in tail list + lfs_stag_t tag = lfs_dir_fetchmatch(lfs, &dir, dir.tail, + LFS_MKTAG(0x7ff, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_SUPERBLOCK, 0, 8), + NULL, + lfs_dir_find_match, &(struct lfs_dir_find_match){ + lfs, "littlefs", 8}); + if (tag < 0) { + err = tag; + goto cleanup; + } + + // has superblock? + if (tag && !lfs_tag_isdelete(tag)) { + // update root + lfs->root[0] = dir.pair[0]; + lfs->root[1] = dir.pair[1]; + + // grab superblock + lfs_superblock_t superblock; + tag = lfs_dir_get(lfs, &dir, LFS_MKTAG(0x7ff, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, sizeof(superblock)), + &superblock); + if (tag < 0) { + err = tag; + goto cleanup; + } + lfs_superblock_fromle32(&superblock); + + // check version + uint16_t major_version = (0xffff & (superblock.version >> 16)); + uint16_t minor_version = (0xffff & (superblock.version >> 0)); + if ((major_version != LFS_DISK_VERSION_MAJOR || + minor_version > LFS_DISK_VERSION_MINOR)) { + LFS_ERROR("Invalid version v%"PRIu16".%"PRIu16, + major_version, minor_version); + err = LFS_ERR_INVAL; + goto cleanup; + } + + // check superblock configuration + if (superblock.name_max) { + if (superblock.name_max > lfs->name_max) { + LFS_ERROR("Unsupported name_max (%"PRIu32" > %"PRIu32")", + superblock.name_max, lfs->name_max); + err = LFS_ERR_INVAL; + goto cleanup; + } + + lfs->name_max = superblock.name_max; + } + + if (superblock.file_max) { + if (superblock.file_max > lfs->file_max) { + LFS_ERROR("Unsupported file_max (%"PRIu32" > %"PRIu32")", + superblock.file_max, lfs->file_max); + err = LFS_ERR_INVAL; + goto cleanup; + } + + lfs->file_max = superblock.file_max; + } + + if (superblock.attr_max) { + if (superblock.attr_max > lfs->attr_max) { + LFS_ERROR("Unsupported attr_max (%"PRIu32" > %"PRIu32")", + superblock.attr_max, lfs->attr_max); + err = LFS_ERR_INVAL; + goto cleanup; + } + + lfs->attr_max = superblock.attr_max; + } + } + + // has gstate? + err = lfs_dir_getgstate(lfs, &dir, &lfs->gstate); + if (err) { + goto cleanup; + } + } + + // found superblock? + if (lfs_pair_isnull(lfs->root)) { + err = LFS_ERR_INVAL; + goto cleanup; + } + + // update littlefs with gstate + if (!lfs_gstate_iszero(&lfs->gstate)) { + LFS_DEBUG("Found pending gstate 0x%08"PRIx32"%08"PRIx32"%08"PRIx32, + lfs->gstate.tag, + lfs->gstate.pair[0], + lfs->gstate.pair[1]); + } + lfs->gstate.tag += !lfs_tag_isvalid(lfs->gstate.tag); + lfs->gdisk = lfs->gstate; + + // setup free lookahead, to distribute allocations uniformly across + // boots, we start the allocator at a random location + lfs->free.off = lfs->seed % lfs->cfg->block_count; + lfs_alloc_drop(lfs); + + return 0; + +cleanup: + lfs_rawunmount(lfs); + return err; +} + +static int lfs_rawunmount(lfs_t *lfs) { + return lfs_deinit(lfs); +} + + +/// Filesystem filesystem operations /// +int lfs_fs_rawtraverse(lfs_t *lfs, + int (*cb)(void *data, lfs_block_t block), void *data, + bool includeorphans) { + // iterate over metadata pairs + lfs_mdir_t dir = {.tail = {0, 1}}; + +#ifdef LFS_MIGRATE + // also consider v1 blocks during migration + if (lfs->lfs1) { + int err = lfs1_traverse(lfs, cb, data); + if (err) { + return err; + } + + dir.tail[0] = lfs->root[0]; + dir.tail[1] = lfs->root[1]; + } +#endif + + lfs_block_t cycle = 0; + while (!lfs_pair_isnull(dir.tail)) { + if (cycle >= lfs->cfg->block_count/2) { + // loop detected + return LFS_ERR_CORRUPT; + } + cycle += 1; + + for (int i = 0; i < 2; i++) { + int err = cb(data, dir.tail[i]); + if (err) { + return err; + } + } + + // iterate through ids in directory + int err = lfs_dir_fetch(lfs, &dir, dir.tail); + if (err) { + return err; + } + + for (uint16_t id = 0; id < dir.count; id++) { + struct lfs_ctz ctz; + lfs_stag_t tag = lfs_dir_get(lfs, &dir, LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, id, sizeof(ctz)), &ctz); + if (tag < 0) { + if (tag == LFS_ERR_NOENT) { + continue; + } + return tag; + } + lfs_ctz_fromle32(&ctz); + + if (lfs_tag_type3(tag) == LFS_TYPE_CTZSTRUCT) { + err = lfs_ctz_traverse(lfs, NULL, &lfs->rcache, + ctz.head, ctz.size, cb, data); + if (err) { + return err; + } + } else if (includeorphans && + lfs_tag_type3(tag) == LFS_TYPE_DIRSTRUCT) { + for (int i = 0; i < 2; i++) { + err = cb(data, (&ctz.head)[i]); + if (err) { + return err; + } + } + } + } + } + +#ifndef LFS_READONLY + // iterate over any open files + for (lfs_file_t *f = (lfs_file_t*)lfs->mlist; f; f = f->next) { + if (f->type != LFS_TYPE_REG) { + continue; + } + + if ((f->flags & LFS_F_DIRTY) && !(f->flags & LFS_F_INLINE)) { + int err = lfs_ctz_traverse(lfs, &f->cache, &lfs->rcache, + f->ctz.head, f->ctz.size, cb, data); + if (err) { + return err; + } + } + + if ((f->flags & LFS_F_WRITING) && !(f->flags & LFS_F_INLINE)) { + int err = lfs_ctz_traverse(lfs, &f->cache, &lfs->rcache, + f->block, f->pos, cb, data); + if (err) { + return err; + } + } + } +#endif + + return 0; +} + +#ifndef LFS_READONLY +static int lfs_fs_pred(lfs_t *lfs, + const lfs_block_t pair[2], lfs_mdir_t *pdir) { + // iterate over all directory directory entries + pdir->tail[0] = 0; + pdir->tail[1] = 1; + lfs_block_t cycle = 0; + while (!lfs_pair_isnull(pdir->tail)) { + if (cycle >= lfs->cfg->block_count/2) { + // loop detected + return LFS_ERR_CORRUPT; + } + cycle += 1; + + if (lfs_pair_cmp(pdir->tail, pair) == 0) { + return 0; + } + + int err = lfs_dir_fetch(lfs, pdir, pdir->tail); + if (err) { + return err; + } + } + + return LFS_ERR_NOENT; +} +#endif + +#ifndef LFS_READONLY +struct lfs_fs_parent_match { + lfs_t *lfs; + const lfs_block_t pair[2]; +}; +#endif + +#ifndef LFS_READONLY +static int lfs_fs_parent_match(void *data, + lfs_tag_t tag, const void *buffer) { + struct lfs_fs_parent_match *find = data; + lfs_t *lfs = find->lfs; + const struct lfs_diskoff *disk = buffer; + (void)tag; + + lfs_block_t child[2]; + int err = lfs_bd_read(lfs, + &lfs->pcache, &lfs->rcache, lfs->cfg->block_size, + disk->block, disk->off, &child, sizeof(child)); + if (err) { + return err; + } + + lfs_pair_fromle32(child); + return (lfs_pair_cmp(child, find->pair) == 0) ? LFS_CMP_EQ : LFS_CMP_LT; +} +#endif + +#ifndef LFS_READONLY +static lfs_stag_t lfs_fs_parent(lfs_t *lfs, const lfs_block_t pair[2], + lfs_mdir_t *parent) { + // use fetchmatch with callback to find pairs + parent->tail[0] = 0; + parent->tail[1] = 1; + lfs_block_t cycle = 0; + while (!lfs_pair_isnull(parent->tail)) { + if (cycle >= lfs->cfg->block_count/2) { + // loop detected + return LFS_ERR_CORRUPT; + } + cycle += 1; + + lfs_stag_t tag = lfs_dir_fetchmatch(lfs, parent, parent->tail, + LFS_MKTAG(0x7ff, 0, 0x3ff), + LFS_MKTAG(LFS_TYPE_DIRSTRUCT, 0, 8), + NULL, + lfs_fs_parent_match, &(struct lfs_fs_parent_match){ + lfs, {pair[0], pair[1]}}); + if (tag && tag != LFS_ERR_NOENT) { + return tag; + } + } + + return LFS_ERR_NOENT; +} +#endif + +#ifndef LFS_READONLY +static int lfs_fs_relocate(lfs_t *lfs, + const lfs_block_t oldpair[2], lfs_block_t newpair[2]) { + // update internal root + if (lfs_pair_cmp(oldpair, lfs->root) == 0) { + lfs->root[0] = newpair[0]; + lfs->root[1] = newpair[1]; + } + + // update internally tracked dirs + for (struct lfs_mlist *d = lfs->mlist; d; d = d->next) { + if (lfs_pair_cmp(oldpair, d->m.pair) == 0) { + d->m.pair[0] = newpair[0]; + d->m.pair[1] = newpair[1]; + } + + if (d->type == LFS_TYPE_DIR && + lfs_pair_cmp(oldpair, ((lfs_dir_t*)d)->head) == 0) { + ((lfs_dir_t*)d)->head[0] = newpair[0]; + ((lfs_dir_t*)d)->head[1] = newpair[1]; + } + } + + // find parent + lfs_mdir_t parent; + lfs_stag_t tag = lfs_fs_parent(lfs, oldpair, &parent); + if (tag < 0 && tag != LFS_ERR_NOENT) { + return tag; + } + + if (tag != LFS_ERR_NOENT) { + // update disk, this creates a desync + int err = lfs_fs_preporphans(lfs, +1); + if (err) { + return err; + } + + // fix pending move in this pair? this looks like an optimization but + // is in fact _required_ since relocating may outdate the move. + uint16_t moveid = 0x3ff; + if (lfs_gstate_hasmovehere(&lfs->gstate, parent.pair)) { + moveid = lfs_tag_id(lfs->gstate.tag); + LFS_DEBUG("Fixing move while relocating " + "{0x%"PRIx32", 0x%"PRIx32"} 0x%"PRIx16"\n", + parent.pair[0], parent.pair[1], moveid); + lfs_fs_prepmove(lfs, 0x3ff, NULL); + if (moveid < lfs_tag_id(tag)) { + tag -= LFS_MKTAG(0, 1, 0); + } + } + + lfs_pair_tole32(newpair); + err = lfs_dir_commit(lfs, &parent, LFS_MKATTRS( + {LFS_MKTAG_IF(moveid != 0x3ff, + LFS_TYPE_DELETE, moveid, 0), NULL}, + {tag, newpair})); + lfs_pair_fromle32(newpair); + if (err) { + return err; + } + + // next step, clean up orphans + err = lfs_fs_preporphans(lfs, -1); + if (err) { + return err; + } + } + + // find pred + int err = lfs_fs_pred(lfs, oldpair, &parent); + if (err && err != LFS_ERR_NOENT) { + return err; + } + + // if we can't find dir, it must be new + if (err != LFS_ERR_NOENT) { + // fix pending move in this pair? this looks like an optimization but + // is in fact _required_ since relocating may outdate the move. + uint16_t moveid = 0x3ff; + if (lfs_gstate_hasmovehere(&lfs->gstate, parent.pair)) { + moveid = lfs_tag_id(lfs->gstate.tag); + LFS_DEBUG("Fixing move while relocating " + "{0x%"PRIx32", 0x%"PRIx32"} 0x%"PRIx16"\n", + parent.pair[0], parent.pair[1], moveid); + lfs_fs_prepmove(lfs, 0x3ff, NULL); + } + + // replace bad pair, either we clean up desync, or no desync occured + lfs_pair_tole32(newpair); + err = lfs_dir_commit(lfs, &parent, LFS_MKATTRS( + {LFS_MKTAG_IF(moveid != 0x3ff, + LFS_TYPE_DELETE, moveid, 0), NULL}, + {LFS_MKTAG(LFS_TYPE_TAIL + parent.split, 0x3ff, 8), newpair})); + lfs_pair_fromle32(newpair); + if (err) { + return err; + } + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_fs_preporphans(lfs_t *lfs, int8_t orphans) { + LFS_ASSERT(lfs_tag_size(lfs->gstate.tag) > 0 || orphans >= 0); + lfs->gstate.tag += orphans; + lfs->gstate.tag = ((lfs->gstate.tag & ~LFS_MKTAG(0x800, 0, 0)) | + ((uint32_t)lfs_gstate_hasorphans(&lfs->gstate) << 31)); + + return 0; +} +#endif + +#ifndef LFS_READONLY +static void lfs_fs_prepmove(lfs_t *lfs, + uint16_t id, const lfs_block_t pair[2]) { + lfs->gstate.tag = ((lfs->gstate.tag & ~LFS_MKTAG(0x7ff, 0x3ff, 0)) | + ((id != 0x3ff) ? LFS_MKTAG(LFS_TYPE_DELETE, id, 0) : 0)); + lfs->gstate.pair[0] = (id != 0x3ff) ? pair[0] : 0; + lfs->gstate.pair[1] = (id != 0x3ff) ? pair[1] : 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_fs_demove(lfs_t *lfs) { + if (!lfs_gstate_hasmove(&lfs->gdisk)) { + return 0; + } + + // Fix bad moves + LFS_DEBUG("Fixing move {0x%"PRIx32", 0x%"PRIx32"} 0x%"PRIx16, + lfs->gdisk.pair[0], + lfs->gdisk.pair[1], + lfs_tag_id(lfs->gdisk.tag)); + + // fetch and delete the moved entry + lfs_mdir_t movedir; + int err = lfs_dir_fetch(lfs, &movedir, lfs->gdisk.pair); + if (err) { + return err; + } + + // prep gstate and delete move id + uint16_t moveid = lfs_tag_id(lfs->gdisk.tag); + lfs_fs_prepmove(lfs, 0x3ff, NULL); + err = lfs_dir_commit(lfs, &movedir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_DELETE, moveid, 0), NULL})); + if (err) { + return err; + } + + return 0; +} +#endif + +#ifndef LFS_READONLY +static int lfs_fs_deorphan(lfs_t *lfs) { + if (!lfs_gstate_hasorphans(&lfs->gstate)) { + return 0; + } + + // Fix any orphans + lfs_mdir_t pdir = {.split = true, .tail = {0, 1}}; + lfs_mdir_t dir; + + // iterate over all directory directory entries + while (!lfs_pair_isnull(pdir.tail)) { + int err = lfs_dir_fetch(lfs, &dir, pdir.tail); + if (err) { + return err; + } + + // check head blocks for orphans + if (!pdir.split) { + // check if we have a parent + lfs_mdir_t parent; + lfs_stag_t tag = lfs_fs_parent(lfs, pdir.tail, &parent); + if (tag < 0 && tag != LFS_ERR_NOENT) { + return tag; + } + + if (tag == LFS_ERR_NOENT) { + // we are an orphan + LFS_DEBUG("Fixing orphan {0x%"PRIx32", 0x%"PRIx32"}", + pdir.tail[0], pdir.tail[1]); + + err = lfs_dir_drop(lfs, &pdir, &dir); + if (err) { + return err; + } + + // refetch tail + continue; + } + + lfs_block_t pair[2]; + lfs_stag_t res = lfs_dir_get(lfs, &parent, + LFS_MKTAG(0x7ff, 0x3ff, 0), tag, pair); + if (res < 0) { + return res; + } + lfs_pair_fromle32(pair); + + if (!lfs_pair_sync(pair, pdir.tail)) { + // we have desynced + LFS_DEBUG("Fixing half-orphan {0x%"PRIx32", 0x%"PRIx32"} " + "-> {0x%"PRIx32", 0x%"PRIx32"}", + pdir.tail[0], pdir.tail[1], pair[0], pair[1]); + + lfs_pair_tole32(pair); + err = lfs_dir_commit(lfs, &pdir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), pair})); + lfs_pair_fromle32(pair); + if (err) { + return err; + } + + // refetch tail + continue; + } + } + + pdir = dir; + } + + // mark orphans as fixed + return lfs_fs_preporphans(lfs, -lfs_gstate_getorphans(&lfs->gstate)); +} +#endif + +#ifndef LFS_READONLY +static int lfs_fs_forceconsistency(lfs_t *lfs) { + int err = lfs_fs_demove(lfs); + if (err) { + return err; + } + + err = lfs_fs_deorphan(lfs); + if (err) { + return err; + } + + return 0; +} +#endif + +static int lfs_fs_size_count(void *p, lfs_block_t block) { + (void)block; + lfs_size_t *size = p; + *size += 1; + return 0; +} + +static lfs_ssize_t lfs_fs_rawsize(lfs_t *lfs) { + lfs_size_t size = 0; + int err = lfs_fs_rawtraverse(lfs, lfs_fs_size_count, &size, false); + if (err) { + return err; + } + + return size; +} + +#ifdef LFS_MIGRATE +////// Migration from littelfs v1 below this ////// + +/// Version info /// + +// Software library version +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS1_VERSION 0x00010007 +#define LFS1_VERSION_MAJOR (0xffff & (LFS1_VERSION >> 16)) +#define LFS1_VERSION_MINOR (0xffff & (LFS1_VERSION >> 0)) + +// Version of On-disk data structures +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS1_DISK_VERSION 0x00010001 +#define LFS1_DISK_VERSION_MAJOR (0xffff & (LFS1_DISK_VERSION >> 16)) +#define LFS1_DISK_VERSION_MINOR (0xffff & (LFS1_DISK_VERSION >> 0)) + + +/// v1 Definitions /// + +// File types +enum lfs1_type { + LFS1_TYPE_REG = 0x11, + LFS1_TYPE_DIR = 0x22, + LFS1_TYPE_SUPERBLOCK = 0x2e, +}; + +typedef struct lfs1 { + lfs_block_t root[2]; +} lfs1_t; + +typedef struct lfs1_entry { + lfs_off_t off; + + struct lfs1_disk_entry { + uint8_t type; + uint8_t elen; + uint8_t alen; + uint8_t nlen; + union { + struct { + lfs_block_t head; + lfs_size_t size; + } file; + lfs_block_t dir[2]; + } u; + } d; +} lfs1_entry_t; + +typedef struct lfs1_dir { + struct lfs1_dir *next; + lfs_block_t pair[2]; + lfs_off_t off; + + lfs_block_t head[2]; + lfs_off_t pos; + + struct lfs1_disk_dir { + uint32_t rev; + lfs_size_t size; + lfs_block_t tail[2]; + } d; +} lfs1_dir_t; + +typedef struct lfs1_superblock { + lfs_off_t off; + + struct lfs1_disk_superblock { + uint8_t type; + uint8_t elen; + uint8_t alen; + uint8_t nlen; + lfs_block_t root[2]; + uint32_t block_size; + uint32_t block_count; + uint32_t version; + char magic[8]; + } d; +} lfs1_superblock_t; + + +/// Low-level wrappers v1->v2 /// +static void lfs1_crc(uint32_t *crc, const void *buffer, size_t size) { + *crc = lfs_crc(*crc, buffer, size); +} + +static int lfs1_bd_read(lfs_t *lfs, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size) { + // if we ever do more than writes to alternating pairs, + // this may need to consider pcache + return lfs_bd_read(lfs, &lfs->pcache, &lfs->rcache, size, + block, off, buffer, size); +} + +static int lfs1_bd_crc(lfs_t *lfs, lfs_block_t block, + lfs_off_t off, lfs_size_t size, uint32_t *crc) { + for (lfs_off_t i = 0; i < size; i++) { + uint8_t c; + int err = lfs1_bd_read(lfs, block, off+i, &c, 1); + if (err) { + return err; + } + + lfs1_crc(crc, &c, 1); + } + + return 0; +} + + +/// Endian swapping functions /// +static void lfs1_dir_fromle32(struct lfs1_disk_dir *d) { + d->rev = lfs_fromle32(d->rev); + d->size = lfs_fromle32(d->size); + d->tail[0] = lfs_fromle32(d->tail[0]); + d->tail[1] = lfs_fromle32(d->tail[1]); +} + +static void lfs1_dir_tole32(struct lfs1_disk_dir *d) { + d->rev = lfs_tole32(d->rev); + d->size = lfs_tole32(d->size); + d->tail[0] = lfs_tole32(d->tail[0]); + d->tail[1] = lfs_tole32(d->tail[1]); +} + +static void lfs1_entry_fromle32(struct lfs1_disk_entry *d) { + d->u.dir[0] = lfs_fromle32(d->u.dir[0]); + d->u.dir[1] = lfs_fromle32(d->u.dir[1]); +} + +static void lfs1_entry_tole32(struct lfs1_disk_entry *d) { + d->u.dir[0] = lfs_tole32(d->u.dir[0]); + d->u.dir[1] = lfs_tole32(d->u.dir[1]); +} + +static void lfs1_superblock_fromle32(struct lfs1_disk_superblock *d) { + d->root[0] = lfs_fromle32(d->root[0]); + d->root[1] = lfs_fromle32(d->root[1]); + d->block_size = lfs_fromle32(d->block_size); + d->block_count = lfs_fromle32(d->block_count); + d->version = lfs_fromle32(d->version); +} + + +///// Metadata pair and directory operations /// +static inline lfs_size_t lfs1_entry_size(const lfs1_entry_t *entry) { + return 4 + entry->d.elen + entry->d.alen + entry->d.nlen; +} + +static int lfs1_dir_fetch(lfs_t *lfs, + lfs1_dir_t *dir, const lfs_block_t pair[2]) { + // copy out pair, otherwise may be aliasing dir + const lfs_block_t tpair[2] = {pair[0], pair[1]}; + bool valid = false; + + // check both blocks for the most recent revision + for (int i = 0; i < 2; i++) { + struct lfs1_disk_dir test; + int err = lfs1_bd_read(lfs, tpair[i], 0, &test, sizeof(test)); + lfs1_dir_fromle32(&test); + if (err) { + if (err == LFS_ERR_CORRUPT) { + continue; + } + return err; + } + + if (valid && lfs_scmp(test.rev, dir->d.rev) < 0) { + continue; + } + + if ((0x7fffffff & test.size) < sizeof(test)+4 || + (0x7fffffff & test.size) > lfs->cfg->block_size) { + continue; + } + + uint32_t crc = 0xffffffff; + lfs1_dir_tole32(&test); + lfs1_crc(&crc, &test, sizeof(test)); + lfs1_dir_fromle32(&test); + err = lfs1_bd_crc(lfs, tpair[i], sizeof(test), + (0x7fffffff & test.size) - sizeof(test), &crc); + if (err) { + if (err == LFS_ERR_CORRUPT) { + continue; + } + return err; + } + + if (crc != 0) { + continue; + } + + valid = true; + + // setup dir in case it's valid + dir->pair[0] = tpair[(i+0) % 2]; + dir->pair[1] = tpair[(i+1) % 2]; + dir->off = sizeof(dir->d); + dir->d = test; + } + + if (!valid) { + LFS_ERROR("Corrupted dir pair at {0x%"PRIx32", 0x%"PRIx32"}", + tpair[0], tpair[1]); + return LFS_ERR_CORRUPT; + } + + return 0; +} + +static int lfs1_dir_next(lfs_t *lfs, lfs1_dir_t *dir, lfs1_entry_t *entry) { + while (dir->off + sizeof(entry->d) > (0x7fffffff & dir->d.size)-4) { + if (!(0x80000000 & dir->d.size)) { + entry->off = dir->off; + return LFS_ERR_NOENT; + } + + int err = lfs1_dir_fetch(lfs, dir, dir->d.tail); + if (err) { + return err; + } + + dir->off = sizeof(dir->d); + dir->pos += sizeof(dir->d) + 4; + } + + int err = lfs1_bd_read(lfs, dir->pair[0], dir->off, + &entry->d, sizeof(entry->d)); + lfs1_entry_fromle32(&entry->d); + if (err) { + return err; + } + + entry->off = dir->off; + dir->off += lfs1_entry_size(entry); + dir->pos += lfs1_entry_size(entry); + return 0; +} + +/// littlefs v1 specific operations /// +int lfs1_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data) { + if (lfs_pair_isnull(lfs->lfs1->root)) { + return 0; + } + + // iterate over metadata pairs + lfs1_dir_t dir; + lfs1_entry_t entry; + lfs_block_t cwd[2] = {0, 1}; + + while (true) { + for (int i = 0; i < 2; i++) { + int err = cb(data, cwd[i]); + if (err) { + return err; + } + } + + int err = lfs1_dir_fetch(lfs, &dir, cwd); + if (err) { + return err; + } + + // iterate over contents + while (dir.off + sizeof(entry.d) <= (0x7fffffff & dir.d.size)-4) { + err = lfs1_bd_read(lfs, dir.pair[0], dir.off, + &entry.d, sizeof(entry.d)); + lfs1_entry_fromle32(&entry.d); + if (err) { + return err; + } + + dir.off += lfs1_entry_size(&entry); + if ((0x70 & entry.d.type) == (0x70 & LFS1_TYPE_REG)) { + err = lfs_ctz_traverse(lfs, NULL, &lfs->rcache, + entry.d.u.file.head, entry.d.u.file.size, cb, data); + if (err) { + return err; + } + } + } + + // we also need to check if we contain a threaded v2 directory + lfs_mdir_t dir2 = {.split=true, .tail={cwd[0], cwd[1]}}; + while (dir2.split) { + err = lfs_dir_fetch(lfs, &dir2, dir2.tail); + if (err) { + break; + } + + for (int i = 0; i < 2; i++) { + err = cb(data, dir2.pair[i]); + if (err) { + return err; + } + } + } + + cwd[0] = dir.d.tail[0]; + cwd[1] = dir.d.tail[1]; + + if (lfs_pair_isnull(cwd)) { + break; + } + } + + return 0; +} + +static int lfs1_moved(lfs_t *lfs, const void *e) { + if (lfs_pair_isnull(lfs->lfs1->root)) { + return 0; + } + + // skip superblock + lfs1_dir_t cwd; + int err = lfs1_dir_fetch(lfs, &cwd, (const lfs_block_t[2]){0, 1}); + if (err) { + return err; + } + + // iterate over all directory directory entries + lfs1_entry_t entry; + while (!lfs_pair_isnull(cwd.d.tail)) { + err = lfs1_dir_fetch(lfs, &cwd, cwd.d.tail); + if (err) { + return err; + } + + while (true) { + err = lfs1_dir_next(lfs, &cwd, &entry); + if (err && err != LFS_ERR_NOENT) { + return err; + } + + if (err == LFS_ERR_NOENT) { + break; + } + + if (!(0x80 & entry.d.type) && + memcmp(&entry.d.u, e, sizeof(entry.d.u)) == 0) { + return true; + } + } + } + + return false; +} + +/// Filesystem operations /// +static int lfs1_mount(lfs_t *lfs, struct lfs1 *lfs1, + const struct lfs_config *cfg) { + int err = 0; + { + err = lfs_init(lfs, cfg); + if (err) { + return err; + } + + lfs->lfs1 = lfs1; + lfs->lfs1->root[0] = LFS_BLOCK_NULL; + lfs->lfs1->root[1] = LFS_BLOCK_NULL; + + // setup free lookahead + lfs->free.off = 0; + lfs->free.size = 0; + lfs->free.i = 0; + lfs_alloc_ack(lfs); + + // load superblock + lfs1_dir_t dir; + lfs1_superblock_t superblock; + err = lfs1_dir_fetch(lfs, &dir, (const lfs_block_t[2]){0, 1}); + if (err && err != LFS_ERR_CORRUPT) { + goto cleanup; + } + + if (!err) { + err = lfs1_bd_read(lfs, dir.pair[0], sizeof(dir.d), + &superblock.d, sizeof(superblock.d)); + lfs1_superblock_fromle32(&superblock.d); + if (err) { + goto cleanup; + } + + lfs->lfs1->root[0] = superblock.d.root[0]; + lfs->lfs1->root[1] = superblock.d.root[1]; + } + + if (err || memcmp(superblock.d.magic, "littlefs", 8) != 0) { + LFS_ERROR("Invalid superblock at {0x%"PRIx32", 0x%"PRIx32"}", + 0, 1); + err = LFS_ERR_CORRUPT; + goto cleanup; + } + + uint16_t major_version = (0xffff & (superblock.d.version >> 16)); + uint16_t minor_version = (0xffff & (superblock.d.version >> 0)); + if ((major_version != LFS1_DISK_VERSION_MAJOR || + minor_version > LFS1_DISK_VERSION_MINOR)) { + LFS_ERROR("Invalid version v%d.%d", major_version, minor_version); + err = LFS_ERR_INVAL; + goto cleanup; + } + + return 0; + } + +cleanup: + lfs_deinit(lfs); + return err; +} + +static int lfs1_unmount(lfs_t *lfs) { + return lfs_deinit(lfs); +} + +/// v1 migration /// +static int lfs_rawmigrate(lfs_t *lfs, const struct lfs_config *cfg) { + struct lfs1 lfs1; + int err = lfs1_mount(lfs, &lfs1, cfg); + if (err) { + return err; + } + + { + // iterate through each directory, copying over entries + // into new directory + lfs1_dir_t dir1; + lfs_mdir_t dir2; + dir1.d.tail[0] = lfs->lfs1->root[0]; + dir1.d.tail[1] = lfs->lfs1->root[1]; + while (!lfs_pair_isnull(dir1.d.tail)) { + // iterate old dir + err = lfs1_dir_fetch(lfs, &dir1, dir1.d.tail); + if (err) { + goto cleanup; + } + + // create new dir and bind as temporary pretend root + err = lfs_dir_alloc(lfs, &dir2); + if (err) { + goto cleanup; + } + + dir2.rev = dir1.d.rev; + dir1.head[0] = dir1.pair[0]; + dir1.head[1] = dir1.pair[1]; + lfs->root[0] = dir2.pair[0]; + lfs->root[1] = dir2.pair[1]; + + err = lfs_dir_commit(lfs, &dir2, NULL, 0); + if (err) { + goto cleanup; + } + + while (true) { + lfs1_entry_t entry1; + err = lfs1_dir_next(lfs, &dir1, &entry1); + if (err && err != LFS_ERR_NOENT) { + goto cleanup; + } + + if (err == LFS_ERR_NOENT) { + break; + } + + // check that entry has not been moved + if (entry1.d.type & 0x80) { + int moved = lfs1_moved(lfs, &entry1.d.u); + if (moved < 0) { + err = moved; + goto cleanup; + } + + if (moved) { + continue; + } + + entry1.d.type &= ~0x80; + } + + // also fetch name + char name[LFS_NAME_MAX+1]; + memset(name, 0, sizeof(name)); + err = lfs1_bd_read(lfs, dir1.pair[0], + entry1.off + 4+entry1.d.elen+entry1.d.alen, + name, entry1.d.nlen); + if (err) { + goto cleanup; + } + + bool isdir = (entry1.d.type == LFS1_TYPE_DIR); + + // create entry in new dir + err = lfs_dir_fetch(lfs, &dir2, lfs->root); + if (err) { + goto cleanup; + } + + uint16_t id; + err = lfs_dir_find(lfs, &dir2, &(const char*){name}, &id); + if (!(err == LFS_ERR_NOENT && id != 0x3ff)) { + err = (err < 0) ? err : LFS_ERR_EXIST; + goto cleanup; + } + + lfs1_entry_tole32(&entry1.d); + err = lfs_dir_commit(lfs, &dir2, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_CREATE, id, 0), NULL}, + {LFS_MKTAG_IF_ELSE(isdir, + LFS_TYPE_DIR, id, entry1.d.nlen, + LFS_TYPE_REG, id, entry1.d.nlen), + name}, + {LFS_MKTAG_IF_ELSE(isdir, + LFS_TYPE_DIRSTRUCT, id, sizeof(entry1.d.u), + LFS_TYPE_CTZSTRUCT, id, sizeof(entry1.d.u)), + &entry1.d.u})); + lfs1_entry_fromle32(&entry1.d); + if (err) { + goto cleanup; + } + } + + if (!lfs_pair_isnull(dir1.d.tail)) { + // find last block and update tail to thread into fs + err = lfs_dir_fetch(lfs, &dir2, lfs->root); + if (err) { + goto cleanup; + } + + while (dir2.split) { + err = lfs_dir_fetch(lfs, &dir2, dir2.tail); + if (err) { + goto cleanup; + } + } + + lfs_pair_tole32(dir2.pair); + err = lfs_dir_commit(lfs, &dir2, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir1.d.tail})); + lfs_pair_fromle32(dir2.pair); + if (err) { + goto cleanup; + } + } + + // Copy over first block to thread into fs. Unfortunately + // if this fails there is not much we can do. + LFS_DEBUG("Migrating {0x%"PRIx32", 0x%"PRIx32"} " + "-> {0x%"PRIx32", 0x%"PRIx32"}", + lfs->root[0], lfs->root[1], dir1.head[0], dir1.head[1]); + + err = lfs_bd_erase(lfs, dir1.head[1]); + if (err) { + goto cleanup; + } + + err = lfs_dir_fetch(lfs, &dir2, lfs->root); + if (err) { + goto cleanup; + } + + for (lfs_off_t i = 0; i < dir2.off; i++) { + uint8_t dat; + err = lfs_bd_read(lfs, + NULL, &lfs->rcache, dir2.off, + dir2.pair[0], i, &dat, 1); + if (err) { + goto cleanup; + } + + err = lfs_bd_prog(lfs, + &lfs->pcache, &lfs->rcache, true, + dir1.head[1], i, &dat, 1); + if (err) { + goto cleanup; + } + } + + err = lfs_bd_flush(lfs, &lfs->pcache, &lfs->rcache, true); + if (err) { + goto cleanup; + } + } + + // Create new superblock. This marks a successful migration! + err = lfs1_dir_fetch(lfs, &dir1, (const lfs_block_t[2]){0, 1}); + if (err) { + goto cleanup; + } + + dir2.pair[0] = dir1.pair[0]; + dir2.pair[1] = dir1.pair[1]; + dir2.rev = dir1.d.rev; + dir2.off = sizeof(dir2.rev); + dir2.etag = 0xffffffff; + dir2.count = 0; + dir2.tail[0] = lfs->lfs1->root[0]; + dir2.tail[1] = lfs->lfs1->root[1]; + dir2.erased = false; + dir2.split = true; + + lfs_superblock_t superblock = { + .version = LFS_DISK_VERSION, + .block_size = lfs->cfg->block_size, + .block_count = lfs->cfg->block_count, + .name_max = lfs->name_max, + .file_max = lfs->file_max, + .attr_max = lfs->attr_max, + }; + + lfs_superblock_tole32(&superblock); + err = lfs_dir_commit(lfs, &dir2, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_CREATE, 0, 0), NULL}, + {LFS_MKTAG(LFS_TYPE_SUPERBLOCK, 0, 8), "littlefs"}, + {LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, sizeof(superblock)), + &superblock})); + if (err) { + goto cleanup; + } + + // sanity check that fetch works + err = lfs_dir_fetch(lfs, &dir2, (const lfs_block_t[2]){0, 1}); + if (err) { + goto cleanup; + } + + // force compaction to prevent accidentally mounting v1 + dir2.erased = false; + err = lfs_dir_commit(lfs, &dir2, NULL, 0); + if (err) { + goto cleanup; + } + } + +cleanup: + lfs1_unmount(lfs); + return err; +} + +#endif + + +/// Public API wrappers /// + +// Here we can add tracing/thread safety easily + +// Thread-safe wrappers if enabled +#ifdef LFS_THREADSAFE +#define LFS_LOCK(cfg) cfg->lock(cfg) +#define LFS_UNLOCK(cfg) cfg->unlock(cfg) +#else +#define LFS_LOCK(cfg) ((void)cfg, 0) +#define LFS_UNLOCK(cfg) ((void)cfg) +#endif + +// Public API +#ifndef LFS_READONLY +int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) { + int err = LFS_LOCK(cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_format(%p, %p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32", " + ".block_cycles=%"PRIu32", .cache_size=%"PRIu32", " + ".lookahead_size=%"PRIu32", .read_buffer=%p, " + ".prog_buffer=%p, .lookahead_buffer=%p, " + ".name_max=%"PRIu32", .file_max=%"PRIu32", " + ".attr_max=%"PRIu32"})", + (void*)lfs, (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + cfg->block_cycles, cfg->cache_size, cfg->lookahead_size, + cfg->read_buffer, cfg->prog_buffer, cfg->lookahead_buffer, + cfg->name_max, cfg->file_max, cfg->attr_max); + + err = lfs_rawformat(lfs, cfg); + + LFS_TRACE("lfs_format -> %d", err); + LFS_UNLOCK(cfg); + return err; +} +#endif + +int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) { + int err = LFS_LOCK(cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_mount(%p, %p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32", " + ".block_cycles=%"PRIu32", .cache_size=%"PRIu32", " + ".lookahead_size=%"PRIu32", .read_buffer=%p, " + ".prog_buffer=%p, .lookahead_buffer=%p, " + ".name_max=%"PRIu32", .file_max=%"PRIu32", " + ".attr_max=%"PRIu32"})", + (void*)lfs, (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + cfg->block_cycles, cfg->cache_size, cfg->lookahead_size, + cfg->read_buffer, cfg->prog_buffer, cfg->lookahead_buffer, + cfg->name_max, cfg->file_max, cfg->attr_max); + + err = lfs_rawmount(lfs, cfg); + + LFS_TRACE("lfs_mount -> %d", err); + LFS_UNLOCK(cfg); + return err; +} + +int lfs_unmount(lfs_t *lfs) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_unmount(%p)", (void*)lfs); + + err = lfs_rawunmount(lfs); + + LFS_TRACE("lfs_unmount -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +#ifndef LFS_READONLY +int lfs_remove(lfs_t *lfs, const char *path) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_remove(%p, \"%s\")", (void*)lfs, path); + + err = lfs_rawremove(lfs, path); + + LFS_TRACE("lfs_remove -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +#ifndef LFS_READONLY +int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_rename(%p, \"%s\", \"%s\")", (void*)lfs, oldpath, newpath); + + err = lfs_rawrename(lfs, oldpath, newpath); + + LFS_TRACE("lfs_rename -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_stat(%p, \"%s\", %p)", (void*)lfs, path, (void*)info); + + err = lfs_rawstat(lfs, path, info); + + LFS_TRACE("lfs_stat -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path, + uint8_t type, void *buffer, lfs_size_t size) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_getattr(%p, \"%s\", %"PRIu8", %p, %"PRIu32")", + (void*)lfs, path, type, buffer, size); + + lfs_ssize_t res = lfs_rawgetattr(lfs, path, type, buffer, size); + + LFS_TRACE("lfs_getattr -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} + +#ifndef LFS_READONLY +int lfs_setattr(lfs_t *lfs, const char *path, + uint8_t type, const void *buffer, lfs_size_t size) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_setattr(%p, \"%s\", %"PRIu8", %p, %"PRIu32")", + (void*)lfs, path, type, buffer, size); + + err = lfs_rawsetattr(lfs, path, type, buffer, size); + + LFS_TRACE("lfs_setattr -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +#ifndef LFS_READONLY +int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_removeattr(%p, \"%s\", %"PRIu8")", (void*)lfs, path, type); + + err = lfs_rawremoveattr(lfs, path, type); + + LFS_TRACE("lfs_removeattr -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +int lfs_file_open(lfs_t *lfs, lfs_file_t *file, const char *path, int flags) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_open(%p, %p, \"%s\", %x)", + (void*)lfs, (void*)file, path, flags); + LFS_ASSERT(!lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + err = lfs_file_rawopen(lfs, file, path, flags); + + LFS_TRACE("lfs_file_open -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags, + const struct lfs_file_config *cfg) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_opencfg(%p, %p, \"%s\", %x, %p {" + ".buffer=%p, .attrs=%p, .attr_count=%"PRIu32"})", + (void*)lfs, (void*)file, path, flags, + (void*)cfg, cfg->buffer, (void*)cfg->attrs, cfg->attr_count); + LFS_ASSERT(!lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + err = lfs_file_rawopencfg(lfs, file, path, flags, cfg); + + LFS_TRACE("lfs_file_opencfg -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +int lfs_file_close(lfs_t *lfs, lfs_file_t *file) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_close(%p, %p)", (void*)lfs, (void*)file); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + err = lfs_file_rawclose(lfs, file); + + LFS_TRACE("lfs_file_close -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +#ifndef LFS_READONLY +int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_sync(%p, %p)", (void*)lfs, (void*)file); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + err = lfs_file_rawsync(lfs, file); + + LFS_TRACE("lfs_file_sync -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file, + void *buffer, lfs_size_t size) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_read(%p, %p, %p, %"PRIu32")", + (void*)lfs, (void*)file, buffer, size); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + lfs_ssize_t res = lfs_file_rawread(lfs, file, buffer, size); + + LFS_TRACE("lfs_file_read -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} + +#ifndef LFS_READONLY +lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file, + const void *buffer, lfs_size_t size) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_write(%p, %p, %p, %"PRIu32")", + (void*)lfs, (void*)file, buffer, size); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + lfs_ssize_t res = lfs_file_rawwrite(lfs, file, buffer, size); + + LFS_TRACE("lfs_file_write -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} +#endif + +lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, + lfs_soff_t off, int whence) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_seek(%p, %p, %"PRId32", %d)", + (void*)lfs, (void*)file, off, whence); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + lfs_soff_t res = lfs_file_rawseek(lfs, file, off, whence); + + LFS_TRACE("lfs_file_seek -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} + +#ifndef LFS_READONLY +int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_truncate(%p, %p, %"PRIu32")", + (void*)lfs, (void*)file, size); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + err = lfs_file_rawtruncate(lfs, file, size); + + LFS_TRACE("lfs_file_truncate -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_tell(%p, %p)", (void*)lfs, (void*)file); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + lfs_soff_t res = lfs_file_rawtell(lfs, file); + + LFS_TRACE("lfs_file_tell -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} + +int lfs_file_rewind(lfs_t *lfs, lfs_file_t *file) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_rewind(%p, %p)", (void*)lfs, (void*)file); + + err = lfs_file_rawrewind(lfs, file); + + LFS_TRACE("lfs_file_rewind -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_file_size(%p, %p)", (void*)lfs, (void*)file); + LFS_ASSERT(lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)file)); + + lfs_soff_t res = lfs_file_rawsize(lfs, file); + + LFS_TRACE("lfs_file_size -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} + +#ifndef LFS_READONLY +int lfs_mkdir(lfs_t *lfs, const char *path) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_mkdir(%p, \"%s\")", (void*)lfs, path); + + err = lfs_rawmkdir(lfs, path); + + LFS_TRACE("lfs_mkdir -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} +#endif + +int lfs_dir_open(lfs_t *lfs, lfs_dir_t *dir, const char *path) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_dir_open(%p, %p, \"%s\")", (void*)lfs, (void*)dir, path); + LFS_ASSERT(!lfs_mlist_isopen(lfs->mlist, (struct lfs_mlist*)dir)); + + err = lfs_dir_rawopen(lfs, dir, path); + + LFS_TRACE("lfs_dir_open -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +int lfs_dir_close(lfs_t *lfs, lfs_dir_t *dir) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_dir_close(%p, %p)", (void*)lfs, (void*)dir); + + err = lfs_dir_rawclose(lfs, dir); + + LFS_TRACE("lfs_dir_close -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_dir_read(%p, %p, %p)", + (void*)lfs, (void*)dir, (void*)info); + + err = lfs_dir_rawread(lfs, dir, info); + + LFS_TRACE("lfs_dir_read -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +int lfs_dir_seek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_dir_seek(%p, %p, %"PRIu32")", + (void*)lfs, (void*)dir, off); + + err = lfs_dir_rawseek(lfs, dir, off); + + LFS_TRACE("lfs_dir_seek -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +lfs_soff_t lfs_dir_tell(lfs_t *lfs, lfs_dir_t *dir) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_dir_tell(%p, %p)", (void*)lfs, (void*)dir); + + lfs_soff_t res = lfs_dir_rawtell(lfs, dir); + + LFS_TRACE("lfs_dir_tell -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} + +int lfs_dir_rewind(lfs_t *lfs, lfs_dir_t *dir) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_dir_rewind(%p, %p)", (void*)lfs, (void*)dir); + + err = lfs_dir_rawrewind(lfs, dir); + + LFS_TRACE("lfs_dir_rewind -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +lfs_ssize_t lfs_fs_size(lfs_t *lfs) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_fs_size(%p)", (void*)lfs); + + lfs_ssize_t res = lfs_fs_rawsize(lfs); + + LFS_TRACE("lfs_fs_size -> %"PRId32, res); + LFS_UNLOCK(lfs->cfg); + return res; +} + +int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void *, lfs_block_t), void *data) { + int err = LFS_LOCK(lfs->cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_fs_traverse(%p, %p, %p)", + (void*)lfs, (void*)(uintptr_t)cb, data); + + err = lfs_fs_rawtraverse(lfs, cb, data, true); + + LFS_TRACE("lfs_fs_traverse -> %d", err); + LFS_UNLOCK(lfs->cfg); + return err; +} + +#ifdef LFS_MIGRATE +int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg) { + int err = LFS_LOCK(cfg); + if (err) { + return err; + } + LFS_TRACE("lfs_migrate(%p, %p {.context=%p, " + ".read=%p, .prog=%p, .erase=%p, .sync=%p, " + ".read_size=%"PRIu32", .prog_size=%"PRIu32", " + ".block_size=%"PRIu32", .block_count=%"PRIu32", " + ".block_cycles=%"PRIu32", .cache_size=%"PRIu32", " + ".lookahead_size=%"PRIu32", .read_buffer=%p, " + ".prog_buffer=%p, .lookahead_buffer=%p, " + ".name_max=%"PRIu32", .file_max=%"PRIu32", " + ".attr_max=%"PRIu32"})", + (void*)lfs, (void*)cfg, cfg->context, + (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, + (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, + cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, + cfg->block_cycles, cfg->cache_size, cfg->lookahead_size, + cfg->read_buffer, cfg->prog_buffer, cfg->lookahead_buffer, + cfg->name_max, cfg->file_max, cfg->attr_max); + + err = lfs_rawmigrate(lfs, cfg); + + LFS_TRACE("lfs_migrate -> %d", err); + LFS_UNLOCK(cfg); + return err; +} +#endif + diff --git a/ext/littlefs/lfs.h b/ext/littlefs/lfs.h new file mode 100644 index 0000000000..ad491627fe --- /dev/null +++ b/ext/littlefs/lfs.h @@ -0,0 +1,695 @@ +/* + * The little filesystem + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_H +#define LFS_H + +#include +#include +#include "lfs_util.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/// Version info /// + +// Software library version +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS_VERSION 0x00020004 +#define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16)) +#define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >> 0)) + +// Version of On-disk data structures +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS_DISK_VERSION 0x00020000 +#define LFS_DISK_VERSION_MAJOR (0xffff & (LFS_DISK_VERSION >> 16)) +#define LFS_DISK_VERSION_MINOR (0xffff & (LFS_DISK_VERSION >> 0)) + + +/// Definitions /// + +// Type definitions +typedef uint32_t lfs_size_t; +typedef uint32_t lfs_off_t; + +typedef int32_t lfs_ssize_t; +typedef int32_t lfs_soff_t; + +typedef uint32_t lfs_block_t; + +// Maximum name size in bytes, may be redefined to reduce the size of the +// info struct. Limited to <= 1022. Stored in superblock and must be +// respected by other littlefs drivers. +#ifndef LFS_NAME_MAX +#define LFS_NAME_MAX 255 +#endif + +// Maximum size of a file in bytes, may be redefined to limit to support other +// drivers. Limited on disk to <= 4294967296. However, above 2147483647 the +// functions lfs_file_seek, lfs_file_size, and lfs_file_tell will return +// incorrect values due to using signed integers. Stored in superblock and +// must be respected by other littlefs drivers. +#ifndef LFS_FILE_MAX +#define LFS_FILE_MAX 2147483647 +#endif + +// Maximum size of custom attributes in bytes, may be redefined, but there is +// no real benefit to using a smaller LFS_ATTR_MAX. Limited to <= 1022. +#ifndef LFS_ATTR_MAX +#define LFS_ATTR_MAX 1022 +#endif + +// Possible error codes, these are negative to allow +// valid positive return values +enum lfs_error { + LFS_ERR_OK = 0, // No error + LFS_ERR_IO = -5, // Error during device operation + LFS_ERR_CORRUPT = -84, // Corrupted + LFS_ERR_NOENT = -2, // No directory entry + LFS_ERR_EXIST = -17, // Entry already exists + LFS_ERR_NOTDIR = -20, // Entry is not a dir + LFS_ERR_ISDIR = -21, // Entry is a dir + LFS_ERR_NOTEMPTY = -39, // Dir is not empty + LFS_ERR_BADF = -9, // Bad file number + LFS_ERR_FBIG = -27, // File too large + LFS_ERR_INVAL = -22, // Invalid parameter + LFS_ERR_NOSPC = -28, // No space left on device + LFS_ERR_NOMEM = -12, // No more memory available + LFS_ERR_NOATTR = -61, // No data/attr available + LFS_ERR_NAMETOOLONG = -36, // File name too long +}; + +// File types +enum lfs_type { + // file types + LFS_TYPE_REG = 0x001, + LFS_TYPE_DIR = 0x002, + + // internally used types + LFS_TYPE_SPLICE = 0x400, + LFS_TYPE_NAME = 0x000, + LFS_TYPE_STRUCT = 0x200, + LFS_TYPE_USERATTR = 0x300, + LFS_TYPE_FROM = 0x100, + LFS_TYPE_TAIL = 0x600, + LFS_TYPE_GLOBALS = 0x700, + LFS_TYPE_CRC = 0x500, + + // internally used type specializations + LFS_TYPE_CREATE = 0x401, + LFS_TYPE_DELETE = 0x4ff, + LFS_TYPE_SUPERBLOCK = 0x0ff, + LFS_TYPE_DIRSTRUCT = 0x200, + LFS_TYPE_CTZSTRUCT = 0x202, + LFS_TYPE_INLINESTRUCT = 0x201, + LFS_TYPE_SOFTTAIL = 0x600, + LFS_TYPE_HARDTAIL = 0x601, + LFS_TYPE_MOVESTATE = 0x7ff, + + // internal chip sources + LFS_FROM_NOOP = 0x000, + LFS_FROM_MOVE = 0x101, + LFS_FROM_USERATTRS = 0x102, +}; + +// File open flags +enum lfs_open_flags { + // open flags + LFS_O_RDONLY = 1, // Open a file as read only +#ifndef LFS_READONLY + LFS_O_WRONLY = 2, // Open a file as write only + LFS_O_RDWR = 3, // Open a file as read and write + LFS_O_CREAT = 0x0100, // Create a file if it does not exist + LFS_O_EXCL = 0x0200, // Fail if a file already exists + LFS_O_TRUNC = 0x0400, // Truncate the existing file to zero size + LFS_O_APPEND = 0x0800, // Move to end of file on every write +#endif + + // internally used flags +#ifndef LFS_READONLY + LFS_F_DIRTY = 0x010000, // File does not match storage + LFS_F_WRITING = 0x020000, // File has been written since last flush +#endif + LFS_F_READING = 0x040000, // File has been read since last flush +#ifndef LFS_READONLY + LFS_F_ERRED = 0x080000, // An error occurred during write +#endif + LFS_F_INLINE = 0x100000, // Currently inlined in directory entry +}; + +// File seek flags +enum lfs_whence_flags { + LFS_SEEK_SET = 0, // Seek relative to an absolute position + LFS_SEEK_CUR = 1, // Seek relative to the current file position + LFS_SEEK_END = 2, // Seek relative to the end of the file +}; + + +// Configuration provided during initialization of the littlefs +struct lfs_config { + // Opaque user provided context that can be used to pass + // information to the block device operations + void *context; + + // Read a region in a block. Negative error codes are propogated + // to the user. + int (*read)(const struct lfs_config *c, lfs_block_t block, + lfs_off_t off, void *buffer, lfs_size_t size); + + // Program a region in a block. The block must have previously + // been erased. Negative error codes are propogated to the user. + // May return LFS_ERR_CORRUPT if the block should be considered bad. + int (*prog)(const struct lfs_config *c, lfs_block_t block, + lfs_off_t off, const void *buffer, lfs_size_t size); + + // Erase a block. A block must be erased before being programmed. + // The state of an erased block is undefined. Negative error codes + // are propogated to the user. + // May return LFS_ERR_CORRUPT if the block should be considered bad. + int (*erase)(const struct lfs_config *c, lfs_block_t block); + + // Sync the state of the underlying block device. Negative error codes + // are propogated to the user. + int (*sync)(const struct lfs_config *c); + +#ifdef LFS_THREADSAFE + // Lock the underlying block device. Negative error codes + // are propogated to the user. + int (*lock)(const struct lfs_config *c); + + // Unlock the underlying block device. Negative error codes + // are propogated to the user. + int (*unlock)(const struct lfs_config *c); +#endif + + // Minimum size of a block read. All read operations will be a + // multiple of this value. + lfs_size_t read_size; + + // Minimum size of a block program. All program operations will be a + // multiple of this value. + lfs_size_t prog_size; + + // Size of an erasable block. This does not impact ram consumption and + // may be larger than the physical erase size. However, non-inlined files + // take up at minimum one block. Must be a multiple of the read + // and program sizes. + lfs_size_t block_size; + + // Number of erasable blocks on the device. + lfs_size_t block_count; + + // Number of erase cycles before littlefs evicts metadata logs and moves + // the metadata to another block. Suggested values are in the + // range 100-1000, with large values having better performance at the cost + // of less consistent wear distribution. + // + // Set to -1 to disable block-level wear-leveling. + int32_t block_cycles; + + // Size of block caches. Each cache buffers a portion of a block in RAM. + // The littlefs needs a read cache, a program cache, and one additional + // cache per file. Larger caches can improve performance by storing more + // data and reducing the number of disk accesses. Must be a multiple of + // the read and program sizes, and a factor of the block size. + lfs_size_t cache_size; + + // Size of the lookahead buffer in bytes. A larger lookahead buffer + // increases the number of blocks found during an allocation pass. The + // lookahead buffer is stored as a compact bitmap, so each byte of RAM + // can track 8 blocks. Must be a multiple of 8. + lfs_size_t lookahead_size; + + // Optional statically allocated read buffer. Must be cache_size. + // By default lfs_malloc is used to allocate this buffer. + void *read_buffer; + + // Optional statically allocated program buffer. Must be cache_size. + // By default lfs_malloc is used to allocate this buffer. + void *prog_buffer; + + // Optional statically allocated lookahead buffer. Must be lookahead_size + // and aligned to a 32-bit boundary. By default lfs_malloc is used to + // allocate this buffer. + void *lookahead_buffer; + + // Optional upper limit on length of file names in bytes. No downside for + // larger names except the size of the info struct which is controlled by + // the LFS_NAME_MAX define. Defaults to LFS_NAME_MAX when zero. Stored in + // superblock and must be respected by other littlefs drivers. + lfs_size_t name_max; + + // Optional upper limit on files in bytes. No downside for larger files + // but must be <= LFS_FILE_MAX. Defaults to LFS_FILE_MAX when zero. Stored + // in superblock and must be respected by other littlefs drivers. + lfs_size_t file_max; + + // Optional upper limit on custom attributes in bytes. No downside for + // larger attributes size but must be <= LFS_ATTR_MAX. Defaults to + // LFS_ATTR_MAX when zero. + lfs_size_t attr_max; + + // Optional upper limit on total space given to metadata pairs in bytes. On + // devices with large blocks (e.g. 128kB) setting this to a low size (2-8kB) + // can help bound the metadata compaction time. Must be <= block_size. + // Defaults to block_size when zero. + lfs_size_t metadata_max; +}; + +// File info structure +struct lfs_info { + // Type of the file, either LFS_TYPE_REG or LFS_TYPE_DIR + uint8_t type; + + // Size of the file, only valid for REG files. Limited to 32-bits. + lfs_size_t size; + + // Name of the file stored as a null-terminated string. Limited to + // LFS_NAME_MAX+1, which can be changed by redefining LFS_NAME_MAX to + // reduce RAM. LFS_NAME_MAX is stored in superblock and must be + // respected by other littlefs drivers. + char name[LFS_NAME_MAX+1]; +}; + +// Custom attribute structure, used to describe custom attributes +// committed atomically during file writes. +struct lfs_attr { + // 8-bit type of attribute, provided by user and used to + // identify the attribute + uint8_t type; + + // Pointer to buffer containing the attribute + void *buffer; + + // Size of attribute in bytes, limited to LFS_ATTR_MAX + lfs_size_t size; +}; + +// Optional configuration provided during lfs_file_opencfg +struct lfs_file_config { + // Optional statically allocated file buffer. Must be cache_size. + // By default lfs_malloc is used to allocate this buffer. + void *buffer; + + // Optional list of custom attributes related to the file. If the file + // is opened with read access, these attributes will be read from disk + // during the open call. If the file is opened with write access, the + // attributes will be written to disk every file sync or close. This + // write occurs atomically with update to the file's contents. + // + // Custom attributes are uniquely identified by an 8-bit type and limited + // to LFS_ATTR_MAX bytes. When read, if the stored attribute is smaller + // than the buffer, it will be padded with zeros. If the stored attribute + // is larger, then it will be silently truncated. If the attribute is not + // found, it will be created implicitly. + struct lfs_attr *attrs; + + // Number of custom attributes in the list + lfs_size_t attr_count; +}; + + +/// internal littlefs data structures /// +typedef struct lfs_cache { + lfs_block_t block; + lfs_off_t off; + lfs_size_t size; + uint8_t *buffer; +} lfs_cache_t; + +typedef struct lfs_mdir { + lfs_block_t pair[2]; + uint32_t rev; + lfs_off_t off; + uint32_t etag; + uint16_t count; + bool erased; + bool split; + lfs_block_t tail[2]; +} lfs_mdir_t; + +// littlefs directory type +typedef struct lfs_dir { + struct lfs_dir *next; + uint16_t id; + uint8_t type; + lfs_mdir_t m; + + lfs_off_t pos; + lfs_block_t head[2]; +} lfs_dir_t; + +// littlefs file type +typedef struct lfs_file { + struct lfs_file *next; + uint16_t id; + uint8_t type; + lfs_mdir_t m; + + struct lfs_ctz { + lfs_block_t head; + lfs_size_t size; + } ctz; + + uint32_t flags; + lfs_off_t pos; + lfs_block_t block; + lfs_off_t off; + lfs_cache_t cache; + + const struct lfs_file_config *cfg; +} lfs_file_t; + +typedef struct lfs_superblock { + uint32_t version; + lfs_size_t block_size; + lfs_size_t block_count; + lfs_size_t name_max; + lfs_size_t file_max; + lfs_size_t attr_max; +} lfs_superblock_t; + +typedef struct lfs_gstate { + uint32_t tag; + lfs_block_t pair[2]; +} lfs_gstate_t; + +// The littlefs filesystem type +typedef struct lfs { + lfs_cache_t rcache; + lfs_cache_t pcache; + + lfs_block_t root[2]; + struct lfs_mlist { + struct lfs_mlist *next; + uint16_t id; + uint8_t type; + lfs_mdir_t m; + } *mlist; + uint32_t seed; + + lfs_gstate_t gstate; + lfs_gstate_t gdisk; + lfs_gstate_t gdelta; + + struct lfs_free { + lfs_block_t off; + lfs_block_t size; + lfs_block_t i; + lfs_block_t ack; + uint32_t *buffer; + } free; + + const struct lfs_config *cfg; + lfs_size_t name_max; + lfs_size_t file_max; + lfs_size_t attr_max; + +#ifdef LFS_MIGRATE + struct lfs1 *lfs1; +#endif +} lfs_t; + + +/// Filesystem functions /// + +#ifndef LFS_READONLY +// Format a block device with the littlefs +// +// Requires a littlefs object and config struct. This clobbers the littlefs +// object, and does not leave the filesystem mounted. The config struct must +// be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_format(lfs_t *lfs, const struct lfs_config *config); +#endif + +// Mounts a littlefs +// +// Requires a littlefs object and config struct. Multiple filesystems +// may be mounted simultaneously with multiple littlefs objects. Both +// lfs and config must be allocated while mounted. The config struct must +// be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_mount(lfs_t *lfs, const struct lfs_config *config); + +// Unmounts a littlefs +// +// Does nothing besides releasing any allocated resources. +// Returns a negative error code on failure. +int lfs_unmount(lfs_t *lfs); + +/// General operations /// + +#ifndef LFS_READONLY +// Removes a file or directory +// +// If removing a directory, the directory must be empty. +// Returns a negative error code on failure. +int lfs_remove(lfs_t *lfs, const char *path); +#endif + +#ifndef LFS_READONLY +// Rename or move a file or directory +// +// If the destination exists, it must match the source in type. +// If the destination is a directory, the directory must be empty. +// +// Returns a negative error code on failure. +int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath); +#endif + +// Find info about a file or directory +// +// Fills out the info structure, based on the specified file or directory. +// Returns a negative error code on failure. +int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info); + +// Get a custom attribute +// +// Custom attributes are uniquely identified by an 8-bit type and limited +// to LFS_ATTR_MAX bytes. When read, if the stored attribute is smaller than +// the buffer, it will be padded with zeros. If the stored attribute is larger, +// then it will be silently truncated. If no attribute is found, the error +// LFS_ERR_NOATTR is returned and the buffer is filled with zeros. +// +// Returns the size of the attribute, or a negative error code on failure. +// Note, the returned size is the size of the attribute on disk, irrespective +// of the size of the buffer. This can be used to dynamically allocate a buffer +// or check for existance. +lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path, + uint8_t type, void *buffer, lfs_size_t size); + +#ifndef LFS_READONLY +// Set custom attributes +// +// Custom attributes are uniquely identified by an 8-bit type and limited +// to LFS_ATTR_MAX bytes. If an attribute is not found, it will be +// implicitly created. +// +// Returns a negative error code on failure. +int lfs_setattr(lfs_t *lfs, const char *path, + uint8_t type, const void *buffer, lfs_size_t size); +#endif + +#ifndef LFS_READONLY +// Removes a custom attribute +// +// If an attribute is not found, nothing happens. +// +// Returns a negative error code on failure. +int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type); +#endif + + +/// File operations /// + +// Open a file +// +// The mode that the file is opened in is determined by the flags, which +// are values from the enum lfs_open_flags that are bitwise-ored together. +// +// Returns a negative error code on failure. +int lfs_file_open(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags); + +// Open a file with extra configuration +// +// The mode that the file is opened in is determined by the flags, which +// are values from the enum lfs_open_flags that are bitwise-ored together. +// +// The config struct provides additional config options per file as described +// above. The config struct must be allocated while the file is open, and the +// config struct must be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file, + const char *path, int flags, + const struct lfs_file_config *config); + +// Close a file +// +// Any pending writes are written out to storage as though +// sync had been called and releases any allocated resources. +// +// Returns a negative error code on failure. +int lfs_file_close(lfs_t *lfs, lfs_file_t *file); + +// Synchronize a file on storage +// +// Any pending writes are written out to storage. +// Returns a negative error code on failure. +int lfs_file_sync(lfs_t *lfs, lfs_file_t *file); + +// Read data from file +// +// Takes a buffer and size indicating where to store the read data. +// Returns the number of bytes read, or a negative error code on failure. +lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file, + void *buffer, lfs_size_t size); + +#ifndef LFS_READONLY +// Write data to file +// +// Takes a buffer and size indicating the data to write. The file will not +// actually be updated on the storage until either sync or close is called. +// +// Returns the number of bytes written, or a negative error code on failure. +lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file, + const void *buffer, lfs_size_t size); +#endif + +// Change the position of the file +// +// The change in position is determined by the offset and whence flag. +// Returns the new position of the file, or a negative error code on failure. +lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, + lfs_soff_t off, int whence); + +#ifndef LFS_READONLY +// Truncates the size of the file to the specified size +// +// Returns a negative error code on failure. +int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size); +#endif + +// Return the position of the file +// +// Equivalent to lfs_file_seek(lfs, file, 0, LFS_SEEK_CUR) +// Returns the position of the file, or a negative error code on failure. +lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file); + +// Change the position of the file to the beginning of the file +// +// Equivalent to lfs_file_seek(lfs, file, 0, LFS_SEEK_SET) +// Returns a negative error code on failure. +int lfs_file_rewind(lfs_t *lfs, lfs_file_t *file); + +// Return the size of the file +// +// Similar to lfs_file_seek(lfs, file, 0, LFS_SEEK_END) +// Returns the size of the file, or a negative error code on failure. +lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file); + + +/// Directory operations /// + +#ifndef LFS_READONLY +// Create a directory +// +// Returns a negative error code on failure. +int lfs_mkdir(lfs_t *lfs, const char *path); +#endif + +// Open a directory +// +// Once open a directory can be used with read to iterate over files. +// Returns a negative error code on failure. +int lfs_dir_open(lfs_t *lfs, lfs_dir_t *dir, const char *path); + +// Close a directory +// +// Releases any allocated resources. +// Returns a negative error code on failure. +int lfs_dir_close(lfs_t *lfs, lfs_dir_t *dir); + +// Read an entry in the directory +// +// Fills out the info structure, based on the specified file or directory. +// Returns a positive value on success, 0 at the end of directory, +// or a negative error code on failure. +int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info); + +// Change the position of the directory +// +// The new off must be a value previous returned from tell and specifies +// an absolute offset in the directory seek. +// +// Returns a negative error code on failure. +int lfs_dir_seek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off); + +// Return the position of the directory +// +// The returned offset is only meant to be consumed by seek and may not make +// sense, but does indicate the current position in the directory iteration. +// +// Returns the position of the directory, or a negative error code on failure. +lfs_soff_t lfs_dir_tell(lfs_t *lfs, lfs_dir_t *dir); + +// Change the position of the directory to the beginning of the directory +// +// Returns a negative error code on failure. +int lfs_dir_rewind(lfs_t *lfs, lfs_dir_t *dir); + + +/// Filesystem-level filesystem operations + +// Finds the current size of the filesystem +// +// Note: Result is best effort. If files share COW structures, the returned +// size may be larger than the filesystem actually is. +// +// Returns the number of allocated blocks, or a negative error code on failure. +lfs_ssize_t lfs_fs_size(lfs_t *lfs); + +// Traverse through all blocks in use by the filesystem +// +// The provided callback will be called with each block address that is +// currently in use by the filesystem. This can be used to determine which +// blocks are in use or how much of the storage is available. +// +// Returns a negative error code on failure. +int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data); + +#ifndef LFS_READONLY +#ifdef LFS_MIGRATE +// Attempts to migrate a previous version of littlefs +// +// Behaves similarly to the lfs_format function. Attempts to mount +// the previous version of littlefs and update the filesystem so it can be +// mounted with the current version of littlefs. +// +// Requires a littlefs object and config struct. This clobbers the littlefs +// object, and does not leave the filesystem mounted. The config struct must +// be zeroed for defaults and backwards compatibility. +// +// Returns a negative error code on failure. +int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg); +#endif +#endif + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/ext/littlefs/lfs_util.c b/ext/littlefs/lfs_util.c new file mode 100644 index 0000000000..0b60e3b493 --- /dev/null +++ b/ext/littlefs/lfs_util.c @@ -0,0 +1,33 @@ +/* + * lfs util functions + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#include "lfs_util.h" + +// Only compile if user does not provide custom config +#ifndef LFS_CONFIG + + +// Software CRC implementation with small lookup table +uint32_t lfs_crc(uint32_t crc, const void *buffer, size_t size) { + static const uint32_t rtable[16] = { + 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, + 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, + 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c, + }; + + const uint8_t *data = buffer; + + for (size_t i = 0; i < size; i++) { + crc = (crc >> 4) ^ rtable[(crc ^ (data[i] >> 0)) & 0xf]; + crc = (crc >> 4) ^ rtable[(crc ^ (data[i] >> 4)) & 0xf]; + } + + return crc; +} + + +#endif diff --git a/ext/littlefs/lfs_util.h b/ext/littlefs/lfs_util.h new file mode 100644 index 0000000000..fc1b0c2ae8 --- /dev/null +++ b/ext/littlefs/lfs_util.h @@ -0,0 +1,244 @@ +/* + * lfs utility functions + * + * Copyright (c) 2017, Arm Limited. All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef LFS_UTIL_H +#define LFS_UTIL_H + +// Users can override lfs_util.h with their own configuration by defining +// LFS_CONFIG as a header file to include (-DLFS_CONFIG=lfs_config.h). +// +// If LFS_CONFIG is used, none of the default utils will be emitted and must be +// provided by the config file. To start, I would suggest copying lfs_util.h +// and modifying as needed. +#ifdef LFS_CONFIG +#define LFS_STRINGIZE(x) LFS_STRINGIZE2(x) +#define LFS_STRINGIZE2(x) #x +#include LFS_STRINGIZE(LFS_CONFIG) +#else + +// System includes +#include +#include +#include +#include + +#ifndef LFS_NO_MALLOC +#include +#endif +#ifndef LFS_NO_ASSERT +#include +#endif +#if !defined(LFS_NO_DEBUG) || \ + !defined(LFS_NO_WARN) || \ + !defined(LFS_NO_ERROR) || \ + defined(LFS_YES_TRACE) +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + + +// Macros, may be replaced by system specific wrappers. Arguments to these +// macros must not have side-effects as the macros can be removed for a smaller +// code footprint + +// Logging functions +#ifndef LFS_TRACE +#ifdef LFS_YES_TRACE +#define LFS_TRACE_(fmt, ...) \ + printf("%s:%d:trace: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_TRACE(...) LFS_TRACE_(__VA_ARGS__, "") +#else +#define LFS_TRACE(...) +#endif +#endif + +#ifndef LFS_DEBUG +#ifndef LFS_NO_DEBUG +#define LFS_DEBUG_(fmt, ...) \ + printf("%s:%d:debug: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_DEBUG(...) LFS_DEBUG_(__VA_ARGS__, "") +#else +#define LFS_DEBUG(...) +#endif +#endif + +#ifndef LFS_WARN +#ifndef LFS_NO_WARN +#define LFS_WARN_(fmt, ...) \ + printf("%s:%d:warn: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_WARN(...) LFS_WARN_(__VA_ARGS__, "") +#else +#define LFS_WARN(...) +#endif +#endif + +#ifndef LFS_ERROR +#ifndef LFS_NO_ERROR +#define LFS_ERROR_(fmt, ...) \ + printf("%s:%d:error: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) +#define LFS_ERROR(...) LFS_ERROR_(__VA_ARGS__, "") +#else +#define LFS_ERROR(...) +#endif +#endif + +// Runtime assertions +#ifndef LFS_ASSERT +#ifndef LFS_NO_ASSERT +#define LFS_ASSERT(test) assert(test) +#else +#define LFS_ASSERT(test) +#endif +#endif + + +// Builtin functions, these may be replaced by more efficient +// toolchain-specific implementations. LFS_NO_INTRINSICS falls back to a more +// expensive basic C implementation for debugging purposes + +// Min/max functions for unsigned 32-bit numbers +static inline uint32_t lfs_max(uint32_t a, uint32_t b) { + return (a > b) ? a : b; +} + +static inline uint32_t lfs_min(uint32_t a, uint32_t b) { + return (a < b) ? a : b; +} + +// Align to nearest multiple of a size +static inline uint32_t lfs_aligndown(uint32_t a, uint32_t alignment) { + return a - (a % alignment); +} + +static inline uint32_t lfs_alignup(uint32_t a, uint32_t alignment) { + return lfs_aligndown(a + alignment-1, alignment); +} + +// Find the smallest power of 2 greater than or equal to a +static inline uint32_t lfs_npw2(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) + return 32 - __builtin_clz(a-1); +#else + uint32_t r = 0; + uint32_t s; + a -= 1; + s = (a > 0xffff) << 4; a >>= s; r |= s; + s = (a > 0xff ) << 3; a >>= s; r |= s; + s = (a > 0xf ) << 2; a >>= s; r |= s; + s = (a > 0x3 ) << 1; a >>= s; r |= s; + return (r | (a >> 1)) + 1; +#endif +} + +// Count the number of trailing binary zeros in a +// lfs_ctz(0) may be undefined +static inline uint32_t lfs_ctz(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && defined(__GNUC__) + return __builtin_ctz(a); +#else + return lfs_npw2((a & -a) + 1) - 1; +#endif +} + +// Count the number of binary ones in a +static inline uint32_t lfs_popc(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) + return __builtin_popcount(a); +#else + a = a - ((a >> 1) & 0x55555555); + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); + return (((a + (a >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24; +#endif +} + +// Find the sequence comparison of a and b, this is the distance +// between a and b ignoring overflow +static inline int lfs_scmp(uint32_t a, uint32_t b) { + return (int)(unsigned)(a - b); +} + +// Convert between 32-bit little-endian and native order +static inline uint32_t lfs_fromle32(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_LITTLE_ENDIAN ) && BYTE_ORDER == ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_LITTLE_ENDIAN ) && __BYTE_ORDER == __ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) + return a; +#elif !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_BIG_ENDIAN ) && BYTE_ORDER == ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_BIG_ENDIAN ) && __BYTE_ORDER == __ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) + return __builtin_bswap32(a); +#else + return (((uint8_t*)&a)[0] << 0) | + (((uint8_t*)&a)[1] << 8) | + (((uint8_t*)&a)[2] << 16) | + (((uint8_t*)&a)[3] << 24); +#endif +} + +static inline uint32_t lfs_tole32(uint32_t a) { + return lfs_fromle32(a); +} + +// Convert between 32-bit big-endian and native order +static inline uint32_t lfs_frombe32(uint32_t a) { +#if !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_LITTLE_ENDIAN ) && BYTE_ORDER == ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_LITTLE_ENDIAN ) && __BYTE_ORDER == __ORDER_LITTLE_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) + return __builtin_bswap32(a); +#elif !defined(LFS_NO_INTRINSICS) && ( \ + (defined( BYTE_ORDER ) && defined( ORDER_BIG_ENDIAN ) && BYTE_ORDER == ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER ) && defined(__ORDER_BIG_ENDIAN ) && __BYTE_ORDER == __ORDER_BIG_ENDIAN ) || \ + (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) + return a; +#else + return (((uint8_t*)&a)[0] << 24) | + (((uint8_t*)&a)[1] << 16) | + (((uint8_t*)&a)[2] << 8) | + (((uint8_t*)&a)[3] << 0); +#endif +} + +static inline uint32_t lfs_tobe32(uint32_t a) { + return lfs_frombe32(a); +} + +// Calculate CRC-32 with polynomial = 0x04c11db7 +uint32_t lfs_crc(uint32_t crc, const void *buffer, size_t size); + +// Allocate memory, only used if buffers are not provided to littlefs +// Note, memory must be 64-bit aligned +static inline void *lfs_malloc(size_t size) { +#ifndef LFS_NO_MALLOC + return malloc(size); +#else + (void)size; + return NULL; +#endif +} + +// Deallocate memory, only used if buffers are not provided to littlefs +static inline void lfs_free(void *p) { +#ifndef LFS_NO_MALLOC + free(p); +#else + (void)p; +#endif +} + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif +#endif diff --git a/ext/littlefs/scripts/code.py b/ext/littlefs/scripts/code.py new file mode 100644 index 0000000000..08b33a101d --- /dev/null +++ b/ext/littlefs/scripts/code.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python3 +# +# Script to find code size at the function level. Basically just a bit wrapper +# around nm with some extra conveniences for comparing builds. Heavily inspired +# by Linux's Bloat-O-Meter. +# + +import os +import glob +import itertools as it +import subprocess as sp +import shlex +import re +import csv +import collections as co + + +OBJ_PATHS = ['*.o', 'bd/*.o'] + +def collect(paths, **args): + results = co.defaultdict(lambda: 0) + pattern = re.compile( + '^(?P[0-9a-fA-F]+)' + + ' (?P[%s])' % re.escape(args['type']) + + ' (?P.+?)$') + for path in paths: + # note nm-tool may contain extra args + cmd = args['nm_tool'] + ['--size-sort', path] + if args.get('verbose'): + print(' '.join(shlex.quote(c) for c in cmd)) + proc = sp.Popen(cmd, + stdout=sp.PIPE, + stderr=sp.PIPE if not args.get('verbose') else None, + universal_newlines=True) + for line in proc.stdout: + m = pattern.match(line) + if m: + results[(path, m.group('func'))] += int(m.group('size'), 16) + proc.wait() + if proc.returncode != 0: + if not args.get('verbose'): + for line in proc.stderr: + sys.stdout.write(line) + sys.exit(-1) + + flat_results = [] + for (file, func), size in results.items(): + # map to source files + if args.get('build_dir'): + file = re.sub('%s/*' % re.escape(args['build_dir']), '', file) + # discard internal functions + if func.startswith('__'): + continue + # discard .8449 suffixes created by optimizer + func = re.sub('\.[0-9]+', '', func) + flat_results.append((file, func, size)) + + return flat_results + +def main(**args): + # find sizes + if not args.get('use', None): + # find .o files + paths = [] + for path in args['obj_paths']: + if os.path.isdir(path): + path = path + '/*.o' + + for path in glob.glob(path): + paths.append(path) + + if not paths: + print('no .obj files found in %r?' % args['obj_paths']) + sys.exit(-1) + + results = collect(paths, **args) + else: + with open(args['use']) as f: + r = csv.DictReader(f) + results = [ + ( result['file'], + result['function'], + int(result['size'])) + for result in r] + + total = 0 + for _, _, size in results: + total += size + + # find previous results? + if args.get('diff'): + with open(args['diff']) as f: + r = csv.DictReader(f) + prev_results = [ + ( result['file'], + result['function'], + int(result['size'])) + for result in r] + + prev_total = 0 + for _, _, size in prev_results: + prev_total += size + + # write results to CSV + if args.get('output'): + with open(args['output'], 'w') as f: + w = csv.writer(f) + w.writerow(['file', 'function', 'size']) + for file, func, size in sorted(results): + w.writerow((file, func, size)) + + # print results + def dedup_entries(results, by='function'): + entries = co.defaultdict(lambda: 0) + for file, func, size in results: + entry = (file if by == 'file' else func) + entries[entry] += size + return entries + + def diff_entries(olds, news): + diff = co.defaultdict(lambda: (0, 0, 0, 0)) + for name, new in news.items(): + diff[name] = (0, new, new, 1.0) + for name, old in olds.items(): + _, new, _, _ = diff[name] + diff[name] = (old, new, new-old, (new-old)/old if old else 1.0) + return diff + + def print_header(by=''): + if not args.get('diff'): + print('%-36s %7s' % (by, 'size')) + else: + print('%-36s %7s %7s %7s' % (by, 'old', 'new', 'diff')) + + def print_entries(by='function'): + entries = dedup_entries(results, by=by) + + if not args.get('diff'): + print_header(by=by) + for name, size in sorted(entries.items()): + print("%-36s %7d" % (name, size)) + else: + prev_entries = dedup_entries(prev_results, by=by) + diff = diff_entries(prev_entries, entries) + print_header(by='%s (%d added, %d removed)' % (by, + sum(1 for old, _, _, _ in diff.values() if not old), + sum(1 for _, new, _, _ in diff.values() if not new))) + for name, (old, new, diff, ratio) in sorted(diff.items(), + key=lambda x: (-x[1][3], x)): + if ratio or args.get('all'): + print("%-36s %7s %7s %+7d%s" % (name, + old or "-", + new or "-", + diff, + ' (%+.1f%%)' % (100*ratio) if ratio else '')) + + def print_totals(): + if not args.get('diff'): + print("%-36s %7d" % ('TOTAL', total)) + else: + ratio = (total-prev_total)/prev_total if prev_total else 1.0 + print("%-36s %7s %7s %+7d%s" % ( + 'TOTAL', + prev_total if prev_total else '-', + total if total else '-', + total-prev_total, + ' (%+.1f%%)' % (100*ratio) if ratio else '')) + + if args.get('quiet'): + pass + elif args.get('summary'): + print_header() + print_totals() + elif args.get('files'): + print_entries(by='file') + print_totals() + else: + print_entries(by='function') + print_totals() + +if __name__ == "__main__": + import argparse + import sys + parser = argparse.ArgumentParser( + description="Find code size at the function level.") + parser.add_argument('obj_paths', nargs='*', default=OBJ_PATHS, + help="Description of where to find *.o files. May be a directory \ + or a list of paths. Defaults to %r." % OBJ_PATHS) + parser.add_argument('-v', '--verbose', action='store_true', + help="Output commands that run behind the scenes.") + parser.add_argument('-o', '--output', + help="Specify CSV file to store results.") + parser.add_argument('-u', '--use', + help="Don't compile and find code sizes, instead use this CSV file.") + parser.add_argument('-d', '--diff', + help="Specify CSV file to diff code size against.") + parser.add_argument('-a', '--all', action='store_true', + help="Show all functions, not just the ones that changed.") + parser.add_argument('--files', action='store_true', + help="Show file-level code sizes. Note this does not include padding! " + "So sizes may differ from other tools.") + parser.add_argument('-s', '--summary', action='store_true', + help="Only show the total code size.") + parser.add_argument('-q', '--quiet', action='store_true', + help="Don't show anything, useful with -o.") + parser.add_argument('--type', default='tTrRdDbB', + help="Type of symbols to report, this uses the same single-character " + "type-names emitted by nm. Defaults to %(default)r.") + parser.add_argument('--nm-tool', default=['nm'], type=lambda x: x.split(), + help="Path to the nm tool to use.") + parser.add_argument('--build-dir', + help="Specify the relative build directory. Used to map object files \ + to the correct source files.") + sys.exit(main(**vars(parser.parse_args()))) diff --git a/ext/littlefs/scripts/coverage.py b/ext/littlefs/scripts/coverage.py new file mode 100644 index 0000000000..6f1f54fa26 --- /dev/null +++ b/ext/littlefs/scripts/coverage.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python3 +# +# Parse and report coverage info from .info files generated by lcov +# +import os +import glob +import csv +import re +import collections as co +import bisect as b + + +INFO_PATHS = ['tests/*.toml.info'] + +def collect(paths, **args): + file = None + funcs = [] + lines = co.defaultdict(lambda: 0) + pattern = re.compile( + '^(?PSF:/?(?P.*))$' + '|^(?PFN:(?P[0-9]*),(?P.*))$' + '|^(?PDA:(?P[0-9]*),(?P[0-9]*))$') + for path in paths: + with open(path) as f: + for line in f: + m = pattern.match(line) + if m and m.group('file'): + file = m.group('file_name') + elif m and file and m.group('func'): + funcs.append((file, int(m.group('func_lineno')), + m.group('func_name'))) + elif m and file and m.group('line'): + lines[(file, int(m.group('line_lineno')))] += ( + int(m.group('line_hits'))) + + # map line numbers to functions + funcs.sort() + def func_from_lineno(file, lineno): + i = b.bisect(funcs, (file, lineno)) + if i and funcs[i-1][0] == file: + return funcs[i-1][2] + else: + return None + + # reduce to function info + reduced_funcs = co.defaultdict(lambda: (0, 0)) + for (file, line_lineno), line_hits in lines.items(): + func = func_from_lineno(file, line_lineno) + if not func: + continue + hits, count = reduced_funcs[(file, func)] + reduced_funcs[(file, func)] = (hits + (line_hits > 0), count + 1) + + results = [] + for (file, func), (hits, count) in reduced_funcs.items(): + # discard internal/testing functions (test_* injected with + # internal testing) + if func.startswith('__') or func.startswith('test_'): + continue + # discard .8449 suffixes created by optimizer + func = re.sub('\.[0-9]+', '', func) + results.append((file, func, hits, count)) + + return results + + +def main(**args): + # find coverage + if not args.get('use'): + # find *.info files + paths = [] + for path in args['info_paths']: + if os.path.isdir(path): + path = path + '/*.gcov' + + for path in glob.glob(path): + paths.append(path) + + if not paths: + print('no .info files found in %r?' % args['info_paths']) + sys.exit(-1) + + results = collect(paths, **args) + else: + with open(args['use']) as f: + r = csv.DictReader(f) + results = [ + ( result['file'], + result['function'], + int(result['hits']), + int(result['count'])) + for result in r] + + total_hits, total_count = 0, 0 + for _, _, hits, count in results: + total_hits += hits + total_count += count + + # find previous results? + if args.get('diff'): + with open(args['diff']) as f: + r = csv.DictReader(f) + prev_results = [ + ( result['file'], + result['function'], + int(result['hits']), + int(result['count'])) + for result in r] + + prev_total_hits, prev_total_count = 0, 0 + for _, _, hits, count in prev_results: + prev_total_hits += hits + prev_total_count += count + + # write results to CSV + if args.get('output'): + with open(args['output'], 'w') as f: + w = csv.writer(f) + w.writerow(['file', 'function', 'hits', 'count']) + for file, func, hits, count in sorted(results): + w.writerow((file, func, hits, count)) + + # print results + def dedup_entries(results, by='function'): + entries = co.defaultdict(lambda: (0, 0)) + for file, func, hits, count in results: + entry = (file if by == 'file' else func) + entry_hits, entry_count = entries[entry] + entries[entry] = (entry_hits + hits, entry_count + count) + return entries + + def diff_entries(olds, news): + diff = co.defaultdict(lambda: (0, 0, 0, 0, 0, 0, 0)) + for name, (new_hits, new_count) in news.items(): + diff[name] = ( + 0, 0, + new_hits, new_count, + new_hits, new_count, + (new_hits/new_count if new_count else 1.0) - 1.0) + for name, (old_hits, old_count) in olds.items(): + _, _, new_hits, new_count, _, _, _ = diff[name] + diff[name] = ( + old_hits, old_count, + new_hits, new_count, + new_hits-old_hits, new_count-old_count, + ((new_hits/new_count if new_count else 1.0) + - (old_hits/old_count if old_count else 1.0))) + return diff + + def print_header(by=''): + if not args.get('diff'): + print('%-36s %19s' % (by, 'hits/line')) + else: + print('%-36s %19s %19s %11s' % (by, 'old', 'new', 'diff')) + + def print_entries(by='function'): + entries = dedup_entries(results, by=by) + + if not args.get('diff'): + print_header(by=by) + for name, (hits, count) in sorted(entries.items()): + print("%-36s %11s %7s" % (name, + '%d/%d' % (hits, count) + if count else '-', + '%.1f%%' % (100*hits/count) + if count else '-')) + else: + prev_entries = dedup_entries(prev_results, by=by) + diff = diff_entries(prev_entries, entries) + print_header(by='%s (%d added, %d removed)' % (by, + sum(1 for _, old, _, _, _, _, _ in diff.values() if not old), + sum(1 for _, _, _, new, _, _, _ in diff.values() if not new))) + for name, ( + old_hits, old_count, + new_hits, new_count, + diff_hits, diff_count, ratio) in sorted(diff.items(), + key=lambda x: (-x[1][6], x)): + if ratio or args.get('all'): + print("%-36s %11s %7s %11s %7s %11s%s" % (name, + '%d/%d' % (old_hits, old_count) + if old_count else '-', + '%.1f%%' % (100*old_hits/old_count) + if old_count else '-', + '%d/%d' % (new_hits, new_count) + if new_count else '-', + '%.1f%%' % (100*new_hits/new_count) + if new_count else '-', + '%+d/%+d' % (diff_hits, diff_count), + ' (%+.1f%%)' % (100*ratio) if ratio else '')) + + def print_totals(): + if not args.get('diff'): + print("%-36s %11s %7s" % ('TOTAL', + '%d/%d' % (total_hits, total_count) + if total_count else '-', + '%.1f%%' % (100*total_hits/total_count) + if total_count else '-')) + else: + ratio = ((total_hits/total_count + if total_count else 1.0) + - (prev_total_hits/prev_total_count + if prev_total_count else 1.0)) + print("%-36s %11s %7s %11s %7s %11s%s" % ('TOTAL', + '%d/%d' % (prev_total_hits, prev_total_count) + if prev_total_count else '-', + '%.1f%%' % (100*prev_total_hits/prev_total_count) + if prev_total_count else '-', + '%d/%d' % (total_hits, total_count) + if total_count else '-', + '%.1f%%' % (100*total_hits/total_count) + if total_count else '-', + '%+d/%+d' % (total_hits-prev_total_hits, + total_count-prev_total_count), + ' (%+.1f%%)' % (100*ratio) if ratio else '')) + + if args.get('quiet'): + pass + elif args.get('summary'): + print_header() + print_totals() + elif args.get('files'): + print_entries(by='file') + print_totals() + else: + print_entries(by='function') + print_totals() + +if __name__ == "__main__": + import argparse + import sys + parser = argparse.ArgumentParser( + description="Parse and report coverage info from .info files \ + generated by lcov") + parser.add_argument('info_paths', nargs='*', default=INFO_PATHS, + help="Description of where to find *.info files. May be a directory \ + or list of paths. *.info files will be merged to show the total \ + coverage. Defaults to %r." % INFO_PATHS) + parser.add_argument('-v', '--verbose', action='store_true', + help="Output commands that run behind the scenes.") + parser.add_argument('-o', '--output', + help="Specify CSV file to store results.") + parser.add_argument('-u', '--use', + help="Don't do any work, instead use this CSV file.") + parser.add_argument('-d', '--diff', + help="Specify CSV file to diff code size against.") + parser.add_argument('-a', '--all', action='store_true', + help="Show all functions, not just the ones that changed.") + parser.add_argument('--files', action='store_true', + help="Show file-level coverage.") + parser.add_argument('-s', '--summary', action='store_true', + help="Only show the total coverage.") + parser.add_argument('-q', '--quiet', action='store_true', + help="Don't show anything, useful with -o.") + sys.exit(main(**vars(parser.parse_args()))) diff --git a/ext/littlefs/scripts/explode_asserts.py b/ext/littlefs/scripts/explode_asserts.py new file mode 100644 index 0000000000..8a8e5b1c0f --- /dev/null +++ b/ext/littlefs/scripts/explode_asserts.py @@ -0,0 +1,383 @@ +#!/usr/bin/env python3 + +import re +import sys + +PATTERN = ['LFS_ASSERT', 'assert'] +PREFIX = 'LFS' +MAXWIDTH = 16 + +ASSERT = "__{PREFIX}_ASSERT_{TYPE}_{COMP}" +FAIL = """ +__attribute__((unused)) +static void __{prefix}_assert_fail_{type}( + const char *file, int line, const char *comp, + {ctype} lh, size_t lsize, + {ctype} rh, size_t rsize) {{ + printf("%s:%d:assert: assert failed with ", file, line); + __{prefix}_assert_print_{type}(lh, lsize); + printf(", expected %s ", comp); + __{prefix}_assert_print_{type}(rh, rsize); + printf("\\n"); + fflush(NULL); + raise(SIGABRT); +}} +""" + +COMP = { + '==': 'eq', + '!=': 'ne', + '<=': 'le', + '>=': 'ge', + '<': 'lt', + '>': 'gt', +} + +TYPE = { + 'int': { + 'ctype': 'intmax_t', + 'fail': FAIL, + 'print': """ + __attribute__((unused)) + static void __{prefix}_assert_print_{type}({ctype} v, size_t size) {{ + (void)size; + printf("%"PRIiMAX, v); + }} + """, + 'assert': """ + #define __{PREFIX}_ASSERT_{TYPE}_{COMP}(file, line, lh, rh) + do {{ + __typeof__(lh) _lh = lh; + __typeof__(lh) _rh = (__typeof__(lh))rh; + if (!(_lh {op} _rh)) {{ + __{prefix}_assert_fail_{type}(file, line, "{comp}", + (intmax_t)_lh, 0, (intmax_t)_rh, 0); + }} + }} while (0) + """ + }, + 'bool': { + 'ctype': 'bool', + 'fail': FAIL, + 'print': """ + __attribute__((unused)) + static void __{prefix}_assert_print_{type}({ctype} v, size_t size) {{ + (void)size; + printf("%s", v ? "true" : "false"); + }} + """, + 'assert': """ + #define __{PREFIX}_ASSERT_{TYPE}_{COMP}(file, line, lh, rh) + do {{ + bool _lh = !!(lh); + bool _rh = !!(rh); + if (!(_lh {op} _rh)) {{ + __{prefix}_assert_fail_{type}(file, line, "{comp}", + _lh, 0, _rh, 0); + }} + }} while (0) + """ + }, + 'mem': { + 'ctype': 'const void *', + 'fail': FAIL, + 'print': """ + __attribute__((unused)) + static void __{prefix}_assert_print_{type}({ctype} v, size_t size) {{ + const uint8_t *s = v; + printf("\\\""); + for (size_t i = 0; i < size && i < {maxwidth}; i++) {{ + if (s[i] >= ' ' && s[i] <= '~') {{ + printf("%c", s[i]); + }} else {{ + printf("\\\\x%02x", s[i]); + }} + }} + if (size > {maxwidth}) {{ + printf("..."); + }} + printf("\\\""); + }} + """, + 'assert': """ + #define __{PREFIX}_ASSERT_{TYPE}_{COMP}(file, line, lh, rh, size) + do {{ + const void *_lh = lh; + const void *_rh = rh; + if (!(memcmp(_lh, _rh, size) {op} 0)) {{ + __{prefix}_assert_fail_{type}(file, line, "{comp}", + _lh, size, _rh, size); + }} + }} while (0) + """ + }, + 'str': { + 'ctype': 'const char *', + 'fail': FAIL, + 'print': """ + __attribute__((unused)) + static void __{prefix}_assert_print_{type}({ctype} v, size_t size) {{ + __{prefix}_assert_print_mem(v, size); + }} + """, + 'assert': """ + #define __{PREFIX}_ASSERT_{TYPE}_{COMP}(file, line, lh, rh) + do {{ + const char *_lh = lh; + const char *_rh = rh; + if (!(strcmp(_lh, _rh) {op} 0)) {{ + __{prefix}_assert_fail_{type}(file, line, "{comp}", + _lh, strlen(_lh), _rh, strlen(_rh)); + }} + }} while (0) + """ + } +} + +def mkdecls(outf, maxwidth=16): + outf.write("#include \n") + outf.write("#include \n") + outf.write("#include \n") + outf.write("#include \n") + outf.write("#include \n") + + for type, desc in sorted(TYPE.items()): + format = { + 'type': type.lower(), 'TYPE': type.upper(), + 'ctype': desc['ctype'], + 'prefix': PREFIX.lower(), 'PREFIX': PREFIX.upper(), + 'maxwidth': maxwidth, + } + outf.write(re.sub('\s+', ' ', + desc['print'].strip().format(**format))+'\n') + outf.write(re.sub('\s+', ' ', + desc['fail'].strip().format(**format))+'\n') + + for op, comp in sorted(COMP.items()): + format.update({ + 'comp': comp.lower(), 'COMP': comp.upper(), + 'op': op, + }) + outf.write(re.sub('\s+', ' ', + desc['assert'].strip().format(**format))+'\n') + +def mkassert(type, comp, lh, rh, size=None): + format = { + 'type': type.lower(), 'TYPE': type.upper(), + 'comp': comp.lower(), 'COMP': comp.upper(), + 'prefix': PREFIX.lower(), 'PREFIX': PREFIX.upper(), + 'lh': lh.strip(' '), + 'rh': rh.strip(' '), + 'size': size, + } + if size: + return ((ASSERT + '(__FILE__, __LINE__, {lh}, {rh}, {size})') + .format(**format)) + else: + return ((ASSERT + '(__FILE__, __LINE__, {lh}, {rh})') + .format(**format)) + + +# simple recursive descent parser +LEX = { + 'ws': [r'(?:\s|\n|#.*?\n|//.*?\n|/\*.*?\*/)+'], + 'assert': PATTERN, + 'string': [r'"(?:\\.|[^"])*"', r"'(?:\\.|[^'])\'"], + 'arrow': ['=>'], + 'paren': ['\(', '\)'], + 'op': ['strcmp', 'memcmp', '->'], + 'comp': ['==', '!=', '<=', '>=', '<', '>'], + 'logic': ['\&\&', '\|\|'], + 'sep': [':', ';', '\{', '\}', ','], +} + +class ParseFailure(Exception): + def __init__(self, expected, found): + self.expected = expected + self.found = found + + def __str__(self): + return "expected %r, found %s..." % ( + self.expected, repr(self.found)[:70]) + +class Parse: + def __init__(self, inf, lexemes): + p = '|'.join('(?P<%s>%s)' % (n, '|'.join(l)) + for n, l in lexemes.items()) + p = re.compile(p, re.DOTALL) + data = inf.read() + tokens = [] + while True: + m = p.search(data) + if m: + if m.start() > 0: + tokens.append((None, data[:m.start()])) + tokens.append((m.lastgroup, m.group())) + data = data[m.end():] + else: + tokens.append((None, data)) + break + self.tokens = tokens + self.off = 0 + + def lookahead(self, *pattern): + if self.off < len(self.tokens): + token = self.tokens[self.off] + if token[0] in pattern or token[1] in pattern: + self.m = token[1] + return self.m + self.m = None + return self.m + + def accept(self, *patterns): + m = self.lookahead(*patterns) + if m is not None: + self.off += 1 + return m + + def expect(self, *patterns): + m = self.accept(*patterns) + if not m: + raise ParseFailure(patterns, self.tokens[self.off:]) + return m + + def push(self): + return self.off + + def pop(self, state): + self.off = state + +def passert(p): + def pastr(p): + p.expect('assert') ; p.accept('ws') ; p.expect('(') ; p.accept('ws') + p.expect('strcmp') ; p.accept('ws') ; p.expect('(') ; p.accept('ws') + lh = pexpr(p) ; p.accept('ws') + p.expect(',') ; p.accept('ws') + rh = pexpr(p) ; p.accept('ws') + p.expect(')') ; p.accept('ws') + comp = p.expect('comp') ; p.accept('ws') + p.expect('0') ; p.accept('ws') + p.expect(')') + return mkassert('str', COMP[comp], lh, rh) + + def pamem(p): + p.expect('assert') ; p.accept('ws') ; p.expect('(') ; p.accept('ws') + p.expect('memcmp') ; p.accept('ws') ; p.expect('(') ; p.accept('ws') + lh = pexpr(p) ; p.accept('ws') + p.expect(',') ; p.accept('ws') + rh = pexpr(p) ; p.accept('ws') + p.expect(',') ; p.accept('ws') + size = pexpr(p) ; p.accept('ws') + p.expect(')') ; p.accept('ws') + comp = p.expect('comp') ; p.accept('ws') + p.expect('0') ; p.accept('ws') + p.expect(')') + return mkassert('mem', COMP[comp], lh, rh, size) + + def paint(p): + p.expect('assert') ; p.accept('ws') ; p.expect('(') ; p.accept('ws') + lh = pexpr(p) ; p.accept('ws') + comp = p.expect('comp') ; p.accept('ws') + rh = pexpr(p) ; p.accept('ws') + p.expect(')') + return mkassert('int', COMP[comp], lh, rh) + + def pabool(p): + p.expect('assert') ; p.accept('ws') ; p.expect('(') ; p.accept('ws') + lh = pexprs(p) ; p.accept('ws') + p.expect(')') + return mkassert('bool', 'eq', lh, 'true') + + def pa(p): + return p.expect('assert') + + state = p.push() + lastf = None + for pa in [pastr, pamem, paint, pabool, pa]: + try: + return pa(p) + except ParseFailure as f: + p.pop(state) + lastf = f + else: + raise lastf + +def pexpr(p): + res = [] + while True: + if p.accept('('): + res.append(p.m) + while True: + res.append(pexprs(p)) + if p.accept('sep'): + res.append(p.m) + else: + break + res.append(p.expect(')')) + elif p.lookahead('assert'): + res.append(passert(p)) + elif p.accept('assert', 'ws', 'string', 'op', None): + res.append(p.m) + else: + return ''.join(res) + +def pexprs(p): + res = [] + while True: + res.append(pexpr(p)) + if p.accept('comp', 'logic', ','): + res.append(p.m) + else: + return ''.join(res) + +def pstmt(p): + ws = p.accept('ws') or '' + lh = pexprs(p) + if p.accept('=>'): + rh = pexprs(p) + return ws + mkassert('int', 'eq', lh, rh) + else: + return ws + lh + + +def main(args): + inf = open(args.input, 'r') if args.input else sys.stdin + outf = open(args.output, 'w') if args.output else sys.stdout + + lexemes = LEX.copy() + if args.pattern: + lexemes['assert'] = args.pattern + p = Parse(inf, lexemes) + + # write extra verbose asserts + mkdecls(outf, maxwidth=args.maxwidth) + if args.input: + outf.write("#line %d \"%s\"\n" % (1, args.input)) + + # parse and write out stmt at a time + try: + while True: + outf.write(pstmt(p)) + if p.accept('sep'): + outf.write(p.m) + else: + break + except ParseFailure as f: + pass + + for i in range(p.off, len(p.tokens)): + outf.write(p.tokens[i][1]) + +if __name__ == "__main__": + import argparse + parser = argparse.ArgumentParser( + description="Cpp step that increases assert verbosity") + parser.add_argument('input', nargs='?', + help="Input C file after cpp.") + parser.add_argument('-o', '--output', required=True, + help="Output C file.") + parser.add_argument('-p', '--pattern', action='append', + help="Patterns to search for starting an assert statement.") + parser.add_argument('--maxwidth', default=MAXWIDTH, type=int, + help="Maximum number of characters to display for strcmp and memcmp.") + main(parser.parse_args()) diff --git a/ext/littlefs/scripts/prefix.py b/ext/littlefs/scripts/prefix.py new file mode 100644 index 0000000000..4c33ad4855 --- /dev/null +++ b/ext/littlefs/scripts/prefix.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python2 + +# This script replaces prefixes of files, and symbols in that file. +# Useful for creating different versions of the codebase that don't +# conflict at compile time. +# +# example: +# $ ./scripts/prefix.py lfs2 + +import os +import os.path +import re +import glob +import itertools +import tempfile +import shutil +import subprocess + +DEFAULT_PREFIX = "lfs" + +def subn(from_prefix, to_prefix, name): + name, count1 = re.subn('\\b'+from_prefix, to_prefix, name) + name, count2 = re.subn('\\b'+from_prefix.upper(), to_prefix.upper(), name) + name, count3 = re.subn('\\B-D'+from_prefix.upper(), + '-D'+to_prefix.upper(), name) + return name, count1+count2+count3 + +def main(from_prefix, to_prefix=None, files=None): + if not to_prefix: + from_prefix, to_prefix = DEFAULT_PREFIX, from_prefix + + if not files: + files = subprocess.check_output([ + 'git', 'ls-tree', '-r', '--name-only', 'HEAD']).split() + + for oldname in files: + # Rename any matching file names + newname, namecount = subn(from_prefix, to_prefix, oldname) + if namecount: + subprocess.check_call(['git', 'mv', oldname, newname]) + + # Rename any prefixes in file + count = 0 + with open(newname+'~', 'w') as tempf: + with open(newname) as newf: + for line in newf: + line, n = subn(from_prefix, to_prefix, line) + count += n + tempf.write(line) + shutil.copystat(newname, newname+'~') + os.rename(newname+'~', newname) + subprocess.check_call(['git', 'add', newname]) + + # Summary + print '%s: %d replacements' % ( + '%s -> %s' % (oldname, newname) if namecount else oldname, + count) + +if __name__ == "__main__": + import sys + sys.exit(main(*sys.argv[1:])) diff --git a/ext/littlefs/scripts/readblock.py b/ext/littlefs/scripts/readblock.py new file mode 100644 index 0000000000..817517bc46 --- /dev/null +++ b/ext/littlefs/scripts/readblock.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +import subprocess as sp + +def main(args): + with open(args.disk, 'rb') as f: + f.seek(args.block * args.block_size) + block = (f.read(args.block_size) + .ljust(args.block_size, b'\xff')) + + # what did you expect? + print("%-8s %-s" % ('off', 'data')) + return sp.run(['xxd', '-g1', '-'], input=block).returncode + +if __name__ == "__main__": + import argparse + import sys + parser = argparse.ArgumentParser( + description="Hex dump a specific block in a disk.") + parser.add_argument('disk', + help="File representing the block device.") + parser.add_argument('block_size', type=lambda x: int(x, 0), + help="Size of a block in bytes.") + parser.add_argument('block', type=lambda x: int(x, 0), + help="Address of block to dump.") + sys.exit(main(parser.parse_args())) diff --git a/ext/littlefs/scripts/readmdir.py b/ext/littlefs/scripts/readmdir.py new file mode 100644 index 0000000000..b6c3dcca1f --- /dev/null +++ b/ext/littlefs/scripts/readmdir.py @@ -0,0 +1,367 @@ +#!/usr/bin/env python3 + +import struct +import binascii +import sys +import itertools as it + +TAG_TYPES = { + 'splice': (0x700, 0x400), + 'create': (0x7ff, 0x401), + 'delete': (0x7ff, 0x4ff), + 'name': (0x700, 0x000), + 'reg': (0x7ff, 0x001), + 'dir': (0x7ff, 0x002), + 'superblock': (0x7ff, 0x0ff), + 'struct': (0x700, 0x200), + 'dirstruct': (0x7ff, 0x200), + 'ctzstruct': (0x7ff, 0x202), + 'inlinestruct': (0x7ff, 0x201), + 'userattr': (0x700, 0x300), + 'tail': (0x700, 0x600), + 'softtail': (0x7ff, 0x600), + 'hardtail': (0x7ff, 0x601), + 'gstate': (0x700, 0x700), + 'movestate': (0x7ff, 0x7ff), + 'crc': (0x700, 0x500), +} + +class Tag: + def __init__(self, *args): + if len(args) == 1: + self.tag = args[0] + elif len(args) == 3: + if isinstance(args[0], str): + type = TAG_TYPES[args[0]][1] + else: + type = args[0] + + if isinstance(args[1], str): + id = int(args[1], 0) if args[1] not in 'x.' else 0x3ff + else: + id = args[1] + + if isinstance(args[2], str): + size = int(args[2], str) if args[2] not in 'x.' else 0x3ff + else: + size = args[2] + + self.tag = (type << 20) | (id << 10) | size + else: + assert False + + @property + def isvalid(self): + return not bool(self.tag & 0x80000000) + + @property + def isattr(self): + return not bool(self.tag & 0x40000000) + + @property + def iscompactable(self): + return bool(self.tag & 0x20000000) + + @property + def isunique(self): + return not bool(self.tag & 0x10000000) + + @property + def type(self): + return (self.tag & 0x7ff00000) >> 20 + + @property + def type1(self): + return (self.tag & 0x70000000) >> 20 + + @property + def type3(self): + return (self.tag & 0x7ff00000) >> 20 + + @property + def id(self): + return (self.tag & 0x000ffc00) >> 10 + + @property + def size(self): + return (self.tag & 0x000003ff) >> 0 + + @property + def dsize(self): + return 4 + (self.size if self.size != 0x3ff else 0) + + @property + def chunk(self): + return self.type & 0xff + + @property + def schunk(self): + return struct.unpack('b', struct.pack('B', self.chunk))[0] + + def is_(self, type): + return (self.type & TAG_TYPES[type][0]) == TAG_TYPES[type][1] + + def mkmask(self): + return Tag( + 0x700 if self.isunique else 0x7ff, + 0x3ff if self.isattr else 0, + 0) + + def chid(self, nid): + ntag = Tag(self.type, nid, self.size) + if hasattr(self, 'off'): ntag.off = self.off + if hasattr(self, 'data'): ntag.data = self.data + if hasattr(self, 'crc'): ntag.crc = self.crc + return ntag + + def typerepr(self): + if self.is_('crc') and getattr(self, 'crc', 0xffffffff) != 0xffffffff: + return 'crc (bad)' + + reverse_types = {v: k for k, v in TAG_TYPES.items()} + for prefix in range(12): + mask = 0x7ff & ~((1 << prefix)-1) + if (mask, self.type & mask) in reverse_types: + type = reverse_types[mask, self.type & mask] + if prefix > 0: + return '%s %#0*x' % ( + type, prefix//4, self.type & ((1 << prefix)-1)) + else: + return type + else: + return '%02x' % self.type + + def idrepr(self): + return repr(self.id) if self.id != 0x3ff else '.' + + def sizerepr(self): + return repr(self.size) if self.size != 0x3ff else 'x' + + def __repr__(self): + return 'Tag(%r, %d, %d)' % (self.typerepr(), self.id, self.size) + + def __lt__(self, other): + return (self.id, self.type) < (other.id, other.type) + + def __bool__(self): + return self.isvalid + + def __int__(self): + return self.tag + + def __index__(self): + return self.tag + +class MetadataPair: + def __init__(self, blocks): + if len(blocks) > 1: + self.pair = [MetadataPair([block]) for block in blocks] + self.pair = sorted(self.pair, reverse=True) + + self.data = self.pair[0].data + self.rev = self.pair[0].rev + self.tags = self.pair[0].tags + self.ids = self.pair[0].ids + self.log = self.pair[0].log + self.all_ = self.pair[0].all_ + return + + self.pair = [self] + self.data = blocks[0] + block = self.data + + self.rev, = struct.unpack('= 4: + ntag, = struct.unpack('>I', block[off:off+4]) + + tag = Tag(int(tag) ^ ntag) + tag.off = off + 4 + tag.data = block[off+4:off+tag.dsize] + if tag.is_('crc'): + crc = binascii.crc32(block[off:off+4+4], crc) + else: + crc = binascii.crc32(block[off:off+tag.dsize], crc) + tag.crc = crc + off += tag.dsize + + self.all_.append(tag) + + if tag.is_('crc'): + # is valid commit? + if crc != 0xffffffff: + corrupt = True + if not corrupt: + self.log = self.all_.copy() + + # reset tag parsing + crc = 0 + tag = Tag(int(tag) ^ ((tag.type & 1) << 31)) + + # find active ids + self.ids = list(it.takewhile( + lambda id: Tag('name', id, 0) in self, + it.count())) + + # find most recent tags + self.tags = [] + for tag in self.log: + if tag.is_('crc') or tag.is_('splice'): + continue + elif tag.id == 0x3ff: + if tag in self and self[tag] is tag: + self.tags.append(tag) + else: + # id could have change, I know this is messy and slow + # but it works + for id in self.ids: + ntag = tag.chid(id) + if ntag in self and self[ntag] is tag: + self.tags.append(ntag) + + self.tags = sorted(self.tags) + + def __bool__(self): + return bool(self.log) + + def __lt__(self, other): + # corrupt blocks don't count + if not self or not other: + return bool(other) + + # use sequence arithmetic to avoid overflow + return not ((other.rev - self.rev) & 0x80000000) + + def __contains__(self, args): + try: + self[args] + return True + except KeyError: + return False + + def __getitem__(self, args): + if isinstance(args, tuple): + gmask, gtag = args + else: + gmask, gtag = args.mkmask(), args + + gdiff = 0 + for tag in reversed(self.log): + if (gmask.id != 0 and tag.is_('splice') and + tag.id <= gtag.id - gdiff): + if tag.is_('create') and tag.id == gtag.id - gdiff: + # creation point + break + + gdiff += tag.schunk + + if ((int(gmask) & int(tag)) == + (int(gmask) & int(gtag.chid(gtag.id - gdiff)))): + if tag.size == 0x3ff: + # deleted + break + + return tag + + raise KeyError(gmask, gtag) + + def _dump_tags(self, tags, f=sys.stdout, truncate=True): + f.write("%-8s %-8s %-13s %4s %4s" % ( + 'off', 'tag', 'type', 'id', 'len')) + if truncate: + f.write(' data (truncated)') + f.write('\n') + + for tag in tags: + f.write("%08x: %08x %-13s %4s %4s" % ( + tag.off, tag, + tag.typerepr(), tag.idrepr(), tag.sizerepr())) + if truncate: + f.write(" %-23s %-8s\n" % ( + ' '.join('%02x' % c for c in tag.data[:8]), + ''.join(c if c >= ' ' and c <= '~' else '.' + for c in map(chr, tag.data[:8])))) + else: + f.write("\n") + for i in range(0, len(tag.data), 16): + f.write(" %08x: %-47s %-16s\n" % ( + tag.off+i, + ' '.join('%02x' % c for c in tag.data[i:i+16]), + ''.join(c if c >= ' ' and c <= '~' else '.' + for c in map(chr, tag.data[i:i+16])))) + + def dump_tags(self, f=sys.stdout, truncate=True): + self._dump_tags(self.tags, f=f, truncate=truncate) + + def dump_log(self, f=sys.stdout, truncate=True): + self._dump_tags(self.log, f=f, truncate=truncate) + + def dump_all(self, f=sys.stdout, truncate=True): + self._dump_tags(self.all_, f=f, truncate=truncate) + +def main(args): + blocks = [] + with open(args.disk, 'rb') as f: + for block in [args.block1, args.block2]: + if block is None: + continue + f.seek(block * args.block_size) + blocks.append(f.read(args.block_size) + .ljust(args.block_size, b'\xff')) + + # find most recent pair + mdir = MetadataPair(blocks) + + try: + mdir.tail = mdir[Tag('tail', 0, 0)] + if mdir.tail.size != 8 or mdir.tail.data == 8*b'\xff': + mdir.tail = None + except KeyError: + mdir.tail = None + + print("mdir {%s} rev %d%s%s%s" % ( + ', '.join('%#x' % b + for b in [args.block1, args.block2] + if b is not None), + mdir.rev, + ' (was %s)' % ', '.join('%d' % m.rev for m in mdir.pair[1:]) + if len(mdir.pair) > 1 else '', + ' (corrupted!)' if not mdir else '', + ' -> {%#x, %#x}' % struct.unpack('=%d" % max(tag.size, 1)) + if tag.type: + print(" move dir {%#x, %#x} id %d" % ( + blocks[0], blocks[1], tag.id)) + + # print mdir info + for i, dir in enumerate(dirs): + print("dir %s" % (json.dumps(dir[0].path) + if hasattr(dir[0], 'path') else '(orphan)')) + + for j, mdir in enumerate(dir): + print("mdir {%#x, %#x} rev %d (was %d)%s%s" % ( + mdir.blocks[0], mdir.blocks[1], mdir.rev, mdir.pair[1].rev, + ' (corrupted!)' if not mdir else '', + ' -> {%#x, %#x}' % struct.unpack(' +extern const char *lfs_testbd_path; +extern uint32_t lfs_testbd_cycles; +""" +DEFINES = { + 'LFS_READ_SIZE': 16, + 'LFS_PROG_SIZE': 'LFS_READ_SIZE', + 'LFS_BLOCK_SIZE': 512, + 'LFS_BLOCK_COUNT': 1024, + 'LFS_BLOCK_CYCLES': -1, + 'LFS_CACHE_SIZE': '(64 % LFS_PROG_SIZE == 0 ? 64 : LFS_PROG_SIZE)', + 'LFS_LOOKAHEAD_SIZE': 16, + 'LFS_ERASE_VALUE': 0xff, + 'LFS_ERASE_CYCLES': 0, + 'LFS_BADBLOCK_BEHAVIOR': 'LFS_TESTBD_BADBLOCK_PROGERROR', +} +PROLOGUE = """ + // prologue + __attribute__((unused)) lfs_t lfs; + __attribute__((unused)) lfs_testbd_t bd; + __attribute__((unused)) lfs_file_t file; + __attribute__((unused)) lfs_dir_t dir; + __attribute__((unused)) struct lfs_info info; + __attribute__((unused)) char path[1024]; + __attribute__((unused)) uint8_t buffer[1024]; + __attribute__((unused)) lfs_size_t size; + __attribute__((unused)) int err; + + __attribute__((unused)) const struct lfs_config cfg = { + .context = &bd, + .read = lfs_testbd_read, + .prog = lfs_testbd_prog, + .erase = lfs_testbd_erase, + .sync = lfs_testbd_sync, + .read_size = LFS_READ_SIZE, + .prog_size = LFS_PROG_SIZE, + .block_size = LFS_BLOCK_SIZE, + .block_count = LFS_BLOCK_COUNT, + .block_cycles = LFS_BLOCK_CYCLES, + .cache_size = LFS_CACHE_SIZE, + .lookahead_size = LFS_LOOKAHEAD_SIZE, + }; + + __attribute__((unused)) const struct lfs_testbd_config bdcfg = { + .erase_value = LFS_ERASE_VALUE, + .erase_cycles = LFS_ERASE_CYCLES, + .badblock_behavior = LFS_BADBLOCK_BEHAVIOR, + .power_cycles = lfs_testbd_cycles, + }; + + lfs_testbd_createcfg(&cfg, lfs_testbd_path, &bdcfg) => 0; +""" +EPILOGUE = """ + // epilogue + lfs_testbd_destroy(&cfg) => 0; +""" +PASS = '\033[32m✓\033[0m' +FAIL = '\033[31m✗\033[0m' + +class TestFailure(Exception): + def __init__(self, case, returncode=None, stdout=None, assert_=None): + self.case = case + self.returncode = returncode + self.stdout = stdout + self.assert_ = assert_ + +class TestCase: + def __init__(self, config, filter=filter, + suite=None, caseno=None, lineno=None, **_): + self.config = config + self.filter = filter + self.suite = suite + self.caseno = caseno + self.lineno = lineno + + self.code = config['code'] + self.code_lineno = config['code_lineno'] + self.defines = config.get('define', {}) + self.if_ = config.get('if', None) + self.in_ = config.get('in', None) + + self.result = None + + def __str__(self): + if hasattr(self, 'permno'): + if any(k not in self.case.defines for k in self.defines): + return '%s#%d#%d (%s)' % ( + self.suite.name, self.caseno, self.permno, ', '.join( + '%s=%s' % (k, v) for k, v in self.defines.items() + if k not in self.case.defines)) + else: + return '%s#%d#%d' % ( + self.suite.name, self.caseno, self.permno) + else: + return '%s#%d' % ( + self.suite.name, self.caseno) + + def permute(self, class_=None, defines={}, permno=None, **_): + ncase = (class_ or type(self))(self.config) + for k, v in self.__dict__.items(): + setattr(ncase, k, v) + ncase.case = self + ncase.perms = [ncase] + ncase.permno = permno + ncase.defines = defines + return ncase + + def build(self, f, **_): + # prologue + for k, v in sorted(self.defines.items()): + if k not in self.suite.defines: + f.write('#define %s %s\n' % (k, v)) + + f.write('void test_case%d(%s) {' % (self.caseno, ','.join( + '\n'+8*' '+'__attribute__((unused)) intmax_t %s' % k + for k in sorted(self.perms[0].defines) + if k not in self.defines))) + + f.write(PROLOGUE) + f.write('\n') + f.write(4*' '+'// test case %d\n' % self.caseno) + f.write(4*' '+'#line %d "%s"\n' % (self.code_lineno, self.suite.path)) + + # test case goes here + f.write(self.code) + + # epilogue + f.write(EPILOGUE) + f.write('}\n') + + for k, v in sorted(self.defines.items()): + if k not in self.suite.defines: + f.write('#undef %s\n' % k) + + def shouldtest(self, **args): + if (self.filter is not None and + len(self.filter) >= 1 and + self.filter[0] != self.caseno): + return False + elif (self.filter is not None and + len(self.filter) >= 2 and + self.filter[1] != self.permno): + return False + elif args.get('no_internal') and self.in_ is not None: + return False + elif self.if_ is not None: + if_ = self.if_ + while True: + for k, v in sorted(self.defines.items(), + key=lambda x: len(x[0]), reverse=True): + if k in if_: + if_ = if_.replace(k, '(%s)' % v) + break + else: + break + if_ = ( + re.sub('(\&\&|\?)', ' and ', + re.sub('(\|\||:)', ' or ', + re.sub('!(?!=)', ' not ', if_)))) + return eval(if_) + else: + return True + + def test(self, exec=[], persist=False, cycles=None, + gdb=False, failure=None, disk=None, **args): + # build command + cmd = exec + ['./%s.test' % self.suite.path, + repr(self.caseno), repr(self.permno)] + + # persist disk or keep in RAM for speed? + if persist: + if not disk: + disk = self.suite.path + '.disk' + if persist != 'noerase': + try: + with open(disk, 'w') as f: + f.truncate(0) + if args.get('verbose'): + print('truncate --size=0', disk) + except FileNotFoundError: + pass + + cmd.append(disk) + + # simulate power-loss after n cycles? + if cycles: + cmd.append(str(cycles)) + + # failed? drop into debugger? + if gdb and failure: + ncmd = ['gdb'] + if gdb == 'assert': + ncmd.extend(['-ex', 'r']) + if failure.assert_: + ncmd.extend(['-ex', 'up 2']) + elif gdb == 'main': + ncmd.extend([ + '-ex', 'b %s:%d' % (self.suite.path, self.code_lineno), + '-ex', 'r']) + ncmd.extend(['--args'] + cmd) + + if args.get('verbose'): + print(' '.join(shlex.quote(c) for c in ncmd)) + signal.signal(signal.SIGINT, signal.SIG_IGN) + sys.exit(sp.call(ncmd)) + + # run test case! + mpty, spty = pty.openpty() + if args.get('verbose'): + print(' '.join(shlex.quote(c) for c in cmd)) + proc = sp.Popen(cmd, stdout=spty, stderr=spty) + os.close(spty) + mpty = os.fdopen(mpty, 'r', 1) + stdout = [] + assert_ = None + try: + while True: + try: + line = mpty.readline() + except OSError as e: + if e.errno == errno.EIO: + break + raise + if not line: + break; + stdout.append(line) + if args.get('verbose'): + sys.stdout.write(line) + # intercept asserts + m = re.match( + '^{0}([^:]+):(\d+):(?:\d+:)?{0}{1}:{0}(.*)$' + .format('(?:\033\[[\d;]*.| )*', 'assert'), + line) + if m and assert_ is None: + try: + with open(m.group(1)) as f: + lineno = int(m.group(2)) + line = (next(it.islice(f, lineno-1, None)) + .strip('\n')) + assert_ = { + 'path': m.group(1), + 'line': line, + 'lineno': lineno, + 'message': m.group(3)} + except: + pass + except KeyboardInterrupt: + raise TestFailure(self, 1, stdout, None) + proc.wait() + + # did we pass? + if proc.returncode != 0: + raise TestFailure(self, proc.returncode, stdout, assert_) + else: + return PASS + +class ValgrindTestCase(TestCase): + def __init__(self, config, **args): + self.leaky = config.get('leaky', False) + super().__init__(config, **args) + + def shouldtest(self, **args): + return not self.leaky and super().shouldtest(**args) + + def test(self, exec=[], **args): + verbose = args.get('verbose') + uninit = (self.defines.get('LFS_ERASE_VALUE', None) == -1) + exec = [ + 'valgrind', + '--leak-check=full', + ] + (['--undef-value-errors=no'] if uninit else []) + [ + ] + (['--track-origins=yes'] if not uninit else []) + [ + '--error-exitcode=4', + '--error-limit=no', + ] + (['--num-callers=1'] if not verbose else []) + [ + '-q'] + exec + return super().test(exec=exec, **args) + +class ReentrantTestCase(TestCase): + def __init__(self, config, **args): + self.reentrant = config.get('reentrant', False) + super().__init__(config, **args) + + def shouldtest(self, **args): + return self.reentrant and super().shouldtest(**args) + + def test(self, persist=False, gdb=False, failure=None, **args): + for cycles in it.count(1): + # clear disk first? + if cycles == 1 and persist != 'noerase': + persist = 'erase' + else: + persist = 'noerase' + + # exact cycle we should drop into debugger? + if gdb and failure and failure.cycleno == cycles: + return super().test(gdb=gdb, persist=persist, cycles=cycles, + failure=failure, **args) + + # run tests, but kill the program after prog/erase has + # been hit n cycles. We exit with a special return code if the + # program has not finished, since this isn't a test failure. + try: + return super().test(persist=persist, cycles=cycles, **args) + except TestFailure as nfailure: + if nfailure.returncode == 33: + continue + else: + nfailure.cycleno = cycles + raise + +class TestSuite: + def __init__(self, path, classes=[TestCase], defines={}, + filter=None, **args): + self.name = os.path.basename(path) + if self.name.endswith('.toml'): + self.name = self.name[:-len('.toml')] + if args.get('build_dir'): + self.toml = path + self.path = args['build_dir'] + '/' + path + else: + self.toml = path + self.path = path + self.classes = classes + self.defines = defines.copy() + self.filter = filter + + with open(self.toml) as f: + # load tests + config = toml.load(f) + + # find line numbers + f.seek(0) + linenos = [] + code_linenos = [] + for i, line in enumerate(f): + if re.match(r'\[\[\s*case\s*\]\]', line): + linenos.append(i+1) + if re.match(r'code\s*=\s*(\'\'\'|""")', line): + code_linenos.append(i+2) + + code_linenos.reverse() + + # grab global config + for k, v in config.get('define', {}).items(): + if k not in self.defines: + self.defines[k] = v + self.code = config.get('code', None) + if self.code is not None: + self.code_lineno = code_linenos.pop() + + # create initial test cases + self.cases = [] + for i, (case, lineno) in enumerate(zip(config['case'], linenos)): + # code lineno? + if 'code' in case: + case['code_lineno'] = code_linenos.pop() + # merge conditions if necessary + if 'if' in config and 'if' in case: + case['if'] = '(%s) && (%s)' % (config['if'], case['if']) + elif 'if' in config: + case['if'] = config['if'] + # initialize test case + self.cases.append(TestCase(case, filter=filter, + suite=self, caseno=i+1, lineno=lineno, **args)) + + def __str__(self): + return self.name + + def __lt__(self, other): + return self.name < other.name + + def permute(self, **args): + for case in self.cases: + # lets find all parameterized definitions, in one of [args.D, + # suite.defines, case.defines, DEFINES]. Note that each of these + # can be either a dict of defines, or a list of dicts, expressing + # an initial set of permutations. + pending = [{}] + for inits in [self.defines, case.defines, DEFINES]: + if not isinstance(inits, list): + inits = [inits] + + npending = [] + for init, pinit in it.product(inits, pending): + ninit = pinit.copy() + for k, v in init.items(): + if k not in ninit: + try: + ninit[k] = eval(v) + except: + ninit[k] = v + npending.append(ninit) + + pending = npending + + # expand permutations + pending = list(reversed(pending)) + expanded = [] + while pending: + perm = pending.pop() + for k, v in sorted(perm.items()): + if not isinstance(v, str) and isinstance(v, abc.Iterable): + for nv in reversed(v): + nperm = perm.copy() + nperm[k] = nv + pending.append(nperm) + break + else: + expanded.append(perm) + + # generate permutations + case.perms = [] + for i, (class_, defines) in enumerate( + it.product(self.classes, expanded)): + case.perms.append(case.permute( + class_, defines, permno=i+1, **args)) + + # also track non-unique defines + case.defines = {} + for k, v in case.perms[0].defines.items(): + if all(perm.defines[k] == v for perm in case.perms): + case.defines[k] = v + + # track all perms and non-unique defines + self.perms = [] + for case in self.cases: + self.perms.extend(case.perms) + + self.defines = {} + for k, v in self.perms[0].defines.items(): + if all(perm.defines.get(k, None) == v for perm in self.perms): + self.defines[k] = v + + return self.perms + + def build(self, **args): + # build test files + tf = open(self.path + '.test.tc', 'w') + tf.write(GLOBALS) + if self.code is not None: + tf.write('#line %d "%s"\n' % (self.code_lineno, self.path)) + tf.write(self.code) + + tfs = {None: tf} + for case in self.cases: + if case.in_ not in tfs: + tfs[case.in_] = open(self.path+'.'+ + re.sub('(\.c)?$', '.tc', case.in_.replace('/', '.')), 'w') + tfs[case.in_].write('#line 1 "%s"\n' % case.in_) + with open(case.in_) as f: + for line in f: + tfs[case.in_].write(line) + tfs[case.in_].write('\n') + tfs[case.in_].write(GLOBALS) + + tfs[case.in_].write('\n') + case.build(tfs[case.in_], **args) + + tf.write('\n') + tf.write('const char *lfs_testbd_path;\n') + tf.write('uint32_t lfs_testbd_cycles;\n') + tf.write('int main(int argc, char **argv) {\n') + tf.write(4*' '+'int case_ = (argc > 1) ? atoi(argv[1]) : 0;\n') + tf.write(4*' '+'int perm = (argc > 2) ? atoi(argv[2]) : 0;\n') + tf.write(4*' '+'lfs_testbd_path = (argc > 3) ? argv[3] : NULL;\n') + tf.write(4*' '+'lfs_testbd_cycles = (argc > 4) ? atoi(argv[4]) : 0;\n') + for perm in self.perms: + # test declaration + tf.write(4*' '+'extern void test_case%d(%s);\n' % ( + perm.caseno, ', '.join( + 'intmax_t %s' % k for k in sorted(perm.defines) + if k not in perm.case.defines))) + # test call + tf.write(4*' '+ + 'if (argc < 3 || (case_ == %d && perm == %d)) {' + ' test_case%d(%s); ' + '}\n' % (perm.caseno, perm.permno, perm.caseno, ', '.join( + str(v) for k, v in sorted(perm.defines.items()) + if k not in perm.case.defines))) + tf.write('}\n') + + for tf in tfs.values(): + tf.close() + + # write makefiles + with open(self.path + '.mk', 'w') as mk: + mk.write(RULES.replace(4*' ', '\t') % dict(path=self.path)) + mk.write('\n') + + # add coverage hooks? + if args.get('coverage'): + mk.write(COVERAGE_RULES.replace(4*' ', '\t') % dict( + path=self.path)) + mk.write('\n') + + # add truely global defines globally + for k, v in sorted(self.defines.items()): + mk.write('%s.test: override CFLAGS += -D%s=%r\n' + % (self.path, k, v)) + + for path in tfs: + if path is None: + mk.write('%s: %s | %s\n' % ( + self.path+'.test.c', + self.toml, + self.path+'.test.tc')) + else: + mk.write('%s: %s %s | %s\n' % ( + self.path+'.'+path.replace('/', '.'), + self.toml, + path, + self.path+'.'+re.sub('(\.c)?$', '.tc', + path.replace('/', '.')))) + mk.write('\t./scripts/explode_asserts.py $| -o $@\n') + + self.makefile = self.path + '.mk' + self.target = self.path + '.test' + return self.makefile, self.target + + def test(self, **args): + # run test suite! + if not args.get('verbose', True): + sys.stdout.write(self.name + ' ') + sys.stdout.flush() + for perm in self.perms: + if not perm.shouldtest(**args): + continue + + try: + result = perm.test(**args) + except TestFailure as failure: + perm.result = failure + if not args.get('verbose', True): + sys.stdout.write(FAIL) + sys.stdout.flush() + if not args.get('keep_going'): + if not args.get('verbose', True): + sys.stdout.write('\n') + raise + else: + perm.result = PASS + if not args.get('verbose', True): + sys.stdout.write(PASS) + sys.stdout.flush() + + if not args.get('verbose', True): + sys.stdout.write('\n') + +def main(**args): + # figure out explicit defines + defines = {} + for define in args['D']: + k, v, *_ = define.split('=', 2) + [''] + defines[k] = v + + # and what class of TestCase to run + classes = [] + if args.get('normal'): + classes.append(TestCase) + if args.get('reentrant'): + classes.append(ReentrantTestCase) + if args.get('valgrind'): + classes.append(ValgrindTestCase) + if not classes: + classes = [TestCase] + + suites = [] + for testpath in args['test_paths']: + # optionally specified test case/perm + testpath, *filter = testpath.split('#') + filter = [int(f) for f in filter] + + # figure out the suite's toml file + if os.path.isdir(testpath): + testpath = testpath + '/*.toml' + elif os.path.isfile(testpath): + testpath = testpath + elif testpath.endswith('.toml'): + testpath = TEST_PATHS + '/' + testpath + else: + testpath = TEST_PATHS + '/' + testpath + '.toml' + + # find tests + for path in glob.glob(testpath): + suites.append(TestSuite(path, classes, defines, filter, **args)) + + # sort for reproducability + suites = sorted(suites) + + # generate permutations + for suite in suites: + suite.permute(**args) + + # build tests in parallel + print('====== building ======') + makefiles = [] + targets = [] + for suite in suites: + makefile, target = suite.build(**args) + makefiles.append(makefile) + targets.append(target) + + cmd = (['make', '-f', 'Makefile'] + + list(it.chain.from_iterable(['-f', m] for m in makefiles)) + + [target for target in targets]) + mpty, spty = pty.openpty() + if args.get('verbose'): + print(' '.join(shlex.quote(c) for c in cmd)) + proc = sp.Popen(cmd, stdout=spty, stderr=spty) + os.close(spty) + mpty = os.fdopen(mpty, 'r', 1) + stdout = [] + while True: + try: + line = mpty.readline() + except OSError as e: + if e.errno == errno.EIO: + break + raise + if not line: + break; + stdout.append(line) + if args.get('verbose'): + sys.stdout.write(line) + # intercept warnings + m = re.match( + '^{0}([^:]+):(\d+):(?:\d+:)?{0}{1}:{0}(.*)$' + .format('(?:\033\[[\d;]*.| )*', 'warning'), + line) + if m and not args.get('verbose'): + try: + with open(m.group(1)) as f: + lineno = int(m.group(2)) + line = next(it.islice(f, lineno-1, None)).strip('\n') + sys.stdout.write( + "\033[01m{path}:{lineno}:\033[01;35mwarning:\033[m " + "{message}\n{line}\n\n".format( + path=m.group(1), line=line, lineno=lineno, + message=m.group(3))) + except: + pass + proc.wait() + if proc.returncode != 0: + if not args.get('verbose'): + for line in stdout: + sys.stdout.write(line) + sys.exit(-1) + + print('built %d test suites, %d test cases, %d permutations' % ( + len(suites), + sum(len(suite.cases) for suite in suites), + sum(len(suite.perms) for suite in suites))) + + total = 0 + for suite in suites: + for perm in suite.perms: + total += perm.shouldtest(**args) + if total != sum(len(suite.perms) for suite in suites): + print('filtered down to %d permutations' % total) + + # only requested to build? + if args.get('build'): + return 0 + + print('====== testing ======') + try: + for suite in suites: + suite.test(**args) + except TestFailure: + pass + + print('====== results ======') + passed = 0 + failed = 0 + for suite in suites: + for perm in suite.perms: + if perm.result == PASS: + passed += 1 + elif isinstance(perm.result, TestFailure): + sys.stdout.write( + "\033[01m{path}:{lineno}:\033[01;31mfailure:\033[m " + "{perm} failed\n".format( + perm=perm, path=perm.suite.path, lineno=perm.lineno, + returncode=perm.result.returncode or 0)) + if perm.result.stdout: + if perm.result.assert_: + stdout = perm.result.stdout[:-1] + else: + stdout = perm.result.stdout + for line in stdout[-5:]: + sys.stdout.write(line) + if perm.result.assert_: + sys.stdout.write( + "\033[01m{path}:{lineno}:\033[01;31massert:\033[m " + "{message}\n{line}\n".format( + **perm.result.assert_)) + sys.stdout.write('\n') + failed += 1 + + if args.get('coverage'): + # collect coverage info + # why -j1? lcov doesn't work in parallel because of gcov limitations + cmd = (['make', '-j1', '-f', 'Makefile'] + + list(it.chain.from_iterable(['-f', m] for m in makefiles)) + + (['COVERAGETARGET=%s' % args['coverage']] + if isinstance(args['coverage'], str) else []) + + [suite.path + '.info' for suite in suites + if any(perm.result == PASS for perm in suite.perms)]) + if args.get('verbose'): + print(' '.join(shlex.quote(c) for c in cmd)) + proc = sp.Popen(cmd, + stdout=sp.PIPE if not args.get('verbose') else None, + stderr=sp.STDOUT if not args.get('verbose') else None, + universal_newlines=True) + proc.wait() + if proc.returncode != 0: + if not args.get('verbose'): + for line in proc.stdout: + sys.stdout.write(line) + sys.exit(-1) + + if args.get('gdb'): + failure = None + for suite in suites: + for perm in suite.perms: + if isinstance(perm.result, TestFailure): + failure = perm.result + if failure is not None: + print('======= gdb ======') + # drop into gdb + failure.case.test(failure=failure, **args) + sys.exit(0) + + print('tests passed %d/%d (%.2f%%)' % (passed, total, + 100*(passed/total if total else 1.0))) + print('tests failed %d/%d (%.2f%%)' % (failed, total, + 100*(failed/total if total else 1.0))) + return 1 if failed > 0 else 0 + +if __name__ == "__main__": + import argparse + parser = argparse.ArgumentParser( + description="Run parameterized tests in various configurations.") + parser.add_argument('test_paths', nargs='*', default=[TEST_PATHS], + help="Description of test(s) to run. By default, this is all tests \ + found in the \"{0}\" directory. Here, you can specify a different \ + directory of tests, a specific file, a suite by name, and even \ + specific test cases and permutations. For example \ + \"test_dirs#1\" or \"{0}/test_dirs.toml#1#1\".".format(TEST_PATHS)) + parser.add_argument('-D', action='append', default=[], + help="Overriding parameter definitions.") + parser.add_argument('-v', '--verbose', action='store_true', + help="Output everything that is happening.") + parser.add_argument('-k', '--keep-going', action='store_true', + help="Run all tests instead of stopping on first error. Useful for CI.") + parser.add_argument('-p', '--persist', choices=['erase', 'noerase'], + nargs='?', const='erase', + help="Store disk image in a file.") + parser.add_argument('-b', '--build', action='store_true', + help="Only build the tests, do not execute.") + parser.add_argument('-g', '--gdb', choices=['init', 'main', 'assert'], + nargs='?', const='assert', + help="Drop into gdb on test failure.") + parser.add_argument('--no-internal', action='store_true', + help="Don't run tests that require internal knowledge.") + parser.add_argument('-n', '--normal', action='store_true', + help="Run tests normally.") + parser.add_argument('-r', '--reentrant', action='store_true', + help="Run reentrant tests with simulated power-loss.") + parser.add_argument('--valgrind', action='store_true', + help="Run non-leaky tests under valgrind to check for memory leaks.") + parser.add_argument('--exec', default=[], type=lambda e: e.split(), + help="Run tests with another executable prefixed on the command line.") + parser.add_argument('--disk', + help="Specify a file to use for persistent/reentrant tests.") + parser.add_argument('--coverage', type=lambda x: x if x else True, + nargs='?', const='', + help="Collect coverage information during testing. This uses lcov/gcov \ + to accumulate coverage information into *.info files. May also \ + a path to a *.info file to accumulate coverage info into.") + parser.add_argument('--build-dir', + help="Build relative to the specified directory instead of the \ + current directory.") + + sys.exit(main(**vars(parser.parse_args()))) diff --git a/ext/littlefs/tests/test_alloc.toml b/ext/littlefs/tests/test_alloc.toml new file mode 100644 index 0000000000..fa92da5133 --- /dev/null +++ b/ext/littlefs/tests/test_alloc.toml @@ -0,0 +1,653 @@ +# allocator tests +# note for these to work there are a number constraints on the device geometry +if = 'LFS_BLOCK_CYCLES == -1' + +[[case]] # parallel allocation test +define.FILES = 3 +define.SIZE = '(((LFS_BLOCK_SIZE-8)*(LFS_BLOCK_COUNT-6)) / FILES)' +code = ''' + const char *names[FILES] = {"bacon", "eggs", "pancakes"}; + lfs_file_t files[FILES]; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "breakfast") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &files[n], path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + } + for (int n = 0; n < FILES; n++) { + size = strlen(names[n]); + for (lfs_size_t i = 0; i < SIZE; i += size) { + lfs_file_write(&lfs, &files[n], names[n], size) => size; + } + } + for (int n = 0; n < FILES; n++) { + lfs_file_close(&lfs, &files[n]) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + size = strlen(names[n]); + for (lfs_size_t i = 0; i < SIZE; i += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, names[n], size) == 0); + } + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # serial allocation test +define.FILES = 3 +define.SIZE = '(((LFS_BLOCK_SIZE-8)*(LFS_BLOCK_COUNT-6)) / FILES)' +code = ''' + const char *names[FILES] = {"bacon", "eggs", "pancakes"}; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "breakfast") => 0; + lfs_unmount(&lfs) => 0; + + for (int n = 0; n < FILES; n++) { + lfs_mount(&lfs, &cfg) => 0; + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + size = strlen(names[n]); + memcpy(buffer, names[n], size); + for (int i = 0; i < SIZE; i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + } + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + size = strlen(names[n]); + for (int i = 0; i < SIZE; i += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, names[n], size) == 0); + } + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # parallel allocation reuse test +define.FILES = 3 +define.SIZE = '(((LFS_BLOCK_SIZE-8)*(LFS_BLOCK_COUNT-6)) / FILES)' +define.CYCLES = [1, 10] +code = ''' + const char *names[FILES] = {"bacon", "eggs", "pancakes"}; + lfs_file_t files[FILES]; + + lfs_format(&lfs, &cfg) => 0; + + for (int c = 0; c < CYCLES; c++) { + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "breakfast") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &files[n], path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + } + for (int n = 0; n < FILES; n++) { + size = strlen(names[n]); + for (int i = 0; i < SIZE; i += size) { + lfs_file_write(&lfs, &files[n], names[n], size) => size; + } + } + for (int n = 0; n < FILES; n++) { + lfs_file_close(&lfs, &files[n]) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + size = strlen(names[n]); + for (int i = 0; i < SIZE; i += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, names[n], size) == 0); + } + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_remove(&lfs, path) => 0; + } + lfs_remove(&lfs, "breakfast") => 0; + lfs_unmount(&lfs) => 0; + } +''' + +[[case]] # serial allocation reuse test +define.FILES = 3 +define.SIZE = '(((LFS_BLOCK_SIZE-8)*(LFS_BLOCK_COUNT-6)) / FILES)' +define.CYCLES = [1, 10] +code = ''' + const char *names[FILES] = {"bacon", "eggs", "pancakes"}; + + lfs_format(&lfs, &cfg) => 0; + + for (int c = 0; c < CYCLES; c++) { + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "breakfast") => 0; + lfs_unmount(&lfs) => 0; + + for (int n = 0; n < FILES; n++) { + lfs_mount(&lfs, &cfg) => 0; + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + size = strlen(names[n]); + memcpy(buffer, names[n], size); + for (int i = 0; i < SIZE; i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + } + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + size = strlen(names[n]); + for (int i = 0; i < SIZE; i += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, names[n], size) == 0); + } + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int n = 0; n < FILES; n++) { + sprintf(path, "breakfast/%s", names[n]); + lfs_remove(&lfs, path) => 0; + } + lfs_remove(&lfs, "breakfast") => 0; + lfs_unmount(&lfs) => 0; + } +''' + +[[case]] # exhaustion test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + size = strlen("exhaustion"); + memcpy(buffer, "exhaustion", size); + lfs_file_write(&lfs, &file, buffer, size) => size; + lfs_file_sync(&lfs, &file) => 0; + + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + lfs_ssize_t res; + while (true) { + res = lfs_file_write(&lfs, &file, buffer, size); + if (res < 0) { + break; + } + + res => size; + } + res => LFS_ERR_NOSPC; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_RDONLY); + size = strlen("exhaustion"); + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "exhaustion", size) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # exhaustion wraparound test +define.SIZE = '(((LFS_BLOCK_SIZE-8)*(LFS_BLOCK_COUNT-4)) / 3)' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + lfs_file_open(&lfs, &file, "padding", LFS_O_WRONLY | LFS_O_CREAT); + size = strlen("buffering"); + memcpy(buffer, "buffering", size); + for (int i = 0; i < SIZE; i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + lfs_remove(&lfs, "padding") => 0; + + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + size = strlen("exhaustion"); + memcpy(buffer, "exhaustion", size); + lfs_file_write(&lfs, &file, buffer, size) => size; + lfs_file_sync(&lfs, &file) => 0; + + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + lfs_ssize_t res; + while (true) { + res = lfs_file_write(&lfs, &file, buffer, size); + if (res < 0) { + break; + } + + res => size; + } + res => LFS_ERR_NOSPC; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_RDONLY); + size = strlen("exhaustion"); + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "exhaustion", size) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_remove(&lfs, "exhaustion") => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # dir exhaustion test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // find out max file size + lfs_mkdir(&lfs, "exhaustiondir") => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + int count = 0; + while (true) { + err = lfs_file_write(&lfs, &file, buffer, size); + if (err < 0) { + break; + } + + count += 1; + } + err => LFS_ERR_NOSPC; + lfs_file_close(&lfs, &file) => 0; + + lfs_remove(&lfs, "exhaustion") => 0; + lfs_remove(&lfs, "exhaustiondir") => 0; + + // see if dir fits with max file size + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + for (int i = 0; i < count; i++) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + lfs_mkdir(&lfs, "exhaustiondir") => 0; + lfs_remove(&lfs, "exhaustiondir") => 0; + lfs_remove(&lfs, "exhaustion") => 0; + + // see if dir fits with > max file size + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + for (int i = 0; i < count+1; i++) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + lfs_mkdir(&lfs, "exhaustiondir") => LFS_ERR_NOSPC; + + lfs_remove(&lfs, "exhaustion") => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # what if we have a bad block during an allocation scan? +in = "lfs.c" +define.LFS_ERASE_CYCLES = 0xffffffff +define.LFS_BADBLOCK_BEHAVIOR = 'LFS_TESTBD_BADBLOCK_READERROR' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + // first fill to exhaustion to find available space + lfs_file_open(&lfs, &file, "pacman", LFS_O_WRONLY | LFS_O_CREAT) => 0; + strcpy((char*)buffer, "waka"); + size = strlen("waka"); + lfs_size_t filesize = 0; + while (true) { + lfs_ssize_t res = lfs_file_write(&lfs, &file, buffer, size); + assert(res == (lfs_ssize_t)size || res == LFS_ERR_NOSPC); + if (res == LFS_ERR_NOSPC) { + break; + } + filesize += size; + } + lfs_file_close(&lfs, &file) => 0; + // now fill all but a couple of blocks of the filesystem with data + filesize -= 3*LFS_BLOCK_SIZE; + lfs_file_open(&lfs, &file, "pacman", LFS_O_WRONLY | LFS_O_CREAT) => 0; + strcpy((char*)buffer, "waka"); + size = strlen("waka"); + for (lfs_size_t i = 0; i < filesize/size; i++) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + // also save head of file so we can error during lookahead scan + lfs_block_t fileblock = file.ctz.head; + lfs_unmount(&lfs) => 0; + + // remount to force an alloc scan + lfs_mount(&lfs, &cfg) => 0; + + // but mark the head of our file as a "bad block", this is force our + // scan to bail early + lfs_testbd_setwear(&cfg, fileblock, 0xffffffff) => 0; + lfs_file_open(&lfs, &file, "ghost", LFS_O_WRONLY | LFS_O_CREAT) => 0; + strcpy((char*)buffer, "chomp"); + size = strlen("chomp"); + while (true) { + lfs_ssize_t res = lfs_file_write(&lfs, &file, buffer, size); + assert(res == (lfs_ssize_t)size || res == LFS_ERR_CORRUPT); + if (res == LFS_ERR_CORRUPT) { + break; + } + } + lfs_file_close(&lfs, &file) => 0; + + // now reverse the "bad block" and try to write the file again until we + // run out of space + lfs_testbd_setwear(&cfg, fileblock, 0) => 0; + lfs_file_open(&lfs, &file, "ghost", LFS_O_WRONLY | LFS_O_CREAT) => 0; + strcpy((char*)buffer, "chomp"); + size = strlen("chomp"); + while (true) { + lfs_ssize_t res = lfs_file_write(&lfs, &file, buffer, size); + assert(res == (lfs_ssize_t)size || res == LFS_ERR_NOSPC); + if (res == LFS_ERR_NOSPC) { + break; + } + } + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; + + // check that the disk isn't hurt + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "pacman", LFS_O_RDONLY) => 0; + strcpy((char*)buffer, "waka"); + size = strlen("waka"); + for (lfs_size_t i = 0; i < filesize/size; i++) { + uint8_t rbuffer[4]; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + assert(memcmp(rbuffer, buffer, size) == 0); + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + + +# Below, I don't like these tests. They're fragile and depend _heavily_ +# on the geometry of the block device. But they are valuable. Eventually they +# should be removed and replaced with generalized tests. + +[[case]] # chained dir exhaustion test +define.LFS_BLOCK_SIZE = 512 +define.LFS_BLOCK_COUNT = 1024 +if = 'LFS_BLOCK_SIZE == 512 && LFS_BLOCK_COUNT == 1024' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // find out max file size + lfs_mkdir(&lfs, "exhaustiondir") => 0; + for (int i = 0; i < 10; i++) { + sprintf(path, "dirwithanexhaustivelylongnameforpadding%d", i); + lfs_mkdir(&lfs, path) => 0; + } + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + int count = 0; + while (true) { + err = lfs_file_write(&lfs, &file, buffer, size); + if (err < 0) { + break; + } + + count += 1; + } + err => LFS_ERR_NOSPC; + lfs_file_close(&lfs, &file) => 0; + + lfs_remove(&lfs, "exhaustion") => 0; + lfs_remove(&lfs, "exhaustiondir") => 0; + for (int i = 0; i < 10; i++) { + sprintf(path, "dirwithanexhaustivelylongnameforpadding%d", i); + lfs_remove(&lfs, path) => 0; + } + + // see that chained dir fails + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + for (int i = 0; i < count+1; i++) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_sync(&lfs, &file) => 0; + + for (int i = 0; i < 10; i++) { + sprintf(path, "dirwithanexhaustivelylongnameforpadding%d", i); + lfs_mkdir(&lfs, path) => 0; + } + + lfs_mkdir(&lfs, "exhaustiondir") => LFS_ERR_NOSPC; + + // shorten file to try a second chained dir + while (true) { + err = lfs_mkdir(&lfs, "exhaustiondir"); + if (err != LFS_ERR_NOSPC) { + break; + } + + lfs_ssize_t filesize = lfs_file_size(&lfs, &file); + filesize > 0 => true; + + lfs_file_truncate(&lfs, &file, filesize - size) => 0; + lfs_file_sync(&lfs, &file) => 0; + } + err => 0; + + lfs_mkdir(&lfs, "exhaustiondir2") => LFS_ERR_NOSPC; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # split dir test +define.LFS_BLOCK_SIZE = 512 +define.LFS_BLOCK_COUNT = 1024 +if = 'LFS_BLOCK_SIZE == 512 && LFS_BLOCK_COUNT == 1024' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // create one block hole for half a directory + lfs_file_open(&lfs, &file, "bump", LFS_O_WRONLY | LFS_O_CREAT) => 0; + for (lfs_size_t i = 0; i < cfg.block_size; i += 2) { + memcpy(&buffer[i], "hi", 2); + } + lfs_file_write(&lfs, &file, buffer, cfg.block_size) => cfg.block_size; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "exhaustion", LFS_O_WRONLY | LFS_O_CREAT); + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < (cfg.block_count-4)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + // remount to force reset of lookahead + lfs_unmount(&lfs) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // open hole + lfs_remove(&lfs, "bump") => 0; + + lfs_mkdir(&lfs, "splitdir") => 0; + lfs_file_open(&lfs, &file, "splitdir/bump", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + for (lfs_size_t i = 0; i < cfg.block_size; i += 2) { + memcpy(&buffer[i], "hi", 2); + } + lfs_file_write(&lfs, &file, buffer, 2*cfg.block_size) => LFS_ERR_NOSPC; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # outdated lookahead test +define.LFS_BLOCK_SIZE = 512 +define.LFS_BLOCK_COUNT = 1024 +if = 'LFS_BLOCK_SIZE == 512 && LFS_BLOCK_COUNT == 1024' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // fill completely with two files + lfs_file_open(&lfs, &file, "exhaustion1", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < ((cfg.block_count-2)/2)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "exhaustion2", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < ((cfg.block_count-2+1)/2)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + // remount to force reset of lookahead + lfs_unmount(&lfs) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // rewrite one file + lfs_file_open(&lfs, &file, "exhaustion1", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_sync(&lfs, &file) => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < ((cfg.block_count-2)/2)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + // rewrite second file, this requires lookahead does not + // use old population + lfs_file_open(&lfs, &file, "exhaustion2", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_sync(&lfs, &file) => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < ((cfg.block_count-2+1)/2)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # outdated lookahead and split dir test +define.LFS_BLOCK_SIZE = 512 +define.LFS_BLOCK_COUNT = 1024 +if = 'LFS_BLOCK_SIZE == 512 && LFS_BLOCK_COUNT == 1024' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // fill completely with two files + lfs_file_open(&lfs, &file, "exhaustion1", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < ((cfg.block_count-2)/2)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "exhaustion2", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < ((cfg.block_count-2+1)/2)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + // remount to force reset of lookahead + lfs_unmount(&lfs) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // rewrite one file with a hole of one block + lfs_file_open(&lfs, &file, "exhaustion1", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_sync(&lfs, &file) => 0; + size = strlen("blahblahblahblah"); + memcpy(buffer, "blahblahblahblah", size); + for (lfs_size_t i = 0; + i < ((cfg.block_count-2)/2 - 1)*(cfg.block_size-8); + i += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + // try to allocate a directory, should fail! + lfs_mkdir(&lfs, "split") => LFS_ERR_NOSPC; + + // file should not fail + lfs_file_open(&lfs, &file, "notasplit", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "hi", 2) => 2; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_attrs.toml b/ext/littlefs/tests/test_attrs.toml new file mode 100644 index 0000000000..db8d0c7ef8 --- /dev/null +++ b/ext/littlefs/tests/test_attrs.toml @@ -0,0 +1,304 @@ +[[case]] # set/get attribute +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "hello") => 0; + lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello"); + lfs_file_close(&lfs, &file); + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(buffer, 0, sizeof(buffer)); + lfs_setattr(&lfs, "hello", 'A', "aaaa", 4) => 0; + lfs_setattr(&lfs, "hello", 'B', "bbbbbb", 6) => 0; + lfs_setattr(&lfs, "hello", 'C', "ccccc", 5) => 0; + lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 6; + lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "bbbbbb", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "hello", 'B', "", 0) => 0; + lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 0; + lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_removeattr(&lfs, "hello", 'B') => 0; + lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => LFS_ERR_NOATTR; + lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "hello", 'B', "dddddd", 6) => 0; + lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 6; + lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "dddddd", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "hello", 'B', "eee", 3) => 0; + lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 3; + lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "eee\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "hello", 'A', buffer, LFS_ATTR_MAX+1) => LFS_ERR_NOSPC; + lfs_setattr(&lfs, "hello", 'B', "fffffffff", 9) => 0; + lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 9; + lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5; + + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(buffer, 0, sizeof(buffer)); + lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "hello", 'B', buffer+4, 9) => 9; + lfs_getattr(&lfs, "hello", 'C', buffer+13, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "fffffffff", 9) => 0; + memcmp(buffer+13, "ccccc", 5) => 0; + + lfs_file_open(&lfs, &file, "hello/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, sizeof(buffer)) => strlen("hello"); + memcmp(buffer, "hello", strlen("hello")) => 0; + lfs_file_close(&lfs, &file); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # set/get root attribute +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "hello") => 0; + lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello"); + lfs_file_close(&lfs, &file); + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(buffer, 0, sizeof(buffer)); + lfs_setattr(&lfs, "/", 'A', "aaaa", 4) => 0; + lfs_setattr(&lfs, "/", 'B', "bbbbbb", 6) => 0; + lfs_setattr(&lfs, "/", 'C', "ccccc", 5) => 0; + lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 6; + lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "bbbbbb", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "/", 'B', "", 0) => 0; + lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 0; + lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_removeattr(&lfs, "/", 'B') => 0; + lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => LFS_ERR_NOATTR; + lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "/", 'B', "dddddd", 6) => 0; + lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 6; + lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "dddddd", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "/", 'B', "eee", 3) => 0; + lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 3; + lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "eee\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + lfs_setattr(&lfs, "/", 'A', buffer, LFS_ATTR_MAX+1) => LFS_ERR_NOSPC; + lfs_setattr(&lfs, "/", 'B', "fffffffff", 9) => 0; + lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 9; + lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(buffer, 0, sizeof(buffer)); + lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4; + lfs_getattr(&lfs, "/", 'B', buffer+4, 9) => 9; + lfs_getattr(&lfs, "/", 'C', buffer+13, 5) => 5; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "fffffffff", 9) => 0; + memcmp(buffer+13, "ccccc", 5) => 0; + + lfs_file_open(&lfs, &file, "hello/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, sizeof(buffer)) => strlen("hello"); + memcmp(buffer, "hello", strlen("hello")) => 0; + lfs_file_close(&lfs, &file); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # set/get file attribute +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "hello") => 0; + lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello"); + lfs_file_close(&lfs, &file); + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(buffer, 0, sizeof(buffer)); + struct lfs_attr attrs1[] = { + {'A', buffer, 4}, + {'B', buffer+4, 6}, + {'C', buffer+10, 5}, + }; + struct lfs_file_config cfg1 = {.attrs=attrs1, .attr_count=3}; + + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0; + memcpy(buffer, "aaaa", 4); + memcpy(buffer+4, "bbbbbb", 6); + memcpy(buffer+10, "ccccc", 5); + lfs_file_close(&lfs, &file) => 0; + memset(buffer, 0, 15); + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0; + lfs_file_close(&lfs, &file) => 0; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "bbbbbb", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + attrs1[1].size = 0; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0; + lfs_file_close(&lfs, &file) => 0; + memset(buffer, 0, 15); + attrs1[1].size = 6; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0; + lfs_file_close(&lfs, &file) => 0; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + attrs1[1].size = 6; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0; + memcpy(buffer+4, "dddddd", 6); + lfs_file_close(&lfs, &file) => 0; + memset(buffer, 0, 15); + attrs1[1].size = 6; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0; + lfs_file_close(&lfs, &file) => 0; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "dddddd", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + attrs1[1].size = 3; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0; + memcpy(buffer+4, "eee", 3); + lfs_file_close(&lfs, &file) => 0; + memset(buffer, 0, 15); + attrs1[1].size = 6; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0; + lfs_file_close(&lfs, &file) => 0; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "eee\0\0\0", 6) => 0; + memcmp(buffer+10, "ccccc", 5) => 0; + + attrs1[0].size = LFS_ATTR_MAX+1; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) + => LFS_ERR_NOSPC; + + struct lfs_attr attrs2[] = { + {'A', buffer, 4}, + {'B', buffer+4, 9}, + {'C', buffer+13, 5}, + }; + struct lfs_file_config cfg2 = {.attrs=attrs2, .attr_count=3}; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDWR, &cfg2) => 0; + memcpy(buffer+4, "fffffffff", 9); + lfs_file_close(&lfs, &file) => 0; + attrs1[0].size = 4; + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(buffer, 0, sizeof(buffer)); + struct lfs_attr attrs3[] = { + {'A', buffer, 4}, + {'B', buffer+4, 9}, + {'C', buffer+13, 5}, + }; + struct lfs_file_config cfg3 = {.attrs=attrs3, .attr_count=3}; + + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg3) => 0; + lfs_file_close(&lfs, &file) => 0; + memcmp(buffer, "aaaa", 4) => 0; + memcmp(buffer+4, "fffffffff", 9) => 0; + memcmp(buffer+13, "ccccc", 5) => 0; + + lfs_file_open(&lfs, &file, "hello/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, sizeof(buffer)) => strlen("hello"); + memcmp(buffer, "hello", strlen("hello")) => 0; + lfs_file_close(&lfs, &file); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # deferred file attributes +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "hello") => 0; + lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello"); + lfs_file_close(&lfs, &file); + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_setattr(&lfs, "hello/hello", 'B', "fffffffff", 9) => 0; + lfs_setattr(&lfs, "hello/hello", 'C', "ccccc", 5) => 0; + + memset(buffer, 0, sizeof(buffer)); + struct lfs_attr attrs1[] = { + {'B', "gggg", 4}, + {'C', "", 0}, + {'D', "hhhh", 4}, + }; + struct lfs_file_config cfg1 = {.attrs=attrs1, .attr_count=3}; + + lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0; + + lfs_getattr(&lfs, "hello/hello", 'B', buffer, 9) => 9; + lfs_getattr(&lfs, "hello/hello", 'C', buffer+9, 9) => 5; + lfs_getattr(&lfs, "hello/hello", 'D', buffer+18, 9) => LFS_ERR_NOATTR; + memcmp(buffer, "fffffffff", 9) => 0; + memcmp(buffer+9, "ccccc\0\0\0\0", 9) => 0; + memcmp(buffer+18, "\0\0\0\0\0\0\0\0\0", 9) => 0; + + lfs_file_sync(&lfs, &file) => 0; + lfs_getattr(&lfs, "hello/hello", 'B', buffer, 9) => 4; + lfs_getattr(&lfs, "hello/hello", 'C', buffer+9, 9) => 0; + lfs_getattr(&lfs, "hello/hello", 'D', buffer+18, 9) => 4; + memcmp(buffer, "gggg\0\0\0\0\0", 9) => 0; + memcmp(buffer+9, "\0\0\0\0\0\0\0\0\0", 9) => 0; + memcmp(buffer+18, "hhhh\0\0\0\0\0", 9) => 0; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_badblocks.toml b/ext/littlefs/tests/test_badblocks.toml new file mode 100644 index 0000000000..06967a678c --- /dev/null +++ b/ext/littlefs/tests/test_badblocks.toml @@ -0,0 +1,241 @@ +# bad blocks with block cycles should be tested in test_relocations +if = 'LFS_BLOCK_CYCLES == -1' + +[[case]] # single bad blocks +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_ERASE_CYCLES = 0xffffffff +define.LFS_ERASE_VALUE = [0x00, 0xff, -1] +define.LFS_BADBLOCK_BEHAVIOR = [ + 'LFS_TESTBD_BADBLOCK_PROGERROR', + 'LFS_TESTBD_BADBLOCK_ERASEERROR', + 'LFS_TESTBD_BADBLOCK_READERROR', + 'LFS_TESTBD_BADBLOCK_PROGNOOP', + 'LFS_TESTBD_BADBLOCK_ERASENOOP', +] +define.NAMEMULT = 64 +define.FILEMULT = 1 +code = ''' + for (lfs_block_t badblock = 2; badblock < LFS_BLOCK_COUNT; badblock++) { + lfs_testbd_setwear(&cfg, badblock-1, 0) => 0; + lfs_testbd_setwear(&cfg, badblock, 0xffffffff) => 0; + + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 1; i < 10; i++) { + for (int j = 0; j < NAMEMULT; j++) { + buffer[j] = '0'+i; + } + buffer[NAMEMULT] = '\0'; + lfs_mkdir(&lfs, (char*)buffer) => 0; + + buffer[NAMEMULT] = '/'; + for (int j = 0; j < NAMEMULT; j++) { + buffer[j+NAMEMULT+1] = '0'+i; + } + buffer[2*NAMEMULT+1] = '\0'; + lfs_file_open(&lfs, &file, (char*)buffer, + LFS_O_WRONLY | LFS_O_CREAT) => 0; + + size = NAMEMULT; + for (int j = 0; j < i*FILEMULT; j++) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 1; i < 10; i++) { + for (int j = 0; j < NAMEMULT; j++) { + buffer[j] = '0'+i; + } + buffer[NAMEMULT] = '\0'; + lfs_stat(&lfs, (char*)buffer, &info) => 0; + info.type => LFS_TYPE_DIR; + + buffer[NAMEMULT] = '/'; + for (int j = 0; j < NAMEMULT; j++) { + buffer[j+NAMEMULT+1] = '0'+i; + } + buffer[2*NAMEMULT+1] = '\0'; + lfs_file_open(&lfs, &file, (char*)buffer, LFS_O_RDONLY) => 0; + + size = NAMEMULT; + for (int j = 0; j < i*FILEMULT; j++) { + uint8_t rbuffer[1024]; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(buffer, rbuffer, size) => 0; + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + } +''' + +[[case]] # region corruption (causes cascading failures) +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_ERASE_CYCLES = 0xffffffff +define.LFS_ERASE_VALUE = [0x00, 0xff, -1] +define.LFS_BADBLOCK_BEHAVIOR = [ + 'LFS_TESTBD_BADBLOCK_PROGERROR', + 'LFS_TESTBD_BADBLOCK_ERASEERROR', + 'LFS_TESTBD_BADBLOCK_READERROR', + 'LFS_TESTBD_BADBLOCK_PROGNOOP', + 'LFS_TESTBD_BADBLOCK_ERASENOOP', +] +define.NAMEMULT = 64 +define.FILEMULT = 1 +code = ''' + for (lfs_block_t i = 0; i < (LFS_BLOCK_COUNT-2)/2; i++) { + lfs_testbd_setwear(&cfg, i+2, 0xffffffff) => 0; + } + + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 1; i < 10; i++) { + for (int j = 0; j < NAMEMULT; j++) { + buffer[j] = '0'+i; + } + buffer[NAMEMULT] = '\0'; + lfs_mkdir(&lfs, (char*)buffer) => 0; + + buffer[NAMEMULT] = '/'; + for (int j = 0; j < NAMEMULT; j++) { + buffer[j+NAMEMULT+1] = '0'+i; + } + buffer[2*NAMEMULT+1] = '\0'; + lfs_file_open(&lfs, &file, (char*)buffer, + LFS_O_WRONLY | LFS_O_CREAT) => 0; + + size = NAMEMULT; + for (int j = 0; j < i*FILEMULT; j++) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 1; i < 10; i++) { + for (int j = 0; j < NAMEMULT; j++) { + buffer[j] = '0'+i; + } + buffer[NAMEMULT] = '\0'; + lfs_stat(&lfs, (char*)buffer, &info) => 0; + info.type => LFS_TYPE_DIR; + + buffer[NAMEMULT] = '/'; + for (int j = 0; j < NAMEMULT; j++) { + buffer[j+NAMEMULT+1] = '0'+i; + } + buffer[2*NAMEMULT+1] = '\0'; + lfs_file_open(&lfs, &file, (char*)buffer, LFS_O_RDONLY) => 0; + + size = NAMEMULT; + for (int j = 0; j < i*FILEMULT; j++) { + uint8_t rbuffer[1024]; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(buffer, rbuffer, size) => 0; + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # alternating corruption (causes cascading failures) +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_ERASE_CYCLES = 0xffffffff +define.LFS_ERASE_VALUE = [0x00, 0xff, -1] +define.LFS_BADBLOCK_BEHAVIOR = [ + 'LFS_TESTBD_BADBLOCK_PROGERROR', + 'LFS_TESTBD_BADBLOCK_ERASEERROR', + 'LFS_TESTBD_BADBLOCK_READERROR', + 'LFS_TESTBD_BADBLOCK_PROGNOOP', + 'LFS_TESTBD_BADBLOCK_ERASENOOP', +] +define.NAMEMULT = 64 +define.FILEMULT = 1 +code = ''' + for (lfs_block_t i = 0; i < (LFS_BLOCK_COUNT-2)/2; i++) { + lfs_testbd_setwear(&cfg, (2*i) + 2, 0xffffffff) => 0; + } + + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 1; i < 10; i++) { + for (int j = 0; j < NAMEMULT; j++) { + buffer[j] = '0'+i; + } + buffer[NAMEMULT] = '\0'; + lfs_mkdir(&lfs, (char*)buffer) => 0; + + buffer[NAMEMULT] = '/'; + for (int j = 0; j < NAMEMULT; j++) { + buffer[j+NAMEMULT+1] = '0'+i; + } + buffer[2*NAMEMULT+1] = '\0'; + lfs_file_open(&lfs, &file, (char*)buffer, + LFS_O_WRONLY | LFS_O_CREAT) => 0; + + size = NAMEMULT; + for (int j = 0; j < i*FILEMULT; j++) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 1; i < 10; i++) { + for (int j = 0; j < NAMEMULT; j++) { + buffer[j] = '0'+i; + } + buffer[NAMEMULT] = '\0'; + lfs_stat(&lfs, (char*)buffer, &info) => 0; + info.type => LFS_TYPE_DIR; + + buffer[NAMEMULT] = '/'; + for (int j = 0; j < NAMEMULT; j++) { + buffer[j+NAMEMULT+1] = '0'+i; + } + buffer[2*NAMEMULT+1] = '\0'; + lfs_file_open(&lfs, &file, (char*)buffer, LFS_O_RDONLY) => 0; + + size = NAMEMULT; + for (int j = 0; j < i*FILEMULT; j++) { + uint8_t rbuffer[1024]; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(buffer, rbuffer, size) => 0; + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +# other corner cases +[[case]] # bad superblocks (corrupt 1 or 0) +define.LFS_ERASE_CYCLES = 0xffffffff +define.LFS_ERASE_VALUE = [0x00, 0xff, -1] +define.LFS_BADBLOCK_BEHAVIOR = [ + 'LFS_TESTBD_BADBLOCK_PROGERROR', + 'LFS_TESTBD_BADBLOCK_ERASEERROR', + 'LFS_TESTBD_BADBLOCK_READERROR', + 'LFS_TESTBD_BADBLOCK_PROGNOOP', + 'LFS_TESTBD_BADBLOCK_ERASENOOP', +] +code = ''' + lfs_testbd_setwear(&cfg, 0, 0xffffffff) => 0; + lfs_testbd_setwear(&cfg, 1, 0xffffffff) => 0; + + lfs_format(&lfs, &cfg) => LFS_ERR_NOSPC; + lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT; +''' diff --git a/ext/littlefs/tests/test_dirs.toml b/ext/littlefs/tests/test_dirs.toml new file mode 100644 index 0000000000..270f4f8e91 --- /dev/null +++ b/ext/littlefs/tests/test_dirs.toml @@ -0,0 +1,838 @@ +[[case]] # root +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # many directory creation +define.N = 'range(0, 100, 3)' +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "dir%03d", i); + lfs_mkdir(&lfs, path) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "dir%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # many directory removal +define.N = 'range(3, 100, 11)' +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "removeme%03d", i); + lfs_mkdir(&lfs, path) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "removeme%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "removeme%03d", i); + lfs_remove(&lfs, path) => 0; + } + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # many directory rename +define.N = 'range(3, 100, 11)' +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "test%03d", i); + lfs_mkdir(&lfs, path) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "test%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + char oldpath[128]; + char newpath[128]; + sprintf(oldpath, "test%03d", i); + sprintf(newpath, "tedd%03d", i); + lfs_rename(&lfs, oldpath, newpath) => 0; + } + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "tedd%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); +''' + +[[case]] # reentrant many directory creation/rename/removal +define.N = [5, 11] +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + for (int i = 0; i < N; i++) { + sprintf(path, "hi%03d", i); + err = lfs_mkdir(&lfs, path); + assert(err == 0 || err == LFS_ERR_EXIST); + } + + for (int i = 0; i < N; i++) { + sprintf(path, "hello%03d", i); + err = lfs_remove(&lfs, path); + assert(err == 0 || err == LFS_ERR_NOENT); + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "hi%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + for (int i = 0; i < N; i++) { + char oldpath[128]; + char newpath[128]; + sprintf(oldpath, "hi%03d", i); + sprintf(newpath, "hello%03d", i); + // YES this can overwrite an existing newpath + lfs_rename(&lfs, oldpath, newpath) => 0; + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "hello%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + for (int i = 0; i < N; i++) { + sprintf(path, "hello%03d", i); + lfs_remove(&lfs, path) => 0; + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # file creation +define.N = 'range(3, 100, 11)' +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "file%03d", i); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "file%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); +''' + +[[case]] # file removal +define.N = 'range(0, 100, 3)' +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "removeme%03d", i); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "removeme%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "removeme%03d", i); + lfs_remove(&lfs, path) => 0; + } + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # file rename +define.N = 'range(0, 100, 3)' +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "test%03d", i); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "test%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + char oldpath[128]; + char newpath[128]; + sprintf(oldpath, "test%03d", i); + sprintf(newpath, "tedd%03d", i); + lfs_rename(&lfs, oldpath, newpath) => 0; + } + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "tedd%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); +''' + +[[case]] # reentrant file creation/rename/removal +define.N = [5, 25] +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + for (int i = 0; i < N; i++) { + sprintf(path, "hi%03d", i); + lfs_file_open(&lfs, &file, path, LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_close(&lfs, &file) => 0; + } + + for (int i = 0; i < N; i++) { + sprintf(path, "hello%03d", i); + err = lfs_remove(&lfs, path); + assert(err == 0 || err == LFS_ERR_NOENT); + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "hi%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + for (int i = 0; i < N; i++) { + char oldpath[128]; + char newpath[128]; + sprintf(oldpath, "hi%03d", i); + sprintf(newpath, "hello%03d", i); + // YES this can overwrite an existing newpath + lfs_rename(&lfs, oldpath, newpath) => 0; + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "hello%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + for (int i = 0; i < N; i++) { + sprintf(path, "hello%03d", i); + lfs_remove(&lfs, path) => 0; + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # nested directories +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "potato") => 0; + lfs_file_open(&lfs, &file, "burito", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "potato/baked") => 0; + lfs_mkdir(&lfs, "potato/sweet") => 0; + lfs_mkdir(&lfs, "potato/fried") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "potato") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "baked") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "fried") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "sweet") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + + // try removing? + lfs_mount(&lfs, &cfg) => 0; + lfs_remove(&lfs, "potato") => LFS_ERR_NOTEMPTY; + lfs_unmount(&lfs) => 0; + + // try renaming? + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "potato", "coldpotato") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "coldpotato", "warmpotato") => 0; + lfs_rename(&lfs, "warmpotato", "hotpotato") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_remove(&lfs, "potato") => LFS_ERR_NOENT; + lfs_remove(&lfs, "coldpotato") => LFS_ERR_NOENT; + lfs_remove(&lfs, "warmpotato") => LFS_ERR_NOENT; + lfs_remove(&lfs, "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_unmount(&lfs) => 0; + + // try cross-directory renaming + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "coldpotato") => 0; + lfs_rename(&lfs, "hotpotato/baked", "coldpotato/baked") => 0; + lfs_rename(&lfs, "coldpotato", "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_remove(&lfs, "coldpotato") => LFS_ERR_NOTEMPTY; + lfs_remove(&lfs, "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_rename(&lfs, "hotpotato/fried", "coldpotato/fried") => 0; + lfs_rename(&lfs, "coldpotato", "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_remove(&lfs, "coldpotato") => LFS_ERR_NOTEMPTY; + lfs_remove(&lfs, "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_rename(&lfs, "hotpotato/sweet", "coldpotato/sweet") => 0; + lfs_rename(&lfs, "coldpotato", "hotpotato") => 0; + lfs_remove(&lfs, "coldpotato") => LFS_ERR_NOENT; + lfs_remove(&lfs, "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "hotpotato") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "baked") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "fried") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "sweet") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + + // final remove + lfs_mount(&lfs, &cfg) => 0; + lfs_remove(&lfs, "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_remove(&lfs, "hotpotato/baked") => 0; + lfs_remove(&lfs, "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_remove(&lfs, "hotpotato/fried") => 0; + lfs_remove(&lfs, "hotpotato") => LFS_ERR_NOTEMPTY; + lfs_remove(&lfs, "hotpotato/sweet") => 0; + lfs_remove(&lfs, "hotpotato") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + info.type => LFS_TYPE_DIR; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "burito") == 0); + info.type => LFS_TYPE_REG; + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # recursive remove +define.N = [10, 100] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "prickly-pear") => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "prickly-pear/cactus%03d", i); + lfs_mkdir(&lfs, path) => 0; + } + lfs_dir_open(&lfs, &dir, "prickly-pear") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "cactus%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs); + + lfs_mount(&lfs, &cfg) => 0; + lfs_remove(&lfs, "prickly-pear") => LFS_ERR_NOTEMPTY; + + lfs_dir_open(&lfs, &dir, "prickly-pear") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + for (int i = 0; i < N; i++) { + sprintf(path, "cactus%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, path) == 0); + sprintf(path, "prickly-pear/%s", info.name); + lfs_remove(&lfs, path) => 0; + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_remove(&lfs, "prickly-pear") => 0; + lfs_remove(&lfs, "prickly-pear") => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_remove(&lfs, "prickly-pear") => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # other error cases +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "potato") => 0; + lfs_file_open(&lfs, &file, "burito", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + + lfs_mkdir(&lfs, "potato") => LFS_ERR_EXIST; + lfs_mkdir(&lfs, "burito") => LFS_ERR_EXIST; + lfs_file_open(&lfs, &file, "burito", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_EXIST; + lfs_file_open(&lfs, &file, "potato", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_EXIST; + lfs_dir_open(&lfs, &dir, "tomato") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "burito") => LFS_ERR_NOTDIR; + lfs_file_open(&lfs, &file, "tomato", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "potato", LFS_O_RDONLY) => LFS_ERR_ISDIR; + lfs_file_open(&lfs, &file, "tomato", LFS_O_WRONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "potato", LFS_O_WRONLY) => LFS_ERR_ISDIR; + lfs_file_open(&lfs, &file, "potato", + LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR; + + lfs_mkdir(&lfs, "/") => LFS_ERR_EXIST; + lfs_file_open(&lfs, &file, "/", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_EXIST; + lfs_file_open(&lfs, &file, "/", LFS_O_RDONLY) => LFS_ERR_ISDIR; + lfs_file_open(&lfs, &file, "/", LFS_O_WRONLY) => LFS_ERR_ISDIR; + lfs_file_open(&lfs, &file, "/", + LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR; + + // check that errors did not corrupt directory + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, "burito") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "potato") == 0); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_unmount(&lfs) => 0; + + // or on disk + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, ".") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "..") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_REG); + assert(strcmp(info.name, "burito") == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(info.type == LFS_TYPE_DIR); + assert(strcmp(info.name, "potato") == 0); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # directory seek +define.COUNT = [4, 128, 132] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "hello") => 0; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "hello/kitty%03d", i); + lfs_mkdir(&lfs, path) => 0; + } + lfs_unmount(&lfs) => 0; + + for (int j = 2; j < COUNT; j++) { + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "hello") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_soff_t pos; + for (int i = 0; i < j; i++) { + sprintf(path, "kitty%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + pos = lfs_dir_tell(&lfs, &dir); + assert(pos >= 0); + } + + lfs_dir_seek(&lfs, &dir, pos) => 0; + sprintf(path, "kitty%03d", j); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_dir_rewind(&lfs, &dir) => 0; + sprintf(path, "kitty%03d", 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_dir_seek(&lfs, &dir, pos) => 0; + sprintf(path, "kitty%03d", j); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + } +''' + +[[case]] # root seek +define.COUNT = [4, 128, 132] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "hi%03d", i); + lfs_mkdir(&lfs, path) => 0; + } + lfs_unmount(&lfs) => 0; + + for (int j = 2; j < COUNT; j++) { + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_soff_t pos; + for (int i = 0; i < j; i++) { + sprintf(path, "hi%03d", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + pos = lfs_dir_tell(&lfs, &dir); + assert(pos >= 0); + } + + lfs_dir_seek(&lfs, &dir, pos) => 0; + sprintf(path, "hi%03d", j); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_dir_rewind(&lfs, &dir) => 0; + sprintf(path, "hi%03d", 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_dir_seek(&lfs, &dir, pos) => 0; + sprintf(path, "hi%03d", j); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + } +''' + diff --git a/ext/littlefs/tests/test_entries.toml b/ext/littlefs/tests/test_entries.toml new file mode 100644 index 0000000000..81e175f54d --- /dev/null +++ b/ext/littlefs/tests/test_entries.toml @@ -0,0 +1,611 @@ +# These tests are for some specific corner cases with neighboring inline files. +# Note that these tests are intended for 512 byte inline sizes. They should +# still pass with other inline sizes but wouldn't be testing anything. + +define.LFS_CACHE_SIZE = 512 +if = 'LFS_CACHE_SIZE % LFS_PROG_SIZE == 0 && LFS_CACHE_SIZE == 512' + +[[case]] # entry grow test +code = ''' + uint8_t wbuffer[1024]; + uint8_t rbuffer[1024]; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // write hi0 20 + sprintf(path, "hi0"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi2 20 + sprintf(path, "hi2"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi3 20 + sprintf(path, "hi3"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // write hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi0 20 + sprintf(path, "hi0"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi2 20 + sprintf(path, "hi2"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi3 20 + sprintf(path, "hi3"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # entry shrink test +code = ''' + uint8_t wbuffer[1024]; + uint8_t rbuffer[1024]; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // write hi0 20 + sprintf(path, "hi0"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi2 20 + sprintf(path, "hi2"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi3 20 + sprintf(path, "hi3"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // write hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi0 20 + sprintf(path, "hi0"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi2 20 + sprintf(path, "hi2"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi3 20 + sprintf(path, "hi3"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # entry spill test +code = ''' + uint8_t wbuffer[1024]; + uint8_t rbuffer[1024]; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // write hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # entry push spill test +code = ''' + uint8_t wbuffer[1024]; + uint8_t rbuffer[1024]; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // write hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // write hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # entry push spill two test +code = ''' + uint8_t wbuffer[1024]; + uint8_t rbuffer[1024]; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // write hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi4 200 + sprintf(path, "hi4"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi1 20 + sprintf(path, "hi1"); size = 20; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // write hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + // read hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi4 200 + sprintf(path, "hi4"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # entry drop test +code = ''' + uint8_t wbuffer[1024]; + uint8_t rbuffer[1024]; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // write hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi1 200 + sprintf(path, "hi1"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + // write hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_close(&lfs, &file) => 0; + + lfs_remove(&lfs, "hi1") => 0; + lfs_stat(&lfs, "hi1", &info) => LFS_ERR_NOENT; + // read hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi2 200 + sprintf(path, "hi2"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_remove(&lfs, "hi2") => 0; + lfs_stat(&lfs, "hi2", &info) => LFS_ERR_NOENT; + // read hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + // read hi3 200 + sprintf(path, "hi3"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_remove(&lfs, "hi3") => 0; + lfs_stat(&lfs, "hi3", &info) => LFS_ERR_NOENT; + // read hi0 200 + sprintf(path, "hi0"); size = 200; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => size; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_remove(&lfs, "hi0") => 0; + lfs_stat(&lfs, "hi0", &info) => LFS_ERR_NOENT; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # create too big +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(path, 'm', 200); + path[200] = '\0'; + + size = 400; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + uint8_t wbuffer[1024]; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_close(&lfs, &file) => 0; + + size = 400; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + uint8_t rbuffer[1024]; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # resize too big +code = ''' + lfs_format(&lfs, &cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + memset(path, 'm', 200); + path[200] = '\0'; + + size = 40; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + uint8_t wbuffer[1024]; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_close(&lfs, &file) => 0; + + size = 40; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + uint8_t rbuffer[1024]; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + + size = 400; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + memset(wbuffer, 'c', size); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_close(&lfs, &file) => 0; + + size = 400; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + memcmp(rbuffer, wbuffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_evil.toml b/ext/littlefs/tests/test_evil.toml new file mode 100644 index 0000000000..920d3a0e96 --- /dev/null +++ b/ext/littlefs/tests/test_evil.toml @@ -0,0 +1,288 @@ +# Tests for recovering from conditions which shouldn't normally +# happen during normal operation of littlefs + +# invalid pointer tests (outside of block_count) + +[[case]] # invalid tail-pointer test +define.TAIL_TYPE = ['LFS_TYPE_HARDTAIL', 'LFS_TYPE_SOFTTAIL'] +define.INVALSET = [0x3, 0x1, 0x2] +in = "lfs.c" +code = ''' + // create littlefs + lfs_format(&lfs, &cfg) => 0; + + // change tail-pointer to invalid pointers + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + lfs_dir_commit(&lfs, &mdir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_HARDTAIL, 0x3ff, 8), + (lfs_block_t[2]){ + (INVALSET & 0x1) ? 0xcccccccc : 0, + (INVALSET & 0x2) ? 0xcccccccc : 0}})) => 0; + lfs_deinit(&lfs) => 0; + + // test that mount fails gracefully + lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT; +''' + +[[case]] # invalid dir pointer test +define.INVALSET = [0x3, 0x1, 0x2] +in = "lfs.c" +code = ''' + // create littlefs + lfs_format(&lfs, &cfg) => 0; + // make a dir + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "dir_here") => 0; + lfs_unmount(&lfs) => 0; + + // change the dir pointer to be invalid + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + // make sure id 1 == our directory + lfs_dir_get(&lfs, &mdir, + LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_NAME, 1, strlen("dir_here")), buffer) + => LFS_MKTAG(LFS_TYPE_DIR, 1, strlen("dir_here")); + assert(memcmp((char*)buffer, "dir_here", strlen("dir_here")) == 0); + // change dir pointer + lfs_dir_commit(&lfs, &mdir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_DIRSTRUCT, 1, 8), + (lfs_block_t[2]){ + (INVALSET & 0x1) ? 0xcccccccc : 0, + (INVALSET & 0x2) ? 0xcccccccc : 0}})) => 0; + lfs_deinit(&lfs) => 0; + + // test that accessing our bad dir fails, note there's a number + // of ways to access the dir, some can fail, but some don't + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "dir_here", &info) => 0; + assert(strcmp(info.name, "dir_here") == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_dir_open(&lfs, &dir, "dir_here") => LFS_ERR_CORRUPT; + lfs_stat(&lfs, "dir_here/file_here", &info) => LFS_ERR_CORRUPT; + lfs_dir_open(&lfs, &dir, "dir_here/dir_here") => LFS_ERR_CORRUPT; + lfs_file_open(&lfs, &file, "dir_here/file_here", + LFS_O_RDONLY) => LFS_ERR_CORRUPT; + lfs_file_open(&lfs, &file, "dir_here/file_here", + LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_CORRUPT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # invalid file pointer test +in = "lfs.c" +define.SIZE = [10, 1000, 100000] # faked file size +code = ''' + // create littlefs + lfs_format(&lfs, &cfg) => 0; + // make a file + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "file_here", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // change the file pointer to be invalid + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + // make sure id 1 == our file + lfs_dir_get(&lfs, &mdir, + LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_NAME, 1, strlen("file_here")), buffer) + => LFS_MKTAG(LFS_TYPE_REG, 1, strlen("file_here")); + assert(memcmp((char*)buffer, "file_here", strlen("file_here")) == 0); + // change file pointer + lfs_dir_commit(&lfs, &mdir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_CTZSTRUCT, 1, sizeof(struct lfs_ctz)), + &(struct lfs_ctz){0xcccccccc, lfs_tole32(SIZE)}})) => 0; + lfs_deinit(&lfs) => 0; + + // test that accessing our bad file fails, note there's a number + // of ways to access the dir, some can fail, but some don't + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "file_here", &info) => 0; + assert(strcmp(info.name, "file_here") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == SIZE); + + lfs_file_open(&lfs, &file, "file_here", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, SIZE) => LFS_ERR_CORRUPT; + lfs_file_close(&lfs, &file) => 0; + + // any allocs that traverse CTZ must unfortunately must fail + if (SIZE > 2*LFS_BLOCK_SIZE) { + lfs_mkdir(&lfs, "dir_here") => LFS_ERR_CORRUPT; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # invalid pointer in CTZ skip-list test +define.SIZE = ['2*LFS_BLOCK_SIZE', '3*LFS_BLOCK_SIZE', '4*LFS_BLOCK_SIZE'] +in = "lfs.c" +code = ''' + // create littlefs + lfs_format(&lfs, &cfg) => 0; + // make a file + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "file_here", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + for (int i = 0; i < SIZE; i++) { + char c = 'c'; + lfs_file_write(&lfs, &file, &c, 1) => 1; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + // change pointer in CTZ skip-list to be invalid + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + // make sure id 1 == our file and get our CTZ structure + lfs_dir_get(&lfs, &mdir, + LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_NAME, 1, strlen("file_here")), buffer) + => LFS_MKTAG(LFS_TYPE_REG, 1, strlen("file_here")); + assert(memcmp((char*)buffer, "file_here", strlen("file_here")) == 0); + struct lfs_ctz ctz; + lfs_dir_get(&lfs, &mdir, + LFS_MKTAG(0x700, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_STRUCT, 1, sizeof(struct lfs_ctz)), &ctz) + => LFS_MKTAG(LFS_TYPE_CTZSTRUCT, 1, sizeof(struct lfs_ctz)); + lfs_ctz_fromle32(&ctz); + // rewrite block to contain bad pointer + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, ctz.head, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + uint32_t bad = lfs_tole32(0xcccccccc); + memcpy(&bbuffer[0], &bad, sizeof(bad)); + memcpy(&bbuffer[4], &bad, sizeof(bad)); + cfg.erase(&cfg, ctz.head) => 0; + cfg.prog(&cfg, ctz.head, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + lfs_deinit(&lfs) => 0; + + // test that accessing our bad file fails, note there's a number + // of ways to access the dir, some can fail, but some don't + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "file_here", &info) => 0; + assert(strcmp(info.name, "file_here") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == SIZE); + + lfs_file_open(&lfs, &file, "file_here", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, SIZE) => LFS_ERR_CORRUPT; + lfs_file_close(&lfs, &file) => 0; + + // any allocs that traverse CTZ must unfortunately must fail + if (SIZE > 2*LFS_BLOCK_SIZE) { + lfs_mkdir(&lfs, "dir_here") => LFS_ERR_CORRUPT; + } + lfs_unmount(&lfs) => 0; +''' + + +[[case]] # invalid gstate pointer +define.INVALSET = [0x3, 0x1, 0x2] +in = "lfs.c" +code = ''' + // create littlefs + lfs_format(&lfs, &cfg) => 0; + + // create an invalid gstate + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + lfs_fs_prepmove(&lfs, 1, (lfs_block_t [2]){ + (INVALSET & 0x1) ? 0xcccccccc : 0, + (INVALSET & 0x2) ? 0xcccccccc : 0}); + lfs_dir_commit(&lfs, &mdir, NULL, 0) => 0; + lfs_deinit(&lfs) => 0; + + // test that mount fails gracefully + // mount may not fail, but our first alloc should fail when + // we try to fix the gstate + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "should_fail") => LFS_ERR_CORRUPT; + lfs_unmount(&lfs) => 0; +''' + +# cycle detection/recovery tests + +[[case]] # metadata-pair threaded-list loop test +in = "lfs.c" +code = ''' + // create littlefs + lfs_format(&lfs, &cfg) => 0; + + // change tail-pointer to point to ourself + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + lfs_dir_commit(&lfs, &mdir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_HARDTAIL, 0x3ff, 8), + (lfs_block_t[2]){0, 1}})) => 0; + lfs_deinit(&lfs) => 0; + + // test that mount fails gracefully + lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT; +''' + +[[case]] # metadata-pair threaded-list 2-length loop test +in = "lfs.c" +code = ''' + // create littlefs with child dir + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "child") => 0; + lfs_unmount(&lfs) => 0; + + // find child + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_block_t pair[2]; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + lfs_dir_get(&lfs, &mdir, + LFS_MKTAG(0x7ff, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_DIRSTRUCT, 1, sizeof(pair)), pair) + => LFS_MKTAG(LFS_TYPE_DIRSTRUCT, 1, sizeof(pair)); + lfs_pair_fromle32(pair); + // change tail-pointer to point to root + lfs_dir_fetch(&lfs, &mdir, pair) => 0; + lfs_dir_commit(&lfs, &mdir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_HARDTAIL, 0x3ff, 8), + (lfs_block_t[2]){0, 1}})) => 0; + lfs_deinit(&lfs) => 0; + + // test that mount fails gracefully + lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT; +''' + +[[case]] # metadata-pair threaded-list 1-length child loop test +in = "lfs.c" +code = ''' + // create littlefs with child dir + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "child") => 0; + lfs_unmount(&lfs) => 0; + + // find child + lfs_init(&lfs, &cfg) => 0; + lfs_mdir_t mdir; + lfs_block_t pair[2]; + lfs_dir_fetch(&lfs, &mdir, (lfs_block_t[2]){0, 1}) => 0; + lfs_dir_get(&lfs, &mdir, + LFS_MKTAG(0x7ff, 0x3ff, 0), + LFS_MKTAG(LFS_TYPE_DIRSTRUCT, 1, sizeof(pair)), pair) + => LFS_MKTAG(LFS_TYPE_DIRSTRUCT, 1, sizeof(pair)); + lfs_pair_fromle32(pair); + // change tail-pointer to point to ourself + lfs_dir_fetch(&lfs, &mdir, pair) => 0; + lfs_dir_commit(&lfs, &mdir, LFS_MKATTRS( + {LFS_MKTAG(LFS_TYPE_HARDTAIL, 0x3ff, 8), pair})) => 0; + lfs_deinit(&lfs) => 0; + + // test that mount fails gracefully + lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT; +''' diff --git a/ext/littlefs/tests/test_exhaustion.toml b/ext/littlefs/tests/test_exhaustion.toml new file mode 100644 index 0000000000..569611c5ba --- /dev/null +++ b/ext/littlefs/tests/test_exhaustion.toml @@ -0,0 +1,465 @@ +[[case]] # test running a filesystem to exhaustion +define.LFS_ERASE_CYCLES = 10 +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_BLOCK_CYCLES = 'LFS_ERASE_CYCLES / 2' +define.LFS_BADBLOCK_BEHAVIOR = [ + 'LFS_TESTBD_BADBLOCK_PROGERROR', + 'LFS_TESTBD_BADBLOCK_ERASEERROR', + 'LFS_TESTBD_BADBLOCK_READERROR', + 'LFS_TESTBD_BADBLOCK_PROGNOOP', + 'LFS_TESTBD_BADBLOCK_ERASENOOP', +] +define.FILES = 10 +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "roadrunner") => 0; + lfs_unmount(&lfs) => 0; + + uint32_t cycle = 0; + while (true) { + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // chose name, roughly random seed, and random 2^n size + sprintf(path, "roadrunner/test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + lfs_ssize_t res = lfs_file_write(&lfs, &file, &c, 1); + assert(res == 1 || res == LFS_ERR_NOSPC); + if (res == LFS_ERR_NOSPC) { + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + if (err == LFS_ERR_NOSPC) { + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "roadrunner/test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + char r; + lfs_file_read(&lfs, &file, &r, 1) => 1; + assert(r == c); + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + cycle += 1; + } + +exhausted: + // should still be readable + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "roadrunner/test%d", i); + lfs_stat(&lfs, path, &info) => 0; + } + lfs_unmount(&lfs) => 0; + + LFS_WARN("completed %d cycles", cycle); +''' + +[[case]] # test running a filesystem to exhaustion + # which also requires expanding superblocks +define.LFS_ERASE_CYCLES = 10 +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_BLOCK_CYCLES = 'LFS_ERASE_CYCLES / 2' +define.LFS_BADBLOCK_BEHAVIOR = [ + 'LFS_TESTBD_BADBLOCK_PROGERROR', + 'LFS_TESTBD_BADBLOCK_ERASEERROR', + 'LFS_TESTBD_BADBLOCK_READERROR', + 'LFS_TESTBD_BADBLOCK_PROGNOOP', + 'LFS_TESTBD_BADBLOCK_ERASENOOP', +] +define.FILES = 10 +code = ''' + lfs_format(&lfs, &cfg) => 0; + + uint32_t cycle = 0; + while (true) { + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // chose name, roughly random seed, and random 2^n size + sprintf(path, "test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + lfs_ssize_t res = lfs_file_write(&lfs, &file, &c, 1); + assert(res == 1 || res == LFS_ERR_NOSPC); + if (res == LFS_ERR_NOSPC) { + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + if (err == LFS_ERR_NOSPC) { + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + char r; + lfs_file_read(&lfs, &file, &r, 1) => 1; + assert(r == c); + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + cycle += 1; + } + +exhausted: + // should still be readable + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "test%d", i); + lfs_stat(&lfs, path, &info) => 0; + } + lfs_unmount(&lfs) => 0; + + LFS_WARN("completed %d cycles", cycle); +''' + +# These are a sort of high-level litmus test for wear-leveling. One definition +# of wear-leveling is that increasing a block device's space translates directly +# into increasing the block devices lifetime. This is something we can actually +# check for. + +[[case]] # wear-level test running a filesystem to exhaustion +define.LFS_ERASE_CYCLES = 20 +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_BLOCK_CYCLES = 'LFS_ERASE_CYCLES / 2' +define.FILES = 10 +code = ''' + uint32_t run_cycles[2]; + const uint32_t run_block_count[2] = {LFS_BLOCK_COUNT/2, LFS_BLOCK_COUNT}; + + for (int run = 0; run < 2; run++) { + for (lfs_block_t b = 0; b < LFS_BLOCK_COUNT; b++) { + lfs_testbd_setwear(&cfg, b, + (b < run_block_count[run]) ? 0 : LFS_ERASE_CYCLES) => 0; + } + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "roadrunner") => 0; + lfs_unmount(&lfs) => 0; + + uint32_t cycle = 0; + while (true) { + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // chose name, roughly random seed, and random 2^n size + sprintf(path, "roadrunner/test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + lfs_ssize_t res = lfs_file_write(&lfs, &file, &c, 1); + assert(res == 1 || res == LFS_ERR_NOSPC); + if (res == LFS_ERR_NOSPC) { + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + if (err == LFS_ERR_NOSPC) { + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "roadrunner/test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + char r; + lfs_file_read(&lfs, &file, &r, 1) => 1; + assert(r == c); + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + cycle += 1; + } + +exhausted: + // should still be readable + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "roadrunner/test%d", i); + lfs_stat(&lfs, path, &info) => 0; + } + lfs_unmount(&lfs) => 0; + + run_cycles[run] = cycle; + LFS_WARN("completed %d blocks %d cycles", + run_block_count[run], run_cycles[run]); + } + + // check we increased the lifetime by 2x with ~10% error + LFS_ASSERT(run_cycles[1]*110/100 > 2*run_cycles[0]); +''' + +[[case]] # wear-level test + expanding superblock +define.LFS_ERASE_CYCLES = 20 +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_BLOCK_CYCLES = 'LFS_ERASE_CYCLES / 2' +define.FILES = 10 +code = ''' + uint32_t run_cycles[2]; + const uint32_t run_block_count[2] = {LFS_BLOCK_COUNT/2, LFS_BLOCK_COUNT}; + + for (int run = 0; run < 2; run++) { + for (lfs_block_t b = 0; b < LFS_BLOCK_COUNT; b++) { + lfs_testbd_setwear(&cfg, b, + (b < run_block_count[run]) ? 0 : LFS_ERASE_CYCLES) => 0; + } + + lfs_format(&lfs, &cfg) => 0; + + uint32_t cycle = 0; + while (true) { + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // chose name, roughly random seed, and random 2^n size + sprintf(path, "test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + lfs_ssize_t res = lfs_file_write(&lfs, &file, &c, 1); + assert(res == 1 || res == LFS_ERR_NOSPC); + if (res == LFS_ERR_NOSPC) { + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + if (err == LFS_ERR_NOSPC) { + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "test%d", i); + srand(cycle * i); + size = 1 << ((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + char r; + lfs_file_read(&lfs, &file, &r, 1) => 1; + assert(r == c); + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + cycle += 1; + } + +exhausted: + // should still be readable + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "test%d", i); + lfs_stat(&lfs, path, &info) => 0; + } + lfs_unmount(&lfs) => 0; + + run_cycles[run] = cycle; + LFS_WARN("completed %d blocks %d cycles", + run_block_count[run], run_cycles[run]); + } + + // check we increased the lifetime by 2x with ~10% error + LFS_ASSERT(run_cycles[1]*110/100 > 2*run_cycles[0]); +''' + +[[case]] # test that we wear blocks roughly evenly +define.LFS_ERASE_CYCLES = 0xffffffff +define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster +define.LFS_BLOCK_CYCLES = [5, 4, 3, 2, 1] +define.CYCLES = 100 +define.FILES = 10 +if = 'LFS_BLOCK_CYCLES < CYCLES/10' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "roadrunner") => 0; + lfs_unmount(&lfs) => 0; + + uint32_t cycle = 0; + while (cycle < CYCLES) { + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // chose name, roughly random seed, and random 2^n size + sprintf(path, "roadrunner/test%d", i); + srand(cycle * i); + size = 1 << 4; //((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + lfs_ssize_t res = lfs_file_write(&lfs, &file, &c, 1); + assert(res == 1 || res == LFS_ERR_NOSPC); + if (res == LFS_ERR_NOSPC) { + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + err = lfs_file_close(&lfs, &file); + assert(err == 0 || err == LFS_ERR_NOSPC); + if (err == LFS_ERR_NOSPC) { + lfs_unmount(&lfs) => 0; + goto exhausted; + } + } + + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "roadrunner/test%d", i); + srand(cycle * i); + size = 1 << 4; //((rand() % 10)+2); + + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + for (lfs_size_t j = 0; j < size; j++) { + char c = 'a' + (rand() % 26); + char r; + lfs_file_read(&lfs, &file, &r, 1) => 1; + assert(r == c); + } + + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + + cycle += 1; + } + +exhausted: + // should still be readable + lfs_mount(&lfs, &cfg) => 0; + for (uint32_t i = 0; i < FILES; i++) { + // check for errors + sprintf(path, "roadrunner/test%d", i); + lfs_stat(&lfs, path, &info) => 0; + } + lfs_unmount(&lfs) => 0; + + LFS_WARN("completed %d cycles", cycle); + + // check the wear on our block device + lfs_testbd_wear_t minwear = -1; + lfs_testbd_wear_t totalwear = 0; + lfs_testbd_wear_t maxwear = 0; + // skip 0 and 1 as superblock movement is intentionally avoided + for (lfs_block_t b = 2; b < LFS_BLOCK_COUNT; b++) { + lfs_testbd_wear_t wear = lfs_testbd_getwear(&cfg, b); + printf("%08x: wear %d\n", b, wear); + assert(wear >= 0); + if (wear < minwear) { + minwear = wear; + } + if (wear > maxwear) { + maxwear = wear; + } + totalwear += wear; + } + lfs_testbd_wear_t avgwear = totalwear / LFS_BLOCK_COUNT; + LFS_WARN("max wear: %d cycles", maxwear); + LFS_WARN("avg wear: %d cycles", totalwear / LFS_BLOCK_COUNT); + LFS_WARN("min wear: %d cycles", minwear); + + // find standard deviation^2 + lfs_testbd_wear_t dev2 = 0; + for (lfs_block_t b = 2; b < LFS_BLOCK_COUNT; b++) { + lfs_testbd_wear_t wear = lfs_testbd_getwear(&cfg, b); + assert(wear >= 0); + lfs_testbd_swear_t diff = wear - avgwear; + dev2 += diff*diff; + } + dev2 /= totalwear; + LFS_WARN("std dev^2: %d", dev2); + assert(dev2 < 8); +''' + diff --git a/ext/littlefs/tests/test_files.toml b/ext/littlefs/tests/test_files.toml new file mode 100644 index 0000000000..565e665bc9 --- /dev/null +++ b/ext/littlefs/tests/test_files.toml @@ -0,0 +1,486 @@ + +[[case]] # simple file test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "hello", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + size = strlen("Hello World!")+1; + strcpy((char*)buffer, "Hello World!"); + lfs_file_write(&lfs, &file, buffer, size) => size; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(strcmp((char*)buffer, "Hello World!") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # larger files +define.SIZE = [32, 8192, 262144, 0, 7, 8193] +define.CHUNKSIZE = [31, 16, 33, 1, 1023] +code = ''' + lfs_format(&lfs, &cfg) => 0; + + // write + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + srand(1); + for (lfs_size_t i = 0; i < SIZE; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // read + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE; + srand(1); + for (lfs_size_t i = 0; i < SIZE; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # rewriting files +define.SIZE1 = [32, 8192, 131072, 0, 7, 8193] +define.SIZE2 = [32, 8192, 131072, 0, 7, 8193] +define.CHUNKSIZE = [31, 16, 1] +code = ''' + lfs_format(&lfs, &cfg) => 0; + + // write + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + srand(1); + for (lfs_size_t i = 0; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // read + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE1; + srand(1); + for (lfs_size_t i = 0; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // rewrite + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_WRONLY) => 0; + srand(2); + for (lfs_size_t i = 0; i < SIZE2; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE2-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // read + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => lfs_max(SIZE1, SIZE2); + srand(2); + for (lfs_size_t i = 0; i < SIZE2; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE2-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + if (SIZE1 > SIZE2) { + srand(1); + for (lfs_size_t b = 0; b < SIZE2; b++) { + rand(); + } + for (lfs_size_t i = SIZE2; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # appending files +define.SIZE1 = [32, 8192, 131072, 0, 7, 8193] +define.SIZE2 = [32, 8192, 131072, 0, 7, 8193] +define.CHUNKSIZE = [31, 16, 1] +code = ''' + lfs_format(&lfs, &cfg) => 0; + + // write + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + srand(1); + for (lfs_size_t i = 0; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // read + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE1; + srand(1); + for (lfs_size_t i = 0; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // append + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_WRONLY | LFS_O_APPEND) => 0; + srand(2); + for (lfs_size_t i = 0; i < SIZE2; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE2-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // read + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE1 + SIZE2; + srand(1); + for (lfs_size_t i = 0; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + srand(2); + for (lfs_size_t i = 0; i < SIZE2; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE2-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # truncating files +define.SIZE1 = [32, 8192, 131072, 0, 7, 8193] +define.SIZE2 = [32, 8192, 131072, 0, 7, 8193] +define.CHUNKSIZE = [31, 16, 1] +code = ''' + lfs_format(&lfs, &cfg) => 0; + + // write + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + srand(1); + for (lfs_size_t i = 0; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // read + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE1; + srand(1); + for (lfs_size_t i = 0; i < SIZE1; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE1-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // truncate + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_WRONLY | LFS_O_TRUNC) => 0; + srand(2); + for (lfs_size_t i = 0; i < SIZE2; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE2-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // read + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE2; + srand(2); + for (lfs_size_t i = 0; i < SIZE2; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE2-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant file writing +define.SIZE = [32, 0, 7, 2049] +define.CHUNKSIZE = [31, 16, 65] +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + err = lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY); + assert(err == LFS_ERR_NOENT || err == 0); + if (err == 0) { + // can only be 0 (new file) or full size + size = lfs_file_size(&lfs, &file); + assert(size == 0 || size == SIZE); + lfs_file_close(&lfs, &file) => 0; + } + + // write + lfs_file_open(&lfs, &file, "avacado", LFS_O_WRONLY | LFS_O_CREAT) => 0; + srand(1); + for (lfs_size_t i = 0; i < SIZE; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + } + lfs_file_close(&lfs, &file) => 0; + + // read + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE; + srand(1); + for (lfs_size_t i = 0; i < SIZE; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant file writing with syncs +define = [ + # append (O(n)) + {MODE='LFS_O_APPEND', SIZE=[32, 0, 7, 2049], CHUNKSIZE=[31, 16, 65]}, + # truncate (O(n^2)) + {MODE='LFS_O_TRUNC', SIZE=[32, 0, 7, 200], CHUNKSIZE=[31, 16, 65]}, + # rewrite (O(n^2)) + {MODE=0, SIZE=[32, 0, 7, 200], CHUNKSIZE=[31, 16, 65]}, +] +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + err = lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY); + assert(err == LFS_ERR_NOENT || err == 0); + if (err == 0) { + // with syncs we could be any size, but it at least must be valid data + size = lfs_file_size(&lfs, &file); + assert(size <= SIZE); + srand(1); + for (lfs_size_t i = 0; i < size; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, size-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_close(&lfs, &file) => 0; + } + + // write + lfs_file_open(&lfs, &file, "avacado", + LFS_O_WRONLY | LFS_O_CREAT | MODE) => 0; + size = lfs_file_size(&lfs, &file); + assert(size <= SIZE); + srand(1); + lfs_size_t skip = (MODE == LFS_O_APPEND) ? size : 0; + for (lfs_size_t b = 0; b < skip; b++) { + rand(); + } + for (lfs_size_t i = skip; i < SIZE; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE-i); + for (lfs_size_t b = 0; b < chunk; b++) { + buffer[b] = rand() & 0xff; + } + lfs_file_write(&lfs, &file, buffer, chunk) => chunk; + lfs_file_sync(&lfs, &file) => 0; + } + lfs_file_close(&lfs, &file) => 0; + + // read + lfs_file_open(&lfs, &file, "avacado", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => SIZE; + srand(1); + for (lfs_size_t i = 0; i < SIZE; i += CHUNKSIZE) { + lfs_size_t chunk = lfs_min(CHUNKSIZE, SIZE-i); + lfs_file_read(&lfs, &file, buffer, chunk) => chunk; + for (lfs_size_t b = 0; b < chunk; b++) { + assert(buffer[b] == (rand() & 0xff)); + } + } + lfs_file_read(&lfs, &file, buffer, CHUNKSIZE) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # many files +define.N = 300 +code = ''' + lfs_format(&lfs, &cfg) => 0; + // create N files of 7 bytes + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "file_%03d", i); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + char wbuffer[1024]; + size = 7; + snprintf(wbuffer, size, "Hi %03d", i); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_close(&lfs, &file) => 0; + + char rbuffer[1024]; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + assert(strcmp(rbuffer, wbuffer) == 0); + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # many files with power cycle +define.N = 300 +code = ''' + lfs_format(&lfs, &cfg) => 0; + // create N files of 7 bytes + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + sprintf(path, "file_%03d", i); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + char wbuffer[1024]; + size = 7; + snprintf(wbuffer, size, "Hi %03d", i); + lfs_file_write(&lfs, &file, wbuffer, size) => size; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + char rbuffer[1024]; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + assert(strcmp(rbuffer, wbuffer) == 0); + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # many files with power loss +define.N = 300 +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + // create N files of 7 bytes + for (int i = 0; i < N; i++) { + sprintf(path, "file_%03d", i); + err = lfs_file_open(&lfs, &file, path, LFS_O_WRONLY | LFS_O_CREAT); + char wbuffer[1024]; + size = 7; + snprintf(wbuffer, size, "Hi %03d", i); + if ((lfs_size_t)lfs_file_size(&lfs, &file) != size) { + lfs_file_write(&lfs, &file, wbuffer, size) => size; + } + lfs_file_close(&lfs, &file) => 0; + + char rbuffer[1024]; + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, rbuffer, size) => size; + assert(strcmp(rbuffer, wbuffer) == 0); + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_interspersed.toml b/ext/littlefs/tests/test_interspersed.toml new file mode 100644 index 0000000000..87a05780f5 --- /dev/null +++ b/ext/littlefs/tests/test_interspersed.toml @@ -0,0 +1,244 @@ + +[[case]] # interspersed file test +define.SIZE = [10, 100] +define.FILES = [4, 10, 26] +code = ''' + lfs_file_t files[FILES]; + const char alphas[] = "abcdefghijklmnopqrstuvwxyz"; + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + for (int j = 0; j < FILES; j++) { + sprintf(path, "%c", alphas[j]); + lfs_file_open(&lfs, &files[j], path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + } + + for (int i = 0; i < SIZE; i++) { + for (int j = 0; j < FILES; j++) { + lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1; + } + } + + for (int j = 0; j < FILES; j++) { + lfs_file_close(&lfs, &files[j]); + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + for (int j = 0; j < FILES; j++) { + sprintf(path, "%c", alphas[j]); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == SIZE); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + for (int j = 0; j < FILES; j++) { + sprintf(path, "%c", alphas[j]); + lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0; + } + + for (int i = 0; i < 10; i++) { + for (int j = 0; j < FILES; j++) { + lfs_file_read(&lfs, &files[j], buffer, 1) => 1; + assert(buffer[0] == alphas[j]); + } + } + + for (int j = 0; j < FILES; j++) { + lfs_file_close(&lfs, &files[j]); + } + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # interspersed remove file test +define.SIZE = [10, 100] +define.FILES = [4, 10, 26] +code = ''' + const char alphas[] = "abcdefghijklmnopqrstuvwxyz"; + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + for (int j = 0; j < FILES; j++) { + sprintf(path, "%c", alphas[j]); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + for (int i = 0; i < SIZE; i++) { + lfs_file_write(&lfs, &file, &alphas[j], 1) => 1; + } + lfs_file_close(&lfs, &file); + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "zzz", LFS_O_WRONLY | LFS_O_CREAT) => 0; + for (int j = 0; j < FILES; j++) { + lfs_file_write(&lfs, &file, (const void*)"~", 1) => 1; + lfs_file_sync(&lfs, &file) => 0; + + sprintf(path, "%c", alphas[j]); + lfs_remove(&lfs, path) => 0; + } + lfs_file_close(&lfs, &file); + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "zzz") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == FILES); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "zzz", LFS_O_RDONLY) => 0; + for (int i = 0; i < FILES; i++) { + lfs_file_read(&lfs, &file, buffer, 1) => 1; + assert(buffer[0] == '~'); + } + lfs_file_close(&lfs, &file); + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # remove inconveniently test +define.SIZE = [10, 100] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_t files[3]; + lfs_file_open(&lfs, &files[0], "e", LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_open(&lfs, &files[1], "f", LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_open(&lfs, &files[2], "g", LFS_O_WRONLY | LFS_O_CREAT) => 0; + + for (int i = 0; i < SIZE/2; i++) { + lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1; + lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1; + lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1; + } + + lfs_remove(&lfs, "f") => 0; + + for (int i = 0; i < SIZE/2; i++) { + lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1; + lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1; + lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1; + } + + lfs_file_close(&lfs, &files[0]); + lfs_file_close(&lfs, &files[1]); + lfs_file_close(&lfs, &files[2]); + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "e") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == SIZE); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "g") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == SIZE); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &files[0], "e", LFS_O_RDONLY) => 0; + lfs_file_open(&lfs, &files[1], "g", LFS_O_RDONLY) => 0; + for (int i = 0; i < SIZE; i++) { + lfs_file_read(&lfs, &files[0], buffer, 1) => 1; + assert(buffer[0] == 'e'); + lfs_file_read(&lfs, &files[1], buffer, 1) => 1; + assert(buffer[0] == 'g'); + } + lfs_file_close(&lfs, &files[0]); + lfs_file_close(&lfs, &files[1]); + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant interspersed file test +define.SIZE = [10, 100] +define.FILES = [4, 10, 26] +reentrant = true +code = ''' + lfs_file_t files[FILES]; + const char alphas[] = "abcdefghijklmnopqrstuvwxyz"; + + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + for (int j = 0; j < FILES; j++) { + sprintf(path, "%c", alphas[j]); + lfs_file_open(&lfs, &files[j], path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + } + + for (int i = 0; i < SIZE; i++) { + for (int j = 0; j < FILES; j++) { + size = lfs_file_size(&lfs, &files[j]); + assert((int)size >= 0); + if ((int)size <= i) { + lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1; + lfs_file_sync(&lfs, &files[j]) => 0; + } + } + } + + for (int j = 0; j < FILES; j++) { + lfs_file_close(&lfs, &files[j]); + } + + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + for (int j = 0; j < FILES; j++) { + sprintf(path, "%c", alphas[j]); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, path) == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == SIZE); + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + for (int j = 0; j < FILES; j++) { + sprintf(path, "%c", alphas[j]); + lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0; + } + + for (int i = 0; i < 10; i++) { + for (int j = 0; j < FILES; j++) { + lfs_file_read(&lfs, &files[j], buffer, 1) => 1; + assert(buffer[0] == alphas[j]); + } + } + + for (int j = 0; j < FILES; j++) { + lfs_file_close(&lfs, &files[j]); + } + + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_move.toml b/ext/littlefs/tests/test_move.toml new file mode 100644 index 0000000000..bb3b713f10 --- /dev/null +++ b/ext/littlefs/tests/test_move.toml @@ -0,0 +1,1815 @@ +[[case]] # move file +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_file_open(&lfs, &file, "a/hello", LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_write(&lfs, &file, "hola\n", 5) => 5; + lfs_file_write(&lfs, &file, "bonjour\n", 8) => 8; + lfs_file_write(&lfs, &file, "ohayo\n", 6) => 6; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hello", "c/hello") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "b/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "c/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 5) => 5; + memcmp(buffer, "hola\n", 5) => 0; + lfs_file_read(&lfs, &file, buffer, 8) => 8; + memcmp(buffer, "bonjour\n", 8) => 0; + lfs_file_read(&lfs, &file, buffer, 6) => 6; + memcmp(buffer, "ohayo\n", 6) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "d/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # noop move, yes this is legal +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "hi") => 0; + lfs_rename(&lfs, "hi", "hi") => 0; + lfs_mkdir(&lfs, "hi/hi") => 0; + lfs_rename(&lfs, "hi/hi", "hi/hi") => 0; + lfs_mkdir(&lfs, "hi/hi/hi") => 0; + lfs_rename(&lfs, "hi/hi/hi", "hi/hi/hi") => 0; + lfs_stat(&lfs, "hi/hi/hi", &info) => 0; + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move file corrupt source +in = "lfs.c" +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_file_open(&lfs, &file, "a/hello", LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_write(&lfs, &file, "hola\n", 5) => 5; + lfs_file_write(&lfs, &file, "bonjour\n", 8) => 8; + lfs_file_write(&lfs, &file, "ohayo\n", 6) => 6; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hello", "c/hello") => 0; + lfs_unmount(&lfs) => 0; + + // corrupt the source + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_block_t block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + int off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "b/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "c/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 5) => 5; + memcmp(buffer, "hola\n", 5) => 0; + lfs_file_read(&lfs, &file, buffer, 8) => 8; + memcmp(buffer, "bonjour\n", 8) => 0; + lfs_file_read(&lfs, &file, buffer, 6) => 6; + memcmp(buffer, "ohayo\n", 6) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "d/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move file corrupt source and dest +in = "lfs.c" +if = 'LFS_PROG_SIZE <= 0x3fe' # only works with one crc per commit +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_file_open(&lfs, &file, "a/hello", LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_write(&lfs, &file, "hola\n", 5) => 5; + lfs_file_write(&lfs, &file, "bonjour\n", 8) => 8; + lfs_file_write(&lfs, &file, "ohayo\n", 6) => 6; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hello", "c/hello") => 0; + lfs_unmount(&lfs) => 0; + + // corrupt the source + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_block_t block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + int off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + // corrupt the destination + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 5) => 5; + memcmp(buffer, "hola\n", 5) => 0; + lfs_file_read(&lfs, &file, buffer, 8) => 8; + memcmp(buffer, "bonjour\n", 8) => 0; + lfs_file_read(&lfs, &file, buffer, 6) => 6; + memcmp(buffer, "ohayo\n", 6) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "b/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "c/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "d/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move file after corrupt +in = "lfs.c" +if = 'LFS_PROG_SIZE <= 0x3fe' # only works with one crc per commit +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_file_open(&lfs, &file, "a/hello", LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_write(&lfs, &file, "hola\n", 5) => 5; + lfs_file_write(&lfs, &file, "bonjour\n", 8) => 8; + lfs_file_write(&lfs, &file, "ohayo\n", 6) => 6; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hello", "c/hello") => 0; + lfs_unmount(&lfs) => 0; + + // corrupt the source + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_block_t block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + int off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + // corrupt the destination + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + // continue move + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hello", "c/hello") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "b/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "c/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 5) => 5; + memcmp(buffer, "hola\n", 5) => 0; + lfs_file_read(&lfs, &file, buffer, 8) => 8; + memcmp(buffer, "bonjour\n", 8) => 0; + lfs_file_read(&lfs, &file, buffer, 6) => 6; + memcmp(buffer, "ohayo\n", 6) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "d/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # simple reentrant move file +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + err = lfs_mkdir(&lfs, "a"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "b"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "c"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "d"); + assert(!err || err == LFS_ERR_EXIST); + lfs_unmount(&lfs) => 0; + + while (true) { + lfs_mount(&lfs, &cfg) => 0; + // there should never exist _2_ hello files + int count = 0; + if (lfs_stat(&lfs, "a/hello", &info) == 0) { + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6 || info.size == 0); + count += 1; + } + if (lfs_stat(&lfs, "b/hello", &info) == 0) { + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + count += 1; + } + if (lfs_stat(&lfs, "c/hello", &info) == 0) { + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + count += 1; + } + if (lfs_stat(&lfs, "d/hello", &info) == 0) { + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + count += 1; + } + assert(count <= 1); + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + if (lfs_stat(&lfs, "a/hello", &info) == 0 && info.size > 0) { + lfs_rename(&lfs, "a/hello", "b/hello") => 0; + } else if (lfs_stat(&lfs, "b/hello", &info) == 0) { + lfs_rename(&lfs, "b/hello", "c/hello") => 0; + } else if (lfs_stat(&lfs, "c/hello", &info) == 0) { + lfs_rename(&lfs, "c/hello", "d/hello") => 0; + } else if (lfs_stat(&lfs, "d/hello", &info) == 0) { + // success + lfs_unmount(&lfs) => 0; + break; + } else { + // create file + lfs_file_open(&lfs, &file, "a/hello", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "hola\n", 5) => 5; + lfs_file_write(&lfs, &file, "bonjour\n", 8) => 8; + lfs_file_write(&lfs, &file, "ohayo\n", 6) => 6; + lfs_file_close(&lfs, &file) => 0; + } + lfs_unmount(&lfs) => 0; + } + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "d") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hello") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 5+8+6); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "b/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "c/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "d/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 5) => 5; + memcmp(buffer, "hola\n", 5) => 0; + lfs_file_read(&lfs, &file, buffer, 8) => 8; + memcmp(buffer, "bonjour\n", 8) => 0; + lfs_file_read(&lfs, &file, buffer, 6) => 6; + memcmp(buffer, "ohayo\n", 6) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move dir +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_mkdir(&lfs, "a/hi") => 0; + lfs_mkdir(&lfs, "a/hi/hola") => 0; + lfs_mkdir(&lfs, "a/hi/bonjour") => 0; + lfs_mkdir(&lfs, "a/hi/ohayo") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hi", "c/hi") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "a/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "b/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "c/hi") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "bonjour") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hola") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "ohayo") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "d/hi") => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move dir corrupt source +in = "lfs.c" +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_mkdir(&lfs, "a/hi") => 0; + lfs_mkdir(&lfs, "a/hi/hola") => 0; + lfs_mkdir(&lfs, "a/hi/bonjour") => 0; + lfs_mkdir(&lfs, "a/hi/ohayo") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hi", "c/hi") => 0; + lfs_unmount(&lfs) => 0; + + // corrupt the source + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_block_t block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + int off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "a/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "b/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "c/hi") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "bonjour") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hola") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "ohayo") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "d/hi") => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move dir corrupt source and dest +in = "lfs.c" +if = 'LFS_PROG_SIZE <= 0x3fe' # only works with one crc per commit +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_mkdir(&lfs, "a/hi") => 0; + lfs_mkdir(&lfs, "a/hi/hola") => 0; + lfs_mkdir(&lfs, "a/hi/bonjour") => 0; + lfs_mkdir(&lfs, "a/hi/ohayo") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hi", "c/hi") => 0; + lfs_unmount(&lfs) => 0; + + // corrupt the source + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_block_t block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + int off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + // corrupt the destination + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "a/hi") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "bonjour") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hola") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "ohayo") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "b/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "c/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "d/hi") => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move dir after corrupt +in = "lfs.c" +if = 'LFS_PROG_SIZE <= 0x3fe' # only works with one crc per commit +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_mkdir(&lfs, "a/hi") => 0; + lfs_mkdir(&lfs, "a/hi/hola") => 0; + lfs_mkdir(&lfs, "a/hi/bonjour") => 0; + lfs_mkdir(&lfs, "a/hi/ohayo") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hi", "c/hi") => 0; + lfs_unmount(&lfs) => 0; + + // corrupt the source + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_block_t block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + int off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + // corrupt the destination + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + // continue move + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hi", "c/hi") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "c") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "a/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "b/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "c/hi") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "bonjour") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hola") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "ohayo") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "d/hi") => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # simple reentrant move dir +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + err = lfs_mkdir(&lfs, "a"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "b"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "c"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "d"); + assert(!err || err == LFS_ERR_EXIST); + lfs_unmount(&lfs) => 0; + + while (true) { + lfs_mount(&lfs, &cfg) => 0; + // there should never exist _2_ hi directories + int count = 0; + if (lfs_stat(&lfs, "a/hi", &info) == 0) { + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + count += 1; + } + if (lfs_stat(&lfs, "b/hi", &info) == 0) { + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + count += 1; + } + if (lfs_stat(&lfs, "c/hi", &info) == 0) { + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + count += 1; + } + if (lfs_stat(&lfs, "d/hi", &info) == 0) { + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + count += 1; + } + assert(count <= 1); + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + if (lfs_stat(&lfs, "a/hi", &info) == 0) { + lfs_rename(&lfs, "a/hi", "b/hi") => 0; + } else if (lfs_stat(&lfs, "b/hi", &info) == 0) { + lfs_rename(&lfs, "b/hi", "c/hi") => 0; + } else if (lfs_stat(&lfs, "c/hi", &info) == 0) { + lfs_rename(&lfs, "c/hi", "d/hi") => 0; + } else if (lfs_stat(&lfs, "d/hi", &info) == 0) { + lfs_unmount(&lfs) => 0; + break; // success + } else { + // create dir and rename for atomicity + err = lfs_mkdir(&lfs, "temp"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "temp/hola"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "temp/bonjour"); + assert(!err || err == LFS_ERR_EXIST); + err = lfs_mkdir(&lfs, "temp/ohayo"); + assert(!err || err == LFS_ERR_EXIST); + lfs_rename(&lfs, "temp", "a/hi") => 0; + } + lfs_unmount(&lfs) => 0; + } + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "a") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_dir_open(&lfs, &dir, "d") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hi") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "a/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "b/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "c/hi") => LFS_ERR_NOENT; + lfs_dir_open(&lfs, &dir, "d/hi") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "bonjour") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "hola") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "ohayo") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move state stealing +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "a") => 0; + lfs_mkdir(&lfs, "b") => 0; + lfs_mkdir(&lfs, "c") => 0; + lfs_mkdir(&lfs, "d") => 0; + lfs_file_open(&lfs, &file, "a/hello", LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_write(&lfs, &file, "hola\n", 5) => 5; + lfs_file_write(&lfs, &file, "bonjour\n", 8) => 8; + lfs_file_write(&lfs, &file, "ohayo\n", 6) => 6; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "a/hello", "b/hello") => 0; + lfs_unmount(&lfs) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "b/hello", "c/hello") => 0; + lfs_unmount(&lfs) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_rename(&lfs, "c/hello", "d/hello") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "b/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "c/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "d/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 5) => 5; + memcmp(buffer, "hola\n", 5) => 0; + lfs_file_read(&lfs, &file, buffer, 8) => 8; + memcmp(buffer, "bonjour\n", 8) => 0; + lfs_file_read(&lfs, &file, buffer, 6) => 6; + memcmp(buffer, "ohayo\n", 6) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_remove(&lfs, "b") => 0; + lfs_remove(&lfs, "c") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "a", &info) => 0; + lfs_stat(&lfs, "b", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "c", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "d", &info) => 0; + lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "b/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "c/hello", LFS_O_RDONLY) => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "d/hello", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 5) => 5; + memcmp(buffer, "hola\n", 5) => 0; + lfs_file_read(&lfs, &file, buffer, 8) => 8; + memcmp(buffer, "bonjour\n", 8) => 0; + lfs_file_read(&lfs, &file, buffer, 6) => 6; + memcmp(buffer, "ohayo\n", 6) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +# Other specific corner cases +[[case]] # create + delete in same commit with neighbors +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // littlefs keeps files sorted, so we know the order these will be in + lfs_file_open(&lfs, &file, "/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.1", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/2.in_between", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.2", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/4.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.3", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_t files[3]; + lfs_file_open(&lfs, &files[0], "0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "2.in_between", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "4.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.4", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.5", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.6", 7) => 7; + + // rename file while everything is open, this triggers both + // a create and delete simultaneously + lfs_rename(&lfs, "/1.move_me", "/3.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + + // check that nothing was corrupted + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.in_between") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "3.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "4.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.4") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/2.in_between", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.5") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/4.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.6") == 0); + lfs_file_close(&lfs, &file) => 0; + + // now move back + lfs_file_open(&lfs, &files[0], "0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "2.in_between", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "4.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.7", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.8", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.9", 7) => 7; + + // rename file while everything is open, this triggers both + // a create and delete simultaneously + lfs_rename(&lfs, "/3.move_me", "/1.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + + // and check that nothing was corrupted again + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "1.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.in_between") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "4.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.7") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/2.in_between", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.8") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/4.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.9") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +# Other specific corner cases +[[case]] # create + delete + delete in same commit with neighbors +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // littlefs keeps files sorted, so we know the order these will be in + lfs_file_open(&lfs, &file, "/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/3.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "remove me", + sizeof("remove me")) => sizeof("remove me"); + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.1", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/2.in_between", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.2", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/4.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.3", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_t files[3]; + lfs_file_open(&lfs, &files[0], "0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "2.in_between", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "4.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.4", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.5", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.6", 7) => 7; + + // rename file while everything is open, this triggers both + // a create and delete simultaneously + lfs_rename(&lfs, "/1.move_me", "/3.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + + // check that nothing was corrupted + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.in_between") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "3.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "4.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.4") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/2.in_between", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.5") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/4.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.6") == 0); + lfs_file_close(&lfs, &file) => 0; + + // now move back + lfs_file_open(&lfs, &file, "/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "remove me", + sizeof("remove me")) => sizeof("remove me"); + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &files[0], "0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "2.in_between", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "4.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.7", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.8", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.9", 7) => 7; + + // rename file while everything is open, this triggers both + // a create and delete simultaneously + lfs_rename(&lfs, "/3.move_me", "/1.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + + // and check that nothing was corrupted again + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "1.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.in_between") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "4.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.7") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/2.in_between", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.8") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/4.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.9") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # create + delete in different dirs with neighbors +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + // littlefs keeps files sorted, so we know the order these will be in + lfs_mkdir(&lfs, "/dir.1") => 0; + lfs_mkdir(&lfs, "/dir.2") => 0; + lfs_file_open(&lfs, &file, "/dir.1/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.2/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "remove me", + sizeof("remove me")) => sizeof("remove me"); + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/dir.1/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.1", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.1/2.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.2", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/dir.2/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.3", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.2/2.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.4", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_t files[4]; + lfs_file_open(&lfs, &files[0], "/dir.1/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "/dir.1/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "/dir.2/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[3], "/dir.2/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.5", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.6", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.7", 7) => 7; + lfs_file_write(&lfs, &files[3], "test.8", 7) => 7; + + // rename file while everything is open, this triggers both + // a create and delete as it overwrites the destination file + lfs_rename(&lfs, "/dir.1/1.move_me", "/dir.2/1.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + lfs_file_close(&lfs, &files[3]) => 0; + + // check that nothing was corrupted + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "dir.1") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "dir.2") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "/dir.1") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "/dir.2") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "1.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/dir.1/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.5") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.1/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.6") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.2/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.7") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.2/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.8") == 0); + lfs_file_close(&lfs, &file) => 0; + + // now move back + lfs_file_open(&lfs, &file, "/dir.1/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "remove me", + sizeof("remove me")) => sizeof("remove me"); + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &files[0], "/dir.1/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "/dir.1/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "/dir.2/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[3], "/dir.2/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.9", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.a", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.b", 7) => 7; + lfs_file_write(&lfs, &files[3], "test.c", 7) => 7; + + // rename file while everything is open, this triggers both + // a create and delete simultaneously + lfs_rename(&lfs, "/dir.2/1.move_me", "/dir.1/1.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + lfs_file_close(&lfs, &files[3]) => 0; + + // and check that nothing was corrupted again + lfs_dir_open(&lfs, &dir, "/") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "dir.1") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "dir.2") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "/dir.1") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "1.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 0); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "/dir.2") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/dir.1/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.9") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.1/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.a") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.2/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.b") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/dir.2/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.c") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move fix in relocation +in = "lfs.c" +define.RELOCATIONS = 'range(0x3+1)' +define.LFS_ERASE_CYCLES = 0xffffffff +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + lfs_mkdir(&lfs, "/parent") => 0; + lfs_mkdir(&lfs, "/parent/child") => 0; + + lfs_file_open(&lfs, &file, "/parent/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "move me", + sizeof("move me")) => sizeof("move me"); + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/parent/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.1", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/2.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.2", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.3", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/2.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.4", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_t files[4]; + lfs_file_open(&lfs, &files[0], "/parent/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "/parent/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "/parent/child/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[3], "/parent/child/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.5", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.6", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.7", 7) => 7; + lfs_file_write(&lfs, &files[3], "test.8", 7) => 7; + + // force specific directories to relocate + if (RELOCATIONS & 0x1) { + lfs_dir_open(&lfs, &dir, "/parent"); + lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; + lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; + lfs_dir_close(&lfs, &dir) => 0; + } + if (RELOCATIONS & 0x2) { + lfs_dir_open(&lfs, &dir, "/parent/child"); + lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; + lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; + lfs_dir_close(&lfs, &dir) => 0; + } + + // ok, now we move the file, this creates a move that needs to be + // fixed, possibly in a metadata-pair that needs to be relocated + // + // the worst case is if we need to relocate and we need to implicit + // fix the move in our parent before it falls out of date + lfs_rename(&lfs, "/parent/1.move_me", "/parent/child/1.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + lfs_file_close(&lfs, &files[3]) => 0; + + // check that nothing was corrupted + lfs_dir_open(&lfs, &dir, "/parent") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "child") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "/parent/child") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "1.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == sizeof("move me")); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/parent/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.5") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.6") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.7") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.8") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # move fix in relocation with predecessor +in = "lfs.c" +define.RELOCATIONS = 'range(0x7+1)' +define.LFS_ERASE_CYCLES = 0xffffffff +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + lfs_mkdir(&lfs, "/parent") => 0; + lfs_mkdir(&lfs, "/parent/child") => 0; + lfs_mkdir(&lfs, "/parent/sibling") => 0; + + lfs_file_open(&lfs, &file, "/parent/sibling/1.move_me", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "move me", + sizeof("move me")) => sizeof("move me"); + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "/parent/sibling/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.1", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/sibling/2.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.2", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/0.before", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.3", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/2.after", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_write(&lfs, &file, "test.4", 7) => 7; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_t files[4]; + lfs_file_open(&lfs, &files[0], "/parent/sibling/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[1], "/parent/sibling/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[2], "/parent/child/0.before", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_open(&lfs, &files[3], "/parent/child/2.after", + LFS_O_WRONLY | LFS_O_TRUNC) => 0; + lfs_file_write(&lfs, &files[0], "test.5", 7) => 7; + lfs_file_write(&lfs, &files[1], "test.6", 7) => 7; + lfs_file_write(&lfs, &files[2], "test.7", 7) => 7; + lfs_file_write(&lfs, &files[3], "test.8", 7) => 7; + + // force specific directories to relocate + if (RELOCATIONS & 0x1) { + lfs_dir_open(&lfs, &dir, "/parent"); + lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; + lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; + lfs_dir_close(&lfs, &dir) => 0; + } + if (RELOCATIONS & 0x2) { + lfs_dir_open(&lfs, &dir, "/parent/sibling"); + lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; + lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; + lfs_dir_close(&lfs, &dir) => 0; + } + if (RELOCATIONS & 0x4) { + lfs_dir_open(&lfs, &dir, "/parent/child"); + lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; + lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; + lfs_dir_close(&lfs, &dir) => 0; + } + + // ok, now we move the file, this creates a move that needs to be + // fixed, possibly in a metadata-pair that needs to be relocated + // + // and now relocations can force us to need to fix our move in either + // the parent or child before things break + lfs_rename(&lfs, + "/parent/sibling/1.move_me", + "/parent/child/1.move_me") => 0; + + lfs_file_close(&lfs, &files[0]) => 0; + lfs_file_close(&lfs, &files[1]) => 0; + lfs_file_close(&lfs, &files[2]) => 0; + lfs_file_close(&lfs, &files[3]) => 0; + + // check that nothing was corrupted + lfs_dir_open(&lfs, &dir, "/parent") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "child") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "sibling") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "/parent/sibling") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_dir_open(&lfs, &dir, "/parent/child") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, ".") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "..") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "0.before") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "1.move_me") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == sizeof("move me")); + lfs_dir_read(&lfs, &dir, &info) => 1; + assert(strcmp(info.name, "2.after") == 0); + assert(info.type == LFS_TYPE_REG); + assert(info.size == 7); + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + lfs_file_open(&lfs, &file, "/parent/sibling/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.5") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/sibling/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.6") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/0.before", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.7") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_file_open(&lfs, &file, "/parent/child/2.after", LFS_O_RDONLY) => 0; + lfs_file_read(&lfs, &file, buffer, 7) => 7; + assert(strcmp((char*)buffer, "test.8") == 0); + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_orphans.toml b/ext/littlefs/tests/test_orphans.toml new file mode 100644 index 0000000000..241e273e87 --- /dev/null +++ b/ext/littlefs/tests/test_orphans.toml @@ -0,0 +1,120 @@ +[[case]] # orphan test +in = "lfs.c" +if = 'LFS_PROG_SIZE <= 0x3fe' # only works with one crc per commit +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "parent") => 0; + lfs_mkdir(&lfs, "parent/orphan") => 0; + lfs_mkdir(&lfs, "parent/child") => 0; + lfs_remove(&lfs, "parent/orphan") => 0; + lfs_unmount(&lfs) => 0; + + // corrupt the child's most recent commit, this should be the update + // to the linked-list entry, which should orphan the orphan. Note this + // makes a lot of assumptions about the remove operation. + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "parent/child") => 0; + lfs_block_t block = dir.m.pair[0]; + lfs_dir_close(&lfs, &dir) => 0; + lfs_unmount(&lfs) => 0; + uint8_t bbuffer[LFS_BLOCK_SIZE]; + cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + int off = LFS_BLOCK_SIZE-1; + while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { + off -= 1; + } + memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); + cfg.erase(&cfg, block) => 0; + cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; + cfg.sync(&cfg) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "parent/orphan", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "parent/child", &info) => 0; + lfs_fs_size(&lfs) => 8; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "parent/orphan", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "parent/child", &info) => 0; + lfs_fs_size(&lfs) => 8; + // this mkdir should both create a dir and deorphan, so size + // should be unchanged + lfs_mkdir(&lfs, "parent/otherchild") => 0; + lfs_stat(&lfs, "parent/orphan", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "parent/child", &info) => 0; + lfs_stat(&lfs, "parent/otherchild", &info) => 0; + lfs_fs_size(&lfs) => 8; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "parent/orphan", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "parent/child", &info) => 0; + lfs_stat(&lfs, "parent/otherchild", &info) => 0; + lfs_fs_size(&lfs) => 8; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant testing for orphans, basically just spam mkdir/remove +reentrant = true +# TODO fix this case, caused by non-DAG trees +if = '!(DEPTH == 3 && LFS_CACHE_SIZE != 64)' +define = [ + {FILES=6, DEPTH=1, CYCLES=20}, + {FILES=26, DEPTH=1, CYCLES=20}, + {FILES=3, DEPTH=3, CYCLES=20}, +] +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + srand(1); + const char alpha[] = "abcdefghijklmnopqrstuvwxyz"; + for (int i = 0; i < CYCLES; i++) { + // create random path + char full_path[256]; + for (int d = 0; d < DEPTH; d++) { + sprintf(&full_path[2*d], "/%c", alpha[rand() % FILES]); + } + + // if it does not exist, we create it, else we destroy + int res = lfs_stat(&lfs, full_path, &info); + if (res == LFS_ERR_NOENT) { + // create each directory in turn, ignore if dir already exists + for (int d = 0; d < DEPTH; d++) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + err = lfs_mkdir(&lfs, path); + assert(!err || err == LFS_ERR_EXIST); + } + + for (int d = 0; d < DEPTH; d++) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + lfs_stat(&lfs, path, &info) => 0; + assert(strcmp(info.name, &path[2*d+1]) == 0); + assert(info.type == LFS_TYPE_DIR); + } + } else { + // is valid dir? + assert(strcmp(info.name, &full_path[2*(DEPTH-1)+1]) == 0); + assert(info.type == LFS_TYPE_DIR); + + // try to delete path in reverse order, ignore if dir is not empty + for (int d = DEPTH-1; d >= 0; d--) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + err = lfs_remove(&lfs, path); + assert(!err || err == LFS_ERR_NOTEMPTY); + } + + lfs_stat(&lfs, full_path, &info) => LFS_ERR_NOENT; + } + } + lfs_unmount(&lfs) => 0; +''' + diff --git a/ext/littlefs/tests/test_paths.toml b/ext/littlefs/tests/test_paths.toml new file mode 100644 index 0000000000..a7474c0b0c --- /dev/null +++ b/ext/littlefs/tests/test_paths.toml @@ -0,0 +1,293 @@ + +[[case]] # simple path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "tea") => 0; + lfs_mkdir(&lfs, "tea/hottea") => 0; + lfs_mkdir(&lfs, "tea/warmtea") => 0; + lfs_mkdir(&lfs, "tea/coldtea") => 0; + + lfs_stat(&lfs, "tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "/tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + + lfs_mkdir(&lfs, "/milk") => 0; + lfs_stat(&lfs, "/milk", &info) => 0; + assert(strcmp(info.name, "milk") == 0); + lfs_stat(&lfs, "milk", &info) => 0; + assert(strcmp(info.name, "milk") == 0); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # redundant slashes +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "tea") => 0; + lfs_mkdir(&lfs, "tea/hottea") => 0; + lfs_mkdir(&lfs, "tea/warmtea") => 0; + lfs_mkdir(&lfs, "tea/coldtea") => 0; + + lfs_stat(&lfs, "/tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "//tea//hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "///tea///hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + + lfs_mkdir(&lfs, "////milk") => 0; + lfs_stat(&lfs, "////milk", &info) => 0; + assert(strcmp(info.name, "milk") == 0); + lfs_stat(&lfs, "milk", &info) => 0; + assert(strcmp(info.name, "milk") == 0); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # dot path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "tea") => 0; + lfs_mkdir(&lfs, "tea/hottea") => 0; + lfs_mkdir(&lfs, "tea/warmtea") => 0; + lfs_mkdir(&lfs, "tea/coldtea") => 0; + + lfs_stat(&lfs, "./tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "/./tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "/././tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "/./tea/./hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + + lfs_mkdir(&lfs, "/./milk") => 0; + lfs_stat(&lfs, "/./milk", &info) => 0; + assert(strcmp(info.name, "milk") == 0); + lfs_stat(&lfs, "milk", &info) => 0; + assert(strcmp(info.name, "milk") == 0); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # dot dot path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "tea") => 0; + lfs_mkdir(&lfs, "tea/hottea") => 0; + lfs_mkdir(&lfs, "tea/warmtea") => 0; + lfs_mkdir(&lfs, "tea/coldtea") => 0; + lfs_mkdir(&lfs, "coffee") => 0; + lfs_mkdir(&lfs, "coffee/hotcoffee") => 0; + lfs_mkdir(&lfs, "coffee/warmcoffee") => 0; + lfs_mkdir(&lfs, "coffee/coldcoffee") => 0; + + lfs_stat(&lfs, "coffee/../tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "tea/coldtea/../hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "coffee/coldcoffee/../../tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "coffee/../coffee/../tea/hottea", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + + lfs_mkdir(&lfs, "coffee/../milk") => 0; + lfs_stat(&lfs, "coffee/../milk", &info) => 0; + strcmp(info.name, "milk") => 0; + lfs_stat(&lfs, "milk", &info) => 0; + strcmp(info.name, "milk") => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # trailing dot path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "tea") => 0; + lfs_mkdir(&lfs, "tea/hottea") => 0; + lfs_mkdir(&lfs, "tea/warmtea") => 0; + lfs_mkdir(&lfs, "tea/coldtea") => 0; + + lfs_stat(&lfs, "tea/hottea/", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "tea/hottea/.", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "tea/hottea/./.", &info) => 0; + assert(strcmp(info.name, "hottea") == 0); + lfs_stat(&lfs, "tea/hottea/..", &info) => 0; + assert(strcmp(info.name, "tea") == 0); + lfs_stat(&lfs, "tea/hottea/../.", &info) => 0; + assert(strcmp(info.name, "tea") == 0); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # leading dot path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, ".milk") => 0; + lfs_stat(&lfs, ".milk", &info) => 0; + strcmp(info.name, ".milk") => 0; + lfs_stat(&lfs, "tea/.././.milk", &info) => 0; + strcmp(info.name, ".milk") => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # root dot dot path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "tea") => 0; + lfs_mkdir(&lfs, "tea/hottea") => 0; + lfs_mkdir(&lfs, "tea/warmtea") => 0; + lfs_mkdir(&lfs, "tea/coldtea") => 0; + lfs_mkdir(&lfs, "coffee") => 0; + lfs_mkdir(&lfs, "coffee/hotcoffee") => 0; + lfs_mkdir(&lfs, "coffee/warmcoffee") => 0; + lfs_mkdir(&lfs, "coffee/coldcoffee") => 0; + + lfs_stat(&lfs, "coffee/../../../../../../tea/hottea", &info) => 0; + strcmp(info.name, "hottea") => 0; + + lfs_mkdir(&lfs, "coffee/../../../../../../milk") => 0; + lfs_stat(&lfs, "coffee/../../../../../../milk", &info) => 0; + strcmp(info.name, "milk") => 0; + lfs_stat(&lfs, "milk", &info) => 0; + strcmp(info.name, "milk") => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # invalid path tests +code = ''' + lfs_format(&lfs, &cfg); + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "dirt", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "dirt/ground", &info) => LFS_ERR_NOENT; + lfs_stat(&lfs, "dirt/ground/earth", &info) => LFS_ERR_NOENT; + + lfs_remove(&lfs, "dirt") => LFS_ERR_NOENT; + lfs_remove(&lfs, "dirt/ground") => LFS_ERR_NOENT; + lfs_remove(&lfs, "dirt/ground/earth") => LFS_ERR_NOENT; + + lfs_mkdir(&lfs, "dirt/ground") => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "dirt/ground", LFS_O_WRONLY | LFS_O_CREAT) + => LFS_ERR_NOENT; + lfs_mkdir(&lfs, "dirt/ground/earth") => LFS_ERR_NOENT; + lfs_file_open(&lfs, &file, "dirt/ground/earth", LFS_O_WRONLY | LFS_O_CREAT) + => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # root operations +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "/", &info) => 0; + assert(strcmp(info.name, "/") == 0); + assert(info.type == LFS_TYPE_DIR); + + lfs_mkdir(&lfs, "/") => LFS_ERR_EXIST; + lfs_file_open(&lfs, &file, "/", LFS_O_WRONLY | LFS_O_CREAT) + => LFS_ERR_ISDIR; + + lfs_remove(&lfs, "/") => LFS_ERR_INVAL; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # root representations +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "/", &info) => 0; + assert(strcmp(info.name, "/") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_stat(&lfs, "", &info) => 0; + assert(strcmp(info.name, "/") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_stat(&lfs, ".", &info) => 0; + assert(strcmp(info.name, "/") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_stat(&lfs, "..", &info) => 0; + assert(strcmp(info.name, "/") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_stat(&lfs, "//", &info) => 0; + assert(strcmp(info.name, "/") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_stat(&lfs, "./", &info) => 0; + assert(strcmp(info.name, "/") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # superblock conflict test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "littlefs", &info) => LFS_ERR_NOENT; + lfs_remove(&lfs, "littlefs") => LFS_ERR_NOENT; + + lfs_mkdir(&lfs, "littlefs") => 0; + lfs_stat(&lfs, "littlefs", &info) => 0; + assert(strcmp(info.name, "littlefs") == 0); + assert(info.type == LFS_TYPE_DIR); + lfs_remove(&lfs, "littlefs") => 0; + lfs_stat(&lfs, "littlefs", &info) => LFS_ERR_NOENT; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # max path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "coffee") => 0; + lfs_mkdir(&lfs, "coffee/hotcoffee") => 0; + lfs_mkdir(&lfs, "coffee/warmcoffee") => 0; + lfs_mkdir(&lfs, "coffee/coldcoffee") => 0; + + memset(path, 'w', LFS_NAME_MAX+1); + path[LFS_NAME_MAX+1] = '\0'; + lfs_mkdir(&lfs, path) => LFS_ERR_NAMETOOLONG; + lfs_file_open(&lfs, &file, path, LFS_O_WRONLY | LFS_O_CREAT) + => LFS_ERR_NAMETOOLONG; + + memcpy(path, "coffee/", strlen("coffee/")); + memset(path+strlen("coffee/"), 'w', LFS_NAME_MAX+1); + path[strlen("coffee/")+LFS_NAME_MAX+1] = '\0'; + lfs_mkdir(&lfs, path) => LFS_ERR_NAMETOOLONG; + lfs_file_open(&lfs, &file, path, LFS_O_WRONLY | LFS_O_CREAT) + => LFS_ERR_NAMETOOLONG; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # really big path test +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_mkdir(&lfs, "coffee") => 0; + lfs_mkdir(&lfs, "coffee/hotcoffee") => 0; + lfs_mkdir(&lfs, "coffee/warmcoffee") => 0; + lfs_mkdir(&lfs, "coffee/coldcoffee") => 0; + + memset(path, 'w', LFS_NAME_MAX); + path[LFS_NAME_MAX] = '\0'; + lfs_mkdir(&lfs, path) => 0; + lfs_remove(&lfs, path) => 0; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_remove(&lfs, path) => 0; + + memcpy(path, "coffee/", strlen("coffee/")); + memset(path+strlen("coffee/"), 'w', LFS_NAME_MAX); + path[strlen("coffee/")+LFS_NAME_MAX] = '\0'; + lfs_mkdir(&lfs, path) => 0; + lfs_remove(&lfs, path) => 0; + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_remove(&lfs, path) => 0; + lfs_unmount(&lfs) => 0; +''' + diff --git a/ext/littlefs/tests/test_relocations.toml b/ext/littlefs/tests/test_relocations.toml new file mode 100644 index 0000000000..71b104752f --- /dev/null +++ b/ext/littlefs/tests/test_relocations.toml @@ -0,0 +1,305 @@ +# specific corner cases worth explicitly testing for +[[case]] # dangling split dir test +define.ITERATIONS = 20 +define.COUNT = 10 +define.LFS_BLOCK_CYCLES = [8, 1] +code = ''' + lfs_format(&lfs, &cfg) => 0; + // fill up filesystem so only ~16 blocks are left + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "padding", LFS_O_CREAT | LFS_O_WRONLY) => 0; + memset(buffer, 0, 512); + while (LFS_BLOCK_COUNT - lfs_fs_size(&lfs) > 16) { + lfs_file_write(&lfs, &file, buffer, 512) => 512; + } + lfs_file_close(&lfs, &file) => 0; + // make a child dir to use in bounded space + lfs_mkdir(&lfs, "child") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int j = 0; j < ITERATIONS; j++) { + for (int i = 0; i < COUNT; i++) { + sprintf(path, "child/test%03d_loooooooooooooooooong_name", i); + lfs_file_open(&lfs, &file, path, LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_close(&lfs, &file) => 0; + } + + lfs_dir_open(&lfs, &dir, "child") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + lfs_dir_read(&lfs, &dir, &info) => 1; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "test%03d_loooooooooooooooooong_name", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + strcmp(info.name, path) => 0; + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + if (j == ITERATIONS-1) { + break; + } + + for (int i = 0; i < COUNT; i++) { + sprintf(path, "child/test%03d_loooooooooooooooooong_name", i); + lfs_remove(&lfs, path) => 0; + } + } + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_dir_open(&lfs, &dir, "child") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + lfs_dir_read(&lfs, &dir, &info) => 1; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "test%03d_loooooooooooooooooong_name", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + strcmp(info.name, path) => 0; + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "child/test%03d_loooooooooooooooooong_name", i); + lfs_remove(&lfs, path) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # outdated head test +define.ITERATIONS = 20 +define.COUNT = 10 +define.LFS_BLOCK_CYCLES = [8, 1] +code = ''' + lfs_format(&lfs, &cfg) => 0; + // fill up filesystem so only ~16 blocks are left + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "padding", LFS_O_CREAT | LFS_O_WRONLY) => 0; + memset(buffer, 0, 512); + while (LFS_BLOCK_COUNT - lfs_fs_size(&lfs) > 16) { + lfs_file_write(&lfs, &file, buffer, 512) => 512; + } + lfs_file_close(&lfs, &file) => 0; + // make a child dir to use in bounded space + lfs_mkdir(&lfs, "child") => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + for (int j = 0; j < ITERATIONS; j++) { + for (int i = 0; i < COUNT; i++) { + sprintf(path, "child/test%03d_loooooooooooooooooong_name", i); + lfs_file_open(&lfs, &file, path, LFS_O_CREAT | LFS_O_WRONLY) => 0; + lfs_file_close(&lfs, &file) => 0; + } + + lfs_dir_open(&lfs, &dir, "child") => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + lfs_dir_read(&lfs, &dir, &info) => 1; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "test%03d_loooooooooooooooooong_name", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + strcmp(info.name, path) => 0; + info.size => 0; + + sprintf(path, "child/test%03d_loooooooooooooooooong_name", i); + lfs_file_open(&lfs, &file, path, LFS_O_WRONLY) => 0; + lfs_file_write(&lfs, &file, "hi", 2) => 2; + lfs_file_close(&lfs, &file) => 0; + } + lfs_dir_read(&lfs, &dir, &info) => 0; + + lfs_dir_rewind(&lfs, &dir) => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + lfs_dir_read(&lfs, &dir, &info) => 1; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "test%03d_loooooooooooooooooong_name", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + strcmp(info.name, path) => 0; + info.size => 2; + + sprintf(path, "child/test%03d_loooooooooooooooooong_name", i); + lfs_file_open(&lfs, &file, path, LFS_O_WRONLY) => 0; + lfs_file_write(&lfs, &file, "hi", 2) => 2; + lfs_file_close(&lfs, &file) => 0; + } + lfs_dir_read(&lfs, &dir, &info) => 0; + + lfs_dir_rewind(&lfs, &dir) => 0; + lfs_dir_read(&lfs, &dir, &info) => 1; + lfs_dir_read(&lfs, &dir, &info) => 1; + for (int i = 0; i < COUNT; i++) { + sprintf(path, "test%03d_loooooooooooooooooong_name", i); + lfs_dir_read(&lfs, &dir, &info) => 1; + strcmp(info.name, path) => 0; + info.size => 2; + } + lfs_dir_read(&lfs, &dir, &info) => 0; + lfs_dir_close(&lfs, &dir) => 0; + + for (int i = 0; i < COUNT; i++) { + sprintf(path, "child/test%03d_loooooooooooooooooong_name", i); + lfs_remove(&lfs, path) => 0; + } + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant testing for relocations, this is the same as the + # orphan testing, except here we also set block_cycles so that + # almost every tree operation needs a relocation +reentrant = true +# TODO fix this case, caused by non-DAG trees +if = '!(DEPTH == 3 && LFS_CACHE_SIZE != 64)' +define = [ + {FILES=6, DEPTH=1, CYCLES=20, LFS_BLOCK_CYCLES=1}, + {FILES=26, DEPTH=1, CYCLES=20, LFS_BLOCK_CYCLES=1}, + {FILES=3, DEPTH=3, CYCLES=20, LFS_BLOCK_CYCLES=1}, +] +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + srand(1); + const char alpha[] = "abcdefghijklmnopqrstuvwxyz"; + for (int i = 0; i < CYCLES; i++) { + // create random path + char full_path[256]; + for (int d = 0; d < DEPTH; d++) { + sprintf(&full_path[2*d], "/%c", alpha[rand() % FILES]); + } + + // if it does not exist, we create it, else we destroy + int res = lfs_stat(&lfs, full_path, &info); + if (res == LFS_ERR_NOENT) { + // create each directory in turn, ignore if dir already exists + for (int d = 0; d < DEPTH; d++) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + err = lfs_mkdir(&lfs, path); + assert(!err || err == LFS_ERR_EXIST); + } + + for (int d = 0; d < DEPTH; d++) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + lfs_stat(&lfs, path, &info) => 0; + assert(strcmp(info.name, &path[2*d+1]) == 0); + assert(info.type == LFS_TYPE_DIR); + } + } else { + // is valid dir? + assert(strcmp(info.name, &full_path[2*(DEPTH-1)+1]) == 0); + assert(info.type == LFS_TYPE_DIR); + + // try to delete path in reverse order, ignore if dir is not empty + for (int d = DEPTH-1; d >= 0; d--) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + err = lfs_remove(&lfs, path); + assert(!err || err == LFS_ERR_NOTEMPTY); + } + + lfs_stat(&lfs, full_path, &info) => LFS_ERR_NOENT; + } + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant testing for relocations, but now with random renames! +reentrant = true +# TODO fix this case, caused by non-DAG trees +if = '!(DEPTH == 3 && LFS_CACHE_SIZE != 64)' +define = [ + {FILES=6, DEPTH=1, CYCLES=20, LFS_BLOCK_CYCLES=1}, + {FILES=26, DEPTH=1, CYCLES=20, LFS_BLOCK_CYCLES=1}, + {FILES=3, DEPTH=3, CYCLES=20, LFS_BLOCK_CYCLES=1}, +] +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + srand(1); + const char alpha[] = "abcdefghijklmnopqrstuvwxyz"; + for (int i = 0; i < CYCLES; i++) { + // create random path + char full_path[256]; + for (int d = 0; d < DEPTH; d++) { + sprintf(&full_path[2*d], "/%c", alpha[rand() % FILES]); + } + + // if it does not exist, we create it, else we destroy + int res = lfs_stat(&lfs, full_path, &info); + assert(!res || res == LFS_ERR_NOENT); + if (res == LFS_ERR_NOENT) { + // create each directory in turn, ignore if dir already exists + for (int d = 0; d < DEPTH; d++) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + err = lfs_mkdir(&lfs, path); + assert(!err || err == LFS_ERR_EXIST); + } + + for (int d = 0; d < DEPTH; d++) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + lfs_stat(&lfs, path, &info) => 0; + assert(strcmp(info.name, &path[2*d+1]) == 0); + assert(info.type == LFS_TYPE_DIR); + } + } else { + assert(strcmp(info.name, &full_path[2*(DEPTH-1)+1]) == 0); + assert(info.type == LFS_TYPE_DIR); + + // create new random path + char new_path[256]; + for (int d = 0; d < DEPTH; d++) { + sprintf(&new_path[2*d], "/%c", alpha[rand() % FILES]); + } + + // if new path does not exist, rename, otherwise destroy + res = lfs_stat(&lfs, new_path, &info); + assert(!res || res == LFS_ERR_NOENT); + if (res == LFS_ERR_NOENT) { + // stop once some dir is renamed + for (int d = 0; d < DEPTH; d++) { + strcpy(&path[2*d], &full_path[2*d]); + path[2*d+2] = '\0'; + strcpy(&path[128+2*d], &new_path[2*d]); + path[128+2*d+2] = '\0'; + err = lfs_rename(&lfs, path, path+128); + assert(!err || err == LFS_ERR_NOTEMPTY); + if (!err) { + strcpy(path, path+128); + } + } + + for (int d = 0; d < DEPTH; d++) { + strcpy(path, new_path); + path[2*d+2] = '\0'; + lfs_stat(&lfs, path, &info) => 0; + assert(strcmp(info.name, &path[2*d+1]) == 0); + assert(info.type == LFS_TYPE_DIR); + } + + lfs_stat(&lfs, full_path, &info) => LFS_ERR_NOENT; + } else { + // try to delete path in reverse order, + // ignore if dir is not empty + for (int d = DEPTH-1; d >= 0; d--) { + strcpy(path, full_path); + path[2*d+2] = '\0'; + err = lfs_remove(&lfs, path); + assert(!err || err == LFS_ERR_NOTEMPTY); + } + + lfs_stat(&lfs, full_path, &info) => LFS_ERR_NOENT; + } + } + } + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_seek.toml b/ext/littlefs/tests/test_seek.toml new file mode 100644 index 0000000000..79d7728aa3 --- /dev/null +++ b/ext/littlefs/tests/test_seek.toml @@ -0,0 +1,380 @@ + +[[case]] # simple file seek +define = [ + {COUNT=132, SKIP=4}, + {COUNT=132, SKIP=128}, + {COUNT=200, SKIP=10}, + {COUNT=200, SKIP=100}, + {COUNT=4, SKIP=1}, + {COUNT=4, SKIP=2}, +] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + size = strlen("kittycatcat"); + memcpy(buffer, "kittycatcat", size); + for (int j = 0; j < COUNT; j++) { + lfs_file_write(&lfs, &file, buffer, size); + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", LFS_O_RDONLY) => 0; + + lfs_soff_t pos = -1; + size = strlen("kittycatcat"); + for (int i = 0; i < SKIP; i++) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + pos = lfs_file_tell(&lfs, &file); + } + assert(pos >= 0); + + lfs_file_seek(&lfs, &file, pos, LFS_SEEK_SET) => pos; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_rewind(&lfs, &file) => 0; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_CUR) => size; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, size, LFS_SEEK_CUR) => 3*size; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, pos, LFS_SEEK_SET) => pos; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, -size, LFS_SEEK_CUR) => pos; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, -size, LFS_SEEK_END) >= 0 => 1; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + size = lfs_file_size(&lfs, &file); + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_CUR) => size; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # simple file seek and write +define = [ + {COUNT=132, SKIP=4}, + {COUNT=132, SKIP=128}, + {COUNT=200, SKIP=10}, + {COUNT=200, SKIP=100}, + {COUNT=4, SKIP=1}, + {COUNT=4, SKIP=2}, +] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + size = strlen("kittycatcat"); + memcpy(buffer, "kittycatcat", size); + for (int j = 0; j < COUNT; j++) { + lfs_file_write(&lfs, &file, buffer, size); + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", LFS_O_RDWR) => 0; + + lfs_soff_t pos = -1; + size = strlen("kittycatcat"); + for (int i = 0; i < SKIP; i++) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + pos = lfs_file_tell(&lfs, &file); + } + assert(pos >= 0); + + memcpy(buffer, "doggodogdog", size); + lfs_file_seek(&lfs, &file, pos, LFS_SEEK_SET) => pos; + lfs_file_write(&lfs, &file, buffer, size) => size; + + lfs_file_seek(&lfs, &file, pos, LFS_SEEK_SET) => pos; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "doggodogdog", size) => 0; + + lfs_file_rewind(&lfs, &file) => 0; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, pos, LFS_SEEK_SET) => pos; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "doggodogdog", size) => 0; + + lfs_file_seek(&lfs, &file, -size, LFS_SEEK_END) >= 0 => 1; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + size = lfs_file_size(&lfs, &file); + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_CUR) => size; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # boundary seek and writes +define.COUNT = 132 +define.OFFSETS = '"{512, 1020, 513, 1021, 511, 1019, 1441}"' +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + size = strlen("kittycatcat"); + memcpy(buffer, "kittycatcat", size); + for (int j = 0; j < COUNT; j++) { + lfs_file_write(&lfs, &file, buffer, size); + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", LFS_O_RDWR) => 0; + + size = strlen("hedgehoghog"); + const lfs_soff_t offsets[] = OFFSETS; + + for (unsigned i = 0; i < sizeof(offsets) / sizeof(offsets[0]); i++) { + lfs_soff_t off = offsets[i]; + memcpy(buffer, "hedgehoghog", size); + lfs_file_seek(&lfs, &file, off, LFS_SEEK_SET) => off; + lfs_file_write(&lfs, &file, buffer, size) => size; + lfs_file_seek(&lfs, &file, off, LFS_SEEK_SET) => off; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hedgehoghog", size) => 0; + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_SET) => 0; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, off, LFS_SEEK_SET) => off; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hedgehoghog", size) => 0; + + lfs_file_sync(&lfs, &file) => 0; + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_SET) => 0; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "kittycatcat", size) => 0; + + lfs_file_seek(&lfs, &file, off, LFS_SEEK_SET) => off; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hedgehoghog", size) => 0; + } + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # out of bounds seek +define = [ + {COUNT=132, SKIP=4}, + {COUNT=132, SKIP=128}, + {COUNT=200, SKIP=10}, + {COUNT=200, SKIP=100}, + {COUNT=4, SKIP=2}, + {COUNT=4, SKIP=3}, +] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; + size = strlen("kittycatcat"); + memcpy(buffer, "kittycatcat", size); + for (int j = 0; j < COUNT; j++) { + lfs_file_write(&lfs, &file, buffer, size); + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "kitty", LFS_O_RDWR) => 0; + + size = strlen("kittycatcat"); + lfs_file_size(&lfs, &file) => COUNT*size; + lfs_file_seek(&lfs, &file, (COUNT+SKIP)*size, + LFS_SEEK_SET) => (COUNT+SKIP)*size; + lfs_file_read(&lfs, &file, buffer, size) => 0; + + memcpy(buffer, "porcupineee", size); + lfs_file_write(&lfs, &file, buffer, size) => size; + + lfs_file_seek(&lfs, &file, (COUNT+SKIP)*size, + LFS_SEEK_SET) => (COUNT+SKIP)*size; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "porcupineee", size) => 0; + + lfs_file_seek(&lfs, &file, COUNT*size, + LFS_SEEK_SET) => COUNT*size; + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "\0\0\0\0\0\0\0\0\0\0\0", size) => 0; + + lfs_file_seek(&lfs, &file, -((COUNT+SKIP)*size), + LFS_SEEK_CUR) => LFS_ERR_INVAL; + lfs_file_tell(&lfs, &file) => (COUNT+1)*size; + + lfs_file_seek(&lfs, &file, -((COUNT+2*SKIP)*size), + LFS_SEEK_END) => LFS_ERR_INVAL; + lfs_file_tell(&lfs, &file) => (COUNT+1)*size; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # inline write and seek +define.SIZE = [2, 4, 128, 132] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "tinykitty", + LFS_O_RDWR | LFS_O_CREAT) => 0; + int j = 0; + int k = 0; + + memcpy(buffer, "abcdefghijklmnopqrstuvwxyz", 26); + for (unsigned i = 0; i < SIZE; i++) { + lfs_file_write(&lfs, &file, &buffer[j++ % 26], 1) => 1; + lfs_file_tell(&lfs, &file) => i+1; + lfs_file_size(&lfs, &file) => i+1; + } + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_SET) => 0; + lfs_file_tell(&lfs, &file) => 0; + lfs_file_size(&lfs, &file) => SIZE; + for (unsigned i = 0; i < SIZE; i++) { + uint8_t c; + lfs_file_read(&lfs, &file, &c, 1) => 1; + c => buffer[k++ % 26]; + } + + lfs_file_sync(&lfs, &file) => 0; + lfs_file_tell(&lfs, &file) => SIZE; + lfs_file_size(&lfs, &file) => SIZE; + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_SET) => 0; + for (unsigned i = 0; i < SIZE; i++) { + lfs_file_write(&lfs, &file, &buffer[j++ % 26], 1) => 1; + lfs_file_tell(&lfs, &file) => i+1; + lfs_file_size(&lfs, &file) => SIZE; + lfs_file_sync(&lfs, &file) => 0; + lfs_file_tell(&lfs, &file) => i+1; + lfs_file_size(&lfs, &file) => SIZE; + if (i < SIZE-2) { + uint8_t c[3]; + lfs_file_seek(&lfs, &file, -1, LFS_SEEK_CUR) => i; + lfs_file_read(&lfs, &file, &c, 3) => 3; + lfs_file_tell(&lfs, &file) => i+3; + lfs_file_size(&lfs, &file) => SIZE; + lfs_file_seek(&lfs, &file, i+1, LFS_SEEK_SET) => i+1; + lfs_file_tell(&lfs, &file) => i+1; + lfs_file_size(&lfs, &file) => SIZE; + } + } + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_SET) => 0; + lfs_file_tell(&lfs, &file) => 0; + lfs_file_size(&lfs, &file) => SIZE; + for (unsigned i = 0; i < SIZE; i++) { + uint8_t c; + lfs_file_read(&lfs, &file, &c, 1) => 1; + c => buffer[k++ % 26]; + } + + lfs_file_sync(&lfs, &file) => 0; + lfs_file_tell(&lfs, &file) => SIZE; + lfs_file_size(&lfs, &file) => SIZE; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # file seek and write with power-loss +# must be power-of-2 for quadratic probing to be exhaustive +define.COUNT = [4, 64, 128] +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + err = lfs_file_open(&lfs, &file, "kitty", LFS_O_RDONLY); + assert(!err || err == LFS_ERR_NOENT); + if (!err) { + if (lfs_file_size(&lfs, &file) != 0) { + lfs_file_size(&lfs, &file) => 11*COUNT; + for (int j = 0; j < COUNT; j++) { + memset(buffer, 0, 11+1); + lfs_file_read(&lfs, &file, buffer, 11) => 11; + assert(memcmp(buffer, "kittycatcat", 11) == 0 || + memcmp(buffer, "doggodogdog", 11) == 0); + } + } + lfs_file_close(&lfs, &file) => 0; + } + + lfs_file_open(&lfs, &file, "kitty", LFS_O_WRONLY | LFS_O_CREAT) => 0; + if (lfs_file_size(&lfs, &file) == 0) { + for (int j = 0; j < COUNT; j++) { + strcpy((char*)buffer, "kittycatcat"); + size = strlen((char*)buffer); + lfs_file_write(&lfs, &file, buffer, size) => size; + } + } + lfs_file_close(&lfs, &file) => 0; + + strcpy((char*)buffer, "doggodogdog"); + size = strlen((char*)buffer); + + lfs_file_open(&lfs, &file, "kitty", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => COUNT*size; + // seek and write using quadratic probing to touch all + // 11-byte words in the file + lfs_off_t off = 0; + for (int j = 0; j < COUNT; j++) { + off = (5*off + 1) % COUNT; + lfs_file_seek(&lfs, &file, off*size, LFS_SEEK_SET) => off*size; + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, "kittycatcat", size) == 0 || + memcmp(buffer, "doggodogdog", size) == 0); + if (memcmp(buffer, "doggodogdog", size) != 0) { + lfs_file_seek(&lfs, &file, off*size, LFS_SEEK_SET) => off*size; + strcpy((char*)buffer, "doggodogdog"); + lfs_file_write(&lfs, &file, buffer, size) => size; + lfs_file_seek(&lfs, &file, off*size, LFS_SEEK_SET) => off*size; + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, "doggodogdog", size) == 0); + lfs_file_sync(&lfs, &file) => 0; + lfs_file_seek(&lfs, &file, off*size, LFS_SEEK_SET) => off*size; + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, "doggodogdog", size) == 0); + } + } + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "kitty", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => COUNT*size; + for (int j = 0; j < COUNT; j++) { + lfs_file_read(&lfs, &file, buffer, size) => size; + assert(memcmp(buffer, "doggodogdog", size) == 0); + } + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_superblocks.toml b/ext/littlefs/tests/test_superblocks.toml new file mode 100644 index 0000000000..407c845467 --- /dev/null +++ b/ext/littlefs/tests/test_superblocks.toml @@ -0,0 +1,127 @@ +[[case]] # simple formatting test +code = ''' + lfs_format(&lfs, &cfg) => 0; +''' + +[[case]] # mount/unmount +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant format +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + lfs_unmount(&lfs) => 0; +''' + +[[case]] # invalid mount +code = ''' + lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT; +''' + +[[case]] # expanding superblock +define.LFS_BLOCK_CYCLES = [32, 33, 1] +define.N = [10, 100, 1000] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + lfs_file_open(&lfs, &file, "dummy", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_stat(&lfs, "dummy", &info) => 0; + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + lfs_remove(&lfs, "dummy") => 0; + } + lfs_unmount(&lfs) => 0; + + // one last check after power-cycle + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "dummy", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_stat(&lfs, "dummy", &info) => 0; + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # expanding superblock with power cycle +define.LFS_BLOCK_CYCLES = [32, 33, 1] +define.N = [10, 100, 1000] +code = ''' + lfs_format(&lfs, &cfg) => 0; + for (int i = 0; i < N; i++) { + lfs_mount(&lfs, &cfg) => 0; + // remove lingering dummy? + err = lfs_stat(&lfs, "dummy", &info); + assert(err == 0 || (err == LFS_ERR_NOENT && i == 0)); + if (!err) { + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + lfs_remove(&lfs, "dummy") => 0; + } + + lfs_file_open(&lfs, &file, "dummy", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_stat(&lfs, "dummy", &info) => 0; + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + lfs_unmount(&lfs) => 0; + } + + // one last check after power-cycle + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "dummy", &info) => 0; + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + lfs_unmount(&lfs) => 0; +''' + +[[case]] # reentrant expanding superblock +define.LFS_BLOCK_CYCLES = [2, 1] +define.N = 24 +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + + for (int i = 0; i < N; i++) { + // remove lingering dummy? + err = lfs_stat(&lfs, "dummy", &info); + assert(err == 0 || (err == LFS_ERR_NOENT && i == 0)); + if (!err) { + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + lfs_remove(&lfs, "dummy") => 0; + } + + lfs_file_open(&lfs, &file, "dummy", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_stat(&lfs, "dummy", &info) => 0; + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + } + + lfs_unmount(&lfs) => 0; + + // one last check after power-cycle + lfs_mount(&lfs, &cfg) => 0; + lfs_stat(&lfs, "dummy", &info) => 0; + assert(strcmp(info.name, "dummy") == 0); + assert(info.type == LFS_TYPE_REG); + lfs_unmount(&lfs) => 0; +''' diff --git a/ext/littlefs/tests/test_truncate.toml b/ext/littlefs/tests/test_truncate.toml new file mode 100644 index 0000000000..850d7aaee3 --- /dev/null +++ b/ext/littlefs/tests/test_truncate.toml @@ -0,0 +1,439 @@ +[[case]] # simple truncate +define.MEDIUMSIZE = [32, 2048] +define.LARGESIZE = 8192 +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldynoop", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + + strcpy((char*)buffer, "hair"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < LARGESIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => LARGESIZE; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldynoop", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => LARGESIZE; + + lfs_file_truncate(&lfs, &file, MEDIUMSIZE) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldynoop", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + size = strlen("hair"); + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hair", size) => 0; + } + lfs_file_read(&lfs, &file, buffer, size) => 0; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # truncate and read +define.MEDIUMSIZE = [32, 2048] +define.LARGESIZE = 8192 +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldyread", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + + strcpy((char*)buffer, "hair"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < LARGESIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => LARGESIZE; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldyread", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => LARGESIZE; + + lfs_file_truncate(&lfs, &file, MEDIUMSIZE) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + size = strlen("hair"); + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hair", size) => 0; + } + lfs_file_read(&lfs, &file, buffer, size) => 0; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldyread", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + size = strlen("hair"); + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hair", size) => 0; + } + lfs_file_read(&lfs, &file, buffer, size) => 0; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # write, truncate, and read +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "sequence", + LFS_O_RDWR | LFS_O_CREAT | LFS_O_TRUNC) => 0; + + size = lfs_min(lfs.cfg->cache_size, sizeof(buffer)/2); + lfs_size_t qsize = size / 4; + uint8_t *wb = buffer; + uint8_t *rb = buffer + size; + for (lfs_off_t j = 0; j < size; ++j) { + wb[j] = j; + } + + /* Spread sequence over size */ + lfs_file_write(&lfs, &file, wb, size) => size; + lfs_file_size(&lfs, &file) => size; + lfs_file_tell(&lfs, &file) => size; + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_SET) => 0; + lfs_file_tell(&lfs, &file) => 0; + + /* Chop off the last quarter */ + lfs_size_t trunc = size - qsize; + lfs_file_truncate(&lfs, &file, trunc) => 0; + lfs_file_tell(&lfs, &file) => 0; + lfs_file_size(&lfs, &file) => trunc; + + /* Read should produce first 3/4 */ + lfs_file_read(&lfs, &file, rb, size) => trunc; + memcmp(rb, wb, trunc) => 0; + + /* Move to 1/4 */ + lfs_file_size(&lfs, &file) => trunc; + lfs_file_seek(&lfs, &file, qsize, LFS_SEEK_SET) => qsize; + lfs_file_tell(&lfs, &file) => qsize; + + /* Chop to 1/2 */ + trunc -= qsize; + lfs_file_truncate(&lfs, &file, trunc) => 0; + lfs_file_tell(&lfs, &file) => qsize; + lfs_file_size(&lfs, &file) => trunc; + + /* Read should produce second quarter */ + lfs_file_read(&lfs, &file, rb, size) => trunc - qsize; + memcmp(rb, wb + qsize, trunc - qsize) => 0; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # truncate and write +define.MEDIUMSIZE = [32, 2048] +define.LARGESIZE = 8192 +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldywrite", + LFS_O_WRONLY | LFS_O_CREAT) => 0; + + strcpy((char*)buffer, "hair"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < LARGESIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => LARGESIZE; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldywrite", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => LARGESIZE; + + lfs_file_truncate(&lfs, &file, MEDIUMSIZE) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + strcpy((char*)buffer, "bald"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldywrite", LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + size = strlen("bald"); + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "bald", size) => 0; + } + lfs_file_read(&lfs, &file, buffer, size) => 0; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' + +[[case]] # truncate write under powerloss +define.SMALLSIZE = [4, 512] +define.MEDIUMSIZE = [32, 1024] +define.LARGESIZE = 2048 +reentrant = true +code = ''' + err = lfs_mount(&lfs, &cfg); + if (err) { + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + } + err = lfs_file_open(&lfs, &file, "baldy", LFS_O_RDONLY); + assert(!err || err == LFS_ERR_NOENT); + if (!err) { + size = lfs_file_size(&lfs, &file); + assert(size == 0 || + size == LARGESIZE || + size == MEDIUMSIZE || + size == SMALLSIZE); + for (lfs_off_t j = 0; j < size; j += 4) { + lfs_file_read(&lfs, &file, buffer, 4) => 4; + assert(memcmp(buffer, "hair", 4) == 0 || + memcmp(buffer, "bald", 4) == 0 || + memcmp(buffer, "comb", 4) == 0); + } + lfs_file_close(&lfs, &file) => 0; + } + + lfs_file_open(&lfs, &file, "baldy", + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + lfs_file_size(&lfs, &file) => 0; + strcpy((char*)buffer, "hair"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < LARGESIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => LARGESIZE; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "baldy", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => LARGESIZE; + lfs_file_truncate(&lfs, &file, MEDIUMSIZE) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + strcpy((char*)buffer, "bald"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + lfs_file_close(&lfs, &file) => 0; + + lfs_file_open(&lfs, &file, "baldy", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + lfs_file_truncate(&lfs, &file, SMALLSIZE) => 0; + lfs_file_size(&lfs, &file) => SMALLSIZE; + strcpy((char*)buffer, "comb"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < SMALLSIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => SMALLSIZE; + lfs_file_close(&lfs, &file) => 0; + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # more aggressive general truncation tests +define.CONFIG = 'range(6)' +define.SMALLSIZE = 32 +define.MEDIUMSIZE = 2048 +define.LARGESIZE = 8192 +code = ''' + #define COUNT 5 + const struct { + lfs_off_t startsizes[COUNT]; + lfs_off_t startseeks[COUNT]; + lfs_off_t hotsizes[COUNT]; + lfs_off_t coldsizes[COUNT]; + } configs[] = { + // cold shrinking + {{2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + { 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE, 2*LARGESIZE}}, + // cold expanding + {{2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + { 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE, 2*LARGESIZE}}, + // warm shrinking truncate + {{2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + { 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE, 2*LARGESIZE}, + { 0, 0, 0, 0, 0}}, + // warm expanding truncate + {{ 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE, 2*LARGESIZE}, + { 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}}, + // mid-file shrinking truncate + {{2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + { LARGESIZE, LARGESIZE, LARGESIZE, LARGESIZE, LARGESIZE}, + { 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE, 2*LARGESIZE}, + { 0, 0, 0, 0, 0}}, + // mid-file expanding truncate + {{ 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE, 2*LARGESIZE}, + { 0, 0, SMALLSIZE, MEDIUMSIZE, LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}, + {2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE, 2*LARGESIZE}}, + }; + + const lfs_off_t *startsizes = configs[CONFIG].startsizes; + const lfs_off_t *startseeks = configs[CONFIG].startseeks; + const lfs_off_t *hotsizes = configs[CONFIG].hotsizes; + const lfs_off_t *coldsizes = configs[CONFIG].coldsizes; + + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + + for (unsigned i = 0; i < COUNT; i++) { + sprintf(path, "hairyhead%d", i); + lfs_file_open(&lfs, &file, path, + LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC) => 0; + + strcpy((char*)buffer, "hair"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < startsizes[i]; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + } + lfs_file_size(&lfs, &file) => startsizes[i]; + + if (startseeks[i] != startsizes[i]) { + lfs_file_seek(&lfs, &file, + startseeks[i], LFS_SEEK_SET) => startseeks[i]; + } + + lfs_file_truncate(&lfs, &file, hotsizes[i]) => 0; + lfs_file_size(&lfs, &file) => hotsizes[i]; + + lfs_file_close(&lfs, &file) => 0; + } + + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + + for (unsigned i = 0; i < COUNT; i++) { + sprintf(path, "hairyhead%d", i); + lfs_file_open(&lfs, &file, path, LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => hotsizes[i]; + + size = strlen("hair"); + lfs_off_t j = 0; + for (; j < startsizes[i] && j < hotsizes[i]; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hair", size) => 0; + } + + for (; j < hotsizes[i]; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "\0\0\0\0", size) => 0; + } + + lfs_file_truncate(&lfs, &file, coldsizes[i]) => 0; + lfs_file_size(&lfs, &file) => coldsizes[i]; + + lfs_file_close(&lfs, &file) => 0; + } + + lfs_unmount(&lfs) => 0; + + lfs_mount(&lfs, &cfg) => 0; + + for (unsigned i = 0; i < COUNT; i++) { + sprintf(path, "hairyhead%d", i); + lfs_file_open(&lfs, &file, path, LFS_O_RDONLY) => 0; + lfs_file_size(&lfs, &file) => coldsizes[i]; + + size = strlen("hair"); + lfs_off_t j = 0; + for (; j < startsizes[i] && j < hotsizes[i] && j < coldsizes[i]; + j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hair", size) => 0; + } + + for (; j < coldsizes[i]; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "\0\0\0\0", size) => 0; + } + + lfs_file_close(&lfs, &file) => 0; + } + + lfs_unmount(&lfs) => 0; +''' + +[[case]] # noop truncate +define.MEDIUMSIZE = [32, 2048] +code = ''' + lfs_format(&lfs, &cfg) => 0; + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldynoop", + LFS_O_RDWR | LFS_O_CREAT) => 0; + + strcpy((char*)buffer, "hair"); + size = strlen((char*)buffer); + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_write(&lfs, &file, buffer, size) => size; + + // this truncate should do nothing + lfs_file_truncate(&lfs, &file, j+size) => 0; + } + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + lfs_file_seek(&lfs, &file, 0, LFS_SEEK_SET) => 0; + // should do nothing again + lfs_file_truncate(&lfs, &file, MEDIUMSIZE) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hair", size) => 0; + } + lfs_file_read(&lfs, &file, buffer, size) => 0; + + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; + + // still there after reboot? + lfs_mount(&lfs, &cfg) => 0; + lfs_file_open(&lfs, &file, "baldynoop", LFS_O_RDWR) => 0; + lfs_file_size(&lfs, &file) => MEDIUMSIZE; + for (lfs_off_t j = 0; j < MEDIUMSIZE; j += size) { + lfs_file_read(&lfs, &file, buffer, size) => size; + memcmp(buffer, "hair", size) => 0; + } + lfs_file_read(&lfs, &file, buffer, size) => 0; + lfs_file_close(&lfs, &file) => 0; + lfs_unmount(&lfs) => 0; +''' From 24123251667058d2351caebe8491f6c00b83d6ed Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 12:31:35 +0000 Subject: [PATCH 03/87] STM32F4xx: bit definitions for I2C_FLTR register --- os/common/ext/ST/STM32F4xx/stm32f405xx.h | 9 +++++++++ os/common/ext/ST/STM32F4xx/stm32f407xx.h | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/os/common/ext/ST/STM32F4xx/stm32f405xx.h b/os/common/ext/ST/STM32F4xx/stm32f405xx.h index 1aa12c58c3..fb3af5b11f 100644 --- a/os/common/ext/ST/STM32F4xx/stm32f405xx.h +++ b/os/common/ext/ST/STM32F4xx/stm32f405xx.h @@ -485,6 +485,7 @@ typedef struct __IO uint32_t SR2; /*!< I2C Status register 2, Address offset: 0x18 */ __IO uint32_t CCR; /*!< I2C Clock control register, Address offset: 0x1C */ __IO uint32_t TRISE; /*!< I2C TRISE register, Address offset: 0x20 */ + __IO uint32_t FLTR; /*!< I2C FLTR register, Address offset: 0x24 */ } I2C_TypeDef; /** @@ -9024,6 +9025,14 @@ typedef struct #define I2C_TRISE_TRISE_Msk (0x3FU << I2C_TRISE_TRISE_Pos) /*!< 0x0000003F */ #define I2C_TRISE_TRISE I2C_TRISE_TRISE_Msk /*! Date: Thu, 2 Feb 2023 12:34:17 +0000 Subject: [PATCH 04/87] ports: support PORT_IRQ_ATTRIBUTES and CH_CFG_STACK_OVERFLOW_HOOK --- os/common/ports/ARM-common/chtypes.h | 2 ++ os/common/ports/ARM/chcore.h | 4 ++-- os/common/ports/ARMv6-M/chcore.h | 10 +++++++--- os/common/ports/ARMv7-M/chcore.h | 11 +++++++---- os/common/ports/e200/chcore.h | 2 +- os/common/ports/templates/chcore.h | 2 +- 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/os/common/ports/ARM-common/chtypes.h b/os/common/ports/ARM-common/chtypes.h index 7ae34b19e9..c26402e970 100644 --- a/os/common/ports/ARM-common/chtypes.h +++ b/os/common/ports/ARM-common/chtypes.h @@ -88,7 +88,9 @@ typedef uint64_t port_stkalign_t; * @note If the compiler does not support such attribute then some * time-dependent services could be degraded. */ +#ifndef NOINLINE #define NOINLINE CC_NO_INLINE +#endif /** * @brief Memory alignment enforcement for variables. diff --git a/os/common/ports/ARM/chcore.h b/os/common/ports/ARM/chcore.h index 464686ef3f..2629770135 100644 --- a/os/common/ports/ARM/chcore.h +++ b/os/common/ports/ARM/chcore.h @@ -360,7 +360,7 @@ struct port_context { #define port_switch(ntp, otp) { \ register struct port_intctx *r13 asm ("r13"); \ if ((stkalign_t *)(r13 - 1) < otp->wabase) \ - chSysHalt("stack overflow"); \ + CH_CFG_STACK_OVERFLOW_HOOK(otp); \ __port_switch_thumb(ntp, otp); \ } #else @@ -373,7 +373,7 @@ struct port_context { #define port_switch(ntp, otp) { \ register struct port_intctx *r13 asm ("r13"); \ if ((stkalign_t *)(r13 - 1) < otp->wabase) \ - chSysHalt("stack overflow"); \ + CH_CFG_STACK_OVERFLOW_HOOK(otp); \ __port_switch_arm(ntp, otp); \ } #else diff --git a/os/common/ports/ARMv6-M/chcore.h b/os/common/ports/ARMv6-M/chcore.h index 5605c4b5e9..239e1c055f 100644 --- a/os/common/ports/ARMv6-M/chcore.h +++ b/os/common/ports/ARMv6-M/chcore.h @@ -378,15 +378,19 @@ struct port_context { */ #define PORT_IRQ_EPILOGUE() __port_irq_epilogue(_saved_lr) +#ifndef PORT_IRQ_ATTRIBUTES +#define PORT_IRQ_ATTRIBUTES +#endif + /** * @brief IRQ handler function declaration. * @note @p id can be a function name or a vector number depending on the * port implementation. */ #ifdef __cplusplus - #define PORT_IRQ_HANDLER(id) extern "C" void id(void) +#define PORT_IRQ_HANDLER(id) extern "C" PORT_IRQ_ATTRIBUTES void id(void) #else - #define PORT_IRQ_HANDLER(id) void id(void) +#define PORT_IRQ_HANDLER(id) PORT_IRQ_ATTRIBUTES void id(void) #endif /** @@ -416,7 +420,7 @@ struct port_context { #define port_switch(ntp, otp) do { \ struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \ if ((stkalign_t *)(void *)(r13 - 1) < (otp)->wabase) { \ - chSysHalt("stack overflow"); \ + CH_CFG_STACK_OVERFLOW_HOOK(otp); \ } \ __port_switch(ntp, otp); \ } while (false) diff --git a/os/common/ports/ARMv7-M/chcore.h b/os/common/ports/ARMv7-M/chcore.h index 816a5f36f2..9b65237f3a 100644 --- a/os/common/ports/ARMv7-M/chcore.h +++ b/os/common/ports/ARMv7-M/chcore.h @@ -668,16 +668,19 @@ struct port_context { */ #define PORT_IRQ_EPILOGUE() __port_irq_epilogue() +#ifndef PORT_IRQ_ATTRIBUTES +#define PORT_IRQ_ATTRIBUTES +#endif + /** * @brief IRQ handler function declaration. * @note @p id can be a function name or a vector number depending on the * port implementation. */ #ifdef __cplusplus - #define PORT_IRQ_HANDLER(id) extern "C" void id(void) - +#define PORT_IRQ_HANDLER(id) extern "C" PORT_IRQ_ATTRIBUTES void id(void) #else - #define PORT_IRQ_HANDLER(id) void id(void) +#define PORT_IRQ_HANDLER(id) PORT_IRQ_ATTRIBUTES void id(void) #endif /** @@ -710,7 +713,7 @@ struct port_context { #define port_switch(ntp, otp) do { \ struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \ if ((stkalign_t *)(void *)(r13 - 1) < (otp)->wabase) { \ - chSysHalt("stack overflow"); \ + CH_CFG_STACK_OVERFLOW_HOOK(otp); \ } \ __port_switch(ntp, otp); \ } while (false) diff --git a/os/common/ports/e200/chcore.h b/os/common/ports/e200/chcore.h index 2f444e08ac..7ef7dc967f 100644 --- a/os/common/ports/e200/chcore.h +++ b/os/common/ports/e200/chcore.h @@ -438,7 +438,7 @@ struct port_context { #define port_switch(ntp, otp) { \ register struct port_intctx *sp asm ("%r1"); \ if ((stkalign_t *)(void *)(sp - 1) < otp->wabase) \ - chSysHalt("stack overflow"); \ + CH_CFG_STACK_OVERFLOW_HOOK(otp); \ _port_switch(ntp, otp); \ } #endif diff --git a/os/common/ports/templates/chcore.h b/os/common/ports/templates/chcore.h index 0881806f2d..1a4f098108 100644 --- a/os/common/ports/templates/chcore.h +++ b/os/common/ports/templates/chcore.h @@ -270,7 +270,7 @@ struct port_context { #define port_switch(ntp, otp) { \ register struct port_intctx *sp asm ("%r1"); \ if ((stkalign_t *)(sp - 1) < otp->wabase) \ - chSysHalt("stack overflow"); \ + CH_CFG_STACK_OVERFLOW_HOOK(otp); \ _port_switch(ntp, otp); \ } #endif From 715ddc81c9e1fb271c6ac689be75a5e3af048eed Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 12:34:56 +0000 Subject: [PATCH 05/87] startup: support RAMFUNCS initialization remove calls to early_init and late_init for ArduPilot --- .../startup/ARMCMx/compilers/GCC/crt0_v7m.S | 11 ++++++++ os/common/startup/ARMCMx/compilers/GCC/crt1.c | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S b/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S index 05ad23531c..e617c41f57 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S +++ b/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S @@ -133,6 +133,13 @@ #define CRT0_INIT_BSS TRUE #endif +/** + * @brief RAM Functions initialization switch. + */ +#if !defined(CRT0_INIT_RAMFUNCS) || defined(__DOXYGEN__) +#define CRT0_INIT_RAMFUNCS TRUE +#endif + /** * @brief RAM areas initialization switch. */ @@ -253,6 +260,10 @@ _crt0_entry: msr CONTROL, r0 isb +#if CRT0_INIT_RAMFUNCS == TRUE + bl __init_ramfunc_area +#endif + #if CRT0_INIT_CORE == TRUE /* Core initialization.*/ bl __cpu_init diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt1.c b/os/common/startup/ARMCMx/compilers/GCC/crt1.c index 7ef761d5fd..2d2d8f7b54 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt1.c +++ b/os/common/startup/ARMCMx/compilers/GCC/crt1.c @@ -157,7 +157,9 @@ void __cpu_init(void) { __attribute__((weak)) #endif /*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/ +#ifndef _ARDUPILOT_ void __early_init(void) {} +#endif /*lint -restore*/ /** @@ -171,7 +173,9 @@ void __early_init(void) {} __attribute__((weak)) #endif /*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/ +#ifndef _ARDUPILOT_ void __late_init(void) {} +#endif /*lint -restore*/ /** @@ -259,4 +263,27 @@ void __init_ram_areas(void) { #endif } +#ifndef CRT1_RAMFUNC_ENABLE +#define CRT1_RAMFUNC_ENABLE 0 +#endif + +/** + * @brief Performs the initialization of instruction RAM area. + */ +#if CRT1_RAMFUNC_ENABLE +extern uint32_t __instram_init_text__, __instram_init__, __instram_end__; +#endif +void __init_ramfunc_area(void) { +#if CRT1_RAMFUNC_ENABLE + uint32_t *tp = &__instram_init_text__; + uint32_t *p = &__instram_init__; + + /* Copying initialization data.*/ + while (p < &__instram_end__) { + *p = *tp; + p++; + tp++; + } +#endif +} /** @} */ From e48526a26d018ac008aecd71d74bba50372fae2f Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 12:37:46 +0000 Subject: [PATCH 06/87] hal: support eicu driver --- os/hal/hal.mk | 4 + os/hal/include/hal.h | 5 ++ os/hal/include/hal_eicu.h | 142 +++++++++++++++++++++++++++++++++++ os/hal/src/hal.c | 3 + os/hal/src/hal_eicu.c | 153 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 307 insertions(+) create mode 100644 os/hal/include/hal_eicu.h create mode 100644 os/hal/src/hal_eicu.c diff --git a/os/hal/hal.mk b/os/hal/hal.mk index c3cc2d651a..196c17ed88 100644 --- a/os/hal/hal.mk +++ b/os/hal/hal.mk @@ -47,6 +47,9 @@ endif ifneq ($(findstring HAL_USE_ICU TRUE,$(HALCONF)),) HALSRC += $(CHIBIOS)/os/hal/src/hal_icu.c endif +ifneq ($(findstring HAL_USE_EICU TRUE,$(HALCONF)),) +HALSRC += $(CHIBIOS)/os/hal/src/hal_eicu.c +endif ifneq ($(findstring HAL_USE_MAC TRUE,$(HALCONF)),) HALSRC += $(CHIBIOS)/os/hal/src/hal_mac.c endif @@ -108,6 +111,7 @@ HALSRC = $(CHIBIOS)/os/hal/src/hal.c \ $(CHIBIOS)/os/hal/src/hal_i2c.c \ $(CHIBIOS)/os/hal/src/hal_i2s.c \ $(CHIBIOS)/os/hal/src/hal_icu.c \ + $(CHIBIOS)/os/hal/src/hal_eicu.c \ $(CHIBIOS)/os/hal/src/hal_mac.c \ $(CHIBIOS)/os/hal/src/hal_mmc_spi.c \ $(CHIBIOS)/os/hal/src/hal_pal.c \ diff --git a/os/hal/include/hal.h b/os/hal/include/hal.h index 83e948c94c..4410fd14a1 100644 --- a/os/hal/include/hal.h +++ b/os/hal/include/hal.h @@ -177,6 +177,10 @@ #define HAL_USE_ICU FALSE #endif +#if !defined(HAL_USE_EICU) +#define HAL_USE_EICU FALSE +#endif + #if !defined(HAL_USE_MAC) #define HAL_USE_MAC FALSE #endif @@ -313,6 +317,7 @@ static inline halfreq_t halClockGetPointX(halclkpt_t clkpt) { #include "hal_i2c.h" #include "hal_i2s.h" #include "hal_icu.h" +#include "hal_eicu.h" #include "hal_mac.h" #include "hal_pwm.h" #include "hal_rtc.h" diff --git a/os/hal/include/hal_eicu.h b/os/hal/include/hal_eicu.h new file mode 100644 index 0000000000..89293b3546 --- /dev/null +++ b/os/hal/include/hal_eicu.h @@ -0,0 +1,142 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +/* + Rewritten by Emil Fresk (1/5 - 2014) for extended input capture + functionality. And fix for spurious callbacks in the interrupt handler. +*/ +/* + Improved by Uladzimir Pylinsky aka barthess (1/3 - 2015) for support of + 32-bit timers and timers with single capture/compare channels. +*/ + +#ifndef HAL_EICU_H_ +#define HAL_EICU_H_ + +#if (HAL_USE_EICU == TRUE) || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Driver state machine possible states. + */ +typedef enum { + EICU_UNINIT, /* Not initialized. */ + EICU_STOP, /* Stopped. */ + EICU_READY, /* Ready. */ + EICU_WAITING, /* Waiting for first edge. */ + EICU_ACTIVE, /* Active cycle phase. */ + EICU_IDLE /* Idle cycle phase. */ +} eicustate_t; + +/** + * @brief Channel state machine possible states. + */ +typedef enum { + EICU_CH_IDLE, /* Idle cycle phase. */ + EICU_CH_ACTIVE /* Active cycle phase. */ +} eicuchannelstate_t; + +/** + * @brief EICU channel selection definition + */ +typedef enum { + EICU_CHANNEL_1, + EICU_CHANNEL_2, + EICU_CHANNEL_3, + EICU_CHANNEL_4, + EICU_CHANNEL_ENUM_END +} eicuchannel_t; + +/** + * @brief Type of a structure representing an EICU driver. + */ +typedef struct EICUDriver EICUDriver; + +/** + * @brief EICU notification callback type. + * + * @param[in] eicup Pointer to a EICUDriver object + * @param[in] channel EICU channel that fired the interrupt + * @param[in] width Pulse width + * @param[in] period Pulse period + */ +typedef void (*eicucallback_t)(EICUDriver *eicup, eicuchannel_t channel); + +#include "hal_eicu_lld.h" + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/** + * @name Macro Functions + * @{ + */ +/** + * @brief Enables the extended input capture. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @iclass + */ +#define eicuEnableI(eicup) eicu_lld_enable(eicup) + +/** + * @brief Disables the extended input capture. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @iclass + */ +#define eicuDisableI(eicup) eicu_lld_disable(eicup) +/** @} */ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void eicuInit(void); + void eicuObjectInit(EICUDriver *eicup); + void eicuStart(EICUDriver *eicup, const EICUConfig *config); + void eicuStop(EICUDriver *eicup); + void eicuEnable(EICUDriver *eicup); + void eicuDisable(EICUDriver *eicup); +#ifdef __cplusplus +} +#endif + +#endif /* HAL_USE_EICU */ + +#endif /* HAL_EICU_H_ */ + +/** @} */ \ No newline at end of file diff --git a/os/hal/src/hal.c b/os/hal/src/hal.c index 9a54833e2b..df209f41a1 100644 --- a/os/hal/src/hal.c +++ b/os/hal/src/hal.c @@ -95,6 +95,9 @@ void halInit(void) { #if (HAL_USE_ICU == TRUE) || defined(__DOXYGEN__) icuInit(); #endif +#if (HAL_USE_EICU == TRUE) || defined(__DOXYGEN__) + eicuInit(); +#endif #if (HAL_USE_MAC == TRUE) || defined(__DOXYGEN__) macInit(); #endif diff --git a/os/hal/src/hal_eicu.c b/os/hal/src/hal_eicu.c new file mode 100644 index 0000000000..abaf8b9572 --- /dev/null +++ b/os/hal/src/hal_eicu.c @@ -0,0 +1,153 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +/* + Rewritten by Emil Fresk (1/5 - 2014) for extended input capture + functionality. And fix for spurious callbacks in the interrupt handler. +*/ +/* + Improved by Uladzimir Pylinsky aka barthess (1/3 - 2015) for support of + 32-bit timers and timers with single capture/compare channels. +*/ + +/* + * Hardware Abstraction Layer for Extended Input Capture Unit + */ +#include "hal.h" + +#if (HAL_USE_EICU == TRUE) || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief EICU Driver initialization. + * + * @init + */ +void eicuInit(void) { + + eicu_lld_init(); +} + +/** + * @brief Initializes the standard part of a @p EICUDriver structure. + * + * @param[out] eicup Pointer to the @p EICUDriver object + * + * @init + */ +void eicuObjectInit(EICUDriver *eicup) { + + eicup->state = EICU_STOP; + eicup->config = NULL; +} + +/** + * @brief Configures and activates the EICU peripheral. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * @param[in] config Pointer to the @p EICUConfig object + * + * @api + */ +void eicuStart(EICUDriver *eicup, const EICUConfig *config) { + + osalDbgCheck((eicup != NULL) && (config != NULL)); + + osalSysLock(); + osalDbgAssert((eicup->state == EICU_STOP) || (eicup->state == EICU_READY), + "invalid state"); + eicup->config = config; + eicu_lld_start(eicup); + eicup->state = EICU_READY; + osalSysUnlock(); +} + +/** + * @brief Deactivates the EICU peripheral. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @api + */ +void eicuStop(EICUDriver *eicup) { + + osalDbgCheck(eicup != NULL); + + osalSysLock(); + osalDbgAssert((eicup->state == EICU_STOP) || (eicup->state == EICU_READY), + "invalid state"); + eicu_lld_stop(eicup); + eicup->state = EICU_STOP; + osalSysUnlock(); +} + +/** + * @brief Enables the extended input capture. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @api + */ +void eicuEnable(EICUDriver *eicup) { + + osalDbgCheck(eicup != NULL); + + osalSysLock(); + osalDbgAssert(eicup->state == EICU_READY, "invalid state"); + eicu_lld_enable(eicup); + eicup->state = EICU_WAITING; + osalSysUnlock(); +} + +/** + * @brief Disables the extended input capture. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @api + */ +void eicuDisable(EICUDriver *eicup) { + + osalDbgCheck(eicup != NULL); + + osalSysLock(); + osalDbgAssert((eicup->state == EICU_READY) || (eicup->state == EICU_IDLE) || + (eicup->state == EICU_ACTIVE) || (eicup->state == EICU_WAITING), + "invalid state"); + eicu_lld_disable(eicup); + eicup->state = EICU_READY; + osalSysUnlock(); +} + +#endif /* HAL_USE_EICU */ \ No newline at end of file From c69d33666e3f3171b354b85a79cc32e195818632 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 12:40:21 +0000 Subject: [PATCH 07/87] hal_i2c: support I2C_ISR_LIMIT and i2cSoftStop --- os/hal/include/hal_i2c.h | 2 ++ os/hal/lib/fallback/I2C/hal_i2c_lld.c | 12 ++++++++++++ os/hal/lib/fallback/I2C/hal_i2c_lld.h | 1 + 3 files changed, 15 insertions(+) diff --git a/os/hal/include/hal_i2c.h b/os/hal/include/hal_i2c.h index ad8672cce7..2b5c208e8b 100644 --- a/os/hal/include/hal_i2c.h +++ b/os/hal/include/hal_i2c.h @@ -49,6 +49,7 @@ reception. */ #define I2C_TIMEOUT 0x20 /**< @brief Hardware timeout. */ #define I2C_SMB_ALERT 0x40 /**< @brief SMBus Alert. */ +#define I2C_ISR_LIMIT 0x80 /**< @brief exceeded maximum ISR limit */ /** @} */ /*===========================================================================*/ @@ -140,6 +141,7 @@ extern "C" { void i2cObjectInit(I2CDriver *i2cp); msg_t i2cStart(I2CDriver *i2cp, const I2CConfig *config); void i2cStop(I2CDriver *i2cp); + void i2cSoftStop(I2CDriver *i2cp); i2cflags_t i2cGetErrors(I2CDriver *i2cp); msg_t i2cMasterTransmitTimeout(I2CDriver *i2cp, i2caddr_t addr, diff --git a/os/hal/lib/fallback/I2C/hal_i2c_lld.c b/os/hal/lib/fallback/I2C/hal_i2c_lld.c index 205fa19d47..c589f4f253 100644 --- a/os/hal/lib/fallback/I2C/hal_i2c_lld.c +++ b/os/hal/lib/fallback/I2C/hal_i2c_lld.c @@ -328,6 +328,18 @@ void i2c_lld_stop(I2CDriver *i2cp) { (void)i2cp; } +/** + * @brief Deactivates the I2C peripheral. + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +void i2c_lld_soft_stop(I2CDriver *i2cp) { + /* just stop if there's no "soft stop option" */ + i2c_lld_stop(i2cp); +} + /** * @brief Receives data via the I2C bus as master. * diff --git a/os/hal/lib/fallback/I2C/hal_i2c_lld.h b/os/hal/lib/fallback/I2C/hal_i2c_lld.h index c0a8d37baf..43d2ae8f19 100644 --- a/os/hal/lib/fallback/I2C/hal_i2c_lld.h +++ b/os/hal/lib/fallback/I2C/hal_i2c_lld.h @@ -219,6 +219,7 @@ extern "C" { void i2c_lld_init(void); void i2c_lld_start(I2CDriver *i2cp); void i2c_lld_stop(I2CDriver *i2cp); + void i2c_lld_soft_stop(I2CDriver *i2cp); msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, const uint8_t *txbuf, size_t txbytes, uint8_t *rxbuf, size_t rxbytes, From d2ce7a7f3619d95c6ea43f35342d83bafd9b17d5 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:28:54 +0000 Subject: [PATCH 08/87] osal: allow osalDbgAssert to be redefined --- os/hal/osal/rt-nil/osal.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/os/hal/osal/rt-nil/osal.h b/os/hal/osal/rt-nil/osal.h index 25ac4de9b7..15ff511824 100644 --- a/os/hal/osal/rt-nil/osal.h +++ b/os/hal/osal/rt-nil/osal.h @@ -266,7 +266,9 @@ typedef struct { * * @api */ +#ifndef osalDbgAssert #define osalDbgAssert(c, remark) chDbgAssert(c, remark) +#endif /** * @brief Function parameters check. From a98b5bc3a219e61e8490f10d696049225155670e Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:30:39 +0000 Subject: [PATCH 09/87] ADCv2: remove hardcoded ADC DMA streams --- os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.h b/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.h index 187692ff75..46b08438e8 100644 --- a/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.h +++ b/os/hal/ports/STM32/LLD/ADCv2/hal_adc_lld.h @@ -171,6 +171,8 @@ #define STM32_ADC_USE_ADC3 FALSE #endif +#if !defined(_ARDUPILOT_) + /** * @brief DMA stream used for ADC1 operations. */ @@ -192,6 +194,8 @@ #define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 1) #endif +#endif // !_ARDUPILOT_ + /** * @brief ADC1 DMA priority (0..3|lowest..highest). */ From aafa5bf375af2be360f395be1a71361cfa8ee1a0 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:32:36 +0000 Subject: [PATCH 10/87] ADCv4: correct ADC clocks and BDMA usage --- os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c index 77554f58ab..166d2a82c9 100644 --- a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c +++ b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c @@ -257,6 +257,7 @@ static void adc_lld_serve_dma_interrupt(ADCDriver *adcp, uint32_t flags) { * @param[in] adcp pointer to the @p ADCDriver object * @param[in] flags pre-shifted content of the ISR register */ +#if defined(STM32_ADC_BDMA_REQUIRED) static void adc_lld_serve_bdma_interrupt(ADCDriver *adcp, uint32_t flags) { /* DMA errors handling.*/ @@ -280,6 +281,7 @@ static void adc_lld_serve_bdma_interrupt(ADCDriver *adcp, uint32_t flags) { } } } +#endif // STM32_ADC_BDMA_REQUIRED #endif /* STM32_ADC_USE_ADC3 == TRUE */ /** @@ -426,13 +428,11 @@ void adc_lld_init(void) { #if STM32_ADC_USE_ADC12 == TRUE rccEnableADC12(true); rccResetADC12(); - ADC12_COMMON->CCR = STM32_ADC_ADC12_CLOCK_MODE | ADC_DMA_DAMDF | ADC12_CCR_DUAL; rccDisableADC12(); #endif #if STM32_ADC_USE_ADC3 == TRUE rccEnableADC3(true); rccResetADC3(); - ADC3_COMMON->CCR = STM32_ADC_ADC3_CLOCK_MODE; rccDisableADC3(); #endif #endif @@ -467,6 +467,7 @@ msg_t adc_lld_start(ADCDriver *adcp) { rccEnableADC12(true); rccResetADC12(); + ADC12_COMMON->CCR = STM32_ADC_ADC12_CLOCK_MODE | ADC_DMA_DAMDF | ADC12_CCR_DUAL; dmaSetRequestSource(adcp->data.dma, STM32_DMAMUX1_ADC1); @@ -499,6 +500,7 @@ msg_t adc_lld_start(ADCDriver *adcp) { rccEnableADC3(true); rccResetADC3(); + ADC3_COMMON->CCR = STM32_ADC_ADC3_CLOCK_MODE; bdmaSetRequestSource(adcp->data.bdma, STM32_DMAMUX2_ADC3_REQ); @@ -562,9 +564,6 @@ void adc_lld_stop(ADCDriver *adcp) { /* Releasing the associated DMA channel.*/ dmaStreamFreeI(adcp->data.dma); adcp->data.dma = NULL; - - /* Resetting CCR options except default ones.*/ - adcp->adcc->CCR = STM32_ADC_ADC12_CLOCK_MODE | ADC_DMA_DAMDF | ADC12_CCR_DUAL; rccDisableADC12(); } #endif @@ -575,9 +574,6 @@ void adc_lld_stop(ADCDriver *adcp) { /* Releasing the associated BDMA channel.*/ bdmaStreamFreeI(adcp->data.bdma); adcp->data.bdma = NULL; - - /* Resetting CCR options except default ones.*/ - adcp->adcc->CCR = STM32_ADC_ADC3_CLOCK_MODE; rccDisableADC3(); } #endif @@ -678,10 +674,10 @@ void adc_lld_start_conversion(ADCDriver *adcp) { adcp->adcs->ISR = adcp->adcs->ISR; /* If a callback is set enable the overflow and analog watch dog interrupts. */ if (grpp->error_cb != NULL) { - adcp->adcs->IER = ADC_IER_OVRIE | ADC_IER_AWD1IE | - ADC_IER_AWD2IE | - ADC_IER_AWD3IE; - + adcp->adcs->IER = ADC_IER_OVRIE | ADC_IER_AWD1IE | + ADC_IER_AWD2IE | + ADC_IER_AWD3IE; + } /* Configuring the CCR register with the user-specified settings in the conversion group configuration structure, static settings are preserved.*/ @@ -724,13 +720,12 @@ void adc_lld_start_conversion(ADCDriver *adcp) { /* ADC configuration.*/ adcp->adcm->CFGR = cfgr; adcp->adcs->CFGR = cfgr; - } -} + } else #endif /* STM32_ADC_DUAL_MODE == TRUE && STM32_ADC_USE_ADC12 == TRUE */ #if STM32_ADC_DUAL_MODE == FALSE || STM32_ADC_USE_ADC3 == TRUE /* Configuration for ADC3 and single mode ADC1 */ - + { adcp->adcm->CFGR2 = grpp->cfgr2; adcp->adcm->PCSEL = grpp->pcsel; adcp->adcm->LTR1 = grpp->ltr1; @@ -750,7 +745,12 @@ void adc_lld_start_conversion(ADCDriver *adcp) { /* ADC configuration.*/ adcp->adcm->CFGR = cfgr; -#endif + } +#else + { + // nothing to do + } +#endif /* STM32_ADC_DUAL_MODE == FALSE || STM32_ADC_USE_ADC3 == TRUE */ /* Starting conversion.*/ adcp->adcm->CR |= ADC_CR_ADSTART; From 1d076119fcaf11873ab6a9a009de2e75bf549f0c Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:34:58 +0000 Subject: [PATCH 11/87] BDMAv1: initialize streamids correctly --- os/hal/ports/STM32/LLD/BDMAv1/stm32_bdma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/LLD/BDMAv1/stm32_bdma.c b/os/hal/ports/STM32/LLD/BDMAv1/stm32_bdma.c index 411a55b30f..37308e3691 100644 --- a/os/hal/ports/STM32/LLD/BDMAv1/stm32_bdma.c +++ b/os/hal/ports/STM32/LLD/BDMAv1/stm32_bdma.c @@ -296,7 +296,7 @@ const stm32_bdma_stream_t *bdmaStreamAllocI(uint32_t id, uint32_t priority, stm32_bdmaisr_t func, void *param) { - uint32_t i, startid, endid; + uint32_t i, startid=id, endid=id; osalDbgCheckClassI(); From e4d4b3dff3fd6128b7b50be26b8803508b6f504e Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:35:44 +0000 Subject: [PATCH 12/87] DMAv2: initialize streamids correctly --- os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c b/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c index eab184a20f..e5c976d029 100644 --- a/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c +++ b/os/hal/ports/STM32/LLD/DMAv2/stm32_dma.c @@ -491,13 +491,12 @@ const stm32_dma_stream_t *dmaStreamAllocI(uint32_t id, uint32_t priority, stm32_dmaisr_t func, void *param) { - uint32_t i, startid, endid; + uint32_t i, startid=id, endid=id; osalDbgCheckClassI(); if (id < STM32_DMA_STREAMS) { startid = id; - endid = id; } #if STM32_DMA_SUPPORTS_DMAMUX == TRUE else if (id == STM32_DMA_STREAM_ID_ANY) { From c695f01a1f41d865c35e886d7eb4ce42812801ae Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:36:15 +0000 Subject: [PATCH 13/87] I2Cv1: support I2C_FLTR_ANOFF, STM32_I2C_ISR_LIMIT and i2c_lld_soft_stop Remove busy loop from timeout ISRs --- os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c | 256 ++++++++++++++++----- os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.h | 22 ++ 2 files changed, 220 insertions(+), 58 deletions(-) diff --git a/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c b/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c index 9c06ddc233..48a5c4497e 100644 --- a/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c +++ b/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.c @@ -214,6 +214,45 @@ static void i2c_lld_set_clock(I2CDriver *i2cp) { dp->CCR = regCCR; } +#ifdef I2C_FLTR_ANOFF +/** + * @brief Set filter params. + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +static void i2c_lld_set_filter(I2CDriver *i2cp) { + I2C_TypeDef *dp = i2cp->i2c; + i2cdutycycle_t duty = i2cp->config->duty_cycle; + uint8_t filter; + + if (duty == STD_DUTY_CYCLE) { + if (I2C_CLK_FREQ <= 5) { + filter = 2; + } else if (I2C_CLK_FREQ <= 10) { + filter = 12; + } else { + filter = 15; + } + } else { + if (I2C_CLK_FREQ <= 10) { + filter = 0; + } else if (I2C_CLK_FREQ <= 20) { + filter = 1; + } else if (I2C_CLK_FREQ <= 30) { + filter = 7; + } else if (I2C_CLK_FREQ <= 40) { + filter = 13; + } else { + filter = 15; + } + } + + dp->FLTR = (I2C_FLTR_ANOFF) | (I2C_FLTR_DNF & filter); +} +#endif // I2C_FLTR_ANOFF + /** * @brief Set operation mode of I2C hardware. * @@ -242,6 +281,35 @@ static void i2c_lld_set_opmode(I2CDriver *i2cp) { dp->CR1 = regCR1; } +#ifdef STM32_I2C_ISR_LIMIT +/** + * @brief reset I2C peripheral + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +static void i2c_lld_reset(I2CDriver *i2cp) { +#if STM32_I2C_USE_I2C1 + if (&I2CD1 == i2cp) { + rccResetI2C1(); + } +#endif /* STM32_I2C_USE_I2C1 */ + +#if STM32_I2C_USE_I2C2 + if (&I2CD2 == i2cp) { + rccResetI2C2(); + } +#endif /* STM32_I2C_USE_I2C2 */ + +#if STM32_I2C_USE_I2C3 + if (&I2CD3 == i2cp) { + rccResetI2C3(); + } +#endif /* STM32_I2C_USE_I2C3 */ +} +#endif // STM32_I2C_ISR_LIMIT + /** * @brief I2C shared ISR code. * @@ -254,6 +322,30 @@ static void i2c_lld_serve_event_interrupt(I2CDriver *i2cp) { uint32_t regSR2 = dp->SR2; uint32_t event = dp->SR1; +#ifdef STM32_I2C_ISR_LIMIT + if (i2cp->isr_count++ > i2cp->isr_limit) { + i2cp->errors |= I2C_ISR_LIMIT; + if (i2cp->dmatx) + dmaStreamDisable(i2cp->dmatx); + if (i2cp->dmarx) + dmaStreamDisable(i2cp->dmarx); + dp->CR1 |= I2C_CR1_SWRST; + dp->CR1 &= ~I2C_CR1_PE; + i2c_lld_reset(i2cp); + _i2c_wakeup_error_isr(i2cp); + return; + } +#endif + + if (!i2cp->in_transaction) { + // we have an interrupt while not inside an I2C operation. This + // can happen with sufficient bus noise. The best we can do is + // disable the peripheral and reset it + dp->CR1 |= I2C_CR1_SWRST; + dp->CR1 &= ~I2C_CR1_PE; + return; + } + /* Interrupts are disabled just before dmaStreamEnable() because there is no need of interrupts until next transaction begin. All the work is done by the DMA.*/ @@ -300,7 +392,7 @@ static void i2c_lld_serve_event_interrupt(I2CDriver *i2cp) { dp->CR2 &= ~I2C_CR2_ITEVTEN; break; default: - break; + break; } /* Clear ADDR flag. */ if (event & (I2C_SR1_ADDR | I2C_SR1_ADD10)) @@ -380,8 +472,30 @@ static void i2c_lld_serve_tx_end_irq(I2CDriver *i2cp, uint32_t flags) { static void i2c_lld_serve_error_interrupt(I2CDriver *i2cp, uint16_t sr) { /* Clears interrupt flags just to be safe.*/ - dmaStreamDisable(i2cp->dmatx); - dmaStreamDisable(i2cp->dmarx); + if (i2cp->dmatx) + dmaStreamDisable(i2cp->dmatx); + if (i2cp->dmarx) + dmaStreamDisable(i2cp->dmarx); + +#ifdef STM32_I2C_ISR_LIMIT + if (i2cp->isr_count++ > i2cp->isr_limit) { + i2cp->errors |= I2C_ISR_LIMIT; + i2cp->i2c->CR1 |= I2C_CR1_SWRST; + i2cp->i2c->CR1 &= ~I2C_CR1_PE; + i2c_lld_reset(i2cp); + _i2c_wakeup_error_isr(i2cp); + return; + } +#endif + + if (!i2cp->in_transaction) { + // we have an interrupt while not inside an I2C operation. This + // can happen with sufficient bus noise. The best we can do is + // disable the peripheral and reset it + i2cp->i2c->CR1 |= I2C_CR1_SWRST; + i2cp->i2c->CR1 &= ~I2C_CR1_PE; + return; + } i2cp->errors = I2C_NO_ERROR; @@ -667,6 +781,9 @@ void i2c_lld_start(I2CDriver *i2cp) { /* Setup I2C parameters.*/ i2c_lld_set_clock(i2cp); +#ifdef I2C_FLTR_ANOFF + i2c_lld_set_filter(i2cp); +#endif i2c_lld_set_opmode(i2cp); /* Ready to go.*/ @@ -718,6 +835,48 @@ void i2c_lld_stop(I2CDriver *i2cp) { } } +/** + * @brief Disable DMA, disable interrupts, but leave the peripheral enabled + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +void i2c_lld_soft_stop(I2CDriver *i2cp) { + + /* If not in stopped state then disables the I2C clock.*/ + if (i2cp->state != I2C_STOP) { + + /* I2C disable.*/ + dmaStreamFreeI(i2cp->dmatx); + dmaStreamFreeI(i2cp->dmarx); + i2cp->dmatx = NULL; + i2cp->dmarx = NULL; + +#if STM32_I2C_USE_I2C1 + if (&I2CD1 == i2cp) { + nvicDisableVector(I2C1_EV_IRQn); + nvicDisableVector(I2C1_ER_IRQn); + } +#endif + +#if STM32_I2C_USE_I2C2 + if (&I2CD2 == i2cp) { + nvicDisableVector(I2C2_EV_IRQn); + nvicDisableVector(I2C2_ER_IRQn); + } +#endif + +#if STM32_I2C_USE_I2C3 + if (&I2CD3 == i2cp) { + nvicDisableVector(I2C3_EV_IRQn); + nvicDisableVector(I2C3_ER_IRQn); + } +#endif + } +} + + /** * @brief Receives data via the I2C bus as master. * @details Number of receiving bytes must be more than 1 on STM32F1x. This is @@ -745,9 +904,13 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, uint8_t *rxbuf, size_t rxbytes, sysinterval_t timeout) { I2C_TypeDef *dp = i2cp->i2c; - systime_t start, end; msg_t msg; +#ifdef STM32_I2C_ISR_LIMIT + i2cp->isr_limit = rxbytes * STM32_I2C_ISR_LIMIT; + i2cp->isr_count = 0; +#endif + #if defined(STM32F1XX_I2C) osalDbgCheck(rxbytes > 1); #endif @@ -758,6 +921,13 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, /* Initializes driver fields, LSB = 1 -> receive.*/ i2cp->addr = (addr << 1) | 0x01; + /* we expect the bus to not be busy when this is called. If it is + * busy then immediately fail and let higher level code restart + * I2C. Note that we return with lock held. */ + if ((dp->SR2 & I2C_SR2_BUSY) || (dp->CR1 & I2C_CR1_STOP)) { + return MSG_TIMEOUT; + } + /* Releases the lock from high level driver.*/ osalSysUnlock(); @@ -766,29 +936,9 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, dmaStreamSetMemory0(i2cp->dmarx, rxbuf); dmaStreamSetTransactionSize(i2cp->dmarx, rxbytes); - /* Calculating the time window for the timeout on the busy bus condition.*/ - start = osalOsGetSystemTimeX(); - end = osalTimeAddX(start, OSAL_MS2I(STM32_I2C_BUSY_TIMEOUT)); + osalSysLock(); - /* Waits until BUSY flag is reset or, alternatively, for a timeout - condition.*/ - while (true) { - osalSysLock(); - - /* If the bus is not busy then the operation can continue, note, the - loop is exited in the locked state.*/ - if (!(dp->SR2 & I2C_SR2_BUSY) && !(dp->CR1 & I2C_CR1_STOP)) - break; - - /* If the system time went outside the allowed window then a timeout - condition is returned.*/ - if (!osalTimeIsInRangeX(osalOsGetSystemTimeX(), start, end)) { - dmaStreamDisable(i2cp->dmarx); - return MSG_TIMEOUT; - } - - osalSysUnlock(); - } + i2cp->in_transaction = true; /* Starts the operation.*/ dp->CR2 |= I2C_CR2_ITEVTEN; @@ -796,9 +946,9 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, /* Waits for the operation completion or a timeout.*/ msg = osalThreadSuspendTimeoutS(&i2cp->thread, timeout); - if (msg != MSG_OK) { - dmaStreamDisable(i2cp->dmarx); - } + dmaStreamDisable(i2cp->dmarx); + + i2cp->in_transaction = false; return msg; } @@ -833,19 +983,30 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, uint8_t *rxbuf, size_t rxbytes, sysinterval_t timeout) { I2C_TypeDef *dp = i2cp->i2c; - systime_t start, end; msg_t msg; -#if defined(STM32F1XX_I2C) +#if defined(STM32F1XX_I2C) && !defined(_ARDUPILOT_) osalDbgCheck((rxbytes == 0) || ((rxbytes > 1) && (rxbuf != NULL))); #endif +#ifdef STM32_I2C_ISR_LIMIT + i2cp->isr_limit = (txbytes + rxbytes) * STM32_I2C_ISR_LIMIT; + i2cp->isr_count = 0; +#endif + /* Resetting error flags for this transfer.*/ i2cp->errors = I2C_NO_ERROR; /* Initializes driver fields, LSB = 0 -> transmit.*/ i2cp->addr = (addr << 1); + /* we expect the bus to not be busy when this is called. If it is + * busy then immediately fail and let higher level code restart + * I2C. Note that we return with lock held. */ + if ((dp->SR2 & I2C_SR2_BUSY) || (dp->CR1 & I2C_CR1_STOP)) { + return MSG_TIMEOUT; + } + /* Releases the lock from high level driver.*/ osalSysUnlock(); @@ -859,30 +1020,9 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, dmaStreamSetMemory0(i2cp->dmarx, rxbuf); dmaStreamSetTransactionSize(i2cp->dmarx, rxbytes); - /* Calculating the time window for the timeout on the busy bus condition.*/ - start = osalOsGetSystemTimeX(); - end = osalTimeAddX(start, OSAL_MS2I(STM32_I2C_BUSY_TIMEOUT)); - - /* Waits until BUSY flag is reset or, alternatively, for a timeout - condition.*/ - while (true) { - osalSysLock(); - - /* If the bus is not busy then the operation can continue, note, the - loop is exited in the locked state.*/ - if (!(dp->SR2 & I2C_SR2_BUSY) && !(dp->CR1 & I2C_CR1_STOP)) - break; - - /* If the system time went outside the allowed window then a timeout - condition is returned.*/ - if (!osalTimeIsInRangeX(osalOsGetSystemTimeX(), start, end)) { - dmaStreamDisable(i2cp->dmatx); - dmaStreamDisable(i2cp->dmarx); - return MSG_TIMEOUT; - } + osalSysLock(); - osalSysUnlock(); - } + i2cp->in_transaction = true; /* Starts the operation.*/ dp->CR2 |= I2C_CR2_ITEVTEN; @@ -890,10 +1030,10 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, /* Waits for the operation completion or a timeout.*/ msg = osalThreadSuspendTimeoutS(&i2cp->thread, timeout); - if (msg != MSG_OK) { - dmaStreamDisable(i2cp->dmatx); - dmaStreamDisable(i2cp->dmarx); - } + dmaStreamDisable(i2cp->dmatx); + dmaStreamDisable(i2cp->dmarx); + + i2cp->in_transaction = false; return msg; } diff --git a/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.h b/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.h index b63046aa03..6575a6576d 100644 --- a/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.h +++ b/os/hal/ports/STM32/LLD/I2Cv1/hal_i2c_lld.h @@ -142,6 +142,8 @@ #define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure") #endif +#if !defined(_ARDUPILOT_) + #if STM32_ADVANCED_DMA || defined(__DOXYGEN__) /** @@ -203,6 +205,8 @@ #endif /* !STM32_ADVANCED_DMA*/ +#endif // !_ARDUPILOT_ + /* Flag for the whole STM32F1XX family. */ #if defined(STM32F10X_LD_VL) || defined(STM32F10X_MD_VL) || \ defined(STM32F10X_HD_VL) || defined(STM32F10X_LD) || \ @@ -461,6 +465,23 @@ struct hal_i2c_driver { * @brief Pointer to the I2Cx registers block. */ I2C_TypeDef *i2c; + +#ifdef STM32_I2C_ISR_LIMIT + /** + * @brief count of interrupts since transfer start + */ + uint32_t isr_count; + + /** + * @brief limit of interrupts for this transfer + */ + uint32_t isr_limit; +#endif + + /** + true when we are in an I2C transaction + */ + bool in_transaction; }; /*===========================================================================*/ @@ -500,6 +521,7 @@ extern "C" { void i2c_lld_init(void); void i2c_lld_start(I2CDriver *i2cp); void i2c_lld_stop(I2CDriver *i2cp); + void i2c_lld_soft_stop(I2CDriver *i2cp); msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, const uint8_t *txbuf, size_t txbytes, uint8_t *rxbuf, size_t rxbytes, From 432d3627adc70906d64c0ad5e2131017348fb8b2 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:38:32 +0000 Subject: [PATCH 14/87] I2Cv2: support STM32_I2C_ISR_LIMIT and i2c_lld_soft_stop add support for i2c_lld_reset --- os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c | 242 ++++++++++++++++++++- os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.h | 18 ++ 2 files changed, 257 insertions(+), 3 deletions(-) diff --git a/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c b/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c index 8ce2be7666..e17bd55c3b 100644 --- a/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c +++ b/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.c @@ -223,6 +223,39 @@ static void i2c_lld_abort_operation(I2CDriver *i2cp) { #endif } +/** + * @brief reset I2C peripheral + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +static void i2c_lld_reset(I2CDriver *i2cp) { +#if STM32_I2C_USE_I2C1 + if (&I2CD1 == i2cp) { + rccResetI2C1(); + } +#endif /* STM32_I2C_USE_I2C1 */ + +#if STM32_I2C_USE_I2C2 + if (&I2CD2 == i2cp) { + rccResetI2C2(); + } +#endif /* STM32_I2C_USE_I2C2 */ + +#if STM32_I2C_USE_I2C3 + if (&I2CD3 == i2cp) { + rccResetI2C3(); + } +#endif /* STM32_I2C_USE_I2C3 */ + +#if STM32_I2C_USE_I2C4 + if (&I2CD4 == i2cp) { + rccResetI2C4(); + } +#endif /* STM32_I2C_USE_I2C4 */ +} + /** * @brief I2C shared ISR code. * @@ -234,6 +267,13 @@ static void i2c_lld_abort_operation(I2CDriver *i2cp) { static void i2c_lld_serve_interrupt(I2CDriver *i2cp, uint32_t isr) { I2C_TypeDef *dp = i2cp->i2c; + if (!i2cp->in_transaction) { + // unexpected interrupt generated due to bus noise + dp->CR1 &= ~(I2C_CR1_TCIE | I2C_CR1_TXIE | I2C_CR1_RXIE); + i2c_lld_reset(i2cp); + return; + } + /* Special case of a received NACK, the transfer is aborted.*/ if ((isr & I2C_ISR_NACKF) != 0U) { #if STM32_I2C_USE_DMA == TRUE @@ -360,17 +400,28 @@ static void i2c_lld_serve_interrupt(I2CDriver *i2cp, uint32_t isr) { */ static void i2c_lld_serve_error_interrupt(I2CDriver *i2cp, uint32_t isr) { + if (!i2cp->in_transaction) { + // unexpected interrupt generated due to bus noise + i2cp->i2c->CR1 &= ~(I2C_CR1_TCIE | I2C_CR1_TXIE | I2C_CR1_RXIE); + i2c_lld_reset(i2cp); + return; + } + #if STM32_I2C_USE_DMA == TRUE /* Clears DMA interrupt flags just to be safe.*/ - dmaStreamDisable(i2cp->dmatx); - dmaStreamDisable(i2cp->dmarx); + if (i2cp->dmatx) + dmaStreamDisable(i2cp->dmatx); + if (i2cp->dmarx) + dmaStreamDisable(i2cp->dmarx); #else /* Disabling RX and TX interrupts.*/ i2cp->i2c->CR1 &= ~(I2C_CR1_TXIE | I2C_CR1_RXIE); #endif - if (isr & I2C_ISR_BERR) + if (isr & I2C_ISR_BERR) { i2cp->errors |= I2C_BUS_ERROR; + i2cp->i2c->ISR &= ~I2C_ISR_BERR; + } if (isr & I2C_ISR_ARLO) i2cp->errors |= I2C_ARBITRATION_LOST; @@ -390,6 +441,31 @@ static void i2c_lld_serve_error_interrupt(I2CDriver *i2cp, uint32_t isr) { /* Driver interrupt handlers. */ /*===========================================================================*/ +/** + * check if ISR count limit has been exceeded for the current + * opration. This check will prevent interrupt storms in case the + * peripheral is behaving badly enough to cause unexpected interrupts + * and normal interrupt acknowledgement doesn't work + */ +static bool i2c_lld_check_isr_limit(I2CDriver *i2cp) { + (void)i2cp; +#ifdef STM32_I2C_ISR_LIMIT + if (i2cp->isr_count++ > i2cp->isr_limit) { + i2cp->errors |= I2C_ISR_LIMIT; + i2c_lld_reset(i2cp); +#if STM32_I2C_USE_DMA == TRUE + if (i2cp->dmatx) + dmaStreamDisable(i2cp->dmatx); + if (i2cp->dmarx) + dmaStreamDisable(i2cp->dmarx); +#endif // STM32_I2C_USE_DMA + _i2c_wakeup_error_isr(i2cp); + return true; + } +#endif // STM32_I2C_ISR_LIMIT + return false; +} + #if STM32_I2C_USE_I2C1 || defined(__DOXYGEN__) #if defined(STM32_I2C1_GLOBAL_HANDLER) || defined(__DOXYGEN__) /** @@ -402,6 +478,11 @@ OSAL_IRQ_HANDLER(STM32_I2C1_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD1)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD1.i2c->ICR = isr; @@ -419,6 +500,11 @@ OSAL_IRQ_HANDLER(STM32_I2C1_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD1)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD1.i2c->ICR = isr & I2C_INT_MASK; @@ -432,6 +518,11 @@ OSAL_IRQ_HANDLER(STM32_I2C1_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD1)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD1.i2c->ICR = isr & I2C_ERROR_MASK; @@ -457,6 +548,11 @@ OSAL_IRQ_HANDLER(STM32_I2C2_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD2)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD2.i2c->ICR = isr; @@ -474,6 +570,11 @@ OSAL_IRQ_HANDLER(STM32_I2C2_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD2)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD2.i2c->ICR = isr & I2C_INT_MASK; @@ -487,6 +588,11 @@ OSAL_IRQ_HANDLER(STM32_I2C2_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD2)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD2.i2c->ICR = isr & I2C_ERROR_MASK; @@ -512,6 +618,11 @@ OSAL_IRQ_HANDLER(STM32_I2C3_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD3)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD3.i2c->ICR = isr; @@ -529,6 +640,11 @@ OSAL_IRQ_HANDLER(STM32_I2C3_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD3)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD3.i2c->ICR = isr & I2C_INT_MASK; @@ -542,6 +658,11 @@ OSAL_IRQ_HANDLER(STM32_I2C3_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD3)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD3.i2c->ICR = isr & I2C_ERROR_MASK; @@ -567,6 +688,11 @@ OSAL_IRQ_HANDLER(STM32_I2C4_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD4)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD4.i2c->ICR = isr; @@ -584,6 +710,11 @@ OSAL_IRQ_HANDLER(STM32_I2C4_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD4)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD4.i2c->ICR = isr & I2C_INT_MASK; @@ -597,6 +728,11 @@ OSAL_IRQ_HANDLER(STM32_I2C4_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD4)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD4.i2c->ICR = isr & I2C_ERROR_MASK; @@ -948,6 +1084,79 @@ void i2c_lld_stop(I2CDriver *i2cp) { } } +/** + * @brief Disable DMA, disable interrupts, but leave the peripheral enabled + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +void i2c_lld_soft_stop(I2CDriver *i2cp) { + + /* If not in stopped state then disables the I2C clock.*/ + if (i2cp->state != I2C_STOP) { + +#if STM32_I2C_USE_DMA == TRUE + dmaStreamFreeI(i2cp->dmatx); + dmaStreamFreeI(i2cp->dmarx); + i2cp->dmatx = NULL; + i2cp->dmarx = NULL; +#endif + +#if STM32_I2C_USE_I2C1 + if (&I2CD1 == i2cp) { +#if defined(STM32_I2C1_GLOBAL_NUMBER) || defined(__DOXYGEN__) + nvicDisableVector(STM32_I2C1_GLOBAL_NUMBER); +#elif defined(STM32_I2C1_EVENT_NUMBER) && defined(STM32_I2C1_ERROR_NUMBER) + nvicDisableVector(STM32_I2C1_EVENT_NUMBER); + nvicDisableVector(STM32_I2C1_ERROR_NUMBER); +#else +#error "I2C1 interrupt numbers not defined" +#endif + } +#endif + +#if STM32_I2C_USE_I2C2 + if (&I2CD2 == i2cp) { +#if defined(STM32_I2C2_GLOBAL_NUMBER) || defined(__DOXYGEN__) + nvicDisableVector(STM32_I2C2_GLOBAL_NUMBER); +#elif defined(STM32_I2C2_EVENT_NUMBER) && defined(STM32_I2C2_ERROR_NUMBER) + nvicDisableVector(STM32_I2C2_EVENT_NUMBER); + nvicDisableVector(STM32_I2C2_ERROR_NUMBER); +#else +#error "I2C2 interrupt numbers not defined" +#endif + } +#endif + +#if STM32_I2C_USE_I2C3 + if (&I2CD3 == i2cp) { +#if defined(STM32_I2C3_GLOBAL_NUMBER) || defined(__DOXYGEN__) + nvicDisableVector(STM32_I2C3_GLOBAL_NUMBER); +#elif defined(STM32_I2C3_EVENT_NUMBER) && defined(STM32_I2C3_ERROR_NUMBER) + nvicDisableVector(STM32_I2C3_EVENT_NUMBER); + nvicDisableVector(STM32_I2C3_ERROR_NUMBER); +#else +#error "I2C3 interrupt numbers not defined" +#endif + } +#endif + +#if STM32_I2C_USE_I2C4 + if (&I2CD4 == i2cp) { +#if defined(STM32_I2C4_GLOBAL_NUMBER) || defined(__DOXYGEN__) + nvicDisableVector(STM32_I2C4_GLOBAL_NUMBER); +#elif defined(STM32_I2C4_EVENT_NUMBER) && defined(STM32_I2C4_ERROR_NUMBER) + nvicDisableVector(STM32_I2C4_EVENT_NUMBER); + nvicDisableVector(STM32_I2C4_ERROR_NUMBER); +#else +#error "I2C4 interrupt numbers not defined" +#endif + } +#endif + } +} + /** * @brief Receives data via the I2C bus as master. * @@ -982,6 +1191,11 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, /* Releases the lock from high level driver.*/ osalSysUnlock(); +#ifdef STM32_I2C_ISR_LIMIT + i2cp->isr_limit = rxbytes * STM32_I2C_ISR_LIMIT; + i2cp->isr_count = 0; +#endif // STM32_I2C_ISR_LIMIT + #if STM32_I2C_USE_DMA == TRUE /* RX DMA setup.*/ dmaStreamSetMode(i2cp->dmarx, i2cp->rxdmamode); @@ -1015,6 +1229,8 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, osalSysUnlock(); } + i2cp->in_transaction = true; + /* Setting up the slave address.*/ i2c_lld_set_address(i2cp, addr); @@ -1048,6 +1264,12 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, #endif } +#if STM32_I2C_USE_DMA == TRUE + dmaStreamDisable(i2cp->dmarx); +#endif + + i2cp->in_transaction = false; + return msg; } @@ -1088,6 +1310,11 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, /* Releases the lock from high level driver.*/ osalSysUnlock(); +#ifdef STM32_I2C_ISR_LIMIT + i2cp->isr_limit = (txbytes + rxbytes) * STM32_I2C_ISR_LIMIT; + i2cp->isr_count = 0; +#endif + #if STM32_I2C_USE_DMA == TRUE /* TX DMA setup.*/ dmaStreamSetMode(i2cp->dmatx, i2cp->txdmamode); @@ -1128,6 +1355,8 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, osalSysUnlock(); } + i2cp->in_transaction = true; + /* Setting up the slave address.*/ i2c_lld_set_address(i2cp, addr); @@ -1161,6 +1390,13 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, #endif } +#if STM32_I2C_USE_DMA == TRUE + dmaStreamDisable(i2cp->dmatx); + dmaStreamDisable(i2cp->dmarx); +#endif + + i2cp->in_transaction = false; + return msg; } diff --git a/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.h b/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.h index 4645e86f81..cabb68c829 100644 --- a/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.h +++ b/os/hal/ports/STM32/LLD/I2Cv2/hal_i2c_lld.h @@ -452,6 +452,23 @@ struct hal_i2c_driver { * @brief Pointer to the I2Cx registers block. */ I2C_TypeDef *i2c; + +#ifdef STM32_I2C_ISR_LIMIT + /** + * @brief count of interrupts since transfer start + */ + uint32_t isr_count; + + /** + * @brief limit of interrupts for this transfer + */ + uint32_t isr_limit; +#endif + + /** + true when we are in an I2C transaction + */ + bool in_transaction; }; /*===========================================================================*/ @@ -496,6 +513,7 @@ extern "C" { void i2c_lld_init(void); void i2c_lld_start(I2CDriver *i2cp); void i2c_lld_stop(I2CDriver *i2cp); + void i2c_lld_soft_stop(I2CDriver *i2cp); msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, const uint8_t *txbuf, size_t txbytes, uint8_t *rxbuf, size_t rxbytes, From 0d759fe8e65156c804673ed6cb17fab7aaa44516 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:40:51 +0000 Subject: [PATCH 15/87] I2Cv3: support STM32_I2C_ISR_LIMIT and i2c_lld_soft_stop add support for i2c_lld_reset --- os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.c | 209 ++++++++++++++++++++- os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.h | 21 +++ 2 files changed, 226 insertions(+), 4 deletions(-) diff --git a/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.c b/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.c index 6786e9161d..81de54b470 100644 --- a/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.c +++ b/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.c @@ -162,7 +162,8 @@ static inline void i2c_lld_stop_rx_dma(I2CDriver *i2cp) { #endif #if defined(STM32_I2C_BDMA_REQUIRED) { - bdmaStreamDisable(i2cp->rx.bdma); + if (i2cp->rx.bdma) + bdmaStreamDisable(i2cp->rx.bdma); } #endif #if defined(STM32_I2C_DMA_REQUIRED) && defined(STM32_I2C_BDMA_REQUIRED) @@ -171,7 +172,8 @@ static inline void i2c_lld_stop_rx_dma(I2CDriver *i2cp) { #endif /* STM32_I2C4_USE_BDMA == TRUE */ #if defined(STM32_I2C_DMA_REQUIRED) { - dmaStreamDisable(i2cp->rx.dma); + if (i2cp->rx.dma) + dmaStreamDisable(i2cp->rx.dma); } #endif } @@ -184,7 +186,8 @@ static inline void i2c_lld_stop_tx_dma(I2CDriver *i2cp) { #endif #if defined(STM32_I2C_BDMA_REQUIRED) { - bdmaStreamDisable(i2cp->tx.bdma); + if (i2cp->tx.bdma) + bdmaStreamDisable(i2cp->tx.bdma); } #endif #if defined(STM32_I2C_DMA_REQUIRED) && defined(STM32_I2C_BDMA_REQUIRED) @@ -193,7 +196,8 @@ static inline void i2c_lld_stop_tx_dma(I2CDriver *i2cp) { #endif /* STM32_I2C4_USE_BDMA == TRUE */ #if defined(STM32_I2C_DMA_REQUIRED) { - dmaStreamDisable(i2cp->tx.dma); + if (i2cp->tx.dma) + dmaStreamDisable(i2cp->tx.dma); } #endif } @@ -303,6 +307,8 @@ static void i2c_lld_abort_operation(I2CDriver *i2cp) { #endif } +static void i2c_lld_reset(I2CDriver *i2cp); + /** * @brief I2C shared ISR code. * @@ -314,6 +320,12 @@ static void i2c_lld_abort_operation(I2CDriver *i2cp) { static void i2c_lld_serve_interrupt(I2CDriver *i2cp, uint32_t isr) { I2C_TypeDef *dp = i2cp->i2c; + if (!i2cp->in_transaction) { + dp->CR1 &= ~(I2C_CR1_TCIE | I2C_CR1_TXIE | I2C_CR1_RXIE); + i2c_lld_reset(i2cp); + return; + } + /* Special case of a received NACK, the transfer is aborted.*/ if ((isr & I2C_ISR_NACKF) != 0U) { #if STM32_I2C_USE_DMA == TRUE @@ -440,6 +452,12 @@ static void i2c_lld_serve_interrupt(I2CDriver *i2cp, uint32_t isr) { */ static void i2c_lld_serve_error_interrupt(I2CDriver *i2cp, uint32_t isr) { + if (!i2cp->in_transaction) { + i2cp->i2c->CR1 &= ~(I2C_CR1_TCIE | I2C_CR1_TXIE | I2C_CR1_RXIE); + i2c_lld_reset(i2cp); + return; + } + #if STM32_I2C_USE_DMA == TRUE /* Clears DMA interrupt flags just to be safe.*/ i2c_lld_stop_rx_dma(i2cp); @@ -470,6 +488,61 @@ static void i2c_lld_serve_error_interrupt(I2CDriver *i2cp, uint32_t isr) { /* Driver interrupt handlers. */ /*===========================================================================*/ +/** + * @brief reset i2c peripheral + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +static void i2c_lld_reset(I2CDriver *i2cp) { +#if STM32_I2C_USE_I2C1 + if (&I2CD1 == i2cp) { + rccResetI2C1(); + } +#endif /* STM32_I2C_USE_I2C1 */ + +#if STM32_I2C_USE_I2C2 + if (&I2CD2 == i2cp) { + rccResetI2C2(); + } +#endif /* STM32_I2C_USE_I2C2 */ + +#if STM32_I2C_USE_I2C3 + if (&I2CD3 == i2cp) { + rccResetI2C3(); + } +#endif /* STM32_I2C_USE_I2C3 */ + +#if STM32_I2C_USE_I2C4 + if (&I2CD4 == i2cp) { + rccResetI2C4(); + } +#endif /* STM32_I2C_USE_I2C4 */ +} + +/** + * check if ISR count limit has been exceeded for the current + * opration. This check will prevent interrupt storms in case the + * peripheral is behaving badly enough to cause unexpected interrupts + * and normal interrupt acknowledgement doesn't work + */ +static bool i2c_lld_check_isr_limit(I2CDriver *i2cp) { +#ifdef STM32_I2C_ISR_LIMIT + if (i2cp->isr_count++ > i2cp->isr_limit) { + i2cp->errors |= I2C_ISR_LIMIT; + i2c_lld_reset(i2cp); +#if STM32_I2C_USE_DMA == TRUE + i2c_lld_stop_rx_dma(i2cp); + i2c_lld_stop_tx_dma(i2cp); +#endif + _i2c_wakeup_error_isr(i2cp); + return true; + } +#endif // STM32_I2C_ISR_LIMIT + return false; +} + #if STM32_I2C_USE_I2C1 || defined(__DOXYGEN__) #if defined(STM32_I2C1_GLOBAL_HANDLER) || defined(__DOXYGEN__) /** @@ -482,6 +555,11 @@ OSAL_IRQ_HANDLER(STM32_I2C1_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD1)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD1.i2c->ICR = isr; @@ -499,6 +577,11 @@ OSAL_IRQ_HANDLER(STM32_I2C1_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD1)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD1.i2c->ICR = isr & I2C_INT_MASK; @@ -512,6 +595,11 @@ OSAL_IRQ_HANDLER(STM32_I2C1_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD1)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD1.i2c->ICR = isr & I2C_ERROR_MASK; @@ -537,6 +625,11 @@ OSAL_IRQ_HANDLER(STM32_I2C2_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD2)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD2.i2c->ICR = isr; @@ -554,6 +647,11 @@ OSAL_IRQ_HANDLER(STM32_I2C2_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD2)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD2.i2c->ICR = isr & I2C_INT_MASK; @@ -567,6 +665,11 @@ OSAL_IRQ_HANDLER(STM32_I2C2_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD2)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD2.i2c->ICR = isr & I2C_ERROR_MASK; @@ -592,6 +695,11 @@ OSAL_IRQ_HANDLER(STM32_I2C3_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD3)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD3.i2c->ICR = isr; @@ -609,6 +717,11 @@ OSAL_IRQ_HANDLER(STM32_I2C3_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD3)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD3.i2c->ICR = isr & I2C_INT_MASK; @@ -622,6 +735,11 @@ OSAL_IRQ_HANDLER(STM32_I2C3_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD3)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD3.i2c->ICR = isr & I2C_ERROR_MASK; @@ -647,6 +765,11 @@ OSAL_IRQ_HANDLER(STM32_I2C4_GLOBAL_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD4)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD4.i2c->ICR = isr; @@ -664,6 +787,11 @@ OSAL_IRQ_HANDLER(STM32_I2C4_EVENT_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD4)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD4.i2c->ICR = isr & I2C_INT_MASK; @@ -677,6 +805,11 @@ OSAL_IRQ_HANDLER(STM32_I2C4_ERROR_HANDLER) { OSAL_IRQ_PROLOGUE(); + if (i2c_lld_check_isr_limit(&I2CD4)) { + OSAL_IRQ_EPILOGUE(); + return; + } + /* Clearing IRQ bits.*/ I2CD4.i2c->ICR = isr & I2C_ERROR_MASK; @@ -1014,7 +1147,9 @@ void i2c_lld_stop(I2CDriver *i2cp) { #if defined(STM32_I2C_BDMA_REQUIRED) { bdmaStreamFreeI(i2cp->rx.bdma); + i2cp->rx.bdma = NULL; bdmaStreamFreeI(i2cp->tx.bdma); + i2cp->tx.bdma = NULL; } #endif #if defined(STM32_I2C_DMA_REQUIRED) && defined(STM32_I2C_BDMA_REQUIRED) @@ -1023,7 +1158,9 @@ void i2c_lld_stop(I2CDriver *i2cp) { #if defined(STM32_I2C_DMA_REQUIRED) { dmaStreamFreeI(i2cp->rx.dma); + i2cp->rx.dma = NULL; dmaStreamFreeI(i2cp->tx.dma); + i2cp->tx.dma = NULL; } #endif @@ -1053,6 +1190,43 @@ void i2c_lld_stop(I2CDriver *i2cp) { } } +/** + * @brief Disable DMA, but leave the peripheral enabled + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @notapi + */ +void i2c_lld_soft_stop(I2CDriver *i2cp) { + + /* If not in stopped state then disables the I2C clock.*/ + if (i2cp->state != I2C_STOP) { + +#if defined(STM32_I2C_DMA_REQUIRED) && defined(STM32_I2C_BDMA_REQUIRED) + if(i2cp->is_bdma) +#endif +#if defined(STM32_I2C_BDMA_REQUIRED) + { + bdmaStreamFreeI(i2cp->rx.bdma); + i2cp->rx.bdma = NULL; + bdmaStreamFreeI(i2cp->tx.bdma); + i2cp->tx.bdma = NULL; + } +#endif +#if defined(STM32_I2C_DMA_REQUIRED) && defined(STM32_I2C_BDMA_REQUIRED) + else +#endif +#if defined(STM32_I2C_DMA_REQUIRED) + { + dmaStreamFreeI(i2cp->rx.dma); + i2cp->rx.dma = NULL; + dmaStreamFreeI(i2cp->tx.dma); + i2cp->tx.dma = NULL; + } +#endif + } +} + /** * @brief Receives data via the I2C bus as master. * @@ -1087,6 +1261,11 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, /* Releases the lock from high level driver.*/ osalSysUnlock(); +#ifdef STM32_I2C_ISR_LIMIT + i2cp->isr_limit = rxbytes * STM32_I2C_ISR_LIMIT; + i2cp->isr_count = 0; +#endif // STM32_I2C_ISR_LIMIT + /* Sizes of transfer phases.*/ i2cp->txbytes = 0U; i2cp->rxbytes = rxbytes; @@ -1140,6 +1319,8 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, osalSysUnlock(); } + i2cp->in_transaction = true; + /* Setting up the slave address.*/ i2c_lld_set_address(i2cp, addr); @@ -1173,6 +1354,12 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, #endif } +#if STM32_I2C_USE_DMA == TRUE + i2c_lld_stop_rx_dma(i2cp); +#endif + + i2cp->in_transaction = false; + return msg; } @@ -1213,6 +1400,11 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, /* Releases the lock from high level driver.*/ osalSysUnlock(); +#ifdef STM32_I2C_ISR_LIMIT + i2cp->isr_limit = (txbytes + rxbytes) * STM32_I2C_ISR_LIMIT; + i2cp->isr_count = 0; +#endif // STM32_I2C_ISR_LIMIT + /* Sizes of transfer phases.*/ i2cp->txbytes = txbytes; i2cp->rxbytes = rxbytes; @@ -1275,6 +1467,8 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, osalSysUnlock(); } + i2cp->in_transaction = true; + /* Setting up the slave address.*/ i2c_lld_set_address(i2cp, addr); @@ -1308,6 +1502,13 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, #endif } +#if STM32_I2C_USE_DMA == TRUE + i2c_lld_stop_rx_dma(i2cp); + i2c_lld_stop_tx_dma(i2cp); +#endif + + i2cp->in_transaction = false; + return msg; } diff --git a/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.h b/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.h index 182f722254..67a274a901 100644 --- a/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.h +++ b/os/hal/ports/STM32/LLD/I2Cv3/hal_i2c_lld.h @@ -384,6 +384,9 @@ #if !defined(STM32_BDMA_REQUIRED) #define STM32_BDMA_REQUIRED #endif +#if !defined(STM32_I2C_BDMA_REQUIRED) +#define STM32_I2C_BDMA_REQUIRED +#endif #endif #else /* STM32_I2C4_USE_BDMA != TRUE */ @@ -546,6 +549,23 @@ struct hal_i2c_driver { * @brief Pointer to the I2Cx registers block. */ I2C_TypeDef *i2c; + +#ifdef STM32_I2C_ISR_LIMIT + /** + * @brief count of interrupts since transfer start + */ + uint32_t isr_count; + + /** + * @brief limit of interrupts for this transfer + */ + uint32_t isr_limit; +#endif + + /** + true when we are in an I2C transaction + */ + bool in_transaction; }; /*===========================================================================*/ @@ -590,6 +610,7 @@ extern "C" { void i2c_lld_init(void); void i2c_lld_start(I2CDriver *i2cp); void i2c_lld_stop(I2CDriver *i2cp); + void i2c_lld_soft_stop(I2CDriver *i2cp); msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, const uint8_t *txbuf, size_t txbytes, uint8_t *rxbuf, size_t rxbytes, From 9c7cfa5e9e2d5949e78bf874df3a3be0038f7bf5 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:43:30 +0000 Subject: [PATCH 16/87] QUADSPIv2: clear tx flags support ALT bytes in XPI mode --- os/hal/ports/STM32/LLD/QUADSPIv2/hal_wspi_lld.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/LLD/QUADSPIv2/hal_wspi_lld.c b/os/hal/ports/STM32/LLD/QUADSPIv2/hal_wspi_lld.c index 234e76bf16..fa760e2ddd 100644 --- a/os/hal/ports/STM32/LLD/QUADSPIv2/hal_wspi_lld.c +++ b/os/hal/ports/STM32/LLD/QUADSPIv2/hal_wspi_lld.c @@ -185,6 +185,9 @@ void wspi_lld_stop(WSPIDriver *wspip) { * @notapi */ void wspi_lld_command(WSPIDriver *wspip, const wspi_command_t *cmdp) { + // Clear Flags from previous trx + wspip->qspi->FCR = QUADSPI_FCR_CTEF | QUADSPI_FCR_CTCF | + QUADSPI_FCR_CSMF | QUADSPI_FCR_CTOF; #if STM32_USE_STM32_D1_WORKAROUND == TRUE /* If it is a command without address and alternate phases then the command @@ -233,6 +236,10 @@ void wspi_lld_send(WSPIDriver *wspip, const wspi_command_t *cmdp, uint32_t ccr = STM32_MDMA_CCR_PL(STM32_WSPI_QUADSPI1_MDMA_PRIORITY) | STM32_MDMA_CCR_TEIE; /* On transfer error. */ + // Clear Flags from previous trx + wspip->qspi->FCR = QUADSPI_FCR_CTEF | QUADSPI_FCR_CTCF | + QUADSPI_FCR_CSMF | QUADSPI_FCR_CTOF; + /* MDMA initializations.*/ mdmaChannelSetSourceX(wspip->mdma, txbuf); mdmaChannelSetDestinationX(wspip->mdma, &wspip->qspi->DR); @@ -319,7 +326,7 @@ void wspi_lld_map_flash(WSPIDriver *wspip, /* Starting memory mapped mode using the passed parameters.*/ wspip->qspi->DLR = 0; - wspip->qspi->ABR = 0; + wspip->qspi->ABR = cmdp->alt; wspip->qspi->AR = 0; wspip->qspi->CCR = cmdp->cmd | cmdp->cfg | QUADSPI_CCR_DUMMY_CYCLES(cmdp->dummy) | From 132bc3ef8e11cf509d4856c20ca8f9d797ec0123 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:49:28 +0000 Subject: [PATCH 17/87] SPIv1: reset clocks before enabling peripheral --- os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c b/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c index 9470e4c249..421ccc0461 100644 --- a/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv1/hal_spi_lld.c @@ -328,6 +328,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI1(); rccEnableSPI1(true); } #endif @@ -343,6 +344,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI2(); rccEnableSPI2(true); } #endif @@ -358,6 +360,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI3(); rccEnableSPI3(true); } #endif @@ -373,6 +376,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI4(); rccEnableSPI4(true); } #endif @@ -388,6 +392,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI5(); rccEnableSPI5(true); } #endif @@ -403,6 +408,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI6(); rccEnableSPI6(true); } #endif From 746ff822a310b04a69c28543d9c5d9836777d3c9 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:50:32 +0000 Subject: [PATCH 18/87] SPIv2: reset clocks before enabling peripheral --- os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c b/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c index f20e243524..0dcdb18321 100644 --- a/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv2/hal_spi_lld.c @@ -329,6 +329,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI1(); rccEnableSPI1(true); #if STM32_DMA_SUPPORTS_DMAMUX dmaSetRequestSource(spip->dmarx, STM32_DMAMUX1_SPI1_RX); @@ -348,6 +349,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI2(); rccEnableSPI2(true); #if STM32_DMA_SUPPORTS_DMAMUX dmaSetRequestSource(spip->dmarx, STM32_DMAMUX1_SPI2_RX); @@ -367,6 +369,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI3(); rccEnableSPI3(true); #if STM32_DMA_SUPPORTS_DMAMUX dmaSetRequestSource(spip->dmarx, STM32_DMAMUX1_SPI3_RX); @@ -386,6 +389,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI4(); rccEnableSPI4(true); #if STM32_DMA_SUPPORTS_DMAMUX dmaSetRequestSource(spip->dmarx, STM32_DMAMUX1_SPI4_RX); @@ -405,6 +409,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI5(); rccEnableSPI5(true); #if STM32_DMA_SUPPORTS_DMAMUX dmaSetRequestSource(spip->dmarx, STM32_DMAMUX1_SPI5_RX); @@ -424,6 +429,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_tx_interrupt, (void *)spip); osalDbgAssert(spip->dmatx != NULL, "unable to allocate stream"); + rccResetSPI6(); rccEnableSPI6(true); #if STM32_DMA_SUPPORTS_DMAMUX dmaSetRequestSource(spip->dmarx, STM32_DMAMUX1_SPI6_RX); From 4724af8c3cbedb64ac9019798024c5c209dc14b5 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:50:53 +0000 Subject: [PATCH 19/87] SPIv3: reset clocks before enabling peripheral support DMA-safe dummy data for send and receive --- os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c | 22 ++++++++++++------- os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.h | 6 ++++- os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c | 16 +++++++------- os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.h | 5 ++++- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c index 96b84ac05f..f3d7f6af58 100644 --- a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.c @@ -520,6 +520,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_dma_tx_interrupt, (void *)spip); osalDbgAssert(spip->tx.dma != NULL, "unable to allocate stream"); + rccResetSPI1(); rccEnableSPI1(true); dmaSetRequestSource(spip->rx.dma, STM32_DMAMUX1_SPI1_RX); dmaSetRequestSource(spip->tx.dma, STM32_DMAMUX1_SPI1_TX); @@ -537,6 +538,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_dma_tx_interrupt, (void *)spip); osalDbgAssert(spip->tx.dma != NULL, "unable to allocate stream"); + rccResetSPI2(); rccEnableSPI2(true); dmaSetRequestSource(spip->rx.dma, STM32_DMAMUX1_SPI2_RX); dmaSetRequestSource(spip->tx.dma, STM32_DMAMUX1_SPI2_TX); @@ -554,6 +556,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_dma_tx_interrupt, (void *)spip); osalDbgAssert(spip->tx.dma != NULL, "unable to allocate stream"); + rccResetSPI3(); rccEnableSPI3(true); dmaSetRequestSource(spip->rx.dma, STM32_DMAMUX1_SPI3_RX); dmaSetRequestSource(spip->tx.dma, STM32_DMAMUX1_SPI3_TX); @@ -571,6 +574,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_dma_tx_interrupt, (void *)spip); osalDbgAssert(spip->tx.dma != NULL, "unable to allocate stream"); + rccResetSPI4(); rccEnableSPI4(true); dmaSetRequestSource(spip->rx.dma, STM32_DMAMUX1_SPI4_RX); dmaSetRequestSource(spip->tx.dma, STM32_DMAMUX1_SPI4_TX); @@ -588,6 +592,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_dma_tx_interrupt, (void *)spip); osalDbgAssert(spip->tx.dma != NULL, "unable to allocate stream"); + rccResetSPI5(); rccEnableSPI5(true); dmaSetRequestSource(spip->rx.dma, STM32_DMAMUX1_SPI5_RX); dmaSetRequestSource(spip->tx.dma, STM32_DMAMUX1_SPI5_TX); @@ -605,6 +610,7 @@ void spi_lld_start(SPIDriver *spip) { (stm32_dmaisr_t)spi_lld_serve_bdma_tx_interrupt, (void *)spip); osalDbgAssert(spip->tx.dma != NULL, "unable to allocate stream"); + rccResetSPI6(); rccEnableSPI6(true); bdmaSetRequestSource(spip->rx.bdma, STM32_DMAMUX2_SPI6_RX); bdmaSetRequestSource(spip->tx.bdma, STM32_DMAMUX2_SPI6_TX); @@ -834,11 +840,11 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) { #endif #if defined(STM32_SPI_BDMA_REQUIRED) { - bdmaStreamSetMemory(spip->rx.bdma, &dummyrx); + bdmaStreamSetMemory(spip->rx.bdma, spip->config->dummyrx?spip->config->dummyrx:&dummyrx); bdmaStreamSetTransactionSize(spip->rx.bdma, n); bdmaStreamSetMode(spip->rx.bdma, spip->rxdmamode); - bdmaStreamSetMemory(spip->tx.bdma, &dummytx); + bdmaStreamSetMemory(spip->tx.bdma, spip->config->dummytx?spip->config->dummytx:&dummytx); bdmaStreamSetTransactionSize(spip->tx.bdma, n); bdmaStreamSetMode(spip->tx.bdma, spip->txdmamode); @@ -851,11 +857,11 @@ void spi_lld_ignore(SPIDriver *spip, size_t n) { #endif #if defined(STM32_SPI_DMA_REQUIRED) { - dmaStreamSetMemory0(spip->rx.dma, &dummyrx); + dmaStreamSetMemory0(spip->rx.dma, spip->config->dummyrx?spip->config->dummyrx:&dummyrx); dmaStreamSetTransactionSize(spip->rx.dma, n); dmaStreamSetMode(spip->rx.dma, spip->rxdmamode); - dmaStreamSetMemory0(spip->tx.dma, &dummytx); + dmaStreamSetMemory0(spip->tx.dma, spip->config->dummytx?spip->config->dummytx:&dummytx); dmaStreamSetTransactionSize(spip->tx.dma, n); dmaStreamSetMode(spip->tx.dma, spip->txdmamode); @@ -951,7 +957,7 @@ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { #endif #if defined(STM32_SPI_BDMA_REQUIRED) { - bdmaStreamSetMemory(spip->rx.bdma, &dummyrx); + bdmaStreamSetMemory(spip->rx.bdma, spip->config->dummyrx?spip->config->dummyrx:&dummyrx); bdmaStreamSetTransactionSize(spip->rx.bdma, n); bdmaStreamSetMode(spip->rx.bdma, spip->rxdmamode); @@ -968,7 +974,7 @@ void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { #endif #if defined(STM32_SPI_DMA_REQUIRED) { - dmaStreamSetMemory0(spip->rx.dma, &dummyrx); + dmaStreamSetMemory0(spip->rx.dma, spip->config->dummyrx?spip->config->dummyrx:&dummyrx); dmaStreamSetTransactionSize(spip->rx.dma, n); dmaStreamSetMode(spip->rx.dma, spip->rxdmamode); @@ -1012,7 +1018,7 @@ void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { bdmaStreamSetTransactionSize(spip->rx.bdma, n); bdmaStreamSetMode(spip->rx.bdma, spip->rxdmamode | STM32_BDMA_CR_MINC); - bdmaStreamSetMemory(spip->tx.bdma, &dummytx); + bdmaStreamSetMemory(spip->tx.bdma, spip->config->dummytx?spip->config->dummytx:&dummytx); bdmaStreamSetTransactionSize(spip->tx.bdma, n); bdmaStreamSetMode(spip->tx.bdma, spip->txdmamode); @@ -1029,7 +1035,7 @@ void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { dmaStreamSetTransactionSize(spip->rx.dma, n); dmaStreamSetMode(spip->rx.dma, spip->rxdmamode | STM32_DMA_CR_MINC); - dmaStreamSetMemory0(spip->tx.dma, &dummytx); + dmaStreamSetMemory0(spip->tx.dma, spip->config->dummytx?spip->config->dummytx:&dummytx); dmaStreamSetTransactionSize(spip->tx.dma, n); dmaStreamSetMode(spip->tx.dma, spip->txdmamode); diff --git a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.h b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.h index 13b420327f..fdf4c66c53 100644 --- a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.h +++ b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_lld.h @@ -530,7 +530,11 @@ /* SPI CFG1 register initialization data.*/ \ uint32_t cfg1; \ /* SPI CFG2 register initialization data.*/ \ - uint32_t cfg2 + uint32_t cfg2; \ + /* pointer to dummy data for send and receive. Must be DMA safe */ \ + uint32_t *dummytx; \ + uint32_t *dummyrx + /*===========================================================================*/ /* External declarations. */ diff --git a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c index 2ec431edd2..707a24e1da 100644 --- a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c +++ b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.c @@ -1076,11 +1076,11 @@ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { #endif #if defined(STM32_SPI_BDMA_REQUIRED) { - bdmaStreamSetMemory(spip->rx.bdma, &spip->rxsink); + bdmaStreamSetMemory(spip->rx.bdma, spip->config->rxsink?spip->config->rxsink:&spip->rxsink); bdmaStreamSetTransactionSize(spip->rx.bdma, n); bdmaStreamSetMode(spip->rx.bdma, spip->rxdmamode); - bdmaStreamSetMemory(spip->tx.bdma, &spip->txsource); + bdmaStreamSetMemory(spip->tx.bdma, spip->config->txsource?spip->config->txsource:&spip->txsource); bdmaStreamSetTransactionSize(spip->tx.bdma, n); bdmaStreamSetMode(spip->tx.bdma, spip->txdmamode); @@ -1093,11 +1093,11 @@ msg_t spi_lld_ignore(SPIDriver *spip, size_t n) { #endif #if defined(STM32_SPI_DMA_REQUIRED) { - dmaStreamSetMemory0(spip->rx.dma, &spip->rxsink); + dmaStreamSetMemory0(spip->rx.dma, spip->config->rxsink?spip->config->rxsink:&spip->rxsink); dmaStreamSetTransactionSize(spip->rx.dma, n); dmaStreamSetMode(spip->rx.dma, spip->rxdmamode); - dmaStreamSetMemory0(spip->tx.dma, &spip->txsource); + dmaStreamSetMemory0(spip->tx.dma, spip->config->txsource?spip->config->txsource:&spip->txsource); dmaStreamSetTransactionSize(spip->tx.dma, n); dmaStreamSetMode(spip->tx.dma, spip->txdmamode); @@ -1195,7 +1195,7 @@ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { #endif #if defined(STM32_SPI_BDMA_REQUIRED) { - bdmaStreamSetMemory(spip->rx.bdma, &spip->rxsink); + bdmaStreamSetMemory(spip->rx.bdma, spip->config->rxsink?spip->config->rxsink:&spip->rxsink); bdmaStreamSetTransactionSize(spip->rx.bdma, n); bdmaStreamSetMode(spip->rx.bdma, spip->rxdmamode); @@ -1212,7 +1212,7 @@ msg_t spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { #endif #if defined(STM32_SPI_DMA_REQUIRED) { - dmaStreamSetMemory0(spip->rx.dma, &spip->rxsink); + dmaStreamSetMemory0(spip->rx.dma, spip->config->rxsink?spip->config->rxsink:&spip->rxsink); dmaStreamSetTransactionSize(spip->rx.dma, n); dmaStreamSetMode(spip->rx.dma, spip->rxdmamode); @@ -1257,7 +1257,7 @@ msg_t spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { bdmaStreamSetTransactionSize(spip->rx.bdma, n); bdmaStreamSetMode(spip->rx.bdma, spip->rxdmamode | STM32_BDMA_CR_MINC); - bdmaStreamSetMemory(spip->tx.bdma, &spip->txsource); + bdmaStreamSetMemory(spip->tx.bdma, spip->config->txsource?spip->config->txsource:&spip->txsource); bdmaStreamSetTransactionSize(spip->tx.bdma, n); bdmaStreamSetMode(spip->tx.bdma, spip->txdmamode); @@ -1274,7 +1274,7 @@ msg_t spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { dmaStreamSetTransactionSize(spip->rx.dma, n); dmaStreamSetMode(spip->rx.dma, spip->rxdmamode | STM32_DMA_CR_MINC); - dmaStreamSetMemory0(spip->tx.dma, &spip->txsource); + dmaStreamSetMemory0(spip->tx.dma, spip->config->txsource?spip->config->txsource:&spip->txsource); dmaStreamSetTransactionSize(spip->tx.dma, n); dmaStreamSetMode(spip->tx.dma, spip->txdmamode); diff --git a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.h b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.h index 3ab44275ee..bca56c33d9 100644 --- a/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.h +++ b/os/hal/ports/STM32/LLD/SPIv3/hal_spi_v2_lld.h @@ -547,7 +547,10 @@ /* SPI CFG1 register initialization data.*/ \ uint32_t cfg1; \ /* SPI CFG2 register initialization data.*/ \ - uint32_t cfg2 + uint32_t cfg2; \ + /* pointer to dummy data for send and receive. Must be DMA safe */ \ + uint32_t *txsource; \ + uint32_t *rxsink /*===========================================================================*/ /* External declarations. */ From 8d9c0094171c1f46da02452bb2df2813a7a27b6b Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:54:41 +0000 Subject: [PATCH 20/87] TIMv1: add support for EICU --- os/hal/ports/STM32/LLD/TIMv1/driver.mk | 4 + os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c | 970 ++++++++++++++++++ os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h | 566 ++++++++++ .../STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc | 8 + 4 files changed, 1548 insertions(+) create mode 100644 os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c create mode 100644 os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h diff --git a/os/hal/ports/STM32/LLD/TIMv1/driver.mk b/os/hal/ports/STM32/LLD/TIMv1/driver.mk index 949a96b9c0..cb501650e3 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/driver.mk +++ b/os/hal/ports/STM32/LLD/TIMv1/driver.mk @@ -5,6 +5,9 @@ endif ifneq ($(findstring HAL_USE_ICU TRUE,$(HALCONF)),) PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c endif +ifneq ($(findstring HAL_USE_EICU TRUE,$(HALCONF)),) +PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c +endif ifneq ($(findstring HAL_USE_PWM TRUE,$(HALCONF)),) PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c endif @@ -12,6 +15,7 @@ else PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_gpt_lld.c PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_icu_lld.c PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c +PLATFORMSRC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c endif PLATFORMINC += $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1 diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c new file mode 100644 index 0000000000..8583b74ca4 --- /dev/null +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c @@ -0,0 +1,970 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +/* + Concepts and parts of this file have been contributed by Fabio Utzig and + Xo Wang. +*/ +/* + Rewritten by Emil Fresk (1/5 - 2014) for extended input capture + functionality. And fix for spurious callbacks in the interrupt handler. +*/ +/* + Improved by Uladzimir Pylinsky aka barthess (1/3 - 2015) for support of + 32-bit timers and timers with single capture/compare channels. +*/ + +/* + * Hardware Abstraction Layer for Extended Input Capture Unit + */ +#include "hal.h" + +#if (HAL_USE_EICU == TRUE) || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ +/** + * @brief Inverts the polarity for the given channel. + * + * @param[in] eicup Pointer to the EICUDriver object. + * @param[in] channel The timer channel to invert. + * + * @notapi + */ +#define eicu_lld_invert_polarity(eicup, channel) \ + (eicup)->tim->CCER ^= ((uint16_t)(STM32_TIM_CCER_CC1P << ((channel) * 4))) + +/** + * @brief Returns the compare value of the latest cycle. + * + * @param[in] chp Pointer to channel structure that fired the interrupt. + * @return The number of ticks. + * + * @notapi + */ +#define eicu_lld_get_compare(chp) (*((chp)->ccrp) + 1) + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/** + * @brief EICUD1 driver identifier. + * @note The driver EICUD1 allocates the complex timer TIM1 when enabled. + */ +#if STM32_EICU_USE_TIM1 && !defined(__DOXYGEN__) +EICUDriver EICUD1; +#endif + +/** + * @brief EICUD2 driver identifier. + * @note The driver EICUD2 allocates the timer TIM2 when enabled. + */ +#if STM32_EICU_USE_TIM2 && !defined(__DOXYGEN__) +EICUDriver EICUD2; +#endif + +/** + * @brief EICUD3 driver identifier. + * @note The driver EICUD3 allocates the timer TIM3 when enabled. + */ +#if STM32_EICU_USE_TIM3 && !defined(__DOXYGEN__) +EICUDriver EICUD3; +#endif + +/** + * @brief EICUD4 driver identifier. + * @note The driver EICUD4 allocates the timer TIM4 when enabled. + */ +#if STM32_EICU_USE_TIM4 && !defined(__DOXYGEN__) +EICUDriver EICUD4; +#endif + +/** + * @brief EICUD5 driver identifier. + * @note The driver EICUD5 allocates the timer TIM5 when enabled. + */ +#if STM32_EICU_USE_TIM5 && !defined(__DOXYGEN__) +EICUDriver EICUD5; +#endif + +/** + * @brief EICUD8 driver identifier. + * @note The driver EICUD8 allocates the timer TIM8 when enabled. + */ +#if STM32_EICU_USE_TIM8 && !defined(__DOXYGEN__) +EICUDriver EICUD8; +#endif + +/** + * @brief EICUD9 driver identifier. + * @note The driver EICUD9 allocates the timer TIM9 when enabled. + */ +#if STM32_EICU_USE_TIM9 && !defined(__DOXYGEN__) +EICUDriver EICUD9; +#endif + +/** + * @brief EICUD12 driver identifier. + * @note The driver EICUD12 allocates the timer TIM12 when enabled. + */ +#if STM32_EICU_USE_TIM12 && !defined(__DOXYGEN__) +EICUDriver EICUD12; +#endif + +/** + * @brief EICUD10 driver identifier. + * @note The driver EICUD10 allocates the timer TIM10 when enabled. + */ +#if STM32_EICU_USE_TIM10 && !defined(__DOXYGEN__) +EICUDriver EICUD10; +#endif + +/** + * @brief EICUD11 driver identifier. + * @note The driver EICUD11 allocates the timer TIM11 when enabled. + */ +#if STM32_EICU_USE_TIM11 && !defined(__DOXYGEN__) +EICUDriver EICUD11; +#endif + +/** + * @brief EICUD13 driver identifier. + * @note The driver EICUD13 allocates the timer TIM13 when enabled. + */ +#if STM32_EICU_USE_TIM13 && !defined(__DOXYGEN__) +EICUDriver EICUD13; +#endif + +/** + * @brief EICUD14 driver identifier. + * @note The driver EICUD14 allocates the timer TIM14 when enabled. + */ +#if STM32_EICU_USE_TIM14 && !defined(__DOXYGEN__) +EICUDriver EICUD14; +#endif + +/** + * @brief Shared IRQ handler. + * + * @param[in] eicup Pointer to the @p EICUDriver object + */ +void eicu_lld_serve_interrupt(EICUDriver *eicup) { + uint16_t sr; + sr = eicup->tim->SR; + + /* Pick out the interrupts we are interested in by using + the interrupt enable bits as mask */ + sr &= (eicup->tim->DIER & STM32_TIM_DIER_IRQ_MASK); + + /* Clear interrupts */ + eicup->tim->SR = ~sr; + + if ((sr & STM32_TIM_SR_CC1IF) != 0 && eicup->channel[EICU_CHANNEL_1].config != NULL) { + if (eicup->channel[EICU_CHANNEL_1].config->capture_cb != NULL) + eicup->channel[EICU_CHANNEL_1].config->capture_cb(eicup, EICU_CHANNEL_1); + } + if ((sr & STM32_TIM_SR_CC2IF) != 0 && eicup->channel[EICU_CHANNEL_2].config != NULL) { + if (eicup->channel[EICU_CHANNEL_2].config->capture_cb != NULL) + eicup->channel[EICU_CHANNEL_2].config->capture_cb(eicup, EICU_CHANNEL_2); + } + if ((sr & STM32_TIM_SR_CC3IF) != 0 && eicup->channel[EICU_CHANNEL_3].config != NULL) { + if (eicup->channel[EICU_CHANNEL_3].config->capture_cb != NULL) + eicup->channel[EICU_CHANNEL_3].config->capture_cb(eicup, EICU_CHANNEL_3); + } + if ((sr & STM32_TIM_SR_CC4IF) != 0 && eicup->channel[EICU_CHANNEL_4].config != NULL) { + if (eicup->channel[EICU_CHANNEL_4].config->capture_cb != NULL) + eicup->channel[EICU_CHANNEL_4].config->capture_cb(eicup, EICU_CHANNEL_4); + } +} + +/** + * @brief Starts every channel. + * + * @param[in] eicup Pointer to the @p EICUDriver object + */ +static void start_channels(EICUDriver *eicup) { + + /* Set each input channel that is used as: a normal input capture channel, + link the corresponding CCR register and set polarity. */ + + /* Input capture channel 1 */ + if (eicup->config->iccfgp[0] != NULL) { + /* Normal capture input input */ + eicup->tim->CCMR1 |= STM32_TIM_CCMR1_CC1S(1); + + /* Link CCR register */ + eicup->channel[0].ccrp = &eicup->tim->CCR[0]; + + /* Set input polarity */ + if (eicup->config->iccfgp[0]->alvl == EICU_INPUT_ACTIVE_HIGH) + eicup->tim->CCER |= STM32_TIM_CCER_CC1E; + else + eicup->tim->CCER |= STM32_TIM_CCER_CC1E | STM32_TIM_CCER_CC1P; + } + + /* Input capture channel 2 */ + if (eicup->config->iccfgp[1] != NULL) { + /* Normal capture input input */ + eicup->tim->CCMR1 |= STM32_TIM_CCMR1_CC2S(1); + + /* Link CCR register */ + eicup->channel[1].ccrp = &eicup->tim->CCR[1]; + + /* Set input polarity */ + if (eicup->config->iccfgp[1]->alvl == EICU_INPUT_ACTIVE_HIGH) + eicup->tim->CCER |= STM32_TIM_CCER_CC2E; + else + eicup->tim->CCER |= STM32_TIM_CCER_CC2E | STM32_TIM_CCER_CC2P; + } + + /* Input capture channel 3 (not for TIM 9 and 12) */ + if (eicup->config->iccfgp[2] != NULL) { + /* Normal capture input input */ + eicup->tim->CCMR2 |= STM32_TIM_CCMR2_CC3S(1); + + /* Link CCR register */ + eicup->channel[2].ccrp = &eicup->tim->CCR[2]; + /* Set input polarity */ + if (eicup->config->iccfgp[2]->alvl == EICU_INPUT_ACTIVE_HIGH) + eicup->tim->CCER |= STM32_TIM_CCER_CC3E; + else + eicup->tim->CCER |= STM32_TIM_CCER_CC3E | STM32_TIM_CCER_CC3P; + } + + /* Input capture channel 4 (not for TIM 9 and 12) */ + if (eicup->config->iccfgp[3] != NULL) { + /* Normal capture input input */ + eicup->tim->CCMR2 |= STM32_TIM_CCMR2_CC4S(1); + + /* Link CCR register */ + eicup->channel[3].ccrp = &eicup->tim->CCR[3]; + + /* Set input polarity */ + if (eicup->config->iccfgp[3]->alvl == EICU_INPUT_ACTIVE_HIGH) + eicup->tim->CCER |= STM32_TIM_CCER_CC4E; + else + eicup->tim->CCER |= STM32_TIM_CCER_CC4E | STM32_TIM_CCER_CC4P; + } +} + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +#if STM32_EICU_USE_TIM1 +#if !defined(STM32_TIM1_UP_HANDLER) +#error "STM32_TIM1_UP_HANDLER not defined" +#endif +/** + * @brief TIM1 compare interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM1_UP_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD1); + + OSAL_IRQ_EPILOGUE(); +} + +#if !defined(STM32_TIM1_CC_HANDLER) +#error "STM32_TIM1_CC_HANDLER not defined" +#endif +/** + * @brief TIM1 compare interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD1); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM1 */ + +#if STM32_EICU_USE_TIM2 + +#if !defined(STM32_TIM2_HANDLER) +#error "STM32_TIM2_HANDLER not defined" +#endif +/** + * @brief TIM2 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM2_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD2); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM2 */ + +#if STM32_EICU_USE_TIM3 +#if !defined(STM32_TIM3_HANDLER) +#error "STM32_TIM3_HANDLER not defined" +#endif +/** + * @brief TIM3 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM3_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD3); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM3 */ + +#if STM32_EICU_USE_TIM4 +#if !defined(STM32_TIM4_HANDLER) +#error "STM32_TIM4_HANDLER not defined" +#endif +/** + * @brief TIM4 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM4_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD4); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM4 */ + +#if STM32_EICU_USE_TIM5 +#if !defined(STM32_TIM5_HANDLER) +#error "STM32_TIM5_HANDLER not defined" +#endif +/** + * @brief TIM5 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM5_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD5); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM5 */ + +#if STM32_EICU_USE_TIM8 +#if !defined(STM32_TIM8_UP_HANDLER) && defined(STM32_TIM8_UP_TIM13_HANDLER) +#define STM32_TIM8_UP_HANDLER STM32_TIM8_UP_TIM13_HANDLER +#define STM32_TIM8_UP_NUMBER STM32_TIM8_UP_TIM13_NUMBER +#endif +#if !defined(STM32_TIM8_UP_HANDLER) +#error "STM32_TIM8_UP_HANDLER not defined" +#endif +/** + * @brief TIM8 compare interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM8_UP_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD8); + + OSAL_IRQ_EPILOGUE(); +} + +#if !defined(STM32_TIM8_CC_HANDLER) +#error "STM32_TIM8_CC_HANDLER not defined" +#endif +/** + * @brief TIM8 compare interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM8_CC_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD8); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM8 */ + +#if STM32_EICU_USE_TIM12 +#if !defined(STM32_TIM12_HANDLER) +#error "STM32_TIM12_HANDLER not defined" +#endif +/** + * @brief TIM12 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM12_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD12); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM12 */ + +#if STM32_EICU_USE_TIM10 +#if !defined(STM32_TIM10_HANDLER) +#error "STM32_TIM10_HANDLER not defined" +#endif +/** + * @brief TIM10 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM10_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD10); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM10 */ + +#if STM32_EICU_USE_TIM11 +#if !defined(STM32_TIM11_HANDLER) +#error "STM32_TIM11_HANDLER not defined" +#endif +/** + * @brief TIM11 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM11_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD11); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM11 */ + +#if STM32_EICU_USE_TIM13 +#if !defined(STM32_TIM13_HANDLER) +#error "STM32_TIM13_HANDLER not defined" +#endif +/** + * @brief TIM13 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM13_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD13); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM13 */ + +#if STM32_EICU_USE_TIM14 +#if !defined(STM32_TIM14_HANDLER) +#error "STM32_TIM14_HANDLER not defined" +#endif +/** + * @brief TIM14 interrupt handler. + * @note It is assumed that the various sources are only activated if the + * associated callback pointer is not equal to @p NULL in order to not + * perform an extra check in a potentially critical interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(STM32_TIM14_HANDLER) { + + OSAL_IRQ_PROLOGUE(); + + eicu_lld_serve_interrupt(&EICUD14); + + OSAL_IRQ_EPILOGUE(); +} +#endif /* STM32_EICU_USE_TIM14 */ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level EICU driver initialization. + * + * @notapi + */ +void eicu_lld_init(void) { +#if STM32_EICU_USE_TIM1 + /* Driver initialization.*/ + eicuObjectInit(&EICUD1); + EICUD1.tim = STM32_TIM1; +#endif + +#if STM32_EICU_USE_TIM2 + /* Driver initialization.*/ + eicuObjectInit(&EICUD2); + EICUD2.tim = STM32_TIM2; +#endif + +#if STM32_EICU_USE_TIM3 + /* Driver initialization.*/ + eicuObjectInit(&EICUD3); + EICUD3.tim = STM32_TIM3; +#endif + +#if STM32_EICU_USE_TIM4 + /* Driver initialization.*/ + eicuObjectInit(&EICUD4); + EICUD4.tim = STM32_TIM4; +#endif + +#if STM32_EICU_USE_TIM5 + /* Driver initialization.*/ + eicuObjectInit(&EICUD5); + EICUD5.tim = STM32_TIM5; +#endif + +#if STM32_EICU_USE_TIM8 + /* Driver initialization.*/ + eicuObjectInit(&EICUD8); + EICUD8.tim = STM32_TIM8; +#endif + +#if STM32_EICU_USE_TIM9 + /* Driver initialization.*/ + eicuObjectInit(&EICUD9); + EICUD9.tim = STM32_TIM9; +#endif + +#if STM32_EICU_USE_TIM12 + /* Driver initialization.*/ + eicuObjectInit(&EICUD12); + EICUD12.tim = STM32_TIM12; +#endif + +#if STM32_EICU_USE_TIM10 + /* Driver initialization.*/ + eicuObjectInit(&EICUD10); + EICUD10.tim = STM32_TIM10; +#endif + +#if STM32_EICU_USE_TIM11 + /* Driver initialization.*/ + eicuObjectInit(&EICUD11); + EICUD11.tim = STM32_TIM11; +#endif + +#if STM32_EICU_USE_TIM13 + /* Driver initialization.*/ + eicuObjectInit(&EICUD13); + EICUD13.tim = STM32_TIM13; +#endif + +#if STM32_EICU_USE_TIM14 + /* Driver initialization.*/ + eicuObjectInit(&EICUD14); + EICUD14.tim = STM32_TIM14; +#endif +} + +/** + * @brief Configures and activates the EICU peripheral. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @notapi + */ +void eicu_lld_start(EICUDriver *eicup) { + uint32_t psc; + size_t ch; + + osalDbgAssert((eicup->config->iccfgp[0] != NULL) || + (eicup->config->iccfgp[1] != NULL) || + (eicup->config->iccfgp[2] != NULL) || + (eicup->config->iccfgp[3] != NULL), + "invalid input configuration"); + + if (eicup->state == EICU_STOP) { + /* Clock activation and timer reset.*/ +#if STM32_EICU_USE_TIM1 + if (&EICUD1 == eicup) { + rccEnableTIM1(FALSE); + rccResetTIM1(); + nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_EICU_TIM1_IRQ_PRIORITY); + nvicEnableVector(STM32_TIM1_CC_NUMBER, STM32_EICU_TIM1_IRQ_PRIORITY); + eicup->channels = 4; +#if defined(STM32_TIM1CLK) + eicup->clock = STM32_TIM1CLK; +#else + eicup->clock = STM32_TIMCLK2; +#endif + } +#endif +#if STM32_EICU_USE_TIM2 + if (&EICUD2 == eicup) { + rccEnableTIM2(FALSE); + rccResetTIM2(); + nvicEnableVector(STM32_TIM2_NUMBER, STM32_EICU_TIM2_IRQ_PRIORITY); + eicup->channels = 4; + eicup->clock = STM32_TIMCLK1; + } +#endif +#if STM32_EICU_USE_TIM3 + if (&EICUD3 == eicup) { + rccEnableTIM3(FALSE); + rccResetTIM3(); + nvicEnableVector(STM32_TIM3_NUMBER, STM32_EICU_TIM3_IRQ_PRIORITY); + eicup->channels = 4; + eicup->clock = STM32_TIMCLK1; + } +#endif +#if STM32_EICU_USE_TIM4 + if (&EICUD4 == eicup) { + rccEnableTIM4(FALSE); + rccResetTIM4(); + nvicEnableVector(STM32_TIM4_NUMBER, STM32_EICU_TIM4_IRQ_PRIORITY); + eicup->channels = 4; + eicup->clock = STM32_TIMCLK1; + } +#endif +#if STM32_EICU_USE_TIM5 + if (&EICUD5 == eicup) { + rccEnableTIM5(FALSE); + rccResetTIM5(); + nvicEnableVector(STM32_TIM5_NUMBER, STM32_EICU_TIM5_IRQ_PRIORITY); + eicup->channels = 4; + eicup->clock = STM32_TIMCLK1; + } +#endif +#if STM32_EICU_USE_TIM8 + if (&EICUD8 == eicup) { + rccEnableTIM8(FALSE); + rccResetTIM8(); + nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_EICU_TIM8_IRQ_PRIORITY); + nvicEnableVector(STM32_TIM8_CC_NUMBER, STM32_EICU_TIM8_IRQ_PRIORITY); + eicup->channels = 4; +#if defined(STM32_TIM8CLK) + eicup->clock = STM32_TIM8CLK; +#else + eicup->clock = STM32_TIMCLK2; +#endif + } +#endif +#if STM32_EICU_USE_TIM9 + if (&EICUD9 == eicup) { + rccEnableTIM9(FALSE); + rccResetTIM9(); + eicup->channels = 2; + eicup->clock = STM32_TIMCLK2; + } +#endif +#if STM32_EICU_USE_TIM12 + if (&EICUD12 == eicup) { + rccEnableTIM12(FALSE); + rccResetTIM12(); + nvicEnableVector(STM32_TIM12_NUMBER, STM32_EICU_TIM12_IRQ_PRIORITY); + eicup->channels = 2; + eicup->clock = STM32_TIMCLK1; + } +#endif +#if STM32_EICU_USE_TIM10 + if (&EICUD10 == eicup) { + rccEnableTIM10(FALSE); + rccResetTIM10(); + nvicEnableVector(STM32_TIM10_NUMBER, STM32_EICU_TIM10_IRQ_PRIORITY); + eicup->channels = 1; + eicup->clock = STM32_TIMCLK2; + } +#endif +#if STM32_EICU_USE_TIM11 + if (&EICUD11 == eicup) { + rccEnableTIM11(FALSE); + rccResetTIM11(); + nvicEnableVector(STM32_TIM11_NUMBER, STM32_EICU_TIM11_IRQ_PRIORITY); + eicup->channels = 1; + eicup->clock = STM32_TIMCLK2; + } +#endif +#if STM32_EICU_USE_TIM13 + if (&EICUD13 == eicup) { + rccEnableTIM13(FALSE); + rccResetTIM13(); + nvicEnableVector(STM32_TIM13_NUMBER, STM32_EICU_TIM13_IRQ_PRIORITY); + eicup->channels = 1; + eicup->clock = STM32_TIMCLK1; + } +#endif +#if STM32_EICU_USE_TIM14 + if (&EICUD14 == eicup) { + rccEnableTIM14(FALSE); + rccResetTIM14(); + nvicEnableVector(STM32_TIM14_NUMBER, STM32_EICU_TIM14_IRQ_PRIORITY); + eicup->channels = 1; + eicup->clock = STM32_TIMCLK1; + } +#endif + } + else { + /* Driver re-configuration scenario, it must be stopped first.*/ + eicup->tim->CR1 = 0; /* Timer disabled. */ + eicup->tim->CR2 = 0; + eicup->tim->DIER = eicup->config->dier &/* DMA-related DIER settings. */ + ~STM32_TIM_DIER_IRQ_MASK; + eicup->tim->SR = 0; /* Clear eventual pending IRQs. */ + eicup->tim->CCR[0] = 0; /* Comparator 1 disabled. */ + eicup->tim->CCR[1] = 0; /* Comparator 2 disabled. */ + eicup->tim->CCR[2] = 0; /* Comparator 3 disabled. */ + eicup->tim->CCR[3] = 0; /* Comparator 4 disabled. */ + eicup->tim->CNT = 0; /* Counter reset to zero. */ + } + + /* Timer configuration.*/ + psc = (eicup->clock / eicup->config->frequency) - 1; + chDbgAssert((psc <= 0xFFFF) && + ((psc + 1) * eicup->config->frequency) == eicup->clock, + "invalid frequency"); + eicup->tim->PSC = (uint16_t)psc; + eicup->tim->ARR = (eicucnt_t)-1; + + /* Detect width.*/ + if (0xFFFFFFFF == eicup->tim->ARR) + eicup->width = EICU_WIDTH_32; + else if (0xFFFF == eicup->tim->ARR) + eicup->width = EICU_WIDTH_16; + else + osalSysHalt("Unsupported width"); + + /* Reset registers */ + eicup->tim->SMCR = 0; + eicup->tim->CCMR1 = 0; + if (eicup->channels > 2) + eicup->tim->CCMR2 = 0; + + /* clean channel structures and set pointers to channel configs */ + for (ch=0; chchannel[ch].last_active = 0; + eicup->channel[ch].last_idle = 0; + eicup->channel[ch].config = eicup->config->iccfgp[ch]; + eicup->channel[ch].state = EICU_CH_IDLE; + } + + /* TIM9 and TIM12 have only 2 channels.*/ + if (eicup->channels == 2) { + osalDbgCheck((eicup->config->iccfgp[2] == NULL) && + (eicup->config->iccfgp[3] == NULL)); + } + + /* TIM10, TIM11, TIM13 and TIM14 have only 1 channel.*/ + if (eicup->channels == 1) { + osalDbgCheck((eicup->config->iccfgp[1] == NULL) && + (eicup->config->iccfgp[2] == NULL) && + (eicup->config->iccfgp[3] == NULL)); + } + + start_channels(eicup); +} + +/** + * @brief Deactivates the EICU peripheral. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @notapi + */ +void eicu_lld_stop(EICUDriver *eicup) { + + if (eicup->state == EICU_READY) { + + /* Clock deactivation.*/ + eicup->tim->CR1 = 0; /* Timer disabled. */ + eicup->tim->DIER = 0; /* All IRQs disabled. */ + eicup->tim->SR = 0; /* Clear eventual pending IRQs. */ + +#if STM32_EICU_USE_TIM1 + if (&EICUD1 == eicup) { + nvicDisableVector(STM32_TIM1_UP_NUMBER); + nvicDisableVector(STM32_TIM1_CC_NUMBER); + rccDisableTIM1(); + } +#endif +#if STM32_EICU_USE_TIM2 + if (&EICUD2 == eicup) { + nvicDisableVector(STM32_TIM2_NUMBER); + rccDisableTIM2(); + } +#endif +#if STM32_EICU_USE_TIM3 + if (&EICUD3 == eicup) { + nvicDisableVector(STM32_TIM3_NUMBER); + rccDisableTIM3(); + } +#endif +#if STM32_EICU_USE_TIM4 + if (&EICUD4 == eicup) { + nvicDisableVector(STM32_TIM4_NUMBER); + rccDisableTIM4(); + } +#endif +#if STM32_EICU_USE_TIM5 + if (&EICUD5 == eicup) { + nvicDisableVector(STM32_TIM5_NUMBER); + rccDisableTIM5(); + } +#endif +#if STM32_EICU_USE_TIM8 + if (&EICUD8 == eicup) { + nvicDisableVector(STM32_TIM8_UP_NUMBER); + nvicDisableVector(STM32_TIM8_CC_NUMBER); + rccDisableTIM8(); + } +#endif +#if STM32_EICU_USE_TIM9 + if (&EICUD9 == eicup) { + rccDisableTIM9(); + } +#endif +#if STM32_EICU_USE_TIM12 + if (&EICUD12 == eicup) { + nvicDisableVector(STM32_TIM12_NUMBER); + rccDisableTIM12(); + } +#endif + } +#if STM32_EICU_USE_TIM10 + if (&EICUD10 == eicup) { + nvicDisableVector(STM32_TIM10_NUMBER); + rccDisableTIM10(); + } +#endif +#if STM32_EICU_USE_TIM11 + if (&EICUD11 == eicup) { + nvicDisableVector(STM32_TIM11_NUMBER); + rccDisableTIM11(); + } +#endif +#if STM32_EICU_USE_TIM13 + if (&EICUD13 == eicup) { + nvicDisableVector(STM32_TIM13_NUMBER); + rccDisableTIM13(); + } +#endif +#if STM32_EICU_USE_TIM14 + if (&EICUD14 == eicup) { + nvicDisableVector(STM32_TIM14_NUMBER); + rccDisableTIM14(); + } +#endif +} + +/** + * @brief Enables the EICU. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @notapi + */ +void eicu_lld_enable(EICUDriver *eicup) { + + eicup->tim->EGR = STM32_TIM_EGR_UG; + eicup->tim->SR = 0; /* Clear pending IRQs (if any). */ + + if ((eicup->config->iccfgp[EICU_CHANNEL_1] != NULL) && + (eicup->config->iccfgp[EICU_CHANNEL_1]->capture_cb != NULL)) + eicup->tim->DIER |= STM32_TIM_DIER_CC1IE; + if ((eicup->config->iccfgp[EICU_CHANNEL_2] != NULL) && + (eicup->config->iccfgp[EICU_CHANNEL_2]->capture_cb != NULL)) + eicup->tim->DIER |= STM32_TIM_DIER_CC2IE; + if ((eicup->config->iccfgp[EICU_CHANNEL_3] != NULL) && + (eicup->config->iccfgp[EICU_CHANNEL_3]->capture_cb != NULL)) + eicup->tim->DIER |= STM32_TIM_DIER_CC3IE; + if ((eicup->config->iccfgp[EICU_CHANNEL_4] != NULL) && + (eicup->config->iccfgp[EICU_CHANNEL_4]->capture_cb != NULL)) + eicup->tim->DIER |= STM32_TIM_DIER_CC4IE; + + eicup->tim->CR1 = STM32_TIM_CR1_CEN; +} + +/** + * @brief Disables the EICU. + * + * @param[in] eicup Pointer to the @p EICUDriver object + * + * @notapi + */ +void eicu_lld_disable(EICUDriver *eicup) { + eicup->tim->CR1 = 0; /* Initially stopped. */ + eicup->tim->SR = 0; /* Clear pending IRQs (if any). */ + + /* All interrupts disabled.*/ + eicup->tim->DIER &= ~STM32_TIM_DIER_IRQ_MASK; +} + +#endif /* HAL_USE_EICU */ diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h new file mode 100644 index 0000000000..053e697795 --- /dev/null +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h @@ -0,0 +1,566 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +/* + Rewritten by Emil Fresk (1/5 - 2014) for extended input capture + functionality. And fix for spurious callbacks in the interrupt handler. +*/ +/* + Improved by Uladzimir Pylinsky aka barthess (1/3 - 2015) for support of + 32-bit timers and timers with single capture/compare channels. +*/ + +#ifndef HAL_EICU_LLD_H +#define HAL_EICU_LLD_H + +#include "stm32_tim.h" + +#if (HAL_USE_EICU == TRUE) || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @name Configuration options + * @{ + */ +/** + * @brief EICUD1 driver enable switch. + * @details If set to @p TRUE the support for EICUD1 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM1) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM1 FALSE +#endif + +/** + * @brief EICUD2 driver enable switch. + * @details If set to @p TRUE the support for EICUD2 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM2) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM2 FALSE +#endif + +/** + * @brief EICUD3 driver enable switch. + * @details If set to @p TRUE the support for EICUD3 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM3) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM3 FALSE +#endif + +/** + * @brief EICUD4 driver enable switch. + * @details If set to @p TRUE the support for EICUD4 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM4) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM4 FALSE +#endif + +/** + * @brief EICUD5 driver enable switch. + * @details If set to @p TRUE the support for EICUD5 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM5) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM5 FALSE +#endif + +/** + * @brief EICUD8 driver enable switch. + * @details If set to @p TRUE the support for EICUD8 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM8) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM8 FALSE +#endif + +/** + * @brief EICUD9 driver enable switch. + * @details If set to @p TRUE the support for EICUD9 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM9) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM9 FALSE +#endif + +/** + * @brief EICUD12 driver enable switch. + * @details If set to @p TRUE the support for EICUD12 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM12) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM12 FALSE +#endif + +/** + * @brief EICUD10 driver enable switch. + * @details If set to @p TRUE the support for EICUD10 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM10) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM10 FALSE +#endif + +/** + * @brief EICUD11 driver enable switch. + * @details If set to @p TRUE the support for EICUD11 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM11) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM11 FALSE +#endif + +/** + * @brief EICUD13 driver enable switch. + * @details If set to @p TRUE the support for EICUD13 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM13) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM13 FALSE +#endif + +/** + * @brief EICUD14 driver enable switch. + * @details If set to @p TRUE the support for EICUD14 is included. + * @note The default is @p TRUE. + */ +#if !defined(STM32_EICU_USE_TIM14) || defined(__DOXYGEN__) +#define STM32_EICU_USE_TIM14 FALSE +#endif + +/** + * @brief EICUD1 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM1_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM1_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD2 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM2_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM2_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD3 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM3_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM3_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD4 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM4_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM4_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD5 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM5_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM5_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD8 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM8_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM8_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD9 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM9_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM9_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD12 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM12_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM12_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD10 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM10_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM10_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD11 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM11_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM11_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD13 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM13_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM13_IRQ_PRIORITY 7 +#endif + +/** + * @brief EICUD14 interrupt priority level setting. + */ +#if !defined(STM32_EICU_TIM14_IRQ_PRIORITY) || defined(__DOXYGEN__) +#define STM32_EICU_TIM14_IRQ_PRIORITY 7 +#endif +/** @} */ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +#if STM32_EICU_USE_TIM1 && !STM32_HAS_TIM1 +#error "TIM1 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM2 && !STM32_HAS_TIM2 +#error "TIM2 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM3 && !STM32_HAS_TIM3 +#error "TIM3 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM4 && !STM32_HAS_TIM4 +#error "TIM4 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM5 && !STM32_HAS_TIM5 +#error "TIM5 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM8 && !STM32_HAS_TIM8 +#error "TIM8 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM9 && !STM32_HAS_TIM9 +#error "TIM9 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM12 && !STM32_HAS_TIM12 +#error "TIM12 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM10 && !STM32_HAS_TIM10 +#error "TIM10 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM11 && !STM32_HAS_TIM11 +#error "TIM11 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM13 && !STM32_HAS_TIM13 +#error "TIM13 not present in the selected device" +#endif + +#if STM32_EICU_USE_TIM14 && !STM32_HAS_TIM14 +#error "TIM14 not present in the selected device" +#endif + +#if !STM32_EICU_USE_TIM1 && !STM32_EICU_USE_TIM2 && \ + !STM32_EICU_USE_TIM3 && !STM32_EICU_USE_TIM4 && \ + !STM32_EICU_USE_TIM5 && !STM32_EICU_USE_TIM8 && \ + !STM32_EICU_USE_TIM9 && !STM32_EICU_USE_TIM12 && \ + !STM32_EICU_USE_TIM10 && !STM32_EICU_USE_TIM11 && \ + !STM32_EICU_USE_TIM13 && !STM32_EICU_USE_TIM14 +#error "EICU driver activated but no TIM peripheral assigned" +#endif + +#if STM32_EICU_USE_TIM1 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM1_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM1" +#endif + +#if STM32_EICU_USE_TIM2 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM2_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM2" +#endif + +#if STM32_EICU_USE_TIM3 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM3_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM3" +#endif + +#if STM32_EICU_USE_TIM4 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM4_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM4" +#endif + +#if STM32_EICU_USE_TIM5 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM5_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM5" +#endif + +#if STM32_EICU_USE_TIM8 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM8_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM8" +#endif + +#if STM32_EICU_USE_TIM9 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM9_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM9" +#endif + +#if STM32_EICU_USE_TIM12 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM12_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM12" +#endif + +#if STM32_EICU_USE_TIM10 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM10_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM10" +#endif + +#if STM32_EICU_USE_TIM11 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM11_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM11" +#endif + +#if STM32_EICU_USE_TIM13 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM13_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM13" +#endif + +#if STM32_EICU_USE_TIM14 && \ + !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM14_IRQ_PRIORITY) +#error "Invalid IRQ priority assigned to TIM14" +#endif + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ +/** + * @brief Active level selector. + */ +typedef enum { + EICU_INPUT_ACTIVE_HIGH, /**< Trigger on rising edge. */ + EICU_INPUT_ACTIVE_LOW, /**< Trigger on falling edge. */ +} eicuactivelevel_t; + +/** + * @brief Timer registers width in bits. + */ +typedef enum { + EICU_WIDTH_16, + EICU_WIDTH_32 +} eicutimerwidth_t; + +/** + * @brief EICU frequency type. + */ +typedef uint32_t eicufreq_t; + +/** + * @brief EICU counter type. + */ +typedef uint32_t eicucnt_t; + +/** + * @brief EICU captured width and (or) period. + */ +typedef struct { + /** + * @brief Pulse width. + */ + eicucnt_t width; + /** + * @brief Pulse period. + */ + eicucnt_t period; +} eicuresult_t; + +/** + * @brief EICU Capture Channel Config structure definition. + */ +typedef struct { + /** + * @brief Specifies the active level of the input signal. + */ + eicuactivelevel_t alvl; + /** + * @brief Capture event callback. Used for PWM width, pulse width and + * pulse period capture event. + */ + eicucallback_t capture_cb; +} EICUChannelConfig; + +/** + * @brief EICU Capture Channel structure definition. + */ +typedef struct { + /** + * @brief Channel state for the internal state machine. + */ + eicuchannelstate_t state; + /** + * @brief Cached value for pulse width calculation. + */ + eicucnt_t last_active; + /** + * @brief Cached value for period calculation. + */ + eicucnt_t last_idle; + /** + * @brief Pointer to Input Capture channel configuration. + */ + const EICUChannelConfig *config; + /** + * @brief CCR register pointer for faster access. + */ + volatile uint32_t *ccrp; +} EICUChannel; + +/** + * @brief EICU Config structure definition. + */ +typedef struct { + /** + * @brief Specifies the Timer clock in Hz. + */ + eicufreq_t frequency; + /** + * @brief Pointer to each Input Capture channel configuration. + * @note A NULL parameter indicates the channel as unused. + * @note In PWM mode, only Channel 1 OR Channel 2 may be used. + */ + const EICUChannelConfig *iccfgp[EICU_CHANNEL_ENUM_END]; + /** + * @brief TIM DIER register initialization data. + */ + uint32_t dier; +} EICUConfig; + +/** + * @brief EICU Driver structure definition + */ +struct EICUDriver { + /** + * @brief STM32 timer peripheral for Input Capture. + */ + stm32_tim_t *tim; + /** + * @brief Driver state for the internal state machine. + */ + eicustate_t state; + /** + * @brief Channels' data structures. + */ + EICUChannel channel[EICU_CHANNEL_ENUM_END]; + /** + * @brief Timer base clock. + */ + uint32_t clock; + /** + * @brief Number of available capture compare channels in timer. + */ + size_t channels; + /** + * @brief Timer registers width in bits. + */ + eicutimerwidth_t width; + /** + * @brief Pointer to configuration for the driver. + */ + const EICUConfig *config; +}; + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ +#if STM32_EICU_USE_TIM1 && !defined(__DOXYGEN__) +extern EICUDriver EICUD1; +#endif + +#if STM32_EICU_USE_TIM2 && !defined(__DOXYGEN__) +extern EICUDriver EICUD2; +#endif + +#if STM32_EICU_USE_TIM3 && !defined(__DOXYGEN__) +extern EICUDriver EICUD3; +#endif + +#if STM32_EICU_USE_TIM4 && !defined(__DOXYGEN__) +extern EICUDriver EICUD4; +#endif + +#if STM32_EICU_USE_TIM5 && !defined(__DOXYGEN__) +extern EICUDriver EICUD5; +#endif + +#if STM32_EICU_USE_TIM8 && !defined(__DOXYGEN__) +extern EICUDriver EICUD8; +#endif + +#if STM32_EICU_USE_TIM9 && !defined(__DOXYGEN__) +extern EICUDriver EICUD9; +#endif + +#if STM32_EICU_USE_TIM12 && !defined(__DOXYGEN__) +extern EICUDriver EICUD12; +#endif + +#if STM32_EICU_USE_TIM10 && !defined(__DOXYGEN__) +extern EICUDriver EICUD10; +#endif + +#if STM32_EICU_USE_TIM11 && !defined(__DOXYGEN__) +extern EICUDriver EICUD11; +#endif + +#if STM32_EICU_USE_TIM13 && !defined(__DOXYGEN__) +extern EICUDriver EICUD13; +#endif + +#if STM32_EICU_USE_TIM14 && !defined(__DOXYGEN__) +extern EICUDriver EICUD14; +#endif + +#ifdef __cplusplus +extern "C" { +#endif + void eicu_lld_init(void); + void eicu_lld_start(EICUDriver *eicup); + void eicu_lld_stop(EICUDriver *eicup); + void eicu_lld_enable(EICUDriver *eicup); + void eicu_lld_disable(EICUDriver *eicup); + void eicu_lld_serve_interrupt(EICUDriver *eicup); +#ifdef __cplusplus +} +#endif + +#endif /* HAL_USE_EICU */ + +#endif /* HAL_EICU_LLD_H */ \ No newline at end of file diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc index f085c9133a..416bfdb5f6 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc @@ -68,6 +68,9 @@ #if !defined(STM32_ICU_USE_TIM9) #define STM32_ICU_USE_TIM9 FALSE #endif +#if !defined(STM32_EICU_USE_TIM9) +#define STM32_EICU_USE_TIM9 FALSE +#endif #if !defined(STM32_PWM_USE_TIM9) #define STM32_PWM_USE_TIM9 FALSE #endif @@ -209,6 +212,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_BRK_TIM9_HANDLER) { icu_lld_serve_interrupt(&ICUD9); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM9 + eicu_lld_serve_interrupt(&EICUD9); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM9 pwm_lld_serve_interrupt(&PWMD9); From c5c72b92eb16793192b489d08693801ba585ced3 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:59:18 +0000 Subject: [PATCH 21/87] USARTv1: support IRQ callbacks --- .../ports/STM32/LLD/USARTv1/hal_serial_lld.c | 7 ++- .../ports/STM32/LLD/USARTv1/hal_serial_lld.h | 20 ++++++++- os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c | 44 ++++++++++--------- os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.h | 4 ++ 4 files changed, 53 insertions(+), 22 deletions(-) diff --git a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c index e373529a18..499fa83628 100644 --- a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c +++ b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c @@ -94,7 +94,9 @@ static const SerialConfig default_config = SERIAL_DEFAULT_BITRATE, 0, USART_CR2_STOP1_BITS, - 0 + 0, + NULL, + NULL }; /*===========================================================================*/ @@ -590,6 +592,8 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) { if (config == NULL) config = &default_config; + sdp->config = config; + if (sdp->state == SD_STOP) { #if STM32_SERIAL_USE_USART1 if (&SD1 == sdp) { @@ -778,6 +782,7 @@ void sd_lld_serve_interrupt(SerialDriver *sdp) { } osalSysUnlockFromISR(); } + _serial_irq_code(sdp); } #endif /* HAL_USE_SERIAL */ diff --git a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.h b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.h index 864840c8ce..9b8fd91fe3 100644 --- a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.h +++ b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.h @@ -387,6 +387,13 @@ /* Driver data structures and types. */ /*===========================================================================*/ +typedef void (*uartirq_t)(void* sd); + +#define _serial_irq_code(sd) { \ + if ((sd)->config->irq_cb != NULL) \ + (sd)->config->irq_cb((sd)->config->ctx); \ +} + /** * @brief STM32 Serial Driver configuration structure. * @details An instance of this structure must be passed to @p sdStart() @@ -413,6 +420,15 @@ typedef struct hal_serial_config { * @brief Initialization value for the CR3 register. */ uint16_t cr3; + + /** + * @brief Set callback from irq + */ + uartirq_t irq_cb; + /** + * @pointer to ctx + */ + void* ctx; } SerialConfig; /** @@ -436,7 +452,9 @@ typedef struct hal_serial_config { /* Clock frequency for the associated USART/UART.*/ \ uint32_t clock; \ /* Mask to be applied on received frames.*/ \ - uint8_t rxmask; + uint8_t rxmask; \ + /*Serial Config*/ \ + const SerialConfig *config; \ /*===========================================================================*/ /* Driver macros. */ diff --git a/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c b/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c index 90a103ec6c..8af19f58a5 100644 --- a/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c +++ b/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.c @@ -1152,33 +1152,37 @@ size_t uart_lld_stop_receive(UARTDriver *uartp) { * @param[in] uartp pointer to the @p UARTDriver object */ void uart_lld_serve_interrupt(UARTDriver *uartp) { - uint16_t sr; - USART_TypeDef *u = uartp->usart; - uint32_t cr1 = u->CR1; + if (uartp->config->irq_cb == NULL) { + uint16_t sr; + USART_TypeDef *u = uartp->usart; + uint32_t cr1 = u->CR1; - sr = u->SR; /* SR reset step 1.*/ + sr = u->SR; /* SR reset step 1.*/ - if (sr & (USART_SR_LBD | USART_SR_ORE | USART_SR_NE | - USART_SR_FE | USART_SR_PE)) { + if (sr & (USART_SR_LBD | USART_SR_ORE | USART_SR_NE | + USART_SR_FE | USART_SR_PE)) { - (void)u->DR; /* SR reset step 2 - clear ORE.*/ + (void)u->DR; /* SR reset step 2 - clear ORE.*/ - u->SR = ~USART_SR_LBD; - _uart_rx_error_isr_code(uartp, translate_errors(sr)); - } + u->SR = ~USART_SR_LBD; + _uart_rx_error_isr_code(uartp, translate_errors(sr)); + } - if ((sr & USART_SR_TC) && (cr1 & USART_CR1_TCIE)) { - /* TC interrupt cleared and disabled.*/ - u->SR = ~USART_SR_TC; - u->CR1 = cr1 & ~USART_CR1_TCIE; + if ((sr & USART_SR_TC) && (cr1 & USART_CR1_TCIE)) { + /* TC interrupt cleared and disabled.*/ + u->SR = ~USART_SR_TC; + u->CR1 = cr1 & ~USART_CR1_TCIE; - /* End of transmission, a callback is generated.*/ - _uart_tx2_isr_code(uartp); - } + /* End of transmission, a callback is generated.*/ + _uart_tx2_isr_code(uartp); + } - /* Timeout interrupt sources are only checked if enabled in CR1.*/ - if ((cr1 & USART_CR1_IDLEIE) && (sr & USART_SR_IDLE)) { - _uart_timeout_isr_code(uartp); + /* Timeout interrupt sources are only checked if enabled in CR1.*/ + if ((cr1 & USART_CR1_IDLEIE) && (sr & USART_SR_IDLE)) { + _uart_timeout_isr_code(uartp); + } + } else { + uartp->config->irq_cb(uartp); } } diff --git a/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.h b/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.h index c81c003fe5..509fa9c553 100644 --- a/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.h +++ b/os/hal/ports/STM32/LLD/USARTv1/hal_uart_lld.h @@ -798,6 +798,10 @@ typedef struct hal_uart_config { * @brief Receive error callback. */ uartecb_t rxerr_cb; + /** + * @brief UART IRQ Global Handler + */ + uartcb_t irq_cb; /* End of the mandatory fields.*/ /** * @brief Receiver timeout callback. From 156342307e46243ef6a76c22841e9e318b6a06c9 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:02:39 +0000 Subject: [PATCH 22/87] USARTv2: support IRQ callbacks --- .../ports/STM32/LLD/USARTv2/hal_serial_lld.c | 10 ++++++++- .../ports/STM32/LLD/USARTv2/hal_serial_lld.h | 22 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c b/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c index a020ed5ad5..a2b8a7c026 100644 --- a/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c +++ b/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.c @@ -143,7 +143,9 @@ static const SerialConfig default_config = SERIAL_DEFAULT_BITRATE, 0, USART_CR2_STOP1_BITS, - 0 + 0, + NULL, + NULL }; #if STM32_SERIAL_USE_USART1 || defined(__DOXYGEN__) @@ -234,6 +236,8 @@ static void usart_init(SerialDriver *sdp, uint32_t brr, clock; USART_TypeDef *u = sdp->usart; + sdp->config = config; + /* Baud rate setting.*/ clock = sdp->clock; #if STM32_SERIAL_USE_LPUART1 @@ -908,6 +912,10 @@ void sd_lld_serve_interrupt(SerialDriver *sdp) { } osalSysUnlockFromISR(); } + + if (isr & USART_ISR_IDLE) { + _serial_irq_code(sdp); + } } #endif /* HAL_USE_SERIAL */ diff --git a/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.h b/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.h index 62b4f10235..990b8cff1d 100644 --- a/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.h +++ b/os/hal/ports/STM32/LLD/USARTv2/hal_serial_lld.h @@ -500,6 +500,13 @@ /* Driver data structures and types. */ /*===========================================================================*/ +typedef void (*uartirq_t)(void* sd); + +#define _serial_irq_code(sd) { \ + if ((sd)->config->irq_cb != NULL) \ + (sd)->config->irq_cb((sd)->config->ctx); \ +} + /** * @brief STM32 Serial Driver configuration structure. * @details An instance of this structure must be passed to @p sdStart() @@ -526,6 +533,16 @@ typedef struct hal_serial_config { * @brief Initialization value for the CR3 register. */ uint32_t cr3; + + /** + * @brief Set callback from irq + */ + uartirq_t irq_cb; + /** + * @pointer to ctx + */ + void* ctx; + } SerialConfig; /** @@ -545,7 +562,10 @@ typedef struct hal_serial_config { /* Clock frequency for the associated USART/UART.*/ \ uint32_t clock; \ /* Mask to be applied on received frames.*/ \ - uint8_t rxmask; + uint8_t rxmask; \ + /* config from start call.*/ \ + const SerialConfig *config; + /*===========================================================================*/ /* Driver macros. */ From 12bae895fed96a40e28f92ea0ada0eda8272f46e Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:03:14 +0000 Subject: [PATCH 23/87] USARTv3: support IRQ callbacks --- .../ports/STM32/LLD/USARTv3/hal_serial_lld.c | 9 ++++++++- .../ports/STM32/LLD/USARTv3/hal_serial_lld.h | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.c b/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.c index d8dc340fe3..3a9a151f61 100644 --- a/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.c +++ b/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.c @@ -153,7 +153,9 @@ static const SerialConfig default_config = SERIAL_DEFAULT_BITRATE, 0, USART_CR2_STOP1_BITS, - 0 + 0, + NULL, + NULL }; #if STM32_SERIAL_USE_USART1 || defined(__DOXYGEN__) @@ -260,6 +262,8 @@ static void usart_init(SerialDriver *sdp, uint32_t brr, clock; USART_TypeDef *u = sdp->usart; + sdp->config = config; + /* Baud rate setting.*/ clock = sdp->clock; #if STM32_SERIAL_USE_LPUART1 @@ -1036,6 +1040,9 @@ void sd_lld_serve_interrupt(SerialDriver *sdp) { } osalSysUnlockFromISR(); } + if (isr & USART_ISR_IDLE) { + _serial_irq_code(sdp); + } } #endif /* HAL_USE_SERIAL */ diff --git a/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.h b/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.h index 182ac7d95a..11a9c1d942 100644 --- a/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.h +++ b/os/hal/ports/STM32/LLD/USARTv3/hal_serial_lld.h @@ -597,6 +597,13 @@ /* Driver data structures and types. */ /*===========================================================================*/ +typedef void (*uartirq_t)(void* sd); + +#define _serial_irq_code(sd) { \ + if ((sd)->config->irq_cb != NULL) \ + (sd)->config->irq_cb((sd)->config->ctx); \ +} + /** * @brief STM32 Serial Driver configuration structure. * @details An instance of this structure must be passed to @p sdStart() @@ -623,6 +630,14 @@ typedef struct hal_serial_config { * @brief Initialization value for the CR3 register. */ uint32_t cr3; + /** + * @brief Set callback from irq + */ + uartirq_t irq_cb; + /** + * @pointer to ctx + */ + void* ctx; } SerialConfig; /** @@ -642,7 +657,9 @@ typedef struct hal_serial_config { /* Clock frequency for the associated USART/UART.*/ \ uint32_t clock; \ /* Mask to be applied on received frames.*/ \ - uint8_t rxmask; + uint8_t rxmask; \ + /* config from start call.*/ \ + const SerialConfig *config; /*===========================================================================*/ /* Driver macros. */ From f75ed8bd7e8a12e0838fe94c2f32cfeef97680e2 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:03:53 +0000 Subject: [PATCH 24/87] STM32F1xx: allow PLLs to be disabled --- os/hal/ports/STM32/STM32F1xx/hal_lld_f100.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/os/hal/ports/STM32/STM32F1xx/hal_lld_f100.h b/os/hal/ports/STM32/STM32F1xx/hal_lld_f100.h index 725a09870c..52ecc3d9c9 100644 --- a/os/hal/ports/STM32/STM32F1xx/hal_lld_f100.h +++ b/os/hal/ports/STM32/STM32F1xx/hal_lld_f100.h @@ -384,6 +384,7 @@ #error "invalid STM32_PLLMUL_VALUE value specified" #endif +#if STM32_ACTIVATE_PLL == TRUE /** * @brief PLL input clock frequency. */ @@ -414,6 +415,8 @@ #error "STM32_PLLCLKOUT outside acceptable range (STM32_PLLOUT_MIN...STM32_PLLOUT_MAX)" #endif +#endif //STM32_ACTIVATE_PLL == TRUE + /** * @brief System clock source. */ From dcb24f90e86ee301f32e5b6238e3ee8857431175 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:09:06 +0000 Subject: [PATCH 25/87] STM32F4xx: check HAL_USE_I2S for PLLI2S increase OTG stepping --- os/hal/ports/STM32/STM32F4xx/hal_lld_type1.h | 3 +++ os/hal/ports/STM32/STM32F4xx/stm32_registry.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/STM32F4xx/hal_lld_type1.h b/os/hal/ports/STM32/STM32F4xx/hal_lld_type1.h index 615be83e01..3d151008c2 100644 --- a/os/hal/ports/STM32/STM32F4xx/hal_lld_type1.h +++ b/os/hal/ports/STM32/STM32F4xx/hal_lld_type1.h @@ -1854,10 +1854,13 @@ /* * PLLI2S VCO frequency range check. */ +#if HAL_USE_I2S == TRUE #if (STM32_PLLI2SVCO < STM32_PLLVCO_MIN) || \ (STM32_PLLI2SVCO > STM32_PLLVCO_MAX) #error "STM32_PLLI2SVCO outside acceptable range (STM32_PLLVCO_MIN...STM32_PLLVCO_MAX)" #endif +#endif + /** * @brief PLLI2S P output clock frequency. diff --git a/os/hal/ports/STM32/STM32F4xx/stm32_registry.h b/os/hal/ports/STM32/STM32F4xx/stm32_registry.h index 56ca20a334..efdce7ff1e 100644 --- a/os/hal/ports/STM32/STM32F4xx/stm32_registry.h +++ b/os/hal/ports/STM32/STM32F4xx/stm32_registry.h @@ -2858,7 +2858,7 @@ #define STM32_HAS_LPUART1 FALSE /* USB attributes.*/ -#define STM32_OTG_STEPPING 1 +#define STM32_OTG_STEPPING 2 #define STM32_HAS_OTG1 TRUE #define STM32_OTG1_ENDPOINTS 3 #define STM32_HAS_OTG2 TRUE From b05e89ea18595317d9530ee20bd10e113da28dd1 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:10:26 +0000 Subject: [PATCH 26/87] STM32F7xx: add support for TIM8 and I2C4 --- os/hal/ports/STM32/STM32F7xx/stm32_registry.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/os/hal/ports/STM32/STM32F7xx/stm32_registry.h b/os/hal/ports/STM32/STM32F7xx/stm32_registry.h index 7db0e69efa..01eb7647ea 100644 --- a/os/hal/ports/STM32/STM32F7xx/stm32_registry.h +++ b/os/hal/ports/STM32/STM32F7xx/stm32_registry.h @@ -630,6 +630,10 @@ #define STM32_HAS_TIM8 TRUE #define STM32_TIM8_IS_32BITS FALSE #define STM32_TIM8_CHANNELS 6 +#define STM32_TIM8_UP_HANDLER VectorF0 +#define STM32_TIM8_CC_HANDLER VectorF8 +#define STM32_TIM8_UP_NUMBER 44 +#define STM32_TIM8_CC_NUMBER 46 #define STM32_HAS_TIM9 TRUE #define STM32_TIM9_IS_32BITS FALSE @@ -862,6 +866,10 @@ #define STM32_I2C3_TX_DMA_CHN 0x00030008 #define STM32_HAS_I2C4 TRUE +#define STM32_I2C4_EVENT_HANDLER Vector1BC +#define STM32_I2C4_ERROR_HANDLER Vector1C0 +#define STM32_I2C4_EVENT_NUMBER 95 +#define STM32_I2C4_ERROR_NUMBER 96 #define STM32_I2C4_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 2) |\ STM32_DMA_STREAM_ID_MSK(1, 1)) #define STM32_I2C4_RX_DMA_CHN 0x00000280 From 1320a0c77f4bb9a73f683dde6e612416189cca49 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:11:08 +0000 Subject: [PATCH 27/87] STM32H7xx: correct SDMMC, PLL2 and PLL3 clock checks add support for TIM8 and FDCAN handlers --- os/hal/ports/STM32/STM32H7xx/stm32_registry.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/os/hal/ports/STM32/STM32H7xx/stm32_registry.h b/os/hal/ports/STM32/STM32H7xx/stm32_registry.h index c7cc2cfbf8..64ee8ebd68 100644 --- a/os/hal/ports/STM32/STM32H7xx/stm32_registry.h +++ b/os/hal/ports/STM32/STM32H7xx/stm32_registry.h @@ -263,6 +263,10 @@ #define STM32_HAS_TIM8 TRUE #define STM32_TIM8_IS_32BITS FALSE #define STM32_TIM8_CHANNELS 6 +#define STM32_TIM8_UP_HANDLER VectorF0 +#define STM32_TIM8_CC_HANDLER VectorF8 +#define STM32_TIM8_UP_NUMBER 44 +#define STM32_TIM8_CC_NUMBER 46 #define STM32_HAS_TIM12 TRUE #define STM32_TIM12_IS_32BITS FALSE @@ -341,6 +345,19 @@ /* DCMI attributes.*/ #define STM32_HAS_DCMI TRUE +/* FDCAN attrubutes */ +#define STM32_HAS_FDCAN1 TRUE +#define STM32_FDCAN1_IT0_HANDLER Vector8C +#define STM32_FDCAN1_IT1_HANDLER Vector94 +#define STM32_FDCAN1_IT0_NUMBER 19 +#define STM32_FDCAN1_IT1_NUMBER 21 + +#define STM32_HAS_FDCAN2 TRUE +#define STM32_FDCAN2_IT0_HANDLER Vector90 +#define STM32_FDCAN2_IT1_HANDLER Vector98 +#define STM32_FDCAN2_IT0_NUMBER 20 +#define STM32_FDCAN2_IT1_NUMBER 22 + #endif /* defined(STM32H743xx) || defined(STM32H753xx) */ /*===========================================================================*/ From 930843e5797a6d1aff27fcbf3ef25ead4a17dc65 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:13:19 +0000 Subject: [PATCH 28/87] STM32L4xx: add support for STM32L431xx --- os/hal/ports/STM32/STM32L4xx/hal_lld.h | 8 +- os/hal/ports/STM32/STM32L4xx/stm32_registry.h | 263 ++++++++++++++++++ 2 files changed, 269 insertions(+), 2 deletions(-) diff --git a/os/hal/ports/STM32/STM32L4xx/hal_lld.h b/os/hal/ports/STM32/STM32L4xx/hal_lld.h index 0fbea74378..e98b160499 100644 --- a/os/hal/ports/STM32/STM32L4xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32L4xx/hal_lld.h @@ -27,7 +27,7 @@ * . * One of the following macros must also be defined: * - STM32L422xx, STM32L432xx, STM32L433xx, STM32L443xx. - * - STM32L471xx, STM32L475xx, STM32L476xx, STM32L496xx. + * - STM32L431xx, STM32L471xx, STM32L475xx, STM32L476xx, STM32L496xx. * - STM32L485xx, STM32L486xx, STM32L4A6xx. * . * @@ -53,7 +53,7 @@ * @name Platform identification * @{ */ -#if defined(STM32L422xx) || defined(STM32L432xx) || defined(STM32L433xx) || \ +#if defined(STM32L422xx) || defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || \ defined(STM32L443xx) || defined(STM32L452xx) || defined(STM32L471xx) || \ defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L496xx) || \ defined(__DOXYGEN__) @@ -723,6 +723,10 @@ #error "Using a wrong mcuconf.h file, STM32L422_MCUCONF not defined" #endif +#if defined(STM32L431xx) && !defined(STM32L431_MCUCONF) +#error "Using a wrong mcuconf.h file, STM32L431_MCUCONF not defined" +#endif + #if defined(STM32L432xx) && !defined(STM32L432_MCUCONF) #error "Using a wrong mcuconf.h file, STM32L432_MCUCONF not defined" #endif diff --git a/os/hal/ports/STM32/STM32L4xx/stm32_registry.h b/os/hal/ports/STM32/STM32L4xx/stm32_registry.h index 8ccba3368c..115b523571 100644 --- a/os/hal/ports/STM32/STM32L4xx/stm32_registry.h +++ b/os/hal/ports/STM32/STM32L4xx/stm32_registry.h @@ -315,6 +315,269 @@ #endif /* defined(STM32L432xx) */ +/*===========================================================================*/ +/* STM32L431xx. */ +/*===========================================================================*/ + +#if defined(STM32L431xx) || defined(__DOXYGEN__) + +/* Clock attributes.*/ +#define STM32_RCC_HAS_HSI16 TRUE +#define STM32_RCC_HAS_HSI48 TRUE +#define STM32_RCC_HAS_MSI TRUE +#define STM32_RCC_HAS_LSI TRUE +#define STM32_RCC_HAS_LSI_PRESCALER FALSE +#define STM32_RCC_HAS_LSE TRUE +#define STM32_RCC_HAS_HSE TRUE + +#define STM32_RCC_HAS_PLL TRUE +#define STM32_RCC_PLL_HAS_P TRUE +#define STM32_RCC_PLL_HAS_Q TRUE +#define STM32_RCC_PLL_HAS_R TRUE + +#define STM32_RCC_HAS_PLLSAI1 TRUE +#define STM32_RCC_PLLSAI1_HAS_P TRUE +#define STM32_RCC_PLLSAI1_HAS_Q TRUE +#define STM32_RCC_PLLSAI1_HAS_R TRUE + +#define STM32_RCC_HAS_PLLSAI2 FALSE +#define STM32_RCC_PLLSAI2_HAS_P FALSE +#define STM32_RCC_PLLSAI2_HAS_Q FALSE +#define STM32_RCC_PLLSAI2_HAS_R FALSE + +/* ADC attributes.*/ +#define STM32_HAS_ADC1 TRUE +#define STM32_ADC1_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 1) |\ + STM32_DMA_STREAM_ID_MSK(2, 3)) +#define STM32_ADC1_DMA_CHN 0x00000000 + +#define STM32_HAS_ADC2 FALSE +#define STM32_HAS_ADC3 FALSE +#define STM32_HAS_ADC4 FALSE + +/* CAN attributes.*/ +#define STM32_CAN_MAX_FILTERS 14 +#define STM32_HAS_CAN1 TRUE +#define STM32_HAS_CAN2 FALSE +#define STM32_HAS_CAN3 FALSE + +/* DAC attributes.*/ +#define STM32_HAS_DAC1_CH1 TRUE +#define STM32_DAC1_CH1_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 3)|\ + STM32_DMA_STREAM_ID_MSK(2, 4)) +#define STM32_DAC1_CH1_DMA_CHN 0x00003600 + +#define STM32_HAS_DAC1_CH2 TRUE +#define STM32_DAC1_CH2_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 4)|\ + STM32_DMA_STREAM_ID_MSK(2, 5)) +#define STM32_DAC1_CH2_DMA_CHN 0x00035000 + +#define STM32_HAS_DAC2_CH1 FALSE +#define STM32_HAS_DAC2_CH2 FALSE + +/* DMA attributes.*/ +#define STM32_ADVANCED_DMA TRUE +#define STM32_DMA_SUPPORTS_DMAMUX FALSE +#define STM32_DMA_SUPPORTS_CSELR TRUE +#define STM32_DMA1_NUM_CHANNELS 7 +#define STM32_DMA2_NUM_CHANNELS 7 + +/* ETH attributes.*/ +#define STM32_HAS_ETH FALSE + +/* EXTI attributes.*/ +#define STM32_EXTI_NUM_LINES 40 +#define STM32_EXTI_IMR1_MASK 0xFF820000U +#define STM32_EXTI_IMR2_MASK 0xFFFFFF87U + +/* Flash attributes.*/ +#define STM32_FLASH_NUMBER_OF_BANKS 1 +#if !defined(STM32_FLASH_SECTORS_PER_BANK) || defined(__DOXYGEN__) +#define STM32_FLASH_SECTORS_PER_BANK 256 /* Maximum, can be redefined.*/ +#endif + +/* GPIO attributes.*/ +#define STM32_HAS_GPIOA TRUE +#define STM32_HAS_GPIOB TRUE +#define STM32_HAS_GPIOC TRUE +#define STM32_HAS_GPIOD FALSE +#define STM32_HAS_GPIOE FALSE +#define STM32_HAS_GPIOF FALSE +#define STM32_HAS_GPIOG FALSE +#define STM32_HAS_GPIOH FALSE +#define STM32_HAS_GPIOI FALSE +#define STM32_HAS_GPIOJ FALSE +#define STM32_HAS_GPIOK FALSE +#define STM32_GPIO_EN_MASK (RCC_AHB2ENR_GPIOAEN | \ + RCC_AHB2ENR_GPIOBEN | \ + RCC_AHB2ENR_GPIOCEN) + +/* I2C attributes.*/ +#define STM32_HAS_I2C1 TRUE +#define STM32_I2C1_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 7) |\ + STM32_DMA_STREAM_ID_MSK(2, 6)) +#define STM32_I2C1_RX_DMA_CHN 0x03500000 +#define STM32_I2C1_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 6) |\ + STM32_DMA_STREAM_ID_MSK(2, 7)) +#define STM32_I2C1_TX_DMA_CHN 0x05300000 + +#define STM32_HAS_I2C2 TRUE +#define STM32_I2C2_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 5)) +#define STM32_I2C2_RX_DMA_CHN 0x00030000 +#define STM32_I2C2_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 4)) +#define STM32_I2C2_TX_DMA_CHN 0x00003000 + +#define STM32_HAS_I2C3 TRUE +#define STM32_I2C3_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 3)) +#define STM32_I2C3_RX_DMA_CHN 0x00000300 +#define STM32_I2C3_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 2)) +#define STM32_I2C3_TX_DMA_CHN 0x00000030 + +#define STM32_HAS_I2C4 FALSE + +/* QUADSPI attributes.*/ +#define STM32_HAS_QUADSPI1 TRUE +#define STM32_QUADSPI1_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 5) |\ + STM32_DMA_STREAM_ID_MSK(2, 7)) +#define STM32_QUADSPI1_DMA_CHN 0x03050000 + +/* SDMMC attributes.*/ +#define STM32_HAS_SDMMC1 TRUE +#define STM32_SDC_SDMMC1_DMA_MSK (STM32_DMA_STREAM_ID_MSK(2, 4) |\ + STM32_DMA_STREAM_ID_MSK(2, 5)) +#define STM32_SDC_SDMMC1_DMA_CHN 0x00077000 + +#define STM32_HAS_SDMMC2 FALSE + +/* SPI attributes.*/ +#define STM32_HAS_SPI1 TRUE +#define STM32_SPI1_SUPPORTS_I2S FALSE +#define STM32_SPI1_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 2) |\ + STM32_DMA_STREAM_ID_MSK(2, 3)) +#define STM32_SPI1_RX_DMA_CHN 0x00000410 +#define STM32_SPI1_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 3) |\ + STM32_DMA_STREAM_ID_MSK(2, 4)) +#define STM32_SPI1_TX_DMA_CHN 0x00004100 + +#define STM32_HAS_SPI2 TRUE +#define STM32_SPI2_SUPPORTS_I2S FALSE +#define STM32_SPI2_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 4)) +#define STM32_SPI2_RX_DMA_CHN 0x00001000 +#define STM32_SPI2_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 5)) +#define STM32_SPI2_TX_DMA_CHN 0x00010000 + +#define STM32_HAS_SPI3 TRUE +#define STM32_SPI3_SUPPORTS_I2S FALSE +#define STM32_SPI3_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(2, 1)) +#define STM32_SPI3_RX_DMA_CHN 0x00000003 +#define STM32_SPI3_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(2, 2)) +#define STM32_SPI3_TX_DMA_CHN 0x00000030 + +#define STM32_HAS_SPI4 FALSE +#define STM32_HAS_SPI5 FALSE +#define STM32_HAS_SPI6 FALSE + +/* TIM attributes.*/ +#define STM32_TIM_MAX_CHANNELS 6 + +#define STM32_HAS_TIM1 TRUE +#define STM32_TIM1_IS_32BITS FALSE +#define STM32_TIM1_CHANNELS 6 + +#define STM32_HAS_TIM2 TRUE +#define STM32_TIM2_IS_32BITS TRUE +#define STM32_TIM2_CHANNELS 4 + +#define STM32_HAS_TIM6 TRUE +#define STM32_TIM6_IS_32BITS FALSE +#define STM32_TIM6_CHANNELS 0 + +#define STM32_HAS_TIM7 TRUE +#define STM32_TIM7_IS_32BITS FALSE +#define STM32_TIM7_CHANNELS 0 + +#define STM32_HAS_TIM15 TRUE +#define STM32_TIM15_IS_32BITS FALSE +#define STM32_TIM15_CHANNELS 2 + +#define STM32_HAS_TIM16 TRUE +#define STM32_TIM16_IS_32BITS FALSE +#define STM32_TIM16_CHANNELS 1 + +#define STM32_HAS_TIM3 FALSE +#define STM32_HAS_TIM4 FALSE +#define STM32_HAS_TIM5 FALSE +#define STM32_HAS_TIM8 FALSE +#define STM32_HAS_TIM9 FALSE +#define STM32_HAS_TIM10 FALSE +#define STM32_HAS_TIM11 FALSE +#define STM32_HAS_TIM12 FALSE +#define STM32_HAS_TIM13 FALSE +#define STM32_HAS_TIM14 FALSE +#define STM32_HAS_TIM17 FALSE +#define STM32_HAS_TIM18 FALSE +#define STM32_HAS_TIM19 FALSE +#define STM32_HAS_TIM20 FALSE +#define STM32_HAS_TIM21 FALSE +#define STM32_HAS_TIM22 FALSE + +/* USART attributes.*/ +#define STM32_HAS_USART1 TRUE +#define STM32_USART1_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 5) |\ + STM32_DMA_STREAM_ID_MSK(2, 7)) +#define STM32_USART1_RX_DMA_CHN 0x02020000 +#define STM32_USART1_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 4) |\ + STM32_DMA_STREAM_ID_MSK(2, 6)) +#define STM32_USART1_TX_DMA_CHN 0x00202000 + +#define STM32_HAS_USART2 TRUE +#define STM32_USART2_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 6)) +#define STM32_USART2_RX_DMA_CHN 0x00200000 +#define STM32_USART2_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 7)) +#define STM32_USART2_TX_DMA_CHN 0x02000000 + +#define STM32_HAS_USART3 TRUE +#define STM32_USART3_RX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 3)) +#define STM32_USART3_RX_DMA_CHN 0x00000200 +#define STM32_USART3_TX_DMA_MSK (STM32_DMA_STREAM_ID_MSK(1, 2)) +#define STM32_USART3_TX_DMA_CHN 0x00000020 + +#define STM32_HAS_LPUART1 TRUE + +#define STM32_HAS_UART4 FALSE +#define STM32_HAS_UART5 FALSE +#define STM32_HAS_USART6 FALSE +#define STM32_HAS_UART7 FALSE +#define STM32_HAS_UART8 FALSE + +/* USB attributes.*/ +#define STM32_HAS_USB FALSE +#define STM32_USB_ACCESS_SCHEME_2x16 TRUE +#define STM32_USB_PMA_SIZE 1024 +#define STM32_USB_HAS_BCDR TRUE + +#define STM32_HAS_OTG1 FALSE +#define STM32_HAS_OTG2 FALSE + +/* IWDG attributes.*/ +#define STM32_HAS_IWDG TRUE +#define STM32_IWDG_IS_WINDOWED TRUE + +/* LTDC attributes.*/ +#define STM32_HAS_LTDC FALSE + +/* DMA2D attributes.*/ +#define STM32_HAS_DMA2D FALSE + +/* FSMC attributes.*/ +#define STM32_HAS_FSMC TRUE + +/* CRC attributes.*/ +#define STM32_HAS_CRC TRUE +#define STM32_CRC_PROGRAMMABLE TRUE + +#endif /* defined(STM32L431xx) */ + /*===========================================================================*/ /* STM32L422xx */ /*===========================================================================*/ From 13df4c58ae13fa56e34dc7b09a17f6820e4b72d3 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:15:15 +0000 Subject: [PATCH 29/87] hal_mmc: correct MMC driver, add support for SPI hooks and read/write timeouts --- os/hal/src/hal_mmc_spi.c | 67 ++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/os/hal/src/hal_mmc_spi.c b/os/hal/src/hal_mmc_spi.c index 716ce734a6..63edeed6e5 100644 --- a/os/hal/src/hal_mmc_spi.c +++ b/os/hal/src/hal_mmc_spi.c @@ -31,6 +31,22 @@ #if (HAL_USE_MMC_SPI == TRUE) || defined(__DOXYGEN__) +#ifdef HAL_SDCARD_SPI_HOOK +#include "spi_hook.h" +#define spiStart spiStartHook +#define spiStop spiStopHook +#define spiSelect spiSelectHook +#define spiUnselect spiUnselectHook +#define spiIgnore spiIgnoreHook +#define spiSend spiSendHook +#define spiReceive spiReceiveHook +#endif + +#define MMC_READ_WAIT_USEC 250 +#define MMC_TIMEOUT_READ (MMC_IDLE_TIMEOUT_MS * 1000/MMC_READ_WAIT_USEC) +#define MMC_WRITE_WAIT_USEC 500 +#define MMC_TIMEOUT_WRITE (MMC_IDLE_TIMEOUT_MS * 1000/MMC_WRITE_WAIT_USEC) + /*===========================================================================*/ /* Driver local definitions. */ /*===========================================================================*/ @@ -299,12 +315,45 @@ static bool mmc_wait_idle(MMCDriver *mmcp) { } /* Trying to be nice with the other threads.*/ - osalThreadSleepMilliseconds(1); - } while (++i < MMC_IDLE_TIMEOUT_MS); + osalThreadSleepMicroseconds(MMC_WRITE_WAIT_USEC); + } while (++i < MMC_TIMEOUT_WRITE); return HAL_FAILED; } +/** + * @brief Waits for a response from read operation. + * + * @param[in] mmcp pointer to the @p MMCDriver object + * @return first non-idle byte or 0xFF if timeout + * + * @notapi + */ +static uint8_t mmc_wait_nonidle(MMCDriver *mmcp) { + unsigned i; + + for (i = 0U; i < 16U; i++) { + spiReceive(mmcp->config->spip, 1U, mmcp->buffer); + if (mmcp->buffer[0] != 0xFFU) { + return mmcp->buffer[0]; + } + } + + /* Looks like it is a long wait.*/ + i = 0U; + do { + spiReceive(mmcp->config->spip, 1U, mmcp->buffer); + if (mmcp->buffer[0] != 0xFFU) { + return mmcp->buffer[0]; + } + + /* Trying to be nice with the other threads.*/ + osalThreadSleepMicroseconds(MMC_READ_WAIT_USEC); + } while (++i < MMC_TIMEOUT_READ); + + return 0xFF; +} + /** * @brief Sends a command header. * @@ -320,7 +369,7 @@ static bool mmc_wait_idle(MMCDriver *mmcp) { static bool mmc_send_hdr(MMCDriver *mmcp, uint8_t cmd, uint32_t arg) { /* Wait for the bus to become idle if a write operation was in progress.*/ - if (mmc_wait_idle(mmcp) == HAL_FAILED) { + if (cmd != MMCSD_CMD_GO_IDLE_STATE && mmc_wait_idle(mmcp) == HAL_FAILED) { return HAL_FAILED; } @@ -449,7 +498,6 @@ static bool mmc_send_command_R3(MMCDriver *mmcp, uint8_t cmd, uint32_t arg, * @notapi */ static bool mmc_read_CxD(MMCDriver *mmcp, uint8_t cmd, uint32_t cxd[4]) { - unsigned i; uint8_t r1; uint8_t *bp; bool result; @@ -465,9 +513,7 @@ static bool mmc_read_CxD(MMCDriver *mmcp, uint8_t cmd, uint32_t cxd[4]) { } /* Wait for data availability.*/ - for (i = 0U; i < MMC_WAIT_DATA; i++) { - spiReceive(mmcp->config->spip, 1, mmcp->buffer); - if (mmcp->buffer[0] == 0xFEU) { + if (mmc_wait_nonidle(mmcp) == 0xFEU) { uint32_t *wp; spiReceive(mmcp->config->spip, 16, mmcp->buffer); @@ -484,7 +530,6 @@ static bool mmc_read_CxD(MMCDriver *mmcp, uint8_t cmd, uint32_t cxd[4]) { return HAL_SUCCESS; } - } spiUnselect(mmcp->config->spip); @@ -813,7 +858,6 @@ bool mmcStartSequentialRead(MMCDriver *mmcp, uint32_t startblk) { * @api */ bool mmcSequentialRead(MMCDriver *mmcp, uint8_t *buffer) { - unsigned i; osalDbgCheck((mmcp != NULL) && (buffer != NULL)); @@ -821,15 +865,12 @@ bool mmcSequentialRead(MMCDriver *mmcp, uint8_t *buffer) { return HAL_FAILED; } - for (i = 0; i < MMC_WAIT_DATA; i++) { - spiReceive(mmcp->config->spip, 1, mmcp->buffer); - if (mmcp->buffer[0] == 0xFEU) { + if (mmc_wait_nonidle(mmcp) == 0xFEU) { spiReceive(mmcp->config->spip, MMCSD_BLOCK_SIZE, buffer); /* CRC ignored. */ spiIgnore(mmcp->config->spip, 2); return HAL_SUCCESS; } - } /* Timeout.*/ spiUnselect(mmcp->config->spip); From 428b1f1fe7be23c18c9cfef288ac4feeda1e179f Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:18:01 +0000 Subject: [PATCH 30/87] hal_i2c: add support for i2cSoftStop --- os/hal/src/hal_i2c.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/os/hal/src/hal_i2c.c b/os/hal/src/hal_i2c.c index be3e897546..13bf5ad186 100644 --- a/os/hal/src/hal_i2c.c +++ b/os/hal/src/hal_i2c.c @@ -120,6 +120,29 @@ msg_t i2cStart(I2CDriver *i2cp, const I2CConfig *config) { return msg; } +/** + * @brief Like i2cStop, but doesn't stop the clock nor disable the peripheral. + * + * @param[in] i2cp pointer to the @p I2CDriver object + * + * @api + */ +void i2cSoftStop(I2CDriver *i2cp) { + + osalDbgCheck(i2cp != NULL); + + osalSysLock(); + + osalDbgAssert((i2cp->state == I2C_STOP) || (i2cp->state == I2C_READY) || + (i2cp->state == I2C_LOCKED), "invalid state"); + + i2c_lld_soft_stop(i2cp); + i2cp->config = NULL; + i2cp->state = I2C_STOP; + + osalSysUnlock(); +} + /** * @brief Deactivates the I2C peripheral. * From 8ade4b7d751169aa2f3e256cc2368bb4e495e395 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:19:31 +0000 Subject: [PATCH 31/87] rt: fix compilation warnings in kernel --- os/rt/include/chschd.h | 3 +++ os/rt/include/chthreads.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/os/rt/include/chschd.h b/os/rt/include/chschd.h index b3b5ec6989..e7dd3f7e37 100644 --- a/os/rt/include/chschd.h +++ b/os/rt/include/chschd.h @@ -172,6 +172,8 @@ extern "C" { /* If the performance code path has been chosen then all the following functions are inlined into the various kernel modules.*/ #if CH_CFG_OPTIMIZE_SPEED == TRUE +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" static inline void ch_sch_prio_insert(ch_queue_t *qp, ch_queue_t *tp) { ch_queue_t *cp = qp; @@ -184,6 +186,7 @@ static inline void ch_sch_prio_insert(ch_queue_t *qp, ch_queue_t *tp) { tp->prev->next = tp; cp->prev = tp; } +#pragma GCC diagnostic pop #endif /* CH_CFG_OPTIMIZE_SPEED == TRUE */ #endif /* CHSCHD_H */ diff --git a/os/rt/include/chthreads.h b/os/rt/include/chthreads.h index ddcdc34346..1dd3c085f9 100644 --- a/os/rt/include/chthreads.h +++ b/os/rt/include/chthreads.h @@ -491,6 +491,8 @@ static inline bool chThdQueueIsEmptyI(threads_queue_t *tqp) { * * @iclass */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" static inline void chThdDoDequeueNextI(threads_queue_t *tqp, msg_t msg) { thread_t *tp; @@ -503,6 +505,7 @@ static inline void chThdDoDequeueNextI(threads_queue_t *tqp, msg_t msg) { tp->u.rdymsg = msg; (void) chSchReadyI(tp); } +#pragma GCC diagnostic pop #endif /* CHTHREADS_H */ From c5d01fdb0cbd6f6085c6079195cdb3c0921b8635 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:20:04 +0000 Subject: [PATCH 32/87] chtime: optimize time intervals for 1Mhz CH_CFG_ST_FREQUENCY --- os/rt/include/chtime.h | 65 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/os/rt/include/chtime.h b/os/rt/include/chtime.h index f38d0917e3..9018e32b85 100644 --- a/os/rt/include/chtime.h +++ b/os/rt/include/chtime.h @@ -198,10 +198,14 @@ typedef uint32_t time_conv_t; * * @api */ +#if CH_CFG_ST_FREQUENCY == 1000000 +#define TIME_MS2I(msecs) ((sysinterval_t)((time_conv_t)(msecs))*(time_conv_t)1000) +#else #define TIME_MS2I(msecs) \ ((sysinterval_t)((((time_conv_t)(msecs) * \ (time_conv_t)CH_CFG_ST_FREQUENCY) + \ (time_conv_t)999) / (time_conv_t)1000)) +#endif /** * @brief Microseconds to time interval. @@ -216,10 +220,14 @@ typedef uint32_t time_conv_t; * * @api */ +#if CH_CFG_ST_FREQUENCY == 1000000 +#define TIME_US2I(usecs) ((sysinterval_t)(usecs)) +#else #define TIME_US2I(usecs) \ ((sysinterval_t)((((time_conv_t)(usecs) * \ (time_conv_t)CH_CFG_ST_FREQUENCY) + \ (time_conv_t)999999) / (time_conv_t)1000000)) +#endif /** * @brief Time interval to seconds. @@ -252,10 +260,15 @@ typedef uint32_t time_conv_t; * * @api */ +#if CH_CFG_ST_FREQUENCY == 1000000 +#define TIME_I2MS(interval) \ + (time_msecs_t)(((time_conv_t)(interval)+999)/(time_conv_t)1000) +#else #define TIME_I2MS(interval) \ (time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000) + \ (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / \ (time_conv_t)CH_CFG_ST_FREQUENCY) +#endif /** * @brief Time interval to microseconds. @@ -270,10 +283,14 @@ typedef uint32_t time_conv_t; * * @api */ +#if CH_CFG_ST_FREQUENCY == 1000000 +#define TIME_I2US(interval) ((time_usecs_t)(interval)) +#else #define TIME_I2US(interval) \ (time_usecs_t)((((time_conv_t)(interval) * (time_conv_t)1000000) + \ (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / \ (time_conv_t)CH_CFG_ST_FREQUENCY) +#endif /** @} */ /*===========================================================================*/ @@ -329,10 +346,12 @@ static inline sysinterval_t chTimeS2I(time_secs_t secs) { */ static inline sysinterval_t chTimeMS2I(time_msecs_t msec) { time_conv_t ticks; - +#if CH_CFG_ST_FREQUENCY == 1000000 + ticks = msec*(time_conv_t)1000; +#else ticks = (((time_conv_t)msec * (time_conv_t)CH_CFG_ST_FREQUENCY) + (time_conv_t)999) / (time_conv_t)1000; - +#endif chDbgAssert(ticks <= (time_conv_t)TIME_MAX_INTERVAL, "conversion overflow"); @@ -351,10 +370,12 @@ static inline sysinterval_t chTimeMS2I(time_msecs_t msec) { */ static inline sysinterval_t chTimeUS2I(time_usecs_t usec) { time_conv_t ticks; - +#if CH_CFG_ST_FREQUENCY == 1000000 + ticks = usec; +#else ticks = (((time_conv_t)usec * (time_conv_t)CH_CFG_ST_FREQUENCY) + (time_conv_t)999999) / (time_conv_t)1000000; - +#endif chDbgAssert(ticks <= (time_conv_t)TIME_MAX_INTERVAL, "conversion overflow"); @@ -396,11 +417,13 @@ static inline time_secs_t chTimeI2S(sysinterval_t interval) { */ static inline time_msecs_t chTimeI2MS(sysinterval_t interval) { time_conv_t msecs; - +#if CH_CFG_ST_FREQUENCY == 1000000 + msecs = ((interval + (time_conv_t)999)/(time_conv_t)1000); +#else msecs = (((time_conv_t)interval * (time_conv_t)1000) + (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / (time_conv_t)CH_CFG_ST_FREQUENCY; - +#endif chDbgAssert(msecs < (time_conv_t)((time_msecs_t)-1), "conversion overflow"); @@ -419,17 +442,43 @@ static inline time_msecs_t chTimeI2MS(sysinterval_t interval) { */ static inline time_usecs_t chTimeI2US(sysinterval_t interval) { time_conv_t usecs; - +#if CH_CFG_ST_FREQUENCY == 1000000 + usecs = (time_conv_t)interval; +#else usecs = (((time_conv_t)interval * (time_conv_t)1000000) + (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / (time_conv_t)CH_CFG_ST_FREQUENCY; - +#endif chDbgAssert(usecs <= (time_conv_t)((time_usecs_t)-1), "conversion overflow"); return (time_usecs_t)usecs; } +/** + * @brief Time interval to microseconds 64 bit if supported. + * @details Converts from system interval to microseconds. + * @note The result is rounded up to the next microsecond boundary. + * + * @param[in] interval interval in ticks + * @return The number of microseconds. + * + * @special + */ +static inline time_usecs_t chTimeI2US64(sysinterval_t interval) { + time_conv_t usecs; +#if CH_CFG_ST_FREQUENCY == 1000000 + usecs = (time_conv_t)interval; +#else + usecs = (((time_conv_t)interval * (time_conv_t)1000000) + + (time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / + (time_conv_t)CH_CFG_ST_FREQUENCY; +#endif + chDbgAssert(usecs <= (time_conv_t)((time_usecs_t)-1), + "conversion overflow"); + + return (time_conv_t)usecs; +} /** * @brief Adds an interval to a system time returning a system time. * From 03f8729ee786b97c844b9fef5d24fba25712e319 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:21:04 +0000 Subject: [PATCH 33/87] fatfs_bindings: add support for op retries correct memory allocation --- os/various/fatfs_bindings/fatfs_diskio.c | 19 ++++++++++++++----- os/various/fatfs_bindings/fatfs_syscall.c | 5 +++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/os/various/fatfs_bindings/fatfs_diskio.c b/os/various/fatfs_bindings/fatfs_diskio.c index 2fc5cc3d94..a55daac5b2 100644 --- a/os/various/fatfs_bindings/fatfs_diskio.c +++ b/os/various/fatfs_bindings/fatfs_diskio.c @@ -33,6 +33,15 @@ extern RTCDriver RTCD1; /*-----------------------------------------------------------------------*/ /* Correspondence between physical drive number and physical drive. */ +#define MMC 0 +#define SDC 0 + +/* + retry all disk operations up to 5 times to reduce the impact of poor + hardware + */ +#define FATFS_NUM_RETRIES 5 +#define FATFS_RETRY(x) do { uint8_t ii; for (ii=0; ii Date: Thu, 2 Feb 2023 14:21:45 +0000 Subject: [PATCH 34/87] various: conditonally remove redefined syscalls on ardupilot --- os/various/syscalls.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/os/various/syscalls.c b/os/various/syscalls.c index 11182aed38..197489fe25 100644 --- a/os/various/syscalls.c +++ b/os/various/syscalls.c @@ -183,7 +183,7 @@ int _isatty_r(struct _reent *r, int fd) { } /***************************************************************************/ - +#ifndef _ARDUPILOT_ __attribute__((used)) void _exit(int status) { @@ -192,9 +192,10 @@ void _exit(int status) { chSysHalt("exit"); abort(); } +#endif /***************************************************************************/ - +#ifndef _ARDUPILOT_ __attribute__((used)) int _kill(int pid, int sig) { @@ -204,15 +205,18 @@ int _kill(int pid, int sig) { chSysHalt("kill"); abort(); } +#endif /***************************************************************************/ +#ifndef _ARDUPILOT_ __attribute__((used)) int _getpid(void) { return 1; abort(); } +#endif /***************************************************************************/ /* Only used in C++ mode.*/ From 70c470af2e5d78a40d5c84eb36e3fcfe9ff42708 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:23:08 +0000 Subject: [PATCH 35/87] OTGv1: enable USB with WFI --- os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c b/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c index 0a2e674696..92ec50716c 100644 --- a/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c +++ b/os/hal/ports/STM32/LLD/OTGv1/hal_usb_lld.c @@ -777,6 +777,11 @@ void usb_lld_start(USBDriver *usbp) { /* 48MHz 1.1 PHY.*/ otgp->DCFG = 0x02200000 | DCFG_DSPD_FS11; + +#if CORTEX_ENABLE_WFI_IDLE == TRUE + // enable USB with WFI + rccDisableUSB2_HSULPI(); +#endif } #endif From bb83f3f92042a5125507175eb3807a03254771fc Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:24:58 +0000 Subject: [PATCH 36/87] boards: add ArduPilot_H743 --- os/hal/boards/ArduPilot_H743/board.c | 266 +++++ os/hal/boards/ArduPilot_H743/board.h | 1296 +++++++++++++++++++++++++ os/hal/boards/ArduPilot_H743/board.mk | 9 + 3 files changed, 1571 insertions(+) create mode 100644 os/hal/boards/ArduPilot_H743/board.c create mode 100644 os/hal/boards/ArduPilot_H743/board.h create mode 100644 os/hal/boards/ArduPilot_H743/board.mk diff --git a/os/hal/boards/ArduPilot_H743/board.c b/os/hal/boards/ArduPilot_H743/board.c new file mode 100644 index 0000000000..5786abb32b --- /dev/null +++ b/os/hal/boards/ArduPilot_H743/board.c @@ -0,0 +1,266 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#include "hal.h" +#include "stm32_gpio.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/** + * @brief Type of STM32 GPIO port setup. + */ +typedef struct { + uint32_t moder; + uint32_t otyper; + uint32_t ospeedr; + uint32_t pupdr; + uint32_t odr; + uint32_t afrl; + uint32_t afrh; +} gpio_setup_t; + +/** + * @brief Type of STM32 GPIO initialization data. + */ +typedef struct { +#if STM32_HAS_GPIOA || defined(__DOXYGEN__) + gpio_setup_t PAData; +#endif +#if STM32_HAS_GPIOB || defined(__DOXYGEN__) + gpio_setup_t PBData; +#endif +#if STM32_HAS_GPIOC || defined(__DOXYGEN__) + gpio_setup_t PCData; +#endif +#if STM32_HAS_GPIOD || defined(__DOXYGEN__) + gpio_setup_t PDData; +#endif +#if STM32_HAS_GPIOE || defined(__DOXYGEN__) + gpio_setup_t PEData; +#endif +#if STM32_HAS_GPIOF || defined(__DOXYGEN__) + gpio_setup_t PFData; +#endif +#if STM32_HAS_GPIOG || defined(__DOXYGEN__) + gpio_setup_t PGData; +#endif +#if STM32_HAS_GPIOH || defined(__DOXYGEN__) + gpio_setup_t PHData; +#endif +#if STM32_HAS_GPIOI || defined(__DOXYGEN__) + gpio_setup_t PIData; +#endif +#if STM32_HAS_GPIOJ || defined(__DOXYGEN__) + gpio_setup_t PJData; +#endif +#if STM32_HAS_GPIOK || defined(__DOXYGEN__) + gpio_setup_t PKData; +#endif +} gpio_config_t; + +/** + * @brief STM32 GPIO static initialization data. + */ +static const gpio_config_t gpio_default_config = { +#if STM32_HAS_GPIOA + {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, + VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH}, +#endif +#if STM32_HAS_GPIOB + {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, + VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH}, +#endif +#if STM32_HAS_GPIOC + {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, + VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH}, +#endif +#if STM32_HAS_GPIOD + {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, + VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH}, +#endif +#if STM32_HAS_GPIOE + {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR, + VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH}, +#endif +#if STM32_HAS_GPIOF + {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, + VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH}, +#endif +#if STM32_HAS_GPIOG + {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR, + VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH}, +#endif +#if STM32_HAS_GPIOH + {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR, + VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH}, +#endif +#if STM32_HAS_GPIOI + {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, + VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}, +#endif +#if STM32_HAS_GPIOJ + {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR, + VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH}, +#endif +#if STM32_HAS_GPIOK + {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR, + VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH} +#endif +}; + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) { + + gpiop->OTYPER = config->otyper; + gpiop->OSPEEDR = config->ospeedr; + gpiop->PUPDR = config->pupdr; + gpiop->ODR = config->odr; + gpiop->AFRL = config->afrl; + gpiop->AFRH = config->afrh; + gpiop->MODER = config->moder; +} + +static void stm32_gpio_init(void) { + + /* Enabling GPIO-related clocks, the mask comes from the + registry header file.*/ + rccResetAHB4(STM32_GPIO_EN_MASK); + rccEnableAHB4(STM32_GPIO_EN_MASK, true); + + /* Initializing all the defined GPIO ports.*/ +#if STM32_HAS_GPIOA + gpio_init(GPIOA, &gpio_default_config.PAData); +#endif +#if STM32_HAS_GPIOB + gpio_init(GPIOB, &gpio_default_config.PBData); +#endif +#if STM32_HAS_GPIOC + gpio_init(GPIOC, &gpio_default_config.PCData); +#endif +#if STM32_HAS_GPIOD + gpio_init(GPIOD, &gpio_default_config.PDData); +#endif +#if STM32_HAS_GPIOE + gpio_init(GPIOE, &gpio_default_config.PEData); +#endif +#if STM32_HAS_GPIOF + gpio_init(GPIOF, &gpio_default_config.PFData); +#endif +#if STM32_HAS_GPIOG + gpio_init(GPIOG, &gpio_default_config.PGData); +#endif +#if STM32_HAS_GPIOH + gpio_init(GPIOH, &gpio_default_config.PHData); +#endif +#if STM32_HAS_GPIOI + gpio_init(GPIOI, &gpio_default_config.PIData); +#endif +#if STM32_HAS_GPIOJ + gpio_init(GPIOJ, &gpio_default_config.PJData); +#endif +#if STM32_HAS_GPIOK + gpio_init(GPIOK, &gpio_default_config.PKData); +#endif +} + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Early initialization code. + * @details GPIO ports and system clocks are initialized before everything + * else. + */ +void __early_init(void) { + + stm32_gpio_init(); + stm32_clock_init(); +} + +#if HAL_USE_SDC || defined(__DOXYGEN__) +/** + * @brief SDC card detection. + */ +bool sdc_lld_is_card_inserted(SDCDriver *sdcp) { + + (void)sdcp; + /* TODO: Fill the implementation.*/ + return true; +} + +/** + * @brief SDC card write protection detection. + */ +bool sdc_lld_is_write_protected(SDCDriver *sdcp) { + + (void)sdcp; + /* TODO: Fill the implementation.*/ + return false; +} +#endif /* HAL_USE_SDC */ + +#if HAL_USE_MMC_SPI || defined(__DOXYGEN__) +/** + * @brief MMC_SPI card detection. + */ +bool mmc_lld_is_card_inserted(MMCDriver *mmcp) { + + (void)mmcp; + /* TODO: Fill the implementation.*/ + return true; +} + +/** + * @brief MMC_SPI card write protection detection. + */ +bool mmc_lld_is_write_protected(MMCDriver *mmcp) { + + (void)mmcp; + /* TODO: Fill the implementation.*/ + return false; +} +#endif + +/** + * @brief Board-specific initialization code. + * @todo Add your board-specific code, if any. + */ +void boardInit(void) { + +} diff --git a/os/hal/boards/ArduPilot_H743/board.h b/os/hal/boards/ArduPilot_H743/board.h new file mode 100644 index 0000000000..ec08ff113f --- /dev/null +++ b/os/hal/boards/ArduPilot_H743/board.h @@ -0,0 +1,1296 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#ifndef BOARD_H +#define BOARD_H + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/* + * Setup for ArduPilot H743 + */ + +/* + * Board identifier. + */ +#define BOARD_ST_ARDUPILOT_H743 +#define BOARD_NAME "ArduPilot_H743" + +/* + * Ethernet PHY type. + */ +#define BOARD_PHY_ID MII_LAN8742A_ID +#define BOARD_PHY_RMII + +/* + * Board oscillators-related settings. + */ +#if !defined(STM32_LSECLK) +#define STM32_LSECLK 32768U +#endif + +#define STM32_LSEDRV (3U << 3U) + +#if !defined(STM32_HSECLK) +#define STM32_HSECLK 8000000U +#endif + +#define STM32_HSE_BYPASS + +/* + * MCU type as defined in the ST header. + */ +#define STM32H743xx + +/* + PAL lines + */ + +#define LINE_SPI3_SCK PAL_LINE(GPIOB, 3U) +#define LINE_SPI3_MISO PAL_LINE(GPIOB, 4U) +#define LINE_SPI3_MOSI PAL_LINE(GPIOB, 5U) +#define LINE_SPI3_NSS PAL_LINE(GPIOA, 4U) +#define LINE_SPI3_NSS2 PAL_LINE(GPIOC, 7U) + +#define LINE_LED1 PAL_LINE(GPIOB, 0U) +#define LINE_LED2 PAL_LINE(GPIOB, 7U) + +/* +* I/O ports initial setup, this configuration is established soon after reset +* in the initialization code. +* Please refer to the STM32 Reference Manual for details. +*/ +#define PIN_MODE_INPUT(n) (0U << ((n) * 2U)) +#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U)) +#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U)) +#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U)) +#define PIN_ODR_LOW(n) (0U << (n)) +#define PIN_ODR_HIGH(n) (1U << (n)) +#define PIN_OTYPE_PUSHPULL(n) (0U << (n)) +#define PIN_OTYPE_OPENDRAIN(n) (1U << (n)) +#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U)) +#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U)) +#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U)) +#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U)) +#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U)) +#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U)) +#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U)) +#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U)) + +/* PORTA: + PA4 MPU_CS CS + PA5 SPI1_SCK SPI1 AF5 + PA6 SPI1_MISO SPI1 AF5 + PA7 SPI1_MOSI SPI1 AF5 + PA11 OTG_FS_DM OTG1 AF10 + PA12 OTG_FS_DP OTG1 AF10 + PA13 JTMS-SWDIO SWD AF0 + PA14 JTCK-SWCLK SWD AF0 +*/ + +#define VAL_GPIOA_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_OUTPUT(4U) | \ + PIN_MODE_ALTERNATE(5U) | \ + PIN_MODE_ALTERNATE(6U) | \ + PIN_MODE_ALTERNATE(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_ALTERNATE(11U) | \ + PIN_MODE_ALTERNATE(12U) | \ + PIN_MODE_ALTERNATE(13U) | \ + PIN_MODE_ALTERNATE(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_PULLUP(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOA_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOA_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 5U) | \ + PIN_AFIO_AF(6U, 5U) | \ + PIN_AFIO_AF(7U, 5U)) + +#define VAL_GPIOA_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 10U) | \ + PIN_AFIO_AF(12U, 10U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTB: + PB0 LED1 OUTPUT + PB3 SPI3_SCK SPI3 AF6 + PB4 SPI3_MISO SPI3 AF6 + PB5 SPI3_MOSI SPI3 AF7 + PB7 LED2 OUTPUT +*/ + +#define VAL_GPIOB_MODER (PIN_MODE_OUTPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_ALTERNATE(3U) | \ + PIN_MODE_ALTERNATE(4U) | \ + PIN_MODE_ALTERNATE(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_OUTPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOB_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOB_ODR (PIN_ODR_LOW(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_LOW(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOB_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 6U) | \ + PIN_AFIO_AF(4U, 6U) | \ + PIN_AFIO_AF(5U, 7U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOB_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTC: + PC7 BARO_CS CS +*/ + +#define VAL_GPIOC_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_OUTPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_PULLUP(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOC_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOC_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOC_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTD: +*/ + +#define VAL_GPIOD_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOD_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOD_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOD_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOD_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTE: + PE8 UART7_TX UART7 AF7 +*/ + +#define VAL_GPIOE_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_ALTERNATE(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOE_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_PULLUP(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOE_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOE_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOE_AFRH (PIN_AFIO_AF(8U, 7U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTF: + PF6 UART7_RX UART7 AF7 +*/ + +#define VAL_GPIOF_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_ALTERNATE(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_PULLUP(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOF_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOF_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 7U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOF_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTG: +*/ + +#define VAL_GPIOG_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOG_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOG_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOG_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOG_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTH: +*/ + +#define VAL_GPIOH_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOH_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOH_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOH_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOH_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTI: +*/ + +#define VAL_GPIOI_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOI_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOI_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOI_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOI_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOI_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOI_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTJ: +*/ + +#define VAL_GPIOJ_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOJ_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOJ_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOJ_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOJ_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOJ_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOJ_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/* PORTK: +*/ + +#define VAL_GPIOK_MODER (PIN_MODE_INPUT(0U) | \ + PIN_MODE_INPUT(1U) | \ + PIN_MODE_INPUT(2U) | \ + PIN_MODE_INPUT(3U) | \ + PIN_MODE_INPUT(4U) | \ + PIN_MODE_INPUT(5U) | \ + PIN_MODE_INPUT(6U) | \ + PIN_MODE_INPUT(7U) | \ + PIN_MODE_INPUT(8U) | \ + PIN_MODE_INPUT(9U) | \ + PIN_MODE_INPUT(10U) | \ + PIN_MODE_INPUT(11U) | \ + PIN_MODE_INPUT(12U) | \ + PIN_MODE_INPUT(13U) | \ + PIN_MODE_INPUT(14U) | \ + PIN_MODE_INPUT(15U)) + +#define VAL_GPIOK_OTYPER (PIN_OTYPE_PUSHPULL(0U) | \ + PIN_OTYPE_PUSHPULL(1U) | \ + PIN_OTYPE_PUSHPULL(2U) | \ + PIN_OTYPE_PUSHPULL(3U) | \ + PIN_OTYPE_PUSHPULL(4U) | \ + PIN_OTYPE_PUSHPULL(5U) | \ + PIN_OTYPE_PUSHPULL(6U) | \ + PIN_OTYPE_PUSHPULL(7U) | \ + PIN_OTYPE_PUSHPULL(8U) | \ + PIN_OTYPE_PUSHPULL(9U) | \ + PIN_OTYPE_PUSHPULL(10U) | \ + PIN_OTYPE_PUSHPULL(11U) | \ + PIN_OTYPE_PUSHPULL(12U) | \ + PIN_OTYPE_PUSHPULL(13U) | \ + PIN_OTYPE_PUSHPULL(14U) | \ + PIN_OTYPE_PUSHPULL(15U)) + +#define VAL_GPIOK_OSPEEDR (PIN_OSPEED_MEDIUM(0U) | \ + PIN_OSPEED_MEDIUM(1U) | \ + PIN_OSPEED_MEDIUM(2U) | \ + PIN_OSPEED_MEDIUM(3U) | \ + PIN_OSPEED_MEDIUM(4U) | \ + PIN_OSPEED_MEDIUM(5U) | \ + PIN_OSPEED_MEDIUM(6U) | \ + PIN_OSPEED_MEDIUM(7U) | \ + PIN_OSPEED_MEDIUM(8U) | \ + PIN_OSPEED_MEDIUM(9U) | \ + PIN_OSPEED_MEDIUM(10U) | \ + PIN_OSPEED_MEDIUM(11U) | \ + PIN_OSPEED_MEDIUM(12U) | \ + PIN_OSPEED_MEDIUM(13U) | \ + PIN_OSPEED_MEDIUM(14U) | \ + PIN_OSPEED_MEDIUM(15U)) + +#define VAL_GPIOK_PUPDR (PIN_PUPDR_FLOATING(0U) | \ + PIN_PUPDR_FLOATING(1U) | \ + PIN_PUPDR_FLOATING(2U) | \ + PIN_PUPDR_FLOATING(3U) | \ + PIN_PUPDR_FLOATING(4U) | \ + PIN_PUPDR_FLOATING(5U) | \ + PIN_PUPDR_FLOATING(6U) | \ + PIN_PUPDR_FLOATING(7U) | \ + PIN_PUPDR_FLOATING(8U) | \ + PIN_PUPDR_FLOATING(9U) | \ + PIN_PUPDR_FLOATING(10U) | \ + PIN_PUPDR_FLOATING(11U) | \ + PIN_PUPDR_FLOATING(12U) | \ + PIN_PUPDR_FLOATING(13U) | \ + PIN_PUPDR_FLOATING(14U) | \ + PIN_PUPDR_FLOATING(15U)) + +#define VAL_GPIOK_ODR (PIN_ODR_HIGH(0U) | \ + PIN_ODR_HIGH(1U) | \ + PIN_ODR_HIGH(2U) | \ + PIN_ODR_HIGH(3U) | \ + PIN_ODR_HIGH(4U) | \ + PIN_ODR_HIGH(5U) | \ + PIN_ODR_HIGH(6U) | \ + PIN_ODR_HIGH(7U) | \ + PIN_ODR_HIGH(8U) | \ + PIN_ODR_HIGH(9U) | \ + PIN_ODR_HIGH(10U) | \ + PIN_ODR_HIGH(11U) | \ + PIN_ODR_HIGH(12U) | \ + PIN_ODR_HIGH(13U) | \ + PIN_ODR_HIGH(14U) | \ + PIN_ODR_HIGH(15U)) + +#define VAL_GPIOK_AFRL (PIN_AFIO_AF(0U, 0U) | \ + PIN_AFIO_AF(1U, 0U) | \ + PIN_AFIO_AF(2U, 0U) | \ + PIN_AFIO_AF(3U, 0U) | \ + PIN_AFIO_AF(4U, 0U) | \ + PIN_AFIO_AF(5U, 0U) | \ + PIN_AFIO_AF(6U, 0U) | \ + PIN_AFIO_AF(7U, 0U)) + +#define VAL_GPIOK_AFRH (PIN_AFIO_AF(8U, 0U) | \ + PIN_AFIO_AF(9U, 0U) | \ + PIN_AFIO_AF(10U, 0U) | \ + PIN_AFIO_AF(11U, 0U) | \ + PIN_AFIO_AF(12U, 0U) | \ + PIN_AFIO_AF(13U, 0U) | \ + PIN_AFIO_AF(14U, 0U) | \ + PIN_AFIO_AF(15U, 0U)) + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#if !defined(_FROM_ASM_) +#ifdef __cplusplus +extern "C" { +#endif + void boardInit(void); +#ifdef __cplusplus +} +#endif +#endif /* _FROM_ASM_ */ + +#endif /* BOARD_H */ diff --git a/os/hal/boards/ArduPilot_H743/board.mk b/os/hal/boards/ArduPilot_H743/board.mk new file mode 100644 index 0000000000..66efd177ed --- /dev/null +++ b/os/hal/boards/ArduPilot_H743/board.mk @@ -0,0 +1,9 @@ +# List of all the board related files. +BOARDSRC = $(CHIBIOS)/os/hal/boards/ArduPilot_H743/board.c + +# Required include directories +BOARDINC = $(CHIBIOS)/os/hal/boards/ArduPilot_H743 + +# Shared variables +ALLCSRC += $(BOARDSRC) +ALLINC += $(BOARDINC) From 7278a17906b1dc8f19d42972ee88f571801ea1a7 Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Tue, 7 Feb 2023 16:53:14 +1100 Subject: [PATCH 37/87] STM32/LLD/TIMv1: we don't always go for whole number prescalers --- os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c b/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c index a3f296eca9..21668696f9 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_pwm_lld.c @@ -870,8 +870,7 @@ void pwm_lld_start(PWMDriver *pwmp) { /* Timer configuration.*/ psc = (pwmp->clock / pwmp->config->frequency) - 1; - osalDbgAssert((psc <= 0xFFFF) && - ((psc + 1) * pwmp->config->frequency) == pwmp->clock, + osalDbgAssert((psc <= 0xFFFF), "invalid frequency"); pwmp->tim->PSC = psc; pwmp->tim->ARR = pwmp->period - 1; From f392c9b5623b722295874173e56a9d4e92ce5db3 Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Tue, 7 Feb 2023 16:54:00 +1100 Subject: [PATCH 38/87] STM32H7xx: add option to enable knowledge of M4 CPU core --- os/hal/ports/STM32/STM32H7xx/stm32_registry.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/os/hal/ports/STM32/STM32H7xx/stm32_registry.h b/os/hal/ports/STM32/STM32H7xx/stm32_registry.h index 64ee8ebd68..788b474e3b 100644 --- a/os/hal/ports/STM32/STM32H7xx/stm32_registry.h +++ b/os/hal/ports/STM32/STM32H7xx/stm32_registry.h @@ -41,11 +41,15 @@ defined(STM32H7A3xx) || defined(STM32H7B3xx) || \ defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) #define STM32_HAS_M7 TRUE +#ifndef STM32_HAS_M4 #define STM32_HAS_M4 FALSE +#endif #else #define STM32_HAS_M7 TRUE +#ifndef STM32_HAS_M4 #define STM32_HAS_M4 TRUE #endif +#endif /*===========================================================================*/ /* Common. */ From c9191d43c6da58eb04f8d88fe4eec605c3b787b3 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 14:18:34 +0000 Subject: [PATCH 39/87] hal_sdc: always set some kind of clock in SDC driver correct timeouts and clock on initialization --- os/hal/src/hal_sdc.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/os/hal/src/hal_sdc.c b/os/hal/src/hal_sdc.c index e2c6452f7c..b6966d4e8d 100644 --- a/os/hal/src/hal_sdc.c +++ b/os/hal/src/hal_sdc.c @@ -145,10 +145,14 @@ static bool mmc_init(SDCDriver *sdcp) { uint32_t ocr; unsigned i; uint32_t resp[1]; - +#if defined(STM32_VDD) && STM32_VDD <= 180 + ocr = 0xC0000080U; +#else ocr = 0xC0FF8000U; +#endif i = 0; while (true) { + osalThreadSleepMilliseconds(10); if (sdc_lld_send_cmd_short(sdcp, MMCSD_CMD_INIT, ocr, resp)) { return HAL_FAILED; } @@ -161,7 +165,6 @@ static bool mmc_init(SDCDriver *sdcp) { if (++i >= (unsigned)SDC_INIT_RETRY) { return HAL_FAILED; } - osalThreadSleepMilliseconds(10); } return HAL_SUCCESS; @@ -333,7 +336,8 @@ static bool sdc_detect_bus_clk(SDCDriver *sdcp, sdcbusclk_t *clk) { /* Read switch functions' register.*/ if (sdc_lld_read_special(sdcp, tmp, N, MMCSD_CMD_SWITCH, 0)) { - return HAL_FAILED; + *clk = SDC_CLK_25MHz; // always return something + return HAL_SUCCESS; } /* Check card capabilities parsing acquired data.*/ @@ -343,7 +347,8 @@ static bool sdc_detect_bus_clk(SDCDriver *sdcp, sdcbusclk_t *clk) { /* Write constructed command and read operation status in single call.*/ if (sdc_lld_read_special(sdcp, tmp, N, MMCSD_CMD_SWITCH, cmdarg)) { - return HAL_FAILED; + *clk = SDC_CLK_25MHz; // always return something + return HAL_SUCCESS; } /* Check card answer for success status bits.*/ @@ -688,19 +693,13 @@ bool sdcConnect(SDCDriver *sdcp) { goto failed; } - /* Switches to high speed.*/ - if (HAL_SUCCESS != detect_bus_clk(sdcp, &clk)) { - goto failed; - } - sdc_lld_set_data_clk(sdcp, clk); - /* Reads extended CSD if needed and possible.*/ if (SDC_MODE_CARDTYPE_MMC == (sdcp->cardmode & SDC_MODE_CARDTYPE_MASK)) { /* The card is a MMC, checking if it is a large device.*/ if (_mmcsd_get_slice(sdcp->csd, MMCSD_CSD_MMC_CSD_STRUCTURE_SLICE) > 1U) { uint8_t *ext_csd = sdcp->buf; - + osalThreadSleepMilliseconds(1); if (sdc_lld_read_special(sdcp, ext_csd, 512, MMCSD_CMD_SEND_EXT_CSD, 0)) { goto failed; } @@ -718,6 +717,12 @@ bool sdcConnect(SDCDriver *sdcp) { sdcp->capacity = _mmcsd_get_capacity(sdcp->csd); } + /* Switches to high speed.*/ + if (HAL_SUCCESS != detect_bus_clk(sdcp, &clk)) { + goto failed; + } + sdc_lld_set_data_clk(sdcp, clk); + /* Block length fixed at 512 bytes.*/ if (sdc_lld_send_cmd_short_crc(sdcp, MMCSD_CMD_SET_BLOCKLEN, MMCSD_BLOCK_SIZE, resp) || From 582fd0ddaca5b8524d595f1fb81a90a255c63c53 Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Fri, 17 Feb 2023 11:28:14 +1100 Subject: [PATCH 40/87] wait longer before checking mmc large capacity --- os/hal/src/hal_sdc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/hal/src/hal_sdc.c b/os/hal/src/hal_sdc.c index b6966d4e8d..f998b4393d 100644 --- a/os/hal/src/hal_sdc.c +++ b/os/hal/src/hal_sdc.c @@ -699,7 +699,7 @@ bool sdcConnect(SDCDriver *sdcp) { /* The card is a MMC, checking if it is a large device.*/ if (_mmcsd_get_slice(sdcp->csd, MMCSD_CSD_MMC_CSD_STRUCTURE_SLICE) > 1U) { uint8_t *ext_csd = sdcp->buf; - osalThreadSleepMilliseconds(1); + osalThreadSleepMilliseconds(10); if (sdc_lld_read_special(sdcp, ext_csd, 512, MMCSD_CMD_SEND_EXT_CSD, 0)) { goto failed; } From 12494d4e7add902782487736469e0424b57cc734 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Tue, 21 Feb 2023 10:11:49 +0000 Subject: [PATCH 41/87] hal_usb_msd: add support for USB MSD Co-authored-by: bugobliterator --- os/hal/include/hal.h | 6 +- os/hal/include/hal_usb_msd.h | 233 ++++++++++++ os/hal/src/hal_usb_msd.c | 478 ++++++++++++++++++++++++ os/various/ramdisk.c | 220 +++++++++++ os/various/ramdisk.h | 86 +++++ os/various/scsi_bindings/bswap.h | 196 ++++++++++ os/various/scsi_bindings/lib_scsi.c | 548 ++++++++++++++++++++++++++++ os/various/scsi_bindings/lib_scsi.h | 322 ++++++++++++++++ 8 files changed, 2088 insertions(+), 1 deletion(-) create mode 100644 os/hal/include/hal_usb_msd.h create mode 100644 os/hal/src/hal_usb_msd.c create mode 100644 os/various/ramdisk.c create mode 100644 os/various/ramdisk.h create mode 100644 os/various/scsi_bindings/bswap.h create mode 100644 os/various/scsi_bindings/lib_scsi.c create mode 100644 os/various/scsi_bindings/lib_scsi.h diff --git a/os/hal/include/hal.h b/os/hal/include/hal.h index 4410fd14a1..80983c3f66 100644 --- a/os/hal/include/hal.h +++ b/os/hal/include/hal.h @@ -229,6 +229,10 @@ #define HAL_USE_WSPI FALSE #endif +#if !defined(HAL_USE_USB_MSD) +#define HAL_USE_USB_MSD FALSE +#endif + /*===========================================================================*/ /* Driver data structures and types. */ /*===========================================================================*/ @@ -330,7 +334,7 @@ static inline halfreq_t halClockGetPointX(halclkpt_t clkpt) { #include "hal_usb.h" #include "hal_wdg.h" #include "hal_wspi.h" - +#include "hal_usb_msd.h" /* * The ST driver is a special case, it is only included if the OSAL is * configured to require it. diff --git a/os/hal/include/hal_usb_msd.h b/os/hal/include/hal_usb_msd.h new file mode 100644 index 0000000000..72c70897c8 --- /dev/null +++ b/os/hal/include/hal_usb_msd.h @@ -0,0 +1,233 @@ +/* + ChibiOS/HAL - Copyright (C) 2016 Uladzimir Pylinsky aka barthess + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file hal_usb_msd.h + * @brief USM mass storage device driver macros and structures. + * + * @addtogroup usb_msd + * @{ + */ + +#ifndef HAL_USB_MSD_H +#define HAL_USB_MSD_H + +#if (HAL_USE_USB_MSD == TRUE) || defined(__DOXYGEN__) + +#include "lib_scsi.h" + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +#define USB_MSD_DATA_EP 0x01 + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Set the size of the USB MSD thread's stack working area + */ +#if !defined(USB_MSD_THREAD_WA_SIZE) || defined(__DOXYGEN__) +#define USB_MSD_THREAD_WA_SIZE 256 +#endif + +/** + * @brief Set the priority of the USB MSD thread. Defaults to NORMALPRIO. + */ +#if !defined(MSD_THD_PRIO) || defined(__DOXYGEN__) +#define MSD_THD_PRIO NORMALPRIO +#endif + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +#if !HAL_USE_USB +#error "Mass storage Driver requires HAL_USE_USB" +#endif + +#if !USB_USE_WAIT +#error "Mass storage Driver requires USB_USE_WAIT" +#endif + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Type of a structure representing an USB mass storage driver. + */ +typedef struct USBMassStorageDriver USBMassStorageDriver; + +/** + * @brief Type of a driver state machine possible states. + */ +typedef enum { + USB_MSD_UNINIT = 0, + USB_MSD_STOP, + USB_MSD_READY, +} usbmsdstate_t; + +/** + * @brief Represents command block wrapper structure. + * @details See USB Mass Storage Class Specification. + */ +typedef struct CC_PACK { + uint32_t signature; + uint32_t tag; + uint32_t data_len; + uint8_t flags; + uint8_t lun; + uint8_t cmd_len; + uint8_t cmd_data[16]; +} msd_cbw_t; + +/** + * @brief Represents command status wrapper structure. + * @details See USB Mass Storage Class Specification. + */ +typedef struct CC_PACK { + uint32_t signature; + uint32_t tag; + uint32_t data_residue; + uint8_t status; +} msd_csw_t; + +/** + * @brief Transport handler passed to SCSI layer. + */ +typedef struct { + /** + * @brief Pointer to the @p USBDriver object. + */ + USBDriver *usbp; + /** + * @brief USB endpoint number. + */ + usbep_t ep; + + + /** + * @brief Tx Thread working area. + */ + THD_WORKING_AREA( waMSDTxWorker, USB_MSD_THREAD_WA_SIZE); + + /** + * @brief Tx Thread handler. + */ + thread_reference_t txworker; + + /** + * @brief USB Transmit Buffer + */ + uint8_t *txbuf; + + /** + * @brief USB Transmit Length + */ + size_t txlen; + + /** + * @brief USB Transmit mutex + */ + mutex_t txmtx; + +} usb_scsi_transport_handler_t; + + +/** + * @brief Structure representing an USB mass storage driver. + */ +struct USBMassStorageDriver { + /** + * @brief Pointer to the @p USBDriver object. + */ + USBDriver *usbp; + /** + * @brief Driver state. + */ + usbmsdstate_t state; + /** + * @brief CBW structure. + */ + msd_cbw_t cbw; + /** + * @brief CSW structure. + */ + msd_csw_t csw; + /** + * @brief Thread working area. + */ + THD_WORKING_AREA( waMSDWorker, USB_MSD_THREAD_WA_SIZE); + + /** + * @brief Worker thread handler. + */ + thread_reference_t worker; + + /** + * @brief SCSI target driver structure. + */ + SCSITarget scsi_target; + /** + * @brief SCSI target configuration structure. + */ + SCSITargetConfig scsi_config; + /** + * @brief SCSI transport structure. + */ + SCSITransport scsi_transport; + /** + * @brief SCSI over USB transport handler structure. + */ + usb_scsi_transport_handler_t usb_scsi_transport_handler; +}; + + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +extern USBMassStorageDriver USBMSD1; + +#ifdef __cplusplus +extern "C" { +#endif + void msdObjectInit(USBMassStorageDriver *msdp); + void msdStart(USBMassStorageDriver *msdp, USBDriver *usbp, + BaseBlockDevice *blkdev, uint8_t *blkbuf, + uint8_t *txbuf, + const scsi_inquiry_response_t *scsi_inquiry_response, + const scsi_unit_serial_number_inquiry_response_t *serialInquiry, + scsi_block_filesystem_access_t blockFilesystemAccess, + scsi_free_filesystem_access_t freeFilesystemAccess); + void msdStop(USBMassStorageDriver *msdp); + bool msd_request_hook(USBDriver *usbp); +#ifdef __cplusplus +} +#endif + +#endif /* HAL_USE_USB_MSD */ + +#endif /* HAL_USB_MSD_H */ + +/** @} */ diff --git a/os/hal/src/hal_usb_msd.c b/os/hal/src/hal_usb_msd.c new file mode 100644 index 0000000000..c1c9499af7 --- /dev/null +++ b/os/hal/src/hal_usb_msd.c @@ -0,0 +1,478 @@ +/* + ChibiOS/HAL - Copyright (C) 2016 Uladzimir Pylinsky aka barthess + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file hal_usb_msd.c + * @brief USM mass storage device code. + * + * @addtogroup usb_msd + * @{ + */ + +#include "hal.h" + +#if (HAL_USE_USB_MSD == TRUE) || defined(__DOXYGEN__) + +#include + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +#define MSD_REQ_RESET 0xFF +#define MSD_REQ_GET_MAX_LUN 0xFE + +#define MSD_CBW_SIGNATURE 0x43425355 +#define MSD_CSW_SIGNATURE 0x53425355 + +#define CBW_FLAGS_RESERVED_MASK 0b01111111 +#define CBW_LUN_RESERVED_MASK 0b11110000 +#define CBW_CMD_LEN_RESERVED_MASK 0b11000000 + +#define CSW_STATUS_PASSED 0x00 +#define CSW_STATUS_FAILED 0x01 +#define CSW_STATUS_PHASE_ERROR 0x02 + +#define MSD_SETUP_WORD(setup, index) (uint16_t)(((uint16_t)setup[index+1] << 8)\ + | (setup[index] & 0x00FF)) + +#define MSD_SETUP_VALUE(setup) MSD_SETUP_WORD(setup, 2) +#define MSD_SETUP_INDEX(setup) MSD_SETUP_WORD(setup, 4) +#define MSD_SETUP_LENGTH(setup) MSD_SETUP_WORD(setup, 6) + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ +/** + * @brief USB mass storage driver identifier. + */ +USBMassStorageDriver USBMSD1; + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/** + * @brief Hardcoded default SCSI inquiry response structure. + */ +static const scsi_inquiry_response_t default_scsi_inquiry_response = { + 0x00, /* direct access block device */ + 0x80, /* removable */ + 0x04, /* SPC-2 */ + 0x02, /* response data format */ + 0x20, /* response has 0x20 + 4 bytes */ + 0x00, + 0x00, + 0x00, + "Chibios", + "Mass Storage", + {'v',CH_KERNEL_MAJOR+'0','.',CH_KERNEL_MINOR+'0'} +}; + +/** + * @brief Hardcoded default SCSI unit serial number inquiry response structure. + */ +static const scsi_unit_serial_number_inquiry_response_t default_scsi_unit_serial_number_inquiry_response = +{ + 0x00, + 0x80, + 0x00, + 0x08, + "00000000" +}; + + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/** + * @brief Checks validity of CBW content. + * @details The device shall consider the CBW valid when: + * • The CBW was received after the device had sent a CSW or after a reset, + * • the CBW is 31 (1Fh) bytes in length, + * • and the dCBWSignature is equal to 43425355h. + * + * @param[in] cbw pointer to the @p msd_cbw_t object + * @param[in] recvd number of received bytes + * + * @return Operation status. + * @retval true CBW is meaningful. + * @retval false CBW is bad. + * + * @notapi + */ +static bool cbw_valid(const msd_cbw_t *cbw, msg_t recvd) { + if ((sizeof(msd_cbw_t) != recvd) || (cbw->signature != MSD_CBW_SIGNATURE)) { + return false; + } + else { + return true; + } +} + +/** + * @brief Checks meaningfulness of CBW content. + * @details The device shall consider the contents of a valid CBW meaningful when: + * • no reserved bits are set, + * • the bCBWLUN contains a valid LUN supported by the device, + * • and both bCBWCBLength and the content of the CBWCB are in + * accordance with bInterfaceSubClass. + * + * @param[in] cbw pointer to the @p msd_cbw_t object + * + * @return Operation status. + * @retval true CBW is meaningful. + * @retval false CBW is bad. + * + * @notapi + */ +static bool cbw_meaningful(const msd_cbw_t *cbw) { + if (((cbw->cmd_len & CBW_CMD_LEN_RESERVED_MASK) != 0) + || ((cbw->flags & CBW_FLAGS_RESERVED_MASK) != 0) + || (cbw->lun != 0)) { + return false; + } + else { + return true; + } +} + +/** + * @brief SCSI transport transmit function. + * + * @param[in] transport pointer to the @p SCSITransport object + * @param[in] data payload + * @param[in] len number of bytes to be transmitted + * + * @return Number of successfully transmitted bytes. + * @notapi + */ +static uint32_t scsi_transport_transmit(const SCSITransport *transport, + const uint8_t *data, size_t len) { + + usb_scsi_transport_handler_t *trp = transport->handler; + osalMutexLock(&trp->txmtx); + msg_t status = usbTransmit(trp->usbp, trp->ep, data, len); + osalMutexUnlock(&trp->txmtx); + if (MSG_OK == status) + return len; + else + return 0; +} + +/** + * @brief SCSI transport transmit async function. + * + * @param[in] transport pointer to the @p SCSITransport object + * @param[in] data payload + * @param[in] len number of bytes to be transmitted + * + * @return Number of bytes put into buffer. + * @notapi + */ +static uint32_t scsi_transport_transmit_async(const SCSITransport *transport, + const uint8_t *data, size_t len) { + + usb_scsi_transport_handler_t *trp = transport->handler; + // wait for previous tx to finish, if unfinished + osalMutexLock(&trp->txmtx); + memcpy(trp->txbuf, data, len); + trp->txlen = len; + osalMutexUnlock(&trp->txmtx); + osalSysLock(); + osalThreadResumeS(&trp->txworker, MSG_OK); + osalSysUnlock(); + // if (trp->txlen > 0) { + // usbTransmit(trp->usbp, trp->ep, trp->txbuf, + // trp->txlen); + // } + + return len; +} + +/** + * @brief SCSI transport receive function. + * + * @param[in] transport pointer to the @p SCSITransport object + * @param[in] data payload + * @param[in] len number bytes to be received + * + * @return Number of successfully received bytes. + * @notapi + */ +static uint32_t scsi_transport_receive(const SCSITransport *transport, + uint8_t *data, size_t len) { + + usb_scsi_transport_handler_t *trp = transport->handler; + osalMutexLock(&trp->txmtx); + msg_t status = usbReceive(trp->usbp, trp->ep, data, len); + osalMutexUnlock(&trp->txmtx); + if (MSG_RESET != status) + return status; + else + return 0; +} + +/** + * @brief Fills and sends CSW message. + * + * @param[in] msdp pointer to the @p USBMassStorageDriver object + * @param[in] status status returned by SCSI layer + * @param[in] residue number of residue bytes in case of failed transaction + * + * @notapi + */ +static void send_csw(USBMassStorageDriver *msdp, uint8_t status, + uint32_t residue) { + + msdp->csw.signature = MSD_CSW_SIGNATURE; + msdp->csw.data_residue = residue; + msdp->csw.tag = msdp->cbw.tag; + msdp->csw.status = status; + + osalMutexLock(&msdp->usb_scsi_transport_handler.txmtx); + usbTransmit(msdp->usbp, USB_MSD_DATA_EP, (uint8_t *)&msdp->csw, + sizeof(msd_csw_t)); + osalMutexUnlock(&msdp->usb_scsi_transport_handler.txmtx); +} + +/** + * @brief Mass storage worker thread. + * + * @param[in] arg pointer to the @p USBMassStorageDriver object + * + * @notapi + */ +static THD_FUNCTION(usb_msd_worker, arg) { + USBMassStorageDriver *msdp = arg; + chRegSetThreadName("usb_msd_worker"); + + while(! chThdShouldTerminateX()) { + osalMutexLock(&msdp->usb_scsi_transport_handler.txmtx); + const msg_t status = usbReceive(msdp->usbp, USB_MSD_DATA_EP, + (uint8_t *)&msdp->cbw, sizeof(msd_cbw_t)); + osalMutexUnlock(&msdp->usb_scsi_transport_handler.txmtx); + if (MSG_RESET == status) { + osalThreadSleepMilliseconds(50); + } + else if (cbw_valid(&msdp->cbw, status) && cbw_meaningful(&msdp->cbw)) { + if (msdp->scsi_transport.block_filesystem_access) { + msdp->scsi_transport.block_filesystem_access(); + } + if (SCSI_SUCCESS == scsiExecCmd(&msdp->scsi_target, msdp->cbw.cmd_data)) { + send_csw(msdp, CSW_STATUS_PASSED, 0); + } + else { + send_csw(msdp, CSW_STATUS_FAILED, scsiResidue(&msdp->scsi_target)); + } + if (msdp->scsi_transport.free_filesystem_access) { + msdp->scsi_transport.free_filesystem_access(); + } + } + else { + ; /* do NOT send CSW here. Incorrect CBW must be silently ignored */ + } + } + + chThdExit(MSG_OK); +} + +/** + * @brief USB Transmit worker thread. + * + * @param[in] arg pointer to the @p USBMassStorageDriver object + * + * @notapi + */ +static THD_FUNCTION(usb_msd_tx_worker, arg) { + USBMassStorageDriver *msdp = arg; + chRegSetThreadName("usb_msd_tx_worker"); + + while(! chThdShouldTerminateX()) { + osalSysLock(); + osalThreadSuspendS(&msdp->usb_scsi_transport_handler.txworker); + osalSysUnlock(); + osalMutexLock(&msdp->usb_scsi_transport_handler.txmtx); + if (msdp->usb_scsi_transport_handler.txlen > 0) { + usbTransmit(msdp->usbp, USB_MSD_DATA_EP, msdp->usb_scsi_transport_handler.txbuf, + msdp->usb_scsi_transport_handler.txlen); + msdp->usb_scsi_transport_handler.txlen = 0; + } + osalMutexUnlock(&msdp->usb_scsi_transport_handler.txmtx); + } + + chThdExit(MSG_OK); +} + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Mass storage specific request hook for USB. + * + * @param[in] usbp pointer to the @p USBDriver object + * + * @notapi + */ +bool msd_request_hook(USBDriver *usbp) { + /* check that the request is for interface 0.*/ + if (MSD_SETUP_INDEX(usbp->setup) != 0) + return false; + + if (usbp->setup[0] == (USB_RTYPE_TYPE_CLASS | USB_RTYPE_RECIPIENT_INTERFACE | USB_RTYPE_DIR_HOST2DEV) + && usbp->setup[1] == MSD_REQ_RESET) { + /* Bulk-Only Mass Storage Reset (class-specific request) + This request is used to reset the mass storage device and its associated interface. + This class-specific request shall ready the device for the next CBW from the host. */ + /* Do any special reset code here. */ + /* The device shall NAK the status stage of the device request until + * the Bulk-Only Mass Storage Reset is complete. + * NAK EP1 in and out */ + // usbp->otg->ie[1].DIEPCTL = DIEPCTL_SNAK; + // usbp->otg->oe[1].DOEPCTL = DOEPCTL_SNAK; + /* response to this request using EP0 */ + usbSetupTransfer(usbp, 0, 0, NULL); + return true; + } else if (usbp->setup[0] == (USB_RTYPE_TYPE_CLASS | USB_RTYPE_RECIPIENT_INTERFACE | USB_RTYPE_DIR_DEV2HOST) + && usbp->setup[1] == MSD_REQ_GET_MAX_LUN) { + /* Return the maximum supported LUN. */ + static uint8_t zero = 0; + usbSetupTransfer(usbp, &zero, 1, NULL); + return true; + /* OR */ + /* Return false to stall to indicate that we don't support LUN */ + // return false; + } + + return false; +} + +/** + * @brief Initializes the standard part of a @p USBMassStorageDriver structure. + * + * @param[out] msdp pointer to the @p USBMassStorageDriver object + * + * @init + */ +void msdObjectInit(USBMassStorageDriver *msdp) { + + memset(msdp, 0x55, sizeof(USBMassStorageDriver)); + msdp->state = USB_MSD_STOP; + msdp->usbp = NULL; + msdp->worker = NULL; + msdp->usb_scsi_transport_handler.txworker = NULL; + + scsiObjectInit(&msdp->scsi_target); +} + +/** + * @brief Stops the USB mass storage driver. + * + * @param[in] msdp pointer to the @p USBMassStorageDriver object + * + * @api + */ +void msdStop(USBMassStorageDriver *msdp) { + + osalDbgCheck(msdp != NULL); + osalDbgAssert((msdp->state == USB_MSD_READY), "invalid state"); + + chThdTerminate(msdp->worker); + chThdWait(msdp->worker); + + chThdTerminate(msdp->usb_scsi_transport_handler.txworker); + osalSysLock(); + thread_t* tp = msdp->usb_scsi_transport_handler.txworker; + // resume thread so it can terminate + osalThreadResumeS(&tp, MSG_OK); + osalSysUnlock(); + chThdWait(msdp->usb_scsi_transport_handler.txworker); + + scsiStop(&msdp->scsi_target); + + msdp->worker = NULL; + msdp->usb_scsi_transport_handler.txworker = NULL; + msdp->state = USB_MSD_STOP; + msdp->usbp = NULL; +} + +/** + * @brief Configures and activates the USB mass storage driver. + * + * @param[in] msdp pointer to the @p USBMassStorageDriver object + * @param[in] usbp pointer to the @p USBDriver object + * @param[in] blkdev pointer to the @p BaseBlockDevice object + * @param[in] blkbuf pointer to the working area buffer, must be allocated + * by user, must be big enough to store 1 data block + * @param[in] inquiry pointer to the SCSI inquiry response structure, + * set it to @p NULL to use default hardcoded value. + * + * @api + */ +void msdStart(USBMassStorageDriver *msdp, USBDriver *usbp, + BaseBlockDevice *blkdev, uint8_t *blkbuf, + uint8_t *txbuf, + const scsi_inquiry_response_t *inquiry, + const scsi_unit_serial_number_inquiry_response_t *serialInquiry, + scsi_block_filesystem_access_t blockFilesystemAccess, + scsi_free_filesystem_access_t freeFilesystemAccess) { + + osalDbgCheck((msdp != NULL) && (usbp != NULL) + && (blkdev != NULL) && (blkbuf != NULL)); + osalDbgAssert((msdp->state == USB_MSD_STOP), "invalid state"); + + msdp->usbp = usbp; + + msdp->usb_scsi_transport_handler.usbp = msdp->usbp; + msdp->usb_scsi_transport_handler.ep = USB_MSD_DATA_EP; + msdp->usb_scsi_transport_handler.txbuf = txbuf; + osalMutexObjectInit(&msdp->usb_scsi_transport_handler.txmtx); + msdp->usb_scsi_transport_handler.txworker = chThdCreateStatic(msdp->usb_scsi_transport_handler.waMSDTxWorker, sizeof(msdp->usb_scsi_transport_handler.waMSDTxWorker), + MSD_THD_PRIO, usb_msd_tx_worker, msdp); + + msdp->scsi_transport.handler = &msdp->usb_scsi_transport_handler; + msdp->scsi_transport.transmit = scsi_transport_transmit; + msdp->scsi_transport.transmit_async = scsi_transport_transmit_async; + msdp->scsi_transport.receive = scsi_transport_receive; + + msdp->scsi_transport.block_filesystem_access = blockFilesystemAccess; + msdp->scsi_transport.free_filesystem_access = freeFilesystemAccess; + + if (NULL == inquiry) { + msdp->scsi_config.inquiry_response = &default_scsi_inquiry_response; + } + else { + msdp->scsi_config.inquiry_response = inquiry; + } + if (NULL == serialInquiry) { + msdp->scsi_config.unit_serial_number_inquiry_response = &default_scsi_unit_serial_number_inquiry_response; + } + else { + msdp->scsi_config.unit_serial_number_inquiry_response = serialInquiry; + } + msdp->scsi_config.blkbuf = blkbuf; + msdp->scsi_config.blkdev = blkdev; + msdp->scsi_config.transport = &msdp->scsi_transport; + + scsiStart(&msdp->scsi_target, &msdp->scsi_config); + + msdp->state = USB_MSD_READY; + msdp->worker = chThdCreateStatic(msdp->waMSDWorker, sizeof(msdp->waMSDWorker), + MSD_THD_PRIO-1, usb_msd_worker, msdp); +} + +#endif /* HAL_USE_USB_MSD */ + +/** @} */ diff --git a/os/various/ramdisk.c b/os/various/ramdisk.c new file mode 100644 index 0000000000..4e02c8ce76 --- /dev/null +++ b/os/various/ramdisk.c @@ -0,0 +1,220 @@ +/* + ChibiOS/HAL - Copyright (C) 2016 Uladzimir Pylinsky aka barthess + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file ramdisk.c + * @brief Virtual block devise driver source. + * + * @addtogroup ramdisk + * @{ + */ + +#include "hal.h" + +#include "ramdisk.h" + +#include + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/* + * Interface implementation. + */ +static bool overflow(const RamDisk *rd, uint32_t startblk, uint32_t n) { + return (startblk + n) > rd->blk_num; +} + +static bool is_inserted(void *instance) { + (void)instance; + return true; +} + +static bool is_protected(void *instance) { + RamDisk *rd = instance; + if (BLK_READY == rd->state) { + return rd->readonly; + } + else { + return true; + } +} + +static bool connect(void *instance) { + RamDisk *rd = instance; + if (BLK_STOP == rd->state) { + rd->state = BLK_READY; + } + return HAL_SUCCESS; +} + +static bool disconnect(void *instance) { + RamDisk *rd = instance; + if (BLK_STOP != rd->state) { + rd->state = BLK_STOP; + } + return HAL_SUCCESS; +} + +static bool read(void *instance, uint32_t startblk, + uint8_t *buffer, uint32_t n) { + + RamDisk *rd = instance; + + if (overflow(rd, startblk, n)) { + return HAL_FAILED; + } + else { + const uint32_t bs = rd->blk_size; + memcpy(buffer, &rd->storage[startblk * bs], n * bs); + return HAL_SUCCESS; + } +} + +static bool write(void *instance, uint32_t startblk, + const uint8_t *buffer, uint32_t n) { + + RamDisk *rd = instance; + if (overflow(rd, startblk, n)) { + return HAL_FAILED; + } + else { + const uint32_t bs = rd->blk_size; + memcpy(&rd->storage[startblk * bs], buffer, n * bs); + return HAL_SUCCESS; + } +} + +static bool sync(void *instance) { + + RamDisk *rd = instance; + if (BLK_READY != rd->state) { + return HAL_FAILED; + } + else { + return HAL_SUCCESS; + } +} + +static bool get_info(void *instance, BlockDeviceInfo *bdip) { + + RamDisk *rd = instance; + if (BLK_READY != rd->state) { + return HAL_FAILED; + } + else { + bdip->blk_num = rd->blk_num; + bdip->blk_size = rd->blk_size; + return HAL_SUCCESS; + } +} + +/** + * + */ +static const struct BaseBlockDeviceVMT vmt = { + (size_t)0, + is_inserted, + is_protected, + connect, + disconnect, + read, + write, + sync, + get_info +}; + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief RAM disk object initialization. + * + * @param[in] rdp pointer to @p RamDisk object + * + * @init + */ +void ramdiskObjectInit(RamDisk *rdp) { + + rdp->vmt = &vmt; + rdp->state = BLK_STOP; +} + +/** + * @brief Starts RAM disk. + * + * @param[in] rdp pointer to @p RamDisk object + * @param[in] storage pointer to array representing disk storage + * @param[in] blksize size of blocks in bytes + * @param[in] blknum total number of blocks in device + * @param[in] readonly read only flag + * + * @api + */ +void ramdiskStart(RamDisk *rdp, uint8_t *storage, uint32_t blksize, + uint32_t blknum, bool readonly) { + + osalDbgCheck(rdp != NULL); + + osalSysLock(); + osalDbgAssert((rdp->state == BLK_STOP) || (rdp->state == BLK_READY), + "invalid state"); + rdp->blk_num = blknum; + rdp->blk_size = blksize; + rdp->readonly = readonly; + rdp->storage = storage; + rdp->state = BLK_READY; + osalSysUnlock(); +} + +/** + * @brief Stops RAM disk. + * + * @param[in] rdp pointer to @p RamDisk object + * + * @api + */ +void ramdiskStop(RamDisk *rdp) { + + osalDbgCheck(rdp != NULL); + + osalSysLock(); + osalDbgAssert((rdp->state == BLK_STOP) || (rdp->state == BLK_READY), + "invalid state"); + rdp->storage = NULL; + rdp->state = BLK_STOP; + osalSysUnlock(); +} + +/** @} */ \ No newline at end of file diff --git a/os/various/ramdisk.h b/os/various/ramdisk.h new file mode 100644 index 0000000000..cb211c2637 --- /dev/null +++ b/os/various/ramdisk.h @@ -0,0 +1,86 @@ +/* + ChibiOS/HAL - Copyright (C) 2016 Uladzimir Pylinsky aka barthess + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file ramdisk.h + * @brief Virtual block devise driver header. + * + * @addtogroup ramdisk + * @{ + */ + +#ifndef RAMDISK_H_ +#define RAMDISK_H_ + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +typedef struct RamDisk RamDisk; + +/** + * + */ +#define _ramdisk_device_data \ + _base_block_device_data \ + uint8_t *storage; \ + uint32_t blk_size; \ + uint32_t blk_num; \ + bool readonly; + +/** + * + */ +struct RamDisk { + /** @brief Virtual Methods Table.*/ + const struct BaseBlockDeviceVMT *vmt; + _ramdisk_device_data +}; + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void ramdiskObjectInit(RamDisk *rdp); + void ramdiskStart(RamDisk *rdp, uint8_t *storage, uint32_t blksize, + uint32_t blknum, bool readonly); + void ramdiskStop(RamDisk *rdp); +#ifdef __cplusplus +} +#endif + +#endif /* RAMDISK_H_ */ + +/** @} */ \ No newline at end of file diff --git a/os/various/scsi_bindings/bswap.h b/os/various/scsi_bindings/bswap.h new file mode 100644 index 0000000000..1593047274 --- /dev/null +++ b/os/various/scsi_bindings/bswap.h @@ -0,0 +1,196 @@ +/* + Copyright (C) 2016 Stephane D'Alu + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef BSWAP_H +#define BSWAP_H + +#if defined(__cplusplus) +extern "C" { +#endif + +#if !(defined(ARCH_BIG_ENDIAN) || defined(ARCH_LITTLE_ENDIAN)) +#error "Need to define one: ARCH_BIG_ENDIAN or ARCH_LITTLE_ENDIAN" +#endif + +#if defined(ARCH_BIG_ENDIAN) && defined(ARCH_LITTLE_ENDIAN) +#error "ARCH_BIG_ENDIAN and ARCH_LITTLE_ENDIAN are both set" +#endif + + +#define BSWAP_16(x) \ + (uint16_t)((((x) & 0xFF00) >> 8) | \ + (((x) & 0x00FF) << 8)) +#define BSWAP_32(x) \ + (uint32_t)((((x) & 0xFF000000UL) >> 24UL) | \ + (((x) & 0x00FF0000UL) >> 8UL) | \ + (((x) & 0x0000FF00UL) << 8UL) | \ + (((x) & 0x000000FFUL) << 24UL)) +#define BSWAP_64(x) \ + (uint64_t)((((x) & 0xFF00000000000000UL) >> 56UL) | \ + (((x) & 0x00FF000000000000UL) >> 40UL) | \ + (((x) & 0x0000FF0000000000UL) >> 24UL) | \ + (((x) & 0x000000FF00000000UL) >> 8UL) | \ + (((x) & 0x00000000FF000000UL) << 8UL) | \ + (((x) & 0x0000000000FF0000UL) << 24UL) | \ + (((x) & 0x000000000000FF00UL) << 40UL) | \ + (((x) & 0x00000000000000FFUL) << 56UL)) + + +#if defined(ARCH_BIG_ENDIAN) +#define le16_to_cpu(x) bswap_16(x) +#define le32_to_cpu(x) bswap_32(x) +#define le64_to_cpu(x) bswap_64(x) +#define be16_to_cpu(x) (x) +#define be32_to_cpu(x) (x) +#define be64_to_cpu(x) (x) +#define cpu_to_le16(x) bswap_16(x) +#define cpu_to_le32(x) bswap_32(x) +#define cpu_to_le64(x) bswap_64(x) +#define cpu_to_be16(x) (x) +#define cpu_to_be32(x) (x) +#define cpu_to_be64(x) (x) +#define LE16_TO_CPU(x) BSWAP_16(x) +#define LE32_TO_CPU(x) BSWAP_32(x) +#define LE64_TO_CPU(x) BSWAP_64(x) +#define BE16_TO_CPU(x) (x) +#define BE32_TO_CPU(x) (x) +#define BE64_TO_CPU(x) (x) +#define CPU_TO_LE16(x) BSWAP_16(x) +#define CPU_TO_LE32(x) BSWAP_32(x) +#define CPU_TO_LE64(x) BSWAP_64(x) +#define CPU_TO_BE16(x) (x) +#define CPU_TO_BE32(x) (x) +#define CPU_TO_BE64(x) (x) +#endif + + +#if defined(ARCH_LITTLE_ENDIAN) +#define le16_to_cpu(x) (x) +#define le32_to_cpu(x) (x) +#define le64_to_cpu(x) (x) +#define be16_to_cpu(x) bswap_16(x) +#define be32_to_cpu(x) bswap_32(x) +#define be64_to_cpu(x) bswap_64(x) +#define cpu_to_le16(x) (x) +#define cpu_to_le32(x) (x) +#define cpu_to_le64(x) (x) +#define cpu_to_be16(x) bswap_16(x) +#define cpu_to_be32(x) bswap_32(x) +#define cpu_to_be64(x) bswap_64(x) +#define LE16_TO_CPU(x) (x) +#define LE32_TO_CPU(x) (x) +#define LE64_TO_CPU(x) (x) +#define BE16_TO_CPU(x) BSWAP_16(x) +#define BE32_TO_CPU(x) BSWAP_32(x) +#define BE64_TO_CPU(x) BSWAP_64(x) +#define CPU_TO_LE16(x) (x) +#define CPU_TO_LE32(x) (x) +#define CPU_TO_LE64(x) (x) +#define CPU_TO_BE16(x) BSWAP_16(x) +#define CPU_TO_BE32(x) BSWAP_32(x) +#define CPU_TO_BE64(x) BSWAP_64(x) +#endif + + +static inline uint16_t bswap_16(const uint16_t x) + __attribute__ ((warn_unused_result)) + __attribute__ ((const)) + __attribute__ ((always_inline)); + +static inline uint16_t bswap_16(const uint16_t x) { + if (__builtin_constant_p(x)) + return BSWAP_16(x); + + uint8_t tmp; + union { uint16_t x; uint8_t b[2]; } data; + + data.x = x; + tmp = data.b[0]; + data.b[0] = data.b[1]; + data.b[1] = tmp; + + return data.x; +} + +static inline uint32_t bswap_32(const uint32_t x) + __attribute__ ((warn_unused_result)) + __attribute__ ((const)) + __attribute__ ((always_inline)); + + +static inline uint32_t bswap_32(const uint32_t x) { + if (__builtin_constant_p(x)) + return BSWAP_32(x); + + uint8_t tmp; + union { uint32_t x; uint8_t b[4]; } data; + + data.x = x; + tmp = data.b[0]; + data.b[0] = data.b[3]; + data.b[3] = tmp; + tmp = data.b[1]; + data.b[1] = data.b[2]; + data.b[2] = tmp; + + return data.x; +} + +static inline uint64_t bswap_64(const uint64_t x) + __attribute__ ((warn_unused_result)) + __attribute__ ((const)) + __attribute__ ((always_inline)); + + +static inline uint64_t bswap_64(const uint64_t x) { + if (__builtin_constant_p(x)) + return BSWAP_64(x); + + uint8_t tmp; + union { uint64_t x; uint8_t b[8]; } data; + + data.x = x; + tmp = data.b[0]; + data.b[0] = data.b[7]; + data.b[7] = tmp; + tmp = data.b[1]; + data.b[1] = data.b[6]; + data.b[6] = tmp; + tmp = data.b[2]; + data.b[2] = data.b[5]; + data.b[5] = tmp; + tmp = data.b[3]; + data.b[3] = data.b[4]; + data.b[4] = tmp; + + return data.x; +} + +static inline void bswap_n(void* const data, uint8_t len) + __attribute__ ((nonnull (1))); + +static inline void bswap_n(void* const data, uint8_t len) { + uint8_t* ptr = (uint8_t*)data; + + for ( ; len > 1 ; ptr++, len -= 2 ) { + uint8_t tmp = *ptr; + *ptr = *(ptr + len - 1); + *(ptr + len - 1) = tmp; + } +} + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/os/various/scsi_bindings/lib_scsi.c b/os/various/scsi_bindings/lib_scsi.c new file mode 100644 index 0000000000..ec9a62ac45 --- /dev/null +++ b/os/various/scsi_bindings/lib_scsi.c @@ -0,0 +1,548 @@ +/* + ChibiOS/HAL - Copyright (C) 2016 Uladzimir Pylinsky aka barthess + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file lib_scsi.c + * @brief SCSI target driver source code. + * + * @addtogroup SCSI + * @{ + */ + +#include + +#include "hal.h" + +#include "lib_scsi.h" + +#define DEBUG_TRACE_PRINT FALSE +#define DEBUG_TRACE_WARNING FALSE +#define DEBUG_TRACE_ERROR FALSE +// #include "dbgtrace.h" + +#define ARCH_LITTLE_ENDIAN +#include "bswap.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +typedef struct { + uint32_t first_lba; + uint16_t blk_cnt; +} data_request_t; + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/** + * @brief Combines data request from byte array. + * + * @notapi + */ +static data_request_t decode_data_request(const uint8_t *cmd) { + + data_request_t req; + uint32_t lba; + uint16_t blk; + + memcpy(&lba, &cmd[2], sizeof(lba)); + memcpy(&blk, &cmd[7], sizeof(blk)); + + req.first_lba = be32_to_cpu(lba); + req.blk_cnt = be16_to_cpu(blk); + + return req; +} + +/** + * @brief Fills sense structure. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] key SCSI sense key + * @param[in] code SCSI sense code + * @param[in] qual SCSI sense qualifier + * + * @notapi + */ +static void set_sense(SCSITarget *scsip, uint8_t key, + uint8_t code, uint8_t qual) { + + scsi_sense_response_t *sense = &scsip->sense; + memset(sense, 0 , sizeof(scsi_sense_response_t)); + + sense->byte[0] = 0x70; + sense->byte[2] = key; + sense->byte[7] = 8; + sense->byte[12] = code; + sense->byte[13] = qual; +} + +/** + * @brief Sets all values in sense data to 'success' condition. + * + * @param[in] scsip pointer to @p SCSITarget structure + * + * @notapi + */ +static void set_sense_ok(SCSITarget *scsip) { + set_sense(scsip, SCSI_SENSE_KEY_GOOD, + SCSI_ASENSE_NO_ADDITIONAL_INFORMATION, + SCSI_ASENSEQ_NO_QUALIFIER); +} + +/** + * @brief Transmits data via transport channel. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] data pointer to data buffer + * @param[in] len number of bytes to be transmitted + * + * @return The operation status. + * + * @notapi + */ +static bool transmit_data(SCSITarget *scsip, const uint8_t *data, uint32_t len) { + + const SCSITransport *trp = scsip->config->transport; + const uint32_t residue = len - trp->transmit(trp, data, len); + + if (residue > 0) { + scsip->residue = residue; + return SCSI_FAILED; + } + else { + return SCSI_SUCCESS; + } +} + +/** + * @brief Stub for unhandled SCSI commands. + * @details Sets error flags in sense data structure and returns error error. + */ +static bool cmd_unhandled(SCSITarget *scsip, const uint8_t *cmd) { + (void)cmd; + + set_sense(scsip, SCSI_SENSE_KEY_ILLEGAL_REQUEST, + SCSI_ASENSE_INVALID_COMMAND, + SCSI_ASENSEQ_NO_QUALIFIER); + return SCSI_FAILED; +} + +/** + * @brief Stub for unrealized but required SCSI commands. + * @details Sets sense data in 'all OK' condition and returns success status. + */ +static bool cmd_ignored(SCSITarget *scsip, const uint8_t *cmd) { + (void)scsip; + (void)cmd; + + return SCSI_SUCCESS; +} + +/** + * @brief SCSI inquiry command handler. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * + * @notapi + */ +static bool inquiry(SCSITarget *scsip, const uint8_t *cmd) { + + if ((cmd[1] & 0b1) && cmd[2] == 0x80) { + /* Unit serial number page */ + return transmit_data(scsip, (const uint8_t *)scsip->config->unit_serial_number_inquiry_response, + sizeof(scsi_unit_serial_number_inquiry_response_t)); + } + else if ((cmd[1] & 0b11) || cmd[2] != 0) { + set_sense(scsip, SCSI_SENSE_KEY_ILLEGAL_REQUEST, + SCSI_ASENSE_INVALID_FIELD_IN_CDB, + SCSI_ASENSEQ_NO_QUALIFIER); + return SCSI_FAILED; + } + else { + return transmit_data(scsip, (const uint8_t *)scsip->config->inquiry_response, + sizeof(scsi_inquiry_response_t)); + } +} + +/** + * @brief SCSI request sense command handler. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * + * @notapi + */ +static bool request_sense(SCSITarget *scsip, const uint8_t *cmd) { + + if (((cmd[1] & 0x01) != 0) || (cmd[4] != sizeof(scsi_sense_response_t))) { + set_sense(scsip, SCSI_SENSE_KEY_ILLEGAL_REQUEST, + SCSI_ASENSE_INVALID_FIELD_IN_CDB, + SCSI_ASENSEQ_NO_QUALIFIER); + return SCSI_FAILED; + } + else { + return transmit_data(scsip, (uint8_t *)&scsip->sense, + sizeof(scsi_sense_response_t)); + } +} + +/** + * @brief SCSI mode sense (6) command handler. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * + * @notapi + */ +static bool mode_sense6(SCSITarget *scsip, const uint8_t *cmd) { + (void)cmd; + + scsip->mode_sense.byte[0] = sizeof(scsi_mode_sense6_response_t) - 1; + scsip->mode_sense.byte[1] = 0; + if (blkIsWriteProtected(scsip->config->blkdev)) { + scsip->mode_sense.byte[2] = 0x01 << 7; + } + else { + scsip->mode_sense.byte[2] = 0; + } + scsip->mode_sense.byte[3] = 0; + + return transmit_data(scsip, (uint8_t *)&scsip->mode_sense, + sizeof(scsi_mode_sense6_response_t)); +} + +/** + * @brief SCSI read format capacities command handler. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * + * @notapi + */ +static bool read_format_capacities(SCSITarget *scsip, const uint8_t *cmd) { + + /* An Allocation Length of zero indicates that no data shall be transferred. + This condition shall not be considered as an error. The Logical Unit + shall terminate the data transfer when Allocation Length bytes have + been transferred or when all available data have been transferred to + the Initiator, whatever is less. */ + + uint16_t len = cmd[7] << 8 | cmd[8]; + + if (0 == len) { + return SCSI_SUCCESS; + } + else { + scsi_read_format_capacities_response_t ret; + BlockDeviceInfo bdi; + blkGetInfo(scsip->config->blkdev, &bdi); + + uint32_t tmp = cpu_to_be32(bdi.blk_num); + memcpy(ret.blocknum, &tmp, 4); + + uint8_t formatted_media = 0b10; + uint16_t blocklen = bdi.blk_size; + ret.blocklen[0] = formatted_media; + ret.blocklen[1] = 0; + ret.blocklen[2] = blocklen >> 8; + ret.blocklen[3] = blocklen & 0xFF; + + ret.header[3] = 1 * 8; + + return transmit_data(scsip, (uint8_t *)&ret, + sizeof(scsi_read_format_capacities_response_t)); + } +} + +/** + * @brief SCSI read capacity (10) command handler. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * + * @notapi + */ +static bool read_capacity10(SCSITarget *scsip, const uint8_t *cmd) { + + (void)cmd; + + BlockDeviceInfo bdi; + blkGetInfo(scsip->config->blkdev, &bdi); + scsi_read_capacity10_response_t ret; + ret.block_size = cpu_to_be32(bdi.blk_size); + ret.last_block_addr = cpu_to_be32(bdi.blk_num - 1); + + return transmit_data(scsip, (uint8_t *)&ret, + sizeof(scsi_read_capacity10_response_t)); +} + +/** + * @brief Checks data request for media overflow. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * @retval true When media overflow detected. + * @retval false Otherwise. + * + * @notapi + */ +static bool data_overflow(SCSITarget *scsip, const data_request_t *req) { + + BlockDeviceInfo bdi; + blkGetInfo(scsip->config->blkdev, &bdi); + + if (req->first_lba + req->blk_cnt > bdi.blk_num) { + set_sense(scsip, SCSI_SENSE_KEY_ILLEGAL_REQUEST, + SCSI_ASENSE_LBA_OUT_OF_RANGE, + SCSI_ASENSEQ_NO_QUALIFIER); + return true; + } + else { + return false; + } +} + +/** + * @brief SCSI read/write (10) command handler. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * + * @notapi + */ +static bool data_read_write10(SCSITarget *scsip, const uint8_t *cmd) { + + data_request_t req = decode_data_request(cmd); + + if (data_overflow(scsip, &req)) { + return SCSI_FAILED; + } + else { + const SCSITransport *tr = scsip->config->transport; + BaseBlockDevice *blkdev = scsip->config->blkdev; + BlockDeviceInfo bdi; + blkGetInfo(blkdev, &bdi); + size_t bs = bdi.blk_size; + uint8_t *buf = scsip->config->blkbuf; + + size_t i = 0; + for (i=0; itransmit_async(tr, buf, bs); + } + else { + // TODO: block error handling + tr->receive(tr, buf, bs); + blkWrite(blkdev, req.first_lba + i, buf, 1); + } + } + } + return SCSI_SUCCESS; +} + +/** + * @brief SCSI test unit ready command handler + * @details If block device is inserted, sets sense data in 'all OK' condition + * and returns success status. + * If block device is not inserted, sets sense data to 'Medium not present' considion, + * and returns check condition status. + */ +static bool test_unit_ready(SCSITarget *scsip, const uint8_t *cmd) { + (void)cmd; + + if (blkIsInserted(scsip->config->blkdev)) { + return SCSI_SUCCESS; + } + else { + // warnprintf("SCSI Medium is not inserted.\r\n"); + set_sense(scsip, SCSI_SENSE_KEY_NOT_READY, + SCSI_ASENSE_MEDIUM_NOT_PRESENT, + SCSI_ASENSEQ_NO_QUALIFIER); + return SCSI_FAILED; + } + +} + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Executes SCSI command encoded in byte array. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] cmd pointer to SCSI command data + * + * @return The operation status. + * + * @api + */ +bool scsiExecCmd(SCSITarget *scsip, const uint8_t *cmd) { + + bool ret = SCSI_SUCCESS; + + switch (cmd[0]) { + case SCSI_CMD_INQUIRY: + // dbgprintf("SCSI_CMD_INQUIRY\r\n"); + ret = inquiry(scsip, cmd); + break; + + case SCSI_CMD_REQUEST_SENSE: + // dbgprintf("SCSI_CMD_REQUEST_SENSE\r\n"); + ret = request_sense(scsip, cmd); + break; + + case SCSI_CMD_READ_CAPACITY_10: + // dbgprintf("SCSI_CMD_READ_CAPACITY_10\r\n"); + ret = read_capacity10(scsip, cmd); + break; + + case SCSI_CMD_READ_10: + // dbgprintf("SCSI_CMD_READ_10\r\n"); + ret = data_read_write10(scsip, cmd); + break; + + case SCSI_CMD_WRITE_10: + // dbgprintf("SCSI_CMD_WRITE_10\r\n"); + ret = data_read_write10(scsip, cmd); + break; + + case SCSI_CMD_TEST_UNIT_READY: + // dbgprintf("SCSI_CMD_TEST_UNIT_READY\r\n"); + ret = test_unit_ready(scsip, cmd); + break; + + case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: + // dbgprintf("SCSI_CMD_ALLOW_MEDIUM_REMOVAL\r\n"); + ret = cmd_ignored(scsip, cmd); + break; + + case SCSI_CMD_MODE_SENSE_6: + // dbgprintf("SCSI_CMD_MODE_SENSE_6\r\n"); + ret = mode_sense6(scsip, cmd); + break; + + case SCSI_CMD_READ_FORMAT_CAPACITIES: + // dbgprintf("SCSI_CMD_READ_FORMAT_CAPACITIES\r\n"); + ret = read_format_capacities(scsip, cmd); + break; + + case SCSI_CMD_VERIFY_10: + // dbgprintf("SCSI_CMD_VERIFY_10\r\n"); + ret = cmd_ignored(scsip, cmd); + break; + + default: + // warnprintf("SCSI unhandled command: %X\r\n", cmd[0]); + ret = cmd_unhandled(scsip, cmd); + break; + } + + if (ret == SCSI_SUCCESS) + set_sense_ok(scsip); + + return ret; +} + +/** + * @brief Driver structure initialization. + * + * @param[in] scsip pointer to @p SCSITarget structure + * + * @api + */ +void scsiObjectInit(SCSITarget *scsip) { + + scsip->config = NULL; + scsip->residue = 0; + memset(&scsip->sense, 0 , sizeof(scsi_sense_response_t)); + scsip->state = SCSI_TRGT_STOP; +} + +/** + * @brief Starts SCSITarget driver. + * + * @param[in] scsip pointer to @p SCSITarget structure + * @param[in] config pointer to @p SCSITargetConfig structure + * + * @api + */ +void scsiStart(SCSITarget *scsip, const SCSITargetConfig *config) { + + scsip->config = config; + scsip->state = SCSI_TRGT_READY; +} + +/** + * @brief Stops SCSITarget driver. + * + * @param[in] scsip pointer to @p SCSITarget structure + * + * @api + */ +void scsiStop(SCSITarget *scsip) { + + scsip->config = NULL; + scsip->state = SCSI_TRGT_STOP; +} + +/** + * @brief Retrieves residue bytes. + * + * @param[in] scsip pointer to @p SCSITarget structure + * + * @return Residue bytes. + * + * @api + */ +uint32_t scsiResidue(const SCSITarget *scsip) { + + return scsip->residue; +} + +/** @} */ \ No newline at end of file diff --git a/os/various/scsi_bindings/lib_scsi.h b/os/various/scsi_bindings/lib_scsi.h new file mode 100644 index 0000000000..018742bf8b --- /dev/null +++ b/os/various/scsi_bindings/lib_scsi.h @@ -0,0 +1,322 @@ +/* + ChibiOS/HAL - Copyright (C) 2016 Uladzimir Pylinsky aka barthess + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file wdg_lld.h + * @brief WDG Driver subsystem low level driver header template. + * + * @addtogroup WDG + * @{ + */ + +#ifndef LIB_SCSI_H_ +#define LIB_SCSI_H_ + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +#define SCSI_CMD_TEST_UNIT_READY 0x00 +#define SCSI_CMD_REQUEST_SENSE 0x03 +#define SCSI_CMD_INQUIRY 0x12 +#define SCSI_CMD_MODE_SENSE_6 0x1A +#define SCSI_CMD_START_STOP_UNIT 0x1B +#define SCSI_CMD_SEND_DIAGNOSTIC 0x1D +#define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E +#define SCSI_CMD_READ_CAPACITY_10 0x25 +#define SCSI_CMD_READ_FORMAT_CAPACITIES 0x23 +#define SCSI_CMD_READ_10 0x28 +#define SCSI_CMD_WRITE_10 0x2A +#define SCSI_CMD_VERIFY_10 0x2F + +#define SCSI_SENSE_KEY_GOOD 0x00 +#define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01 +#define SCSI_SENSE_KEY_NOT_READY 0x02 +#define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03 +#define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04 +#define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05 +#define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06 +#define SCSI_SENSE_KEY_DATA_PROTECT 0x07 +#define SCSI_SENSE_KEY_BLANK_CHECK 0x08 +#define SCSI_SENSE_KEY_VENDOR_SPECIFIC 0x09 +#define SCSI_SENSE_KEY_COPY_ABORTED 0x0A +#define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B +#define SCSI_SENSE_KEY_VOLUME_OVERFLOW 0x0D +#define SCSI_SENSE_KEY_MISCOMPARE 0x0E + +#define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION 0x00 +#define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY 0x04 +#define SCSI_ASENSE_INVALID_FIELD_IN_CDB 0x24 +#define SCSI_ASENSE_NOT_READY_TO_READY_CHANGE 0x28 +#define SCSI_ASENSE_WRITE_PROTECTED 0x27 +#define SCSI_ASENSE_FORMAT_ERROR 0x31 +#define SCSI_ASENSE_INVALID_COMMAND 0x20 +#define SCSI_ASENSE_LBA_OUT_OF_RANGE 0x21 +#define SCSI_ASENSE_MEDIUM_NOT_PRESENT 0x3A + +#define SCSI_ASENSEQ_NO_QUALIFIER 0x00 +#define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED 0x01 +#define SCSI_ASENSEQ_INIT_COMMAND_REQUIRED 0x02 +#define SCSI_ASENSEQ_OPERATION_IN_PROGRESS 0x07 + +#define SCSI_SUCCESS HAL_SUCCESS +#define SCSI_FAILED HAL_FAILED + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Type of a structure representing an SCSI target. + */ +typedef struct SCSITarget SCSITarget; + +/** + * @brief Type of a structure representing an SCSI transport. + */ +typedef struct SCSITransport SCSITransport; + +/** + * @brief State of SCSI target. + */ +typedef enum { + SCSI_TRGT_UNINIT = 0, + SCSI_TRGT_STOP, + SCSI_TRGT_READY, +} scsitrgtstate_t; + +/** + * @brief Represents SCSI sense data structure. + * @details See SCSI specification. + */ +typedef struct CC_PACK { + uint8_t byte[18]; +} scsi_sense_response_t; + +/** + * @brief Represents SCSI inquiry response structure. + * @details See SCSI specification. + */ +typedef struct CC_PACK { + uint8_t peripheral; + uint8_t removable; + uint8_t version; + uint8_t response_data_format; + uint8_t additional_length; + uint8_t sccstp; + uint8_t bqueetc; + uint8_t cmdque; + uint8_t vendorID[8]; + uint8_t productID[16]; + uint8_t productRev[4]; +} scsi_inquiry_response_t; + +/** + * @brief Represents SCSI unit serial number inquiry response structure. + * @details See SCSI specification. + */ +typedef struct CC_PACK { + uint8_t peripheral; + uint8_t page_code; + uint8_t reserved; + uint8_t page_length; + uint8_t serialNumber[8]; +} scsi_unit_serial_number_inquiry_response_t; +/** + * @brief Represents SCSI mode sense (6) request structure. + * @details See SCSI specification. + */ +typedef struct CC_PACK { + uint8_t byte[6]; +} scsi_mode_sense6_request_t; + +/** + * @brief Represents SCSI mode sense (6) response structure. + * @details See SCSI specification. + */ +typedef struct CC_PACK{ + uint8_t byte[4]; +} scsi_mode_sense6_response_t; + +/** + * @brief Represents SCSI read capacity (10) response structure. + * @details See SCSI specification. + */ +typedef struct CC_PACK { + uint32_t last_block_addr; + uint32_t block_size; +} scsi_read_capacity10_response_t; + +/** + * @brief Represents SCSI read format capacity response structure. + * @details See SCSI specification. + */ +typedef struct CC_PACK { + uint8_t header[4]; + uint8_t blocknum[4]; + uint8_t blocklen[4]; +} scsi_read_format_capacities_response_t; + +/** + * @brief Type of a SCSI transport transmit call. + * + * @param[in] usbp pointer to the @p SCSITransport object + * @param[in] data pointer to payload buffer + * @param[in] len payload length + */ +typedef uint32_t (*scsi_transport_transmit_t)(const SCSITransport *transport, + const uint8_t *data, size_t len); + +/** + * @brief Type of a SCSI transport transmit call. + * + * @param[in] usbp pointer to the @p SCSITransport object + * @param[out] data pointer to receive buffer + * @param[in] len number of bytes to be received + */ +typedef uint32_t (*scsi_transport_receive_t)(const SCSITransport *transport, + uint8_t *data, size_t len); + +/** + * @brief Type of block filesystem call. + * + */ +typedef void (*scsi_block_filesystem_access_t)(void); + +/** + * @brief Type of free filesystem call. + * + */ +typedef void (*scsi_free_filesystem_access_t)(void); + +/** + * @brief SCSI transport structure. + */ +struct SCSITransport { + /** + * @brief Transmit call provided by lower level driver. + */ + scsi_transport_transmit_t transmit; + + /** + * @brief Transmit asynchronous + */ + scsi_transport_transmit_t transmit_async; + + /** + * @brief Receive call provided by lower level driver. + */ + scsi_transport_receive_t receive; + + /** + * @brief Block Filesystem access. + */ + scsi_block_filesystem_access_t block_filesystem_access; + + /** + * @brief Free Filesystem access. + */ + scsi_free_filesystem_access_t free_filesystem_access; + + /** + * @brief Transport handler provided by lower level driver. + */ + void *handler; +}; + +/** + * @brief SCSI target config structure. + */ +typedef struct { + /** + * @brief Pointer to @p SCSITransport object. + */ + const SCSITransport *transport; + /** + * @brief Pointer to @p BaseBlockDevice object. + */ + BaseBlockDevice *blkdev; + /** + * @brief Pointer to data buffer for single block. + */ + uint8_t *blkbuf; + /** + * @brief Pointer to SCSI inquiry response object. + */ + const scsi_inquiry_response_t *inquiry_response; + /** + * @brief Pointer to SCSI unit serial number inquiry response object. + */ + const scsi_unit_serial_number_inquiry_response_t *unit_serial_number_inquiry_response; +} SCSITargetConfig; + +/** + * + */ +struct SCSITarget { + /** + * @brief Pointer to @p SCSITargetConfig object. + */ + const SCSITargetConfig *config; + /** + * @brief Target state. + */ + scsitrgtstate_t state; + /** + * @brief SCSI sense response structure. + */ + scsi_sense_response_t sense; + /** + * @brief SCSI mode sense (6) response structure. + */ + scsi_mode_sense6_response_t mode_sense; + /** + * @brief Residue bytes. + */ + uint32_t residue; +}; + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void scsiObjectInit(SCSITarget *scsip); + void scsiStart(SCSITarget *scsip, const SCSITargetConfig *config); + void scsiStop(SCSITarget *scsip); + bool scsiExecCmd(SCSITarget *scsip, const uint8_t *cmd); + uint32_t scsiResidue(const SCSITarget *scsip); +#ifdef __cplusplus +} +#endif + +#endif /* LIB_SCSI_H_ */ + +/** @} */ \ No newline at end of file From aad8529272b7f5f5cfe2de5b569151cf22b5fd97 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Tue, 21 Feb 2023 10:12:24 +0000 Subject: [PATCH 42/87] OTGv1: increase OTG_HS FIFO memory size --- os/hal/ports/STM32/LLD/OTGv1/stm32_otg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/LLD/OTGv1/stm32_otg.h b/os/hal/ports/STM32/LLD/OTGv1/stm32_otg.h index b47df3c296..d1df56c705 100644 --- a/os/hal/ports/STM32/LLD/OTGv1/stm32_otg.h +++ b/os/hal/ports/STM32/LLD/OTGv1/stm32_otg.h @@ -33,7 +33,7 @@ /** * @brief OTG_HS FIFO memory size in words. */ -#define STM32_OTG2_FIFO_MEM_SIZE 1024 +#define STM32_OTG2_FIFO_MEM_SIZE 4096 /** * @brief Host channel registers group. From 47bb308efde5d5d4ab74d2516292294aef77c6c6 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:48:29 +0000 Subject: [PATCH 43/87] SDMMCv2: add support for bouncebuffers --- os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.c | 23 ++++++++++++++++++++ os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.h | 3 +++ 2 files changed, 26 insertions(+) diff --git a/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.c b/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.c index a3128aec84..4eb6dda235 100644 --- a/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.c +++ b/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.c @@ -28,6 +28,8 @@ #if HAL_USE_SDC || defined(__DOXYGEN__) +#include "bouncebuffer.h" + /*===========================================================================*/ /* Driver local definitions. */ /*===========================================================================*/ @@ -678,6 +680,10 @@ bool sdc_lld_send_cmd_long_crc(SDCDriver *sdcp, uint8_t cmd, uint32_t arg, bool sdc_lld_read_special(SDCDriver *sdcp, uint8_t *buf, size_t bytes, uint8_t cmd, uint32_t arg) { + if (!bouncebuffer_setup_read(sdcp->bouncebuffer, &buf, bytes)) { + return HAL_FAILED; + } + if (sdc_lld_prepare_read_bytes(sdcp, buf, bytes)) goto error; @@ -688,9 +694,12 @@ bool sdc_lld_read_special(SDCDriver *sdcp, uint8_t *buf, size_t bytes, if (sdc_lld_wait_transaction_end(sdcp, 1, sdcp->resp)) goto error; + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, bytes); + return HAL_SUCCESS; error: + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, bytes); sdc_lld_error_cleanup(sdcp, 1, sdcp->resp); return HAL_FAILED; } @@ -720,6 +729,10 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk, if (_sdc_wait_for_transfer_state(sdcp)) return HAL_FAILED; + if (!bouncebuffer_setup_read(sdcp->bouncebuffer, &buf, blocks * MMCSD_BLOCK_SIZE)) { + return HAL_FAILED; + } + /* Prepares IDMA.*/ sdcp->sdmmc->IDMABASE0 = (uint32_t)buf; sdcp->sdmmc->IDMACTRL = SDMMC_IDMA_IDMAEN; @@ -745,9 +758,12 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk, if (sdc_lld_wait_transaction_end(sdcp, blocks, sdcp->resp) == true) goto error; + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, blocks * MMCSD_BLOCK_SIZE); + return HAL_SUCCESS; error: + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, blocks * MMCSD_BLOCK_SIZE); sdc_lld_error_cleanup(sdcp, blocks, sdcp->resp); return HAL_FAILED; } @@ -777,6 +793,10 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk, if (_sdc_wait_for_transfer_state(sdcp)) return HAL_FAILED; + if (!bouncebuffer_setup_write(sdcp->bouncebuffer, &buf, blocks * MMCSD_BLOCK_SIZE)) { + return HAL_FAILED; + } + /* Prepares IDMA.*/ sdcp->sdmmc->IDMABASE0 = (uint32_t)buf; sdcp->sdmmc->IDMACTRL = SDMMC_IDMA_IDMAEN; @@ -801,9 +821,12 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk, if (sdc_lld_wait_transaction_end(sdcp, blocks, sdcp->resp) == true) goto error; + bouncebuffer_finish_write(sdcp->bouncebuffer, buf); + return HAL_SUCCESS; error: + bouncebuffer_finish_write(sdcp->bouncebuffer, buf); sdc_lld_error_cleanup(sdcp, blocks, sdcp->resp); return HAL_FAILED; } diff --git a/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.h b/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.h index 2955979318..f70f9572aa 100644 --- a/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.h +++ b/os/hal/ports/STM32/LLD/SDMMCv2/hal_sdc_lld.h @@ -255,6 +255,9 @@ struct SDCDriver { * @brief Uncached word buffer for small transfers. */ uint32_t *resp; + + // bouncebuffer to support DMA to all memory regions + struct bouncebuffer_t *bouncebuffer; }; /*===========================================================================*/ From a42685d674fd95f7a66dd7e932dd0117563fc786 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:44:40 +0000 Subject: [PATCH 44/87] SDIOv1: add support for bouncebuffers --- os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.c | 24 +++++++++++++++++++++ os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.h | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.c b/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.c index af01490430..07e8b62ddb 100644 --- a/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.c +++ b/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.c @@ -28,6 +28,8 @@ #if HAL_USE_SDC || defined(__DOXYGEN__) +#include "bouncebuffer.h" + /*===========================================================================*/ /* Driver local definitions. */ /*===========================================================================*/ @@ -718,6 +720,10 @@ bool sdc_lld_read_special(SDCDriver *sdcp, uint8_t *buf, size_t bytes, uint8_t cmd, uint32_t arg) { uint32_t resp[1]; + if (!bouncebuffer_setup_read(sdcp->bouncebuffer, &buf, bytes)) { + return HAL_FAILED; + } + if (sdc_lld_prepare_read_bytes(sdcp, buf, bytes)) goto error; @@ -728,9 +734,12 @@ bool sdc_lld_read_special(SDCDriver *sdcp, uint8_t *buf, size_t bytes, if (sdc_lld_wait_transaction_end(sdcp, 1, resp)) goto error; + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, bytes); + return HAL_SUCCESS; error: + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, bytes); sdc_lld_error_cleanup(sdcp, 1, resp); return HAL_FAILED; } @@ -761,6 +770,11 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk, if (_sdc_wait_for_transfer_state(sdcp)) return HAL_FAILED; + + if (!bouncebuffer_setup_read(sdcp->bouncebuffer, &buf, blocks * MMCSD_BLOCK_SIZE)) { + return HAL_FAILED; + } + /* Prepares the DMA channel for reading.*/ dmaStreamSetMemory0(sdcp->dma, buf); dmaStreamSetTransactionSize(sdcp->dma, @@ -790,9 +804,12 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk, if (sdc_lld_wait_transaction_end(sdcp, blocks, resp) == true) goto error; + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, blocks * MMCSD_BLOCK_SIZE); + return HAL_SUCCESS; error: + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, blocks * MMCSD_BLOCK_SIZE); sdc_lld_error_cleanup(sdcp, blocks, resp); return HAL_FAILED; } @@ -823,6 +840,10 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk, if (_sdc_wait_for_transfer_state(sdcp)) return HAL_FAILED; + if (!bouncebuffer_setup_write(sdcp->bouncebuffer, &buf, blocks * MMCSD_BLOCK_SIZE)) { + return HAL_FAILED; + } + /* Prepares the DMA channel for writing.*/ dmaStreamSetMemory0(sdcp->dma, buf); dmaStreamSetTransactionSize(sdcp->dma, @@ -852,9 +873,12 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk, if (sdc_lld_wait_transaction_end(sdcp, blocks, resp) == true) goto error; + bouncebuffer_finish_write(sdcp->bouncebuffer, buf); + return HAL_SUCCESS; error: + bouncebuffer_finish_write(sdcp->bouncebuffer, buf); sdc_lld_error_cleanup(sdcp, blocks, resp); return HAL_FAILED; } diff --git a/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.h b/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.h index 96ae0a916d..e886a304a1 100644 --- a/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.h +++ b/os/hal/ports/STM32/LLD/SDIOv1/hal_sdc_lld.h @@ -178,6 +178,7 @@ typedef struct { * @brief Bus width. */ sdcbusmode_t bus_width; + /* End of the mandatory fields.*/ /** * @brief Bus slowdown. @@ -249,6 +250,9 @@ struct SDCDriver { * @brief Buffer for internal operations. */ uint8_t buf[MMCSD_BLOCK_SIZE]; + + // bouncebuffer to support DMA to all memory regions + struct bouncebuffer_t *bouncebuffer; }; /*===========================================================================*/ From f879f6e0a07167b669b5b850f5cf7e3a164f60b8 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 2 Feb 2023 13:47:38 +0000 Subject: [PATCH 45/87] SDMMCv1: add support for bouncebuffers --- os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.c | 24 +++++++++++++++++++- os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.h | 3 +++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.c b/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.c index 345937b1a2..8bade2eed1 100644 --- a/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.c +++ b/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.c @@ -28,6 +28,8 @@ #if HAL_USE_SDC || defined(__DOXYGEN__) +#include "bouncebuffer.h" + /*===========================================================================*/ /* Driver local definitions. */ /*===========================================================================*/ @@ -589,7 +591,6 @@ void sdc_lld_start_clk(SDCDriver *sdcp) { * @notapi */ void sdc_lld_set_data_clk(SDCDriver *sdcp, sdcbusclk_t clk) { - if (SDC_CLK_50MHz == clk) { sdcp->sdmmc->CLKCR = (sdcp->sdmmc->CLKCR & ~(SDMMC_CLKCR_BYPASS_Msk | SDMMC_CLKCR_PWRSAV_Msk | @@ -793,6 +794,10 @@ bool sdc_lld_read_special(SDCDriver *sdcp, uint8_t *buf, size_t bytes, uint8_t cmd, uint32_t arg) { uint32_t resp[1]; + if (!bouncebuffer_setup_read(sdcp->bouncebuffer, &buf, bytes)) { + return HAL_FAILED; + } + if (sdc_lld_prepare_read_bytes(sdcp, buf, bytes)) goto error; @@ -803,9 +808,12 @@ bool sdc_lld_read_special(SDCDriver *sdcp, uint8_t *buf, size_t bytes, if (sdc_lld_wait_transaction_end(sdcp, 1, resp)) goto error; + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, bytes); + return HAL_SUCCESS; error: + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, bytes); sdc_lld_error_cleanup(sdcp, 1, resp); return HAL_FAILED; } @@ -836,6 +844,10 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk, if (_sdc_wait_for_transfer_state(sdcp)) return HAL_FAILED; + if (!bouncebuffer_setup_read(sdcp->bouncebuffer, &buf, blocks * MMCSD_BLOCK_SIZE)) { + return HAL_FAILED; + } + /* Prepares the DMA channel for reading.*/ dmaStreamSetMemory0(sdcp->dma, buf); dmaStreamSetTransactionSize(sdcp->dma, @@ -864,9 +876,12 @@ bool sdc_lld_read_aligned(SDCDriver *sdcp, uint32_t startblk, if (sdc_lld_wait_transaction_end(sdcp, blocks, resp) == true) goto error; + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, blocks * MMCSD_BLOCK_SIZE); + return HAL_SUCCESS; error: + bouncebuffer_finish_read(sdcp->bouncebuffer, buf, blocks * MMCSD_BLOCK_SIZE); sdc_lld_error_cleanup(sdcp, blocks, resp); return HAL_FAILED; } @@ -897,6 +912,10 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk, if (_sdc_wait_for_transfer_state(sdcp)) return HAL_FAILED; + if (!bouncebuffer_setup_write(sdcp->bouncebuffer, &buf, blocks * MMCSD_BLOCK_SIZE)) { + return HAL_FAILED; + } + /* Prepares the DMA channel for writing.*/ dmaStreamSetMemory0(sdcp->dma, buf); dmaStreamSetTransactionSize(sdcp->dma, @@ -925,9 +944,12 @@ bool sdc_lld_write_aligned(SDCDriver *sdcp, uint32_t startblk, if (sdc_lld_wait_transaction_end(sdcp, blocks, resp) == true) goto error; + bouncebuffer_finish_write(sdcp->bouncebuffer, buf); + return HAL_SUCCESS; error: + bouncebuffer_finish_write(sdcp->bouncebuffer, buf); sdc_lld_error_cleanup(sdcp, blocks, resp); return HAL_FAILED; } diff --git a/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.h b/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.h index 618226b9f7..494f57bea5 100644 --- a/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.h +++ b/os/hal/ports/STM32/LLD/SDMMCv1/hal_sdc_lld.h @@ -339,6 +339,9 @@ struct SDCDriver { * @brief Uncached word buffer for small transfers. */ uint32_t *resp; + + // bouncebuffer to support DMA to all memory regions + struct bouncebuffer_t *bouncebuffer; }; /*===========================================================================*/ From 9e1f723e9f5047442a7383499eb1182c4afefdbb Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 18 Mar 2023 17:27:08 +1100 Subject: [PATCH 46/87] STM32: avoid initialising top bit of AHB1 RCC on H7 init of the top bit can lead to memory corruption in SRAM1 on H757, likely due to an issue with write-back cache --- os/hal/ports/STM32/STM32H7xx/hal_lld.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.c b/os/hal/ports/STM32/STM32H7xx/hal_lld.c index e65e5c5703..1ae4e80bc2 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.c +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.c @@ -150,7 +150,11 @@ void hal_lld_init(void) { have been initialized in the board initialization file (board.c). Note, GPIOs are not reset because initialized before this point in board files.*/ - __rccResetAHB1(~0); + /* + we avoid resetting the top bit of AHB1 as it can triger memory + corruption in SRAM1 on STM32H757 + */ + __rccResetAHB1(0x7FFFFFFFU); __rccResetAHB2(~0); __rccResetAHB3(~(RCC_AHB3RSTR_FMCRST | #if defined(STM32_QSPI_NO_RESET) From e681ec5a920794636d8e30d080b7f49623cdc252 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 30 Mar 2023 12:41:55 +0100 Subject: [PATCH 47/87] SPIv1/SPIv2/SPIv3: use driver model v1 --- os/hal/ports/STM32/STM32F0xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32F0xx/platform.mk | 2 +- os/hal/ports/STM32/STM32F1xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32F1xx/platform.mk | 2 +- os/hal/ports/STM32/STM32F1xx/platform_f105_f107.mk | 2 +- os/hal/ports/STM32/STM32F3xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32F3xx/platform.mk | 2 +- os/hal/ports/STM32/STM32F4xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32F4xx/platform.mk | 2 +- os/hal/ports/STM32/STM32F7xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32F7xx/platform.mk | 2 +- os/hal/ports/STM32/STM32G0xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32G0xx/platform.mk | 2 +- os/hal/ports/STM32/STM32G4xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32G4xx/platform.mk | 2 +- os/hal/ports/STM32/STM32H7xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32H7xx/platform.mk | 2 +- os/hal/ports/STM32/STM32H7xx/platform_type2.mk | 2 +- os/hal/ports/STM32/STM32L0xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32L0xx/platform.mk | 2 +- os/hal/ports/STM32/STM32L1xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32L1xx/platform.mk | 2 +- os/hal/ports/STM32/STM32L4xx+/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32L4xx+/platform.mk | 2 +- os/hal/ports/STM32/STM32L4xx+/platform_l4p5_l4q5.mk | 2 +- os/hal/ports/STM32/STM32L4xx/hal_lld.h | 5 ----- os/hal/ports/STM32/STM32L4xx/platform.mk | 2 +- os/hal/ports/STM32/STM32L4xx/platform_l412_l422.mk | 2 +- os/hal/ports/STM32/STM32L4xx/platform_l432.mk | 2 +- os/hal/ports/STM32/STM32L5xx/hal_lld.h | 5 ----- 30 files changed, 17 insertions(+), 82 deletions(-) diff --git a/os/hal/ports/STM32/STM32F0xx/hal_lld.h b/os/hal/ports/STM32/STM32F0xx/hal_lld.h index 696479d9ed..8d65ec9879 100644 --- a/os/hal/ports/STM32/STM32F0xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32F0xx/hal_lld.h @@ -51,11 +51,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification macros * @{ diff --git a/os/hal/ports/STM32/STM32F0xx/platform.mk b/os/hal/ports/STM32/STM32F0xx/platform.mk index d9b1320a1c..8b4d2385c2 100644 --- a/os/hal/ports/STM32/STM32F0xx/platform.mk +++ b/os/hal/ports/STM32/STM32F0xx/platform.mk @@ -34,7 +34,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/EXTIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/GPIOv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv2/driver.mk diff --git a/os/hal/ports/STM32/STM32F1xx/hal_lld.h b/os/hal/ports/STM32/STM32F1xx/hal_lld.h index 408e2f46e7..a26c32aebd 100644 --- a/os/hal/ports/STM32/STM32F1xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32F1xx/hal_lld.h @@ -49,11 +49,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification * @{ diff --git a/os/hal/ports/STM32/STM32F1xx/platform.mk b/os/hal/ports/STM32/STM32F1xx/platform.mk index aaec834f8c..67c154091d 100644 --- a/os/hal/ports/STM32/STM32F1xx/platform.mk +++ b/os/hal/ports/STM32/STM32F1xx/platform.mk @@ -37,7 +37,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/GPIOv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDIOv1/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv1/driver.mk diff --git a/os/hal/ports/STM32/STM32F1xx/platform_f105_f107.mk b/os/hal/ports/STM32/STM32F1xx/platform_f105_f107.mk index 864950110d..3d90d85aff 100644 --- a/os/hal/ports/STM32/STM32F1xx/platform_f105_f107.mk +++ b/os/hal/ports/STM32/STM32F1xx/platform_f105_f107.mk @@ -37,7 +37,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/MACv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/OTGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv1/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv1/driver.mk diff --git a/os/hal/ports/STM32/STM32F3xx/hal_lld.h b/os/hal/ports/STM32/STM32F3xx/hal_lld.h index a090087562..f5e123547b 100644 --- a/os/hal/ports/STM32/STM32F3xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32F3xx/hal_lld.h @@ -53,11 +53,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification macros * @{ diff --git a/os/hal/ports/STM32/STM32F3xx/platform.mk b/os/hal/ports/STM32/STM32F3xx/platform.mk index bec36c7da1..5f180da945 100644 --- a/os/hal/ports/STM32/STM32F3xx/platform.mk +++ b/os/hal/ports/STM32/STM32F3xx/platform.mk @@ -34,7 +34,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/EXTIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/GPIOv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv2/driver.mk diff --git a/os/hal/ports/STM32/STM32F4xx/hal_lld.h b/os/hal/ports/STM32/STM32F4xx/hal_lld.h index 6d86c92978..68501510ca 100644 --- a/os/hal/ports/STM32/STM32F4xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32F4xx/hal_lld.h @@ -47,11 +47,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /*===========================================================================*/ /* Driver pre-compile time settings. */ /*===========================================================================*/ diff --git a/os/hal/ports/STM32/STM32F4xx/platform.mk b/os/hal/ports/STM32/STM32F4xx/platform.mk index 1428db92b2..10644698ca 100644 --- a/os/hal/ports/STM32/STM32F4xx/platform.mk +++ b/os/hal/ports/STM32/STM32F4xx/platform.mk @@ -38,7 +38,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/MACv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/OTGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/QUADSPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDIOv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk diff --git a/os/hal/ports/STM32/STM32F7xx/hal_lld.h b/os/hal/ports/STM32/STM32F7xx/hal_lld.h index 2ca6390b25..5f91c9bf1e 100644 --- a/os/hal/ports/STM32/STM32F7xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32F7xx/hal_lld.h @@ -47,11 +47,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification macros * @{ diff --git a/os/hal/ports/STM32/STM32F7xx/platform.mk b/os/hal/ports/STM32/STM32F7xx/platform.mk index 1b4baec4db..7089998f0e 100644 --- a/os/hal/ports/STM32/STM32F7xx/platform.mk +++ b/os/hal/ports/STM32/STM32F7xx/platform.mk @@ -38,7 +38,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/OTGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/QUADSPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk diff --git a/os/hal/ports/STM32/STM32G0xx/hal_lld.h b/os/hal/ports/STM32/STM32G0xx/hal_lld.h index c8081f5ba2..088640ea2c 100644 --- a/os/hal/ports/STM32/STM32G0xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32G0xx/hal_lld.h @@ -45,11 +45,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification * @{ diff --git a/os/hal/ports/STM32/STM32G0xx/platform.mk b/os/hal/ports/STM32/STM32G0xx/platform.mk index a3c0cbc5f8..f37a6f9f63 100644 --- a/os/hal/ports/STM32/STM32G0xx/platform.mk +++ b/os/hal/ports/STM32/STM32G0xx/platform.mk @@ -35,7 +35,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RCCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv3/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv3/driver.mk diff --git a/os/hal/ports/STM32/STM32G4xx/hal_lld.h b/os/hal/ports/STM32/STM32G4xx/hal_lld.h index 40de25ae79..a5674699cd 100644 --- a/os/hal/ports/STM32/STM32G4xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32G4xx/hal_lld.h @@ -45,11 +45,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification * @{ diff --git a/os/hal/ports/STM32/STM32G4xx/platform.mk b/os/hal/ports/STM32/STM32G4xx/platform.mk index dee5b31f4a..6ea414ed1a 100644 --- a/os/hal/ports/STM32/STM32G4xx/platform.mk +++ b/os/hal/ports/STM32/STM32G4xx/platform.mk @@ -37,7 +37,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/QUADSPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RCCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv3/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv3/driver.mk diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.h b/os/hal/ports/STM32/STM32H7xx/hal_lld.h index 269dae8859..2d1912475e 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.h @@ -31,11 +31,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @brief Sub-family identifier */ diff --git a/os/hal/ports/STM32/STM32H7xx/platform.mk b/os/hal/ports/STM32/STM32H7xx/platform.mk index 537ed7b083..b018596f08 100644 --- a/os/hal/ports/STM32/STM32H7xx/platform.mk +++ b/os/hal/ports/STM32/STM32H7xx/platform.mk @@ -39,7 +39,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/MDMAv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/OTGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/QUADSPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv3/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv3/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk diff --git a/os/hal/ports/STM32/STM32H7xx/platform_type2.mk b/os/hal/ports/STM32/STM32H7xx/platform_type2.mk index 69fb3c20cd..3de9e47635 100644 --- a/os/hal/ports/STM32/STM32H7xx/platform_type2.mk +++ b/os/hal/ports/STM32/STM32H7xx/platform_type2.mk @@ -39,7 +39,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/MDMAv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/OCTOSPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/OTGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv3/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv3/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk diff --git a/os/hal/ports/STM32/STM32L0xx/hal_lld.h b/os/hal/ports/STM32/STM32L0xx/hal_lld.h index 12a192c6e2..32171616a5 100644 --- a/os/hal/ports/STM32/STM32L0xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32L0xx/hal_lld.h @@ -48,11 +48,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification macros * @{ diff --git a/os/hal/ports/STM32/STM32L0xx/platform.mk b/os/hal/ports/STM32/STM32L0xx/platform.mk index adf818fea6..78b59cec99 100644 --- a/os/hal/ports/STM32/STM32L0xx/platform.mk +++ b/os/hal/ports/STM32/STM32L0xx/platform.mk @@ -34,7 +34,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/GPIOv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv2/driver.mk diff --git a/os/hal/ports/STM32/STM32L1xx/hal_lld.h b/os/hal/ports/STM32/STM32L1xx/hal_lld.h index 9d6f566916..869e0a6962 100644 --- a/os/hal/ports/STM32/STM32L1xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32L1xx/hal_lld.h @@ -46,11 +46,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification * @{ diff --git a/os/hal/ports/STM32/STM32L1xx/platform.mk b/os/hal/ports/STM32/STM32L1xx/platform.mk index 3c230a64d0..d5bb2ef4af 100644 --- a/os/hal/ports/STM32/STM32L1xx/platform.mk +++ b/os/hal/ports/STM32/STM32L1xx/platform.mk @@ -35,7 +35,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/EXTIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/GPIOv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/I2Cv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv1/driver.mk diff --git a/os/hal/ports/STM32/STM32L4xx+/hal_lld.h b/os/hal/ports/STM32/STM32L4xx+/hal_lld.h index 4d90a7d362..a43e715eb9 100644 --- a/os/hal/ports/STM32/STM32L4xx+/hal_lld.h +++ b/os/hal/ports/STM32/STM32L4xx+/hal_lld.h @@ -44,11 +44,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification * @{ diff --git a/os/hal/ports/STM32/STM32L4xx+/platform.mk b/os/hal/ports/STM32/STM32L4xx+/platform.mk index 415c86bffd..84c648e264 100644 --- a/os/hal/ports/STM32/STM32L4xx+/platform.mk +++ b/os/hal/ports/STM32/STM32L4xx+/platform.mk @@ -39,7 +39,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/RCCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv3/driver.mk diff --git a/os/hal/ports/STM32/STM32L4xx+/platform_l4p5_l4q5.mk b/os/hal/ports/STM32/STM32L4xx+/platform_l4p5_l4q5.mk index 27437579b6..59aff4839f 100644 --- a/os/hal/ports/STM32/STM32L4xx+/platform_l4p5_l4q5.mk +++ b/os/hal/ports/STM32/STM32L4xx+/platform_l4p5_l4q5.mk @@ -39,7 +39,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/RCCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv3/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv2/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv3/driver.mk diff --git a/os/hal/ports/STM32/STM32L4xx/hal_lld.h b/os/hal/ports/STM32/STM32L4xx/hal_lld.h index e98b160499..1fce18a38d 100644 --- a/os/hal/ports/STM32/STM32L4xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32L4xx/hal_lld.h @@ -44,11 +44,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification * @{ diff --git a/os/hal/ports/STM32/STM32L4xx/platform.mk b/os/hal/ports/STM32/STM32L4xx/platform.mk index 94a0c44951..b1081e33eb 100644 --- a/os/hal/ports/STM32/STM32L4xx/platform.mk +++ b/os/hal/ports/STM32/STM32L4xx/platform.mk @@ -40,7 +40,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/RCCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv1/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv2/driver.mk diff --git a/os/hal/ports/STM32/STM32L4xx/platform_l412_l422.mk b/os/hal/ports/STM32/STM32L4xx/platform_l412_l422.mk index a4653571de..cef621d05e 100644 --- a/os/hal/ports/STM32/STM32L4xx/platform_l412_l422.mk +++ b/os/hal/ports/STM32/STM32L4xx/platform_l412_l422.mk @@ -36,7 +36,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/RCCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv3/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv1/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv2/driver.mk diff --git a/os/hal/ports/STM32/STM32L4xx/platform_l432.mk b/os/hal/ports/STM32/STM32L4xx/platform_l432.mk index 4859e5c8af..c9d9989612 100644 --- a/os/hal/ports/STM32/STM32L4xx/platform_l432.mk +++ b/os/hal/ports/STM32/STM32L4xx/platform_l432.mk @@ -38,7 +38,7 @@ include $(CHIBIOS)/os/hal/ports/STM32/LLD/RCCv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RNGv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/RTCv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SDMMCv1/driver.mk -include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver_v2.mk +include $(CHIBIOS)/os/hal/ports/STM32/LLD/SPIv2/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/SYSTICKv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/TIMv1/driver.mk include $(CHIBIOS)/os/hal/ports/STM32/LLD/USARTv2/driver.mk diff --git a/os/hal/ports/STM32/STM32L5xx/hal_lld.h b/os/hal/ports/STM32/STM32L5xx/hal_lld.h index 17de3fea46..bcdaf9ad68 100644 --- a/os/hal/ports/STM32/STM32L5xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32L5xx/hal_lld.h @@ -43,11 +43,6 @@ /* Driver constants. */ /*===========================================================================*/ -/** - * @brief Requires use of SPIv2 driver model. - */ -#define HAL_LLD_SELECT_SPI_V2 TRUE - /** * @name Platform identification * @{ From 4253f6db11790a26361b6cc8b3663cd086709005 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 30 Mar 2023 15:49:41 +0100 Subject: [PATCH 48/87] TIMv1: missing EICU ISRs --- os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c | 173 +++++++----------- os/hal/ports/STM32/LLD/TIMv1/stm32_tim1.inc | 13 ++ os/hal/ports/STM32/LLD/TIMv1/stm32_tim12.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim13.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim14.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim15.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim16.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim17.inc | 8 + .../STM32/LLD/TIMv1/stm32_tim1_15_16_17.inc | 27 +++ .../STM32/LLD/TIMv1/stm32_tim1_16_17.inc | 19 ++ .../STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc | 27 +++ .../STM32/LLD/TIMv1/stm32_tim1_shared.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim2.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim20.inc | 15 +- os/hal/ports/STM32/LLD/TIMv1/stm32_tim21.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim22.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim3.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim3_4.inc | 14 ++ os/hal/ports/STM32/LLD/TIMv1/stm32_tim4.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim5.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim6.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim7.inc | 8 + os/hal/ports/STM32/LLD/TIMv1/stm32_tim8.inc | 13 ++ .../STM32/LLD/TIMv1/stm32_tim8_12_13_14.inc | 35 ++++ 24 files changed, 343 insertions(+), 113 deletions(-) diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c index 8583b74ca4..cb30e73b07 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.c @@ -266,6 +266,7 @@ static void start_channels(EICUDriver *eicup) { /*===========================================================================*/ #if STM32_EICU_USE_TIM1 +#if !defined(STM32_TIM1_SUPPRESS_ISR) #if !defined(STM32_TIM1_UP_HANDLER) #error "STM32_TIM1_UP_HANDLER not defined" #endif @@ -305,10 +306,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) { OSAL_IRQ_EPILOGUE(); } +#endif /* !defined(STM32_TIM1_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM1 */ #if STM32_EICU_USE_TIM2 - +#if !defined(STM32_TIM2_SUPPRESS_ISR) #if !defined(STM32_TIM2_HANDLER) #error "STM32_TIM2_HANDLER not defined" #endif @@ -328,9 +330,11 @@ OSAL_IRQ_HANDLER(STM32_TIM2_HANDLER) { OSAL_IRQ_EPILOGUE(); } +#endif /* !defined(STM32_TIM2_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM2 */ #if STM32_EICU_USE_TIM3 +#if !defined(STM32_TIM3_SUPPRESS_ISR) #if !defined(STM32_TIM3_HANDLER) #error "STM32_TIM3_HANDLER not defined" #endif @@ -350,9 +354,11 @@ OSAL_IRQ_HANDLER(STM32_TIM3_HANDLER) { OSAL_IRQ_EPILOGUE(); } +#endif /* !defined(STM32_TIM3_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM3 */ #if STM32_EICU_USE_TIM4 +#if !defined(STM32_TIM4_SUPPRESS_ISR) #if !defined(STM32_TIM4_HANDLER) #error "STM32_TIM4_HANDLER not defined" #endif @@ -372,9 +378,11 @@ OSAL_IRQ_HANDLER(STM32_TIM4_HANDLER) { OSAL_IRQ_EPILOGUE(); } +#endif /* !defined(STM32_TIM4_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM4 */ #if STM32_EICU_USE_TIM5 +#if !defined(STM32_TIM5_SUPPRESS_ISR) #if !defined(STM32_TIM5_HANDLER) #error "STM32_TIM5_HANDLER not defined" #endif @@ -394,9 +402,11 @@ OSAL_IRQ_HANDLER(STM32_TIM5_HANDLER) { OSAL_IRQ_EPILOGUE(); } +#endif /* !defined(STM32_TIM5_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM5 */ #if STM32_EICU_USE_TIM8 +#if !defined(STM32_TIM8_SUPPRESS_ISR) #if !defined(STM32_TIM8_UP_HANDLER) && defined(STM32_TIM8_UP_TIM13_HANDLER) #define STM32_TIM8_UP_HANDLER STM32_TIM8_UP_TIM13_HANDLER #define STM32_TIM8_UP_NUMBER STM32_TIM8_UP_TIM13_NUMBER @@ -440,116 +450,43 @@ OSAL_IRQ_HANDLER(STM32_TIM8_CC_HANDLER) { OSAL_IRQ_EPILOGUE(); } +#endif /* !defined(STM32_TIM8_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM8 */ -#if STM32_EICU_USE_TIM12 -#if !defined(STM32_TIM12_HANDLER) -#error "STM32_TIM12_HANDLER not defined" -#endif -/** - * @brief TIM12 interrupt handler. - * @note It is assumed that the various sources are only activated if the - * associated callback pointer is not equal to @p NULL in order to not - * perform an extra check in a potentially critical interrupt handler. - * - * @isr - */ -OSAL_IRQ_HANDLER(STM32_TIM12_HANDLER) { - - OSAL_IRQ_PROLOGUE(); +#if STM32_EICU_USE_TIM9 || defined(__DOXYGEN__) +#if !defined(STM32_TIM9_SUPPRESS_ISR) +#error "TIM9 ISR not defined by platform" +#endif /* !defined(STM32_TIM9_SUPPRESS_ISR) */ +#endif /* STM32_EICU_USE_TIM9 */ - eicu_lld_serve_interrupt(&EICUD12); - - OSAL_IRQ_EPILOGUE(); -} -#endif /* STM32_EICU_USE_TIM12 */ - -#if STM32_EICU_USE_TIM10 -#if !defined(STM32_TIM10_HANDLER) -#error "STM32_TIM10_HANDLER not defined" -#endif -/** - * @brief TIM10 interrupt handler. - * @note It is assumed that the various sources are only activated if the - * associated callback pointer is not equal to @p NULL in order to not - * perform an extra check in a potentially critical interrupt handler. - * - * @isr - */ -OSAL_IRQ_HANDLER(STM32_TIM10_HANDLER) { - - OSAL_IRQ_PROLOGUE(); - - eicu_lld_serve_interrupt(&EICUD10); - - OSAL_IRQ_EPILOGUE(); -} +#if STM32_EICU_USE_TIM10 || defined(__DOXYGEN__) +#if !defined(STM32_TIM10_SUPPRESS_ISR) +#error "TIM10 ISR not defined by platform" +#endif /* !defined(STM32_TIM10_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM10 */ -#if STM32_EICU_USE_TIM11 -#if !defined(STM32_TIM11_HANDLER) -#error "STM32_TIM11_HANDLER not defined" -#endif -/** - * @brief TIM11 interrupt handler. - * @note It is assumed that the various sources are only activated if the - * associated callback pointer is not equal to @p NULL in order to not - * perform an extra check in a potentially critical interrupt handler. - * - * @isr - */ -OSAL_IRQ_HANDLER(STM32_TIM11_HANDLER) { - - OSAL_IRQ_PROLOGUE(); - - eicu_lld_serve_interrupt(&EICUD11); - - OSAL_IRQ_EPILOGUE(); -} +#if STM32_EICU_USE_TIM11 || defined(__DOXYGEN__) +#if !defined(STM32_TIM11_SUPPRESS_ISR) +#error "TIM11 ISR not defined by platform" +#endif /* !defined(STM32_TIM11_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM11 */ -#if STM32_EICU_USE_TIM13 -#if !defined(STM32_TIM13_HANDLER) -#error "STM32_TIM13_HANDLER not defined" -#endif -/** - * @brief TIM13 interrupt handler. - * @note It is assumed that the various sources are only activated if the - * associated callback pointer is not equal to @p NULL in order to not - * perform an extra check in a potentially critical interrupt handler. - * - * @isr - */ -OSAL_IRQ_HANDLER(STM32_TIM13_HANDLER) { - - OSAL_IRQ_PROLOGUE(); - - eicu_lld_serve_interrupt(&EICUD13); +#if STM32_EICU_USE_TIM12 || defined(__DOXYGEN__) +#if !defined(STM32_TIM12_SUPPRESS_ISR) +#error "TIM12 ISR not defined by platform" +#endif /* !defined(STM32_TIM12_SUPPRESS_ISR) */ +#endif /* STM32_EICU_USE_TIM12 */ - OSAL_IRQ_EPILOGUE(); -} +#if STM32_EICU_USE_TIM13 || defined(__DOXYGEN__) +#if !defined(STM32_TIM13_SUPPRESS_ISR) +#error "TIM13 ISR not defined by platform" +#endif /* !defined(STM32_TIM13_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM13 */ -#if STM32_EICU_USE_TIM14 -#if !defined(STM32_TIM14_HANDLER) -#error "STM32_TIM14_HANDLER not defined" -#endif -/** - * @brief TIM14 interrupt handler. - * @note It is assumed that the various sources are only activated if the - * associated callback pointer is not equal to @p NULL in order to not - * perform an extra check in a potentially critical interrupt handler. - * - * @isr - */ -OSAL_IRQ_HANDLER(STM32_TIM14_HANDLER) { - - OSAL_IRQ_PROLOGUE(); - - eicu_lld_serve_interrupt(&EICUD14); - - OSAL_IRQ_EPILOGUE(); -} +#if STM32_EICU_USE_TIM14 || defined(__DOXYGEN__) +#if !defined(STM32_TIM14_SUPPRESS_ISR) +#error "TIM14 ISR not defined by platform" +#endif /* !defined(STM32_TIM14_SUPPRESS_ISR) */ #endif /* STM32_EICU_USE_TIM14 */ /*===========================================================================*/ @@ -658,8 +595,10 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD1 == eicup) { rccEnableTIM1(FALSE); rccResetTIM1(); +#if !defined(STM32_TIM1_SUPPRESS_ISR) nvicEnableVector(STM32_TIM1_UP_NUMBER, STM32_EICU_TIM1_IRQ_PRIORITY); nvicEnableVector(STM32_TIM1_CC_NUMBER, STM32_EICU_TIM1_IRQ_PRIORITY); +#endif eicup->channels = 4; #if defined(STM32_TIM1CLK) eicup->clock = STM32_TIM1CLK; @@ -672,7 +611,9 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD2 == eicup) { rccEnableTIM2(FALSE); rccResetTIM2(); +#if !defined(STM32_TIM2_SUPPRESS_ISR) nvicEnableVector(STM32_TIM2_NUMBER, STM32_EICU_TIM2_IRQ_PRIORITY); +#endif eicup->channels = 4; eicup->clock = STM32_TIMCLK1; } @@ -681,7 +622,9 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD3 == eicup) { rccEnableTIM3(FALSE); rccResetTIM3(); +#if !defined(STM32_TIM3_SUPPRESS_ISR) nvicEnableVector(STM32_TIM3_NUMBER, STM32_EICU_TIM3_IRQ_PRIORITY); +#endif eicup->channels = 4; eicup->clock = STM32_TIMCLK1; } @@ -690,7 +633,9 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD4 == eicup) { rccEnableTIM4(FALSE); rccResetTIM4(); +#if !defined(STM32_TIM4_SUPPRESS_ISR) nvicEnableVector(STM32_TIM4_NUMBER, STM32_EICU_TIM4_IRQ_PRIORITY); +#endif eicup->channels = 4; eicup->clock = STM32_TIMCLK1; } @@ -699,7 +644,9 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD5 == eicup) { rccEnableTIM5(FALSE); rccResetTIM5(); +#if !defined(STM32_TIM5_SUPPRESS_ISR) nvicEnableVector(STM32_TIM5_NUMBER, STM32_EICU_TIM5_IRQ_PRIORITY); +#endif eicup->channels = 4; eicup->clock = STM32_TIMCLK1; } @@ -708,8 +655,10 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD8 == eicup) { rccEnableTIM8(FALSE); rccResetTIM8(); +#if !defined(STM32_TIM8_SUPPRESS_ISR) nvicEnableVector(STM32_TIM8_UP_NUMBER, STM32_EICU_TIM8_IRQ_PRIORITY); nvicEnableVector(STM32_TIM8_CC_NUMBER, STM32_EICU_TIM8_IRQ_PRIORITY); +#endif eicup->channels = 4; #if defined(STM32_TIM8CLK) eicup->clock = STM32_TIM8CLK; @@ -730,7 +679,6 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD12 == eicup) { rccEnableTIM12(FALSE); rccResetTIM12(); - nvicEnableVector(STM32_TIM12_NUMBER, STM32_EICU_TIM12_IRQ_PRIORITY); eicup->channels = 2; eicup->clock = STM32_TIMCLK1; } @@ -739,7 +687,6 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD10 == eicup) { rccEnableTIM10(FALSE); rccResetTIM10(); - nvicEnableVector(STM32_TIM10_NUMBER, STM32_EICU_TIM10_IRQ_PRIORITY); eicup->channels = 1; eicup->clock = STM32_TIMCLK2; } @@ -748,7 +695,6 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD11 == eicup) { rccEnableTIM11(FALSE); rccResetTIM11(); - nvicEnableVector(STM32_TIM11_NUMBER, STM32_EICU_TIM11_IRQ_PRIORITY); eicup->channels = 1; eicup->clock = STM32_TIMCLK2; } @@ -757,7 +703,6 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD13 == eicup) { rccEnableTIM13(FALSE); rccResetTIM13(); - nvicEnableVector(STM32_TIM13_NUMBER, STM32_EICU_TIM13_IRQ_PRIORITY); eicup->channels = 1; eicup->clock = STM32_TIMCLK1; } @@ -766,7 +711,6 @@ void eicu_lld_start(EICUDriver *eicup) { if (&EICUD14 == eicup) { rccEnableTIM14(FALSE); rccResetTIM14(); - nvicEnableVector(STM32_TIM14_NUMBER, STM32_EICU_TIM14_IRQ_PRIORITY); eicup->channels = 1; eicup->clock = STM32_TIMCLK1; } @@ -850,39 +794,51 @@ void eicu_lld_stop(EICUDriver *eicup) { #if STM32_EICU_USE_TIM1 if (&EICUD1 == eicup) { +#if !defined(STM32_TIM1_SUPPRESS_ISR) nvicDisableVector(STM32_TIM1_UP_NUMBER); +#endif nvicDisableVector(STM32_TIM1_CC_NUMBER); rccDisableTIM1(); } #endif #if STM32_EICU_USE_TIM2 if (&EICUD2 == eicup) { +#if !defined(STM32_TIM2_SUPPRESS_ISR) nvicDisableVector(STM32_TIM2_NUMBER); +#endif rccDisableTIM2(); } #endif #if STM32_EICU_USE_TIM3 if (&EICUD3 == eicup) { +#if !defined(STM32_TIM3_SUPPRESS_ISR) nvicDisableVector(STM32_TIM3_NUMBER); +#endif rccDisableTIM3(); } #endif #if STM32_EICU_USE_TIM4 if (&EICUD4 == eicup) { +#if !defined(STM32_TIM4_SUPPRESS_ISR) nvicDisableVector(STM32_TIM4_NUMBER); +#endif rccDisableTIM4(); } #endif #if STM32_EICU_USE_TIM5 if (&EICUD5 == eicup) { +#if !defined(STM32_TIM5_SUPPRESS_ISR) nvicDisableVector(STM32_TIM5_NUMBER); +#endif rccDisableTIM5(); } #endif #if STM32_EICU_USE_TIM8 if (&EICUD8 == eicup) { +#if !defined(STM32_TIM8_SUPPRESS_ISR) nvicDisableVector(STM32_TIM8_UP_NUMBER); nvicDisableVector(STM32_TIM8_CC_NUMBER); +#endif rccDisableTIM8(); } #endif @@ -893,32 +849,27 @@ void eicu_lld_stop(EICUDriver *eicup) { #endif #if STM32_EICU_USE_TIM12 if (&EICUD12 == eicup) { - nvicDisableVector(STM32_TIM12_NUMBER); rccDisableTIM12(); } #endif } #if STM32_EICU_USE_TIM10 if (&EICUD10 == eicup) { - nvicDisableVector(STM32_TIM10_NUMBER); rccDisableTIM10(); } #endif #if STM32_EICU_USE_TIM11 if (&EICUD11 == eicup) { - nvicDisableVector(STM32_TIM11_NUMBER); rccDisableTIM11(); } #endif #if STM32_EICU_USE_TIM13 if (&EICUD13 == eicup) { - nvicDisableVector(STM32_TIM13_NUMBER); rccDisableTIM13(); } #endif #if STM32_EICU_USE_TIM14 if (&EICUD14 == eicup) { - nvicDisableVector(STM32_TIM14_NUMBER); rccDisableTIM14(); } #endif diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1.inc index eebaa8baab..f73d41ceb8 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM1) #define STM32_ICU_USE_TIM1 FALSE #endif +#if !defined(STM32_EICU_USE_TIM1) +#define STM32_EICU_USE_TIM1 FALSE +#endif #if !defined(STM32_PWM_USE_TIM1) #define STM32_PWM_USE_TIM1 FALSE #endif @@ -121,6 +124,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); @@ -152,6 +160,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim12.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim12.inc index cbf207715a..78941f37c5 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim12.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim12.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM12) #define STM32_ICU_USE_TIM12 FALSE #endif +#if !defined(STM32_EICU_USE_TIM12) +#define STM32_EICU_USE_TIM12 FALSE +#endif #if !defined(STM32_PWM_USE_TIM12) #define STM32_PWM_USE_TIM12 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM12_HANDLER) { icu_lld_serve_interrupt(&ICUD12); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM12 + eicu_lld_serve_interrupt(&EICUD12); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM12 pwm_lld_serve_interrupt(&PWMD12); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim13.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim13.inc index 825e12dc82..9c05c5b89d 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim13.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim13.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM13) #define STM32_ICU_USE_TIM13 FALSE #endif +#if !defined(STM32_EICU_USE_TIM13) +#define STM32_EICU_USE_TIM13 FALSE +#endif #if !defined(STM32_PWM_USE_TIM13) #define STM32_PWM_USE_TIM13 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM13_HANDLER) { icu_lld_serve_interrupt(&ICUD13); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM13 + eicu_lld_serve_interrupt(&EICUD13); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM13 pwm_lld_serve_interrupt(&PWMD13); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim14.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim14.inc index 920af7119e..b60ca9b774 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim14.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim14.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM14) #define STM32_ICU_USE_TIM14 FALSE #endif +#if !defined(STM32_EICU_USE_TIM14) +#define STM32_EICU_USE_TIM14 FALSE +#endif #if !defined(STM32_PWM_USE_TIM14) #define STM32_PWM_USE_TIM14 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM14_HANDLER) { icu_lld_serve_interrupt(&ICUD14); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM14 + eicu_lld_serve_interrupt(&EICUD14); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM14 pwm_lld_serve_interrupt(&PWMD14); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim15.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim15.inc index da9053160a..4c49e2289c 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim15.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim15.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM15) #define STM32_ICU_USE_TIM15 FALSE #endif +#if !defined(STM32_EICU_USE_TIM15) +#define STM32_EICU_USE_TIM15 FALSE +#endif #if !defined(STM32_PWM_USE_TIM15) #define STM32_PWM_USE_TIM15 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM15_HANDLER) { icu_lld_serve_interrupt(&ICUD15); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM15 + eicu_lld_serve_interrupt(&EICUD15); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM15 pwm_lld_serve_interrupt(&PWMD15); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim16.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim16.inc index 56517b17fd..2cbde065a8 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim16.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim16.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM16) #define STM32_ICU_USE_TIM16 FALSE #endif +#if !defined(STM32_EICU_USE_TIM16) +#define STM32_EICU_USE_TIM16 FALSE +#endif #if !defined(STM32_PWM_USE_TIM16) #define STM32_PWM_USE_TIM16 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM16_HANDLER) { icu_lld_serve_interrupt(&ICUD16); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM16 + eicu_lld_serve_interrupt(&EICUD16); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM16 pwm_lld_serve_interrupt(&PWMD16); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim17.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim17.inc index eb6725b557..fabe7287c4 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim17.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim17.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM17) #define STM32_ICU_USE_TIM17 FALSE #endif +#if !defined(STM32_EICU_USE_TIM17) +#define STM32_EICU_USE_TIM17 FALSE +#endif #if !defined(STM32_PWM_USE_TIM17) #define STM32_PWM_USE_TIM17 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM17_HANDLER) { icu_lld_serve_interrupt(&ICUD17); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM17 + eicu_lld_serve_interrupt(&EICUD17); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM17 pwm_lld_serve_interrupt(&PWMD17); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_15_16_17.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_15_16_17.inc index c40da37b9b..155f340d2d 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_15_16_17.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_15_16_17.inc @@ -55,6 +55,9 @@ #if !defined(STM32_ICU_USE_TIM1) #define STM32_ICU_USE_TIM1 FALSE #endif +#if !defined(STM32_EICU_USE_TIM1) +#define STM32_EICU_USE_TIM1 FALSE +#endif #if !defined(STM32_PWM_USE_TIM1) #define STM32_PWM_USE_TIM1 FALSE #endif @@ -68,6 +71,9 @@ #if !defined(STM32_ICU_USE_TIM15) #define STM32_ICU_USE_TIM15 FALSE #endif +#if !defined(STM32_EICU_USE_TIM15) +#define STM32_EICU_USE_TIM15 FALSE +#endif #if !defined(STM32_PWM_USE_TIM15) #define STM32_PWM_USE_TIM15 FALSE #endif @@ -81,6 +87,9 @@ #if !defined(STM32_ICU_USE_TIM16) #define STM32_ICU_USE_TIM16 FALSE #endif +#if !defined(STM32_EICU_USE_TIM16) +#define STM32_EICU_USE_TIM16 FALSE +#endif #if !defined(STM32_PWM_USE_TIM16) #define STM32_PWM_USE_TIM16 FALSE #endif @@ -94,6 +103,9 @@ #if !defined(STM32_ICU_USE_TIM17) #define STM32_ICU_USE_TIM17 FALSE #endif +#if !defined(STM32_EICU_USE_TIM17) +#define STM32_EICU_USE_TIM17 FALSE +#endif #if !defined(STM32_PWM_USE_TIM17) #define STM32_PWM_USE_TIM17 FALSE #endif @@ -209,6 +221,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_BRK_TIM15_HANDLER) { icu_lld_serve_interrupt(&ICUD15); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM15 + eicu_lld_serve_interrupt(&EICUD15); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM15 pwm_lld_serve_interrupt(&PWMD15); @@ -248,6 +265,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_TIM16_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); @@ -321,6 +343,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_16_17.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_16_17.inc index 7cf9aef4e2..d62dd89fea 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_16_17.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_16_17.inc @@ -51,6 +51,9 @@ #if !defined(STM32_ICU_USE_TIM1) #define STM32_ICU_USE_TIM1 FALSE #endif +#if !defined(STM32_EICU_USE_TIM1) +#define STM32_EICU_USE_TIM1 FALSE +#endif #if !defined(STM32_PWM_USE_TIM1) #define STM32_PWM_USE_TIM1 FALSE #endif @@ -64,6 +67,9 @@ #if !defined(STM32_ICU_USE_TIM16) #define STM32_ICU_USE_TIM16 FALSE #endif +#if !defined(STM32_EICU_USE_TIM16) +#define STM32_EICU_USE_TIM16 FALSE +#endif #if !defined(STM32_PWM_USE_TIM16) #define STM32_PWM_USE_TIM16 FALSE #endif @@ -77,6 +83,9 @@ #if !defined(STM32_ICU_USE_TIM17) #define STM32_ICU_USE_TIM17 FALSE #endif +#if !defined(STM32_EICU_USE_TIM17) +#define STM32_EICU_USE_TIM17 FALSE +#endif #if !defined(STM32_PWM_USE_TIM17) #define STM32_PWM_USE_TIM17 FALSE #endif @@ -208,6 +217,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_TIM16_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); @@ -281,6 +295,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc index 416bfdb5f6..783a28a64b 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_9_10_11.inc @@ -55,6 +55,9 @@ #if !defined(STM32_ICU_USE_TIM1) #define STM32_ICU_USE_TIM1 FALSE #endif +#if !defined(STM32_EICU_USE_TIM1) +#define STM32_EICU_USE_TIM1 FALSE +#endif #if !defined(STM32_PWM_USE_TIM1) #define STM32_PWM_USE_TIM1 FALSE #endif @@ -84,6 +87,9 @@ #if !defined(STM32_ICU_USE_TIM10) #define STM32_ICU_USE_TIM10 FALSE #endif +#if !defined(STM32_EICU_USE_TIM10) +#define STM32_EICU_USE_TIM10 FALSE +#endif #if !defined(STM32_PWM_USE_TIM10) #define STM32_PWM_USE_TIM10 FALSE #endif @@ -97,6 +103,9 @@ #if !defined(STM32_ICU_USE_TIM11) #define STM32_ICU_USE_TIM11 FALSE #endif +#if !defined(STM32_EICU_USE_TIM11) +#define STM32_EICU_USE_TIM11 FALSE +#endif #if !defined(STM32_PWM_USE_TIM11) #define STM32_PWM_USE_TIM11 FALSE #endif @@ -259,6 +268,14 @@ OSAL_IRQ_HANDLER(STM32_TIM1_UP_TIM10_HANDLER) { icu_lld_serve_interrupt(&ICUD10); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#if STM32_EICU_USE_TIM10 + eicu_lld_serve_interrupt(&EICUD10); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); @@ -301,6 +318,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_TRGCO_TIM11_HANDLER) { icu_lld_serve_interrupt(&ICUD11); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM11 + eicu_lld_serve_interrupt(&EICUD11); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM11 pwm_lld_serve_interrupt(&PWMD11); @@ -334,6 +356,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_CC_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_shared.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_shared.inc index 67e8174878..06182df409 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_shared.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim1_shared.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM1) #define STM32_ICU_USE_TIM1 FALSE #endif +#if !defined(STM32_EICU_USE_TIM1) +#define STM32_EICU_USE_TIM1 FALSE +#endif #if !defined(STM32_PWM_USE_TIM1) #define STM32_PWM_USE_TIM1 FALSE #endif @@ -107,6 +110,11 @@ OSAL_IRQ_HANDLER(STM32_TIM1_SHARED_HANDLER) { icu_lld_serve_interrupt(&ICUD1); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM1 + eicu_lld_serve_interrupt(&EICUD1); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM1 pwm_lld_serve_interrupt(&PWMD1); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim2.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim2.inc index 435deae093..7b7849b573 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim2.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim2.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM2) #define STM32_ICU_USE_TIM2 FALSE #endif +#if !defined(STM32_EICU_USE_TIM2) +#define STM32_EICU_USE_TIM2 FALSE +#endif #if !defined(STM32_PWM_USE_TIM2) #define STM32_PWM_USE_TIM2 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM2_HANDLER) { icu_lld_serve_interrupt(&ICUD2); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM2 + eicu_lld_serve_interrupt(&EICUD2); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM2 pwm_lld_serve_interrupt(&PWMD2); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim20.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim20.inc index 1b0899811c..164a2b0188 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim20.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim20.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM20) #define STM32_ICU_USE_TIM20 FALSE #endif +#if !defined(STM32_EICU_USE_TIM20) +#define STM32_EICU_USE_TIM20 FALSE +#endif #if !defined(STM32_PWM_USE_TIM20) #define STM32_PWM_USE_TIM20 FALSE #endif @@ -118,7 +121,12 @@ OSAL_IRQ_HANDLER(STM32_TIM20_UP_HANDLER) { #endif #if HAL_USE_ICU #if STM32_ICU_USE_TIM20 - pwm_lld_serve_interrupt(&ICUD20); + icu_lld_serve_interrupt(&ICUD20); +#endif +#endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM20 + eicu_lld_serve_interrupt(&EICUD20); #endif #endif #if HAL_USE_PWM @@ -148,7 +156,10 @@ OSAL_IRQ_HANDLER(STM32_TIM20_CC_HANDLER) { /* Not used by GPT.*/ #endif #if STM32_ICU_USE_TIM20 - pwm_lld_serve_interrupt(&ICUD20); + icu_lld_serve_interrupt(&ICUD20); +#endif +#if STM32_EICU_USE_TIM20 + eicu_lld_serve_interrupt(&EICUD20); #endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM20 diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim21.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim21.inc index 4f98960e8e..0e76f2c2f4 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim21.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim21.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM21) #define STM32_ICU_USE_TIM21 FALSE #endif +#if !defined(STM32_EICU_USE_TIM21) +#define STM32_EICU_USE_TIM21 FALSE +#endif #if !defined(STM32_PWM_USE_TIM21) #define STM32_PWM_USE_TIM21 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM21_HANDLER) { icu_lld_serve_interrupt(&ICUD21); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM21 + eicu_lld_serve_interrupt(&EICUD21); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM21 pwm_lld_serve_interrupt(&PWMD21); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim22.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim22.inc index 05ee7d30d0..ac47ea3714 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim22.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim22.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM22) #define STM32_ICU_USE_TIM22 FALSE #endif +#if !defined(STM32_EICU_USE_TIM22) +#define STM32_EICU_USE_TIM22 FALSE +#endif #if !defined(STM32_PWM_USE_TIM22) #define STM32_PWM_USE_TIM22 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM22_HANDLER) { icu_lld_serve_interrupt(&ICUD22); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM22 + eicu_lld_serve_interrupt(&EICUD22); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM22 pwm_lld_serve_interrupt(&PWMD22); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3.inc index 4521a92198..13469706d2 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM3) #define STM32_ICU_USE_TIM3 FALSE #endif +#if !defined(STM32_EICU_USE_TIM3) +#define STM32_EICU_USE_TIM3 FALSE +#endif #if !defined(STM32_PWM_USE_TIM3) #define STM32_PWM_USE_TIM3 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM3_HANDLER) { icu_lld_serve_interrupt(&ICUD3); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM3 + eicu_lld_serve_interrupt(&EICUD3); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM3 pwm_lld_serve_interrupt(&PWMD3); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3_4.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3_4.inc index 719af8e875..b6426e9dca 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3_4.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim3_4.inc @@ -56,6 +56,9 @@ #if !defined(STM32_ICU_USE_TIM3) #define STM32_ICU_USE_TIM3 FALSE #endif +#if !defined(STM32_EICU_USE_TIM3) +#define STM32_EICU_USE_TIM3 FALSE +#endif #if !defined(STM32_PWM_USE_TIM3) #define STM32_PWM_USE_TIM3 FALSE #endif @@ -69,6 +72,9 @@ #if !defined(STM32_ICU_USE_TIM4) #define STM32_ICU_USE_TIM4 FALSE #endif +#if !defined(STM32_EICU_USE_TIM4) +#define STM32_EICU_USE_TIM4 FALSE +#endif #if !defined(STM32_PWM_USE_TIM4) #define STM32_PWM_USE_TIM4 FALSE #endif @@ -147,6 +153,14 @@ OSAL_IRQ_HANDLER(STM32_TIM3_TIM4_HANDLER) { icu_lld_serve_interrupt(&ICUD4); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM3 + eicu_lld_serve_interrupt(&EICUD3); +#endif +#if STM32_EICU_USE_TIM4 + eicu_lld_serve_interrupt(&EICUD4); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM3 pwm_lld_serve_interrupt(&PWMD3); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim4.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim4.inc index 6df48dcb63..a1784b32e6 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim4.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim4.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM4) #define STM32_ICU_USE_TIM4 FALSE #endif +#if !defined(STM32_EICU_USE_TIM4) +#define STM32_EICU_USE_TIM4 FALSE +#endif #if !defined(STM32_PWM_USE_TIM4) #define STM32_PWM_USE_TIM4 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM4_HANDLER) { icu_lld_serve_interrupt(&ICUD4); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM4 + eicu_lld_serve_interrupt(&EICUD4); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM4 pwm_lld_serve_interrupt(&PWMD4); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim5.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim5.inc index 35158b3c05..cfc3ff8851 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim5.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim5.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM5) #define STM32_ICU_USE_TIM5 FALSE #endif +#if !defined(STM32_EICU_USE_TIM5) +#define STM32_EICU_USE_TIM5 FALSE +#endif #if !defined(STM32_PWM_USE_TIM5) #define STM32_PWM_USE_TIM5 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM5_HANDLER) { icu_lld_serve_interrupt(&ICUD5); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM5 + eicu_lld_serve_interrupt(&EICUD5); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM5 pwm_lld_serve_interrupt(&PWMD5); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim6.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim6.inc index 200d103294..3d8305c697 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim6.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim6.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM6) #define STM32_ICU_USE_TIM6 FALSE #endif +#if !defined(STM32_EICU_USE_TIM6) +#define STM32_EICU_USE_TIM6 FALSE +#endif #if !defined(STM32_PWM_USE_TIM6) #define STM32_PWM_USE_TIM6 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM6_HANDLER) { icu_lld_serve_interrupt(&ICUD6); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM6 + eicu_lld_serve_interrupt(&EICUD6); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM6 pwm_lld_serve_interrupt(&PWMD6); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim7.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim7.inc index 8ea4e0f67d..c6de3a3188 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim7.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim7.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM7) #define STM32_ICU_USE_TIM7 FALSE #endif +#if !defined(STM32_EICU_USE_TIM7) +#define STM32_EICU_USE_TIM7 FALSE +#endif #if !defined(STM32_PWM_USE_TIM7) #define STM32_PWM_USE_TIM7 FALSE #endif @@ -111,6 +114,11 @@ OSAL_IRQ_HANDLER(STM32_TIM7_HANDLER) { icu_lld_serve_interrupt(&ICUD7); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM7 + eicu_lld_serve_interrupt(&EICUD7); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM7 pwm_lld_serve_interrupt(&PWMD7); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8.inc index db9219cca2..bcb348affe 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8.inc @@ -43,6 +43,9 @@ #if !defined(STM32_ICU_USE_TIM8) #define STM32_ICU_USE_TIM8 FALSE #endif +#if !defined(STM32_EICU_USE_TIM8) +#define STM32_EICU_USE_TIM8 FALSE +#endif #if !defined(STM32_PWM_USE_TIM8) #define STM32_PWM_USE_TIM8 FALSE #endif @@ -121,6 +124,11 @@ OSAL_IRQ_HANDLER(STM32_TIM8_UP_HANDLER) { icu_lld_serve_interrupt(&ICUD8); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM8 + eicu_lld_serve_interrupt(&EICUD8); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM8 pwm_lld_serve_interrupt(&PWMD8); @@ -152,6 +160,11 @@ OSAL_IRQ_HANDLER(STM32_TIM8_CC_HANDLER) { icu_lld_serve_interrupt(&ICUD8); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM8 + eicu_lld_serve_interrupt(&EICUD8); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM8 pwm_lld_serve_interrupt(&PWMD8); diff --git a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8_12_13_14.inc b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8_12_13_14.inc index fe235146e5..d3ccd49f9a 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8_12_13_14.inc +++ b/os/hal/ports/STM32/LLD/TIMv1/stm32_tim8_12_13_14.inc @@ -55,6 +55,9 @@ #if !defined(STM32_ICU_USE_TIM8) #define STM32_ICU_USE_TIM8 FALSE #endif +#if !defined(STM32_EICU_USE_TIM8) +#define STM32_EICU_USE_TIM8 FALSE +#endif #if !defined(STM32_PWM_USE_TIM8) #define STM32_PWM_USE_TIM8 FALSE #endif @@ -68,6 +71,9 @@ #if !defined(STM32_ICU_USE_TIM12) #define STM32_ICU_USE_TIM12 FALSE #endif +#if !defined(STM32_EICU_USE_TIM12) +#define STM32_EICU_USE_TIM12 FALSE +#endif #if !defined(STM32_PWM_USE_TIM12) #define STM32_PWM_USE_TIM12 FALSE #endif @@ -81,6 +87,9 @@ #if !defined(STM32_ICU_USE_TIM13) #define STM32_ICU_USE_TIM13 FALSE #endif +#if !defined(STM32_EICU_USE_TIM13) +#define STM32_EICU_USE_TIM13 FALSE +#endif #if !defined(STM32_PWM_USE_TIM13) #define STM32_PWM_USE_TIM13 FALSE #endif @@ -94,6 +103,9 @@ #if !defined(STM32_ICU_USE_TIM14) #define STM32_ICU_USE_TIM14 FALSE #endif +#if !defined(STM32_EICU_USE_TIM14) +#define STM32_EICU_USE_TIM14 FALSE +#endif #if !defined(STM32_PWM_USE_TIM14) #define STM32_PWM_USE_TIM14 FALSE #endif @@ -209,6 +221,11 @@ OSAL_IRQ_HANDLER(STM32_TIM8_BRK_TIM12_HANDLER) { icu_lld_serve_interrupt(&ICUD12); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM12 + eicu_lld_serve_interrupt(&EICUD12); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM12 pwm_lld_serve_interrupt(&PWMD12); @@ -251,6 +268,14 @@ OSAL_IRQ_HANDLER(STM32_TIM8_UP_TIM13_HANDLER) { icu_lld_serve_interrupt(&ICUD13); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM8 + eicu_lld_serve_interrupt(&EICUD8); +#endif +#if STM32_EICU_USE_TIM13 + eicu_lld_serve_interrupt(&EICUD13); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM8 pwm_lld_serve_interrupt(&PWMD8); @@ -293,6 +318,11 @@ OSAL_IRQ_HANDLER(STM32_TIM8_TRGCO_TIM14_HANDLER) { icu_lld_serve_interrupt(&ICUD14); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM14 + eicu_lld_serve_interrupt(&EICUD14); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM14 pwm_lld_serve_interrupt(&PWMD14); @@ -326,6 +356,11 @@ OSAL_IRQ_HANDLER(STM32_TIM8_CC_HANDLER) { icu_lld_serve_interrupt(&ICUD8); #endif #endif +#if HAL_USE_EICU +#if STM32_EICU_USE_TIM8 + eicu_lld_serve_interrupt(&EICUD8); +#endif +#endif #if HAL_USE_PWM #if STM32_PWM_USE_TIM8 pwm_lld_serve_interrupt(&PWMD8); From 75de0f2e5db9e2078e4a5612e6838c4dbcdea867 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Wed, 5 Apr 2023 18:31:07 +0200 Subject: [PATCH 49/87] TIMv1: enable timers when using EICU --- os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h | 97 +++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h index 053e697795..3fd5d9b323 100644 --- a/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h +++ b/os/hal/ports/STM32/LLD/TIMv1/hal_eicu_lld.h @@ -295,6 +295,103 @@ #error "EICU driver activated but no TIM peripheral assigned" #endif +/* Checks on allocation of TIMx units.*/ +#if STM32_EICU_USE_TIM1 +#if defined(STM32_TIM1_IS_USED) +#error "EICUD1 requires TIM1 but the timer is already used" +#else +#define STM32_TIM1_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM2 +#if defined(STM32_TIM2_IS_USED) +#error "EICUD2 requires TIM2 but the timer is already used" +#else +#define STM32_TIM2_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM3 +#if defined(STM32_TIM3_IS_USED) +#error "EICUD3 requires TIM3 but the timer is already used" +#else +#define STM32_TIM3_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM4 +#if defined(STM32_TIM4_IS_USED) +#error "EICUD4 requires TIM4 but the timer is already used" +#else +#define STM32_TIM4_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM5 +#if defined(STM32_TIM5_IS_USED) +#error "EICUD5 requires TIM5 but the timer is already used" +#else +#define STM32_TIM5_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM8 +#if defined(STM32_TIM8_IS_USED) +#error "EICUD8 requires TIM8 but the timer is already used" +#else +#define STM32_TIM8_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM9 +#if defined(STM32_TIM9_IS_USED) +#error "EICUD9 requires TIM9 but the timer is already used" +#else +#define STM32_TIM9_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM10 +#if defined(STM32_TIM10_IS_USED) +#error "EICUD10 requires TIM10 but the timer is already used" +#else +#define STM32_TIM10_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM11 +#if defined(STM32_TIM11_IS_USED) +#error "EICUD11 requires TIM11 but the timer is already used" +#else +#define STM32_TIM11_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM12 +#if defined(STM32_TIM12_IS_USED) +#error "EICUD12 requires TIM12 but the timer is already used" +#else +#define STM32_TIM12_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM13 +#if defined(STM32_TIM13_IS_USED) +#error "EICUD13 requires TIM13 but the timer is already used" +#else +#define STM32_TIM13_IS_USED +#endif +#endif + +#if STM32_EICU_USE_TIM14 +#if defined(STM32_TIM14_IS_USED) +#error "EICUD14 requires TIM14 but the timer is already used" +#else +#define STM32_TIM14_IS_USED +#endif +#endif + #if STM32_EICU_USE_TIM1 && \ !OSAL_IRQ_IS_VALID_PRIORITY(STM32_EICU_TIM1_IRQ_PRIORITY) #error "Invalid IRQ priority assigned to TIM1" From ad0a258bb4c4fc08136af9d5c9143c173d118e76 Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Fri, 7 Apr 2023 10:48:30 +1000 Subject: [PATCH 50/87] ADCv4: add support to select ADC12 DUAL operation mode --- os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c index 166d2a82c9..3806b6a1ff 100644 --- a/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c +++ b/os/hal/ports/STM32/LLD/ADCv4/hal_adc_lld.c @@ -31,7 +31,9 @@ /*===========================================================================*/ #if STM32_ADC_DUAL_MODE == TRUE +#ifndef ADC12_CCR_DUAL #define ADC12_CCR_DUAL ADC_CCR_DUAL_REG_SIMULT +#endif #if STM32_ADC_SAMPLES_SIZE == 8 /* Compact type dual mode, 2x8-bit.*/ #define ADC12_DMA_SIZE (STM32_DMA_CR_MSIZE_HWORD | STM32_DMA_CR_PSIZE_HWORD) From 046f587239fc1e232271a15b42494f4f0fd34fce Mon Sep 17 00:00:00 2001 From: gdisirio Date: Wed, 12 Apr 2023 17:12:20 +0000 Subject: [PATCH 51/87] git-svn-id: https://svn.code.sf.net/p/chibios/code/trunk@16215 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/hal/src/hal_mmc_spi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/os/hal/src/hal_mmc_spi.c b/os/hal/src/hal_mmc_spi.c index 63edeed6e5..990927164a 100644 --- a/os/hal/src/hal_mmc_spi.c +++ b/os/hal/src/hal_mmc_spi.c @@ -191,10 +191,10 @@ static bool mmc_read(void *instance, uint32_t startblk, } buffer += MMCSD_BLOCK_SIZE; n--; + } - if (mmcStopSequentialRead(mmcp)) { - break; - } + if (mmcStopSequentialRead(mmcp)) { + break; } err = HAL_SUCCESS; From b93470a01be73c9d45800599a839b407361e930c Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 20 Apr 2023 19:24:16 +0100 Subject: [PATCH 52/87] ARMCMx: flush data and memory cache after updating ram init areas --- os/common/startup/ARMCMx/compilers/GCC/crt1.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt1.c b/os/common/startup/ARMCMx/compilers/GCC/crt1.c index 2d2d8f7b54..a31cb9ff48 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt1.c +++ b/os/common/startup/ARMCMx/compilers/GCC/crt1.c @@ -23,9 +23,11 @@ */ #include +#include #include #include "cmparams.h" +#include "cache.h" /*===========================================================================*/ /* Module local definitions. */ @@ -258,8 +260,17 @@ void __init_ram_areas(void) { p++; } rap++; +#if CORTEX_MODEL == 7 + cacheBufferFlush(rap->init_area, CACHE_SIZE_ALIGN(uint8_t, rap->no_init_area - rap->init_area)); +#endif } while (rap < &ram_areas[CRT0_AREAS_NUMBER]); + +#if CORTEX_MODEL == 7 + /* PM0253 - 4.8.7 Cache maintenance design hints and tips - required for self-modifying code */ + SCB_CleanDCache(); + SCB_InvalidateICache(); +#endif #endif } From fb3f520bac4923d04b0b8ff7ec4c4f51b85e0fe6 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 2 Apr 2023 09:46:03 +0000 Subject: [PATCH 53/87] Fixed bug #1258. git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16198 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/hal/ports/STM32/STM32H7xx/hal_lld.c | 15 +++++++++------ readme.txt | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.c b/os/hal/ports/STM32/STM32H7xx/hal_lld.c index 1ae4e80bc2..968c00fd9d 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.c +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.c @@ -28,6 +28,10 @@ /* Driver local definitions. */ /*===========================================================================*/ +#define RCC_AHB1RSTR_DONOTTOUCH_Pos (31U) +#define RCC_AHB1RSTR_DONOTTOUCH_Msk (0x1UL << RCC_AHB1RSTR_DONOTTOUCH_Pos) +#define RCC_AHB1RSTR_DONOTTOUCH RCC_AHB1RSTR_DONOTTOUCH_Msk + /*===========================================================================*/ /* Driver exported variables. */ /*===========================================================================*/ @@ -149,12 +153,11 @@ void hal_lld_init(void) { /* Reset of all peripherals. AHB3 is not reset entirely because FMC could have been initialized in the board initialization file (board.c). Note, GPIOs are not reset because initialized before this point in - board files.*/ - /* - we avoid resetting the top bit of AHB1 as it can triger memory - corruption in SRAM1 on STM32H757 - */ - __rccResetAHB1(0x7FFFFFFFU); + board files. + Note that there is an undocumented bit in AHB1, presumably the cache + reset, which must not be touched because the cache is write-back and + latest writes could be lost.*/ + __rccResetAHB1(~RCC_AHB1RSTR_DONOTTOUCH); __rccResetAHB2(~0); __rccResetAHB3(~(RCC_AHB3RSTR_FMCRST | #if defined(STM32_QSPI_NO_RESET) diff --git a/readme.txt b/readme.txt index 3d759d8d12..ea8a4cbdba 100644 --- a/readme.txt +++ b/readme.txt @@ -76,6 +76,7 @@ *** 21.11.4 *** - NEW: Reworked STM32 SDMMCv1 and SDMMCv2 drivers, better timeout and clock handling, improved speed for aligned buffers. +- FIX: Fixed unwanted reset of cache on STM32H7xx (bug #1258). - FIX: Fixed invalid HSIDIV in STM32Ggxx clocks initialization (bug #1257). - FIX: Fixed incorrect RTC initialization on STM32G4/L4/L4+ (bug #1256). - FIX: Fixed syntax error in RP2040 GPIO driver (bug #1255). From 6ac10890d9b03a8fe9908c599a54d7851f745646 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 3 Apr 2023 08:17:04 +0000 Subject: [PATCH 54/87] Added settings for STM32 OCTOSPIv1 and OCTOSPIv2 TCR bits SSHIFT and DHQC. git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16199 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- .../ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.c | 24 ++++++++++++--- .../ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.h | 30 +++++++++++++++++++ .../ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.c | 24 ++++++++++++--- .../ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.h | 30 +++++++++++++++++++ 4 files changed, 100 insertions(+), 8 deletions(-) diff --git a/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.c b/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.c index 66872336a4..90d046ef43 100644 --- a/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.c +++ b/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.c @@ -168,6 +168,14 @@ void wspi_lld_init(void) { #if STM32_WSPI_USE_OCTOSPI1 wspiObjectInit(&WSPID1); + WSPID1.extra_tcr = 0U +#if STM32_WSPI_OCTOSPI1_SSHIFT + | OCTOSPI_TCR_SSHIFT +#endif +#if STM32_WSPI_OCTOSPI1_DHQC + | OCTOSPI_TCR_DHQC +#endif + ; WSPID1.ospi = OCTOSPI1; WSPID1.dma = NULL; WSPID1.dmamode = STM32_DMA_CR_CHSEL(OCTOSPI1_DMA_STREAM) | @@ -182,6 +190,14 @@ void wspi_lld_init(void) { #if STM32_WSPI_USE_OCTOSPI2 wspiObjectInit(&WSPID2); + WSPID2.extra_tcr = 0U +#if STM32_WSPI_OCTOSPI2_SSHIFT + | OCTOSPI_TCR_SSHIFT +#endif +#if STM32_WSPI_OCTOSPI1_DHQC + | OCTOSPI_TCR_DHQC +#endif + ; WSPID2.ospi = OCTOSPI2; WSPID2.dma = NULL; WSPID2.dmamode = STM32_DMA_CR_CHSEL(OCTOSPI2_DMA_STREAM) | @@ -308,7 +324,7 @@ void wspi_lld_command(WSPIDriver *wspip, const wspi_command_t *cmdp) { #endif wspip->ospi->CR &= ~OCTOSPI_CR_FMODE; wspip->ospi->DLR = 0U; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->ABR = cmdp->alt; wspip->ospi->IR = cmdp->cmd; @@ -346,7 +362,7 @@ void wspi_lld_send(WSPIDriver *wspip, const wspi_command_t *cmdp, wspip->ospi->CR &= ~OCTOSPI_CR_FMODE; wspip->ospi->DLR = n - 1U; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->ABR = cmdp->alt; wspip->ospi->IR = cmdp->cmd; @@ -386,7 +402,7 @@ void wspi_lld_receive(WSPIDriver *wspip, const wspi_command_t *cmdp, wspip->ospi->CR = (wspip->ospi->CR & ~OCTOSPI_CR_FMODE) | OCTOSPI_CR_FMODE_0; wspip->ospi->DLR = n - 1U; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->ABR = cmdp->alt; wspip->ospi->IR = cmdp->cmd; @@ -416,7 +432,7 @@ void wspi_lld_map_flash(WSPIDriver *wspip, /* Starting memory mapped mode using the passed parameters.*/ wspip->ospi->CR = OCTOSPI_CR_FMODE_1 | OCTOSPI_CR_FMODE_0 | OCTOSPI_CR_EN; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->IR = cmdp->cmd; wspip->ospi->ABR = 0U; diff --git a/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.h b/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.h index e91c88ea9a..09c50aa661 100644 --- a/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.h +++ b/os/hal/ports/STM32/LLD/OCTOSPIv1/hal_wspi_lld.h @@ -125,6 +125,34 @@ #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 #endif +/** + * @brief OCTOSPI1 TCR_SSHIFT enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI1_SSHIFT) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI1_SSHIFT TRUE +#endif + +/** + * @brief OCTOSPI2 TCR_SSHIFT enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI2_SSHIFT) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI2_SSHIFT TRUE +#endif + +/** + * @brief OCTOSPI1 TCR_DHQC enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI1_DHQC) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI1_DHQC TRUE +#endif + +/** + * @brief OCTOSPI2 TCR_DHQC enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI2_DHQC) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI2_DHQC TRUE +#endif + /** * @brief OCTOSPI1 interrupt priority level setting. */ @@ -292,6 +320,8 @@ * @brief Low level fields of the WSPI driver structure. */ #define wspi_lld_driver_fields \ + /* Extra bits for the TCR register.*/ \ + uint32_t extra_tcr; \ /* Pointer to the OCTOSPIx registers block.*/ \ OCTOSPI_TypeDef *ospi; \ /* OCTOSPI DMA stream.*/ \ diff --git a/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.c b/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.c index e02f89320e..f957ef0adf 100644 --- a/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.c +++ b/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.c @@ -109,12 +109,28 @@ void wspi_lld_init(void) { #if STM32_WSPI_USE_OCTOSPI1 wspiObjectInit(&WSPID1); + WSPID1.extra_tcr = 0U +#if STM32_WSPI_OCTOSPI1_SSHIFT + | OCTOSPI_TCR_SSHIFT +#endif +#if STM32_WSPI_OCTOSPI1_DHQC + | OCTOSPI_TCR_DHQC +#endif + ; WSPID1.ospi = OCTOSPI1; WSPID1.mdma = NULL; #endif #if STM32_WSPI_USE_OCTOSPI2 wspiObjectInit(&WSPID2); + WSPID2.extra_tcr = 0U +#if STM32_WSPI_OCTOSPI2_SSHIFT + | OCTOSPI_TCR_SSHIFT +#endif +#if STM32_WSPI_OCTOSPI1_DHQC + | OCTOSPI_TCR_DHQC +#endif + ; WSPID2.ospi = OCTOSPI2; WSPID2.mdma = NULL; #endif @@ -220,7 +236,7 @@ void wspi_lld_command(WSPIDriver *wspip, const wspi_command_t *cmdp) { wspip->ospi->CR &= ~OCTOSPI_CR_FMODE; wspip->ospi->DLR = 0U; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->ABR = cmdp->alt; wspip->ospi->IR = cmdp->cmd; @@ -273,7 +289,7 @@ void wspi_lld_send(WSPIDriver *wspip, const wspi_command_t *cmdp, wspip->ospi->CR &= ~OCTOSPI_CR_FMODE; wspip->ospi->DLR = n - 1U; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->ABR = cmdp->alt; wspip->ospi->IR = cmdp->cmd; @@ -328,7 +344,7 @@ void wspi_lld_receive(WSPIDriver *wspip, const wspi_command_t *cmdp, wspip->ospi->CR = (wspip->ospi->CR & ~OCTOSPI_CR_FMODE) | OCTOSPI_CR_FMODE_0; wspip->ospi->DLR = n - 1U; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->ABR = cmdp->alt; wspip->ospi->IR = cmdp->cmd; @@ -358,7 +374,7 @@ void wspi_lld_map_flash(WSPIDriver *wspip, /* Starting memory mapped mode using the passed parameters.*/ wspip->ospi->CR = OCTOSPI_CR_FMODE_1 | OCTOSPI_CR_FMODE_0 | OCTOSPI_CR_EN; - wspip->ospi->TCR = cmdp->dummy; + wspip->ospi->TCR = cmdp->dummy | wspip->extra_tcr; wspip->ospi->CCR = cmdp->cfg; wspip->ospi->IR = cmdp->cmd; wspip->ospi->ABR = 0U; diff --git a/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.h b/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.h index 6ab66fddf5..8c65c0e44b 100644 --- a/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.h +++ b/os/hal/ports/STM32/LLD/OCTOSPIv2/hal_wspi_lld.h @@ -126,6 +126,34 @@ #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 #endif +/** + * @brief OCTOSPI1 TCR_SSHIFT enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI1_SSHIFT) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI1_SSHIFT TRUE +#endif + +/** + * @brief OCTOSPI2 TCR_SSHIFT enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI2_SSHIFT) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI2_SSHIFT TRUE +#endif + +/** + * @brief OCTOSPI1 TCR_DHQC enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI1_DHQC) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI1_DHQC TRUE +#endif + +/** + * @brief OCTOSPI2 TCR_DHQC enforcing. + */ +#if !defined(STM32_WSPI_OCTOSPI2_DHQC) || defined(__DOXYGEN__) +#define STM32_WSPI_OCTOSPI2_DHQC TRUE +#endif + /** * @brief OCTOSPI1 MDMA channel selection. */ @@ -276,6 +304,8 @@ * @brief Low level fields of the WSPI driver structure. */ #define wspi_lld_driver_fields \ + /* Extra bits for the TCR register.*/ \ + uint32_t extra_tcr; \ /* Pointer to the OCTOSPIx registers block.*/ \ OCTOSPI_TypeDef *ospi; \ /* QUADSPI MDMA channel.*/ \ From 3ac71ae5624a58c24dc14ff34088456865ad728c Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 3 Apr 2023 10:53:01 +0000 Subject: [PATCH 55/87] Added settings for STM32 OCTOSPIv1 and OCTOSPIv2 TCR bits SSHIFT and DHQC. git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16200 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- .../cfg/stm32h735ig_discovery/mcuconf.h | 4 + .../RT-STM32H723ZG-NUCLEO144/cfg/mcuconf.h | 4 + .../RT-STM32H735IG-DISCOVERY/cfg/mcuconf.h | 4 + .../RT-STM32H7A3ZI_Q-NUCLEO144/cfg/mcuconf.h | 4 + .../RT-STM32L4P5ZG-NUCLEO144/cfg/mcuconf.h | 4 + .../RT-STM32L4R5ZI-NUCLEO144/cfg/mcuconf.h | 4 + .../RT-STM32L4R9-DISCOVERY/cfg/mcuconf.h | 4 + readme.txt | 2 + .../ADC/cfg/stm32l4r5zi_nucleo144/mcuconf.h | 4 + .../DAC/cfg/stm32l4r5zi_nucleo144/mcuconf.h | 4 + .../RTC/cfg/stm32l4r5_nucleo144/mcuconf.h | 4 + .../cfg/stm32l4r9ai_discovery/mcuconf.h | 6 + .../SDMMC/cfg/stm32l4r9ai_discovery/mcuconf.h | 6 + .../SPI/cfg/stm32l4r5_nucleo144/mcuconf.h | 4 + .../SPI/cfg/stm32l4r9_discovery/mcuconf.h | 6 + .../TRNG/cfg/stm32l4r5zi_nucleo144/mcuconf.h | 4 + .../cfg/stm32h723zg_nucleo144/mcuconf.h | 4 + .../USB_CDC/cfg/stm32l4r5_nucleo144/mcuconf.h | 4 + .../cfg/stm32l4r9ai_discovery/mcuconf.h | 4 + .../cfg/stm32h735ig_discovery/mcuconf.h | 4 + .../cfg/stm32l4r9_discovery/mcuconf.h | 4 + .../conf/mcuconf_stm32h723xx/mcuconf.h.ftl | 4 + .../conf/mcuconf_stm32h7a3xx/mcuconf.h.ftl | 4 + .../conf/mcuconf_stm32l4pxxx/mcuconf.h.ftl | 406 ------------------ .../conf/mcuconf_stm32l4rxxx/mcuconf.h.ftl | 6 + 25 files changed, 102 insertions(+), 406 deletions(-) delete mode 100644 tools/ftl/processors/conf/mcuconf_stm32l4pxxx/mcuconf.h.ftl diff --git a/demos/STM32/RT-STM32-LWIP-FATFS-USB/cfg/stm32h735ig_discovery/mcuconf.h b/demos/STM32/RT-STM32-LWIP-FATFS-USB/cfg/stm32h735ig_discovery/mcuconf.h index 152d51b830..f4a2001e3b 100644 --- a/demos/STM32/RT-STM32-LWIP-FATFS-USB/cfg/stm32h735ig_discovery/mcuconf.h +++ b/demos/STM32/RT-STM32-LWIP-FATFS-USB/cfg/stm32h735ig_discovery/mcuconf.h @@ -496,6 +496,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY 1 diff --git a/demos/STM32/RT-STM32H723ZG-NUCLEO144/cfg/mcuconf.h b/demos/STM32/RT-STM32H723ZG-NUCLEO144/cfg/mcuconf.h index 018e184cb2..d15a7be570 100644 --- a/demos/STM32/RT-STM32H723ZG-NUCLEO144/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32H723ZG-NUCLEO144/cfg/mcuconf.h @@ -496,6 +496,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY 1 diff --git a/demos/STM32/RT-STM32H735IG-DISCOVERY/cfg/mcuconf.h b/demos/STM32/RT-STM32H735IG-DISCOVERY/cfg/mcuconf.h index 140faa4ed1..72333b6cd3 100644 --- a/demos/STM32/RT-STM32H735IG-DISCOVERY/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32H735IG-DISCOVERY/cfg/mcuconf.h @@ -496,6 +496,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY 1 diff --git a/demos/STM32/RT-STM32H7A3ZI_Q-NUCLEO144/cfg/mcuconf.h b/demos/STM32/RT-STM32H7A3ZI_Q-NUCLEO144/cfg/mcuconf.h index b0b12eaf7a..d2358071d4 100644 --- a/demos/STM32/RT-STM32H7A3ZI_Q-NUCLEO144/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32H7A3ZI_Q-NUCLEO144/cfg/mcuconf.h @@ -497,6 +497,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY 1 diff --git a/demos/STM32/RT-STM32L4P5ZG-NUCLEO144/cfg/mcuconf.h b/demos/STM32/RT-STM32L4P5ZG-NUCLEO144/cfg/mcuconf.h index 7292521443..bc16e4a658 100644 --- a/demos/STM32/RT-STM32L4P5ZG-NUCLEO144/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32L4P5ZG-NUCLEO144/cfg/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/demos/STM32/RT-STM32L4R5ZI-NUCLEO144/cfg/mcuconf.h b/demos/STM32/RT-STM32L4R5ZI-NUCLEO144/cfg/mcuconf.h index a1e167dcfd..a1098520f1 100644 --- a/demos/STM32/RT-STM32L4R5ZI-NUCLEO144/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32L4R5ZI-NUCLEO144/cfg/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/demos/STM32/RT-STM32L4R9-DISCOVERY/cfg/mcuconf.h b/demos/STM32/RT-STM32L4R9-DISCOVERY/cfg/mcuconf.h index 862eb257f3..e2aaf0db52 100644 --- a/demos/STM32/RT-STM32L4R9-DISCOVERY/cfg/mcuconf.h +++ b/demos/STM32/RT-STM32L4R9-DISCOVERY/cfg/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/readme.txt b/readme.txt index ea8a4cbdba..4c9925cbc4 100644 --- a/readme.txt +++ b/readme.txt @@ -74,6 +74,8 @@ ***************************************************************************** *** 21.11.4 *** +- NEW: Added settings for STM32 OCTOSPIv1 and OCTOSPIv2 TCR bits SSHIFT and + DHQC. - NEW: Reworked STM32 SDMMCv1 and SDMMCv2 drivers, better timeout and clock handling, improved speed for aligned buffers. - FIX: Fixed unwanted reset of cache on STM32H7xx (bug #1258). diff --git a/testhal/STM32/multi/ADC/cfg/stm32l4r5zi_nucleo144/mcuconf.h b/testhal/STM32/multi/ADC/cfg/stm32l4r5zi_nucleo144/mcuconf.h index fefa6bdcb2..8fb4a5b56f 100644 --- a/testhal/STM32/multi/ADC/cfg/stm32l4r5zi_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/ADC/cfg/stm32l4r5zi_nucleo144/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/DAC/cfg/stm32l4r5zi_nucleo144/mcuconf.h b/testhal/STM32/multi/DAC/cfg/stm32l4r5zi_nucleo144/mcuconf.h index db0d956e91..57de5a658a 100644 --- a/testhal/STM32/multi/DAC/cfg/stm32l4r5zi_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/DAC/cfg/stm32l4r5zi_nucleo144/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/RTC/cfg/stm32l4r5_nucleo144/mcuconf.h b/testhal/STM32/multi/RTC/cfg/stm32l4r5_nucleo144/mcuconf.h index 3001ac446e..6b8bb05cea 100644 --- a/testhal/STM32/multi/RTC/cfg/stm32l4r5_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/RTC/cfg/stm32l4r5_nucleo144/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/SDMMC-FATFS/cfg/stm32l4r9ai_discovery/mcuconf.h b/testhal/STM32/multi/SDMMC-FATFS/cfg/stm32l4r9ai_discovery/mcuconf.h index 56f319c08e..099d813f93 100644 --- a/testhal/STM32/multi/SDMMC-FATFS/cfg/stm32l4r9ai_discovery/mcuconf.h +++ b/testhal/STM32/multi/SDMMC-FATFS/cfg/stm32l4r9ai_discovery/mcuconf.h @@ -32,6 +32,8 @@ #define MCUCONF_H #define STM32L4xx_MCUCONF +#define STM32L4P5_MCUCONF +#define STM32L4Q5_MCUCONF #define STM32L4R5_MCUCONF #define STM32L4S5_MCUCONF #define STM32L4R7_MCUCONF @@ -380,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/SDMMC/cfg/stm32l4r9ai_discovery/mcuconf.h b/testhal/STM32/multi/SDMMC/cfg/stm32l4r9ai_discovery/mcuconf.h index 56f319c08e..099d813f93 100644 --- a/testhal/STM32/multi/SDMMC/cfg/stm32l4r9ai_discovery/mcuconf.h +++ b/testhal/STM32/multi/SDMMC/cfg/stm32l4r9ai_discovery/mcuconf.h @@ -32,6 +32,8 @@ #define MCUCONF_H #define STM32L4xx_MCUCONF +#define STM32L4P5_MCUCONF +#define STM32L4Q5_MCUCONF #define STM32L4R5_MCUCONF #define STM32L4S5_MCUCONF #define STM32L4R7_MCUCONF @@ -380,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/SPI/cfg/stm32l4r5_nucleo144/mcuconf.h b/testhal/STM32/multi/SPI/cfg/stm32l4r5_nucleo144/mcuconf.h index 60af36cff0..ff66056d32 100644 --- a/testhal/STM32/multi/SPI/cfg/stm32l4r5_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/SPI/cfg/stm32l4r5_nucleo144/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/SPI/cfg/stm32l4r9_discovery/mcuconf.h b/testhal/STM32/multi/SPI/cfg/stm32l4r9_discovery/mcuconf.h index 3fe61384cb..dbb16f3636 100644 --- a/testhal/STM32/multi/SPI/cfg/stm32l4r9_discovery/mcuconf.h +++ b/testhal/STM32/multi/SPI/cfg/stm32l4r9_discovery/mcuconf.h @@ -32,6 +32,8 @@ #define MCUCONF_H #define STM32L4xx_MCUCONF +#define STM32L4P5_MCUCONF +#define STM32L4Q5_MCUCONF #define STM32L4R5_MCUCONF #define STM32L4S5_MCUCONF #define STM32L4R7_MCUCONF @@ -380,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/TRNG/cfg/stm32l4r5zi_nucleo144/mcuconf.h b/testhal/STM32/multi/TRNG/cfg/stm32l4r5zi_nucleo144/mcuconf.h index 3bd14264a4..aa715e58f4 100644 --- a/testhal/STM32/multi/TRNG/cfg/stm32l4r5zi_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/TRNG/cfg/stm32l4r5zi_nucleo144/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/USB_CDC/cfg/stm32h723zg_nucleo144/mcuconf.h b/testhal/STM32/multi/USB_CDC/cfg/stm32h723zg_nucleo144/mcuconf.h index c8a8016153..e1aebb87e7 100644 --- a/testhal/STM32/multi/USB_CDC/cfg/stm32h723zg_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/USB_CDC/cfg/stm32h723zg_nucleo144/mcuconf.h @@ -496,6 +496,10 @@ #define STM32_WSPI_USE_OCTOSPI2 FALSE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY 1 diff --git a/testhal/STM32/multi/USB_CDC/cfg/stm32l4r5_nucleo144/mcuconf.h b/testhal/STM32/multi/USB_CDC/cfg/stm32l4r5_nucleo144/mcuconf.h index 1328574ac7..f615901063 100644 --- a/testhal/STM32/multi/USB_CDC/cfg/stm32l4r5_nucleo144/mcuconf.h +++ b/testhal/STM32/multi/USB_CDC/cfg/stm32l4r5_nucleo144/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/WSPI-LITTLEFS/cfg/stm32l4r9ai_discovery/mcuconf.h b/testhal/STM32/multi/WSPI-LITTLEFS/cfg/stm32l4r9ai_discovery/mcuconf.h index 5e5451afae..0b31ee0393 100644 --- a/testhal/STM32/multi/WSPI-LITTLEFS/cfg/stm32l4r9ai_discovery/mcuconf.h +++ b/testhal/STM32/multi/WSPI-LITTLEFS/cfg/stm32l4r9ai_discovery/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 1 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 1 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/testhal/STM32/multi/WSPI-MFS/cfg/stm32h735ig_discovery/mcuconf.h b/testhal/STM32/multi/WSPI-MFS/cfg/stm32h735ig_discovery/mcuconf.h index ca00bf9314..3640198257 100644 --- a/testhal/STM32/multi/WSPI-MFS/cfg/stm32h735ig_discovery/mcuconf.h +++ b/testhal/STM32/multi/WSPI-MFS/cfg/stm32h735ig_discovery/mcuconf.h @@ -496,6 +496,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 2 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 2 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL STM32_MDMA_CHANNEL_ID_ANY #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY 1 diff --git a/testhal/STM32/multi/WSPI-MFS/cfg/stm32l4r9_discovery/mcuconf.h b/testhal/STM32/multi/WSPI-MFS/cfg/stm32l4r9_discovery/mcuconf.h index e743083d37..ec954cf9a5 100644 --- a/testhal/STM32/multi/WSPI-MFS/cfg/stm32l4r9_discovery/mcuconf.h +++ b/testhal/STM32/multi/WSPI-MFS/cfg/stm32l4r9_discovery/mcuconf.h @@ -382,6 +382,10 @@ #define STM32_WSPI_USE_OCTOSPI2 TRUE #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE 2 #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE 2 +#define STM32_WSPI_OCTOSPI1_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI2_SSHIFT FALSE +#define STM32_WSPI_OCTOSPI1_DHQC FALSE +#define STM32_WSPI_OCTOSPI2_DHQC FALSE #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY 10 #define STM32_WSPI_OCTOSPI1_DMA_STREAM STM32_DMA_STREAM_ID_ANY diff --git a/tools/ftl/processors/conf/mcuconf_stm32h723xx/mcuconf.h.ftl b/tools/ftl/processors/conf/mcuconf_stm32h723xx/mcuconf.h.ftl index 9a44c73cc7..1bc17da2b5 100644 --- a/tools/ftl/processors/conf/mcuconf_stm32h723xx/mcuconf.h.ftl +++ b/tools/ftl/processors/conf/mcuconf_stm32h723xx/mcuconf.h.ftl @@ -507,6 +507,10 @@ #define STM32_WSPI_USE_OCTOSPI2 ${doc.STM32_WSPI_USE_OCTOSPI2!"FALSE"} #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI1_PRESCALER_VALUE!"1"} #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI2_PRESCALER_VALUE!"1"} +#define STM32_WSPI_OCTOSPI1_SSHIFT ${doc.STM32_WSPI_OCTOSPI1_SSHIFT!"FALSE"} +#define STM32_WSPI_OCTOSPI2_SSHIFT ${doc.STM32_WSPI_OCTOSPI2_SSHIFT!"FALSE"} +#define STM32_WSPI_OCTOSPI1_DHQC ${doc.STM32_WSPI_OCTOSPI1_DHQC!"FALSE"} +#define STM32_WSPI_OCTOSPI2_DHQC ${doc.STM32_WSPI_OCTOSPI2_DHQC!"FALSE"} #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL ${doc.STM32_WSPI_OCTOSPI1_MDMA_CHANNEL!"STM32_MDMA_CHANNEL_ID_ANY"} #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL ${doc.STM32_WSPI_OCTOSPI2_MDMA_CHANNEL!"STM32_MDMA_CHANNEL_ID_ANY"} #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY ${doc.STM32_WSPI_OCTOSPI1_MDMA_PRIORITY!"1"} diff --git a/tools/ftl/processors/conf/mcuconf_stm32h7a3xx/mcuconf.h.ftl b/tools/ftl/processors/conf/mcuconf_stm32h7a3xx/mcuconf.h.ftl index 7f34118809..1af64a5983 100644 --- a/tools/ftl/processors/conf/mcuconf_stm32h7a3xx/mcuconf.h.ftl +++ b/tools/ftl/processors/conf/mcuconf_stm32h7a3xx/mcuconf.h.ftl @@ -508,6 +508,10 @@ #define STM32_WSPI_USE_OCTOSPI2 ${doc.STM32_WSPI_USE_OCTOSPI2!"FALSE"} #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI1_PRESCALER_VALUE!"1"} #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI2_PRESCALER_VALUE!"1"} +#define STM32_WSPI_OCTOSPI1_SSHIFT ${doc.STM32_WSPI_OCTOSPI1_SSHIFT!"FALSE"} +#define STM32_WSPI_OCTOSPI2_SSHIFT ${doc.STM32_WSPI_OCTOSPI2_SSHIFT!"FALSE"} +#define STM32_WSPI_OCTOSPI1_DHQC ${doc.STM32_WSPI_OCTOSPI1_DHQC!"FALSE"} +#define STM32_WSPI_OCTOSPI2_DHQC ${doc.STM32_WSPI_OCTOSPI2_DHQC!"FALSE"} #define STM32_WSPI_OCTOSPI1_MDMA_CHANNEL ${doc.STM32_WSPI_OCTOSPI1_MDMA_CHANNEL!"STM32_MDMA_CHANNEL_ID_ANY"} #define STM32_WSPI_OCTOSPI2_MDMA_CHANNEL ${doc.STM32_WSPI_OCTOSPI2_MDMA_CHANNEL!"STM32_MDMA_CHANNEL_ID_ANY"} #define STM32_WSPI_OCTOSPI1_MDMA_PRIORITY ${doc.STM32_WSPI_OCTOSPI1_MDMA_PRIORITY!"1"} diff --git a/tools/ftl/processors/conf/mcuconf_stm32l4pxxx/mcuconf.h.ftl b/tools/ftl/processors/conf/mcuconf_stm32l4pxxx/mcuconf.h.ftl deleted file mode 100644 index cb3b18ca59..0000000000 --- a/tools/ftl/processors/conf/mcuconf_stm32l4pxxx/mcuconf.h.ftl +++ /dev/null @@ -1,406 +0,0 @@ -[#ftl] -[#-- - ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio. - - This file is part of ChibiOS. - - ChibiOS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - --] -[@pp.dropOutputFile /] -[#import "/@lib/libutils.ftl" as utils /] -[#import "/@lib/liblicense.ftl" as license /] -[@pp.changeOutputFile name="mcuconf.h" /] -/* -[@license.EmitLicenseAsText /] -*/ - -/* - * STM32L4xx drivers configuration. - * The following settings override the default settings present in - * the various device driver implementation headers. - * Note that the settings for each driver only have effect if the whole - * driver is enabled in halconf.h. - * - * IRQ priorities: - * 15...0 Lowest...Highest. - * - * DMA priorities: - * 0...3 Lowest...Highest. - */ - -#ifndef MCUCONF_H -#define MCUCONF_H - -#define STM32L4xx_MCUCONF -#define STM32L4P5_MCUCONF -#define STM32L4Q5_MCUCONF -#define STM32L4R5_MCUCONF -#define STM32L4S5_MCUCONF -#define STM32L4R7_MCUCONF -#define STM32L4S7_MCUCONF -#define STM32L4R9_MCUCONF -#define STM32L4S9_MCUCONF - -/* - * HAL driver system settings. - */ -#define STM32_NO_INIT ${doc.STM32_NO_INIT!"FALSE"} -#define STM32_CLOCK_DYNAMIC ${doc.STM32_CLOCK_DYNAMIC!"FALSE"} -#define STM32_VOS ${doc.STM32_VOS!"STM32_VOS_RANGE1"} -#define STM32_PWR_BOOST ${doc.STM32_PWR_BOOST!"TRUE"} -#define STM32_PWR_CR2 ${doc.STM32_PWR_CR2!"(PWR_CR2_PLS_LEV0 | PWR_CR2_IOSV)"} -#define STM32_PWR_CR3 ${doc.STM32_PWR_CR3!"(PWR_CR3_EIWF)"} -#define STM32_PWR_CR4 ${doc.STM32_PWR_CR4!"(0U)"} -#define STM32_PWR_PUCRA ${doc.STM32_PWR_PUCRA!"(0U)"} -#define STM32_PWR_PDCRA ${doc.STM32_PWR_PDCRA!"(0U)"} -#define STM32_PWR_PUCRB ${doc.STM32_PWR_PUCRB!"(0U)"} -#define STM32_PWR_PDCRB ${doc.STM32_PWR_PDCRB!"(0U)"} -#define STM32_PWR_PUCRC ${doc.STM32_PWR_PUCRC!"(0U)"} -#define STM32_PWR_PDCRC ${doc.STM32_PWR_PDCRC!"(0U)"} -#define STM32_PWR_PUCRD ${doc.STM32_PWR_PUCRD!"(0U)"} -#define STM32_PWR_PDCRD ${doc.STM32_PWR_PDCRD!"(0U)"} -#define STM32_PWR_PUCRE ${doc.STM32_PWR_PUCRE!"(0U)"} -#define STM32_PWR_PDCRE ${doc.STM32_PWR_PDCRE!"(0U)"} -#define STM32_PWR_PUCRF ${doc.STM32_PWR_PUCRF!"(0U)"} -#define STM32_PWR_PDCRF ${doc.STM32_PWR_PDCRF!"(0U)"} -#define STM32_PWR_PUCRG ${doc.STM32_PWR_PUCRG!"(0U)"} -#define STM32_PWR_PDCRG ${doc.STM32_PWR_PDCRG!"(0U)"} -#define STM32_PWR_PUCRH ${doc.STM32_PWR_PUCRH!"(0U)"} -#define STM32_PWR_PDCRH ${doc.STM32_PWR_PDCRH!"(0U)"} -#define STM32_PWR_PUCRI ${doc.STM32_PWR_PUCRI!"(0U)"} -#define STM32_PWR_PDCRI ${doc.STM32_PWR_PDCRI!"(0U)"} -#define STM32_HSI16_ENABLED ${doc.STM32_HSI16_ENABLED!"FALSE"} -#define STM32_HSI48_ENABLED ${doc.STM32_HSI48_ENABLED!"FALSE"} -#define STM32_LSI_ENABLED ${doc.STM32_LSI_ENABLED!"TRUE"} -#define STM32_HSE_ENABLED ${doc.STM32_HSE_ENABLED!"FALSE"} -#define STM32_LSE_ENABLED ${doc.STM32_LSE_ENABLED!"FALSE"} -#define STM32_MSIPLL_ENABLED ${doc.STM32_MSIPLL_ENABLED!"FALSE"} -#define STM32_MSIRANGE ${doc.STM32_MSIRANGE!"STM32_MSIRANGE_4M"} -#define STM32_MSISRANGE ${doc.STM32_MSISRANGE!"STM32_MSISRANGE_4M"} -#define STM32_SW ${doc.STM32_SW!"STM32_SW_PLL"} -#define STM32_PLLSRC ${doc.STM32_PLLSRC!"STM32_PLLSRC_MSI"} -#define STM32_PLLM_VALUE ${doc.STM32_PLLM_VALUE!"1"} -#define STM32_PLLN_VALUE ${doc.STM32_PLLN_VALUE!"60"} -#define STM32_PLLPDIV_VALUE ${doc.STM32_PLLPDIV_VALUE!"0"} -#define STM32_PLLP_VALUE ${doc.STM32_PLLP_VALUE!"7"} -#define STM32_PLLQ_VALUE ${doc.STM32_PLLQ_VALUE!"4"} -#define STM32_PLLR_VALUE ${doc.STM32_PLLR_VALUE!"2"} -#define STM32_HPRE ${doc.STM32_HPRE!"STM32_HPRE_DIV1"} -#define STM32_PPRE1 ${doc.STM32_PPRE1!"STM32_PPRE1_DIV1"} -#define STM32_PPRE2 ${doc.STM32_PPRE2!"STM32_PPRE2_DIV1"} -#define STM32_STOPWUCK ${doc.STM32_STOPWUCK!"STM32_STOPWUCK_MSI"} -#define STM32_MCOSEL ${doc.STM32_MCOSEL!"STM32_MCOSEL_NOCLOCK"} -#define STM32_MCOPRE ${doc.STM32_MCOPRE!"STM32_MCOPRE_DIV1"} -#define STM32_LSCOSEL ${doc.STM32_LSCOSEL!"STM32_LSCOSEL_NOCLOCK"} -#define STM32_PLLSAI1M_VALUE ${doc.STM32_PLLSAI1M_VALUE!"1"} -#define STM32_PLLSAI1N_VALUE ${doc.STM32_PLLSAI1N_VALUE!"72"} -#define STM32_PLLSAI1PDIV_VALUE ${doc.STM32_PLLSAI1PDIV_VALUE!"6"} -#define STM32_PLLSAI1P_VALUE ${doc.STM32_PLLSAI1P_VALUE!"7"} -#define STM32_PLLSAI1Q_VALUE ${doc.STM32_PLLSAI1Q_VALUE!"6"} -#define STM32_PLLSAI1R_VALUE ${doc.STM32_PLLSAI1R_VALUE!"6"} -#define STM32_PLLSAI2M_VALUE ${doc.STM32_PLLSAI2M_VALUE!"1"} -#define STM32_PLLSAI2N_VALUE ${doc.STM32_PLLSAI2N_VALUE!"72"} -#define STM32_PLLSAI2PDIV_VALUE ${doc.STM32_PLLSAI2PDIV_VALUE!"6"} -#define STM32_PLLSAI2P_VALUE ${doc.STM32_PLLSAI2P_VALUE!"7"} -#define STM32_PLLSAI2Q_VALUE ${doc.STM32_PLLSAI2Q_VALUE!"6"} -#define STM32_PLLSAI2R_VALUE ${doc.STM32_PLLSAI2R_VALUE!"6"} -#define STM32_PLLSAI2DIVR ${doc.STM32_PLLSAI2DIVR!"STM32_PLLSAI2DIVR_DIV16"} - -/* - * Peripherals clock sources. - */ -#define STM32_USART1SEL ${doc.STM32_USART1SEL!"STM32_USART1SEL_SYSCLK"} -#define STM32_USART2SEL ${doc.STM32_USART2SEL!"STM32_USART2SEL_SYSCLK"} -#define STM32_USART3SEL ${doc.STM32_USART3SEL!"STM32_USART3SEL_SYSCLK"} -#define STM32_UART4SEL ${doc.STM32_UART4SEL!"STM32_UART4SEL_SYSCLK"} -#define STM32_UART5SEL ${doc.STM32_UART5SEL!"STM32_UART5SEL_SYSCLK"} -#define STM32_LPUART1SEL ${doc.STM32_LPUART1SEL!"STM32_LPUART1SEL_SYSCLK"} -#define STM32_I2C1SEL ${doc.STM32_I2C1SEL!"STM32_I2C1SEL_SYSCLK"} -#define STM32_I2C2SEL ${doc.STM32_I2C2SEL!"STM32_I2C2SEL_SYSCLK"} -#define STM32_I2C3SEL ${doc.STM32_I2C3SEL!"STM32_I2C3SEL_SYSCLK"} -#define STM32_I2C4SEL ${doc.STM32_I2C4SEL!"STM32_I2C4SEL_SYSCLK"} -#define STM32_LPTIM1SEL ${doc.STM32_LPTIM1SEL!"STM32_LPTIM1SEL_PCLK1"} -#define STM32_LPTIM2SEL ${doc.STM32_LPTIM2SEL!"STM32_LPTIM2SEL_PCLK1"} -#define STM32_CLK48SEL ${doc.STM32_CLK48SEL!"STM32_CLK48SEL_PLLSAI1"} -#define STM32_ADCSEL ${doc.STM32_ADCSEL!"STM32_ADCSEL_SYSCLK"} -#define STM32_DFSDMSEL ${doc.STM32_DFSDMSEL!"STM32_DFSDMSEL_PCLK2"} -#define STM32_ADFSDMSEL ${doc.STM32_ADFSDMSEL!"STM32_ADFSDMSEL_SAI1CLK"} -#define STM32_SAI1SEL ${doc.STM32_SAI1SEL!"STM32_SAI1SEL_OFF"} -#define STM32_SAI2SEL ${doc.STM32_SAI2SEL!"STM32_SAI2SEL_OFF"} -#define STM32_DSISEL ${doc.STM32_DSISEL!"STM32_DSISEL_DSIPHY"} -#define STM32_SDMMCSEL ${doc.STM32_SDMMC!"STM32_SDMMCSEL_48CLK"} -#define STM32_OSPISEL ${doc.STM32_OSPISEL!"STM32_OSPISEL_SYSCLK"} -#define STM32_RTCSEL ${doc.STM32_RTCSEL!"STM32_RTCSEL_LSI"} - -/* - * IRQ system settings. - */ -#define STM32_IRQ_EXTI0_PRIORITY ${doc.STM32_IRQ_EXTI0_PRIORITY!"6"} -#define STM32_IRQ_EXTI1_PRIORITY ${doc.STM32_IRQ_EXTI1_PRIORITY!"6"} -#define STM32_IRQ_EXTI2_PRIORITY ${doc.STM32_IRQ_EXTI2_PRIORITY!"6"} -#define STM32_IRQ_EXTI3_PRIORITY ${doc.STM32_IRQ_EXTI3_PRIORITY!"6"} -#define STM32_IRQ_EXTI4_PRIORITY ${doc.STM32_IRQ_EXTI4_PRIORITY!"6"} -#define STM32_IRQ_EXTI5_9_PRIORITY ${doc.STM32_IRQ_EXTI5_9_PRIORITY!"6"} -#define STM32_IRQ_EXTI10_15_PRIORITY ${doc.STM32_IRQ_EXTI10_15_PRIORITY!"6"} -#define STM32_IRQ_EXTI1635_38_PRIORITY ${doc.STM32_IRQ_EXTI1635_38_PRIORITY!"6"} -#define STM32_IRQ_EXTI18_PRIORITY ${doc.STM32_IRQ_EXTI18_PRIORITY!"6"} -#define STM32_IRQ_EXTI19_PRIORITY ${doc.STM32_IRQ_EXTI19_PRIORITY!"6"} -#define STM32_IRQ_EXTI20_PRIORITY ${doc.STM32_IRQ_EXTI20_PRIORITY!"6"} -#define STM32_IRQ_EXTI21_22_PRIORITY ${doc.STM32_IRQ_EXTI21_22_PRIORITY!"6"} - -#define STM32_IRQ_SDMMC1_PRIORITY ${doc.STM32_IRQ_SDMMC1_PRIORITY!"9"} - -#define STM32_IRQ_TIM1_BRK_TIM15_PRIORITY ${doc.STM32_IRQ_TIM1_BRK_TIM15_PRIORITY!"7"} -#define STM32_IRQ_TIM1_UP_TIM16_PRIORITY ${doc.STM32_IRQ_TIM1_UP_TIM16_PRIORITY!"7"} -#define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY ${doc.STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY!"7"} -#define STM32_IRQ_TIM1_CC_PRIORITY ${doc.STM32_IRQ_TIM1_CC_PRIORITY!"7"} -#define STM32_IRQ_TIM2_PRIORITY ${doc.STM32_IRQ_TIM2_PRIORITY!"7"} -#define STM32_IRQ_TIM3_PRIORITY ${doc.STM32_IRQ_TIM3_PRIORITY!"7"} -#define STM32_IRQ_TIM4_PRIORITY ${doc.STM32_IRQ_TIM4_PRIORITY!"7"} -#define STM32_IRQ_TIM5_PRIORITY ${doc.STM32_IRQ_TIM5_PRIORITY!"7"} -#define STM32_IRQ_TIM6_PRIORITY ${doc.STM32_IRQ_TIM6_PRIORITY!"7"} -#define STM32_IRQ_TIM7_PRIORITY ${doc.STM32_IRQ_TIM7_PRIORITY!"7"} -#define STM32_IRQ_TIM8_UP_PRIORITY ${doc.STM32_IRQ_TIM8_UP_PRIORITY!"7"} -#define STM32_IRQ_TIM8_CC_PRIORITY ${doc.STM32_IRQ_TIM8_CC_PRIORITY!"7"} - -#define STM32_IRQ_USART1_PRIORITY ${doc.STM32_IRQ_USART1_PRIORITY!"12"} -#define STM32_IRQ_USART2_PRIORITY ${doc.STM32_IRQ_USART2_PRIORITY!"12"} -#define STM32_IRQ_USART3_PRIORITY ${doc.STM32_IRQ_USART3_PRIORITY!"12"} -#define STM32_IRQ_UART4_PRIORITY ${doc.STM32_IRQ_UART4_PRIORITY!"12"} -#define STM32_IRQ_UART5_PRIORITY ${doc.STM32_IRQ_UART5_PRIORITY!"12"} -#define STM32_IRQ_LPUART1_PRIORITY ${doc.STM32_IRQ_LPUART1_PRIORITY!"12"} - -/* - * ADC driver system settings. - */ -#define STM32_ADC_COMPACT_SAMPLES ${doc.STM32_ADC_COMPACT_SAMPLES!"FALSE"} -#define STM32_ADC_USE_ADC1 ${doc.STM32_ADC_USE_ADC1!"FALSE"} -#define STM32_ADC_ADC1_DMA_STREAM ${doc.STM32_ADC_ADC1_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_ADC_ADC1_DMA_PRIORITY ${doc.STM32_ADC_ADC1_DMA_PRIORITY!"2"} -#define STM32_ADC_ADC12_IRQ_PRIORITY ${doc.STM32_ADC_ADC12_IRQ_PRIORITY!"5"} -#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY ${doc.STM32_ADC_ADC1_DMA_IRQ_PRIORITY!"5"} -#define STM32_ADC_ADC123_CLOCK_MODE ${doc.STM32_ADC_ADC123_CLOCK_MODE!"ADC_CCR_CKMODE_AHB_DIV2"} -#define STM32_ADC_ADC123_PRESC ${doc.STM32_ADC_ADC123_PRESC!"ADC_CCR_PRESC_DIV2"} - -/* - * CAN driver system settings. - */ -#define STM32_CAN_USE_CAN1 ${doc.STM32_CAN_USE_CAN1!"FALSE"} -#define STM32_CAN_CAN1_IRQ_PRIORITY ${doc.STM32_CAN_CAN1_IRQ_PRIORITY!"11"} - -/* - * DAC driver system settings. - */ -#define STM32_DAC_DUAL_MODE ${doc.STM32_DAC_DUAL_MODE!"FALSE"} -#define STM32_DAC_USE_DAC1_CH1 ${doc.STM32_DAC_USE_DAC1_CH1!"FALSE"} -#define STM32_DAC_USE_DAC1_CH2 ${doc.STM32_DAC_USE_DAC1_CH2!"FALSE"} -#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY ${doc.STM32_DAC_DAC1_CH1_IRQ_PRIORITY!"10"} -#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY ${doc.STM32_DAC_DAC1_CH2_IRQ_PRIORITY!"10"} -#define STM32_DAC_DAC1_CH1_DMA_PRIORITY ${doc.STM32_DAC_DAC1_CH1_DMA_PRIORITY!"2"} -#define STM32_DAC_DAC1_CH2_DMA_PRIORITY ${doc.STM32_DAC_DAC1_CH2_DMA_PRIORITY!"2"} -#define STM32_DAC_DAC1_CH1_DMA_STREAM ${doc.STM32_DAC_DAC1_CH1_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_DAC_DAC1_CH2_DMA_STREAM ${doc.STM32_DAC_DAC1_CH2_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} - -/* - * GPT driver system settings. - */ -#define STM32_GPT_USE_TIM1 ${doc.STM32_GPT_USE_TIM1!"FALSE"} -#define STM32_GPT_USE_TIM2 ${doc.STM32_GPT_USE_TIM2!"FALSE"} -#define STM32_GPT_USE_TIM3 ${doc.STM32_GPT_USE_TIM3!"FALSE"} -#define STM32_GPT_USE_TIM4 ${doc.STM32_GPT_USE_TIM4!"FALSE"} -#define STM32_GPT_USE_TIM5 ${doc.STM32_GPT_USE_TIM5!"FALSE"} -#define STM32_GPT_USE_TIM6 ${doc.STM32_GPT_USE_TIM6!"FALSE"} -#define STM32_GPT_USE_TIM7 ${doc.STM32_GPT_USE_TIM7!"FALSE"} -#define STM32_GPT_USE_TIM8 ${doc.STM32_GPT_USE_TIM8!"FALSE"} -#define STM32_GPT_USE_TIM15 ${doc.STM32_GPT_USE_TIM15!"FALSE"} -#define STM32_GPT_USE_TIM16 ${doc.STM32_GPT_USE_TIM16!"FALSE"} -#define STM32_GPT_USE_TIM17 ${doc.STM32_GPT_USE_TIM17!"FALSE"} - -/* - * I2C driver system settings. - */ -#define STM32_I2C_USE_I2C1 ${doc.STM32_I2C_USE_I2C1!"FALSE"} -#define STM32_I2C_USE_I2C2 ${doc.STM32_I2C_USE_I2C2!"FALSE"} -#define STM32_I2C_USE_I2C3 ${doc.STM32_I2C_USE_I2C3!"FALSE"} -#define STM32_I2C_USE_I2C4 ${doc.STM32_I2C_USE_I2C4!"FALSE"} -#define STM32_I2C_BUSY_TIMEOUT ${doc.STM32_I2C_BUSY_TIMEOUT!"50"} -#define STM32_I2C_I2C1_RX_DMA_STREAM ${doc.STM32_I2C_I2C1_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C1_TX_DMA_STREAM ${doc.STM32_I2C_I2C1_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C2_RX_DMA_STREAM ${doc.STM32_I2C_I2C2_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C2_TX_DMA_STREAM ${doc.STM32_I2C_I2C2_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C3_RX_DMA_STREAM ${doc.STM32_I2C_I2C3_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C3_TX_DMA_STREAM ${doc.STM32_I2C_I2C3_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C4_RX_DMA_STREAM ${doc.STM32_I2C_I2C4_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C4_TX_DMA_STREAM ${doc.STM32_I2C_I2C4_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_I2C_I2C1_IRQ_PRIORITY ${doc.STM32_I2C_I2C1_IRQ_PRIORITY!"5"} -#define STM32_I2C_I2C2_IRQ_PRIORITY ${doc.STM32_I2C_I2C2_IRQ_PRIORITY!"5"} -#define STM32_I2C_I2C3_IRQ_PRIORITY ${doc.STM32_I2C_I2C3_IRQ_PRIORITY!"5"} -#define STM32_I2C_I2C4_IRQ_PRIORITY ${doc.STM32_I2C_I2C4_IRQ_PRIORITY!"5"} -#define STM32_I2C_I2C1_DMA_PRIORITY ${doc.STM32_I2C_I2C1_DMA_PRIORITY!"3"} -#define STM32_I2C_I2C2_DMA_PRIORITY ${doc.STM32_I2C_I2C2_DMA_PRIORITY!"3"} -#define STM32_I2C_I2C3_DMA_PRIORITY ${doc.STM32_I2C_I2C3_DMA_PRIORITY!"3"} -#define STM32_I2C_I2C4_DMA_PRIORITY ${doc.STM32_I2C_I2C4_DMA_PRIORITY!"3"} -#define STM32_I2C_DMA_ERROR_HOOK(i2cp) ${doc.STM32_I2C_DMA_ERROR_HOOK!"osalSysHalt(\"DMA failure\")"} - -/* - * ICU driver system settings. - */ -#define STM32_ICU_USE_TIM1 ${doc.STM32_ICU_USE_TIM1!"FALSE"} -#define STM32_ICU_USE_TIM2 ${doc.STM32_ICU_USE_TIM2!"FALSE"} -#define STM32_ICU_USE_TIM3 ${doc.STM32_ICU_USE_TIM3!"FALSE"} -#define STM32_ICU_USE_TIM4 ${doc.STM32_ICU_USE_TIM4!"FALSE"} -#define STM32_ICU_USE_TIM5 ${doc.STM32_ICU_USE_TIM5!"FALSE"} -#define STM32_ICU_USE_TIM8 ${doc.STM32_ICU_USE_TIM8!"FALSE"} -#define STM32_ICU_USE_TIM15 ${doc.STM32_ICU_USE_TIM15!"FALSE"} -#define STM32_ICU_USE_TIM16 ${doc.STM32_ICU_USE_TIM16!"FALSE"} -#define STM32_ICU_USE_TIM17 ${doc.STM32_ICU_USE_TIM17!"FALSE"} - -/* - * PWM driver system settings. - */ -#define STM32_PWM_USE_TIM1 ${doc.STM32_PWM_USE_TIM1!"FALSE"} -#define STM32_PWM_USE_TIM2 ${doc.STM32_PWM_USE_TIM2!"FALSE"} -#define STM32_PWM_USE_TIM3 ${doc.STM32_PWM_USE_TIM3!"FALSE"} -#define STM32_PWM_USE_TIM4 ${doc.STM32_PWM_USE_TIM4!"FALSE"} -#define STM32_PWM_USE_TIM5 ${doc.STM32_PWM_USE_TIM5!"FALSE"} -#define STM32_PWM_USE_TIM8 ${doc.STM32_PWM_USE_TIM8!"FALSE"} -#define STM32_PWM_USE_TIM15 ${doc.STM32_PWM_USE_TIM15!"FALSE"} -#define STM32_PWM_USE_TIM16 ${doc.STM32_PWM_USE_TIM16!"FALSE"} -#define STM32_PWM_USE_TIM17 ${doc.STM32_PWM_USE_TIM17!"FALSE"} - -/* - * RTC driver system settings. - */ -#define STM32_RTC_PRESA_VALUE ${doc.STM32_RTC_PRESA_VALUE!"32"} -#define STM32_RTC_PRESS_VALUE ${doc.STM32_RTC_PRESS_VALUE!"1024"} -#define STM32_RTC_CR_INIT ${doc.STM32_RTC_CR_INIT!"0"} -#define STM32_RTC_TAMPCR_INIT ${doc.STM32_RTC_TAMPCR_INIT!"0"} - -/* - * SDC driver system settings. - */ -#define STM32_SDC_USE_SDMMC1 ${doc.STM32_SDC_USE_SDMMC1!"FALSE"} -#define STM32_SDC_SDMMC_UNALIGNED_SUPPORT ${doc.STM32_SDC_SDMMC_UNALIGNED_SUPPORT!"TRUE"} -#define STM32_SDC_SDMMC_WRITE_TIMEOUT ${doc.STM32_SDC_SDMMC_WRITE_TIMEOUT!"10000"} -#define STM32_SDC_SDMMC_READ_TIMEOUT ${doc.STM32_SDC_SDMMC_READ_TIMEOUT!"10000"} -#define STM32_SDC_SDMMC_CLOCK_DELAY ${doc.STM32_SDC_SDMMC_CLOCK_DELAY!"10"} -#define STM32_SDC_SDMMC_PWRSAV ${doc.STM32_SDC_SDMMC_PWRSAV!"TRUE"} -#define STM32_SDC_SDMMC1_IRQ_PRIORITY ${doc.STM32_SDC_SDMMC1_IRQ_PRIORITY!"9"} - -/* - * SERIAL driver system settings. - */ -#define STM32_SERIAL_USE_USART1 ${doc.STM32_SERIAL_USE_USART1!"FALSE"} -#define STM32_SERIAL_USE_USART2 ${doc.STM32_SERIAL_USE_USART2!"FALSE"} -#define STM32_SERIAL_USE_USART3 ${doc.STM32_SERIAL_USE_USART3!"FALSE"} -#define STM32_SERIAL_USE_UART4 ${doc.STM32_SERIAL_USE_UART4!"FALSE"} -#define STM32_SERIAL_USE_UART5 ${doc.STM32_SERIAL_USE_UART5!"FALSE"} -#define STM32_SERIAL_USE_LPUART1 ${doc.STM32_SERIAL_USE_LPUART1!"FALSE"} - -/* - * SIO driver system settings. - */ -#define STM32_SIO_USE_USART1 ${doc.STM32_SIO_USE_USART1!"FALSE"} -#define STM32_SIO_USE_USART2 ${doc.STM32_SIO_USE_USART2!"FALSE"} -#define STM32_SIO_USE_USART3 ${doc.STM32_SIO_USE_USART3!"FALSE"} -#define STM32_SIO_USE_UART4 ${doc.STM32_SIO_USE_UART4!"FALSE"} -#define STM32_SIO_USE_UART5 ${doc.STM32_SIO_USE_UART5!"FALSE"} -#define STM32_SIO_USE_LPUART1 ${doc.STM32_SIO_USE_LPUART1!"FALSE"} - -/* - * SPI driver system settings. - */ -#define STM32_SPI_USE_SPI1 ${doc.STM32_SPI_USE_SPI1!"FALSE"} -#define STM32_SPI_USE_SPI2 ${doc.STM32_SPI_USE_SPI2!"FALSE"} -#define STM32_SPI_USE_SPI3 ${doc.STM32_SPI_USE_SPI3!"FALSE"} -#define STM32_SPI_SPI1_RX_DMA_STREAM ${doc.STM32_SPI_SPI1_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_SPI_SPI1_TX_DMA_STREAM ${doc.STM32_SPI_SPI1_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_SPI_SPI2_RX_DMA_STREAM ${doc.STM32_SPI_SPI2_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_SPI_SPI2_TX_DMA_STREAM ${doc.STM32_SPI_SPI2_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_SPI_SPI3_RX_DMA_STREAM ${doc.STM32_SPI_SPI3_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_SPI_SPI3_TX_DMA_STREAM ${doc.STM32_SPI_SPI3_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_SPI_SPI1_DMA_PRIORITY ${doc.STM32_SPI_SPI1_DMA_PRIORITY!"1"} -#define STM32_SPI_SPI2_DMA_PRIORITY ${doc.STM32_SPI_SPI2_DMA_PRIORITY!"1"} -#define STM32_SPI_SPI3_DMA_PRIORITY ${doc.STM32_SPI_SPI3_DMA_PRIORITY!"1"} -#define STM32_SPI_SPI1_IRQ_PRIORITY ${doc.STM32_SPI_SPI1_IRQ_PRIORITY!"10"} -#define STM32_SPI_SPI2_IRQ_PRIORITY ${doc.STM32_SPI_SPI2_IRQ_PRIORITY!"10"} -#define STM32_SPI_SPI3_IRQ_PRIORITY ${doc.STM32_SPI_SPI3_IRQ_PRIORITY!"10"} -#define STM32_SPI_DMA_ERROR_HOOK(spip) ${doc.STM32_SPI_DMA_ERROR_HOOK!"osalSysHalt(\"DMA failure\")"} - -/* - * ST driver system settings. - */ -#define STM32_ST_IRQ_PRIORITY ${doc.STM32_ST_IRQ_PRIORITY!"8"} -#define STM32_ST_USE_TIMER ${doc.STM32_ST_USE_TIMER!"2"} - -/* - * TRNG driver system settings. - */ -#define STM32_TRNG_USE_RNG1 ${doc.STM32_TRNG_USE_RNG1!"FALSE"} - -/* - * UART driver system settings. - */ -#define STM32_UART_USE_USART1 ${doc.STM32_UART_USE_USART1!"FALSE"} -#define STM32_UART_USE_USART2 ${doc.STM32_UART_USE_USART2!"FALSE"} -#define STM32_UART_USE_USART3 ${doc.STM32_UART_USE_USART3!"FALSE"} -#define STM32_UART_USE_UART4 ${doc.STM32_UART_USE_UART4!"FALSE"} -#define STM32_UART_USE_UART5 ${doc.STM32_UART_USE_UART5!"FALSE"} -#define STM32_UART_USART1_RX_DMA_STREAM ${doc.STM32_UART_USART1_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_USART1_TX_DMA_STREAM ${doc.STM32_UART_USART1_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_USART2_RX_DMA_STREAM ${doc.STM32_UART_USART2_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_USART2_TX_DMA_STREAM ${doc.STM32_UART_USART2_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_USART3_RX_DMA_STREAM ${doc.STM32_UART_USART3_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_USART3_TX_DMA_STREAM ${doc.STM32_UART_USART3_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_UART4_RX_DMA_STREAM ${doc.STM32_UART_UART4_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_UART4_TX_DMA_STREAM ${doc.STM32_UART_UART4_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_UART5_RX_DMA_STREAM ${doc.STM32_UART_UART5_RX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_UART5_TX_DMA_STREAM ${doc.STM32_UART_UART5_TX_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_UART_USART1_DMA_PRIORITY ${doc.STM32_UART_USART1_DMA_PRIORITY!"0"} -#define STM32_UART_USART2_DMA_PRIORITY ${doc.STM32_UART_USART2_DMA_PRIORITY!"0"} -#define STM32_UART_USART3_DMA_PRIORITY ${doc.STM32_UART_USART3_DMA_PRIORITY!"0"} -#define STM32_UART_UART4_DMA_PRIORITY ${doc.STM32_UART_UART4_DMA_PRIORITY!"0"} -#define STM32_UART_UART5_DMA_PRIORITY ${doc.STM32_UART_UART5_DMA_PRIORITY!"0"} -#define STM32_UART_DMA_ERROR_HOOK(uartp) ${doc.STM32_UART_DMA_ERROR_HOOK!"osalSysHalt(\"DMA failure\")"} - -/* - * USB driver system settings. - */ -#define STM32_USB_USE_OTG1 ${doc.STM32_USB_USE_OTG1!"FALSE"} -#define STM32_USB_OTG1_IRQ_PRIORITY ${doc.STM32_USB_OTG1_IRQ_PRIORITY!"14"} -#define STM32_USB_OTG1_RX_FIFO_SIZE ${doc.STM32_USB_OTG1_RX_FIFO_SIZE!"512"} - -/* - * WDG driver system settings. - */ -#define STM32_WDG_USE_IWDG ${doc.STM32_WDG_USE_IWDG!"FALSE"} - -/* - * WSPI driver system settings. - */ -#define STM32_WSPI_USE_OCTOSPI1 ${doc.STM32_WSPI_USE_OCTOSPI1!"FALSE"} -#define STM32_WSPI_USE_OCTOSPI2 ${doc.STM32_WSPI_USE_OCTOSPI2!"FALSE"} -#define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI1_PRESCALER_VALUE!"1"} -#define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI2_PRESCALER_VALUE!"1"} -#define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY ${doc.STM32_WSPI_OCTOSPI1_IRQ_PRIORITY!"10"} -#define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY ${doc.STM32_WSPI_OCTOSPI2_IRQ_PRIORITY!"10"} -#define STM32_WSPI_OCTOSPI1_DMA_STREAM ${doc.STM32_WSPI_OCTOSPI1_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_WSPI_OCTOSPI2_DMA_STREAM ${doc.STM32_WSPI_OCTOSPI2_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} -#define STM32_WSPI_OCTOSPI1_DMA_PRIORITY ${doc.STM32_WSPI_OCTOSPI1_DMA_PRIORITY!"1"} -#define STM32_WSPI_OCTOSPI2_DMA_PRIORITY ${doc.STM32_WSPI_OCTOSPI2_DMA_PRIORITY!"1"} -#define STM32_WSPI_OCTOSPI1_DMA_IRQ_PRIORITY ${doc.STM32_WSPI_OCTOSPI1_DMA_IRQ_PRIORITY!"10"} -#define STM32_WSPI_OCTOSPI2_DMA_IRQ_PRIORITY ${doc.STM32_WSPI_OCTOSPI2_DMA_IRQ_PRIORITY!"10"} -#define STM32_WSPI_DMA_ERROR_HOOK(wspip) ${doc.STM32_WSPI_DMA_ERROR_HOOK!"osalSysHalt(\"DMA failure\")"} - -#endif /* MCUCONF_H */ diff --git a/tools/ftl/processors/conf/mcuconf_stm32l4rxxx/mcuconf.h.ftl b/tools/ftl/processors/conf/mcuconf_stm32l4rxxx/mcuconf.h.ftl index 7981d527d0..c8504ca59a 100644 --- a/tools/ftl/processors/conf/mcuconf_stm32l4rxxx/mcuconf.h.ftl +++ b/tools/ftl/processors/conf/mcuconf_stm32l4rxxx/mcuconf.h.ftl @@ -43,6 +43,8 @@ #define MCUCONF_H #define STM32L4xx_MCUCONF +#define STM32L4P5_MCUCONF +#define STM32L4Q5_MCUCONF #define STM32L4R5_MCUCONF #define STM32L4S5_MCUCONF #define STM32L4R7_MCUCONF @@ -391,6 +393,10 @@ #define STM32_WSPI_USE_OCTOSPI2 ${doc.STM32_WSPI_USE_OCTOSPI2!"FALSE"} #define STM32_WSPI_OCTOSPI1_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI1_PRESCALER_VALUE!"1"} #define STM32_WSPI_OCTOSPI2_PRESCALER_VALUE ${doc.STM32_WSPI_OCTOSPI2_PRESCALER_VALUE!"1"} +#define STM32_WSPI_OCTOSPI1_SSHIFT ${doc.STM32_WSPI_OCTOSPI1_SSHIFT!"FALSE"} +#define STM32_WSPI_OCTOSPI2_SSHIFT ${doc.STM32_WSPI_OCTOSPI2_SSHIFT!"FALSE"} +#define STM32_WSPI_OCTOSPI1_DHQC ${doc.STM32_WSPI_OCTOSPI1_DHQC!"FALSE"} +#define STM32_WSPI_OCTOSPI2_DHQC ${doc.STM32_WSPI_OCTOSPI2_DHQC!"FALSE"} #define STM32_WSPI_OCTOSPI1_IRQ_PRIORITY ${doc.STM32_WSPI_OCTOSPI1_IRQ_PRIORITY!"10"} #define STM32_WSPI_OCTOSPI2_IRQ_PRIORITY ${doc.STM32_WSPI_OCTOSPI2_IRQ_PRIORITY!"10"} #define STM32_WSPI_OCTOSPI1_DMA_STREAM ${doc.STM32_WSPI_OCTOSPI1_DMA_STREAM!"STM32_DMA_STREAM_ID_ANY"} From 897748d1c198b6a1e3ea1dfb0aab671ba44c39fd Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 3 Apr 2023 13:23:28 +0000 Subject: [PATCH 56/87] Fixed bug #1259. git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16201 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/hal/ports/STM32/STM32H7xx/hal_lld.c | 3 +++ os/hal/ports/STM32/STM32H7xx/hal_lld.h | 3 ++- os/hal/ports/STM32/STM32H7xx/hal_lld_type2.h | 6 +++--- readme.txt | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.c b/os/hal/ports/STM32/STM32H7xx/hal_lld.c index 968c00fd9d..c379502ee5 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.c +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.c @@ -162,6 +162,9 @@ void hal_lld_init(void) { __rccResetAHB3(~(RCC_AHB3RSTR_FMCRST | #if defined(STM32_QSPI_NO_RESET) RCC_AHB3RSTR_QSPIRST | +#endif +#if defined(STM32_OSPI_NO_RESET) + RCC_AHB3RSTR_OSPIRST | #endif 0x80000000U)); /* Was RCC_AHB3RSTR_CPURST in Rev-V.*/ __rccResetAHB4(~(RCC_APB4RSTR_SYSCFGRST | STM32_GPIO_EN_MASK)); diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.h b/os/hal/ports/STM32/STM32H7xx/hal_lld.h index 2d1912475e..86a3bb1f91 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.h @@ -146,7 +146,8 @@ #if defined(STM32H723xx) || defined(STM32H733xx) || \ defined(STM32H725xx) || defined(STM32H735xx) || \ - defined(STM32H735xx) || defined(__DOXYGEN__) + defined(STM32H735xx) || defined(STM32H730xx) || \ + defined(__DOXYGEN__) #include "hal_lld_type2.h" #elif defined(STM32H7A3xx) || defined(STM32H7B3xx) || \ defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || \ diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld_type2.h b/os/hal/ports/STM32/STM32H7xx/hal_lld_type2.h index 61e1620251..1b14d48d94 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld_type2.h +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld_type2.h @@ -1761,7 +1761,7 @@ */ #if STM32_PLL1_REF_CK < STM32_PLLIN_THRESHOLD1 /* Check for medium range.*/ -#if STM32_PLL1_VCO_CK < STM32_PLLVCO_MEDIUM_MIN) || (STM32_PLL1_VCO_CK > STM32_PLLVCO_MEDIUM_MAX) +#if (STM32_PLL1_VCO_CK < STM32_PLLVCO_MEDIUM_MIN) || (STM32_PLL1_VCO_CK > STM32_PLLVCO_MEDIUM_MAX) #error "STM32_PLL1_VCO_CK outside acceptable range (STM32_PLLVCO_MEDIUM_MIN..STM32_PLLVCO_MEDIUM_MAX)" #endif @@ -1798,7 +1798,7 @@ */ #if STM32_PLL2_REF_CK < STM32_PLLIN_THRESHOLD1 /* Check for medium range.*/ -#if STM32_PLL2_VCO_CK < STM32_PLLVCO_MEDIUM_MIN) || (STM32_PLL2_VCO_CK > STM32_PLLVCO_MEDIUM_MAX) +#if (STM32_PLL2_VCO_CK < STM32_PLLVCO_MEDIUM_MIN) || (STM32_PLL2_VCO_CK > STM32_PLLVCO_MEDIUM_MAX) #error "STM32_PLL2_VCO_CK outside acceptable range (STM32_PLLVCO_MEDIUM_MIN..STM32_PLLVCO_MEDIUM_MAX)" #endif @@ -1835,7 +1835,7 @@ */ #if STM32_PLL3_REF_CK < STM32_PLLIN_THRESHOLD1 /* Check for medium range.*/ -#if STM32_PLL3_VCO_CK < STM32_PLLVCO_MEDIUM_MIN) || (STM32_PLL3_VCO_CK > STM32_PLLVCO_MEDIUM_MAX) +#if (STM32_PLL3_VCO_CK < STM32_PLLVCO_MEDIUM_MIN) || (STM32_PLL3_VCO_CK > STM32_PLLVCO_MEDIUM_MAX) #error "STM32_PLL3_VCO_CK outside acceptable range (STM32_PLLVCO_MEDIUM_MIN..STM32_PLLVCO_MEDIUM_MAX)" #endif diff --git a/readme.txt b/readme.txt index 4c9925cbc4..7978bc78e3 100644 --- a/readme.txt +++ b/readme.txt @@ -78,6 +78,7 @@ DHQC. - NEW: Reworked STM32 SDMMCv1 and SDMMCv2 drivers, better timeout and clock handling, improved speed for aligned buffers. +- FIX: Fixed syntax errors in STM32H7xx/hal_lld_type2.h (bug #1259). - FIX: Fixed unwanted reset of cache on STM32H7xx (bug #1258). - FIX: Fixed invalid HSIDIV in STM32Ggxx clocks initialization (bug #1257). - FIX: Fixed incorrect RTC initialization on STM32G4/L4/L4+ (bug #1256). From acaa683a8550f56d3aa807435b6ef4858c21d9ed Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 20 Apr 2023 19:23:02 +0100 Subject: [PATCH 57/87] ARMCMx: remove instram startup code --- .../startup/ARMCMx/compilers/GCC/crt0_v7m.S | 4 ---- os/common/startup/ARMCMx/compilers/GCC/crt1.c | 24 ------------------- 2 files changed, 28 deletions(-) diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S b/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S index e617c41f57..4abe00a999 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S +++ b/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S @@ -260,10 +260,6 @@ _crt0_entry: msr CONTROL, r0 isb -#if CRT0_INIT_RAMFUNCS == TRUE - bl __init_ramfunc_area -#endif - #if CRT0_INIT_CORE == TRUE /* Core initialization.*/ bl __cpu_init diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt1.c b/os/common/startup/ARMCMx/compilers/GCC/crt1.c index a31cb9ff48..1c6cb743ce 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt1.c +++ b/os/common/startup/ARMCMx/compilers/GCC/crt1.c @@ -273,28 +273,4 @@ void __init_ram_areas(void) { #endif #endif } - -#ifndef CRT1_RAMFUNC_ENABLE -#define CRT1_RAMFUNC_ENABLE 0 -#endif - -/** - * @brief Performs the initialization of instruction RAM area. - */ -#if CRT1_RAMFUNC_ENABLE -extern uint32_t __instram_init_text__, __instram_init__, __instram_end__; -#endif -void __init_ramfunc_area(void) { -#if CRT1_RAMFUNC_ENABLE - uint32_t *tp = &__instram_init_text__; - uint32_t *p = &__instram_init__; - - /* Copying initialization data.*/ - while (p < &__instram_end__) { - *p = *tp; - p++; - tp++; - } -#endif -} /** @} */ From 18c3da2ddee92166e6d0b32d16b0ddd2a38f3b72 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 9 Apr 2023 06:27:07 +0000 Subject: [PATCH 58/87] Fixed OSPI reset handling. git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16211 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/hal/ports/STM32/STM32H7xx/hal_lld.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.c b/os/hal/ports/STM32/STM32H7xx/hal_lld.c index c379502ee5..f0c030c077 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.c +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.c @@ -159,14 +159,17 @@ void hal_lld_init(void) { latest writes could be lost.*/ __rccResetAHB1(~RCC_AHB1RSTR_DONOTTOUCH); __rccResetAHB2(~0); - __rccResetAHB3(~(RCC_AHB3RSTR_FMCRST | + __rccResetAHB3(~(RCC_AHB3RSTR_FMCRST | #if defined(STM32_QSPI_NO_RESET) - RCC_AHB3RSTR_QSPIRST | + RCC_AHB3RSTR_QSPIRST | #endif -#if defined(STM32_OSPI_NO_RESET) - RCC_AHB3RSTR_OSPIRST | +#if defined(STM32_OSPI1_NO_RESET) + RCC_AHB3RSTR_OSPI1RST | #endif - 0x80000000U)); /* Was RCC_AHB3RSTR_CPURST in Rev-V.*/ +#if defined(STM32_OSPI2_NO_RESET) + RCC_AHB3RSTR_OSPI2RST | +#endif + 0x80000000U) /* Was RCC_AHB3RSTR_CPURST in Rev-V.*/ __rccResetAHB4(~(RCC_APB4RSTR_SYSCFGRST | STM32_GPIO_EN_MASK)); __rccResetAPB1L(~0); __rccResetAPB1H(~0); From 76aa7116d7d3157a8456293544e03c6e9b980876 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Tue, 25 Apr 2023 13:32:56 +0100 Subject: [PATCH 59/87] Revert "ARMCMx: flush data and memory cache after updating ram init areas" This reverts commit b93470a01be73c9d45800599a839b407361e930c. --- os/common/startup/ARMCMx/compilers/GCC/crt1.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt1.c b/os/common/startup/ARMCMx/compilers/GCC/crt1.c index 1c6cb743ce..783c61ba4c 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt1.c +++ b/os/common/startup/ARMCMx/compilers/GCC/crt1.c @@ -23,11 +23,9 @@ */ #include -#include #include #include "cmparams.h" -#include "cache.h" /*===========================================================================*/ /* Module local definitions. */ @@ -260,17 +258,8 @@ void __init_ram_areas(void) { p++; } rap++; -#if CORTEX_MODEL == 7 - cacheBufferFlush(rap->init_area, CACHE_SIZE_ALIGN(uint8_t, rap->no_init_area - rap->init_area)); -#endif } while (rap < &ram_areas[CRT0_AREAS_NUMBER]); - -#if CORTEX_MODEL == 7 - /* PM0253 - 4.8.7 Cache maintenance design hints and tips - required for self-modifying code */ - SCB_CleanDCache(); - SCB_InvalidateICache(); -#endif #endif } /** @} */ From 3cf2cf26efee669100aa1ca8a8b4674fd7e02eef Mon Sep 17 00:00:00 2001 From: gdisirio Date: Tue, 25 Apr 2023 07:25:24 +0000 Subject: [PATCH 60/87] Completed the no-reset feature for OSPI. git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16229 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/hal/ports/STM32/STM32H7xx/hal_lld.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.c b/os/hal/ports/STM32/STM32H7xx/hal_lld.c index f0c030c077..3ae3fe0841 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.c +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.c @@ -159,15 +159,19 @@ void hal_lld_init(void) { latest writes could be lost.*/ __rccResetAHB1(~RCC_AHB1RSTR_DONOTTOUCH); __rccResetAHB2(~0); - __rccResetAHB3(~(RCC_AHB3RSTR_FMCRST | + __rccResetAHB3(~(RCC_AHB3RSTR_FMCRST | #if defined(STM32_QSPI_NO_RESET) - RCC_AHB3RSTR_QSPIRST | + RCC_AHB3RSTR_QSPIRST | #endif #if defined(STM32_OSPI1_NO_RESET) - RCC_AHB3RSTR_OSPI1RST | + RCC_AHB3RSTR_OSPI1RST | + RCC_AHB3RSTR_IOMNGRRST | + RCC_AHB3RSTR_MDMARST | #endif #if defined(STM32_OSPI2_NO_RESET) - RCC_AHB3RSTR_OSPI2RST | + RCC_AHB3RSTR_OSPI2RST | + RCC_AHB3RSTR_IOMNGRRST | + RCC_AHB3RSTR_MDMARST | #endif 0x80000000U) /* Was RCC_AHB3RSTR_CPURST in Rev-V.*/ __rccResetAHB4(~(RCC_APB4RSTR_SYSCFGRST | STM32_GPIO_EN_MASK)); From 26e3904be651900477de901c52ecb5dd33021057 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Tue, 25 Apr 2023 07:40:50 +0000 Subject: [PATCH 61/87] Fixed bug #1261. git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16230 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/common/startup/ARMCMx/compilers/GCC/crt1.c | 6 ++++++ readme.txt | 2 ++ 2 files changed, 8 insertions(+) diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt1.c b/os/common/startup/ARMCMx/compilers/GCC/crt1.c index 783c61ba4c..ae15b3216e 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt1.c +++ b/os/common/startup/ARMCMx/compilers/GCC/crt1.c @@ -260,6 +260,12 @@ void __init_ram_areas(void) { rap++; } while (rap < &ram_areas[CRT0_AREAS_NUMBER]); +#if CORTEX_MODEL == 7 + /* PM0253 - 4.8.7 Cache maintenance design hints and tips - required + for self-modifying code.*/ + SCB_CleanDCache(); + SCB_InvalidateICache(); +#endif #endif } /** @} */ diff --git a/readme.txt b/readme.txt index 7978bc78e3..0a8b08db11 100644 --- a/readme.txt +++ b/readme.txt @@ -78,6 +78,8 @@ DHQC. - NEW: Reworked STM32 SDMMCv1 and SDMMCv2 drivers, better timeout and clock handling, improved speed for aligned buffers. +- FIX: Fixed missing cache management during Cortex-M RAM initializations + (bug #1261). - FIX: Fixed syntax errors in STM32H7xx/hal_lld_type2.h (bug #1259). - FIX: Fixed unwanted reset of cache on STM32H7xx (bug #1258). - FIX: Fixed invalid HSIDIV in STM32Ggxx clocks initialization (bug #1257). From 2696de2e47f8d83a3e4d24c4942cc4a8f5342cee Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 9 Apr 2023 06:32:07 +0000 Subject: [PATCH 62/87] git-svn-id: https://svn.code.sf.net/p/chibios/code/branches/stable_21.11.x@16212 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/hal/ports/STM32/STM32H7xx/hal_lld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.c b/os/hal/ports/STM32/STM32H7xx/hal_lld.c index 3ae3fe0841..1ec2941639 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.c +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.c @@ -173,7 +173,7 @@ void hal_lld_init(void) { RCC_AHB3RSTR_IOMNGRRST | RCC_AHB3RSTR_MDMARST | #endif - 0x80000000U) /* Was RCC_AHB3RSTR_CPURST in Rev-V.*/ + 0x80000000U)); /* Was RCC_AHB3RSTR_CPURST in Rev-V.*/ __rccResetAHB4(~(RCC_APB4RSTR_SYSCFGRST | STM32_GPIO_EN_MASK)); __rccResetAPB1L(~0); __rccResetAPB1H(~0); From a287e67d8b1652025cd0fe9ffa806aeaabd3ec6d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 13 May 2023 11:58:23 +1000 Subject: [PATCH 63/87] mmc_spi: added bus acquire hooks needed to ensure we get DMA lock before the bus lock, so we don't deadlock with another device on the same bus --- os/hal/src/hal_mmc_spi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/os/hal/src/hal_mmc_spi.c b/os/hal/src/hal_mmc_spi.c index 990927164a..e034556fe0 100644 --- a/os/hal/src/hal_mmc_spi.c +++ b/os/hal/src/hal_mmc_spi.c @@ -35,6 +35,8 @@ #include "spi_hook.h" #define spiStart spiStartHook #define spiStop spiStopHook +#define spiAcquireBus spiAcquireBusHook +#define spiReleaseBus spiReleaseBusHook #define spiSelect spiSelectHook #define spiUnselect spiUnselectHook #define spiIgnore spiIgnoreHook From a3f3e0154b65c7632457c4e689ffea1cc8567de5 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 3 Jun 2023 10:30:05 +1000 Subject: [PATCH 64/87] FATFS: disable ff_memalloc function for ArduPilot move up to HAL_ChibiOS level --- ext/fatfs/source/ffsystem.c | 3 ++- os/various/fatfs_bindings/fatfs_syscall.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ext/fatfs/source/ffsystem.c b/ext/fatfs/source/ffsystem.c index ad5d73770f..21c770f389 100644 --- a/ext/fatfs/source/ffsystem.c +++ b/ext/fatfs/source/ffsystem.c @@ -13,6 +13,7 @@ /* Allocate a memory block */ /*------------------------------------------------------------------------*/ +#ifndef _ARDUPILOT_ void* ff_memalloc ( /* Returns pointer to the allocated memory block (null if not enough core) */ UINT msize /* Number of bytes to allocate */ ) @@ -20,7 +21,6 @@ void* ff_memalloc ( /* Returns pointer to the allocated memory block (null if no return malloc(msize); /* Allocate a new memory block with POSIX API */ } - /*------------------------------------------------------------------------*/ /* Free a memory block */ /*------------------------------------------------------------------------*/ @@ -31,6 +31,7 @@ void ff_memfree ( { free(mblock); /* Free the memory block with POSIX API */ } +#endif // _ARDUPILOT_ #endif diff --git a/os/various/fatfs_bindings/fatfs_syscall.c b/os/various/fatfs_bindings/fatfs_syscall.c index c712c03f80..7366c2b7bd 100644 --- a/os/various/fatfs_bindings/fatfs_syscall.c +++ b/os/various/fatfs_bindings/fatfs_syscall.c @@ -67,6 +67,7 @@ void ff_rel_grant(FF_SYNC_t sobj) { #endif /* FF_FS_REENTRANT */ #if FF_USE_LFN == 3 /* LFN with a working buffer on the heap */ +#ifndef _ARDUPILOT_ /*------------------------------------------------------------------------*/ /* Allocate a memory block */ /*------------------------------------------------------------------------*/ @@ -82,4 +83,5 @@ void ff_memfree(void *mblock) { free(mblock); } +#endif // _ARDUPILOT_ #endif /* FF_USE_LFN == 3 */ From 1aabf3b56a900a5e3d879eda00832d330596c5b4 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 15 Jun 2023 21:37:19 +1000 Subject: [PATCH 65/87] added chMtxForceReleaseS this provides a mechanism to force release a mutex --- os/rt/include/chmtx.h | 1 + os/rt/src/chmtx.c | 94 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/os/rt/include/chmtx.h b/os/rt/include/chmtx.h index 360f6fa695..965e35bdd7 100644 --- a/os/rt/include/chmtx.h +++ b/os/rt/include/chmtx.h @@ -108,6 +108,7 @@ extern "C" { void chMtxUnlockS(mutex_t *mp); void chMtxUnlockAll(void); void chMtxUnlockAllS(void); + void chMtxForceReleaseS(mutex_t *mp); #ifdef __cplusplus } #endif diff --git a/os/rt/src/chmtx.c b/os/rt/src/chmtx.c index 4d1c463169..20b8bd496c 100644 --- a/os/rt/src/chmtx.c +++ b/os/rt/src/chmtx.c @@ -327,6 +327,13 @@ void chMtxUnlock(mutex_t *mp) { thread_t *currtp = chThdGetSelfX(); mutex_t *lmp; + if (mp->owner != currtp) { + /* + this can only happen if we have force relased a mutex + */ + return; + } + chDbgCheck(mp != NULL); chSysLock(); @@ -414,6 +421,13 @@ void chMtxUnlockS(mutex_t *mp) { thread_t *currtp = chThdGetSelfX(); mutex_t *lmp; + if (mp->owner != currtp) { + /* + this can only happen if we have force relased a mutex + */ + return; + } + chDbgCheckClassS(); chDbgCheck(mp != NULL); @@ -535,6 +549,86 @@ void chMtxUnlockAll(void) { chSysUnlock(); } +/** + * @brief Force release a mutex + * @note Use of this function violates locking principles and can result in data corruption. + * The purpose of this function is to allow some level of recovery from a deadlock + * caused by a lock ordering violation. Unlike other chMtxUnlockX calls this function + * may be called from a thread that does not own the mutex. It is intended to be called from + * a high priority supervisor thread that has detected an unrecoverable deadlock on systems + * where watchdog recovery is not appropriate. + * If recursive locks are enabled then the lock counter is zeroed, forcing complete release + */ +void chMtxForceReleaseS(mutex_t *mp) +{ + chDbgCheckClassS(); + thread_t *currtp = mp->owner; + chDbgAssert(currtp->mtxlist != NULL, "owned mutexes list empty"); + chDbgAssert(currtp->mtxlist->owner == currtp, "ownership failure"); + +#if CH_CFG_USE_MUTEXES_RECURSIVE == TRUE + mp->cnt = 0; +#endif + + /* + we need to de-link the mutex from this threads mutex list + */ + if (currtp->mtxlist == mp) { + // simple case, this mutex was most recently acquired by the thread + currtp->mtxlist = mp->next; + } else { + for (mutex_t *m = currtp->mtxlist; m; m = m->next) { + if (m->next == mp) { + m->next = mp->next; + } + } + } + + /* If a thread is waiting on the mutex then the fun part begins.*/ + if (chMtxQueueNotEmptyS(mp)) { + thread_t *tp; + + /* Recalculates the optimal thread priority by scanning the owned + mutexes list.*/ + tprio_t newprio = currtp->realprio; + mutex_t *lmp = currtp->mtxlist; + while (lmp != NULL) { + /* If the highest priority thread waiting in the mutexes list has a + greater priority than the current thread base priority then the + final priority will have at least that priority.*/ + if (chMtxQueueNotEmptyS(lmp) && + ((threadref(lmp->queue.next))->hdr.pqueue.prio > newprio)) { + newprio = (threadref(lmp->queue.next))->hdr.pqueue.prio; + } + lmp = lmp->next; + } + + /* Assigns to the current thread the highest priority among all the + waiting threads.*/ + currtp->hdr.pqueue.prio = newprio; + + /* Awakens the highest priority thread waiting for the unlocked mutex and + assigns the mutex to it.*/ +#if CH_CFG_USE_MUTEXES_RECURSIVE == TRUE + mp->cnt = (cnt_t)1; +#endif + tp = threadref(ch_queue_fifo_remove(&mp->queue)); + mp->owner = tp; + mp->next = tp->mtxlist; + tp->mtxlist = mp; + + /* Note, not using chSchWakeupS() because that function expects the + current thread to have the higher or equal priority than the ones + in the ready list. This is not necessarily true here because we + just changed priority.*/ + (void) chSchReadyI(tp); + chSchRescheduleS(); + } + else { + mp->owner = NULL; + } +} + #endif /* CH_CFG_USE_MUTEXES == TRUE */ /** @} */ From 7fd248edb9643bb517c424e4ffdf028639851b78 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Thu, 22 Jun 2023 19:15:00 +0100 Subject: [PATCH 66/87] SYSTICKv1: add support for TIM1 and TIM8 --- os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.c | 56 ++++++++- os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.h | 112 +++++++++++++++++- 2 files changed, 165 insertions(+), 3 deletions(-) diff --git a/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.c b/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.c index d905e833d8..33106419f9 100644 --- a/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.c +++ b/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.c @@ -42,7 +42,34 @@ #define ST_ARR_INIT 0x0000FFFFU #endif -#if STM32_ST_USE_TIMER == 2 +#if STM32_ST_USE_TIMER == 1 + +#if !STM32_HAS_TIM1 +#error "TIM1 not present in the selected device" +#endif + +#if (OSAL_ST_RESOLUTION == 32) && !STM32_TIM1_IS_32BITS +#error "TIM1 is not a 32bits timer" +#endif + +#define ST_HANDLER STM32_TIM1_CC_HANDLER +#define ST_NUMBER STM32_TIM1_CC_NUMBER +#define ST_CLOCK_SRC STM32_TIMCLK1 +#define ST_ENABLE_CLOCK() rccEnableTIM1(true) +#if defined(STM32F1XX) +#define ST_ENABLE_STOP() DBGMCU->CR |= DBGMCU_CR_DBG_TIM1_STOP +#elif defined(STM32L4XX) || defined(STM32L4XXP) || defined(STM32G4XX) || \ + defined(STM32L5XX) || defined(STM32WBXX) || defined(STM32WLXX) +#define ST_ENABLE_STOP() DBGMCU->APB1FZR1 |= DBGMCU_APB1FZR1_DBG_TIM1_STOP +#elif defined(STM32G0XX) +#define ST_ENABLE_STOP() DBG->APBFZ1 |= DBG_APB_FZ1_DBG_TIM1_STOP +#elif defined(STM32H7XX) +#define ST_ENABLE_STOP() DBGMCU->APB1LFZ1 |= DBGMCU_APB1LFZ1_DBG_TIM1 +#else +#define ST_ENABLE_STOP() DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_TIM1_STOP +#endif + +#elif STM32_ST_USE_TIMER == 2 #if !STM32_HAS_TIM2 #error "TIM2 not present in the selected device" @@ -146,6 +173,33 @@ #define ST_ENABLE_STOP() DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_TIM5_STOP #endif +#elif STM32_ST_USE_TIMER == 8 + +#if !STM32_HAS_TIM8 +#error "TIM8 not present in the selected device" +#endif + +#if (OSAL_ST_RESOLUTION == 32) && !STM32_TIM2_IS_32BITS +#error "TIM8 is not a 32bits timer" +#endif + +#define ST_HANDLER STM32_TIM8_CC_HANDLER +#define ST_NUMBER STM32_TIM8_CC_NUMBER +#define ST_CLOCK_SRC STM32_TIMCLK1 +#define ST_ENABLE_CLOCK() rccEnableTIM8(true) +#if defined(STM32F1XX) +#define ST_ENABLE_STOP() DBGMCU->CR |= DBGMCU_CR_DBG_TIM8_STOP +#elif defined(STM32L4XX) || defined(STM32L4XXP) || defined(STM32G4XX) || \ + defined(STM32L5XX) || defined(STM32WBXX) || defined(STM32WLXX) +#define ST_ENABLE_STOP() DBGMCU->APB1FZR1 |= DBGMCU_APB1FZR1_DBG_TIM8_STOP +#elif defined(STM32G0XX) +#define ST_ENABLE_STOP() DBG->APBFZ1 |= DBG_APB_FZ1_DBG_TIM8_STOP +#elif defined(STM32H7XX) +#define ST_ENABLE_STOP() DBGMCU->APB1LFZ1 |= DBGMCU_APB1LFZ1_DBG_TIM8 +#else +#define ST_ENABLE_STOP() DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_TIM8_STOP +#endif + #elif STM32_ST_USE_TIMER == 9 #if !STM32_HAS_TIM9 diff --git a/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.h b/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.h index dcfefccc64..b82d9ce096 100644 --- a/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.h +++ b/os/hal/ports/STM32/LLD/SYSTICKv1/hal_st_lld.h @@ -50,7 +50,7 @@ * @brief TIMx unit (by number) to be used for free running operations. * @note You must select a 32 bits timer if a 32 bits @p systick_t type * is required. - * @note Timers 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, + * @note Timers 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, * 21 and 22 are supported. */ #if !defined(STM32_ST_USE_TIMER) || defined(__DOXYGEN__) @@ -78,6 +78,10 @@ /* This has to go after transition to shared handlers is complete for all platforms.*/ +#if !defined(STM32_HAS_TIM1) +#define STM32_HAS_TIM1 FALSE +#endif + #if !defined(STM32_HAS_TIM2) #define STM32_HAS_TIM2 FALSE #endif @@ -94,6 +98,10 @@ #define STM32_HAS_TIM5 FALSE #endif +#if !defined(STM32_HAS_TIM8) +#define STM32_HAS_TIM8 FALSE +#endif + #if !defined(STM32_HAS_TIM9) #define STM32_HAS_TIM9 FALSE #endif @@ -141,7 +149,40 @@ #if OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING -#if STM32_ST_USE_TIMER == 2 +#if STM32_ST_USE_TIMER == 1 + +#if defined(STM32_TIM1_IS_USED) +#error "ST requires TIM1 but the timer is already used" +#else +#define STM32_TIM1_IS_USED +#endif + +#if defined(STM32_TIM1_SUPPRESS_ISR) +#define STM32_SYSTICK_SUPPRESS_ISR +#endif + +#define STM32_ST_TIM STM32_TIM1 +#define ST_LLD_NUM_ALARMS STM32_TIM1_CHANNELS +#define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 TRUE +#define STM32_ST_USE_TIM2 FALSE +#define STM32_ST_USE_TIM3 FALSE +#define STM32_ST_USE_TIM4 FALSE +#define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE +#define STM32_ST_USE_TIM9 FALSE +#define STM32_ST_USE_TIM10 FALSE +#define STM32_ST_USE_TIM11 FALSE +#define STM32_ST_USE_TIM12 FALSE +#define STM32_ST_USE_TIM13 FALSE +#define STM32_ST_USE_TIM14 FALSE +#define STM32_ST_USE_TIM15 FALSE +#define STM32_ST_USE_TIM16 FALSE +#define STM32_ST_USE_TIM17 FALSE +#define STM32_ST_USE_TIM21 FALSE +#define STM32_ST_USE_TIM22 FALSE + +#elif STM32_ST_USE_TIMER == 2 #if defined(STM32_TIM2_IS_USED) #error "ST requires TIM2 but the timer is already used" @@ -156,10 +197,12 @@ #define STM32_ST_TIM STM32_TIM2 #define ST_LLD_NUM_ALARMS STM32_TIM2_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 TRUE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -187,10 +230,12 @@ #define STM32_ST_TIM STM32_TIM3 #define ST_LLD_NUM_ALARMS STM32_TIM3_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 TRUE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -218,10 +263,12 @@ #define STM32_ST_TIM STM32_TIM4 #define ST_LLD_NUM_ALARMS STM32_TIM4_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 TRUE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -249,10 +296,45 @@ #define STM32_ST_TIM STM32_TIM5 #define ST_LLD_NUM_ALARMS STM32_TIM5_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 TRUE +#define STM32_ST_USE_TIM8 FALSE +#define STM32_ST_USE_TIM9 FALSE +#define STM32_ST_USE_TIM10 FALSE +#define STM32_ST_USE_TIM11 FALSE +#define STM32_ST_USE_TIM12 FALSE +#define STM32_ST_USE_TIM13 FALSE +#define STM32_ST_USE_TIM14 FALSE +#define STM32_ST_USE_TIM15 FALSE +#define STM32_ST_USE_TIM16 FALSE +#define STM32_ST_USE_TIM17 FALSE +#define STM32_ST_USE_TIM21 FALSE +#define STM32_ST_USE_TIM22 FALSE + +#elif STM32_ST_USE_TIMER == 8 + +#if defined(STM32_TIM8_IS_USED) +#error "ST requires TIM8 but the timer is already used" +#else +#define STM32_TIM8_IS_USED +#endif + +#if defined(STM32_TIM8_SUPPRESS_ISR) +#define STM32_SYSTICK_SUPPRESS_ISR +#endif + +#define STM32_ST_TIM STM32_TIM8 +#define ST_LLD_NUM_ALARMS STM32_TIM8_CHANNELS +#define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE +#define STM32_ST_USE_TIM2 FALSE +#define STM32_ST_USE_TIM3 FALSE +#define STM32_ST_USE_TIM4 FALSE +#define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 TRUE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -280,10 +362,12 @@ #define STM32_ST_TIM STM32_TIM9 #define ST_LLD_NUM_ALARMS STM32_TIM9_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 TRUE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -311,10 +395,12 @@ #define STM32_ST_TIM STM32_TIM10 #define ST_LLD_NUM_ALARMS STM32_TIM10_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 TRUE #define STM32_ST_USE_TIM11 FALSE @@ -342,10 +428,12 @@ #define STM32_ST_TIM STM32_TIM11 #define ST_LLD_NUM_ALARMS STM32_TIM11_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 TRUE @@ -373,10 +461,12 @@ #define STM32_ST_TIM STM32_TIM12 #define ST_LLD_NUM_ALARMS STM32_TIM12_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -404,10 +494,12 @@ #define STM32_ST_TIM STM32_TIM13 #define ST_LLD_NUM_ALARMS STM32_TIM13_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -435,10 +527,12 @@ #define STM32_ST_TIM STM32_TIM14 #define ST_LLD_NUM_ALARMS STM32_TIM14_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -466,10 +560,12 @@ #define STM32_ST_TIM STM32_TIM15 #define ST_LLD_NUM_ALARMS STM32_TIM15_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -497,10 +593,12 @@ #define STM32_ST_TIM STM32_TIM16 #define ST_LLD_NUM_ALARMS STM32_TIM16_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -528,10 +626,12 @@ #define STM32_ST_TIM STM32_TIM17 #define ST_LLD_NUM_ALARMS STM32_TIM17_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -558,10 +658,12 @@ #define STM32_ST_TIM STM32_TIM21 #define ST_LLD_NUM_ALARMS STM32_TIM21_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -589,10 +691,12 @@ #define STM32_ST_TIM STM32_TIM22 #define ST_LLD_NUM_ALARMS STM32_TIM22_CHANNELS #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -622,10 +726,12 @@ #elif OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC #define STM32_ST_USE_SYSTICK TRUE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE @@ -641,10 +747,12 @@ #else #define STM32_ST_USE_SYSTICK FALSE +#define STM32_ST_USE_TIM1 FALSE #define STM32_ST_USE_TIM2 FALSE #define STM32_ST_USE_TIM3 FALSE #define STM32_ST_USE_TIM4 FALSE #define STM32_ST_USE_TIM5 FALSE +#define STM32_ST_USE_TIM8 FALSE #define STM32_ST_USE_TIM9 FALSE #define STM32_ST_USE_TIM10 FALSE #define STM32_ST_USE_TIM11 FALSE From 15d37beaf350489d80236d5fa2354adfe422d273 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 30 May 2023 12:53:13 +1000 Subject: [PATCH 67/87] lwip: update to lwip stable 2.1.3 --- .gitmodules | 3 +++ ext/lwip | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 ext/lwip diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..7165073cc5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ext/lwip"] + path = ext/lwip + url = https://github.com/ArduPilot/lwip.git diff --git a/ext/lwip b/ext/lwip new file mode 160000 index 0000000000..6ca936f6b5 --- /dev/null +++ b/ext/lwip @@ -0,0 +1 @@ +Subproject commit 6ca936f6b588cee702c638eee75c2436e6cf75de From ddb16b0bf009ba9dc59cca2e08a610c2e8ac499d Mon Sep 17 00:00:00 2001 From: Tom Pittenger Date: Mon, 3 Jul 2023 16:02:37 -0700 Subject: [PATCH 68/87] lwip_bindings: don't use old Sleep api --- os/various/lwip_bindings/lwipthread.c | 1 - 1 file changed, 1 deletion(-) diff --git a/os/various/lwip_bindings/lwipthread.c b/os/various/lwip_bindings/lwipthread.c index 363615cb50..dceb53bac3 100644 --- a/os/various/lwip_bindings/lwipthread.c +++ b/os/various/lwip_bindings/lwipthread.c @@ -374,7 +374,6 @@ static THD_FUNCTION(lwip_thread, p) { result = netifapi_netif_add(&thisif, &ip, &netmask, &gateway, NULL, ethernetif_init, tcpip_input); if (result != ERR_OK) { - chThdSleepMilliseconds(1000); // Give some time to print any other diagnostics. osalSysHalt("netif_add error"); // Not sure what else we can do if an error occurs here. }; From d6d028ad5f283f77a245cea42a50f44cf3fddaf7 Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Thu, 3 Feb 2022 22:24:06 +0530 Subject: [PATCH 69/87] lwip_bindings: add IPV6 functions as well --- os/various/lwip_bindings/lwip.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/various/lwip_bindings/lwip.mk b/os/various/lwip_bindings/lwip.mk index ec1f44cf99..41e69ea61c 100644 --- a/os/various/lwip_bindings/lwip.mk +++ b/os/various/lwip_bindings/lwip.mk @@ -10,7 +10,7 @@ LWBINDSRC = \ # Add blocks of files from Filelists.mk as required for enabled options -LWSRC_REQUIRED = $(COREFILES) $(CORE4FILES) $(APIFILES) $(LWBINDSRC) $(NETIFFILES) +LWSRC_REQUIRED = $(COREFILES) $(CORE6FILES) $(CORE4FILES) $(APIFILES) $(LWBINDSRC) $(NETIFFILES) LWSRC_EXTRAS ?= $(HTTPFILES) LWINC = \ From d47099ff73594bb421df02a5fc129f57275671ed Mon Sep 17 00:00:00 2001 From: Tom Pittenger Date: Fri, 24 Mar 2023 17:47:36 +1100 Subject: [PATCH 70/87] add lwipthread.c accessors lwipGetIp(), lwipGetNetmask(), lwipGetGateway() --- os/various/lwip_bindings/lwipthread.c | 4 ++++ os/various/lwip_bindings/lwipthread.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/os/various/lwip_bindings/lwipthread.c b/os/various/lwip_bindings/lwipthread.c index dceb53bac3..d3a80c4f20 100644 --- a/os/various/lwip_bindings/lwipthread.c +++ b/os/various/lwip_bindings/lwipthread.c @@ -527,4 +527,8 @@ void lwipReconfigure(const lwipreconf_opts_t *opts) chSemWait(¶ms.completion); } +uint32_t lwipGetIp(void) { return ip.addr; } +uint32_t lwipGetNetmask(void) { return netmask.addr; } +uint32_t lwipGetGateway(void) { return gateway.addr; } + /** @} */ diff --git a/os/various/lwip_bindings/lwipthread.h b/os/various/lwip_bindings/lwipthread.h index d3f991637a..ca365c2209 100644 --- a/os/various/lwip_bindings/lwipthread.h +++ b/os/various/lwip_bindings/lwipthread.h @@ -266,6 +266,9 @@ extern "C" { void lwipDefaultLinkDownCB(void *p); void lwipInit(const lwipthread_opts_t *opts); void lwipReconfigure(const lwipreconf_opts_t *opts); + uint32_t lwipGetIp(void); + uint32_t lwipGetNetmask(void); + uint32_t lwipGetGateway(void); #ifdef __cplusplus } #endif From 7d29214484871166912786249a28979bb62db85b Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Sat, 25 Mar 2023 17:39:49 +1100 Subject: [PATCH 71/87] use thread_create_alloc instead of chThdCreateFromHeap --- os/various/lwip_bindings/arch/sys_arch.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/os/various/lwip_bindings/arch/sys_arch.c b/os/various/lwip_bindings/arch/sys_arch.c index 18f4605c1a..a96dd8061f 100644 --- a/os/various/lwip_bindings/arch/sys_arch.c +++ b/os/various/lwip_bindings/arch/sys_arch.c @@ -238,7 +238,10 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio) { thread_t *tp; -#if !CH_LWIP_USE_MEM_POOLS +#if CH_CFG_USE_DYNAMIC == TRUE + tp = thread_create_alloc(THD_WORKING_AREA_SIZE(stacksize), + name, prio, (tfunc_t)thread, arg); +#elif !CH_LWIP_USE_MEM_POOLS tp = chThdCreateFromHeap(NULL, THD_WORKING_AREA_SIZE(stacksize), name, prio, (tfunc_t)thread, arg); #else From b295302933e3ddf4f164af606ef3fc1750a6730d Mon Sep 17 00:00:00 2001 From: Tom Pittenger Date: Mon, 3 Jul 2023 16:06:19 -0700 Subject: [PATCH 72/87] lwip_bindings: use millis32 method impelmented in ardupilot --- os/various/lwip_bindings/arch/sys_arch.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/os/various/lwip_bindings/arch/sys_arch.c b/os/various/lwip_bindings/arch/sys_arch.c index a96dd8061f..46de88c32a 100644 --- a/os/various/lwip_bindings/arch/sys_arch.c +++ b/os/various/lwip_bindings/arch/sys_arch.c @@ -63,6 +63,10 @@ #include "arch/sys_arch.h" #include "lwipopts.h" +#ifdef _ARDUPILOT_ +#include "hrt.h" +#endif + #ifndef CH_LWIP_USE_MEM_POOLS #define CH_LWIP_USE_MEM_POOLS FALSE #endif @@ -264,6 +268,9 @@ void sys_arch_unprotect(sys_prot_t pval) { u32_t sys_now(void) { +#ifdef _ARDUPILOT_ + return hrt_millis32(); +#else #if OSAL_ST_FREQUENCY == 1000 return (u32_t)chVTGetSystemTimeX(); #elif (OSAL_ST_FREQUENCY / 1000) >= 1 && (OSAL_ST_FREQUENCY % 1000) == 0 @@ -273,4 +280,5 @@ u32_t sys_now(void) { #else return (u32_t)(((u64_t)(chVTGetSystemTimeX() - 1) * 1000) / OSAL_ST_FREQUENCY) + 1; #endif +#endif // _ARDUPILOT_ } From e26e99653f508f485dac156bf99fd6fd1ec82c6d Mon Sep 17 00:00:00 2001 From: Tom Pittenger Date: Sun, 26 Mar 2023 14:07:48 +1100 Subject: [PATCH 73/87] Enable LwIP Apps --- os/various/lwip_bindings/lwip.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/various/lwip_bindings/lwip.mk b/os/various/lwip_bindings/lwip.mk index 41e69ea61c..8626b96a73 100644 --- a/os/various/lwip_bindings/lwip.mk +++ b/os/various/lwip_bindings/lwip.mk @@ -10,7 +10,7 @@ LWBINDSRC = \ # Add blocks of files from Filelists.mk as required for enabled options -LWSRC_REQUIRED = $(COREFILES) $(CORE6FILES) $(CORE4FILES) $(APIFILES) $(LWBINDSRC) $(NETIFFILES) +LWSRC_REQUIRED = $(COREFILES) $(CORE6FILES) $(CORE4FILES) $(APIFILES) $(LWBINDSRC) $(NETIFFILES) $(LWIPAPPFILES) LWSRC_EXTRAS ?= $(HTTPFILES) LWINC = \ From faf7b368ef00dcb5bfa9319638aee15c13df3757 Mon Sep 17 00:00:00 2001 From: Siddharth Purohit Date: Wed, 29 Mar 2023 14:42:47 +1100 Subject: [PATCH 74/87] use malloc and free for lwip when in ardupilot --- os/various/lwip_bindings/arch/sys_arch.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/os/various/lwip_bindings/arch/sys_arch.c b/os/various/lwip_bindings/arch/sys_arch.c index 46de88c32a..c950f9209c 100644 --- a/os/various/lwip_bindings/arch/sys_arch.c +++ b/os/various/lwip_bindings/arch/sys_arch.c @@ -83,7 +83,10 @@ void sys_init(void) { err_t sys_sem_new(sys_sem_t *sem, u8_t count) { -#if !CH_LWIP_USE_MEM_POOLS +#ifdef _ARDUPILOT_ + // use malloc + *sem = (sys_sem_t)malloc(sizeof(semaphore_t)); +#elif !CH_LWIP_USE_MEM_POOLS *sem = chHeapAlloc(NULL, sizeof(semaphore_t)); #else *sem = chPoolAlloc(&lwip_sys_arch_sem_pool); @@ -102,7 +105,10 @@ err_t sys_sem_new(sys_sem_t *sem, u8_t count) { void sys_sem_free(sys_sem_t *sem) { -#if !CH_LWIP_USE_MEM_POOLS +#ifdef _ARDUPILOT_ + // use malloc + free(*sem); +#elif !CH_LWIP_USE_MEM_POOLS chHeapFree(*sem); #else chPoolFree(&lwip_sys_arch_sem_pool, *sem); @@ -152,7 +158,10 @@ void sys_sem_set_invalid(sys_sem_t *sem) { err_t sys_mbox_new(sys_mbox_t *mbox, int size) { -#if !CH_LWIP_USE_MEM_POOLS +#ifdef _ARDUPILOT_ + // use malloc + *mbox = (sys_mbox_t)malloc(sizeof(mailbox_t) + sizeof(msg_t) * size); +#elif !CH_LWIP_USE_MEM_POOLS *mbox = chHeapAlloc(NULL, sizeof(mailbox_t) + sizeof(msg_t) * size); #else *mbox = chPoolAlloc(&lwip_sys_arch_mbox_pool); @@ -182,7 +191,10 @@ void sys_mbox_free(sys_mbox_t *mbox) { SYS_STATS_INC(mbox.err); chMBReset(*mbox); } -#if !CH_LWIP_USE_MEM_POOLS +#ifdef _ARDUPILOT_ + // use malloc + free(*mbox); +#elif !CH_LWIP_USE_MEM_POOLS chHeapFree(*mbox); #else chPoolFree(&lwip_sys_arch_mbox_pool, *mbox); @@ -242,7 +254,7 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio) { thread_t *tp; -#if CH_CFG_USE_DYNAMIC == TRUE +#ifdef _ARDUPILOT_ tp = thread_create_alloc(THD_WORKING_AREA_SIZE(stacksize), name, prio, (tfunc_t)thread, arg); #elif !CH_LWIP_USE_MEM_POOLS From 061bf909407a13d1cbfa77a53d3f975cd898534a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 29 May 2023 18:44:05 +1000 Subject: [PATCH 75/87] mac: allow macInit() to fail if phy not detected then return false instead of halting --- os/hal/include/hal_mac.h | 2 +- os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c | 9 +++++++-- os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.h | 2 +- os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c | 16 ++++++++++------ os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h | 2 +- os/hal/src/hal_mac.c | 4 ++-- os/hal/templates/hal_mac_lld.c | 3 ++- os/hal/templates/hal_mac_lld.h | 2 +- 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/os/hal/include/hal_mac.h b/os/hal/include/hal_mac.h index bbb0d8aed3..f0b4a52acd 100644 --- a/os/hal/include/hal_mac.h +++ b/os/hal/include/hal_mac.h @@ -427,7 +427,7 @@ struct hal_mac_receive_descriptor { #ifdef __cplusplus extern "C" { #endif - void macInit(void); + bool macInit(void); void macObjectInit(MACDriver *macp); msg_t macStart(MACDriver *macp, const MACConfig *config); void macStop(MACDriver *macp); diff --git a/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c b/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c index 5fa8ea96d8..babdc81e73 100644 --- a/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c +++ b/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.c @@ -225,7 +225,7 @@ OSAL_IRQ_HANDLER(STM32_ETH_HANDLER) { * * @notapi */ -void mac_lld_init(void) { +bool mac_lld_init(void) { unsigned i; macObjectInit(ÐD1); @@ -271,7 +271,10 @@ void mac_lld_init(void) { #if defined(BOARD_PHY_ADDRESS) ETHD1.phyaddr = BOARD_PHY_ADDRESS << 11; #else - mii_find_phy(ÐD1); + if (!mii_find_phy(ÐD1)) { + rccDisableETH(); + return false; + } #endif #if defined(BOARD_PHY_RESET) @@ -294,6 +297,8 @@ void mac_lld_init(void) { /* MAC clocks stopped again.*/ rccDisableETH(); + + return true; } /** diff --git a/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.h b/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.h index 7e605583b5..83655680d0 100644 --- a/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.h +++ b/os/hal/ports/STM32/LLD/MACv1/hal_mac_lld.h @@ -265,7 +265,7 @@ extern "C" { #endif void mii_write(MACDriver *macp, uint32_t reg, uint32_t value); uint32_t mii_read(MACDriver *macp, uint32_t reg); - void mac_lld_init(void); + bool mac_lld_init(void); void mac_lld_start(MACDriver *macp); void mac_lld_stop(MACDriver *macp); msg_t mac_lld_get_transmit_descriptor(MACDriver *macp, diff --git a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c index 75b12bd6f2..f946930f4e 100644 --- a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c +++ b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c @@ -181,7 +181,7 @@ uint32_t mii_read(MACDriver *macp, uint32_t reg) { * * @param[in] macp pointer to the @p MACDriver object */ -static void mii_find_phy(MACDriver *macp) { +static bool mii_find_phy(MACDriver *macp) { uint32_t i; #if STM32_MAC_PHY_TIMEOUT > 0 @@ -194,15 +194,14 @@ static void mii_find_phy(MACDriver *macp) { ETH->MACMDIODR = (i << ETH_MACMDIODR_RA_Pos) | MACMDIODR_CR; if ((mii_read(macp, MII_PHYSID1) == (BOARD_PHY_ID >> 16U)) && ((mii_read(macp, MII_PHYSID2) & 0xFFF0U) == (BOARD_PHY_ID & 0xFFF0U))) { - return; + return true; } } #if STM32_MAC_PHY_TIMEOUT > 0 n--; } while (n > 0U); #endif - /* Wrong or defective board.*/ - osalSysHalt("MAC failure"); + return false; } #endif @@ -271,7 +270,7 @@ OSAL_IRQ_HANDLER(STM32_ETH_HANDLER) { * * @notapi */ -void mac_lld_init(void) { +bool mac_lld_init(void) { unsigned i; macObjectInit(ÐD1); @@ -314,7 +313,10 @@ void mac_lld_init(void) { #if defined(BOARD_PHY_ADDRESS) ETHD1.phyaddr = BOARD_PHY_ADDRESS << 11; #else - mii_find_phy(ÐD1); + if (!mii_find_phy(ÐD1)) { + rccDisableETH(); + return false; + } #endif #if defined(BOARD_PHY_RESET) @@ -337,6 +339,8 @@ void mac_lld_init(void) { /* MAC clocks stopped again.*/ rccDisableETH(); + + return true; } /** diff --git a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h index 1521e59f34..c7cb35eee3 100644 --- a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h +++ b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h @@ -281,7 +281,7 @@ extern "C" { #endif void mii_write(MACDriver *macp, uint32_t reg, uint32_t value); uint32_t mii_read(MACDriver *macp, uint32_t reg); - void mac_lld_init(void); + bool mac_lld_init(void); void mac_lld_start(MACDriver *macp); void mac_lld_stop(MACDriver *macp); msg_t mac_lld_get_transmit_descriptor(MACDriver *macp, diff --git a/os/hal/src/hal_mac.c b/os/hal/src/hal_mac.c index 1e44be100d..16252a74dd 100644 --- a/os/hal/src/hal_mac.c +++ b/os/hal/src/hal_mac.c @@ -61,9 +61,9 @@ * * @init */ -void macInit(void) { +bool macInit(void) { - mac_lld_init(); + return mac_lld_init(); } /** diff --git a/os/hal/templates/hal_mac_lld.c b/os/hal/templates/hal_mac_lld.c index 5f9fb52921..d469256dde 100644 --- a/os/hal/templates/hal_mac_lld.c +++ b/os/hal/templates/hal_mac_lld.c @@ -66,12 +66,13 @@ MACDriver ETHD1; * * @notapi */ -void mac_lld_init(void) { +bool mac_lld_init(void) { #if PLATFORM_MAC_USE_MAC1 == TRUE /* Driver initialization.*/ macObjectInit(&MACD1); #endif + return true; } /** diff --git a/os/hal/templates/hal_mac_lld.h b/os/hal/templates/hal_mac_lld.h index 1f03092227..5280f2b834 100644 --- a/os/hal/templates/hal_mac_lld.h +++ b/os/hal/templates/hal_mac_lld.h @@ -97,7 +97,7 @@ extern MACDriver ETHD1; #ifdef __cplusplus extern "C" { #endif - void mac_lld_init(void); + bool mac_lld_init(void); void mac_lld_start(MACDriver *macp); void mac_lld_stop(MACDriver *macp); msg_t mac_lld_get_transmit_descriptor(MACDriver *macp, From 349ad50b7dcef561321f87ba5f06730abcd66bda Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 29 May 2023 18:44:34 +1000 Subject: [PATCH 76/87] mac: for ArduPilot don't do macInit() on startup we want to init if networking is enabled --- os/hal/src/hal.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/os/hal/src/hal.c b/os/hal/src/hal.c index df209f41a1..c50868c116 100644 --- a/os/hal/src/hal.c +++ b/os/hal/src/hal.c @@ -98,9 +98,11 @@ void halInit(void) { #if (HAL_USE_EICU == TRUE) || defined(__DOXYGEN__) eicuInit(); #endif +#ifndef _ARDUPILOT_ #if (HAL_USE_MAC == TRUE) || defined(__DOXYGEN__) macInit(); #endif +#endif // _ARDUPILOT_ #if (HAL_USE_PWM == TRUE) || defined(__DOXYGEN__) pwmInit(); #endif From 7c9a38df3f7b96743e4cca78f4c45768de6a9b3c Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Sat, 15 Jul 2023 16:18:43 +1000 Subject: [PATCH 77/87] STM32/LLD/MACv2: add support for external mac buffers --- os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c index f946930f4e..0d07f056ee 100644 --- a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c +++ b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c @@ -124,6 +124,12 @@ MACDriver ETHD1; static const uint8_t default_mac_address[] = {0xAA, 0x55, 0x13, 0x37, 0x01, 0x10}; +#if defined(STM32_ETH_BUFFERS_EXTERN) +extern stm32_eth_rx_descriptor_t *__eth_rd; +extern stm32_eth_tx_descriptor_t *__eth_td; +extern uint32_t *__eth_rb[STM32_MAC_RECEIVE_BUFFERS]; +extern uint32_t *__eth_tb[STM32_MAC_TRANSMIT_BUFFERS]; +#else static stm32_eth_rx_descriptor_t __eth_rd[STM32_MAC_RECEIVE_BUFFERS] __attribute__((aligned(4), __section__(".eth"))); static stm32_eth_tx_descriptor_t __eth_td[STM32_MAC_TRANSMIT_BUFFERS] @@ -133,7 +139,7 @@ static uint32_t __eth_rb[STM32_MAC_RECEIVE_BUFFERS][BUFFER_SIZE] __attribute__((aligned(4), __section__(".eth"))); static uint32_t __eth_tb[STM32_MAC_TRANSMIT_BUFFERS][BUFFER_SIZE] __attribute__((aligned(4), __section__(".eth"))); - +#endif /*===========================================================================*/ /* Driver local functions. */ /*===========================================================================*/ @@ -273,6 +279,10 @@ OSAL_IRQ_HANDLER(STM32_ETH_HANDLER) { bool mac_lld_init(void) { unsigned i; + if (__eth_rb == NULL || __eth_tb == NULL || __eth_rd == NULL || __eth_td == NULL) { + return false; + } + macObjectInit(ÐD1); ETHD1.link_up = false; From 3ef1657d53e643aa61f7268ab4b8596bf6826fdb Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Fri, 28 Jul 2023 12:41:47 +1000 Subject: [PATCH 78/87] lwip_bindings: fix get ip netmask and gateway to use the values from the network interface --- os/various/lwip_bindings/lwipthread.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/os/various/lwip_bindings/lwipthread.c b/os/various/lwip_bindings/lwipthread.c index d3a80c4f20..6c611f3ab4 100644 --- a/os/various/lwip_bindings/lwipthread.c +++ b/os/various/lwip_bindings/lwipthread.c @@ -527,8 +527,8 @@ void lwipReconfigure(const lwipreconf_opts_t *opts) chSemWait(¶ms.completion); } -uint32_t lwipGetIp(void) { return ip.addr; } -uint32_t lwipGetNetmask(void) { return netmask.addr; } -uint32_t lwipGetGateway(void) { return gateway.addr; } +uint32_t lwipGetIp(void) { return thisif.ip_addr.addr; } +uint32_t lwipGetNetmask(void) { return thisif.netmask.addr; } +uint32_t lwipGetGateway(void) { return thisif.gw.addr; } /** @} */ From 44c171d78abe8bb6bed78dc6176a84e83765ce5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 May 2023 03:07:42 +0000 Subject: [PATCH 79/87] Bump requests from 2.26.0 to 2.31.0 in /tools/workflows Bumps [requests](https://github.com/psf/requests) from 2.26.0 to 2.31.0. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.26.0...v2.31.0) --- updated-dependencies: - dependency-name: requests dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- tools/workflows/constraints.txt | 2 +- tools/workflows/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/workflows/constraints.txt b/tools/workflows/constraints.txt index 721a9e98c7..a295a20871 100644 --- a/tools/workflows/constraints.txt +++ b/tools/workflows/constraints.txt @@ -3,6 +3,6 @@ charset-normalizer==2.0.4 idna==3.2 junit-xml==1.9 PyYAML==5.4.1 -requests==2.26.0 +requests==2.31.0 six==1.16.0 urllib3==1.26.6 diff --git a/tools/workflows/requirements.txt b/tools/workflows/requirements.txt index 721a9e98c7..a295a20871 100644 --- a/tools/workflows/requirements.txt +++ b/tools/workflows/requirements.txt @@ -3,6 +3,6 @@ charset-normalizer==2.0.4 idna==3.2 junit-xml==1.9 PyYAML==5.4.1 -requests==2.26.0 +requests==2.31.0 six==1.16.0 urllib3==1.26.6 From 87cfd11dfa2669d7087772c8452901801152b7f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Mar 2023 06:27:48 +0000 Subject: [PATCH 80/87] build(deps): bump certifi in /tools/workflows Bumps [certifi](https://github.com/certifi/python-certifi) from 2021.5.30 to 2022.12.7. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2021.05.30...2022.12.07) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- tools/workflows/constraints.txt | 2 +- tools/workflows/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/workflows/constraints.txt b/tools/workflows/constraints.txt index a295a20871..afa304af5d 100644 --- a/tools/workflows/constraints.txt +++ b/tools/workflows/constraints.txt @@ -1,4 +1,4 @@ -certifi==2021.5.30 +certifi==2022.12.7 charset-normalizer==2.0.4 idna==3.2 junit-xml==1.9 diff --git a/tools/workflows/requirements.txt b/tools/workflows/requirements.txt index a295a20871..afa304af5d 100644 --- a/tools/workflows/requirements.txt +++ b/tools/workflows/requirements.txt @@ -1,4 +1,4 @@ -certifi==2021.5.30 +certifi==2022.12.7 charset-normalizer==2.0.4 idna==3.2 junit-xml==1.9 From 491b2e244260812bbf5a626a17870d4729411460 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 25 Nov 2023 12:50:38 +1100 Subject: [PATCH 81/87] lwip: update to STABLE-2_2_0_RELEASE --- ext/lwip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/lwip b/ext/lwip index 6ca936f6b5..0a0452b2c3 160000 --- a/ext/lwip +++ b/ext/lwip @@ -1 +1 @@ -Subproject commit 6ca936f6b588cee702c638eee75c2436e6cf75de +Subproject commit 0a0452b2c39bdd91e252aef045c115f88f6ca773 From 3241db7d7579228656bb51435af78d8b7ceda0a4 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 25 Nov 2023 12:51:20 +1100 Subject: [PATCH 82/87] lwip: enable IGMP in netif if enabled in options --- os/various/lwip_bindings/lwipthread.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/os/various/lwip_bindings/lwipthread.c b/os/various/lwip_bindings/lwipthread.c index 6c611f3ab4..db39863829 100644 --- a/os/various/lwip_bindings/lwipthread.c +++ b/os/various/lwip_bindings/lwipthread.c @@ -106,6 +106,12 @@ static void low_level_init(struct netif *netif) { /* don't set NETIF_FLAG_ETHARP if this device is not an Ethernet one */ netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; +#if LWIP_IGMP + // also enable multicast + netif->flags |= NETIF_FLAG_IGMP; +#endif + + /* Do whatever else is needed to initialize interface. */ } From d8c45abde5fb398ef9da6fc8fc36992f2ae7b15c Mon Sep 17 00:00:00 2001 From: gdisirio Date: Tue, 28 Nov 2023 09:00:52 +0000 Subject: [PATCH 83/87] Static link settings. git-svn-id: https://svn.code.sf.net/p/chibios/code/trunk@16423 085d63ac-f8f8-4fb4-a5e5-c089fd4f3ff4 --- os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c | 16 ++++++++++++++++ os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c index 0d07f056ee..675d62bc76 100644 --- a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c +++ b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.c @@ -651,6 +651,7 @@ void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp) { * @notapi */ bool mac_lld_poll_link_status(MACDriver *macp) { +#if STM32_MAC_PHY_LINK_TYPE == MAC_LINK_DYNAMIC uint32_t maccr, bmsr, bmcr; maccr = ETH->MACCR; @@ -702,6 +703,21 @@ bool mac_lld_poll_link_status(MACDriver *macp) { maccr &= ~ETH_MACCR_DM; } +#elif STM32_MAC_PHY_LINK_TYPE == MAC_LINK_100_FULLDUPLEX + uint32_t maccr = ETH->MACCR; + + maccr |= ETH_MACCR_FES; + maccr |= ETH_MACCR_DM; + +#elif STM32_MAC_PHY_LINK_TYPE == MACLINK_10_FULLDUPLEX + uint32_t maccr = ETH->MACCR; + + maccr &= ~ETH_MACCR_FES; + maccr |= ETH_MACCR_DM; +#else +#error "invalid STM32_MAC_PHY_LINK_TYPE" +#endif + /* Changes the mode in the MAC.*/ ETH->MACCR = maccr; diff --git a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h index c7cb35eee3..8b87857089 100644 --- a/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h +++ b/os/hal/ports/STM32/LLD/MACv2/hal_mac_lld.h @@ -129,6 +129,15 @@ #define STM32_TDES3_FL 0x00007FFF /** @} */ +/** + * @name Link types + * @{ + */ +#define MAC_LINK_DYNAMIC 0 +#define MAC_LINK_100_FULLDUPLEX 1 +#define MACLINK_10_FULLDUPLEX 2 +/** @} */ + /*===========================================================================*/ /* Driver pre-compile time settings. */ /*===========================================================================*/ @@ -200,6 +209,13 @@ #if !defined(STM32_MAC_IP_CHECKSUM_OFFLOAD) || defined(__DOXYGEN__) #define STM32_MAC_IP_CHECKSUM_OFFLOAD 0 #endif + +/** + * @brief Link connection type. + */ +#if !defined(STM32_MAC_PHY_LINK_TYPE) || defined(__DOXYGEN__) +#define STM32_MAC_PHY_LINK_TYPE MAC_LINK_DYNAMIC +#endif /** @} */ /*===========================================================================*/ From 6a85082c715457d1e0cc9627f9939f349de1143e Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 25 Dec 2023 14:33:16 +1100 Subject: [PATCH 84/87] Remove lwip --- .gitmodules | 3 --- ext/lwip | 1 - 2 files changed, 4 deletions(-) delete mode 160000 ext/lwip diff --git a/.gitmodules b/.gitmodules index 7165073cc5..e69de29bb2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "ext/lwip"] - path = ext/lwip - url = https://github.com/ArduPilot/lwip.git diff --git a/ext/lwip b/ext/lwip deleted file mode 160000 index 0a0452b2c3..0000000000 --- a/ext/lwip +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0a0452b2c39bdd91e252aef045c115f88f6ca773 From cc37d7f2f772c5eb7c17225c6467cc2ce4c49b29 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 28 Jan 2024 13:42:04 +1100 Subject: [PATCH 85/87] STM32H7: fixed build for STM32H7A3 and STM32H7B3 MCUs --- os/hal/ports/STM32/STM32H7xx/stm32_registry.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/hal/ports/STM32/STM32H7xx/stm32_registry.h b/os/hal/ports/STM32/STM32H7xx/stm32_registry.h index 788b474e3b..f1683af836 100644 --- a/os/hal/ports/STM32/STM32H7xx/stm32_registry.h +++ b/os/hal/ports/STM32/STM32H7xx/stm32_registry.h @@ -610,7 +610,7 @@ defined(__DOXYGEN__) /* ADC attributes.*/ -#define STM32_ADC_RENAMED_REGS TRUE +#define STM32_ADC_RENAMED_REGS FALSE #define STM32_HAS_ADC1 TRUE #define STM32_HAS_ADC2 TRUE #define STM32_HAS_ADC3 FALSE /* NOT an error, it is a different ADC type.*/ From 9061fd6a2f8a958a29e6e74a65643fa7e5491dab Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Mon, 12 Feb 2024 21:42:42 +0000 Subject: [PATCH 86/87] hal: add DP83825I for ethernet --- os/hal/include/hal_mii.h | 1 + 1 file changed, 1 insertion(+) diff --git a/os/hal/include/hal_mii.h b/os/hal/include/hal_mii.h index d62c1b8087..1d4084c972 100644 --- a/os/hal/include/hal_mii.h +++ b/os/hal/include/hal_mii.h @@ -170,6 +170,7 @@ #define MII_LAN8720_ID 0x0007C0F0 #define MII_LAN8742A_ID 0x0007C130 #define MII_LAN8740A_ID 0x0007C110 +#define MII_DP83825I_ID 0x2000A140 /** @} */ #endif /* MII_H */ From f3922abdfe5527b81ff37f7df3db69b5aeb57e42 Mon Sep 17 00:00:00 2001 From: Andy Little Date: Wed, 28 Feb 2024 12:28:08 +0000 Subject: [PATCH 87/87] Chibios: change shebangs to python3 . See https://discuss.ardupilot.org/t/waf-update-waf-submodule-to-ardupilot-waf-master-user-setup-errror --- tools/workflows/find.py | 2 +- tools/workflows/make.py | 2 +- tools/workflows/report.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/workflows/find.py b/tools/workflows/find.py index 292346497a..7cff188f2c 100755 --- a/tools/workflows/find.py +++ b/tools/workflows/find.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Finds all makefile projects in the given directories and allows to exclude diff --git a/tools/workflows/make.py b/tools/workflows/make.py index 4c90094ff5..a1ddfcaaf7 100755 --- a/tools/workflows/make.py +++ b/tools/workflows/make.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ This script is intended to be used to run make under supervision for diff --git a/tools/workflows/report.py b/tools/workflows/report.py index 9509386ede..627c9402d1 100755 --- a/tools/workflows/report.py +++ b/tools/workflows/report.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Scan test results directory and report status."""